@agentvoy/core 0.2.0 → 0.4.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 (92) hide show
  1. package/README.md +65 -0
  2. package/dist/adapters/anthropic.d.ts.map +1 -1
  3. package/dist/adapters/anthropic.js +75 -75
  4. package/dist/adapters/anthropic.js.map +1 -1
  5. package/dist/adapters/app-scaffold.d.ts +12 -0
  6. package/dist/adapters/app-scaffold.d.ts.map +1 -0
  7. package/dist/adapters/app-scaffold.js +49 -0
  8. package/dist/adapters/app-scaffold.js.map +1 -0
  9. package/dist/adapters/autogen.d.ts +8 -0
  10. package/dist/adapters/autogen.d.ts.map +1 -0
  11. package/dist/adapters/autogen.js +259 -0
  12. package/dist/adapters/autogen.js.map +1 -0
  13. package/dist/adapters/crewai.d.ts.map +1 -1
  14. package/dist/adapters/crewai.js +80 -52
  15. package/dist/adapters/crewai.js.map +1 -1
  16. package/dist/adapters/google-adk.d.ts.map +1 -1
  17. package/dist/adapters/google-adk.js +73 -37
  18. package/dist/adapters/google-adk.js.map +1 -1
  19. package/dist/adapters/index.js +4 -0
  20. package/dist/adapters/index.js.map +1 -1
  21. package/dist/adapters/langgraph.d.ts.map +1 -1
  22. package/dist/adapters/langgraph.js +41 -42
  23. package/dist/adapters/langgraph.js.map +1 -1
  24. package/dist/adapters/llamaindex.d.ts +8 -0
  25. package/dist/adapters/llamaindex.d.ts.map +1 -0
  26. package/dist/adapters/llamaindex.js +230 -0
  27. package/dist/adapters/llamaindex.js.map +1 -0
  28. package/dist/adapters/openai.d.ts.map +1 -1
  29. package/dist/adapters/openai.js +76 -53
  30. package/dist/adapters/openai.js.map +1 -1
  31. package/dist/deployers/api-wrapper.d.ts +11 -0
  32. package/dist/deployers/api-wrapper.d.ts.map +1 -0
  33. package/dist/deployers/api-wrapper.js +86 -0
  34. package/dist/deployers/api-wrapper.js.map +1 -0
  35. package/dist/deployers/aws-lambda.d.ts +3 -0
  36. package/dist/deployers/aws-lambda.d.ts.map +1 -0
  37. package/dist/deployers/aws-lambda.js +101 -0
  38. package/dist/deployers/aws-lambda.js.map +1 -0
  39. package/dist/deployers/docker.d.ts +3 -0
  40. package/dist/deployers/docker.d.ts.map +1 -0
  41. package/dist/deployers/docker.js +123 -0
  42. package/dist/deployers/docker.js.map +1 -0
  43. package/dist/deployers/fly-io.d.ts +3 -0
  44. package/dist/deployers/fly-io.d.ts.map +1 -0
  45. package/dist/deployers/fly-io.js +84 -0
  46. package/dist/deployers/fly-io.js.map +1 -0
  47. package/dist/deployers/gcp-cloud-run.d.ts +3 -0
  48. package/dist/deployers/gcp-cloud-run.d.ts.map +1 -0
  49. package/dist/deployers/gcp-cloud-run.js +75 -0
  50. package/dist/deployers/gcp-cloud-run.js.map +1 -0
  51. package/dist/deployers/guard-mapper.d.ts +6 -0
  52. package/dist/deployers/guard-mapper.d.ts.map +1 -0
  53. package/dist/deployers/guard-mapper.js +63 -0
  54. package/dist/deployers/guard-mapper.js.map +1 -0
  55. package/dist/deployers/index.d.ts +6 -0
  56. package/dist/deployers/index.d.ts.map +1 -0
  57. package/dist/deployers/index.js +30 -0
  58. package/dist/deployers/index.js.map +1 -0
  59. package/dist/deployers/pipeline.d.ts +9 -0
  60. package/dist/deployers/pipeline.d.ts.map +1 -0
  61. package/dist/deployers/pipeline.js +55 -0
  62. package/dist/deployers/pipeline.js.map +1 -0
  63. package/dist/deployers/railway.d.ts +3 -0
  64. package/dist/deployers/railway.d.ts.map +1 -0
  65. package/dist/deployers/railway.js +53 -0
  66. package/dist/deployers/railway.js.map +1 -0
  67. package/dist/deployers/registry.d.ts +7 -0
  68. package/dist/deployers/registry.d.ts.map +1 -0
  69. package/dist/deployers/registry.js +29 -0
  70. package/dist/deployers/registry.js.map +1 -0
  71. package/dist/deployers/streamlit-app.d.ts +10 -0
  72. package/dist/deployers/streamlit-app.d.ts.map +1 -0
  73. package/dist/deployers/streamlit-app.js +80 -0
  74. package/dist/deployers/streamlit-app.js.map +1 -0
  75. package/dist/index.d.ts +2 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +13 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/types.d.ts +41 -0
  80. package/dist/types.d.ts.map +1 -1
  81. package/package.json +17 -1
  82. package/src/adapters/anthropic.ts +0 -268
  83. package/src/adapters/crewai.ts +0 -254
  84. package/src/adapters/google-adk.ts +0 -167
  85. package/src/adapters/index.ts +0 -21
  86. package/src/adapters/langgraph.ts +0 -336
  87. package/src/adapters/openai.ts +0 -214
  88. package/src/adapters/registry.ts +0 -37
  89. package/src/config.ts +0 -315
  90. package/src/index.ts +0 -54
  91. package/src/types.ts +0 -203
  92. package/tsconfig.json +0 -8
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ /**
3
+ * LlamaIndex Adapter
4
+ *
5
+ * Scaffolds projects using LlamaIndex (Python).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.llamaindexAdapter = void 0;
9
+ const config_js_1 = require("../config.js");
10
+ const app_scaffold_js_1 = require("./app-scaffold.js");
11
+ exports.llamaindexAdapter = {
12
+ name: "llamaindex",
13
+ displayName: "LlamaIndex",
14
+ language: "python",
15
+ async scaffold(config) {
16
+ const isApp = config.buildMode === "app";
17
+ const agentNames = config.agentNames ?? ["agent"];
18
+ const files = [];
19
+ if (isApp) {
20
+ for (const agentName of agentNames) {
21
+ files.push({
22
+ path: `src/agents/${agentName}.py`,
23
+ content: generateAgentFile(config, agentName),
24
+ });
25
+ }
26
+ files.push({ path: "src/tools/tools.py", content: generateToolsFile(config) });
27
+ for (const f of (0, app_scaffold_js_1.generateAppInfraFiles)(config))
28
+ files.push(f);
29
+ }
30
+ else {
31
+ files.push({ path: "agent.py", content: generateAgentFile(config, "agent") });
32
+ files.push({ path: "tools.py", content: generateToolsFile(config) });
33
+ files.push({ path: "run.py", content: generateRunFile(config) });
34
+ }
35
+ const envVar = getEnvVar(config.model.provider);
36
+ files.push({ path: "requirements.txt", content: generateRequirements(isApp) });
37
+ files.push({ path: ".env.example", content: `${envVar}=your-api-key-here\n` });
38
+ files.push({
39
+ path: "agent.guard.yml",
40
+ content: (0, config_js_1.generateDefaultConfig)(config.projectName, config.model.provider, config.model.model),
41
+ });
42
+ return {
43
+ files,
44
+ dependencies: {},
45
+ devDependencies: {},
46
+ scripts: { start: isApp ? "uvicorn server:app --reload --port 8080" : "python run.py" },
47
+ postInstallInstructions: isApp
48
+ ? (0, app_scaffold_js_1.appPostInstallInstructions)(envVar)
49
+ : [
50
+ "pip install -r requirements.txt",
51
+ "cp .env.example .env",
52
+ `Add your ${envVar} to .env`,
53
+ "python run.py",
54
+ ],
55
+ };
56
+ },
57
+ validateConfig(config) {
58
+ const errors = [];
59
+ const warnings = [];
60
+ const supported = ["openai", "anthropic", "google"];
61
+ if (!supported.includes(config.model.provider)) {
62
+ warnings.push({
63
+ field: "model.provider",
64
+ message: `LlamaIndex works best with openai, anthropic, or google. Got "${config.model.provider}"`,
65
+ });
66
+ }
67
+ return { valid: errors.length === 0, errors, warnings };
68
+ },
69
+ getDependencies() {
70
+ return {
71
+ "llama-index": ">=0.12.0",
72
+ "python-dotenv": ">=1.0.0",
73
+ };
74
+ },
75
+ };
76
+ function getLLMImport(config) {
77
+ const provider = config.model.provider;
78
+ const model = config.model.model || "gpt-4o";
79
+ if (provider === "anthropic") {
80
+ return `from llama_index.llms.anthropic import Anthropic
81
+ llm = Anthropic(model="${model}")`;
82
+ }
83
+ if (provider === "google") {
84
+ return `from llama_index.llms.gemini import Gemini
85
+ llm = Gemini(model="${model}")`;
86
+ }
87
+ return `from llama_index.llms.openai import OpenAI
88
+ llm = OpenAI(model="${model}")`;
89
+ }
90
+ function getEnvVar(provider) {
91
+ const map = {
92
+ openai: "OPENAI_API_KEY",
93
+ anthropic: "ANTHROPIC_API_KEY",
94
+ google: "GOOGLE_API_KEY",
95
+ groq: "GROQ_API_KEY",
96
+ mistral: "MISTRAL_API_KEY",
97
+ };
98
+ return map[provider] || "OPENAI_API_KEY";
99
+ }
100
+ function generateAgentFile(config, agentName) {
101
+ const isApp = config.buildMode === "app";
102
+ const toolsImport = isApp
103
+ ? "from src.tools.tools import get_tools"
104
+ : "from tools import get_tools";
105
+ const llmSetup = getLLMImport(config);
106
+ const maxIter = config.guardrails?.behavior?.max_iterations || 20;
107
+ return `"""
108
+ ${agentName} agent — Part of ${config.projectName} (Built with AgentVoy)
109
+ """
110
+
111
+ from dotenv import load_dotenv
112
+ from llama_index.core.agent import ReActAgent
113
+ ${llmSetup.split("\n")[0]}
114
+ ${toolsImport}
115
+
116
+ load_dotenv()
117
+
118
+ ${llmSetup.split("\n").slice(1).join("\n")}
119
+
120
+
121
+ def create_agent() -> ReActAgent:
122
+ """Create and configure the LlamaIndex ReAct agent."""
123
+ tools = get_tools()
124
+ agent = ReActAgent.from_tools(
125
+ tools,
126
+ llm=llm,
127
+ verbose=True,
128
+ max_iterations=${maxIter},
129
+ system_prompt="""You are a helpful AI assistant.
130
+
131
+ Follow these guidelines:
132
+ - Be concise and accurate
133
+ - Ask for clarification when the request is ambiguous
134
+ - Respect the guardrails defined in agent.guard.yml
135
+ """,
136
+ )
137
+ return agent
138
+
139
+
140
+ def run_agent(prompt: str) -> str:
141
+ """Run the agent with the given prompt, enforcing agent.guard.yml at runtime."""
142
+ from agentvoy_guard import Guard
143
+ guard = Guard.from_config()
144
+
145
+ with guard.session() as session:
146
+ session.check_input(prompt)
147
+
148
+ agent = create_agent()
149
+ response = agent.chat(prompt)
150
+ final = str(response)
151
+
152
+ session.check_output(final)
153
+
154
+ print(f"[guard] {guard.last_summary}")
155
+ return final
156
+ `;
157
+ }
158
+ function generateToolsFile(_config) {
159
+ return `"""
160
+ Agent tools — add your custom tools here.
161
+ """
162
+
163
+ from llama_index.core.tools import FunctionTool
164
+
165
+
166
+ def search_web(query: str) -> str:
167
+ """Search the web for information."""
168
+ # TODO: Implement your search logic
169
+ return f"Search results for: {query}"
170
+
171
+
172
+ def read_file(path: str) -> str:
173
+ """Read the contents of a file."""
174
+ try:
175
+ with open(path, "r") as f:
176
+ return f.read()
177
+ except FileNotFoundError:
178
+ return f"File not found: {path}"
179
+ except PermissionError:
180
+ return f"Permission denied: {path}"
181
+
182
+
183
+ def get_tools() -> list:
184
+ """Return all available tools as LlamaIndex FunctionTools."""
185
+ return [
186
+ FunctionTool.from_defaults(fn=search_web),
187
+ FunctionTool.from_defaults(fn=read_file),
188
+ ]
189
+ `;
190
+ }
191
+ function generateRunFile(config) {
192
+ return `"""
193
+ Run the ${config.projectName} agent.
194
+ """
195
+
196
+ import asyncio
197
+ from agent import run_agent
198
+
199
+
200
+ async def main():
201
+ print("\\n${config.projectName} — Powered by AgentVoy + LlamaIndex")
202
+ print("=" * 50)
203
+ print("Type your prompt (or 'quit' to exit):\\n")
204
+
205
+ while True:
206
+ try:
207
+ prompt = input("> ")
208
+ if prompt.lower() in ("quit", "exit", "q"):
209
+ print("\\nGoodbye!")
210
+ break
211
+ if not prompt.strip():
212
+ continue
213
+
214
+ print("\\nThinking...\\n")
215
+ result = await run_agent(prompt)
216
+ print(f"\\n{result}\\n")
217
+ except KeyboardInterrupt:
218
+ print("\\n\\nGoodbye!")
219
+ break
220
+
221
+
222
+ if __name__ == "__main__":
223
+ asyncio.run(main())
224
+ `;
225
+ }
226
+ function generateRequirements(isApp = false) {
227
+ const base = `llama-index>=0.12.0\nllama-index-llms-openai>=0.4.0\nllama-index-llms-anthropic>=0.6.0\nllama-index-llms-gemini>=0.4.0\npython-dotenv>=1.0.0\nagentvoy-guard>=0.1.0\n`;
228
+ return isApp ? (0, app_scaffold_js_1.appendAppRequirements)(base) : base;
229
+ }
230
+ //# sourceMappingURL=llamaindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llamaindex.js","sourceRoot":"","sources":["../../src/adapters/llamaindex.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,4CAAqD;AACrD,uDAA6G;AAEhG,QAAA,iBAAiB,GAAqB;IACjD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE,QAAQ;IAElB,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,cAAc,SAAS,KAAK;oBAClC,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC;iBAC9C,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/E,KAAK,MAAM,CAAC,IAAI,IAAA,uCAAqB,EAAC,MAAM,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAA,iCAAqB,EAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;SAC9F,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,eAAe,EAAE;YACvF,uBAAuB,EAAE,KAAK;gBAC5B,CAAC,CAAC,IAAA,4CAA0B,EAAC,MAAM,CAAC;gBACpC,CAAC,CAAC;oBACE,iCAAiC;oBACjC,sBAAsB;oBACtB,YAAY,MAAM,UAAU;oBAC5B,eAAe;iBAChB;SACN,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAwB;QACrC,MAAM,MAAM,GAAyC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAyC,EAAE,CAAC;QAE1D,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,iEAAiE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;aACnG,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,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,YAAY,CAAC,MAAsB;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;IAE7C,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO;yBACc,KAAK,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;sBACW,KAAK,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO;sBACa,KAAK,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAA2B;QAClC,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAsB,EAAE,SAAiB;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC,uCAAuC;QACzC,CAAC,CAAC,6BAA6B,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC;IAElE,OAAO;EACP,SAAS,oBAAoB,MAAM,CAAC,WAAW;;;;;EAK/C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvB,WAAW;;;;EAIX,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;yBAUjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B/B,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BR,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO;UACC,MAAM,CAAC,WAAW;;;;;;;;gBAQZ,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;CAuBjC,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAK,GAAG,KAAK;IACzC,MAAM,IAAI,GAAG,uKAAuK,CAAC;IACrL,OAAO,KAAK,CAAC,CAAC,CAAC,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC"}
@@ -1 +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"}
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;AAIrB,eAAO,MAAM,aAAa,EAAE,gBA+E3B,CAAC"}
@@ -7,50 +7,60 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.openaiAdapter = void 0;
9
9
  const config_js_1 = require("../config.js");
10
+ const app_scaffold_js_1 = require("./app-scaffold.js");
10
11
  exports.openaiAdapter = {
11
12
  name: "openai",
12
13
  displayName: "OpenAI Agents SDK",
13
14
  language: "python",
14
15
  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
- ];
16
+ const isApp = config.buildMode === "app";
17
+ const isMulti = isApp && config.agentMode === "multi";
18
+ const agentNames = config.agentNames ?? ["agent"];
19
+ const files = [];
20
+ if (isApp) {
21
+ // src/agents/ — one file per agent
22
+ for (const agentName of agentNames) {
23
+ files.push({
24
+ path: `src/agents/${agentName}.py`,
25
+ content: generateAgentFile(config, agentName),
26
+ });
27
+ }
28
+ // src/tools/tools.py
29
+ files.push({ path: "src/tools/tools.py", content: generateToolsFile(config) });
30
+ // Common src/ infrastructure files
31
+ for (const f of (0, app_scaffold_js_1.generateAppInfraFiles)(config))
32
+ files.push(f);
33
+ }
34
+ else {
35
+ files.push({ path: "agent.py", content: generateAgentFile(config, "agent") });
36
+ files.push({ path: "tools.py", content: generateToolsFile(config) });
37
+ files.push({ path: "run.py", content: generateRunFile(config) });
38
+ }
39
+ files.push({
40
+ path: "requirements.txt",
41
+ content: generateRequirements(isApp),
42
+ });
43
+ files.push({
44
+ path: ".env.example",
45
+ content: "OPENAI_API_KEY=your-api-key-here\n",
46
+ });
47
+ files.push({
48
+ path: "agent.guard.yml",
49
+ content: (0, config_js_1.generateDefaultConfig)(config.projectName, config.model.provider, config.model.model),
50
+ });
41
51
  return {
42
52
  files,
43
53
  dependencies: {},
44
54
  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
- ],
55
+ scripts: { start: isApp ? "uvicorn server:app --reload --port 8080" : "python run.py" },
56
+ postInstallInstructions: isApp
57
+ ? (0, app_scaffold_js_1.appPostInstallInstructions)("OPENAI_API_KEY")
58
+ : [
59
+ "pip install -r requirements.txt",
60
+ "cp .env.example .env",
61
+ "Add your OPENAI_API_KEY to .env",
62
+ "python run.py",
63
+ ],
54
64
  };
55
65
  },
56
66
  validateConfig(config) {
@@ -71,16 +81,17 @@ exports.openaiAdapter = {
71
81
  };
72
82
  },
73
83
  };
74
- function generateAgentFile(config) {
84
+ function generateAgentFile(config, agentName) {
75
85
  const guardConfig = config.guardrails?.behavior;
76
86
  const maxTurns = guardConfig?.max_iterations || 20;
87
+ const isApp = config.buildMode === "app";
88
+ const toolsImport = isApp ? "from src.tools.tools import get_tools" : "from tools import get_tools";
77
89
  return `"""
78
- ${config.projectName} Built with AgentVoy
79
- https://github.com/agentvoy
90
+ ${agentName} agent — Part of ${config.projectName} (Built with AgentVoy)
80
91
  """
81
92
 
82
93
  from agents import Agent, Runner
83
- from tools import get_tools
94
+ ${toolsImport}
84
95
 
85
96
 
86
97
  def create_agent() -> Agent:
@@ -88,7 +99,7 @@ def create_agent() -> Agent:
88
99
  tools = get_tools()
89
100
 
90
101
  agent = Agent(
91
- name="${config.projectName}",
102
+ name="${agentName}",
92
103
  instructions="""You are a helpful AI assistant.
93
104
 
94
105
  Follow these guidelines:
@@ -103,15 +114,28 @@ Follow these guidelines:
103
114
  return agent
104
115
 
105
116
 
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
117
+ def run_agent(prompt: str) -> str:
118
+ """Run the agent with the given prompt, enforcing agent.guard.yml at runtime."""
119
+ import asyncio
120
+ from agentvoy_guard import Guard
121
+ guard = Guard.from_config()
122
+
123
+ async def _run():
124
+ agent = create_agent()
125
+ result = await Runner.run(
126
+ agent,
127
+ prompt,
128
+ max_turns=${maxTurns},
129
+ )
130
+ return result.final_output or ""
131
+
132
+ with guard.session() as session:
133
+ session.check_input(prompt)
134
+ final = asyncio.run(_run())
135
+ session.check_output(final)
136
+
137
+ print(f"[guard] {guard.last_summary}")
138
+ return final
115
139
  `;
116
140
  }
117
141
  function generateToolsFile(_config) {
@@ -185,9 +209,8 @@ if __name__ == "__main__":
185
209
  asyncio.run(main())
186
210
  `;
187
211
  }
188
- function generateRequirements() {
189
- return `openai-agents>=0.1.0
190
- python-dotenv>=1.0.0
191
- `;
212
+ function generateRequirements(isApp = false) {
213
+ const base = `openai-agents>=0.1.0\npython-dotenv>=1.0.0\nagentvoy-guard>=0.1.0\n`;
214
+ return isApp ? (0, app_scaffold_js_1.appendAppRequirements)(base) : base;
192
215
  }
193
216
  //# sourceMappingURL=openai.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Framework, AgentMode } from "../types.js";
2
+ interface ApiWrapperConfig {
3
+ projectName: string;
4
+ framework: Framework;
5
+ agentMode: AgentMode;
6
+ agentNames?: string[];
7
+ port: number;
8
+ }
9
+ export declare function generateServerPy(config: ApiWrapperConfig): string;
10
+ export {};
11
+ //# sourceMappingURL=api-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-wrapper.d.ts","sourceRoot":"","sources":["../../src/deployers/api-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8DjE"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateServerPy = generateServerPy;
4
+ function getFrameworkImport(framework, agentMode) {
5
+ if (agentMode === "multi") {
6
+ return `from src.pipeline import run_pipeline`;
7
+ }
8
+ return `from src.agents.agent import run_agent`;
9
+ }
10
+ function getInvokeCall(framework, agentMode) {
11
+ if (agentMode === "multi") {
12
+ return `run_pipeline(request.prompt)`;
13
+ }
14
+ return `run_agent(request.prompt)`;
15
+ }
16
+ function getResultExtract(agentMode) {
17
+ if (agentMode === "multi") {
18
+ return ` response = str(result["result"]) if isinstance(result, dict) else str(result)
19
+ guard_summary = result.get("guard_summary") if isinstance(result, dict) else None`;
20
+ }
21
+ return ` response = str(result)
22
+ guard_summary = None`;
23
+ }
24
+ function generateServerPy(config) {
25
+ const { projectName, framework, agentMode, port } = config;
26
+ const frameworkImport = getFrameworkImport(framework, agentMode);
27
+ const invokeCall = getInvokeCall(framework, agentMode);
28
+ const resultExtract = getResultExtract(agentMode);
29
+ return `"""
30
+ API server — Generated by AgentVoy
31
+ Wraps your agent as a FastAPI endpoint with agent.guard.yml enforcement.
32
+
33
+ Run:
34
+ uvicorn server:app --reload --port ${port}
35
+
36
+ Endpoints:
37
+ POST /run — send a prompt, get a response
38
+ GET /health — health check
39
+ """
40
+ import os
41
+ from fastapi import FastAPI, HTTPException
42
+ from pydantic import BaseModel
43
+ from dotenv import load_dotenv
44
+
45
+ load_dotenv()
46
+
47
+ ${frameworkImport}
48
+
49
+ app = FastAPI(
50
+ title="${projectName}",
51
+ description="AI agent powered by AgentVoy",
52
+ version="0.1.0",
53
+ )
54
+
55
+
56
+ class AgentRequest(BaseModel):
57
+ prompt: str
58
+ session_id: str | None = None
59
+
60
+
61
+ class AgentResponse(BaseModel):
62
+ response: str
63
+ guard_summary: dict | None = None
64
+
65
+
66
+ @app.post("/run")
67
+ async def run(request: AgentRequest) -> AgentResponse:
68
+ try:
69
+ result = ${invokeCall}
70
+ ${resultExtract}
71
+ return AgentResponse(response=response, guard_summary=guard_summary)
72
+ except Exception as e:
73
+ raise HTTPException(status_code=500, detail=str(e))
74
+
75
+
76
+ @app.get("/health")
77
+ async def health():
78
+ return {"status": "ok", "agent": "${projectName}"}
79
+
80
+
81
+ if __name__ == "__main__":
82
+ import uvicorn
83
+ uvicorn.run(app, host="0.0.0.0", port=${port})
84
+ `;
85
+ }
86
+ //# sourceMappingURL=api-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-wrapper.js","sourceRoot":"","sources":["../../src/deployers/api-wrapper.ts"],"names":[],"mappings":";;AAiCA,4CA8DC;AArFD,SAAS,kBAAkB,CAAC,SAAoB,EAAE,SAAoB;IACpE,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,uCAAuC,CAAC;IACjD,CAAC;IACD,OAAO,wCAAwC,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,SAAoB,EAAE,SAAoB;IAC/D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO;0FAC+E,CAAC;IACzF,CAAC;IACD,OAAO;6BACoB,CAAC;AAC9B,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAwB;IACvD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC3D,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAElD,OAAO;;;;;yCAKgC,IAAI;;;;;;;;;;;;;EAa3C,eAAe;;;aAGJ,WAAW;;;;;;;;;;;;;;;;;;;mBAmBL,UAAU;EAC3B,aAAa;;;;;;;;wCAQyB,WAAW;;;;;4CAKP,IAAI;CAC/C,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DeploymentAdapter } from "../types.js";
2
+ export declare const awsLambdaAdapter: DeploymentAdapter;
3
+ //# sourceMappingURL=aws-lambda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-lambda.d.ts","sourceRoot":"","sources":["../../src/deployers/aws-lambda.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAyD,MAAM,aAAa,CAAC;AAkE5G,eAAO,MAAM,gBAAgB,EAAE,iBAwC9B,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.awsLambdaAdapter = void 0;
4
+ const guard_mapper_js_1 = require("./guard-mapper.js");
5
+ function generateSamTemplate(config) {
6
+ const { projectName, port } = config;
7
+ const cloudConfig = (0, guard_mapper_js_1.mapGuardToCloudConfig)(config.guard);
8
+ const timeoutSeconds = cloudConfig.timeout
9
+ ? parseInt(cloudConfig.timeout.replace("s", ""), 10)
10
+ : 300;
11
+ const memoryMb = cloudConfig.memory?.includes("Gi")
12
+ ? parseInt(cloudConfig.memory) * 1024
13
+ : 512;
14
+ return `# template.yaml — AWS SAM template — Generated by AgentVoy
15
+ # Deploy: sam build && sam deploy --guided
16
+
17
+ AWSTemplateFormatVersion: "2010-09-09"
18
+ Transform: AWS::Serverless-2016-10-31
19
+
20
+ Description: ${projectName} — AI agent deployed with AgentVoy
21
+
22
+ Globals:
23
+ Function:
24
+ Timeout: ${timeoutSeconds}
25
+ MemorySize: ${memoryMb}
26
+ Environment:
27
+ Variables:
28
+ PORT: "${port}"
29
+
30
+ Resources:
31
+ AgentFunction:
32
+ Type: AWS::Serverless::Function
33
+ Properties:
34
+ FunctionName: ${projectName.toLowerCase().replace(/[^a-z0-9-]/g, "-")}
35
+ PackageType: Image
36
+ Events:
37
+ ApiRoot:
38
+ Type: HttpApi
39
+ Properties:
40
+ Path: /{proxy+}
41
+ Method: ANY
42
+ Metadata:
43
+ DockerTag: latest
44
+ DockerContext: .
45
+ Dockerfile: Dockerfile
46
+
47
+ Outputs:
48
+ ApiUrl:
49
+ Description: API Gateway endpoint URL
50
+ Value: !Sub "https://\${ServerlessHttpApi}.execute-api.\${AWS::Region}.amazonaws.com/"
51
+ `;
52
+ }
53
+ function generateMangumPatch() {
54
+ return `"""
55
+ AWS Lambda handler — add to server.py or as a separate handler.py
56
+ Uses Mangum to wrap the FastAPI app for Lambda.
57
+ """
58
+ from mangum import Mangum
59
+ from server import app # import your FastAPI app
60
+
61
+ # Lambda handler
62
+ handler = Mangum(app, lifespan="off")
63
+ `;
64
+ }
65
+ exports.awsLambdaAdapter = {
66
+ target: "aws-lambda",
67
+ displayName: "AWS Lambda",
68
+ requiredCLI: "sam",
69
+ async validate(config) {
70
+ const errors = [];
71
+ const warnings = [];
72
+ const missingTools = [];
73
+ try {
74
+ const { execSync } = await import("child_process");
75
+ execSync("sam --version", { stdio: "ignore" });
76
+ }
77
+ catch {
78
+ missingTools.push("sam");
79
+ warnings.push({
80
+ field: "sam",
81
+ message: "AWS SAM CLI not found — install from https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html",
82
+ });
83
+ }
84
+ return { valid: errors.length === 0, errors, warnings, missingTools };
85
+ },
86
+ async generateFiles(config) {
87
+ const files = [
88
+ { path: "deploy/template.yaml", content: generateSamTemplate(config) },
89
+ { path: "deploy/lambda_handler.py", content: generateMangumPatch() },
90
+ ];
91
+ const instructions = [
92
+ `pip install mangum # Lambda adapter for FastAPI`,
93
+ `aws configure # set AWS credentials`,
94
+ `sam build`,
95
+ `sam deploy --guided`,
96
+ `# Follow prompts to set stack name, region, and env vars`,
97
+ ];
98
+ return { files, instructions };
99
+ },
100
+ };
101
+ //# sourceMappingURL=aws-lambda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-lambda.js","sourceRoot":"","sources":["../../src/deployers/aws-lambda.ts"],"names":[],"mappings":";;;AACA,uDAA0D;AAE1D,SAAS,mBAAmB,CAAC,MAAoB;IAC/C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,WAAW,GAAG,IAAA,uCAAqB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO;QACxC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,CAAC,CAAC,GAAG,CAAC;IACR,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;QACrC,CAAC,CAAC,GAAG,CAAC;IAER,OAAO;;;;;;eAMM,WAAW;;;;eAIX,cAAc;kBACX,QAAQ;;;iBAGT,IAAI;;;;;;sBAMC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiB1E,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAEY,QAAA,gBAAgB,GAAsB;IACjD,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,KAAK;IAElB,KAAK,CAAC,QAAQ,CAAC,MAAoB;QACjC,MAAM,MAAM,GAAyC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAyC,EAAE,CAAC;QAC1D,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YACnD,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,0IAA0I;aACpJ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAoB;QACtC,MAAM,KAAK,GAAG;YACZ,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACtE,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;SACrE,CAAC;QAEF,MAAM,YAAY,GAAG;YACnB,kDAAkD;YAClD,sCAAsC;YACtC,WAAW;YACX,qBAAqB;YACrB,0DAA0D;SAC3D,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DeploymentAdapter } from "../types.js";
2
+ export declare const dockerAdapter: DeploymentAdapter;
3
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/deployers/docker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAyD,MAAM,aAAa,CAAC;AAsF5G,eAAO,MAAM,aAAa,EAAE,iBA4C3B,CAAC"}