@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
@@ -7,5 +7,5 @@ export { type InterpolateOptions, interpolateConfig, interpolateString, interpol
7
7
  export { AgentLoadError, CONFIG_FILE_NAMES, ConfigNotFoundError, FleetCycleError, FleetLoadError, FleetNameCollisionError, findConfigFile, InvalidFleetNameError, type LoadConfigOptions, loadConfig, type ResolvedAgent, type ResolvedConfig, safeLoadConfig, } from "./loader.js";
8
8
  export { deepMerge, type ExtendedDefaults, type MergeableDefaults, mergeAgentConfig, mergeAllAgentConfigs, } from "./merge.js";
9
9
  export { AgentValidationError, AgentYamlSyntaxError, ConfigError, FileReadError, loadAgentConfig, parseAgentConfig, parseFleetConfig, resolveAgentPath, type SchemaIssue, SchemaValidationError, safeParseAgentConfig, safeParseFleetConfig, validateAgentConfig, validateFleetConfig, YamlSyntaxError, } from "./parser.js";
10
- export { type AgentChat, type AgentChatDiscord, AgentChatDiscordSchema, AgentChatSchema, type AgentChatSlack, AgentChatSlackSchema, type AgentConfig, AgentConfigSchema, type AgentDocker, type AgentDockerInput, AgentDockerSchema, type AgentHooks, type AgentHooksInput, AgentHooksSchema, type AgentReference, AgentReferenceSchema, type AgentWorkingDirectory, AgentWorkingDirectorySchema, type BaseWorkSource, BaseWorkSourceSchema, type Chat, type ChatDM, ChatDMSchema, type ChatOutput, ChatOutputSchema, ChatSchema, type Defaults, DefaultsSchema, type DiscordChannel, DiscordChannelSchema, type DiscordChat, DiscordChatSchema, type DiscordGuild, DiscordGuildSchema, type DiscordHookConfig, type DiscordHookConfigInput, DiscordHookConfigSchema, type DiscordOutput, DiscordOutputSchema, type DiscordPresence, DiscordPresenceSchema, type Docker, DockerSchema, type FleetConfig, FleetConfigSchema, type FleetDocker, type FleetDockerInput, FleetDockerSchema, type FleetReference, FleetReferenceSchema, type GitHubAuth, GitHubAuthSchema, type GitHubWorkSource, GitHubWorkSourceSchema, type HookConfig, type HookConfigInput, HookConfigSchema, type HookEvent, HookEventSchema, type Identity, IdentitySchema, type Instances, InstancesSchema, type McpServer, McpServerSchema, type PermissionMode, PermissionModeSchema, type Schedule, ScheduleSchema, type ScheduleType, ScheduleTypeSchema, type Session, SessionSchema, type ShellHookConfig, type ShellHookConfigInput, ShellHookConfigSchema, type SlackChannel, SlackChannelSchema, type SlackHookConfig, type SlackHookConfigInput, SlackHookConfigSchema, type WebConfig, type WebhookHookConfig, type WebhookHookConfigInput, WebhookHookConfigSchema, type Webhooks, WebhooksSchema, WebSchema, type WorkingDirectory, WorkingDirectorySchema, type WorkSource, type WorkSourceLabels, WorkSourceLabelsSchema, WorkSourceSchema, type WorkSourceType, WorkSourceTypeSchema, } from "./schema.js";
10
+ export { AGENT_NAME_PATTERN, type AgentChat, type AgentChatDiscord, AgentChatDiscordSchema, AgentChatSchema, type AgentChatSlack, AgentChatSlackSchema, type AgentConfig, AgentConfigSchema, type AgentDocker, type AgentDockerInput, AgentDockerSchema, type AgentHooks, type AgentHooksInput, AgentHooksSchema, type AgentReference, AgentReferenceSchema, type AgentWorkingDirectory, AgentWorkingDirectorySchema, type BaseWorkSource, BaseWorkSourceSchema, type Chat, type ChatDM, ChatDMSchema, type ChatOutput, ChatOutputSchema, ChatSchema, type Defaults, DefaultsSchema, type DiscordChannel, DiscordChannelSchema, type DiscordChat, DiscordChatSchema, type DiscordGuild, DiscordGuildSchema, type DiscordHookConfig, type DiscordHookConfigInput, DiscordHookConfigSchema, type DiscordOutput, DiscordOutputSchema, type DiscordPresence, DiscordPresenceSchema, type Docker, DockerSchema, type FleetConfig, FleetConfigSchema, type FleetDocker, type FleetDockerInput, FleetDockerSchema, type FleetReference, FleetReferenceSchema, type GitHubAuth, GitHubAuthSchema, type GitHubWorkSource, GitHubWorkSourceSchema, type HookConfig, type HookConfigInput, HookConfigSchema, type HookEvent, HookEventSchema, type Identity, IdentitySchema, type Instances, InstancesSchema, type McpServer, McpServerSchema, type PermissionMode, PermissionModeSchema, type Schedule, ScheduleSchema, type ScheduleType, ScheduleTypeSchema, type Session, SessionSchema, type ShellHookConfig, type ShellHookConfigInput, ShellHookConfigSchema, type SlackChannel, SlackChannelSchema, type SlackHookConfig, type SlackHookConfigInput, SlackHookConfigSchema, type WebConfig, type WebhookHookConfig, type WebhookHookConfigInput, WebhookHookConfigSchema, type Webhooks, WebhooksSchema, WebSchema, type WorkingDirectory, WorkingDirectorySchema, type WorkSource, type WorkSourceLabels, WorkSourceLabelsSchema, WorkSourceSchema, type WorkSourceType, WorkSourceTypeSchema, } from "./schema.js";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,9 @@ parseAgentConfig,
18
18
  // Fleet config parsers
19
19
  parseFleetConfig, resolveAgentPath, SchemaValidationError, safeParseAgentConfig, safeParseFleetConfig, validateAgentConfig, validateFleetConfig, YamlSyntaxError, } from "./parser.js";
