neuron-inspector 0.7.1 → 0.8.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.
Files changed (99) hide show
  1. package/dist/compound-tools.js +2 -136
  2. package/dist/compound-tools.js.map +1 -1
  3. package/dist/monitor.js +208 -7
  4. package/dist/monitor.js.map +1 -1
  5. package/dist/recipe-tools.js +6 -39
  6. package/dist/recipe-tools.js.map +1 -1
  7. package/dist/recipes.d.ts +0 -4
  8. package/dist/recipes.js +3 -49
  9. package/dist/recipes.js.map +1 -1
  10. package/dist/server.js +53 -175
  11. package/dist/server.js.map +1 -1
  12. package/dist/tools.js +0 -26
  13. package/dist/tools.js.map +1 -1
  14. package/package.json +3 -4
  15. package/recipes/linkedin-outreach/learnings.md +1 -17
  16. package/recipes/planner/agent.md +1 -66
  17. package/recipes/planner/learnings.md +1 -49
  18. package/recipes/social-ops/learnings.md +13 -33
  19. package/dist/__tests__/monitor.test.d.ts +0 -1
  20. package/dist/__tests__/monitor.test.js +0 -286
  21. package/dist/__tests__/monitor.test.js.map +0 -1
  22. package/dist/__tests__/recipes.test.d.ts +0 -1
  23. package/dist/__tests__/recipes.test.js +0 -415
  24. package/dist/__tests__/recipes.test.js.map +0 -1
  25. package/dist/__tests__/scheduler.test.d.ts +0 -1
  26. package/dist/__tests__/scheduler.test.js +0 -316
  27. package/dist/__tests__/scheduler.test.js.map +0 -1
  28. package/dist/__tests__/session-state.test.d.ts +0 -1
  29. package/dist/__tests__/session-state.test.js +0 -335
  30. package/dist/__tests__/session-state.test.js.map +0 -1
  31. package/dist/collections/__tests__/assertions.test.d.ts +0 -1
  32. package/dist/collections/__tests__/assertions.test.js +0 -203
  33. package/dist/collections/__tests__/assertions.test.js.map +0 -1
  34. package/dist/collections/__tests__/dynamic-vars.test.d.ts +0 -1
  35. package/dist/collections/__tests__/dynamic-vars.test.js +0 -169
  36. package/dist/collections/__tests__/dynamic-vars.test.js.map +0 -1
  37. package/dist/collections/__tests__/execution.test.d.ts +0 -1
  38. package/dist/collections/__tests__/execution.test.js +0 -271
  39. package/dist/collections/__tests__/execution.test.js.map +0 -1
  40. package/dist/collections/__tests__/integration.test.d.ts +0 -1
  41. package/dist/collections/__tests__/integration.test.js +0 -478
  42. package/dist/collections/__tests__/integration.test.js.map +0 -1
  43. package/dist/collections/__tests__/resolver.test.d.ts +0 -1
  44. package/dist/collections/__tests__/resolver.test.js +0 -282
  45. package/dist/collections/__tests__/resolver.test.js.map +0 -1
  46. package/dist/collections/__tests__/scenario.test.d.ts +0 -1
  47. package/dist/collections/__tests__/scenario.test.js +0 -367
  48. package/dist/collections/__tests__/scenario.test.js.map +0 -1
  49. package/dist/collections/__tests__/scripts.test.d.ts +0 -1
  50. package/dist/collections/__tests__/scripts.test.js +0 -245
  51. package/dist/collections/__tests__/scripts.test.js.map +0 -1
  52. package/dist/collections/__tests__/store.test.d.ts +0 -1
  53. package/dist/collections/__tests__/store.test.js +0 -313
  54. package/dist/collections/__tests__/store.test.js.map +0 -1
  55. package/dist/collections/assertions.d.ts +0 -16
  56. package/dist/collections/assertions.js +0 -107
  57. package/dist/collections/assertions.js.map +0 -1
  58. package/dist/collections/dynamic-vars.d.ts +0 -75
  59. package/dist/collections/dynamic-vars.js +0 -187
  60. package/dist/collections/dynamic-vars.js.map +0 -1
  61. package/dist/collections/executor.d.ts +0 -100
  62. package/dist/collections/executor.js +0 -301
  63. package/dist/collections/executor.js.map +0 -1
  64. package/dist/collections/http.d.ts +0 -9
  65. package/dist/collections/http.js +0 -194
  66. package/dist/collections/http.js.map +0 -1
  67. package/dist/collections/index.d.ts +0 -12
  68. package/dist/collections/index.js +0 -27
  69. package/dist/collections/index.js.map +0 -1
  70. package/dist/collections/postman.d.ts +0 -10
  71. package/dist/collections/postman.js +0 -288
  72. package/dist/collections/postman.js.map +0 -1
  73. package/dist/collections/resolver.d.ts +0 -74
  74. package/dist/collections/resolver.js +0 -330
  75. package/dist/collections/resolver.js.map +0 -1
  76. package/dist/collections/scripts.d.ts +0 -20
  77. package/dist/collections/scripts.js +0 -225
  78. package/dist/collections/scripts.js.map +0 -1
  79. package/dist/collections/store.d.ts +0 -68
  80. package/dist/collections/store.js +0 -507
  81. package/dist/collections/store.js.map +0 -1
  82. package/dist/collections/tools.d.ts +0 -8
  83. package/dist/collections/tools.js +0 -1276
  84. package/dist/collections/tools.js.map +0 -1
  85. package/dist/collections/types.d.ts +0 -226
  86. package/dist/collections/types.js +0 -3
  87. package/dist/collections/types.js.map +0 -1
  88. package/dist/killswitch.d.ts +0 -8
  89. package/dist/killswitch.js +0 -304
  90. package/dist/killswitch.js.map +0 -1
  91. package/dist/resilience.d.ts +0 -112
  92. package/dist/resilience.js +0 -319
  93. package/dist/resilience.js.map +0 -1
  94. package/recipes/autopilot/agent.md +0 -316
  95. package/recipes/autopilot/learnings.md +0 -33
  96. package/recipes/autopilot/recipe.yaml +0 -96
  97. package/recipes/inbox-responder/agent.md +0 -268
  98. package/recipes/inbox-responder/learnings.md +0 -25
  99. package/recipes/inbox-responder/recipe.yaml +0 -82
