@herdctl/core 5.5.0 → 5.6.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 (119) hide show
  1. package/dist/config/index.d.ts +1 -1
  2. package/dist/config/index.d.ts.map +1 -1
  3. package/dist/config/index.js +3 -1
  4. package/dist/config/index.js.map +1 -1
  5. package/dist/distribution/__tests__/agent-discovery.test.d.ts +7 -0
  6. package/dist/distribution/__tests__/agent-discovery.test.d.ts.map +1 -0
  7. package/dist/distribution/__tests__/agent-discovery.test.js +443 -0
  8. package/dist/distribution/__tests__/agent-discovery.test.js.map +1 -0
  9. package/dist/distribution/__tests__/agent-info.test.d.ts +7 -0
  10. package/dist/distribution/__tests__/agent-info.test.d.ts.map +1 -0
  11. package/dist/distribution/__tests__/agent-info.test.js +568 -0
  12. package/dist/distribution/__tests__/agent-info.test.js.map +1 -0
  13. package/dist/distribution/__tests__/agent-remover.test.d.ts +7 -0
  14. package/dist/distribution/__tests__/agent-remover.test.d.ts.map +1 -0
  15. package/dist/distribution/__tests__/agent-remover.test.js +498 -0
  16. package/dist/distribution/__tests__/agent-remover.test.js.map +1 -0
  17. package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts +5 -0
  18. package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts.map +1 -0
  19. package/dist/distribution/__tests__/agent-repo-metadata.test.js +500 -0
  20. package/dist/distribution/__tests__/agent-repo-metadata.test.js.map +1 -0
  21. package/dist/distribution/__tests__/env-scanner.test.d.ts +5 -0
  22. package/dist/distribution/__tests__/env-scanner.test.d.ts.map +1 -0
  23. package/dist/distribution/__tests__/env-scanner.test.js +576 -0
  24. package/dist/distribution/__tests__/env-scanner.test.js.map +1 -0
  25. package/dist/distribution/__tests__/file-installer.test.d.ts +7 -0
  26. package/dist/distribution/__tests__/file-installer.test.d.ts.map +1 -0
  27. package/dist/distribution/__tests__/file-installer.test.js +714 -0
  28. package/dist/distribution/__tests__/file-installer.test.js.map +1 -0
  29. package/dist/distribution/__tests__/fleet-config-updater.test.d.ts +7 -0
  30. package/dist/distribution/__tests__/fleet-config-updater.test.d.ts.map +1 -0
  31. package/dist/distribution/__tests__/fleet-config-updater.test.js +531 -0
  32. package/dist/distribution/__tests__/fleet-config-updater.test.js.map +1 -0
  33. package/dist/distribution/__tests__/installation-metadata.test.d.ts +2 -0
  34. package/dist/distribution/__tests__/installation-metadata.test.d.ts.map +1 -0
  35. package/dist/distribution/__tests__/installation-metadata.test.js +292 -0
  36. package/dist/distribution/__tests__/installation-metadata.test.js.map +1 -0
  37. package/dist/distribution/__tests__/integration.test.d.ts +10 -0
  38. package/dist/distribution/__tests__/integration.test.d.ts.map +1 -0
  39. package/dist/distribution/__tests__/integration.test.js +522 -0
  40. package/dist/distribution/__tests__/integration.test.js.map +1 -0
  41. package/dist/distribution/__tests__/repository-fetcher.test.d.ts +5 -0
  42. package/dist/distribution/__tests__/repository-fetcher.test.d.ts.map +1 -0
  43. package/dist/distribution/__tests__/repository-fetcher.test.js +386 -0
  44. package/dist/distribution/__tests__/repository-fetcher.test.js.map +1 -0
  45. package/dist/distribution/__tests__/repository-validator.test.d.ts +7 -0
  46. package/dist/distribution/__tests__/repository-validator.test.d.ts.map +1 -0
  47. package/dist/distribution/__tests__/repository-validator.test.js +447 -0
  48. package/dist/distribution/__tests__/repository-validator.test.js.map +1 -0
  49. package/dist/distribution/__tests__/source-specifier.test.d.ts +5 -0
  50. package/dist/distribution/__tests__/source-specifier.test.d.ts.map +1 -0
  51. package/dist/distribution/__tests__/source-specifier.test.js +533 -0
  52. package/dist/distribution/__tests__/source-specifier.test.js.map +1 -0
  53. package/dist/distribution/agent-discovery.d.ts +81 -0
  54. package/dist/distribution/agent-discovery.d.ts.map +1 -0
  55. package/dist/distribution/agent-discovery.js +264 -0
  56. package/dist/distribution/agent-discovery.js.map +1 -0
  57. package/dist/distribution/agent-info.d.ts +86 -0
  58. package/dist/distribution/agent-info.d.ts.map +1 -0
  59. package/dist/distribution/agent-info.js +225 -0
  60. package/dist/distribution/agent-info.js.map +1 -0
  61. package/dist/distribution/agent-remover.d.ts +83 -0
  62. package/dist/distribution/agent-remover.d.ts.map +1 -0
  63. package/dist/distribution/agent-remover.js +222 -0
  64. package/dist/distribution/agent-remover.js.map +1 -0
  65. package/dist/distribution/agent-repo-metadata.d.ts +181 -0
  66. package/dist/distribution/agent-repo-metadata.d.ts.map +1 -0
  67. package/dist/distribution/agent-repo-metadata.js +143 -0
  68. package/dist/distribution/agent-repo-metadata.js.map +1 -0
  69. package/dist/distribution/env-scanner.d.ts +78 -0
  70. package/dist/distribution/env-scanner.d.ts.map +1 -0
  71. package/dist/distribution/env-scanner.js +144 -0
  72. package/dist/distribution/env-scanner.js.map +1 -0
  73. package/dist/distribution/file-installer.d.ts +80 -0
  74. package/dist/distribution/file-installer.d.ts.map +1 -0
  75. package/dist/distribution/file-installer.js +268 -0
  76. package/dist/distribution/file-installer.js.map +1 -0
  77. package/dist/distribution/fleet-config-updater.d.ts +96 -0
  78. package/dist/distribution/fleet-config-updater.d.ts.map +1 -0
  79. package/dist/distribution/fleet-config-updater.js +266 -0
  80. package/dist/distribution/fleet-config-updater.js.map +1 -0
  81. package/dist/distribution/index.d.ts +23 -0
  82. package/dist/distribution/index.d.ts.map +1 -0
  83. package/dist/distribution/index.js +42 -0
  84. package/dist/distribution/index.js.map +1 -0
  85. package/dist/distribution/installation-metadata.d.ts +191 -0
  86. package/dist/distribution/installation-metadata.d.ts.map +1 -0
  87. package/dist/distribution/installation-metadata.js +100 -0
  88. package/dist/distribution/installation-metadata.js.map +1 -0
  89. package/dist/distribution/repository-fetcher.d.ts +104 -0
  90. package/dist/distribution/repository-fetcher.d.ts.map +1 -0
  91. package/dist/distribution/repository-fetcher.js +246 -0
  92. package/dist/distribution/repository-fetcher.js.map +1 -0
  93. package/dist/distribution/repository-validator.d.ts +86 -0
  94. package/dist/distribution/repository-validator.d.ts.map +1 -0
  95. package/dist/distribution/repository-validator.js +296 -0
  96. package/dist/distribution/repository-validator.js.map +1 -0
  97. package/dist/distribution/source-specifier.d.ts +106 -0
  98. package/dist/distribution/source-specifier.d.ts.map +1 -0
  99. package/dist/distribution/source-specifier.js +247 -0
  100. package/dist/distribution/source-specifier.js.map +1 -0
  101. package/dist/fleet-manager/errors.d.ts +15 -0
  102. package/dist/fleet-manager/errors.d.ts.map +1 -1
  103. package/dist/fleet-manager/errors.js +16 -0
  104. package/dist/fleet-manager/errors.js.map +1 -1
  105. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  106. package/dist/fleet-manager/fleet-manager.js +31 -9
  107. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  108. package/dist/index.d.ts +1 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +2 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/runner/message-processor.d.ts.map +1 -1
  113. package/dist/runner/message-processor.js +7 -2
  114. package/dist/runner/message-processor.js.map +1 -1
  115. package/dist/runner/runtime/container-manager.js +1 -1
  116. package/dist/runner/runtime/container-manager.js.map +1 -1
  117. package/dist/scheduler/errors.d.ts +15 -0
  118. package/dist/scheduler/errors.d.ts.map +1 -1
  119. package/package.json +1 -1