20
20
  // Schema exports
21
- export { AgentChatDiscordSchema, AgentChatSchema, AgentChatSlackSchema,
21
+ export {
22
+ // Agent name validation pattern
23
+ AGENT_NAME_PATTERN, AgentChatDiscordSchema, AgentChatSchema, AgentChatSlackSchema,
22
24
  // Agent-specific schemas
23
25
  AgentConfigSchema, AgentDockerSchema, AgentHooksSchema, AgentReferenceSchema, AgentWorkingDirectorySchema, BaseWorkSourceSchema, ChatDMSchema,
24
26
  // Agent Chat shared schemas
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAwB;AACxB,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,iBAAiB;AACjB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EAErB,UAAU,EAGV,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EACL,SAAS,EAGT,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,oBAAoB;AACpB,gBAAgB;AAChB,WAAW,EACX,aAAa,EACb,eAAe;AACf,uBAAuB;AACvB,gBAAgB;AAChB,uBAAuB;AACvB,gBAAgB,EAChB,gBAAgB,EAEhB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,iBAAiB;AACjB,OAAO,EAGL,sBAAsB,EACtB,eAAe,EAEf,oBAAoB;AAGpB,yBAAyB;AACzB,iBAAiB,EAGjB,iBAAiB,EAGjB,gBAAgB,EAEhB,oBAAoB,EAEpB,2BAA2B,EAE3B,oBAAoB,EAGpB,YAAY;AAGZ,4BAA4B;AAC5B,gBAAgB,EAChB,UAAU,EAEV,cAAc,EAEd,oBAAoB,EAEpB,iBAAiB,EAEjB,kBAAkB,EAGlB,uBAAuB,EAEvB,mBAAmB;AAGnB,6BAA6B;AAC7B,qBAAqB,EAErB,YAAY;AAGZ,UAAU;AACV,iBAAiB,EAGjB,iBAAiB,EAEjB,oBAAoB,EAEpB,gBAAgB,EAEhB,sBAAsB,EAGtB,gBAAgB;AAGhB,eAAe;AACf,eAAe,EAEf,cAAc,EAEd,eAAe,EAEf,eAAe,EAEf,oBAAoB,EAEpB,cAAc,EAEd,kBAAkB,EAElB,aAAa,EAIb,qBAAqB;AAGrB,2BAA2B;AAC3B,kBAAkB,EAGlB,qBAAqB,EAIrB,uBAAuB,EAEvB,cAAc,EACd,SAAS,EAET,sBAAsB,EAGtB,sBAAsB,EACtB,gBAAgB,EAEhB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAwB;AACxB,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,iBAAiB;AACjB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EAErB,UAAU,EAGV,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EACL,SAAS,EAGT,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,oBAAoB;AACpB,gBAAgB;AAChB,WAAW,EACX,aAAa,EACb,eAAe;AACf,uBAAuB;AACvB,gBAAgB;AAChB,uBAAuB;AACvB,gBAAgB,EAChB,gBAAgB,EAEhB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,iBAAiB;AACjB,OAAO;AACL,gCAAgC;AAChC,kBAAkB,EAGlB,sBAAsB,EACtB,eAAe,EAEf,oBAAoB;AAGpB,yBAAyB;AACzB,iBAAiB,EAGjB,iBAAiB,EAGjB,gBAAgB,EAEhB,oBAAoB,EAEpB,2BAA2B,EAE3B,oBAAoB,EAGpB,YAAY;AAGZ,4BAA4B;AAC5B,gBAAgB,EAChB,UAAU,EAEV,cAAc,EAEd,oBAAoB,EAEpB,iBAAiB,EAEjB,kBAAkB,EAGlB,uBAAuB,EAEvB,mBAAmB;AAGnB,6BAA6B;AAC7B,qBAAqB,EAErB,YAAY;AAGZ,UAAU;AACV,iBAAiB,EAGjB,iBAAiB,EAEjB,oBAAoB,EAEpB,gBAAgB,EAEhB,sBAAsB,EAGtB,gBAAgB;AAGhB,eAAe;AACf,eAAe,EAEf,cAAc,EAEd,eAAe,EAEf,eAAe,EAEf,oBAAoB,EAEpB,cAAc,EAEd,kBAAkB,EAElB,aAAa,EAIb,qBAAqB;AAGrB,2BAA2B;AAC3B,kBAAkB,EAGlB,qBAAqB,EAIrB,uBAAuB,EAEvB,cAAc,EACd,SAAS,EAET,sBAAsB,EAGtB,sBAAsB,EACtB,gBAAgB,EAEhB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for agent discovery
3
+ *
4
+ * Uses real file I/O with temporary directories to test discovery logic.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=agent-discovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-discovery.test.d.ts","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-discovery.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Tests for agent discovery
3
+ *
4
+ * Uses real file I/O with temporary directories to test discovery 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 { AgentDiscoveryError, DISCOVERY_CONFIG_INVALID, DISCOVERY_CONFIG_NOT_FOUND, discoverAgents, } from "../agent-discovery.js";
11
+ // =============================================================================
12
+ // Test Setup
13
+ // =============================================================================
14
+ describe("discoverAgents", () => {
15
+ let tempDir;
16
+ beforeEach(async () => {
17
+ // Create fresh temp directory for each test
18
+ tempDir = await mkdtemp(join(tmpdir(), "herdctl-discovery-"));
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
+ * Create a minimal herdctl.yaml fleet config
29
+ */
30
+ async function createFleetConfig(agentPaths = [], options = {}) {
31
+ const { name = "test-fleet" } = options;
32
+ const agentsYaml = agentPaths.length > 0 ? agentPaths.map((p) => ` - path: ${p}`).join("\n") : "";
33
+ const content = `version: 1
34
+
35
+ fleet:
36
+ name: ${name}
37
+
38
+ agents:
39
+ ${agentsYaml}
40
+ `;
41
+ const configPath = join(tempDir, "herdctl.yaml");
42
+ await writeFile(configPath, content, "utf-8");
43
+ return configPath;
44
+ }
45
+ /**
46
+ * Create an agent directory with agent.yaml
47
+ */
48
+ async function createAgent(name, options = {}) {
49
+ const agentDir = join(tempDir, "agents", name);
50
+ await mkdir(agentDir, { recursive: true });
51
+ // Create agent.yaml
52
+ const agentYaml = `name: ${name}
53
+ permission_mode: default
54
+ runtime: sdk
55
+ ${options.description ? `description: "${options.description}"` : ""}
56
+ `;
57
+ await writeFile(join(agentDir, "agent.yaml"), agentYaml, "utf-8");
58
+ // Create metadata.json if requested
59
+ if (options.withMetadata) {
60
+ const metadata = {
61
+ source: {
62
+ type: "github",
63
+ url: "https://github.com/user/repo",
64
+ ref: "v1.0.0",
65
+ version: options.metadata?.source?.version ?? "1.0.0",
66
+ ...options.metadata?.source,
67
+ },
68
+ installed_at: options.metadata?.installed_at ?? new Date().toISOString(),
69
+ installed_by: options.metadata?.installed_by ?? "herdctl@0.5.0",
70
+ ...options.metadata,
71
+ };
72
+ await writeFile(join(agentDir, "metadata.json"), JSON.stringify(metadata, null, 2), "utf-8");
73
+ }
74
+ // Create herdctl.json if requested
75
+ if (options.withHerdctlJson) {
76
+ const herdctlJson = {
77
+ name,
78
+ version: options.herdctlJsonVersion ?? "1.0.0",
79
+ };
80
+ await writeFile(join(agentDir, "herdctl.json"), JSON.stringify(herdctlJson, null, 2), "utf-8");
81
+ }
82
+ return agentDir;
83
+ }
84
+ // ===========================================================================
85
+ // Empty Fleet Tests
86
+ // ===========================================================================
87
+ describe("empty fleet config", () => {
88
+ it("returns empty result when no agents in config", async () => {
89
+ const configPath = await createFleetConfig([]);
90
+ const result = await discoverAgents({ configPath });
91
+ expect(result.agents).toHaveLength(0);
92
+ });
93
+ it("returns empty result when agents key is missing", async () => {
94
+ const configPath = join(tempDir, "herdctl.yaml");
95
+ await writeFile(configPath, `version: 1
96
+ fleet:
97
+ name: test-fleet
98
+ `, "utf-8");
99
+ const result = await discoverAgents({ configPath });
100
+ expect(result.agents).toHaveLength(0);
101
+ });
102
+ });
103
+ // ===========================================================================
104
+ // Single Agent Tests
105
+ // ===========================================================================
106
+ describe("single agent", () => {
107
+ it("discovers installed agent with metadata.json", async () => {
108
+ await createAgent("my-agent", { withMetadata: true });
109
+ const configPath = await createFleetConfig(["./agents/my-agent/agent.yaml"]);
110
+ const result = await discoverAgents({ configPath });
111
+ expect(result.agents).toHaveLength(1);
112
+ expect(result.agents[0].name).toBe("my-agent");
113
+ expect(result.agents[0].installed).toBe(true);
114
+ expect(result.agents[0].metadata).toBeDefined();
115
+ expect(result.agents[0].metadata?.source.type).toBe("github");
116
+ });
117
+ it("discovers manual agent without metadata.json", async () => {
118
+ await createAgent("manual-agent", { withMetadata: false });
119
+ const configPath = await createFleetConfig(["./agents/manual-agent/agent.yaml"]);
120
+ const result = await discoverAgents({ configPath });
121
+ expect(result.agents).toHaveLength(1);
122
+ expect(result.agents[0].name).toBe("manual-agent");
123
+ expect(result.agents[0].installed).toBe(false);
124
+ expect(result.agents[0].metadata).toBeUndefined();
125
+ });
126
+ it("includes description from agent.yaml", async () => {
127
+ await createAgent("described-agent", {
128
+ description: "A helpful agent that does things",
129
+ });
130
+ const configPath = await createFleetConfig(["./agents/described-agent/agent.yaml"]);
131
+ const result = await discoverAgents({ configPath });
132
+ expect(result.agents).toHaveLength(1);
133
+ expect(result.agents[0].description).toBe("A helpful agent that does things");
134
+ });
135
+ it("includes version from metadata.json source", async () => {
136
+ await createAgent("versioned-agent", {
137
+ withMetadata: true,
138
+ metadata: { source: { type: "github", version: "2.0.0" } },
139
+ });
140
+ const configPath = await createFleetConfig(["./agents/versioned-agent/agent.yaml"]);
141
+ const result = await discoverAgents({ configPath });
142
+ expect(result.agents).toHaveLength(1);
143
+ expect(result.agents[0].version).toBe("2.0.0");
144
+ });
145
+ it("falls back to herdctl.json version when no metadata", async () => {
146
+ await createAgent("json-versioned-agent", {
147
+ withMetadata: false,
148
+ withHerdctlJson: true,
149
+ herdctlJsonVersion: "3.0.0",
150
+ });
151
+ const configPath = await createFleetConfig(["./agents/json-versioned-agent/agent.yaml"]);
152
+ const result = await discoverAgents({ configPath });
153
+ expect(result.agents).toHaveLength(1);
154
+ expect(result.agents[0].version).toBe("3.0.0");
155
+ });
156
+ });
157
+ // ===========================================================================
158
+ // Multiple Agents Tests
159
+ // ===========================================================================
160
+ describe("multiple agents", () => {
161
+ it("discovers multiple agents, some installed some manual", async () => {
162
+ await createAgent("agent-a", { withMetadata: true });
163
+ await createAgent("agent-b", { withMetadata: false });
164
+ await createAgent("agent-c", { withMetadata: true });
165
+ const configPath = await createFleetConfig([
166
+ "./agents/agent-a/agent.yaml",
167
+ "./agents/agent-b/agent.yaml",
168
+ "./agents/agent-c/agent.yaml",
169
+ ]);
170
+ const result = await discoverAgents({ configPath });
171
+ expect(result.agents).toHaveLength(3);
172
+ // Should be sorted by name
173
+ expect(result.agents[0].name).toBe("agent-a");
174
+ expect(result.agents[0].installed).toBe(true);
175
+ expect(result.agents[1].name).toBe("agent-b");
176
+ expect(result.agents[1].installed).toBe(false);
177
+ expect(result.agents[2].name).toBe("agent-c");
178
+ expect(result.agents[2].installed).toBe(true);
179
+ });
180
+ it("sorts agents by name alphabetically", async () => {
181
+ await createAgent("zebra-agent", { withMetadata: false });
182
+ await createAgent("alpha-agent", { withMetadata: false });
183
+ await createAgent("middle-agent", { withMetadata: false });
184
+ const configPath = await createFleetConfig([
185
+ "./agents/zebra-agent/agent.yaml",
186
+ "./agents/alpha-agent/agent.yaml",
187
+ "./agents/middle-agent/agent.yaml",
188
+ ]);
189
+ const result = await discoverAgents({ configPath });
190
+ expect(result.agents.map((a) => a.name)).toEqual([
191
+ "alpha-agent",
192
+ "middle-agent",
193
+ "zebra-agent",
194
+ ]);
195
+ });
196
+ });
197
+ // ===========================================================================
198
+ // Missing/Invalid Agent Tests
199
+ // ===========================================================================
200
+ describe("missing or invalid agents", () => {
201
+ it("skips agent when directory does not exist", async () => {
202
+ await createAgent("exists-agent", { withMetadata: false });
203
+ // Don't create "missing-agent" directory
204
+ const configPath = await createFleetConfig([
205
+ "./agents/exists-agent/agent.yaml",
206
+ "./agents/missing-agent/agent.yaml",
207
+ ]);
208
+ const result = await discoverAgents({ configPath });
209
+ expect(result.agents).toHaveLength(1);
210
+ expect(result.agents[0].name).toBe("exists-agent");
211
+ });
212
+ it("handles invalid/corrupt metadata.json gracefully", async () => {
213
+ const agentDir = join(tempDir, "agents", "corrupt-metadata");
214
+ await mkdir(agentDir, { recursive: true });
215
+ await writeFile(join(agentDir, "agent.yaml"), "name: corrupt-metadata\nruntime: sdk\n", "utf-8");
216
+ // Write invalid JSON
217
+ await writeFile(join(agentDir, "metadata.json"), "{ invalid json }", "utf-8");
218
+ const configPath = await createFleetConfig(["./agents/corrupt-metadata/agent.yaml"]);
219
+ const result = await discoverAgents({ configPath });
220
+ expect(result.agents).toHaveLength(1);
221
+ expect(result.agents[0].name).toBe("corrupt-metadata");
222
+ expect(result.agents[0].installed).toBe(false);
223
+ expect(result.agents[0].metadata).toBeUndefined();
224
+ });
225
+ it("handles metadata.json that fails schema validation", async () => {
226
+ const agentDir = join(tempDir, "agents", "bad-schema");
227
+ await mkdir(agentDir, { recursive: true });
228
+ await writeFile(join(agentDir, "agent.yaml"), "name: bad-schema\nruntime: sdk\n", "utf-8");
229
+ // Write JSON that is valid but doesn't match schema
230
+ await writeFile(join(agentDir, "metadata.json"), JSON.stringify({ source: { type: "invalid-type" }, installed_at: "not-iso" }), "utf-8");
231
+ const configPath = await createFleetConfig(["./agents/bad-schema/agent.yaml"]);
232
+ const result = await discoverAgents({ configPath });
233
+ expect(result.agents).toHaveLength(1);
234
+ expect(result.agents[0].installed).toBe(false);
235
+ });
236
+ it("uses directory name when agent.yaml has no name field", async () => {
237
+ const agentDir = join(tempDir, "agents", "no-name-agent");
238
+ await mkdir(agentDir, { recursive: true });
239
+ // agent.yaml without name field
240
+ await writeFile(join(agentDir, "agent.yaml"), "runtime: sdk\npermission_mode: default\n", "utf-8");
241
+ const configPath = await createFleetConfig(["./agents/no-name-agent/agent.yaml"]);
242
+ const result = await discoverAgents({ configPath });
243
+ expect(result.agents).toHaveLength(1);
244
+ expect(result.agents[0].name).toBe("no-name-agent");
245
+ });
246
+ it("uses directory name when agent.yaml is missing", async () => {
247
+ const agentDir = join(tempDir, "agents", "no-yaml-agent");
248
+ await mkdir(agentDir, { recursive: true });
249
+ // No agent.yaml created
250
+ const configPath = await createFleetConfig(["./agents/no-yaml-agent/agent.yaml"]);
251
+ const result = await discoverAgents({ configPath });
252
+ expect(result.agents).toHaveLength(1);
253
+ expect(result.agents[0].name).toBe("no-yaml-agent");
254
+ });
255
+ it("uses directory name when agent.yaml is invalid YAML", async () => {
256
+ const agentDir = join(tempDir, "agents", "bad-yaml-agent");
257
+ await mkdir(agentDir, { recursive: true });
258
+ await writeFile(join(agentDir, "agent.yaml"), "name: test\n bad: indent\n invalid", "utf-8");
259
+ const configPath = await createFleetConfig(["./agents/bad-yaml-agent/agent.yaml"]);
260
+ const result = await discoverAgents({ configPath });
261
+ expect(result.agents).toHaveLength(1);
262
+ expect(result.agents[0].name).toBe("bad-yaml-agent");
263
+ });
264
+ });
265
+ // ===========================================================================
266
+ // Config Path Tests
267
+ // ===========================================================================
268
+ describe("config path handling", () => {
269
+ it("throws when config file does not exist", async () => {
270
+ const configPath = join(tempDir, "nonexistent.yaml");
271
+ await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
272
+ try {
273
+ await discoverAgents({ configPath });
274
+ }
275
+ catch (err) {
276
+ const error = err;
277
+ expect(error.code).toBe(DISCOVERY_CONFIG_NOT_FOUND);
278
+ expect(error.message).toContain("Fleet config not found");
279
+ }
280
+ });
281
+ it("throws when config file is invalid YAML", async () => {
282
+ const configPath = join(tempDir, "herdctl.yaml");
283
+ await writeFile(configPath, "invalid: yaml: content:\n bad", "utf-8");
284
+ await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
285
+ try {
286
+ await discoverAgents({ configPath });
287
+ }
288
+ catch (err) {
289
+ const error = err;
290
+ expect(error.code).toBe(DISCOVERY_CONFIG_INVALID);
291
+ }
292
+ });
293
+ it("throws when config file is empty", async () => {
294
+ const configPath = join(tempDir, "herdctl.yaml");
295
+ await writeFile(configPath, "", "utf-8");
296
+ await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
297
+ try {
298
+ await discoverAgents({ configPath });
299
+ }
300
+ catch (err) {
301
+ const error = err;
302
+ expect(error.code).toBe(DISCOVERY_CONFIG_INVALID);
303
+ }
304
+ });
305
+ it("uses custom baseDir when provided", async () => {
306
+ // Create agent in a different base directory
307
+ const customBase = join(tempDir, "custom-base");
308
+ const agentDir = join(customBase, "agents", "custom-agent");
309
+ await mkdir(agentDir, { recursive: true });
310
+ await writeFile(join(agentDir, "agent.yaml"), "name: custom-agent\nruntime: sdk\n", "utf-8");
311
+ // Config is in tempDir but baseDir is customBase
312
+ const configPath = await createFleetConfig(["./agents/custom-agent/agent.yaml"]);
313
+ const result = await discoverAgents({ configPath, baseDir: customBase });
314
+ expect(result.agents).toHaveLength(1);
315
+ expect(result.agents[0].name).toBe("custom-agent");
316
+ expect(result.agents[0].path).toBe(agentDir);
317
+ });
318
+ });
319
+ // ===========================================================================
320
+ // Agent Reference Format Tests
321
+ // ===========================================================================
322
+ describe("agent reference formats", () => {
323
+ it("handles object form agent references", async () => {
324
+ await createAgent("object-ref", { withMetadata: false });
325
+ const configPath = await createFleetConfig(["./agents/object-ref/agent.yaml"]);
326
+ const result = await discoverAgents({ configPath });
327
+ expect(result.agents).toHaveLength(1);
328
+ expect(result.agents[0].configPath).toBe("./agents/object-ref/agent.yaml");
329
+ });
330
+ it("handles nested agent paths", async () => {
331
+ const nestedDir = join(tempDir, "deep", "nested", "agents", "nested-agent");
332
+ await mkdir(nestedDir, { recursive: true });
333
+ await writeFile(join(nestedDir, "agent.yaml"), "name: nested-agent\nruntime: sdk\n", "utf-8");
334
+ const configPath = await createFleetConfig(["./deep/nested/agents/nested-agent/agent.yaml"]);
335
+ const result = await discoverAgents({ configPath });
336
+ expect(result.agents).toHaveLength(1);
337
+ expect(result.agents[0].name).toBe("nested-agent");
338
+ });
339
+ it("skips invalid agent references in config", async () => {
340
+ await createAgent("valid-agent", { withMetadata: false });
341
+ // Create config manually with an invalid reference
342
+ const configPath = join(tempDir, "herdctl.yaml");
343
+ await writeFile(configPath, `version: 1
344
+ fleet:
345
+ name: test-fleet
346
+ agents:
347
+ - path: ./agents/valid-agent/agent.yaml
348
+ - invalid_key: not_a_path
349
+ - 12345
350
+ `, "utf-8");
351
+ const result = await discoverAgents({ configPath });
352
+ // Should only discover the valid agent
353
+ expect(result.agents).toHaveLength(1);
354
+ expect(result.agents[0].name).toBe("valid-agent");
355
+ });
356
+ });
357
+ // ===========================================================================
358
+ // Path Resolution Tests
359
+ // ===========================================================================
360
+ describe("path resolution", () => {
361
+ it("resolves agent path correctly", async () => {
362
+ await createAgent("path-test", { withMetadata: false });
363
+ const configPath = await createFleetConfig(["./agents/path-test/agent.yaml"]);
364
+ const result = await discoverAgents({ configPath });
365
+ expect(result.agents).toHaveLength(1);
366
+ expect(result.agents[0].path).toBe(join(tempDir, "agents", "path-test"));
367
+ expect(result.agents[0].configPath).toBe("./agents/path-test/agent.yaml");
368
+ });
369
+ });
370
+ // ===========================================================================
371
+ // Edge Cases
372
+ // ===========================================================================
373
+ describe("edge cases", () => {
374
+ it("handles agent with all optional fields", async () => {
375
+ await createAgent("full-agent", {
376
+ description: "A fully specified agent",
377
+ withMetadata: true,
378
+ metadata: {
379
+ source: {
380
+ type: "github",
381
+ url: "https://github.com/org/full-agent",
382
+ ref: "main",
383
+ version: "1.2.3",
384
+ },
385
+ installed_at: "2024-01-15T10:30:00Z",
386
+ installed_by: "herdctl@1.0.0",
387
+ },
388
+ });
389
+ const configPath = await createFleetConfig(["./agents/full-agent/agent.yaml"]);
390
+ const result = await discoverAgents({ configPath });
391
+ expect(result.agents).toHaveLength(1);
392
+ const agent = result.agents[0];
393
+ expect(agent.name).toBe("full-agent");
394
+ expect(agent.description).toBe("A fully specified agent");
395
+ expect(agent.installed).toBe(true);
396
+ expect(agent.version).toBe("1.2.3");
397
+ expect(agent.metadata?.installed_at).toBe("2024-01-15T10:30:00Z");
398
+ expect(agent.metadata?.installed_by).toBe("herdctl@1.0.0");
399
+ });
400
+ it("handles agent with minimal fields", async () => {
401
+ const agentDir = join(tempDir, "agents", "minimal");
402
+ await mkdir(agentDir, { recursive: true });
403
+ await writeFile(join(agentDir, "agent.yaml"), "name: minimal\n", "utf-8");
404
+ const configPath = await createFleetConfig(["./agents/minimal/agent.yaml"]);
405
+ const result = await discoverAgents({ configPath });
406
+ expect(result.agents).toHaveLength(1);
407
+ expect(result.agents[0].name).toBe("minimal");
408
+ expect(result.agents[0].description).toBeUndefined();
409
+ expect(result.agents[0].version).toBeUndefined();
410
+ expect(result.agents[0].installed).toBe(false);
411
+ });
412
+ it("handles local source type in metadata", async () => {
413
+ await createAgent("local-source", {
414
+ withMetadata: true,
415
+ metadata: {
416
+ source: {
417
+ type: "local",
418
+ url: "/path/to/local/agent",
419
+ },
420
+ },
421
+ });
422
+ const configPath = await createFleetConfig(["./agents/local-source/agent.yaml"]);
423
+ const result = await discoverAgents({ configPath });
424
+ expect(result.agents).toHaveLength(1);
425
+ expect(result.agents[0].installed).toBe(true);
426
+ expect(result.agents[0].metadata?.source.type).toBe("local");
427
+ });
428
+ it("handles duplicate agent paths in config (returns one entry)", async () => {
429
+ await createAgent("duplicate-agent", { withMetadata: false });
430
+ const configPath = await createFleetConfig([
431
+ "./agents/duplicate-agent/agent.yaml",
432
+ "./agents/duplicate-agent/agent.yaml",
433
+ ]);
434
+ const result = await discoverAgents({ configPath });
435
+ // Both entries are processed, so we get two results
436
+ // (deduplication would be a feature enhancement)
437
+ expect(result.agents).toHaveLength(2);
438
+ expect(result.agents[0].name).toBe("duplicate-agent");
439
+ expect(result.agents[1].name).toBe("duplicate-agent");
440
+ });
441
+ });
442
+ });
443
+ //# sourceMappingURL=agent-discovery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-discovery.test.js","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-discovery.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for agent info module
3
+ *
4
+ * Uses real file I/O with temporary directories to test agent info gathering.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=agent-info.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-info.test.d.ts","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-info.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}