@@ -1,68 +0,0 @@
1
- import type { Collection, CollectionStore, CollectionSummary, Defaults, Endpoint, Folder, ScenarioStep } from "./types.js";
2
- /** Slugify a string: lowercase, replace non-alphanumeric with hyphens, collapse runs, trim. */
3
- export declare function slugify(input: string): string;
4
- /** Generate a human-readable name from method + path. */
5
- export declare function generateEndpointName(method: string, path: string): string;
6
- export declare class YamlCollectionStore implements CollectionStore {
7
- private globalDir;
8
- private projectDir;
9
- constructor(globalDir?: string, projectDir?: string);
10
- private ensureDir;
11
- private scanDir;
12
- list(): Promise<CollectionSummary[]>;
13
- resolve(id: string): Promise<{
14
- path: string;
15
- location: "global" | "project";
16
- } | null>;
17
- get(id: string): Promise<{
18
- collection: Collection;
19
- summary: CollectionSummary;
20
- } | null>;
21
- save(id: string, collection: Collection, location?: "global" | "project"): Promise<string>;
22
- delete(id: string): Promise<boolean>;
23
- upsertEndpoint(id: string, folderName: string, endpoint: Partial<Endpoint> & {
24
- method: string;
25
- path: string;
26
- }): Promise<{
27
- action: "created" | "updated";
28
- collection: Collection;
29
- }>;
30
- removeEndpoint(id: string, folderName: string, method: string, path: string): Promise<Collection>;
31
- moveEndpoint(id: string, fromFolder: string, toFolder: string, method: string, path: string): Promise<Collection>;
32
- setEnvironment(id: string, envName: string, env: {
33
- base_url: string;
34
- variables?: Record<string, string>;
35
- headers?: Record<string, string>;
36
- timeout_ms?: number;
37
- }): Promise<Collection>;
38
- removeEnvironment(id: string, envName: string): Promise<Collection>;
39
- switchEnvironment(id: string, envName: string): Promise<Collection>;
40
- updateMetadata(id: string, updates: {
41
- name?: string;
42
- description?: string;
43
- version?: string;
44
- }): Promise<Collection>;
45
- setDefaults(id: string, defaults: Partial<Defaults>): Promise<Collection>;
46
- createFolder(id: string, folderName: string, meta?: {
47
- description?: string;
48
- headers?: Record<string, string>;
49
- variables?: Record<string, string>;
50
- auth?: Folder["auth"];
51
- }): Promise<Collection>;
52
- updateFolder(id: string, folderName: string, updates: {
53
- description?: string;
54
- headers?: Record<string, string>;
55
- variables?: Record<string, string>;
56
- auth?: Folder["auth"] | null;
57
- }): Promise<Collection>;
58
- deleteFolder(id: string, folderName: string): Promise<Collection>;
59
- createScenario(id: string, scenarioName: string, scenario: {
60
- description?: string;
61
- steps: ScenarioStep[];
62
- }): Promise<Collection>;
63
- updateScenario(id: string, scenarioName: string, updates: {
64
- description?: string;
65
- steps?: ScenarioStep[];
66
- }): Promise<Collection>;
67
- deleteScenario(id: string, scenarioName: string): Promise<Collection>;
68
- }
@@ -1,507 +0,0 @@
1
- import { homedir } from "node:os";
2
- import { join } from "node:path";
3
- import { readFile, writeFile, mkdir, readdir, unlink } from "node:fs/promises";
4
- import { existsSync } from "node:fs";
5
- import * as YAML from "yaml";
6
- // ── Helpers ─────────────────────────────────────────────────────
7
- /** Slugify a string: lowercase, replace non-alphanumeric with hyphens, collapse runs, trim. */
8
- export function slugify(input) {
9
- return input
10
- .toLowerCase()
11
- .replace(/[^a-z0-9]+/g, "-")
12
- .replace(/^-+|-+$/g, "");
13
- }
14
- /** Count all endpoints across all folders in a collection. */
15
- function countEndpoints(c) {
16
- if (!c.folders)
17
- return 0;
18
- return Object.values(c.folders).reduce((sum, f) => sum + (f.endpoints?.length ?? 0), 0);
19
- }
20
- /** Generate a human-readable name from method + path. */
21
- export function generateEndpointName(method, path) {
22
- // Strip variable placeholders and leading/trailing slashes
23
- const clean = path
24
- .replace(/\{\{[^}]+\}\}/g, "")
25
- .replace(/^\/+|\/+$/g, "");
26
- // Take the last meaningful segment
27
- const segments = clean.split("/").filter(Boolean);
28
- const last = segments[segments.length - 1] ?? "root";
29
- // Title-case method + last segment
30
- const title = last.replace(/[-_]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
31
- const methodTitle = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();
32
- return `${methodTitle} ${title}`.trim();
33
- }
34
- /** Validate that an object looks like a Collection. Returns an error message or null. */
35
- function validateCollection(obj) {
36
- if (typeof obj !== "object" || obj === null)
37
- return "Collection must be an object";
38
- const c = obj;
39
- if (typeof c.name !== "string" || !c.name)
40
- return "Collection must have a non-empty 'name' string";
41
- if (c.folders !== undefined) {
42
- if (typeof c.folders !== "object" || c.folders === null)
43
- return "'folders' must be an object";
44
- for (const [key, folder] of Object.entries(c.folders)) {
45
- if (typeof folder !== "object" || folder === null)
46
- return `Folder '${key}' must be an object`;
47
- const f = folder;
48
- if (f.endpoints !== undefined && !Array.isArray(f.endpoints)) {
49
- return `Folder '${key}' endpoints must be an array`;
50
- }
51
- if (Array.isArray(f.endpoints)) {
52
- for (let i = 0; i < f.endpoints.length; i++) {
53
- const ep = f.endpoints[i];
54
- if (typeof ep !== "object" || ep === null)
55
- return `Folder '${key}' endpoint[${i}] must be an object`;
56
- if (typeof ep.method !== "string")
57
- return `Folder '${key}' endpoint[${i}] must have a 'method' string`;
58
- if (typeof ep.path !== "string")
59
- return `Folder '${key}' endpoint[${i}] must have a 'path' string`;
60
- }
61
- }
62
- }
63
- }
64
- if (c.environments !== undefined) {
65
- if (typeof c.environments !== "object" || c.environments === null)
66
- return "'environments' must be an object";
67
- for (const [key, env] of Object.entries(c.environments)) {
68
- if (typeof env !== "object" || env === null)
69
- return `Environment '${key}' must be an object`;
70
- const e = env;
71
- if (typeof e.base_url !== "string")
72
- return `Environment '${key}' must have a 'base_url' string`;
73
- }
74
- }
75
- if (c.scenarios !== undefined) {
76
- if (typeof c.scenarios !== "object" || c.scenarios === null)
77
- return "'scenarios' must be an object";
78
- for (const [key, scenario] of Object.entries(c.scenarios)) {
79
- if (typeof scenario !== "object" || scenario === null)
80
- return `Scenario '${key}' must be an object`;
81
- const s = scenario;
82
- if (!Array.isArray(s.steps))
83
- return `Scenario '${key}' must have a 'steps' array`;
84
- }
85
- }
86
- return null;
87
- }
88
- // ── YamlCollectionStore ─────────────────────────────────────────
89
- export class YamlCollectionStore {
90
- globalDir;
91
- projectDir;
92
- constructor(globalDir, projectDir) {
93
- this.globalDir = globalDir ?? join(homedir(), ".neuron", "collections");
94
- this.projectDir = projectDir ?? join(process.cwd(), ".neuron", "collections");
95
- }
96
- async ensureDir(dir) {
97
- if (!existsSync(dir)) {
98
- await mkdir(dir, { recursive: true });
99
- }
100
- }
101
- async scanDir(dir, location) {
102
- if (!existsSync(dir))
103
- return [];
104
- const files = await readdir(dir);
105
- const results = [];
106
- for (const file of files) {
107
- if (!file.endsWith(".yaml") && !file.endsWith(".yml"))
108
- continue;
109
- const id = file.replace(/\.(yaml|yml)$/, "");
110
- const path = join(dir, file);
111
- try {
112
- const content = await readFile(path, "utf-8");
113
- const c = YAML.parse(content);
114
- if (!c || typeof c.name !== "string")
115
- continue;
116
- results.push({
117
- id,
118
- name: c.name,
119
- location,
120
- path,
121
- folder_count: c.folders ? Object.keys(c.folders).length : 0,
122
- endpoint_count: countEndpoints(c),
123
- environment_count: c.environments ? Object.keys(c.environments).length : 0,
124
- scenario_count: c.scenarios ? Object.keys(c.scenarios).length : 0,
125
- });
126
- }
127
- catch {
128
- // Skip files that can't be parsed
129
- }
130
- }
131
- return results;
132
- }
133
- async list() {
134
- const [global, project] = await Promise.all([
135
- this.scanDir(this.globalDir, "global"),
136
- this.scanDir(this.projectDir, "project"),
137
- ]);
138
- // Project-local wins on name collision
139
- const seen = new Set();
140
- const merged = [];
141
- for (const s of project) {
142
- seen.add(s.id);
143
- merged.push(s);
144
- }
145
- for (const s of global) {
146
- if (!seen.has(s.id))
147
- merged.push(s);
148
- }
149
- return merged;
150
- }
151
- async resolve(id) {
152
- // Project-local first
153
- for (const ext of [".yaml", ".yml"]) {
154
- const projectPath = join(this.projectDir, `${id}${ext}`);
155
- if (existsSync(projectPath))
156
- return { path: projectPath, location: "project" };
157
- }
158
- for (const ext of [".yaml", ".yml"]) {
159
- const globalPath = join(this.globalDir, `${id}${ext}`);
160
- if (existsSync(globalPath))
161
- return { path: globalPath, location: "global" };
162
- }
163
- return null;
164
- }
165
- async get(id) {
166
- const resolved = await this.resolve(id);
167
- if (!resolved)
168
- return null;
169
- const content = await readFile(resolved.path, "utf-8");
170
- let parsed;
171
- try {
172
- parsed = YAML.parse(content);
173
- }
174
- catch (e) {
175
- const msg = e instanceof Error ? e.message : String(e);
176
- throw new Error(`Failed to parse collection '${id}': ${msg}`);
177
- }
178
- const err = validateCollection(parsed);
179
- if (err)
180
- throw new Error(`Invalid collection '${id}': ${err}`);
181
- const c = parsed;
182
- return {
183
- collection: c,
184
- summary: {
185
- id,
186
- name: c.name,
187
- location: resolved.location,
188
- path: resolved.path,
189
- folder_count: c.folders ? Object.keys(c.folders).length : 0,
190
- endpoint_count: countEndpoints(c),
191
- environment_count: c.environments ? Object.keys(c.environments).length : 0,
192
- scenario_count: c.scenarios ? Object.keys(c.scenarios).length : 0,
193
- },
194
- };
195
- }
196
- async save(id, collection, location = "global") {
197
- const err = validateCollection(collection);
198
- if (err)
199
- throw new Error(`Cannot save collection '${id}': ${err}`);
200
- const dir = location === "project" ? this.projectDir : this.globalDir;
201
- await this.ensureDir(dir);
202
- const filePath = join(dir, `${id}.yaml`);
203
- const content = YAML.stringify(collection, { lineWidth: 120 });
204
- await writeFile(filePath, content, "utf-8");
205
- return filePath;
206
- }
207
- async delete(id) {
208
- const resolved = await this.resolve(id);
209
- if (!resolved)
210
- return false;
211
- await unlink(resolved.path);
212
- return true;
213
- }
214
- // ── Endpoint operations ─────────────────────────────────────
215
- async upsertEndpoint(id, folderName, endpoint) {
216
- const result = await this.get(id);
217
- if (!result)
218
- throw new Error(`Collection '${id}' not found`);
219
- const { collection } = result;
220
- const folderKey = slugify(folderName);
221
- if (!collection.folders)
222
- collection.folders = {};
223
- if (!collection.folders[folderKey]) {
224
- collection.folders[folderKey] = { endpoints: [] };
225
- }
226
- const folder = collection.folders[folderKey];
227
- if (!folder.endpoints)
228
- folder.endpoints = [];
229
- const method = endpoint.method.toUpperCase();
230
- const idx = folder.endpoints.findIndex((ep) => ep.method.toUpperCase() === method && ep.path === endpoint.path);
231
- const full = {
232
- name: endpoint.name ?? generateEndpointName(method, endpoint.path),
233
- method,
234
- path: endpoint.path,
235
- ...(endpoint.description !== undefined && { description: endpoint.description }),
236
- ...(endpoint.headers !== undefined && { headers: endpoint.headers }),
237
- ...(endpoint.cookies !== undefined && { cookies: endpoint.cookies }),
238
- ...(endpoint.body !== undefined && { body: endpoint.body }),
239
- ...(endpoint.body_mode !== undefined && { body_mode: endpoint.body_mode }),
240
- ...(endpoint.variables !== undefined && { variables: endpoint.variables }),
241
- ...(endpoint.tests !== undefined && { tests: endpoint.tests }),
242
- ...(endpoint.extract !== undefined && { extract: endpoint.extract }),
243
- ...(endpoint.pre_request !== undefined && { pre_request: endpoint.pre_request }),
244
- ...(endpoint.post_response !== undefined && { post_response: endpoint.post_response }),
245
- ...(endpoint.auth !== undefined && { auth: endpoint.auth }),
246
- ...(endpoint.tags !== undefined && { tags: endpoint.tags }),
247
- ...(endpoint.timeout_ms !== undefined && { timeout_ms: endpoint.timeout_ms }),
248
- ...(endpoint.settings !== undefined && { settings: endpoint.settings }),
249
- };
250
- let action;
251
- if (idx >= 0) {
252
- // Merge: keep existing fields, overlay provided ones
253
- const existing = folder.endpoints[idx];
254
- folder.endpoints[idx] = { ...existing, ...full };
255
- action = "updated";
256
- }
257
- else {
258
- folder.endpoints.push(full);
259
- action = "created";
260
- }
261
- const resolved = await this.resolve(id);
262
- await this.save(id, collection, resolved?.location ?? "global");
263
- return { action, collection };
264
- }
265
- async removeEndpoint(id, folderName, method, path) {
266
- const result = await this.get(id);
267
- if (!result)
268
- throw new Error(`Collection '${id}' not found`);
269
- const { collection } = result;
270
- const folderKey = slugify(folderName);
271
- const folder = collection.folders?.[folderKey];
272
- if (!folder?.endpoints)
273
- throw new Error(`Folder '${folderName}' not found in collection '${id}'`);
274
- const upperMethod = method.toUpperCase();
275
- const idx = folder.endpoints.findIndex((ep) => ep.method.toUpperCase() === upperMethod && ep.path === path);
276
- if (idx < 0) {
277
- throw new Error(`Endpoint ${method} ${path} not found in folder '${folderName}'`);
278
- }
279
- folder.endpoints.splice(idx, 1);
280
- const resolved = await this.resolve(id);
281
- await this.save(id, collection, resolved?.location ?? "global");
282
- return collection;
283
- }
284
- async moveEndpoint(id, fromFolder, toFolder, method, path) {
285
- const result = await this.get(id);
286
- if (!result)
287
- throw new Error(`Collection '${id}' not found`);
288
- const { collection } = result;
289
- const fromKey = slugify(fromFolder);
290
- const toKey = slugify(toFolder);
291
- const srcFolder = collection.folders?.[fromKey];
292
- if (!srcFolder?.endpoints) {
293
- throw new Error(`Source folder '${fromFolder}' not found in collection '${id}'`);
294
- }
295
- const upperMethod = method.toUpperCase();
296
- const idx = srcFolder.endpoints.findIndex((ep) => ep.method.toUpperCase() === upperMethod && ep.path === path);
297
- if (idx < 0) {
298
- throw new Error(`Endpoint ${method} ${path} not found in folder '${fromFolder}'`);
299
- }
300
- const [endpoint] = srcFolder.endpoints.splice(idx, 1);
301
- if (!collection.folders)
302
- collection.folders = {};
303
- if (!collection.folders[toKey]) {
304
- collection.folders[toKey] = { endpoints: [] };
305
- }
306
- if (!collection.folders[toKey].endpoints) {
307
- collection.folders[toKey].endpoints = [];
308
- }
309
- collection.folders[toKey].endpoints.push(endpoint);
310
- const resolved = await this.resolve(id);
311
- await this.save(id, collection, resolved?.location ?? "global");
312
- return collection;
313
- }
314
- // ── Environment operations ──────────────────────────────────
315
- async setEnvironment(id, envName, env) {
316
- const result = await this.get(id);
317
- if (!result)
318
- throw new Error(`Collection '${id}' not found`);
319
- const { collection } = result;
320
- const envKey = slugify(envName);
321
- if (!collection.environments)
322
- collection.environments = {};
323
- collection.environments[envKey] = env;
324
- const resolved = await this.resolve(id);
325
- await this.save(id, collection, resolved?.location ?? "global");
326
- return collection;
327
- }
328
- async removeEnvironment(id, envName) {
329
- const result = await this.get(id);
330
- if (!result)
331
- throw new Error(`Collection '${id}' not found`);
332
- const { collection } = result;
333
- const envKey = slugify(envName);
334
- if (!collection.environments?.[envKey]) {
335
- throw new Error(`Environment '${envName}' not found in collection '${id}'`);
336
- }
337
- delete collection.environments[envKey];
338
- if (collection.active_environment === envKey) {
339
- collection.active_environment = undefined;
340
- }
341
- const resolved = await this.resolve(id);
342
- await this.save(id, collection, resolved?.location ?? "global");
343
- return collection;
344
- }
345
- async switchEnvironment(id, envName) {
346
- const result = await this.get(id);
347
- if (!result)
348
- throw new Error(`Collection '${id}' not found`);
349
- const { collection } = result;
350
- const envKey = slugify(envName);
351
- if (!collection.environments?.[envKey]) {
352
- throw new Error(`Environment '${envName}' not found in collection '${id}'`);
353
- }
354
- collection.active_environment = envKey;
355
- const resolved = await this.resolve(id);
356
- await this.save(id, collection, resolved?.location ?? "global");
357
- return collection;
358
- }
359
- // ── Collection metadata ────────────────────────────────────
360
- async updateMetadata(id, updates) {
361
- const result = await this.get(id);
362
- if (!result)
363
- throw new Error(`Collection '${id}' not found`);
364
- const { collection } = result;
365
- if (updates.name !== undefined)
366
- collection.name = updates.name;
367
- if (updates.description !== undefined)
368
- collection.description = updates.description || undefined;
369
- if (updates.version !== undefined)
370
- collection.version = updates.version || undefined;
371
- const resolved = await this.resolve(id);
372
- await this.save(id, collection, resolved?.location ?? "global");
373
- return collection;
374
- }
375
- // ── Defaults operations ────────────────────────────────────
376
- async setDefaults(id, defaults) {
377
- const result = await this.get(id);
378
- if (!result)
379
- throw new Error(`Collection '${id}' not found`);
380
- const { collection } = result;
381
- if (!collection.defaults)
382
- collection.defaults = {};
383
- Object.assign(collection.defaults, defaults);
384
- // Clean undefined keys
385
- for (const key of Object.keys(collection.defaults)) {
386
- if (collection.defaults[key] === undefined || collection.defaults[key] === null) {
387
- delete collection.defaults[key];
388
- }
389
- }
390
- if (Object.keys(collection.defaults).length === 0) {
391
- collection.defaults = undefined;
392
- }
393
- const resolved = await this.resolve(id);
394
- await this.save(id, collection, resolved?.location ?? "global");
395
- return collection;
396
- }
397
- // ── Folder operations ──────────────────────────────────────
398
- async createFolder(id, folderName, meta) {
399
- const result = await this.get(id);
400
- if (!result)
401
- throw new Error(`Collection '${id}' not found`);
402
- const { collection } = result;
403
- const folderKey = slugify(folderName);
404
- if (!collection.folders)
405
- collection.folders = {};
406
- if (collection.folders[folderKey]) {
407
- throw new Error(`Folder '${folderName}' already exists in collection '${id}'`);
408
- }
409
- const folder = { endpoints: [] };
410
- if (meta?.description)
411
- folder.description = meta.description;
412
- if (meta?.headers && Object.keys(meta.headers).length)
413
- folder.headers = meta.headers;
414
- if (meta?.variables && Object.keys(meta.variables).length)
415
- folder.variables = meta.variables;
416
- if (meta?.auth)
417
- folder.auth = meta.auth;
418
- collection.folders[folderKey] = folder;
419
- const resolved = await this.resolve(id);
420
- await this.save(id, collection, resolved?.location ?? "global");
421
- return collection;
422
- }
423
- async updateFolder(id, folderName, updates) {
424
- const result = await this.get(id);
425
- if (!result)
426
- throw new Error(`Collection '${id}' not found`);
427
- const { collection } = result;
428
- const folderKey = slugify(folderName);
429
- const folder = collection.folders?.[folderKey];
430
- if (!folder)
431
- throw new Error(`Folder '${folderName}' not found in collection '${id}'`);
432
- if (updates.description !== undefined)
433
- folder.description = updates.description || undefined;
434
- if (updates.headers !== undefined)
435
- folder.headers = Object.keys(updates.headers).length ? updates.headers : undefined;
436
- if (updates.variables !== undefined)
437
- folder.variables = Object.keys(updates.variables).length ? updates.variables : undefined;
438
- if (updates.auth !== undefined)
439
- folder.auth = updates.auth === null ? undefined : updates.auth;
440
- const resolved = await this.resolve(id);
441
- await this.save(id, collection, resolved?.location ?? "global");
442
- return collection;
443
- }
444
- async deleteFolder(id, folderName) {
445
- const result = await this.get(id);
446
- if (!result)
447
- throw new Error(`Collection '${id}' not found`);
448
- const { collection } = result;
449
- const folderKey = slugify(folderName);
450
- if (!collection.folders?.[folderKey]) {
451
- throw new Error(`Folder '${folderName}' not found in collection '${id}'`);
452
- }
453
- delete collection.folders[folderKey];
454
- const resolved = await this.resolve(id);
455
- await this.save(id, collection, resolved?.location ?? "global");
456
- return collection;
457
- }
458
- // ── Scenario operations ────────────────────────────────────
459
- async createScenario(id, scenarioName, scenario) {
460
- const result = await this.get(id);
461
- if (!result)
462
- throw new Error(`Collection '${id}' not found`);
463
- const { collection } = result;
464
- if (!collection.scenarios)
465
- collection.scenarios = {};
466
- if (collection.scenarios[scenarioName]) {
467
- throw new Error(`Scenario '${scenarioName}' already exists in collection '${id}'`);
468
- }
469
- const s = { steps: scenario.steps };
470
- if (scenario.description)
471
- s.description = scenario.description;
472
- collection.scenarios[scenarioName] = s;
473
- const resolved = await this.resolve(id);
474
- await this.save(id, collection, resolved?.location ?? "global");
475
- return collection;
476
- }
477
- async updateScenario(id, scenarioName, updates) {
478
- const result = await this.get(id);
479
- if (!result)
480
- throw new Error(`Collection '${id}' not found`);
481
- const { collection } = result;
482
- const scenario = collection.scenarios?.[scenarioName];
483
- if (!scenario)
484
- throw new Error(`Scenario '${scenarioName}' not found in collection '${id}'`);
485
- if (updates.description !== undefined)
486
- scenario.description = updates.description || undefined;
487
- if (updates.steps !== undefined)
488
- scenario.steps = updates.steps;
489
- const resolved = await this.resolve(id);
490
- await this.save(id, collection, resolved?.location ?? "global");
491
- return collection;
492
- }
493
- async deleteScenario(id, scenarioName) {
494
- const result = await this.get(id);
495
- if (!result)
496
- throw new Error(`Collection '${id}' not found`);
497
- const { collection } = result;
498
- if (!collection.scenarios?.[scenarioName]) {
499
- throw new Error(`Scenario '${scenarioName}' not found in collection '${id}'`);
500
- }
501
- delete collection.scenarios[scenarioName];
502
- const resolved = await this.resolve(id);
503
- await this.save(id, collection, resolved?.location ?? "global");
504
- return collection;
505
- }
506
- }
507
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/collections/store.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { CollectionStore, HttpExecutor, ResolverStep, AssertionEvaluator, ScriptRunner } from "./types.js";
2
- export interface CollectionToolDef {
3
- name: string;
4
- description: string;
5
- inputSchema: Record<string, unknown>;
6
- }
7
- export declare function buildCollectionTools(): CollectionToolDef[];
8
- export declare function buildCollectionHandler(store: CollectionStore, httpExecutor?: HttpExecutor, pipeline?: ResolverStep[], assertionEvaluator?: AssertionEvaluator, scriptRunner?: ScriptRunner): (name: string, args: Record<string, unknown>) => Promise<unknown>;