@dcyfr/ai 1.0.1 → 1.0.2

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 (149) hide show
  1. package/dist/ai/agents/agent-loader.d.ts +131 -0
  2. package/dist/ai/agents/agent-loader.d.ts.map +1 -0
  3. package/dist/ai/agents/agent-loader.js +397 -0
  4. package/dist/ai/agents/agent-loader.js.map +1 -0
  5. package/dist/ai/agents/agent-registry.d.ts +120 -0
  6. package/dist/ai/agents/agent-registry.d.ts.map +1 -0
  7. package/dist/ai/agents/agent-registry.js +345 -0
  8. package/dist/ai/agents/agent-registry.js.map +1 -0
  9. package/dist/ai/agents/agent-router.d.ts +97 -0
  10. package/dist/ai/agents/agent-router.d.ts.map +1 -0
  11. package/dist/ai/agents/agent-router.js +375 -0
  12. package/dist/ai/agents/agent-router.js.map +1 -0
  13. package/dist/ai/agents/index.d.ts +10 -0
  14. package/dist/ai/agents/index.d.ts.map +1 -0
  15. package/dist/ai/agents/index.js +12 -0
  16. package/dist/ai/agents/index.js.map +1 -0
  17. package/dist/ai/agents/types.d.ts +264 -0
  18. package/dist/ai/agents/types.d.ts.map +1 -0
  19. package/dist/ai/agents/types.js +10 -0
  20. package/dist/ai/agents/types.js.map +1 -0
  21. package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts +12 -0
  22. package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts.map +1 -0
  23. package/dist/ai/agents-builtin/architecture/architecture-reviewer.js +92 -0
  24. package/dist/ai/agents-builtin/architecture/architecture-reviewer.js.map +1 -0
  25. package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts +12 -0
  26. package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts.map +1 -0
  27. package/dist/ai/agents-builtin/architecture/cloud-architect.js +103 -0
  28. package/dist/ai/agents-builtin/architecture/cloud-architect.js.map +1 -0
  29. package/dist/ai/agents-builtin/architecture/database-architect.d.ts +12 -0
  30. package/dist/ai/agents-builtin/architecture/database-architect.d.ts.map +1 -0
  31. package/dist/ai/agents-builtin/architecture/database-architect.js +95 -0
  32. package/dist/ai/agents-builtin/architecture/database-architect.js.map +1 -0
  33. package/dist/ai/agents-builtin/architecture/index.d.ts +11 -0
  34. package/dist/ai/agents-builtin/architecture/index.d.ts.map +1 -0
  35. package/dist/ai/agents-builtin/architecture/index.js +11 -0
  36. package/dist/ai/agents-builtin/architecture/index.js.map +1 -0
  37. package/dist/ai/agents-builtin/content/index.d.ts +9 -0
  38. package/dist/ai/agents-builtin/content/index.d.ts.map +1 -0
  39. package/dist/ai/agents-builtin/content/index.js +9 -0
  40. package/dist/ai/agents-builtin/content/index.js.map +1 -0
  41. package/dist/ai/agents-builtin/content/technical-writer.d.ts +12 -0
  42. package/dist/ai/agents-builtin/content/technical-writer.d.ts.map +1 -0
  43. package/dist/ai/agents-builtin/content/technical-writer.js +93 -0
  44. package/dist/ai/agents-builtin/content/technical-writer.js.map +1 -0
  45. package/dist/ai/agents-builtin/data/data-scientist.d.ts +12 -0
  46. package/dist/ai/agents-builtin/data/data-scientist.d.ts.map +1 -0
  47. package/dist/ai/agents-builtin/data/data-scientist.js +92 -0
  48. package/dist/ai/agents-builtin/data/data-scientist.js.map +1 -0
  49. package/dist/ai/agents-builtin/data/index.d.ts +9 -0
  50. package/dist/ai/agents-builtin/data/index.d.ts.map +1 -0
  51. package/dist/ai/agents-builtin/data/index.js +9 -0
  52. package/dist/ai/agents-builtin/data/index.js.map +1 -0
  53. package/dist/ai/agents-builtin/development/backend-architect.d.ts +12 -0
  54. package/dist/ai/agents-builtin/development/backend-architect.d.ts.map +1 -0
  55. package/dist/ai/agents-builtin/development/backend-architect.js +99 -0
  56. package/dist/ai/agents-builtin/development/backend-architect.js.map +1 -0
  57. package/dist/ai/agents-builtin/development/frontend-developer.d.ts +12 -0
  58. package/dist/ai/agents-builtin/development/frontend-developer.d.ts.map +1 -0
  59. package/dist/ai/agents-builtin/development/frontend-developer.js +106 -0
  60. package/dist/ai/agents-builtin/development/frontend-developer.js.map +1 -0
  61. package/dist/ai/agents-builtin/development/fullstack-developer.d.ts +12 -0
  62. package/dist/ai/agents-builtin/development/fullstack-developer.d.ts.map +1 -0
  63. package/dist/ai/agents-builtin/development/fullstack-developer.js +86 -0
  64. package/dist/ai/agents-builtin/development/fullstack-developer.js.map +1 -0
  65. package/dist/ai/agents-builtin/development/index.d.ts +12 -0
  66. package/dist/ai/agents-builtin/development/index.d.ts.map +1 -0
  67. package/dist/ai/agents-builtin/development/index.js +12 -0
  68. package/dist/ai/agents-builtin/development/index.js.map +1 -0
  69. package/dist/ai/agents-builtin/development/typescript-pro.d.ts +12 -0
  70. package/dist/ai/agents-builtin/development/typescript-pro.d.ts.map +1 -0
  71. package/dist/ai/agents-builtin/development/typescript-pro.js +98 -0
  72. package/dist/ai/agents-builtin/development/typescript-pro.js.map +1 -0
  73. package/dist/ai/agents-builtin/devops/devops-engineer.d.ts +12 -0
  74. package/dist/ai/agents-builtin/devops/devops-engineer.d.ts.map +1 -0
  75. package/dist/ai/agents-builtin/devops/devops-engineer.js +98 -0
  76. package/dist/ai/agents-builtin/devops/devops-engineer.js.map +1 -0
  77. package/dist/ai/agents-builtin/devops/index.d.ts +9 -0
  78. package/dist/ai/agents-builtin/devops/index.d.ts.map +1 -0
  79. package/dist/ai/agents-builtin/devops/index.js +9 -0
  80. package/dist/ai/agents-builtin/devops/index.js.map +1 -0
  81. package/dist/ai/agents-builtin/index.d.ts +36 -0
  82. package/dist/ai/agents-builtin/index.d.ts.map +1 -0
  83. package/dist/ai/agents-builtin/index.js +107 -0
  84. package/dist/ai/agents-builtin/index.js.map +1 -0
  85. package/dist/ai/agents-builtin/performance/index.d.ts +9 -0
  86. package/dist/ai/agents-builtin/performance/index.d.ts.map +1 -0
  87. package/dist/ai/agents-builtin/performance/index.js +9 -0
  88. package/dist/ai/agents-builtin/performance/index.js.map +1 -0
  89. package/dist/ai/agents-builtin/performance/performance-profiler.d.ts +12 -0
  90. package/dist/ai/agents-builtin/performance/performance-profiler.d.ts.map +1 -0
  91. package/dist/ai/agents-builtin/performance/performance-profiler.js +89 -0
  92. package/dist/ai/agents-builtin/performance/performance-profiler.js.map +1 -0
  93. package/dist/ai/agents-builtin/research/index.d.ts +9 -0
  94. package/dist/ai/agents-builtin/research/index.d.ts.map +1 -0
  95. package/dist/ai/agents-builtin/research/index.js +9 -0
  96. package/dist/ai/agents-builtin/research/index.js.map +1 -0
  97. package/dist/ai/agents-builtin/research/research-orchestrator.d.ts +12 -0
  98. package/dist/ai/agents-builtin/research/research-orchestrator.d.ts.map +1 -0
  99. package/dist/ai/agents-builtin/research/research-orchestrator.js +83 -0
  100. package/dist/ai/agents-builtin/research/research-orchestrator.js.map +1 -0
  101. package/dist/ai/agents-builtin/security/index.d.ts +9 -0
  102. package/dist/ai/agents-builtin/security/index.d.ts.map +1 -0
  103. package/dist/ai/agents-builtin/security/index.js +9 -0
  104. package/dist/ai/agents-builtin/security/index.js.map +1 -0
  105. package/dist/ai/agents-builtin/security/security-engineer.d.ts +12 -0
  106. package/dist/ai/agents-builtin/security/security-engineer.d.ts.map +1 -0
  107. package/dist/ai/agents-builtin/security/security-engineer.js +90 -0
  108. package/dist/ai/agents-builtin/security/security-engineer.js.map +1 -0
  109. package/dist/ai/agents-builtin/testing/debugger.d.ts +13 -0
  110. package/dist/ai/agents-builtin/testing/debugger.d.ts.map +1 -0
  111. package/dist/ai/agents-builtin/testing/debugger.js +89 -0
  112. package/dist/ai/agents-builtin/testing/debugger.js.map +1 -0
  113. package/dist/ai/agents-builtin/testing/index.d.ts +10 -0
  114. package/dist/ai/agents-builtin/testing/index.d.ts.map +1 -0
  115. package/dist/ai/agents-builtin/testing/index.js +10 -0
  116. package/dist/ai/agents-builtin/testing/index.js.map +1 -0
  117. package/dist/ai/agents-builtin/testing/test-engineer.d.ts +12 -0
  118. package/dist/ai/agents-builtin/testing/test-engineer.d.ts.map +1 -0
  119. package/dist/ai/agents-builtin/testing/test-engineer.js +93 -0
  120. package/dist/ai/agents-builtin/testing/test-engineer.js.map +1 -0
  121. package/dist/ai/config/loader.d.ts +19 -5
  122. package/dist/ai/config/loader.d.ts.map +1 -1
  123. package/dist/ai/config/loader.js +53 -18
  124. package/dist/ai/config/loader.js.map +1 -1
  125. package/dist/ai/config/schema.d.ts +600 -8
  126. package/dist/ai/config/schema.d.ts.map +1 -1
  127. package/dist/ai/config/schema.js +156 -0
  128. package/dist/ai/config/schema.js.map +1 -1
  129. package/dist/ai/index.d.ts +4 -1
  130. package/dist/ai/index.d.ts.map +1 -1
  131. package/dist/ai/index.js +35 -1
  132. package/dist/ai/index.js.map +1 -1
  133. package/dist/ai/mcp/index.d.ts +8 -0
  134. package/dist/ai/mcp/index.d.ts.map +1 -0
  135. package/dist/ai/mcp/index.js +8 -0
  136. package/dist/ai/mcp/index.js.map +1 -0
  137. package/dist/ai/mcp/mcp-registry.d.ts +127 -0
  138. package/dist/ai/mcp/mcp-registry.d.ts.map +1 -0
  139. package/dist/ai/mcp/mcp-registry.js +355 -0
  140. package/dist/ai/mcp/mcp-registry.js.map +1 -0
  141. package/dist/ai/mcp/types.d.ts +126 -0
  142. package/dist/ai/mcp/types.d.ts.map +1 -0
  143. package/dist/ai/mcp/types.js +9 -0
  144. package/dist/ai/mcp/types.js.map +1 -0
  145. package/dist/ai/utils/storage.d.ts +6 -1
  146. package/dist/ai/utils/storage.d.ts.map +1 -1
  147. package/dist/ai/utils/storage.js +57 -22
  148. package/dist/ai/utils/storage.js.map +1 -1
  149. package/package.json +1 -1
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Agent Loader - Dynamic agent loading and discovery
3
+ *
4
+ * Handles loading agents from filesystem, packages, and runtime registration.
5
+ * Supports multiple discovery patterns and validates agent manifests.
6
+ *
7
+ * @module @dcyfr/ai/agents/agent-loader
8
+ * @example
9
+ * ```typescript
10
+ * import { AgentLoader } from '@dcyfr/ai/agents/agent-loader';
11
+ *
12
+ * const loader = new AgentLoader({
13
+ * searchPaths: ['.claude/agents', 'node_modules/@dcyfr/ai/agents-builtin'],
14
+ * autoDiscover: true,
15
+ * });
16
+ *
17
+ * // Load all agents from search paths
18
+ * await loader.discoverAgents();
19
+ *
20
+ * // Load a specific agent
21
+ * await loader.loadAgent('@dcyfr/ai/agents-builtin/test-engineer');
22
+ *
23
+ * // Get loaded agent
24
+ * const agent = loader.getAgent('test-engineer');
25
+ * ```
26
+ */
27
+ import type { Agent, AgentManifest, AgentTier, AgentLoaderConfig, LoadedAgent } from './types';
28
+ /**
29
+ * Error thrown when agent loading fails
30
+ */
31
+ export declare class AgentLoadError extends Error {
32
+ agentName: string;
33
+ cause?: Error | undefined;
34
+ constructor(message: string, agentName: string, cause?: Error | undefined);
35
+ }
36
+ /**
37
+ * Error thrown when agent validation fails
38
+ */
39
+ export declare class AgentValidationError extends Error {
40
+ agentName: string;
41
+ constructor(message: string, agentName: string);
42
+ }
43
+ /**
44
+ * Agent Loader - manages agent loading and discovery
45
+ */
46
+ export declare class AgentLoader {
47
+ private agents;
48
+ private config;
49
+ constructor(config?: Partial<AgentLoaderConfig>);
50
+ /**
51
+ * Load an agent by module path, file path, or object
52
+ */
53
+ loadAgent(agentSource: string | Agent, tier?: AgentTier): Promise<LoadedAgent>;
54
+ /**
55
+ * Load multiple agents
56
+ */
57
+ loadAgents(agents: (string | Agent)[], tier?: AgentTier): Promise<LoadedAgent[]>;
58
+ /**
59
+ * Discover agents in search paths
60
+ */
61
+ discoverAgents(): Promise<AgentManifest[]>;
62
+ /**
63
+ * Unload an agent
64
+ */
65
+ unloadAgent(agentName: string): Promise<void>;
66
+ /**
67
+ * Enable an agent
68
+ */
69
+ enableAgent(agentName: string): void;
70
+ /**
71
+ * Disable an agent
72
+ */
73
+ disableAgent(agentName: string): void;
74
+ /**
75
+ * Get a loaded agent by name
76
+ */
77
+ getAgent(name: string): LoadedAgent | undefined;
78
+ /**
79
+ * Get all loaded agents
80
+ */
81
+ getAgents(): LoadedAgent[];
82
+ /**
83
+ * Get agents by tier
84
+ */
85
+ getAgentsByTier(tier: AgentTier): LoadedAgent[];
86
+ /**
87
+ * Get agents by category
88
+ */
89
+ getAgentsByCategory(category: string): LoadedAgent[];
90
+ /**
91
+ * Get enabled agents only
92
+ */
93
+ getEnabledAgents(): LoadedAgent[];
94
+ /**
95
+ * Get agent count
96
+ */
97
+ getAgentCount(): number;
98
+ /**
99
+ * Check if an agent is loaded
100
+ */
101
+ hasAgent(name: string): boolean;
102
+ /**
103
+ * Clear all agents
104
+ */
105
+ clearAll(): Promise<void>;
106
+ /**
107
+ * Parse agent from markdown file (CLAUDE.md format)
108
+ */
109
+ private parseAgentFromMarkdown;
110
+ /**
111
+ * Parse agent from JSON
112
+ */
113
+ private parseAgentFromJson;
114
+ /**
115
+ * Validate agent manifest
116
+ */
117
+ private validateManifest;
118
+ /**
119
+ * Execute function with timeout
120
+ */
121
+ private executeWithTimeout;
122
+ }
123
+ /**
124
+ * Get or create global agent loader
125
+ */
126
+ export declare function getGlobalAgentLoader(config?: Partial<AgentLoaderConfig>): AgentLoader;
127
+ /**
128
+ * Reset global agent loader
129
+ */
130
+ export declare function resetGlobalAgentLoader(): void;
131
+ //# sourceMappingURL=agent-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/agents/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAG9B,SAAS,EAAE,MAAM;IACjB,KAAK,CAAC,EAAE,KAAK;gBAFpB,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,SAAS,EAAE,MAAM;gBADxB,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,MAAM;CAK3B;AAYD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAInD;;OAEG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,GAAG,KAAK,EAC3B,IAAI,GAAE,SAAqB,GAC1B,OAAO,CAAC,WAAW,CAAC;IA+FvB;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,EAC1B,IAAI,GAAE,SAAqB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC;IAezB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAwChD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C;;OAEG;IACH,SAAS,IAAI,WAAW,EAAE;IAI1B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,EAAE;IAI/C;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAIpD;;OAEG;IACH,gBAAgB,IAAI,WAAW,EAAE;IAIjC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;YACW,sBAAsB;IA2CpC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;YACW,kBAAkB;CAejC;AAOD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,WAAW,CAKb;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Agent Loader - Dynamic agent loading and discovery
3
+ *
4
+ * Handles loading agents from filesystem, packages, and runtime registration.
5
+ * Supports multiple discovery patterns and validates agent manifests.
6
+ *
7
+ * @module @dcyfr/ai/agents/agent-loader
8
+ * @example
9
+ * ```typescript
10
+ * import { AgentLoader } from '@dcyfr/ai/agents/agent-loader';
11
+ *
12
+ * const loader = new AgentLoader({
13
+ * searchPaths: ['.claude/agents', 'node_modules/@dcyfr/ai/agents-builtin'],
14
+ * autoDiscover: true,
15
+ * });
16
+ *
17
+ * // Load all agents from search paths
18
+ * await loader.discoverAgents();
19
+ *
20
+ * // Load a specific agent
21
+ * await loader.loadAgent('@dcyfr/ai/agents-builtin/test-engineer');
22
+ *
23
+ * // Get loaded agent
24
+ * const agent = loader.getAgent('test-engineer');
25
+ * ```
26
+ */
27
+ /**
28
+ * Error thrown when agent loading fails
29
+ */
30
+ export class AgentLoadError extends Error {
31
+ agentName;
32
+ cause;
33
+ constructor(message, agentName, cause) {
34
+ super(message);
35
+ this.agentName = agentName;
36
+ this.cause = cause;
37
+ this.name = 'AgentLoadError';
38
+ }
39
+ }
40
+ /**
41
+ * Error thrown when agent validation fails
42
+ */
43
+ export class AgentValidationError extends Error {
44
+ agentName;
45
+ constructor(message, agentName) {
46
+ super(message);
47
+ this.agentName = agentName;
48
+ this.name = 'AgentValidationError';
49
+ }
50
+ }
51
+ /**
52
+ * Default configuration
53
+ */
54
+ const DEFAULT_CONFIG = {
55
+ searchPaths: [],
56
+ autoDiscover: false,
57
+ failureMode: 'throw',
58
+ timeout: 30000,
59
+ };
60
+ /**
61
+ * Agent Loader - manages agent loading and discovery
62
+ */
63
+ export class AgentLoader {
64
+ agents = new Map();
65
+ config;
66
+ constructor(config = {}) {
67
+ this.config = { ...DEFAULT_CONFIG, ...config };
68
+ }
69
+ /**
70
+ * Load an agent by module path, file path, or object
71
+ */
72
+ async loadAgent(agentSource, tier = 'project') {
73
+ try {
74
+ let agent;
75
+ let source;
76
+ if (typeof agentSource === 'string') {
77
+ source = agentSource;
78
+ // Check if it's a module path (starts with @ or no slashes at start)
79
+ if (agentSource.startsWith('@') || !agentSource.startsWith('/')) {
80
+ // Dynamic import from node_modules or relative path
81
+ const module = await import(agentSource);
82
+ agent = module.default || module;
83
+ }
84
+ else {
85
+ // File path - try to load as JSON or TypeScript/JavaScript
86
+ if (agentSource.endsWith('.json')) {
87
+ const module = await import(agentSource, { with: { type: 'json' } });
88
+ agent = this.parseAgentFromJson(module.default);
89
+ }
90
+ else if (agentSource.endsWith('.md')) {
91
+ agent = await this.parseAgentFromMarkdown(agentSource);
92
+ }
93
+ else {
94
+ const module = await import(agentSource);
95
+ agent = module.default || module;
96
+ }
97
+ }
98
+ }
99
+ else {
100
+ agent = agentSource;
101
+ source = 'runtime';
102
+ }
103
+ // Validate manifest
104
+ this.validateManifest(agent.manifest);
105
+ // Check for duplicates
106
+ if (this.agents.has(agent.manifest.name)) {
107
+ const existing = this.agents.get(agent.manifest.name);
108
+ // Allow override if new tier has higher priority
109
+ const tierPriority = {
110
+ project: 0,
111
+ private: 1,
112
+ public: 2,
113
+ };
114
+ if (tierPriority[tier] >= tierPriority[existing.tier]) {
115
+ throw new AgentValidationError(`Agent '${agent.manifest.name}' is already loaded from tier '${existing.tier}'`, agent.manifest.name);
116
+ }
117
+ // Override with higher priority tier
118
+ await this.unloadAgent(agent.manifest.name);
119
+ }
120
+ // Call onLoad hook if present
121
+ if (agent.onLoad) {
122
+ await this.executeWithTimeout(() => agent.onLoad(), this.config.timeout, `onLoad hook for ${agent.manifest.name}`);
123
+ }
124
+ // Store agent
125
+ const loadedAgent = {
126
+ name: agent.manifest.name,
127
+ manifest: agent.manifest,
128
+ agent,
129
+ tier,
130
+ source,
131
+ loaded: new Date(),
132
+ enabled: true,
133
+ };
134
+ this.agents.set(agent.manifest.name, loadedAgent);
135
+ return loadedAgent;
136
+ }
137
+ catch (error) {
138
+ const agentName = typeof agentSource === 'string' ? agentSource : 'unknown';
139
+ if (this.config.failureMode === 'throw') {
140
+ throw new AgentLoadError(`Failed to load agent: ${error instanceof Error ? error.message : String(error)}`, agentName, error instanceof Error ? error : undefined);
141
+ }
142
+ else if (this.config.failureMode === 'warn') {
143
+ console.warn(`⚠️ Failed to load agent ${agentName}:`, error);
144
+ }
145
+ // silent mode: do nothing
146
+ // Return a dummy LoadedAgent for non-throw modes
147
+ throw error;
148
+ }
149
+ }
150
+ /**
151
+ * Load multiple agents
152
+ */
153
+ async loadAgents(agents, tier = 'project') {
154
+ const results = [];
155
+ for (const agent of agents) {
156
+ try {
157
+ const loaded = await this.loadAgent(agent, tier);
158
+ results.push(loaded);
159
+ }
160
+ catch (error) {
161
+ if (this.config.failureMode === 'throw') {
162
+ throw error;
163
+ }
164
+ }
165
+ }
166
+ return results;
167
+ }
168
+ /**
169
+ * Discover agents in search paths
170
+ */
171
+ async discoverAgents() {
172
+ const discovered = [];
173
+ for (const searchPath of this.config.searchPaths) {
174
+ try {
175
+ // Use dynamic import to get the glob function
176
+ const { glob } = await import('glob');
177
+ // Search for agent files
178
+ const patterns = [
179
+ `${searchPath}/**/*.agent.ts`,
180
+ `${searchPath}/**/*.agent.js`,
181
+ `${searchPath}/**/*.agent.json`,
182
+ `${searchPath}/**/*.md`,
183
+ ];
184
+ for (const pattern of patterns) {
185
+ const files = await glob(pattern, { absolute: true });
186
+ for (const file of files) {
187
+ try {
188
+ const loaded = await this.loadAgent(file);
189
+ discovered.push(loaded.manifest);
190
+ }
191
+ catch (error) {
192
+ if (this.config.failureMode === 'warn') {
193
+ console.warn(`⚠️ Failed to discover agent at ${file}:`, error);
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ catch (error) {
200
+ if (this.config.failureMode === 'warn') {
201
+ console.warn(`⚠️ Failed to search path ${searchPath}:`, error);
202
+ }
203
+ }
204
+ }
205
+ return discovered;
206
+ }
207
+ /**
208
+ * Unload an agent
209
+ */
210
+ async unloadAgent(agentName) {
211
+ const loaded = this.agents.get(agentName);
212
+ if (!loaded) {
213
+ throw new Error(`Agent '${agentName}' is not loaded`);
214
+ }
215
+ // Call onUnload hook if present
216
+ if (loaded.agent.onUnload) {
217
+ await this.executeWithTimeout(() => loaded.agent.onUnload(), this.config.timeout, `onUnload hook for ${agentName}`);
218
+ }
219
+ this.agents.delete(agentName);
220
+ }
221
+ /**
222
+ * Enable an agent
223
+ */
224
+ enableAgent(agentName) {
225
+ const loaded = this.agents.get(agentName);
226
+ if (!loaded) {
227
+ throw new Error(`Agent '${agentName}' is not loaded`);
228
+ }
229
+ loaded.enabled = true;
230
+ }
231
+ /**
232
+ * Disable an agent
233
+ */
234
+ disableAgent(agentName) {
235
+ const loaded = this.agents.get(agentName);
236
+ if (!loaded) {
237
+ throw new Error(`Agent '${agentName}' is not loaded`);
238
+ }
239
+ loaded.enabled = false;
240
+ }
241
+ /**
242
+ * Get a loaded agent by name
243
+ */
244
+ getAgent(name) {
245
+ return this.agents.get(name);
246
+ }
247
+ /**
248
+ * Get all loaded agents
249
+ */
250
+ getAgents() {
251
+ return Array.from(this.agents.values());
252
+ }
253
+ /**
254
+ * Get agents by tier
255
+ */
256
+ getAgentsByTier(tier) {
257
+ return this.getAgents().filter((a) => a.tier === tier);
258
+ }
259
+ /**
260
+ * Get agents by category
261
+ */
262
+ getAgentsByCategory(category) {
263
+ return this.getAgents().filter((a) => a.manifest.category === category);
264
+ }
265
+ /**
266
+ * Get enabled agents only
267
+ */
268
+ getEnabledAgents() {
269
+ return this.getAgents().filter((a) => a.enabled);
270
+ }
271
+ /**
272
+ * Get agent count
273
+ */
274
+ getAgentCount() {
275
+ return this.agents.size;
276
+ }
277
+ /**
278
+ * Check if an agent is loaded
279
+ */
280
+ hasAgent(name) {
281
+ return this.agents.has(name);
282
+ }
283
+ /**
284
+ * Clear all agents
285
+ */
286
+ async clearAll() {
287
+ const names = Array.from(this.agents.keys());
288
+ await Promise.all(names.map((name) => this.unloadAgent(name)));
289
+ }
290
+ /**
291
+ * Parse agent from markdown file (CLAUDE.md format)
292
+ */
293
+ async parseAgentFromMarkdown(filePath) {
294
+ const fs = await import('fs/promises');
295
+ const path = await import('path');
296
+ const content = await fs.readFile(filePath, 'utf-8');
297
+ const fileName = path.basename(filePath, '.md');
298
+ // Extract frontmatter if present
299
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
300
+ let frontmatter = {};
301
+ let instructions = content;
302
+ if (frontmatterMatch) {
303
+ try {
304
+ const yaml = await import('yaml');
305
+ frontmatter = yaml.parse(frontmatterMatch[1]) || {};
306
+ instructions = content.slice(frontmatterMatch[0].length).trim();
307
+ }
308
+ catch {
309
+ // Frontmatter parsing failed, use entire content as instructions
310
+ }
311
+ }
312
+ // Build manifest from frontmatter or defaults
313
+ const manifest = {
314
+ name: frontmatter.name || fileName,
315
+ version: frontmatter.version || '1.0.0',
316
+ description: frontmatter.description || `Agent loaded from ${fileName}`,
317
+ category: frontmatter.category || 'specialized',
318
+ tier: frontmatter.tier || 'project',
319
+ model: frontmatter.model || 'sonnet',
320
+ permissionMode: frontmatter.permissionMode || 'acceptEdits',
321
+ tools: frontmatter.tools || [],
322
+ delegatesTo: frontmatter.delegatesTo,
323
+ tags: frontmatter.tags,
324
+ };
325
+ return {
326
+ manifest,
327
+ instructions,
328
+ systemPrompt: frontmatter.systemPrompt,
329
+ };
330
+ }
331
+ /**
332
+ * Parse agent from JSON
333
+ */
334
+ parseAgentFromJson(json) {
335
+ if (!json.manifest || typeof json.manifest !== 'object') {
336
+ throw new AgentValidationError('JSON agent missing required manifest object', 'unknown');
337
+ }
338
+ return {
339
+ manifest: json.manifest,
340
+ instructions: json.instructions,
341
+ systemPrompt: json.systemPrompt,
342
+ };
343
+ }
344
+ /**
345
+ * Validate agent manifest
346
+ */
347
+ validateManifest(manifest) {
348
+ if (!manifest.name) {
349
+ throw new AgentValidationError('Agent manifest missing required field: name', 'unknown');
350
+ }
351
+ if (!manifest.version) {
352
+ throw new AgentValidationError('Agent manifest missing required field: version', manifest.name);
353
+ }
354
+ // Validate version format (semver-like)
355
+ if (!/^\d+\.\d+\.\d+/.test(manifest.version)) {
356
+ throw new AgentValidationError(`Invalid version format: ${manifest.version} (expected x.y.z)`, manifest.name);
357
+ }
358
+ if (!manifest.category) {
359
+ throw new AgentValidationError('Agent manifest missing required field: category', manifest.name);
360
+ }
361
+ if (!manifest.tier) {
362
+ throw new AgentValidationError('Agent manifest missing required field: tier', manifest.name);
363
+ }
364
+ if (!manifest.description) {
365
+ console.warn(`⚠️ Agent ${manifest.name} missing description`);
366
+ }
367
+ }
368
+ /**
369
+ * Execute function with timeout
370
+ */
371
+ async executeWithTimeout(fn, timeout, taskName) {
372
+ return Promise.race([
373
+ Promise.resolve(fn()),
374
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout executing ${taskName}`)), timeout)),
375
+ ]);
376
+ }
377
+ }
378
+ /**
379
+ * Global agent loader instance
380
+ */
381
+ let globalLoader = null;
382
+ /**
383
+ * Get or create global agent loader
384
+ */
385
+ export function getGlobalAgentLoader(config) {
386
+ if (!globalLoader) {
387
+ globalLoader = new AgentLoader(config);
388
+ }
389
+ return globalLoader;
390
+ }
391
+ /**
392
+ * Reset global agent loader
393
+ */
394
+ export function resetGlobalAgentLoader() {
395
+ globalLoader = null;
396
+ }
397
+ //# sourceMappingURL=agent-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../../packages/ai/agents/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAUH;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG9B;IACA;IAHT,YACE,OAAe,EACR,SAAiB,EACjB,KAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,cAAS,GAAT,SAAS,CAAQ;QACjB,UAAK,GAAL,KAAK,CAAQ;QAGpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGpC;IAFT,YACE,OAAe,EACR,SAAiB;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,cAAS,GAAT,SAAS,CAAQ;QAGxB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,cAAc,GAAsB;IACxC,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,OAAO;IACpB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC7C,MAAM,CAAoB;IAElC,YAAY,SAAqC,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,WAA2B,EAC3B,OAAkB,SAAS;QAE3B,IAAI,CAAC;YACH,IAAI,KAAY,CAAC;YACjB,IAAI,MAAc,CAAC;YAEnB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,GAAG,WAAW,CAAC;gBAErB,qEAAqE;gBACrE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChE,oDAAoD;oBACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;oBACzC,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;wBACrE,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAClD,CAAC;yBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvC,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;wBACzC,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,WAAW,CAAC;gBACpB,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;YAED,oBAAoB;YACpB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEtC,uBAAuB;YACvB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC;gBACvD,iDAAiD;gBACjD,MAAM,YAAY,GAA8B;oBAC9C,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,CAAC;iBACV,CAAC;gBACF,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,MAAM,IAAI,oBAAoB,CAC5B,UAAU,KAAK,CAAC,QAAQ,CAAC,IAAI,kCAAkC,QAAQ,CAAC,IAAI,GAAG,EAC/E,KAAK,CAAC,QAAQ,CAAC,IAAI,CACpB,CAAC;gBACJ,CAAC;gBACD,qCAAqC;gBACrC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YAED,8BAA8B;YAC9B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,kBAAkB,CAC3B,GAAG,EAAE,CAAC,KAAK,CAAC,MAAO,EAAE,EACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,mBAAmB,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CACzC,CAAC;YACJ,CAAC;YAED,cAAc;YACd,MAAM,WAAW,GAAgB;gBAC/B,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;gBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK;gBACL,IAAI;gBACJ,MAAM;gBACN,MAAM,EAAE,IAAI,IAAI,EAAE;gBAClB,OAAO,EAAE,IAAI;aACd,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAElD,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,GACb,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAE5D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;gBACxC,MAAM,IAAI,cAAc,CACtB,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjF,SAAS,EACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,4BAA4B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;YACD,0BAA0B;YAE1B,iDAAiD;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,MAA0B,EAC1B,OAAkB,SAAS;QAE3B,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;oBACxC,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,UAAU,GAAoB,EAAE,CAAC;QAEvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBAEtC,yBAAyB;gBACzB,MAAM,QAAQ,GAAG;oBACf,GAAG,UAAU,gBAAgB;oBAC7B,GAAG,UAAU,gBAAgB;oBAC7B,GAAG,UAAU,kBAAkB;oBAC/B,GAAG,UAAU,UAAU;iBACxB,CAAC;gBAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;4BAC1C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACnC,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gCACvC,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;4BAClE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,6BAA6B,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,iBAAiB,CAAC,CAAC;QACxD,CAAC;QAED,gCAAgC;QAChC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,kBAAkB,CAC3B,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAS,EAAE,EAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,qBAAqB,SAAS,EAAE,CACjC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAiB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,iBAAiB,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,iBAAiB,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAe;QAC7B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QACnD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhD,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChE,IAAI,WAAW,GAA4B,EAAE,CAAC;QAC9C,IAAI,YAAY,GAAG,OAAO,CAAC;QAE3B,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,MAAM,QAAQ,GAAkB;YAC9B,IAAI,EAAG,WAAW,CAAC,IAAe,IAAI,QAAQ;YAC9C,OAAO,EAAG,WAAW,CAAC,OAAkB,IAAI,OAAO;YACnD,WAAW,EAAG,WAAW,CAAC,WAAsB,IAAI,qBAAqB,QAAQ,EAAE;YACnF,QAAQ,EAAG,WAAW,CAAC,QAAsC,IAAI,aAAa;YAC9E,IAAI,EAAG,WAAW,CAAC,IAA8B,IAAI,SAAS;YAC9D,KAAK,EAAG,WAAW,CAAC,KAAgC,IAAI,QAAQ;YAChE,cAAc,EAAG,WAAW,CAAC,cAAkD,IAAI,aAAa;YAChG,KAAK,EAAG,WAAW,CAAC,KAAkB,IAAI,EAAE;YAC5C,WAAW,EAAE,WAAW,CAAC,WAAmC;YAC5D,IAAI,EAAE,WAAW,CAAC,IAA4B;SAC/C,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,YAAY;YACZ,YAAY,EAAE,WAAW,CAAC,YAAkC;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAA6B;QACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,oBAAoB,CAC5B,6CAA6C,EAC7C,SAAS,CACV,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAyB;YACxC,YAAY,EAAE,IAAI,CAAC,YAAkC;YACrD,YAAY,EAAE,IAAI,CAAC,YAAkC;SACtD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAuB;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,oBAAoB,CAC5B,6CAA6C,EAC7C,SAAS,CACV,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,oBAAoB,CAC5B,gDAAgD,EAChD,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,QAAQ,CAAC,OAAO,mBAAmB,EAC9D,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,oBAAoB,CAC5B,iDAAiD,EACjD,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,oBAAoB,CAC5B,6CAA6C,EAC7C,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,EAAwB,EACxB,OAAe,EACf,QAAgB;QAEhB,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACrB,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC,EACxD,OAAO,CACR,CACF;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,IAAI,YAAY,GAAuB,IAAI,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAmC;IAEnC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Agent Registry - Multi-tier agent management
3
+ *
4
+ * Manages agents across three tiers with priority resolution:
5
+ * - project: Project-specific agents (highest priority)
6
+ * - private: @dcyfr/agents package (medium priority)
7
+ * - public: @dcyfr/ai built-in agents (lowest priority)
8
+ *
9
+ * @module @dcyfr/ai/agents/agent-registry
10
+ * @example
11
+ * ```typescript
12
+ * import { AgentRegistry } from '@dcyfr/ai/agents/agent-registry';
13
+ * import { dcyfrAgents } from '@dcyfr/agents';
14
+ *
15
+ * const registry = new AgentRegistry();
16
+ *
17
+ * // Register tier-specific sources
18
+ * registry.registerTier('public', '@dcyfr/ai/agents-builtin');
19
+ * registry.registerTier('private', dcyfrAgents);
20
+ * registry.registerTier('project', '.claude/agents');
21
+ *
22
+ * // Resolve agent with tier precedence
23
+ * const agent = registry.resolveAgent('test-engineer');
24
+ * ```
25
+ */
26
+ import type { Agent, AgentManifest, AgentTier, AgentCategory, AgentRegistryConfig, LoadedAgent } from './types';
27
+ /**
28
+ * Agent Registry - multi-tier agent management
29
+ */
30
+ export declare class AgentRegistry {
31
+ private tiers;
32
+ private config;
33
+ private initialized;
34
+ constructor(config?: Partial<AgentRegistryConfig>);
35
+ /**
36
+ * Initialize the registry with configured tiers
37
+ */
38
+ initialize(): Promise<void>;
39
+ /**
40
+ * Register a tier with a source (package path or agent array)
41
+ */
42
+ registerTier(tier: AgentTier, source: string | Agent[]): Promise<void>;
43
+ /**
44
+ * Load agents for a specific tier
45
+ */
46
+ loadTier(tier: AgentTier): Promise<void>;
47
+ /**
48
+ * Resolve an agent by name with tier precedence
49
+ * Priority: project > private > public
50
+ */
51
+ resolveAgent(name: string): Agent | undefined;
52
+ /**
53
+ * Get a loaded agent with metadata
54
+ */
55
+ getLoadedAgent(name: string): LoadedAgent | undefined;
56
+ /**
57
+ * Get all agents across all tiers
58
+ */
59
+ getAllAgents(): LoadedAgent[];
60
+ /**
61
+ * Get all agent manifests (for discovery/catalog)
62
+ */
63
+ getAllManifests(): AgentManifest[];
64
+ /**
65
+ * Get agents by category
66
+ */
67
+ getAgentsByCategory(category: AgentCategory): LoadedAgent[];
68
+ /**
69
+ * Get agents by tier
70
+ */
71
+ getAgentsByTier(tier: AgentTier): LoadedAgent[];
72
+ /**
73
+ * Get agents by tag
74
+ */
75
+ getAgentsByTag(tag: string): LoadedAgent[];
76
+ /**
77
+ * Search agents by name or description
78
+ */
79
+ searchAgents(query: string): LoadedAgent[];
80
+ /**
81
+ * Merge agent configurations (overlay pattern)
82
+ * Base agent from lower tier, overrides from higher tier
83
+ */
84
+ mergeAgentConfigs(baseAgent: Agent, overrides: Partial<Agent>): Agent;
85
+ /**
86
+ * Enable an agent by name (searches all tiers)
87
+ */
88
+ enableAgent(name: string): boolean;
89
+ /**
90
+ * Disable an agent by name (searches all tiers)
91
+ */
92
+ disableAgent(name: string): boolean;
93
+ /**
94
+ * Get registry statistics
95
+ */
96
+ getStats(): {
97
+ totalAgents: number;
98
+ byTier: Record<AgentTier, number>;
99
+ byCategory: Record<string, number>;
100
+ enabled: number;
101
+ disabled: number;
102
+ };
103
+ /**
104
+ * Clear all tiers and agents
105
+ */
106
+ clearAll(): Promise<void>;
107
+ /**
108
+ * Check if value is an Agent
109
+ */
110
+ private isAgent;
111
+ }
112
+ /**
113
+ * Get or create global agent registry
114
+ */
115
+ export declare function getGlobalAgentRegistry(config?: Partial<AgentRegistryConfig>): AgentRegistry;
116
+ /**
117
+ * Reset global agent registry
118
+ */
119
+ export declare function resetGlobalAgentRegistry(): void;
120
+ //# sourceMappingURL=agent-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../../packages/ai/agents/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,WAAW,EACZ,MAAM,SAAS,CAAC;AA+BjB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAIrD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IAqBhB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C9C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAgB7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAgBrD;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAiB7B;;OAEG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,EAAE;IAI3D;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,EAAE;IAM/C;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE;IAM1C;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAU1C;;;OAGG;IACH,iBAAiB,CACf,SAAS,EAAE,KAAK,EAChB,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GACxB,KAAK;IAiBR;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWlC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnC;;OAEG;IACH,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAoCD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B;;OAEG;IACH,OAAO,CAAC,OAAO;CAQhB;AAOD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,aAAa,CAKf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}