@agentvoy/core 0.1.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 (42) hide show
  1. package/dist/adapters/crewai.d.ts +8 -0
  2. package/dist/adapters/crewai.d.ts.map +1 -0
  3. package/dist/adapters/crewai.js +229 -0
  4. package/dist/adapters/crewai.js.map +1 -0
  5. package/dist/adapters/google-adk.d.ts +8 -0
  6. package/dist/adapters/google-adk.d.ts.map +1 -0
  7. package/dist/adapters/google-adk.js +146 -0
  8. package/dist/adapters/google-adk.js.map +1 -0
  9. package/dist/adapters/index.d.ts +7 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +23 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/openai.d.ts +8 -0
  14. package/dist/adapters/openai.d.ts.map +1 -0
  15. package/dist/adapters/openai.js +193 -0
  16. package/dist/adapters/openai.js.map +1 -0
  17. package/dist/adapters/registry.d.ts +13 -0
  18. package/dist/adapters/registry.d.ts.map +1 -0
  19. package/dist/adapters/registry.js +35 -0
  20. package/dist/adapters/registry.js.map +1 -0
  21. package/dist/config.d.ts +28 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +284 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/index.d.ts +12 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +26 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/types.d.ts +152 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/dist/types.js +9 -0
  32. package/dist/types.js.map +1 -0
  33. package/package.json +23 -0
  34. package/src/adapters/crewai.ts +254 -0
  35. package/src/adapters/google-adk.ts +167 -0
  36. package/src/adapters/index.ts +17 -0
  37. package/src/adapters/openai.ts +214 -0
  38. package/src/adapters/registry.ts +37 -0
  39. package/src/config.ts +315 -0
  40. package/src/index.ts +54 -0
  41. package/src/types.ts +203 -0
  42. package/tsconfig.json +8 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CrewAI Adapter
