@herdctl/core 5.5.0 → 5.7.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 (172) hide show
  1. package/dist/config/__tests__/merge.test.js +1 -1
  2. package/dist/config/__tests__/merge.test.js.map +1 -1
  3. package/dist/config/index.d.ts +1 -1
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/index.js +3 -1
  6. package/dist/config/index.js.map +1 -1
  7. package/dist/config/schema.d.ts +10 -2
  8. package/dist/config/schema.d.ts.map +1 -1
  9. package/dist/config/schema.js +6 -2
  10. package/dist/config/schema.js.map +1 -1
  11. package/dist/distribution/__tests__/agent-discovery.test.d.ts +7 -0
  12. package/dist/distribution/__tests__/agent-discovery.test.d.ts.map +1 -0
  13. package/dist/distribution/__tests__/agent-discovery.test.js +443 -0
  14. package/dist/distribution/__tests__/agent-discovery.test.js.map +1 -0
  15. package/dist/distribution/__tests__/agent-info.test.d.ts +7 -0
  16. package/dist/distribution/__tests__/agent-info.test.d.ts.map +1 -0
  17. package/dist/distribution/__tests__/agent-info.test.js +568 -0
  18. package/dist/distribution/__tests__/agent-info.test.js.map +1 -0
  19. package/dist/distribution/__tests__/agent-remover.test.d.ts +7 -0
  20. package/dist/distribution/__tests__/agent-remover.test.d.ts.map +1 -0
  21. package/dist/distribution/__tests__/agent-remover.test.js +498 -0
  22. package/dist/distribution/__tests__/agent-remover.test.js.map +1 -0
  23. package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts +5 -0
  24. package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts.map +1 -0
  25. package/dist/distribution/__tests__/agent-repo-metadata.test.js +500 -0
  26. package/dist/distribution/__tests__/agent-repo-metadata.test.js.map +1 -0
  27. package/dist/distribution/__tests__/env-scanner.test.d.ts +5 -0
  28. package/dist/distribution/__tests__/env-scanner.test.d.ts.map +1 -0
  29. package/dist/distribution/__tests__/env-scanner.test.js +576 -0
  30. package/dist/distribution/__tests__/env-scanner.test.js.map +1 -0
  31. package/dist/distribution/__tests__/file-installer.test.d.ts +7 -0
  32. package/dist/distribution/__tests__/file-installer.test.d.ts.map +1 -0
  33. package/dist/distribution/__tests__/file-installer.test.js +714 -0
  34. package/dist/distribution/__tests__/file-installer.test.js.map +1 -0
  35. package/dist/distribution/__tests__/fleet-config-updater.test.d.ts +7 -0
  36. package/dist/distribution/__tests__/fleet-config-updater.test.d.ts.map +1 -0
  37. package/dist/distribution/__tests__/fleet-config-updater.test.js +531 -0
  38. package/dist/distribution/__tests__/fleet-config-updater.test.js.map +1 -0
  39. package/dist/distribution/__tests__/installation-metadata.test.d.ts +2 -0
  40. package/dist/distribution/__tests__/installation-metadata.test.d.ts.map +1 -0
  41. package/dist/distribution/__tests__/installation-metadata.test.js +292 -0
  42. package/dist/distribution/__tests__/installation-metadata.test.js.map +1 -0
  43. package/dist/distribution/__tests__/integration.test.d.ts +10 -0
  44. package/dist/distribution/__tests__/integration.test.d.ts.map +1 -0
  45. package/dist/distribution/__tests__/integration.test.js +522 -0
  46. package/dist/distribution/__tests__/integration.test.js.map +1 -0
  47. package/dist/distribution/__tests__/repository-fetcher.test.d.ts +5 -0
  48. package/dist/distribution/__tests__/repository-fetcher.test.d.ts.map +1 -0
  49. package/dist/distribution/__tests__/repository-fetcher.test.js +386 -0
  50. package/dist/distribution/__tests__/repository-fetcher.test.js.map +1 -0
  51. package/dist/distribution/__tests__/repository-validator.test.d.ts +7 -0
  52. package/dist/distribution/__tests__/repository-validator.test.d.ts.map +1 -0
  53. package/dist/distribution/__tests__/repository-validator.test.js +447 -0
  54. package/dist/distribution/__tests__/repository-validator.test.js.map +1 -0
  55. package/dist/distribution/__tests__/source-specifier.test.d.ts +5 -0
  56. package/dist/distribution/__tests__/source-specifier.test.d.ts.map +1 -0
  57. package/dist/distribution/__tests__/source-specifier.test.js +533 -0
  58. package/dist/distribution/__tests__/source-specifier.test.js.map +1 -0
  59. package/dist/distribution/agent-discovery.d.ts +81 -0
  60. package/dist/distribution/agent-discovery.d.ts.map +1 -0
  61. package/dist/distribution/agent-discovery.js +264 -0
  62. package/dist/distribution/agent-discovery.js.map +1 -0
  63. package/dist/distribution/agent-info.d.ts +86 -0
  64. package/dist/distribution/agent-info.d.ts.map +1 -0
  65. package/dist/distribution/agent-info.js +225 -0
  66. package/dist/distribution/agent-info.js.map +1 -0
  67. package/dist/distribution/agent-remover.d.ts +83 -0
  68. package/dist/distribution/agent-remover.d.ts.map +1 -0
  69. package/dist/distribution/agent-remover.js +222 -0
  70. package/dist/distribution/agent-remover.js.map +1 -0
  71. package/dist/distribution/agent-repo-metadata.d.ts +181 -0
  72. package/dist/distribution/agent-repo-metadata.d.ts.map +1 -0
  73. package/dist/distribution/agent-repo-metadata.js +143 -0
  74. package/dist/distribution/agent-repo-metadata.js.map +1 -0
  75. package/dist/distribution/env-scanner.d.ts +78 -0
  76. package/dist/distribution/env-scanner.d.ts.map +1 -0
  77. package/dist/distribution/env-scanner.js +144 -0
  78. package/dist/distribution/env-scanner.js.map +1 -0
  79. package/dist/distribution/file-installer.d.ts +80 -0
  80. package/dist/distribution/file-installer.d.ts.map +1 -0
  81. package/dist/distribution/file-installer.js +268 -0
  82. package/dist/distribution/file-installer.js.map +1 -0
  83. package/dist/distribution/fleet-config-updater.d.ts +96 -0
  84. package/dist/distribution/fleet-config-updater.d.ts.map +1 -0
  85. package/dist/distribution/fleet-config-updater.js +266 -0
  86. package/dist/distribution/fleet-config-updater.js.map +1 -0
  87. package/dist/distribution/index.d.ts +23 -0
  88. package/dist/distribution/index.d.ts.map +1 -0
  89. package/dist/distribution/index.js +42 -0
  90. package/dist/distribution/index.js.map +1 -0
  91. package/dist/distribution/installation-metadata.d.ts +191 -0
  92. package/dist/distribution/installation-metadata.d.ts.map +1 -0
  93. package/dist/distribution/installation-metadata.js +100 -0
  94. package/dist/distribution/installation-metadata.js.map +1 -0
  95. package/dist/distribution/repository-fetcher.d.ts +104 -0
  96. package/dist/distribution/repository-fetcher.d.ts.map +1 -0
  97. package/dist/distribution/repository-fetcher.js +246 -0
  98. package/dist/distribution/repository-fetcher.js.map +1 -0
  99. package/dist/distribution/repository-validator.d.ts +86 -0
  100. package/dist/distribution/repository-validator.d.ts.map +1 -0
  101. package/dist/distribution/repository-validator.js +296 -0
  102. package/dist/distribution/repository-validator.js.map +1 -0
  103. package/dist/distribution/source-specifier.d.ts +106 -0
  104. package/dist/distribution/source-specifier.d.ts.map +1 -0
  105. package/dist/distribution/source-specifier.js +247 -0
  106. package/dist/distribution/source-specifier.js.map +1 -0
  107. package/dist/fleet-manager/errors.d.ts +15 -0
  108. package/dist/fleet-manager/errors.d.ts.map +1 -1
  109. package/dist/fleet-manager/errors.js +16 -0
  110. package/dist/fleet-manager/errors.js.map +1 -1
  111. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  112. package/dist/fleet-manager/fleet-manager.js +31 -9
  113. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  114. package/dist/index.d.ts +1 -0
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +2 -0
  117. package/dist/index.js.map +1 -1
  118. package/dist/runner/message-processor.d.ts.map +1 -1
  119. package/dist/runner/message-processor.js +7 -2
  120. package/dist/runner/message-processor.js.map +1 -1
  121. package/dist/runner/runtime/container-manager.js +1 -1
  122. package/dist/runner/runtime/container-manager.js.map +1 -1
  123. package/dist/scheduler/errors.d.ts +15 -0
  124. package/dist/scheduler/errors.d.ts.map +1 -1
  125. package/dist/scheduler/schedule-runner.d.ts.map +1 -1
  126. package/dist/scheduler/schedule-runner.js +6 -5
  127. package/dist/scheduler/schedule-runner.js.map +1 -1
  128. package/dist/state/__tests__/jsonl-parser.test.d.ts +5 -0
  129. package/dist/state/__tests__/jsonl-parser.test.d.ts.map +1 -0
  130. package/dist/state/__tests__/jsonl-parser.test.js +307 -0
  131. package/dist/state/__tests__/jsonl-parser.test.js.map +1 -0
  132. package/dist/state/__tests__/session-attribution.test.d.ts +2 -0
  133. package/dist/state/__tests__/session-attribution.test.d.ts.map +1 -0
  134. package/dist/state/__tests__/session-attribution.test.js +567 -0
  135. package/dist/state/__tests__/session-attribution.test.js.map +1 -0
  136. package/dist/state/__tests__/session-discovery.test.d.ts +2 -0
  137. package/dist/state/__tests__/session-discovery.test.d.ts.map +1 -0
  138. package/dist/state/__tests__/session-discovery.test.js +941 -0
  139. package/dist/state/__tests__/session-discovery.test.js.map +1 -0
  140. package/dist/state/__tests__/session-metadata.test.d.ts +2 -0
  141. package/dist/state/__tests__/session-metadata.test.d.ts.map +1 -0
  142. package/dist/state/__tests__/session-metadata.test.js +422 -0
  143. package/dist/state/__tests__/session-metadata.test.js.map +1 -0
  144. package/dist/state/__tests__/tool-parsing.test.d.ts +5 -0
  145. package/dist/state/__tests__/tool-parsing.test.d.ts.map +1 -0
  146. package/dist/state/__tests__/tool-parsing.test.js +315 -0
  147. package/dist/state/__tests__/tool-parsing.test.js.map +1 -0
  148. package/dist/state/index.d.ts +5 -0
  149. package/dist/state/index.d.ts.map +1 -1
  150. package/dist/state/index.js +10 -0
  151. package/dist/state/index.js.map +1 -1
  152. package/dist/state/jsonl-parser.d.ts +115 -0
  153. package/dist/state/jsonl-parser.d.ts.map +1 -0
  154. package/dist/state/jsonl-parser.js +437 -0
  155. package/dist/state/jsonl-parser.js.map +1 -0
  156. package/dist/state/session-attribution.d.ts +35 -0
  157. package/dist/state/session-attribution.d.ts.map +1 -0
  158. package/dist/state/session-attribution.js +179 -0
  159. package/dist/state/session-attribution.js.map +1 -0
  160. package/dist/state/session-discovery.d.ts +188 -0
  161. package/dist/state/session-discovery.d.ts.map +1 -0
  162. package/dist/state/session-discovery.js +513 -0
  163. package/dist/state/session-discovery.js.map +1 -0
  164. package/dist/state/session-metadata.d.ts +186 -0
  165. package/dist/state/session-metadata.d.ts.map +1 -0
  166. package/dist/state/session-metadata.js +297 -0
  167. package/dist/state/session-metadata.js.map +1 -0
  168. package/dist/state/tool-parsing.d.ts +88 -0
  169. package/dist/state/tool-parsing.d.ts.map +1 -0
  170. package/dist/state/tool-parsing.js +199 -0
  171. package/dist/state/tool-parsing.js.map +1 -0
  172. package/package.json +1 -1