@@ -0,0 +1,500 @@
1
+ /**
2
+ * Tests for AgentRepoMetadataSchema (herdctl.json validation)
3
+ */
4
+ import { describe, expect, it } from "vitest";
5
+ import { AGENT_NAME_PATTERN, AgentRepoMetadataSchema, AgentRequiresSchema, } from "../agent-repo-metadata.js";
6
+ // =============================================================================
7
+ // Test Data
8
+ // =============================================================================
9
+ /**
10
+ * Full valid metadata from the example-agent-repo.md document.
11
+ * This is the canonical example that must always pass validation.
12
+ */
13
+ const FULL_VALID_METADATA = {
14
+ $schema: "https://herdctl.dev/schemas/agent-metadata.json",
15
+ name: "website-monitor",
16
+ version: "1.0.0",
17
+ description: "Monitor website uptime and send Discord alerts when sites go down or recover",
18
+ author: "herdctl-examples",
19
+ repository: "github:herdctl-examples/website-monitor-agent",
20
+ homepage: "https://github.com/herdctl-examples/website-monitor-agent",
21
+ license: "MIT",
22
+ keywords: ["monitoring", "uptime", "alerts", "discord", "devops"],
23
+ requires: {
24
+ herdctl: ">=0.1.0",
25
+ runtime: "cli",
26
+ env: ["WEBSITES", "DISCORD_WEBHOOK_URL"],
27
+ workspace: true,
28
+ docker: false,
29
+ },
30
+ category: "operations",
31
+ tags: ["monitoring", "automation", "alerts"],
32
+ screenshots: [
33
+ "https://github.com/herdctl-examples/website-monitor-agent/blob/main/screenshots/discord-alert.png",
34
+ ],
35
+ examples: {
36
+ basic: "Monitor 2-3 production websites with 5-minute checks",
37
+ advanced: "Monitor multiple environments with different check intervals and alert thresholds",
38
+ },
39
+ };
40
+ /**
41
+ * Minimal valid metadata with only required fields.
42
+ */
43
+ const MINIMAL_VALID_METADATA = {
44
+ name: "my-agent",
45
+ version: "0.1.0",
46
+ description: "A simple agent",
47
+ author: "test-author",
48
+ };
49
+ // =============================================================================
50
+ // AgentRepoMetadataSchema Tests
51
+ // =============================================================================
52
+ describe("AgentRepoMetadataSchema", () => {
53
+ describe("valid metadata", () => {
54
+ it("should accept full valid metadata from the example", () => {
55
+ const result = AgentRepoMetadataSchema.safeParse(FULL_VALID_METADATA);
56
+ expect(result.success).toBe(true);
57
+ if (result.success) {
58
+ expect(result.data.name).toBe("website-monitor");
59
+ expect(result.data.version).toBe("1.0.0");
60
+ expect(result.data.author).toBe("herdctl-examples");
61
+ expect(result.data.requires?.herdctl).toBe(">=0.1.0");
62
+ expect(result.data.requires?.env).toEqual(["WEBSITES", "DISCORD_WEBHOOK_URL"]);
63
+ }
64
+ });
65
+ it("should accept minimal valid metadata (required fields only)", () => {
66
+ const result = AgentRepoMetadataSchema.safeParse(MINIMAL_VALID_METADATA);
67
+ expect(result.success).toBe(true);
68
+ if (result.success) {
69
+ expect(result.data.name).toBe("my-agent");
70
+ expect(result.data.version).toBe("0.1.0");
71
+ expect(result.data.description).toBe("A simple agent");
72
+ expect(result.data.author).toBe("test-author");
73
+ // Optional fields should be undefined
74
+ expect(result.data.repository).toBeUndefined();
75
+ expect(result.data.homepage).toBeUndefined();
76
+ expect(result.data.license).toBeUndefined();
77
+ expect(result.data.keywords).toBeUndefined();
78
+ expect(result.data.requires).toBeUndefined();
79
+ expect(result.data.category).toBeUndefined();
80
+ expect(result.data.tags).toBeUndefined();
81
+ expect(result.data.screenshots).toBeUndefined();
82
+ expect(result.data.examples).toBeUndefined();
83
+ }
84
+ });
85
+ it("should accept agent names with underscores and hyphens", () => {
86
+ const names = [
87
+ "my-agent",
88
+ "my_agent",
89
+ "my-agent_v2",
90
+ "Agent1",
91
+ "agent123",
92
+ "A",
93
+ "a1",
94
+ "1agent", // starts with number - valid per pattern
95
+ ];
96
+ for (const name of names) {
97
+ const result = AgentRepoMetadataSchema.safeParse({
98
+ ...MINIMAL_VALID_METADATA,
99
+ name,
100
+ });
101
+ expect(result.success, `Expected name "${name}" to be valid`).toBe(true);
102
+ }
103
+ });
104
+ it("should accept various valid semver versions", () => {
105
+ const versions = [
106
+ "0.0.1",
107
+ "1.0.0",
108
+ "10.20.30",
109
+ "1.0.0-alpha",
110
+ "1.0.0-alpha.1",
111
+ "1.0.0-beta.2",
112
+ "1.0.0-rc.1",
113
+ "1.0.0+build.123",
114
+ "1.0.0-alpha+build",
115
+ ];
116
+ for (const version of versions) {
117
+ const result = AgentRepoMetadataSchema.safeParse({
118
+ ...MINIMAL_VALID_METADATA,
119
+ version,
120
+ });
121
+ expect(result.success, `Expected version "${version}" to be valid`).toBe(true);
122
+ }
123
+ });
124
+ });
125
+ describe("missing required fields", () => {
126
+ it("should reject metadata without name", () => {
127
+ const { name: _, ...withoutName } = MINIMAL_VALID_METADATA;
128
+ const result = AgentRepoMetadataSchema.safeParse(withoutName);
129
+ expect(result.success).toBe(false);
130
+ if (!result.success) {
131
+ const nameError = result.error.issues.find((i) => i.path.includes("name"));
132
+ expect(nameError).toBeDefined();
133
+ }
134
+ });
135
+ it("should reject metadata without version", () => {
136
+ const { version: _, ...withoutVersion } = MINIMAL_VALID_METADATA;
137
+ const result = AgentRepoMetadataSchema.safeParse(withoutVersion);
138
+ expect(result.success).toBe(false);
139
+ if (!result.success) {
140
+ const versionError = result.error.issues.find((i) => i.path.includes("version"));
141
+ expect(versionError).toBeDefined();
142
+ }
143
+ });
144
+ it("should reject metadata without description", () => {
145
+ const { description: _, ...withoutDescription } = MINIMAL_VALID_METADATA;
146
+ const result = AgentRepoMetadataSchema.safeParse(withoutDescription);
147
+ expect(result.success).toBe(false);
148
+ if (!result.success) {
149
+ const descriptionError = result.error.issues.find((i) => i.path.includes("description"));
150
+ expect(descriptionError).toBeDefined();
151
+ }
152
+ });
153
+ it("should reject metadata without author", () => {
154
+ const { author: _, ...withoutAuthor } = MINIMAL_VALID_METADATA;
155
+ const result = AgentRepoMetadataSchema.safeParse(withoutAuthor);
156
+ expect(result.success).toBe(false);
157
+ if (!result.success) {
158
+ const authorError = result.error.issues.find((i) => i.path.includes("author"));
159
+ expect(authorError).toBeDefined();
160
+ }
161
+ });
162
+ it("should reject completely empty object", () => {
163
+ const result = AgentRepoMetadataSchema.safeParse({});
164
+ expect(result.success).toBe(false);
165
+ if (!result.success) {
166
+ // Should have errors for all required fields
167
+ expect(result.error.issues.length).toBeGreaterThanOrEqual(4);
168
+ }
169
+ });
170
+ });
171
+ describe("invalid name", () => {
172
+ it("should reject names starting with underscore", () => {
173
+ const result = AgentRepoMetadataSchema.safeParse({
174
+ ...MINIMAL_VALID_METADATA,
175
+ name: "_invalid-name",
176
+ });
177
+ expect(result.success).toBe(false);
178
+ if (!result.success) {
179
+ const nameError = result.error.issues.find((i) => i.path.includes("name"));
180
+ expect(nameError?.message).toContain("must start with a letter or number");
181
+ }
182
+ });
183
+ it("should reject names starting with hyphen", () => {
184
+ const result = AgentRepoMetadataSchema.safeParse({
185
+ ...MINIMAL_VALID_METADATA,
186
+ name: "-invalid-name",
187
+ });
188
+ expect(result.success).toBe(false);
189
+ });
190
+ it("should reject names with dots", () => {
191
+ const result = AgentRepoMetadataSchema.safeParse({
192
+ ...MINIMAL_VALID_METADATA,
193
+ name: "invalid.name",
194
+ });
195
+ expect(result.success).toBe(false);
196
+ });
197
+ it("should reject names with spaces", () => {
198
+ const result = AgentRepoMetadataSchema.safeParse({
199
+ ...MINIMAL_VALID_METADATA,
200
+ name: "invalid name",
201
+ });
202
+ expect(result.success).toBe(false);
203
+ });
204
+ it("should reject names with special characters", () => {
205
+ const invalidNames = ["name!", "name@", "name#", "name$", "name%", "name/path", "name\\path"];
206
+ for (const name of invalidNames) {
207
+ const result = AgentRepoMetadataSchema.safeParse({
208
+ ...MINIMAL_VALID_METADATA,
209
+ name,
210
+ });
211
+ expect(result.success, `Expected name "${name}" to be invalid`).toBe(false);
212
+ }
213
+ });
214
+ it("should reject empty name", () => {
215
+ const result = AgentRepoMetadataSchema.safeParse({
216
+ ...MINIMAL_VALID_METADATA,
217
+ name: "",
218
+ });
219
+ expect(result.success).toBe(false);
220
+ });
221
+ });
222
+ describe("invalid version", () => {
223
+ it("should reject non-semver versions", () => {
224
+ const invalidVersions = [
225
+ "1.0",
226
+ "1",
227
+ "v1.0.0",
228
+ "1.0.0.0",
229
+ "latest",
230
+ "1.x.0",
231
+ "",
232
+ "abc",
233
+ "1.0.0-",
234
+ "1.0.0+",
235
+ ];
236
+ for (const version of invalidVersions) {
237
+ const result = AgentRepoMetadataSchema.safeParse({
238
+ ...MINIMAL_VALID_METADATA,
239
+ version,
240
+ });
241
+ expect(result.success, `Expected version "${version}" to be invalid`).toBe(false);
242
+ }
243
+ });
244
+ });
245
+ describe("invalid description", () => {
246
+ it("should reject empty description", () => {
247
+ const result = AgentRepoMetadataSchema.safeParse({
248
+ ...MINIMAL_VALID_METADATA,
249
+ description: "",
250
+ });
251
+ expect(result.success).toBe(false);
252
+ if (!result.success) {
253
+ const descError = result.error.issues.find((i) => i.path.includes("description"));
254
+ expect(descError?.message).toContain("cannot be empty");
255
+ }
256
+ });
257
+ });
258
+ describe("invalid author", () => {
259
+ it("should reject empty author", () => {
260
+ const result = AgentRepoMetadataSchema.safeParse({
261
+ ...MINIMAL_VALID_METADATA,
262
+ author: "",
263
+ });
264
+ expect(result.success).toBe(false);
265
+ if (!result.success) {
266
+ const authorError = result.error.issues.find((i) => i.path.includes("author"));
267
+ expect(authorError?.message).toContain("cannot be empty");
268
+ }
269
+ });
270
+ });
271
+ describe("optional fields", () => {
272
+ it("should accept valid homepage URL", () => {
273
+ const result = AgentRepoMetadataSchema.safeParse({
274
+ ...MINIMAL_VALID_METADATA,
275
+ homepage: "https://example.com/my-agent",
276
+ });
277
+ expect(result.success).toBe(true);
278
+ });
279
+ it("should reject invalid homepage URL", () => {
280
+ const result = AgentRepoMetadataSchema.safeParse({
281
+ ...MINIMAL_VALID_METADATA,
282
+ homepage: "not-a-url",
283
+ });
284
+ expect(result.success).toBe(false);
285
+ if (!result.success) {
286
+ const homepageError = result.error.issues.find((i) => i.path.includes("homepage"));
287
+ expect(homepageError?.message).toContain("must be a valid URL");
288
+ }
289
+ });
290
+ it("should accept valid screenshot URLs", () => {
291
+ const result = AgentRepoMetadataSchema.safeParse({
292
+ ...MINIMAL_VALID_METADATA,
293
+ screenshots: ["https://example.com/screenshot1.png", "https://example.com/screenshot2.png"],
294
+ });
295
+ expect(result.success).toBe(true);
296
+ });
297
+ it("should reject invalid screenshot URLs", () => {
298
+ const result = AgentRepoMetadataSchema.safeParse({
299
+ ...MINIMAL_VALID_METADATA,
300
+ screenshots: ["https://valid.com/img.png", "not-a-url"],
301
+ });
302
+ expect(result.success).toBe(false);
303
+ });
304
+ it("should accept keywords array", () => {
305
+ const result = AgentRepoMetadataSchema.safeParse({
306
+ ...MINIMAL_VALID_METADATA,
307
+ keywords: ["monitoring", "alerts", "devops"],
308
+ });
309
+ expect(result.success).toBe(true);
310
+ if (result.success) {
311
+ expect(result.data.keywords).toEqual(["monitoring", "alerts", "devops"]);
312
+ }
313
+ });
314
+ it("should accept tags array", () => {
315
+ const result = AgentRepoMetadataSchema.safeParse({
316
+ ...MINIMAL_VALID_METADATA,
317
+ tags: ["automation", "monitoring"],
318
+ });
319
+ expect(result.success).toBe(true);
320
+ });
321
+ it("should accept examples record", () => {
322
+ const result = AgentRepoMetadataSchema.safeParse({
323
+ ...MINIMAL_VALID_METADATA,
324
+ examples: {
325
+ basic: "Simple usage example",
326
+ advanced: "Complex usage with multiple configurations",
327
+ },
328
+ });
329
+ expect(result.success).toBe(true);
330
+ if (result.success) {
331
+ expect(result.data.examples?.basic).toBe("Simple usage example");
332
+ }
333
+ });
334
+ it("should accept $schema field", () => {
335
+ const result = AgentRepoMetadataSchema.safeParse({
336
+ ...MINIMAL_VALID_METADATA,
337
+ $schema: "https://herdctl.dev/schemas/agent-metadata.json",
338
+ });
339
+ expect(result.success).toBe(true);
340
+ if (result.success) {
341
+ expect(result.data.$schema).toBe("https://herdctl.dev/schemas/agent-metadata.json");
342
+ }
343
+ });
344
+ });
345
+ describe("unknown fields (strict mode)", () => {
346
+ it("should reject unknown top-level fields", () => {
347
+ const result = AgentRepoMetadataSchema.safeParse({
348
+ ...MINIMAL_VALID_METADATA,
349
+ unknownField: "should fail",
350
+ });
351
+ expect(result.success).toBe(false);
352
+ if (!result.success) {
353
+ const unknownError = result.error.issues.find((i) => i.code === "unrecognized_keys" || i.message.includes("Unrecognized key"));
354
+ expect(unknownError).toBeDefined();
355
+ }
356
+ });
357
+ it("should reject unknown fields in requires object", () => {
358
+ const result = AgentRepoMetadataSchema.safeParse({
359
+ ...MINIMAL_VALID_METADATA,
360
+ requires: {
361
+ herdctl: ">=0.1.0",
362
+ unknownRequirement: true,
363
+ },
364
+ });
365
+ expect(result.success).toBe(false);
366
+ });
367
+ });
368
+ });
369
+ // =============================================================================
370
+ // AgentRequiresSchema Tests
371
+ // =============================================================================
372
+ describe("AgentRequiresSchema", () => {
373
+ describe("valid requires", () => {
374
+ it("should accept full requires object", () => {
375
+ const result = AgentRequiresSchema.safeParse({
376
+ herdctl: ">=0.1.0",
377
+ runtime: "cli",
378
+ env: ["API_KEY", "WEBHOOK_URL"],
379
+ workspace: true,
380
+ docker: false,
381
+ });
382
+ expect(result.success).toBe(true);
383
+ if (result.success) {
384
+ expect(result.data.herdctl).toBe(">=0.1.0");
385
+ expect(result.data.runtime).toBe("cli");
386
+ expect(result.data.env).toEqual(["API_KEY", "WEBHOOK_URL"]);
387
+ expect(result.data.workspace).toBe(true);
388
+ expect(result.data.docker).toBe(false);
389
+ }
390
+ });
391
+ it("should accept empty requires object", () => {
392
+ const result = AgentRequiresSchema.safeParse({});
393
+ expect(result.success).toBe(true);
394
+ });
395
+ it("should accept partial requires object", () => {
396
+ const result = AgentRequiresSchema.safeParse({
397
+ env: ["DISCORD_WEBHOOK"],
398
+ });
399
+ expect(result.success).toBe(true);
400
+ if (result.success) {
401
+ expect(result.data.env).toEqual(["DISCORD_WEBHOOK"]);
402
+ expect(result.data.herdctl).toBeUndefined();
403
+ }
404
+ });
405
+ });
406
+ describe("herdctl version ranges", () => {
407
+ it("should accept various valid semver ranges", () => {
408
+ const validRanges = [
409
+ ">=0.1.0",
410
+ ">=1.0.0",
411
+ "^1.0.0",
412
+ "~1.2.3",
413
+ "1.0.0",
414
+ "1.x",
415
+ "1.2.x",
416
+ "*",
417
+ ">1.0.0",
418
+ "<2.0.0",
419
+ ">=1.0.0 <2.0.0",
420
+ ];
421
+ for (const range of validRanges) {
422
+ const result = AgentRequiresSchema.safeParse({
423
+ herdctl: range,
424
+ });
425
+ expect(result.success, `Expected range "${range}" to be valid`).toBe(true);
426
+ }
427
+ });
428
+ it("should reject invalid version ranges", () => {
429
+ const invalidRanges = ["latest", "stable", "v1.0.0", "abc", ""];
430
+ for (const range of invalidRanges) {
431
+ const result = AgentRequiresSchema.safeParse({
432
+ herdctl: range,
433
+ });
434
+ expect(result.success, `Expected range "${range}" to be invalid`).toBe(false);
435
+ }
436
+ });
437
+ });
438
+ describe("env array", () => {
439
+ it("should accept empty env array", () => {
440
+ const result = AgentRequiresSchema.safeParse({
441
+ env: [],
442
+ });
443
+ expect(result.success).toBe(true);
444
+ });
445
+ it("should accept multiple env vars", () => {
446
+ const result = AgentRequiresSchema.safeParse({
447
+ env: ["VAR1", "VAR2", "VAR3"],
448
+ });
449
+ expect(result.success).toBe(true);
450
+ });
451
+ });
452
+ describe("unknown fields (strict mode)", () => {
453
+ it("should reject unknown fields in requires", () => {
454
+ const result = AgentRequiresSchema.safeParse({
455
+ herdctl: ">=0.1.0",
456
+ unknownField: true,
457
+ });
458
+ expect(result.success).toBe(false);
459
+ });
460
+ });
461
+ });
462
+ // =============================================================================
463
+ // AGENT_NAME_PATTERN Tests
464
+ // =============================================================================
465
+ describe("AGENT_NAME_PATTERN", () => {
466
+ it("should match valid agent names", () => {
467
+ const validNames = [
468
+ "agent",
469
+ "my-agent",
470
+ "my_agent",
471
+ "Agent1",
472
+ "agent123",
473
+ "A",
474
+ "a",
475
+ "1agent",
476
+ "a1b2c3",
477
+ "test-agent_v2",
478
+ ];
479
+ for (const name of validNames) {
480
+ expect(AGENT_NAME_PATTERN.test(name), `Expected "${name}" to match`).toBe(true);
481
+ }
482
+ });
483
+ it("should not match invalid agent names", () => {
484
+ const invalidNames = [
485
+ "",
486
+ "-agent",
487
+ "_agent",
488
+ "agent.name",
489
+ "agent/name",
490
+ "agent name",
491
+ "agent!",
492
+ "@agent",
493
+ "agent@",
494
+ ];
495
+ for (const name of invalidNames) {
496
+ expect(AGENT_NAME_PATTERN.test(name), `Expected "${name}" to not match`).toBe(false);
497
+ }
498
+ });
499
+ });
500
+ //# sourceMappingURL=agent-repo-metadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-repo-metadata.test.js","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-repo-metadata.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Environment Variable Scanner
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=env-scanner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-scanner.test.d.ts","sourceRoot":"","sources":["../../../src/distribution/__tests__/env-scanner.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}