@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.
- package/dist/ai/agents/agent-loader.d.ts +131 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -0
- package/dist/ai/agents/agent-loader.js +397 -0
- package/dist/ai/agents/agent-loader.js.map +1 -0
- package/dist/ai/agents/agent-registry.d.ts +120 -0
- package/dist/ai/agents/agent-registry.d.ts.map +1 -0
- package/dist/ai/agents/agent-registry.js +345 -0
- package/dist/ai/agents/agent-registry.js.map +1 -0
- package/dist/ai/agents/agent-router.d.ts +97 -0
- package/dist/ai/agents/agent-router.d.ts.map +1 -0
- package/dist/ai/agents/agent-router.js +375 -0
- package/dist/ai/agents/agent-router.js.map +1 -0
- package/dist/ai/agents/index.d.ts +10 -0
- package/dist/ai/agents/index.d.ts.map +1 -0
- package/dist/ai/agents/index.js +12 -0
- package/dist/ai/agents/index.js.map +1 -0
- package/dist/ai/agents/types.d.ts +264 -0
- package/dist/ai/agents/types.d.ts.map +1 -0
- package/dist/ai/agents/types.js +10 -0
- package/dist/ai/agents/types.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.js +92 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.js +103 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/database-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/database-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/database-architect.js +95 -0
- package/dist/ai/agents-builtin/architecture/database-architect.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/index.d.ts +11 -0
- package/dist/ai/agents-builtin/architecture/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/index.js +11 -0
- package/dist/ai/agents-builtin/architecture/index.js.map +1 -0
- package/dist/ai/agents-builtin/content/index.d.ts +9 -0
- package/dist/ai/agents-builtin/content/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/content/index.js +9 -0
- package/dist/ai/agents-builtin/content/index.js.map +1 -0
- package/dist/ai/agents-builtin/content/technical-writer.d.ts +12 -0
- package/dist/ai/agents-builtin/content/technical-writer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/content/technical-writer.js +93 -0
- package/dist/ai/agents-builtin/content/technical-writer.js.map +1 -0
- package/dist/ai/agents-builtin/data/data-scientist.d.ts +12 -0
- package/dist/ai/agents-builtin/data/data-scientist.d.ts.map +1 -0
- package/dist/ai/agents-builtin/data/data-scientist.js +92 -0
- package/dist/ai/agents-builtin/data/data-scientist.js.map +1 -0
- package/dist/ai/agents-builtin/data/index.d.ts +9 -0
- package/dist/ai/agents-builtin/data/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/data/index.js +9 -0
- package/dist/ai/agents-builtin/data/index.js.map +1 -0
- package/dist/ai/agents-builtin/development/backend-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/development/backend-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/backend-architect.js +99 -0
- package/dist/ai/agents-builtin/development/backend-architect.js.map +1 -0
- package/dist/ai/agents-builtin/development/frontend-developer.d.ts +12 -0
- package/dist/ai/agents-builtin/development/frontend-developer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/frontend-developer.js +106 -0
- package/dist/ai/agents-builtin/development/frontend-developer.js.map +1 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.d.ts +12 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.js +86 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.js.map +1 -0
- package/dist/ai/agents-builtin/development/index.d.ts +12 -0
- package/dist/ai/agents-builtin/development/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/index.js +12 -0
- package/dist/ai/agents-builtin/development/index.js.map +1 -0
- package/dist/ai/agents-builtin/development/typescript-pro.d.ts +12 -0
- package/dist/ai/agents-builtin/development/typescript-pro.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/typescript-pro.js +98 -0
- package/dist/ai/agents-builtin/development/typescript-pro.js.map +1 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.js +98 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.js.map +1 -0
- package/dist/ai/agents-builtin/devops/index.d.ts +9 -0
- package/dist/ai/agents-builtin/devops/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/devops/index.js +9 -0
- package/dist/ai/agents-builtin/devops/index.js.map +1 -0
- package/dist/ai/agents-builtin/index.d.ts +36 -0
- package/dist/ai/agents-builtin/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/index.js +107 -0
- package/dist/ai/agents-builtin/index.js.map +1 -0
- package/dist/ai/agents-builtin/performance/index.d.ts +9 -0
- package/dist/ai/agents-builtin/performance/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/performance/index.js +9 -0
- package/dist/ai/agents-builtin/performance/index.js.map +1 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.d.ts +12 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.d.ts.map +1 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.js +89 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.js.map +1 -0
- package/dist/ai/agents-builtin/research/index.d.ts +9 -0
- package/dist/ai/agents-builtin/research/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/research/index.js +9 -0
- package/dist/ai/agents-builtin/research/index.js.map +1 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.d.ts +12 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.d.ts.map +1 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.js +83 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.js.map +1 -0
- package/dist/ai/agents-builtin/security/index.d.ts +9 -0
- package/dist/ai/agents-builtin/security/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/security/index.js +9 -0
- package/dist/ai/agents-builtin/security/index.js.map +1 -0
- package/dist/ai/agents-builtin/security/security-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/security/security-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/security/security-engineer.js +90 -0
- package/dist/ai/agents-builtin/security/security-engineer.js.map +1 -0
- package/dist/ai/agents-builtin/testing/debugger.d.ts +13 -0
- package/dist/ai/agents-builtin/testing/debugger.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/debugger.js +89 -0
- package/dist/ai/agents-builtin/testing/debugger.js.map +1 -0
- package/dist/ai/agents-builtin/testing/index.d.ts +10 -0
- package/dist/ai/agents-builtin/testing/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/index.js +10 -0
- package/dist/ai/agents-builtin/testing/index.js.map +1 -0
- package/dist/ai/agents-builtin/testing/test-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/testing/test-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/test-engineer.js +93 -0
- package/dist/ai/agents-builtin/testing/test-engineer.js.map +1 -0
- package/dist/ai/config/loader.d.ts +19 -5
- package/dist/ai/config/loader.d.ts.map +1 -1
- package/dist/ai/config/loader.js +53 -18
- package/dist/ai/config/loader.js.map +1 -1
- package/dist/ai/config/schema.d.ts +600 -8
- package/dist/ai/config/schema.d.ts.map +1 -1
- package/dist/ai/config/schema.js +156 -0
- package/dist/ai/config/schema.js.map +1 -1
- package/dist/ai/index.d.ts +4 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +35 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/index.d.ts +8 -0
- package/dist/ai/mcp/index.d.ts.map +1 -0
- package/dist/ai/mcp/index.js +8 -0
- package/dist/ai/mcp/index.js.map +1 -0
- package/dist/ai/mcp/mcp-registry.d.ts +127 -0
- package/dist/ai/mcp/mcp-registry.d.ts.map +1 -0
- package/dist/ai/mcp/mcp-registry.js +355 -0
- package/dist/ai/mcp/mcp-registry.js.map +1 -0
- package/dist/ai/mcp/types.d.ts +126 -0
- package/dist/ai/mcp/types.d.ts.map +1 -0
- package/dist/ai/mcp/types.js +9 -0
- package/dist/ai/mcp/types.js.map +1 -0
- package/dist/ai/utils/storage.d.ts +6 -1
- package/dist/ai/utils/storage.d.ts.map +1 -1
- package/dist/ai/utils/storage.js +57 -22
- package/dist/ai/utils/storage.js.map +1 -1
- 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":"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"}
|
|
@@ -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"}
|