@@ -0,0 +1,447 @@
1
+ /**
2
+ * Tests for repository validator
3
+ *
4
+ * Uses real file I/O with temporary directories to test validation logic.
5
+ */
6
+ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
10
+ import { DOCKER_NETWORK_NONE, INVALID_AGENT_YAML, INVALID_HERDCTL_JSON, JSON_PARSE_ERROR, MISSING_AGENT_YAML, MISSING_CLAUDE_MD, MISSING_HERDCTL_JSON, MISSING_README, NAME_MISMATCH, validateRepository, YAML_PARSE_ERROR, } from "../repository-validator.js";
11
+ // =============================================================================
12
+ // Test Setup
13
+ // =============================================================================
14
+ describe("validateRepository", () => {
15
+ let tempDir;
16
+ beforeEach(async () => {
17
+ // Create a fresh temp directory for each test
18
+ tempDir = await mkdtemp(join(tmpdir(), "herdctl-validator-test-"));
19
+ });
20
+ afterEach(async () => {
21
+ // Clean up temp directory
22
+ await rm(tempDir, { recursive: true, force: true });
23
+ });
24
+ // ===========================================================================
25
+ // Helper Functions
26
+ // ===========================================================================
27
+ /**
28
+ * Minimal valid agent.yaml content
29
+ */
30
+ const minimalAgentYaml = `
31
+ name: test-agent
32
+ runtime: cli
33
+ `;
34
+ /**
35
+ * Valid agent.yaml with docker enabled (no network field - that's fleet-level)
36
+ */
37
+ const agentYamlWithDocker = `
38
+ name: test-agent
39
+ runtime: cli
40
+ docker:
41
+ enabled: true
42
+ memory: 2g
43
+ `;
44
+ /**
45
+ * Agent.yaml with docker.network: none (invalid - also network field is not allowed in agent.yaml)
46
+ */
47
+ const agentYamlWithNetworkNone = `
48
+ name: test-agent
49
+ runtime: cli
50
+ docker:
51
+ enabled: true
52
+ network: none
53
+ `;
54
+ /**
55
+ * Minimal valid herdctl.json content
56
+ */
57
+ const minimalHerdctlJson = JSON.stringify({
58
+ name: "test-agent",
59
+ version: "1.0.0",
60
+ description: "A test agent",
61
+ author: "Test Author",
62
+ });
63
+ /**
64
+ * herdctl.json with different name than agent.yaml
65
+ */
66
+ const herdctlJsonDifferentName = JSON.stringify({
67
+ name: "different-name",
68
+ version: "1.0.0",
69
+ description: "A test agent",
70
+ author: "Test Author",
71
+ });
72
+ // ===========================================================================
73
+ // Valid Repository Tests
74
+ // ===========================================================================
75
+ describe("valid repositories", () => {
76
+ it("validates a minimal repo with only agent.yaml", async () => {
77
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
78
+ const result = await validateRepository(tempDir);
79
+ expect(result.valid).toBe(true);
80
+ expect(result.agentName).toBe("test-agent");
81
+ expect(result.agentConfig).not.toBeNull();
82
+ expect(result.agentConfig?.name).toBe("test-agent");
83
+ expect(result.agentConfig?.runtime).toBe("cli");
84
+ expect(result.errors).toHaveLength(0);
85
+ // Should have warnings for missing optional files
86
+ expect(result.warnings.some((w) => w.code === MISSING_HERDCTL_JSON)).toBe(true);
87
+ expect(result.warnings.some((w) => w.code === MISSING_CLAUDE_MD)).toBe(true);
88
+ expect(result.warnings.some((w) => w.code === MISSING_README)).toBe(true);
89
+ });
90
+ it("validates a repo with agent.yaml and herdctl.json", async () => {
91
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
92
+ await writeFile(join(tempDir, "herdctl.json"), minimalHerdctlJson);
93
+ const result = await validateRepository(tempDir);
94
+ expect(result.valid).toBe(true);
95
+ expect(result.agentName).toBe("test-agent");
96
+ expect(result.repoMetadata).not.toBeNull();
97
+ expect(result.repoMetadata?.name).toBe("test-agent");
98
+ expect(result.repoMetadata?.version).toBe("1.0.0");
99
+ expect(result.errors).toHaveLength(0);
100
+ // Should not have warning for missing herdctl.json
101
+ expect(result.warnings.some((w) => w.code === MISSING_HERDCTL_JSON)).toBe(false);
102
+ });
103
+ it("validates a repo with all recommended files", async () => {
104
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
105
+ await writeFile(join(tempDir, "herdctl.json"), minimalHerdctlJson);
106
+ await writeFile(join(tempDir, "CLAUDE.md"), "# Test Agent\n\nYou are a test agent.");
107
+ await writeFile(join(tempDir, "README.md"), "# Test Agent\n\nA test agent.");
108
+ const result = await validateRepository(tempDir);
109
+ expect(result.valid).toBe(true);
110
+ expect(result.errors).toHaveLength(0);
111
+ // Should have no warnings for missing files
112
+ expect(result.warnings.some((w) => w.code === MISSING_HERDCTL_JSON)).toBe(false);
113
+ expect(result.warnings.some((w) => w.code === MISSING_CLAUDE_MD)).toBe(false);
114
+ expect(result.warnings.some((w) => w.code === MISSING_README)).toBe(false);
115
+ });
116
+ it("validates a repo with docker enabled", async () => {
117
+ await writeFile(join(tempDir, "agent.yaml"), agentYamlWithDocker);
118
+ const result = await validateRepository(tempDir);
119
+ expect(result.valid).toBe(true);
120
+ expect(result.agentConfig?.docker?.enabled).toBe(true);
121
+ expect(result.agentConfig?.docker?.memory).toBe("2g");
122
+ expect(result.errors).toHaveLength(0);
123
+ });
124
+ });
125
+ // ===========================================================================
126
+ // Missing agent.yaml Tests
127
+ // ===========================================================================
128
+ describe("missing agent.yaml", () => {
129
+ it("reports error when agent.yaml is missing", async () => {
130
+ // Empty directory - no files
131
+ const result = await validateRepository(tempDir);
132
+ expect(result.valid).toBe(false);
133
+ expect(result.agentName).toBeNull();
134
+ expect(result.agentConfig).toBeNull();
135
+ expect(result.errors).toHaveLength(1);
136
+ expect(result.errors[0].code).toBe(MISSING_AGENT_YAML);
137
+ expect(result.errors[0].path).toBe("agent.yaml");
138
+ expect(result.errors[0].message).toContain("Required file agent.yaml not found");
139
+ });
140
+ it("reports error even if herdctl.json exists without agent.yaml", async () => {
141
+ await writeFile(join(tempDir, "herdctl.json"), minimalHerdctlJson);
142
+ const result = await validateRepository(tempDir);
143
+ expect(result.valid).toBe(false);
144
+ expect(result.errors.some((e) => e.code === MISSING_AGENT_YAML)).toBe(true);
145
+ });
146
+ });
147
+ // ===========================================================================
148
+ // Invalid YAML Tests
149
+ // ===========================================================================
150
+ describe("invalid YAML in agent.yaml", () => {
151
+ it("reports error for invalid YAML syntax", async () => {
152
+ const invalidYaml = `
153
+ name: test-agent
154
+ bad-indent: this is wrong
155
+ nested: invalid
156
+ `;
157
+ await writeFile(join(tempDir, "agent.yaml"), invalidYaml);
158
+ const result = await validateRepository(tempDir);
159
+ expect(result.valid).toBe(false);
160
+ expect(result.agentName).toBeNull();
161
+ expect(result.agentConfig).toBeNull();
162
+ expect(result.errors.some((e) => e.code === YAML_PARSE_ERROR)).toBe(true);
163
+ expect(result.errors[0].path).toBe("agent.yaml");
164
+ expect(result.errors[0].message).toContain("Invalid YAML syntax");
165
+ });
166
+ it("reports error for truncated YAML", async () => {
167
+ const truncatedYaml = `name: test
168
+ schedules:
169
+ check:
170
+ type: cron
171
+ cron: "* * * * *
172
+ `; // Missing closing quote
173
+ await writeFile(join(tempDir, "agent.yaml"), truncatedYaml);
174
+ const result = await validateRepository(tempDir);
175
+ expect(result.valid).toBe(false);
176
+ expect(result.errors.some((e) => e.code === YAML_PARSE_ERROR)).toBe(true);
177
+ });
178
+ });
179
+ // ===========================================================================
180
+ // Schema Validation Tests
181
+ // ===========================================================================
182
+ describe("agent.yaml schema validation", () => {
183
+ it("reports error when required fields are missing", async () => {
184
+ // Missing 'name' field
185
+ const missingName = `
186
+ description: A test agent
187
+ `;
188
+ await writeFile(join(tempDir, "agent.yaml"), missingName);
189
+ const result = await validateRepository(tempDir);
190
+ expect(result.valid).toBe(false);
191
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
192
+ expect(result.errors[0].message).toContain("validation failed");
193
+ });
194
+ it("reports error for invalid agent name format", async () => {
195
+ const invalidName = `
196
+ name: "invalid name with spaces"
197
+ runtime: cli
198
+ `;
199
+ await writeFile(join(tempDir, "agent.yaml"), invalidName);
200
+ const result = await validateRepository(tempDir);
201
+ expect(result.valid).toBe(false);
202
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
203
+ });
204
+ it("reports error for unknown fields (strict schema)", async () => {
205
+ const unknownField = `
206
+ name: test-agent
207
+ runtime: cli
208
+ unknown_field: should fail
209
+ `;
210
+ await writeFile(join(tempDir, "agent.yaml"), unknownField);
211
+ const result = await validateRepository(tempDir);
212
+ expect(result.valid).toBe(false);
213
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
214
+ });
215
+ });
216
+ // ===========================================================================
217
+ // Docker Network None Tests
218
+ // ===========================================================================
219
+ describe("docker.network: none validation", () => {
220
+ it("reports error when docker.network is none", async () => {
221
+ await writeFile(join(tempDir, "agent.yaml"), agentYamlWithNetworkNone);
222
+ const result = await validateRepository(tempDir);
223
+ expect(result.valid).toBe(false);
224
+ expect(result.errors.some((e) => e.code === DOCKER_NETWORK_NONE)).toBe(true);
225
+ const networkError = result.errors.find((e) => e.code === DOCKER_NETWORK_NONE);
226
+ expect(networkError?.message).toContain("Anthropic APIs");
227
+ expect(networkError?.message).toContain("bridge");
228
+ // Also gets schema validation error since network is not allowed in agent.yaml
229
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
230
+ });
231
+ it("reports error when docker.network is any value (network is fleet-level only)", async () => {
232
+ // The 'network' field is not allowed in agent.yaml (it's a fleet-level setting)
233
+ // This will get a schema validation error
234
+ const withNetwork = `
235
+ name: test-agent
236
+ runtime: cli
237
+ docker:
238
+ enabled: true
239
+ network: bridge
240
+ `;
241
+ await writeFile(join(tempDir, "agent.yaml"), withNetwork);
242
+ const result = await validateRepository(tempDir);
243
+ // Will fail due to unrecognized 'network' key in AgentDockerSchema
244
+ expect(result.valid).toBe(false);
245
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
246
+ });
247
+ });
248
+ // ===========================================================================
249
+ // herdctl.json Validation Tests
250
+ // ===========================================================================
251
+ describe("herdctl.json validation", () => {
252
+ it("reports error for invalid JSON syntax", async () => {
253
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
254
+ await writeFile(join(tempDir, "herdctl.json"), "{ invalid json");
255
+ const result = await validateRepository(tempDir);
256
+ expect(result.valid).toBe(false);
257
+ expect(result.repoMetadata).toBeNull();
258
+ expect(result.errors.some((e) => e.code === JSON_PARSE_ERROR)).toBe(true);
259
+ const jsonError = result.errors.find((e) => e.code === JSON_PARSE_ERROR);
260
+ expect(jsonError?.path).toBe("herdctl.json");
261
+ });
262
+ it("reports error when herdctl.json fails schema validation", async () => {
263
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
264
+ // Missing required fields (version, description, author)
265
+ const invalidMetadata = JSON.stringify({ name: "test-agent" });
266
+ await writeFile(join(tempDir, "herdctl.json"), invalidMetadata);
267
+ const result = await validateRepository(tempDir);
268
+ expect(result.valid).toBe(false);
269
+ expect(result.repoMetadata).toBeNull();
270
+ expect(result.errors.some((e) => e.code === INVALID_HERDCTL_JSON)).toBe(true);
271
+ const schemaError = result.errors.find((e) => e.code === INVALID_HERDCTL_JSON);
272
+ expect(schemaError?.message).toContain("validation failed");
273
+ });
274
+ it("reports error for invalid version format in herdctl.json", async () => {
275
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
276
+ const badVersion = JSON.stringify({
277
+ name: "test-agent",
278
+ version: "not-a-semver",
279
+ description: "Test",
280
+ author: "Test",
281
+ });
282
+ await writeFile(join(tempDir, "herdctl.json"), badVersion);
283
+ const result = await validateRepository(tempDir);
284
+ expect(result.valid).toBe(false);
285
+ expect(result.errors.some((e) => e.code === INVALID_HERDCTL_JSON)).toBe(true);
286
+ });
287
+ });
288
+ // ===========================================================================
289
+ // Name Mismatch Tests
290
+ // ===========================================================================
291
+ describe("name mismatch warning", () => {
292
+ it("warns when agent.yaml and herdctl.json have different names", async () => {
293
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml); // name: test-agent
294
+ await writeFile(join(tempDir, "herdctl.json"), herdctlJsonDifferentName); // name: different-name
295
+ const result = await validateRepository(tempDir);
296
+ expect(result.valid).toBe(true); // Warning, not error
297
+ expect(result.agentName).toBe("test-agent"); // Uses agent.yaml name
298
+ expect(result.warnings.some((w) => w.code === NAME_MISMATCH)).toBe(true);
299
+ const nameWarning = result.warnings.find((w) => w.code === NAME_MISMATCH);
300
+ expect(nameWarning?.message).toContain("test-agent");
301
+ expect(nameWarning?.message).toContain("different-name");
302
+ expect(nameWarning?.message).toContain("agent.yaml will be used");
303
+ });
304
+ it("does not warn when names match", async () => {
305
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
306
+ await writeFile(join(tempDir, "herdctl.json"), minimalHerdctlJson);
307
+ const result = await validateRepository(tempDir);
308
+ expect(result.valid).toBe(true);
309
+ expect(result.warnings.some((w) => w.code === NAME_MISMATCH)).toBe(false);
310
+ });
311
+ });
312
+ // ===========================================================================
313
+ // Optional File Warnings
314
+ // ===========================================================================
315
+ describe("optional file warnings", () => {
316
+ it("warns when CLAUDE.md is missing", async () => {
317
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
318
+ const result = await validateRepository(tempDir);
319
+ expect(result.valid).toBe(true);
320
+ expect(result.warnings.some((w) => w.code === MISSING_CLAUDE_MD)).toBe(true);
321
+ const claudeWarning = result.warnings.find((w) => w.code === MISSING_CLAUDE_MD);
322
+ expect(claudeWarning?.message).toContain("agent identity");
323
+ });
324
+ it("warns when README.md is missing", async () => {
325
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
326
+ const result = await validateRepository(tempDir);
327
+ expect(result.valid).toBe(true);
328
+ expect(result.warnings.some((w) => w.code === MISSING_README)).toBe(true);
329
+ const readmeWarning = result.warnings.find((w) => w.code === MISSING_README);
330
+ expect(readmeWarning?.message).toContain("documentation");
331
+ });
332
+ it("does not warn when CLAUDE.md exists", async () => {
333
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
334
+ await writeFile(join(tempDir, "CLAUDE.md"), "# Agent Identity");
335
+ const result = await validateRepository(tempDir);
336
+ expect(result.warnings.some((w) => w.code === MISSING_CLAUDE_MD)).toBe(false);
337
+ });
338
+ it("does not warn when README.md exists", async () => {
339
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
340
+ await writeFile(join(tempDir, "README.md"), "# Documentation");
341
+ const result = await validateRepository(tempDir);
342
+ expect(result.warnings.some((w) => w.code === MISSING_README)).toBe(false);
343
+ });
344
+ });
345
+ // ===========================================================================
346
+ // Complex Scenarios
347
+ // ===========================================================================
348
+ describe("complex scenarios", () => {
349
+ it("handles multiple errors at once", async () => {
350
+ // Invalid YAML in agent.yaml and invalid JSON in herdctl.json
351
+ await writeFile(join(tempDir, "agent.yaml"), "invalid: yaml: syntax:");
352
+ await writeFile(join(tempDir, "herdctl.json"), "not valid json");
353
+ const result = await validateRepository(tempDir);
354
+ expect(result.valid).toBe(false);
355
+ expect(result.errors.length).toBeGreaterThanOrEqual(2);
356
+ });
357
+ it("validates a realistic agent repository", async () => {
358
+ const realisticAgent = `
359
+ name: website-monitor
360
+ description: "Website uptime monitor"
361
+ runtime: cli
362
+ working_directory: ./workspace
363
+ setting_sources:
364
+ - project
365
+ schedules:
366
+ check-websites:
367
+ type: cron
368
+ cron: "*/5 * * * *"
369
+ prompt: "Check website uptime"
370
+ permission_mode: acceptEdits
371
+ allowed_tools:
372
+ - Read
373
+ - Write
374
+ - WebFetch
375
+ docker:
376
+ enabled: true
377
+ memory: 2g
378
+ `;
379
+ const realisticMetadata = JSON.stringify({
380
+ name: "website-monitor",
381
+ version: "1.0.0",
382
+ description: "Monitor website uptime and send Discord alerts",
383
+ author: "herdctl-examples",
384
+ repository: "github:herdctl-examples/website-monitor-agent",
385
+ license: "MIT",
386
+ keywords: ["monitoring", "uptime", "alerts"],
387
+ requires: {
388
+ herdctl: ">=0.1.0",
389
+ runtime: "cli",
390
+ env: ["WEBSITES", "DISCORD_WEBHOOK_URL"],
391
+ workspace: true,
392
+ },
393
+ category: "operations",
394
+ tags: ["monitoring", "automation"],
395
+ });
396
+ await writeFile(join(tempDir, "agent.yaml"), realisticAgent);
397
+ await writeFile(join(tempDir, "herdctl.json"), realisticMetadata);
398
+ await writeFile(join(tempDir, "CLAUDE.md"), "# Website Monitor\n\nYou monitor websites.");
399
+ await writeFile(join(tempDir, "README.md"), "# Website Monitor Agent\n\nUsage docs here.");
400
+ await mkdir(join(tempDir, "knowledge"), { recursive: true });
401
+ await writeFile(join(tempDir, "knowledge", "monitoring-guide.md"), "# Monitoring Guide");
402
+ const result = await validateRepository(tempDir);
403
+ expect(result.valid).toBe(true);
404
+ expect(result.agentName).toBe("website-monitor");
405
+ expect(result.agentConfig?.schedules?.["check-websites"]).toBeDefined();
406
+ expect(result.repoMetadata?.version).toBe("1.0.0");
407
+ expect(result.repoMetadata?.keywords).toContain("monitoring");
408
+ expect(result.errors).toHaveLength(0);
409
+ // Should have no warnings for missing files
410
+ expect(result.warnings.some((w) => w.code === MISSING_HERDCTL_JSON)).toBe(false);
411
+ expect(result.warnings.some((w) => w.code === MISSING_CLAUDE_MD)).toBe(false);
412
+ expect(result.warnings.some((w) => w.code === MISSING_README)).toBe(false);
413
+ });
414
+ });
415
+ // ===========================================================================
416
+ // Edge Cases
417
+ // ===========================================================================
418
+ describe("edge cases", () => {
419
+ it("handles empty agent.yaml file", async () => {
420
+ await writeFile(join(tempDir, "agent.yaml"), "");
421
+ const result = await validateRepository(tempDir);
422
+ expect(result.valid).toBe(false);
423
+ // Empty YAML parses to null/undefined, which fails schema validation
424
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
425
+ });
426
+ it("handles agent.yaml with only comments", async () => {
427
+ await writeFile(join(tempDir, "agent.yaml"), "# Just a comment\n# Another comment");
428
+ const result = await validateRepository(tempDir);
429
+ expect(result.valid).toBe(false);
430
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
431
+ });
432
+ it("handles empty herdctl.json object", async () => {
433
+ await writeFile(join(tempDir, "agent.yaml"), minimalAgentYaml);
434
+ await writeFile(join(tempDir, "herdctl.json"), "{}");
435
+ const result = await validateRepository(tempDir);
436
+ expect(result.valid).toBe(false);
437
+ expect(result.errors.some((e) => e.code === INVALID_HERDCTL_JSON)).toBe(true);
438
+ });
439
+ it("handles whitespace-only agent.yaml", async () => {
440
+ await writeFile(join(tempDir, "agent.yaml"), " \n\n \t\t\n ");
441
+ const result = await validateRepository(tempDir);
442
+ expect(result.valid).toBe(false);
443
+ expect(result.errors.some((e) => e.code === INVALID_AGENT_YAML)).toBe(true);
444
+ });
445
+ });
446
+ });
447
+ //# sourceMappingURL=repository-validator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-validator.test.js","sourceRoot":"","sources":["../../../src/distribution/__tests__/repository-validator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Source Specifier Parser
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=source-specifier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-specifier.test.d.ts","sourceRoot":"","sources":["../../../src/distribution/__tests__/source-specifier.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}