3
+ *
4
+ * Scaffolds projects using CrewAI (Python).
5
+ */
6
+ import type { FrameworkAdapter } from "../types.js";
7
+ export declare const crewaiAdapter: FrameworkAdapter;
8
+ //# sourceMappingURL=crewai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crewai.d.ts","sourceRoot":"","sources":["../../src/adapters/crewai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,aAAa,EAAE,gBAmF3B,CAAC"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /**
3
+ * CrewAI Adapter
4
+ *
5
+ * Scaffolds projects using CrewAI (Python).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.crewaiAdapter = void 0;
9
+ const config_js_1 = require("../config.js");
10
+ exports.crewaiAdapter = {
11
+ name: "crewai",
12
+ displayName: "CrewAI",
13
+ language: "python",
14
+ async scaffold(config) {
15
+ const files = [
16
+ {
17
+ path: "crew.py",
18
+ content: generateCrewFile(config),
19
+ },
20
+ {
21
+ path: "agents.py",
22
+ content: generateAgentsFile(config),
23
+ },
24
+ {
25
+ path: "tasks.py",
26
+ content: generateTasksFile(config),
27
+ },
28
+ {
29
+ path: "tools.py",
30
+ content: generateToolsFile(),
31
+ },
32
+ {
33
+ path: "run.py",
34
+ content: generateRunFile(config),
35
+ },
36
+ {
37
+ path: "requirements.txt",
38
+ content: generateRequirements(),
39
+ },
40
+ {
41
+ path: ".env.example",
42
+ content: generateEnvExample(config),
43
+ },
44
+ {
45
+ path: "agent.guard.yml",
46
+ content: (0, config_js_1.generateDefaultConfig)(config.projectName, config.model.provider, config.model.model),
47
+ },
48
+ ];
49
+ return {
50
+ files,
51
+ dependencies: {},
52
+ devDependencies: {},
53
+ scripts: {
54
+ start: "python run.py",
55
+ },
56
+ postInstallInstructions: [
57
+ "pip install -r requirements.txt",
58
+ "cp .env.example .env",
59
+ "Add your API key to .env",
60
+ "python run.py",
61
+ ],
62
+ };
63
+ },
64
+ validateConfig(config) {
65
+ const errors = [];
66
+ const warnings = [];
67
+ const supported = ["openai", "anthropic", "google", "ollama", "groq"];
68
+ if (!supported.includes(config.model.provider)) {
69
+ warnings.push({
70
+ field: "model.provider",
71
+ message: `CrewAI supports: ${supported.join(", ")}. Got "${config.model.provider}" — this may require additional configuration.`,
72
+ });
73
+ }
74
+ return { valid: errors.length === 0, errors, warnings };
75
+ },
76
+ getDependencies() {
77
+ return {
78
+ crewai: ">=0.80.0",
79
+ "crewai-tools": ">=0.14.0",
80
+ "python-dotenv": ">=1.0.0",
81
+ };
82
+ },
83
+ };
84
+ function generateCrewFile(config) {
85
+ return `"""
86
+ ${config.projectName} Crew — Built with AgentVoy
87
+ https://github.com/agentvoy
88
+ """
89
+
90
+ from crewai import Crew, Process
91
+ from agents import researcher, writer
92
+ from tasks import research_task, write_task
93
+
94
+
95
+ def create_crew() -> Crew:
96
+ """Create the crew with AgentVoy guardrails."""
97
+ crew = Crew(
98
+ agents=[researcher, writer],
99
+ tasks=[research_task, write_task],
100
+ process=Process.sequential,
101
+ verbose=True,
102
+ )
103
+ return crew
104
+ `;
105
+ }
106
+ function generateAgentsFile(config) {
107
+ const model = config.model.model || "gpt-4o";
108
+ return `"""
109
+ Agent definitions for ${config.projectName}.
110
+ """
111
+
112
+ from crewai import Agent
113
+ from tools import search_tool
114
+
115
+
116
+ researcher = Agent(
117
+ role="Research Analyst",
118
+ goal="Find accurate and comprehensive information on the given topic",
119
+ backstory="""You are an experienced research analyst with a keen eye
120
+ for detail. You excel at finding relevant information and synthesizing
121
+ it into clear insights.""",
122
+ tools=[search_tool],
123
+ llm="${model}",
124
+ verbose=True,
125
+ )
126
+
127
+ writer = Agent(
128
+ role="Content Writer",
129
+ goal="Create clear, engaging content based on research findings",
130
+ backstory="""You are a skilled writer who transforms complex research
131
+ into readable, well-structured content. You focus on clarity and
132
+ accuracy.""",
133
+ llm="${model}",
134
+ verbose=True,
135
+ )
136
+ `;
137
+ }
138
+ function generateTasksFile(config) {
139
+ return `"""
140
+ Task definitions for ${config.projectName}.
141
+ """
142
+
143
+ from crewai import Task
144
+ from agents import researcher, writer
145
+
146
+
147
+ research_task = Task(
148
+ description="""Research the following topic thoroughly: {topic}
149
+
150
+ Provide:
151
+ - Key facts and findings
152
+ - Relevant statistics
153
+ - Expert opinions or notable perspectives
154
+ """,
155
+ expected_output="A detailed research summary with key findings and sources.",
156
+ agent=researcher,
157
+ )
158
+
159
+ write_task = Task(
160
+ description="""Using the research provided, write a clear and engaging
161
+ summary about: {topic}
162
+
163
+ The output should be well-structured and accessible to a general audience.
164
+ """,
165
+ expected_output="A well-written article or summary based on the research.",
166
+ agent=writer,
167
+ )
168
+ `;
169
+ }
170
+ function generateToolsFile() {
171
+ return `"""
172
+ Agent tools — add your custom tools here.
173
+ """
174
+
175
+ from crewai.tools import tool
176
+
177
+
178
+ @tool("Search")
179
+ def search_tool(query: str) -> str:
180
+ """Search for information on a given topic."""
181
+ # TODO: Implement your search logic (e.g., using SerperDev, Tavily, etc.)
182
+ return f"Search results for: {query}"
183
+ `;
184
+ }
185
+ function generateRunFile(config) {
186
+ return `"""
187
+ Run the ${config.projectName} crew.
188
+ """
189
+
190
+ from dotenv import load_dotenv
191
+ from crew import create_crew
192
+
193
+ load_dotenv()
194
+
195
+
196
+ def main():
197
+ print("\\nšŸš€ ${config.projectName} — Powered by AgentVoy")
198
+ print("=" * 50)
199
+
200
+ topic = input("\\nEnter a topic to research: ")
201
+ if not topic.strip():
202
+ print("No topic provided. Exiting.")
203
+ return
204
+
205
+ crew = create_crew()
206
+ result = crew.kickoff(inputs={"topic": topic})
207
+
208
+ print("\\n" + "=" * 50)
209
+ print("RESULT:")
210
+ print("=" * 50)
211
+ print(result)
212
+
213
+
214
+ if __name__ == "__main__":
215
+ main()
216
+ `;
217
+ }
218
+ function generateRequirements() {
219
+ return `crewai>=0.80.0
220
+ crewai-tools>=0.14.0
221
+ python-dotenv>=1.0.0
222
+ `;
223
+ }
224
+ function generateEnvExample(config) {
225
+ const envVar = config.model.api_key_env ||
226
+ `${config.model.provider.toUpperCase()}_API_KEY`;
227
+ return `${envVar}=your-api-key-here\n`;
228
+ }
229
+ //# sourceMappingURL=crewai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crewai.js","sourceRoot":"","sources":["../../src/adapters/crewai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Google Agent Development Kit (ADK) Adapter
3
+ *
4
+ * Scaffolds projects using Google's ADK (Python).
5
+ */
6
+ import type { FrameworkAdapter } from "../types.js";
7
+ export declare const googleAdkAdapter: FrameworkAdapter;
8
+ //# sourceMappingURL=google-adk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-adk.d.ts","sourceRoot":"","sources":["../../src/adapters/google-adk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,gBAAgB,EAAE,gBA6E9B,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Google Agent Development Kit (ADK) Adapter
4
+ *
5
+ * Scaffolds projects using Google's ADK (Python).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.googleAdkAdapter = void 0;
9
+ const config_js_1 = require("../config.js");
10
+ exports.googleAdkAdapter = {
11
+ name: "google-adk",
12
+ displayName: "Google ADK",
13
+ language: "python",
14
+ async scaffold(config) {
15
+ const agentDir = config.projectName.replace(/-/g, "_");
16
+ const files = [
17
+ {
18
+ path: `${agentDir}/__init__.py`,
19
+ content: "",
20
+ },
21
+ {
22
+ path: `${agentDir}/agent.py`,
23
+ content: generateAgentFile(config),
24
+ },
25
+ {
26
+ path: `${agentDir}/tools.py`,
27
+ content: generateToolsFile(config),
28
+ },
29
+ {
30
+ path: "requirements.txt",
31
+ content: generateRequirements(),
32
+ },
33
+ {
34
+ path: ".env.example",
35
+ content: "GOOGLE_API_KEY=your-api-key-here\n",
36
+ },
37
+ {
38
+ path: "agent.guard.yml",
39
+ content: (0, config_js_1.generateDefaultConfig)(config.projectName, "google", config.model.model || "gemini-2.0-flash"),
40
+ },
41
+ ];
42
+ return {
43
+ files,
44
+ dependencies: {},
45
+ devDependencies: {},
46
+ scripts: {
47
+ start: `adk run ${agentDir}`,
48
+ web: `adk web ${agentDir}`,
49
+ },
50
+ postInstallInstructions: [
51
+ "pip install -r requirements.txt",
52
+ "cp .env.example .env",
53
+ "Add your GOOGLE_API_KEY to .env",
54
+ `adk run ${agentDir}`,
55
+ `Or use the web UI: adk web ${agentDir}`,
56
+ ],
57
+ };
58
+ },
59
+ validateConfig(config) {
60
+ const errors = [];
61
+ const warnings = [];
62
+ if (config.model.provider !== "google") {
63
+ warnings.push({
64
+ field: "model.provider",
65
+ message: `Google ADK works best with provider "google", got "${config.model.provider}"`,
66
+ });
67
+ }
68
+ return { valid: errors.length === 0, errors, warnings };
69
+ },
70
+ getDependencies() {
71
+ return {
72
+ "google-adk": ">=1.0.0",
73
+ "python-dotenv": ">=1.0.0",
74
+ };
75
+ },
76
+ };
77
+ function generateAgentFile(config) {
78
+ const model = config.model.model || "gemini-2.0-flash";
79
+ return `"""
80
+ ${config.projectName} — Built with AgentVoy
81
+ https://github.com/agentvoy
82
+ """
83
+
84
+ from google.adk.agents import Agent
85
+ from .tools import search_web, read_file
86
+
87
+ root_agent = Agent(
88
+ name="${config.projectName}",
89
+ model="${model}",
90
+ description="AI agent created with AgentVoy",
91
+ instruction="""You are a helpful AI assistant.
92
+
93
+ Follow these guidelines:
94
+ - Be concise and accurate
95
+ - Ask for clarification when the request is ambiguous
96
+ - Respect the guardrails defined in agent.guard.yml
97
+ """,
98
+ tools=[search_web, read_file],
99
+ )
100
+ `;
101
+ }
102
+ function generateToolsFile(_config) {
103
+ return `"""
104
+ Agent tools — add your custom tools here.
105
+ """
106
+
107
+ from google.adk.tools import FunctionTool
108
+
109
+
110
+ def search_web(query: str) -> dict:
111
+ """Search the web for information.
112
+
113
+ Args:
114
+ query: The search query string.
115
+
116
+ Returns:
117
+ A dictionary with search results.
118
+ """
119
+ # TODO: Implement your search logic
120
+ return {"results": f"Search results for: {query}"}
121
+
122
+
123
+ def read_file(path: str) -> dict:
124
+ """Read the contents of a file.
125
+
126
+ Args:
127
+ path: Path to the file to read.
128
+
129
+ Returns:
130
+ A dictionary with the file contents or an error message.
131
+ """
132
+ try:
133
+ with open(path, "r") as f:
134
+ return {"content": f.read()}
135
+ except FileNotFoundError:
136
+ return {"error": f"File not found: {path}"}
137
+ except PermissionError:
138
+ return {"error": f"Permission denied: {path}"}
139
+ `;
140
+ }
141
+ function generateRequirements() {
142
+ return `google-adk>=1.0.0
143
+ python-dotenv>=1.0.0
144
+ `;
145
+ }
146
+ //# sourceMappingURL=google-adk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-adk.js","sourceRoot":"","sources":["../../src/adapters/google-adk.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,4CAAqD;AAExC,QAAA,gBAAgB,GAAqB;IAChD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE,QAAQ;IAElB,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAoB;YAC7B;gBACE,IAAI,EAAE,GAAG,QAAQ,cAAc;gBAC/B,OAAO,EAAE,EAAE;aACZ;YACD;gBACE,IAAI,EAAE,GAAG,QAAQ,WAAW;gBAC5B,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;aACnC;YACD;gBACE,IAAI,EAAE,GAAG,QAAQ,WAAW;gBAC5B,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;aACnC;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,oBAAoB,EAAE;aAChC;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,oCAAoC;aAC9C;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,IAAA,iCAAqB,EAC5B,MAAM,CAAC,WAAW,EAClB,QAAQ,EACR,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,kBAAkB,CACzC;aACF;SACF,CAAC;QAEF,OAAO;YACL,KAAK;YACL,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,WAAW,QAAQ,EAAE;gBAC5B,GAAG,EAAE,WAAW,QAAQ,EAAE;aAC3B;YACD,uBAAuB,EAAE;gBACvB,iCAAiC;gBACjC,sBAAsB;gBACtB,iCAAiC;gBACjC,WAAW,QAAQ,EAAE;gBACrB,8BAA8B,QAAQ,EAAE;aACzC;SACF,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAwB;QACrC,MAAM,MAAM,GAAyC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAyC,EAAE,CAAC;QAE1D,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,sDAAsD,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;aACxF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,eAAe;QACb,OAAO;YACL,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAEvD,OAAO;EACP,MAAM,CAAC,WAAW;;;;;;;;YAQR,MAAM,CAAC,WAAW;aACjB,KAAK;;;;;;;;;;;CAWjB,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCR,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;CAER,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Framework Adapters
3
+ *
4
+ * Auto-registers all built-in adapters on import.
5
+ */
6
+ export { registerAdapter, getAdapter, listAdapters, listFrameworks, hasAdapter } from "./registry.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Framework Adapters
4
+ *
5
+ * Auto-registers all built-in adapters on import.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.hasAdapter = exports.listFrameworks = exports.listAdapters = exports.getAdapter = exports.registerAdapter = void 0;
9
+ var registry_js_1 = require("./registry.js");
10
+ Object.defineProperty(exports, "registerAdapter", { enumerable: true, get: function () { return registry_js_1.registerAdapter; } });
11
+ Object.defineProperty(exports, "getAdapter", { enumerable: true, get: function () { return registry_js_1.getAdapter; } });
12
+ Object.defineProperty(exports, "listAdapters", { enumerable: true, get: function () { return registry_js_1.listAdapters; } });
13
+ Object.defineProperty(exports, "listFrameworks", { enumerable: true, get: function () { return registry_js_1.listFrameworks; } });
14
+ Object.defineProperty(exports, "hasAdapter", { enumerable: true, get: function () { return registry_js_1.hasAdapter; } });
15
+ const registry_js_2 = require("./registry.js");
16
+ const openai_js_1 = require("./openai.js");
17
+ const google_adk_js_1 = require("./google-adk.js");
18
+ const crewai_js_1 = require("./crewai.js");
19
+ // Register built-in adapters
20
+ (0, registry_js_2.registerAdapter)(openai_js_1.openaiAdapter);
21
+ (0, registry_js_2.registerAdapter)(google_adk_js_1.googleAdkAdapter);
22
+ (0, registry_js_2.registerAdapter)(crewai_js_1.crewaiAdapter);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAAsG;AAA7F,8GAAA,eAAe,OAAA;AAAE,yGAAA,UAAU,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,6GAAA,cAAc,OAAA;AAAE,yGAAA,UAAU,OAAA;AAE9E,+CAAgD;AAChD,2CAA4C;AAC5C,mDAAmD;AACnD,2CAA4C;AAE5C,6BAA6B;AAC7B,IAAA,6BAAe,EAAC,yBAAa,CAAC,CAAC;AAC/B,IAAA,6BAAe,EAAC,gCAAgB,CAAC,CAAC;AAClC,IAAA,6BAAe,EAAC,yBAAa,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * OpenAI Agents SDK Adapter
3
+ *
4
+ * Scaffolds projects using the OpenAI Agents SDK (Python).
5
+ */
6
+ import type { FrameworkAdapter } from "../types.js";
7
+ export declare const openaiAdapter: FrameworkAdapter;
8
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,aAAa,EAAE,gBAyE3B,CAAC"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Agents SDK Adapter
4
+ *
5
+ * Scaffolds projects using the OpenAI Agents SDK (Python).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.openaiAdapter = void 0;
9
+ const config_js_1 = require("../config.js");
10
+ exports.openaiAdapter = {
11
+ name: "openai",
12
+ displayName: "OpenAI Agents SDK",
13
+ language: "python",
14
+ async scaffold(config) {
15
+ const files = [
16
+ {
17
+ path: "agent.py",
18
+ content: generateAgentFile(config),
19
+ },
20
+ {
21
+ path: "tools.py",
22
+ content: generateToolsFile(config),
23
+ },
24
+ {
25
+ path: "run.py",
26
+ content: generateRunFile(config),
27
+ },
28
+ {
29
+ path: "requirements.txt",
30
+ content: generateRequirements(),
31
+ },
32
+ {
33
+ path: ".env.example",
34
+ content: "OPENAI_API_KEY=your-api-key-here\n",
35
+ },
36
+ {
37
+ path: "agent.guard.yml",
38
+ content: (0, config_js_1.generateDefaultConfig)(config.projectName, config.model.provider, config.model.model),
39
+ },
40
+ ];
41
+ return {
42
+ files,
43
+ dependencies: {},
44
+ devDependencies: {},
45
+ scripts: {
46
+ start: "python run.py",
47
+ },
48
+ postInstallInstructions: [
49
+ "pip install -r requirements.txt",
50
+ "cp .env.example .env",
51
+ "Add your OPENAI_API_KEY to .env",
52
+ "python run.py",
53
+ ],
54
+ };
55
+ },
56
+ validateConfig(config) {
57
+ const errors = [];
58
+ const warnings = [];
59
+ if (config.model.provider !== "openai") {
60
+ warnings.push({
61
+ field: "model.provider",
62
+ message: `OpenAI adapter works best with provider "openai", got "${config.model.provider}"`,
63
+ });
64
+ }
65
+ return { valid: errors.length === 0, errors, warnings };
66
+ },
67
+ getDependencies() {
68
+ return {
69
+ "openai-agents": ">=0.1.0",
70
+ "python-dotenv": ">=1.0.0",
71
+ };
72
+ },
73
+ };
74
+ function generateAgentFile(config) {
75
+ const guardConfig = config.guardrails?.behavior;
76
+ const maxTurns = guardConfig?.max_iterations || 20;
77
+ return `"""
78
+ ${config.projectName} — Built with AgentVoy
79
+ https://github.com/agentvoy
80
+ """
81
+
82
+ from agents import Agent, Runner
83
+ from tools import get_tools
84
+
85
+
86
+ def create_agent() -> Agent:
87
+ """Create and configure the agent with AgentVoy guardrails."""
88
+ tools = get_tools()
89
+
90
+ agent = Agent(
91
+ name="${config.projectName}",
92
+ instructions="""You are a helpful AI assistant.
93
+
94
+ Follow these guidelines:
95
+ - Be concise and accurate
96
+ - Ask for clarification when the request is ambiguous
97
+ - Respect the guardrails defined in agent.guard.yml
98
+ """,
99
+ model="${config.model.model || "gpt-4o"}",
100
+ tools=tools,
101
+ )
102
+
103
+ return agent
104
+
105
+
106
+ async def run_agent(prompt: str) -> str:
107
+ """Run the agent with the given prompt."""
108
+ agent = create_agent()
109
+ result = await Runner.run(
110
+ agent,
111
+ prompt,
112
+ max_turns=${maxTurns},
113
+ )
114
+ return result.final_output
115
+ `;
116
+ }
117
+ function generateToolsFile(_config) {
118
+ return `"""
119
+ Agent tools — add your custom tools here.
120
+ """
121
+
122
+ from agents import function_tool
123
+
124
+
125
+ @function_tool
126
+ def search_web(query: str) -> str:
127
+ """Search the web for information."""
128
+ # TODO: Implement your search logic
129
+ return f"Search results for: {query}"
130
+
131
+
132
+ @function_tool
133
+ def read_file(path: str) -> str:
134
+ """Read the contents of a file."""
135
+ try:
136
+ with open(path, "r") as f:
137
+ return f.read()
138
+ except FileNotFoundError:
139
+ return f"File not found: {path}"
140
+ except PermissionError:
141
+ return f"Permission denied: {path}"
142
+
143
+
144
+ def get_tools() -> list:
145
+ """Return all available tools."""
146
+ return [search_web, read_file]
147
+ `;
148
+ }
149
+ function generateRunFile(config) {
150
+ return `"""
151
+ Run the ${config.projectName} agent.
152
+ """
153
+
154
+ import asyncio
155
+ import os
156
+ from dotenv import load_dotenv
157
+ from agent import run_agent
158
+
159
+ load_dotenv()
160
+
161
+
162
+ async def main():
163
+ print("\\nšŸš€ ${config.projectName} — Powered by AgentVoy")
164
+ print("=" * 50)
165
+ print("Type your prompt (or 'quit' to exit):\\n")
166
+
167
+ while True:
168
+ try:
169
+ prompt = input("> ")
170
+ if prompt.lower() in ("quit", "exit", "q"):
171
+ print("\\nGoodbye!")
172
+ break
173
+ if not prompt.strip():
174
+ continue
175
+
176
+ print("\\nThinking...\\n")
177
+ result = await run_agent(prompt)
178
+ print(f"\\n{result}\\n")
179
+ except KeyboardInterrupt:
180
+ print("\\n\\nGoodbye!")
181
+ break
182
+
183
+
184
+ if __name__ == "__main__":
185
+ asyncio.run(main())
186
+ `;
187
+ }
188
+ function generateRequirements() {
189
+ return `openai-agents>=0.1.0
190
+ python-dotenv>=1.0.0
191
+ `;
192
+ }
193
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,4CAAqD;AAExC,QAAA,aAAa,GAAqB;IAC7C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mBAAmB;IAChC,QAAQ,EAAE,QAAQ;IAElB,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,KAAK,GAAoB;YAC7B;gBACE,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;aACnC;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;aACnC;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC;aACjC;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,oBAAoB,EAAE;aAChC;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,oCAAoC;aAC9C;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,IAAA,iCAAqB,EAC5B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,EACrB,MAAM,CAAC,KAAK,CAAC,KAAK,CACnB;aACF;SACF,CAAC;QAEF,OAAO;YACL,KAAK;YACL,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,eAAe;aACvB;YACD,uBAAuB,EAAE;gBACvB,iCAAiC;gBACjC,sBAAsB;gBACtB,iCAAiC;gBACjC,eAAe;aAChB;SACF,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAwB;QACrC,MAAM,MAAM,GAAyC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAyC,EAAE,CAAC;QAE1D,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,0DAA0D,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;aAC5F,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,eAAe;QACb,OAAO;YACL,eAAe,EAAE,SAAS;YAC1B,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChD,MAAM,QAAQ,GAAG,WAAW,EAAE,cAAc,IAAI,EAAE,CAAC;IAEnD,OAAO;EACP,MAAM,CAAC,WAAW;;;;;;;;;;;;;gBAaJ,MAAM,CAAC,WAAW;;;;;;;;iBAQjB,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ;;;;;;;;;;;;;oBAa3B,QAAQ;;;CAG3B,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BR,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO;UACC,MAAM,CAAC,WAAW;;;;;;;;;;;;mBAYT,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;CAuBpC,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;CAER,CAAC;AACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Framework Adapter Registry
3
+ *
4
+ * Central registry for all supported agent framework adapters.
5
+ * Each adapter knows how to scaffold a project for its framework.
6
+ */
7
+ import type { Framework, FrameworkAdapter } from "../types.js";
8
+ export declare function registerAdapter(adapter: FrameworkAdapter): void;
9
+ export declare function getAdapter(framework: Framework): FrameworkAdapter;
10
+ export declare function listAdapters(): FrameworkAdapter[];
11
+ export declare function listFrameworks(): Framework[];
12
+ export declare function hasAdapter(framework: Framework): boolean;
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/D,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,CASjE;AAED,wBAAgB,YAAY,IAAI,gBAAgB,EAAE,CAEjD;AAED,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAExD"}