warden-code 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -7,8 +7,6 @@ Interactive CLI for bootstrapping Warden agents with support for both A2A and La
7
7
  ```bash
8
8
  npm install -g warden-code
9
9
  # or
10
- pnpm add -g warden-code
11
- # or
12
10
  npx warden-code
13
11
  ```
14
12
 
@@ -35,22 +33,22 @@ Run `/new` to start the agent creation wizard:
35
33
 
36
34
  1. **Agent name** - a name for your agent
37
35
  2. **Description** - what your agent does
38
- 3. **Template** - Blank (echo) or OpenAI (GPT-powered)
36
+ 3. **Model** - Echo (echoes input) or OpenAI (GPT-powered)
39
37
  4. **Capability** - Streaming or Multi-turn conversations
40
38
  5. **Skills** - Define agent capabilities (optional)
41
39
 
42
40
  After generation, your agent will be ready at `src/agent.ts`.
43
41
 
44
- ## Templates
42
+ ## Models
45
43
 
46
- | Template | Description |
44
+ | Model | Description |
47
45
  |----------|-------------|
48
- | **Blank + Streaming** | Minimal streaming agent that echoes input |
49
- | **Blank + Multi-turn** | Minimal multi-turn conversation agent |
46
+ | **Echo + Streaming** | Minimal streaming agent that echoes input |
47
+ | **Echo + Multi-turn** | Minimal multi-turn conversation agent |
50
48
  | **OpenAI + Streaming** | GPT-powered agent with streaming responses |
51
49
  | **OpenAI + Multi-turn** | GPT-powered agent with conversation history |
52
50
 
53
- All templates use `AgentServer` from `@wardenprotocol/agent-kit`, which exposes both:
51
+ All options use `AgentServer` from `@wardenprotocol/agent-kit`, which exposes both:
54
52
  - **A2A Protocol** - JSON-RPC at `POST /`, discovery at `GET /.well-known/agent-card.json`
55
53
  - **LangGraph Protocol** - REST API at `/assistants`, `/threads`, `/runs`
56
54
 
@@ -59,9 +57,11 @@ All templates use `AgentServer` from `@wardenprotocol/agent-kit`, which exposes
59
57
  ```
60
58
  my-agent/
61
59
  ├── src/
62
- └── agent.ts # Your agent code
60
+ ├── agent.ts # Your agent logic (handler function)
61
+ │ └── server.ts # Server setup and configuration
63
62
  ├── package.json
64
63
  ├── tsconfig.json
64
+ ├── Dockerfile
65
65
  ├── .env.example
66
66
  └── .gitignore
67
67
  ```
@@ -70,7 +70,6 @@ my-agent/
70
70
 
71
71
  ```bash
72
72
  cd my-agent
73
- npm install
74
73
  npm run build
75
74
  npm run agent
76
75
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,aAAa,CAAC;AA2BrB,eAAO,MAAM,UAAU,EAAE,YAqMxB,CAAC"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,aAAa,CAAC;AAmCrB,eAAO,MAAM,UAAU,EAAE,YAiOxB,CAAC"}
@@ -1,8 +1,16 @@
1
+ import { execSync } from "node:child_process";
1
2
  import * as path from "node:path";
2
3
  import { input, select, confirm } from "@inquirer/prompts";
3
4
  import chalk from "chalk";
4
5
  import { isDirectoryEmpty, createDirectory, directoryExists, } from "../services/project.js";
5
6
  import { scaffoldAgent } from "../services/scaffolder.js";
7
+ const promptTheme = {
8
+ style: {
9
+ answer: (text) => chalk.rgb(199, 255, 142)(text),
10
+ highlight: (text) => chalk.rgb(199, 255, 142)(text),
11
+ description: (text) => chalk.rgb(199, 255, 142)(text),
12
+ },
13
+ };
6
14
  function validateAgentName(value) {
7
15
  if (!value.trim())
8
16
  return "Agent name is required";
@@ -49,6 +57,7 @@ export const newCommand = {
49
57
  const proceed = await confirm({
50
58
  message: "Continue anyway?",
51
59
  default: false,
60
+ theme: promptTheme,
52
61
  });
53
62
  if (!proceed) {
54
63
  return;
@@ -58,16 +67,18 @@ export const newCommand = {
58
67
  const name = await input({
59
68
  message: "Agent name:",
60
69
  validate: validateAgentName,
70
+ theme: promptTheme,
61
71
  });
62
72
  const description = await input({
63
73
  message: "Agent description:",
64
74
  default: `A helpful AI agent named ${name}`,
75
+ theme: promptTheme,
65
76
  });
66
77
  const template = await select({
67
- message: "Select a template:",
78
+ message: "Select a model:",
68
79
  choices: [
69
80
  {
70
- value: "blank",
81
+ value: "echo",
71
82
  name: "Blank",
72
83
  description: "Minimal A2A server that echoes input",
73
84
  },
@@ -77,6 +88,7 @@ export const newCommand = {
77
88
  description: "Full-featured agent with OpenAI/GPT integration",
78
89
  },
79
90
  ],
91
+ theme: promptTheme,
80
92
  });
81
93
  const capability = await select({
82
94
  message: "Select capability:",
@@ -92,12 +104,14 @@ export const newCommand = {
92
104
  description: "Support back-and-forth conversations",
93
105
  },
94
106
  ],
107
+ theme: promptTheme,
95
108
  });
96
109
  // Skills configuration
97
110
  const skills = [];
98
111
  const addSkills = await confirm({
99
112
  message: "Would you like to define skills?",
100
113
  default: true,
114
+ theme: promptTheme,
101
115
  });
102
116
  if (addSkills) {
103
117
  let addingSkills = true;
@@ -105,6 +119,7 @@ export const newCommand = {
105
119
  const skillId = await input({
106
120
  message: "Skill ID (e.g., general-assistant):",
107
121
  validate: (v) => !!v || "Skill ID is required",
122
+ theme: promptTheme,
108
123
  });
109
124
  const skillName = await input({
110
125
  message: "Skill name:",
@@ -112,10 +127,12 @@ export const newCommand = {
112
127
  .split("-")
113
128
  .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
114
129
  .join(" "),
130
+ theme: promptTheme,
115
131
  });
116
132
  const skillDescription = await input({
117
133
  message: "Skill description:",
118
134
  default: `${skillName} capability`,
135
+ theme: promptTheme,
119
136
  });
120
137
  skills.push({
121
138
  id: skillId,
@@ -125,6 +142,7 @@ export const newCommand = {
125
142
  addingSkills = await confirm({
126
143
  message: "Add another skill?",
127
144
  default: false,
145
+ theme: promptTheme,
128
146
  });
129
147
  }
130
148
  }
@@ -145,18 +163,19 @@ export const newCommand = {
145
163
  console.log();
146
164
  console.log(chalk.bold("Configuration Summary:"));
147
165
  console.log(chalk.dim("─".repeat(40)));
148
- console.log(` Name: ${chalk.cyan(config.name)}`);
149
- console.log(` Package: ${chalk.dim(config.packageName)}`);
150
- console.log(` Description: ${chalk.dim(config.description)}`);
151
- console.log(` Template: ${chalk.cyan(config.template)}`);
152
- console.log(` Streaming: ${config.capabilities.streaming ? chalk.green("Yes") : chalk.dim("No")}`);
153
- console.log(` Multi-turn: ${config.capabilities.multiTurn ? chalk.green("Yes") : chalk.dim("No")}`);
154
- console.log(` Skills: ${config.skills.length > 0 ? config.skills.map((s) => s.name).join(", ") : chalk.dim("None")}`);
166
+ console.log(` Name: ${chalk.rgb(199, 255, 142)(config.name)}`);
167
+ console.log(` Package: ${chalk.rgb(199, 255, 142)(config.packageName)}`);
168
+ console.log(` Description: ${chalk.rgb(199, 255, 142)(config.description)}`);
169
+ console.log(` Model: ${chalk.rgb(199, 255, 142)(config.template)}`);
170
+ console.log(` Streaming: ${config.capabilities.streaming ? chalk.rgb(199, 255, 142)("Yes") : chalk.dim("No")}`);
171
+ console.log(` Multi-turn: ${config.capabilities.multiTurn ? chalk.rgb(199, 255, 142)("Yes") : chalk.dim("No")}`);
172
+ console.log(` Skills: ${config.skills.length > 0 ? chalk.rgb(199, 255, 142)(config.skills.map((s) => s.name).join(", ")) : chalk.dim("None")}`);
155
173
  console.log(chalk.dim("─".repeat(40)));
156
174
  console.log();
157
175
  const confirmed = await confirm({
158
176
  message: "Generate agent with this configuration?",
159
177
  default: true,
178
+ theme: promptTheme,
160
179
  });
161
180
  if (!confirmed) {
162
181
  context.log.dim("Cancelled.");
@@ -168,14 +187,24 @@ export const newCommand = {
168
187
  spinner.succeed("Agent generated!");
169
188
  console.log();
170
189
  context.log.success(`Created ${targetPath ? targetPath + "/" : ""}src/agent.ts`);
190
+ const installSpinner = context
191
+ .spinner("Installing dependencies...")
192
+ .start();
193
+ try {
194
+ execSync("npm install", { cwd: targetDir, stdio: "ignore" });
195
+ installSpinner.succeed("Dependencies installed!");
196
+ }
197
+ catch {
198
+ installSpinner.fail("Failed to install dependencies");
199
+ context.log.dim(" Run npm install manually to install dependencies");
200
+ }
171
201
  console.log();
172
202
  context.log.dim("Next steps (in a new terminal):");
173
203
  if (targetPath) {
174
204
  context.log.dim(` cd ${targetPath}`);
175
205
  }
176
- context.log.dim(" pnpm install");
177
- context.log.dim(" pnpm build");
178
- context.log.dim(" pnpm agent");
206
+ context.log.dim(" npm run build");
207
+ context.log.dim(" npm run agent");
179
208
  console.log();
180
209
  }
181
210
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ import chalk from "chalk";
2
2
  import ora from "ora";
3
3
  function createLogger() {
4
4
  return {
5
- info: (msg) => console.log(chalk.blue("ℹ"), msg),
6
- success: (msg) => console.log(chalk.green("✓"), msg),
5
+ info: (msg) => console.log(chalk.rgb(199, 255, 142)("ℹ"), msg),
6
+ success: (msg) => console.log(chalk.rgb(199, 255, 142)("✓"), msg),
7
7
  error: (msg) => console.log(chalk.red("✗"), msg),
8
- warn: (msg) => console.log(chalk.yellow("⚠"), msg),
8
+ warn: (msg) => console.log(chalk.rgb(199, 255, 142)("⚠"), msg),
9
9
  dim: (msg) => console.log(chalk.dim(msg)),
10
10
  };
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,SAAS,YAAY;IACnB,OAAO;QACL,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACxD,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QAC5D,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACxD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QAC1D,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO;QACL,GAAG;QACH,GAAG,EAAE,YAAY,EAAE;QACnB,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;KACnC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,SAAS,YAAY;IACnB,OAAO;QACL,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACtE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACzE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACxD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACtE,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO;QACL,GAAG;QACH,GAAG,EAAE,YAAY,EAAE;QACnB,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;KACnC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../src/cli/services/scaffolder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtE;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAY5E;AAiFD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvE"}
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../src/cli/services/scaffolder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtE;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAIjB;AAOD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA6B5E;AAmGD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvE"}
@@ -12,14 +12,27 @@ export async function readTemplate(template, filename) {
12
12
  const filePath = path.join(templateDir, filename);
13
13
  return fs.readFile(filePath, "utf-8");
14
14
  }
15
+ async function readSharedTemplate(filename) {
16
+ const filePath = path.resolve(__dirname, "../../templates", filename);
17
+ return fs.readFile(filePath, "utf-8");
18
+ }
15
19
  export function processTemplate(content, config) {
16
20
  const skillsStr = config.skills
17
21
  .map((s) => `{\n id: "${s.id}",\n name: "${s.name}",\n description: "${s.description}",\n tags: [],\n }`)
18
22
  .join(",\n ");
23
+ const modelStartupLog = config.template === "openai"
24
+ ? `const hasApiKey = !!process.env.OPENAI_API_KEY;
25
+ const model = process.env.OPENAI_MODEL || "gpt-4o-mini";
26
+ console.log(\`Model: \${model}\`);
27
+ console.log(\`API Key: \${hasApiKey ? "configured" : "NOT SET"}\`);`
28
+ : "";
19
29
  return content
20
30
  .replace(/\{\{name\}\}/g, config.name)
21
31
  .replace(/\{\{description\}\}/g, config.description)
22
- .replace(/\{\{skills\}\}/g, skillsStr);
32
+ .replace(/\{\{skills\}\}/g, skillsStr)
33
+ .replace(/\{\{capabilities_streaming\}\}/g, String(config.capabilities.streaming))
34
+ .replace(/\{\{capabilities_multiturn\}\}/g, String(config.capabilities.multiTurn))
35
+ .replace(/\{\{model_startup_log\}\}/g, modelStartupLog);
23
36
  }
24
37
  /**
25
38
  * Get the template directory name based on base template and capability.
@@ -33,14 +46,14 @@ function generatePackageJson(config) {
33
46
  name: config.packageName,
34
47
  version: "0.1.0",
35
48
  type: "module",
36
- main: "dist/agent.js",
49
+ main: "dist/server.js",
37
50
  scripts: {
38
51
  build: "tsc",
39
52
  dev: "tsc --watch",
40
- agent: "node dist/agent.js",
53
+ agent: "node dist/server.js",
41
54
  },
42
55
  dependencies: {
43
- "@wardenprotocol/agent-kit": "^0.2.0",
56
+ "@wardenprotocol/agent-kit": "^0.3.1",
44
57
  dotenv: "^16.4.0",
45
58
  },
46
59
  devDependencies: {
@@ -83,7 +96,7 @@ coverage/
83
96
  .env
84
97
  .env.local
85
98
  `;
86
- const ENV_EXAMPLE_BLANK = `HOST=localhost
99
+ const ENV_EXAMPLE_ECHO = `HOST=localhost
87
100
  PORT=3000
88
101
  `;
89
102
  const ENV_EXAMPLE_OPENAI = `HOST=localhost
@@ -91,14 +104,35 @@ PORT=3000
91
104
  OPENAI_API_KEY=your-api-key-here
92
105
  OPENAI_MODEL=gpt-4o-mini
93
106
  `;
107
+ const DOCKERFILE = `FROM node:22-alpine AS builder
108
+ WORKDIR /app
109
+ COPY package*.json ./
110
+ RUN npm install
111
+ COPY . .
112
+ RUN npm run build
113
+
114
+ FROM node:22-alpine
115
+ WORKDIR /app
116
+ COPY --from=builder /app/dist ./dist
117
+ COPY --from=builder /app/node_modules ./node_modules
118
+ COPY --from=builder /app/package.json ./
119
+ ENV HOST=0.0.0.0
120
+ ENV PORT=3000
121
+ EXPOSE 3000
122
+ CMD ["node", "dist/server.js"]
123
+ `;
94
124
  export async function scaffoldAgent(targetDir, config) {
95
125
  // Get the appropriate template directory based on template + capability
96
126
  const templateDirName = getTemplateDirName(config);
97
- // Read and process the agent template
98
- const templateContent = await readTemplate(templateDirName, "agent.ts.template");
99
- const processedContent = processTemplate(templateContent, config);
100
- // Write the agent file
101
- await writeFile(path.join(targetDir, "src", "agent.ts"), processedContent);
127
+ // Read and process the agent handler template
128
+ const agentTemplate = await readTemplate(templateDirName, "agent.ts.template");
129
+ const agentContent = processTemplate(agentTemplate, config);
130
+ // Read and process the shared server template
131
+ const serverTemplate = await readSharedTemplate("server.ts.template");
132
+ const serverContent = processTemplate(serverTemplate, config);
133
+ // Write the agent and server files
134
+ await writeFile(path.join(targetDir, "src", "agent.ts"), agentContent);
135
+ await writeFile(path.join(targetDir, "src", "server.ts"), serverContent);
102
136
  // Write package.json
103
137
  await writeFile(path.join(targetDir, "package.json"), generatePackageJson(config));
104
138
  // Write tsconfig.json
@@ -106,8 +140,10 @@ export async function scaffoldAgent(targetDir, config) {
106
140
  // Write .gitignore
107
141
  await writeFile(path.join(targetDir, ".gitignore"), GITIGNORE);
108
142
  // Write .env.example
109
- const envExample = config.template === "openai" ? ENV_EXAMPLE_OPENAI : ENV_EXAMPLE_BLANK;
143
+ const envExample = config.template === "openai" ? ENV_EXAMPLE_OPENAI : ENV_EXAMPLE_ECHO;
110
144
  await writeFile(path.join(targetDir, ".env.example"), envExample);
145
+ // Write Dockerfile
146
+ await writeFile(path.join(targetDir, "Dockerfile"), DOCKERFILE);
111
147
  }
112
148
  /**
113
149
  * Check if a template exists.
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../src/cli/services/scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../src/cli/services/scaffolder.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ export interface AgentConfig {
25
25
  /** npm package name (e.g., "my-cool-agent") */
26
26
  packageName: string;
27
27
  description: string;
28
- template: "blank" | "openai";
28
+ template: "echo" | "openai";
29
29
  capabilities: {
30
30
  streaming: boolean;
31
31
  multiTurn: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC7B,YAAY,EAAE;QACZ,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,YAAY,EAAE;QACZ,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/format.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,IAAI,MAAM,CAS/B;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrF"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/format.ts"],"names":[],"mappings":"AAaA,wBAAgB,MAAM,IAAI,MAAM,CAiB/B;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAOR"}
@@ -1,19 +1,26 @@
1
+ import { readFileSync } from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath } from "node:url";
1
4
  import chalk from "chalk";
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ const pkg = JSON.parse(readFileSync(path.resolve(__dirname, "..", "..", "..", "package.json"), "utf-8"));
2
7
  export function banner() {
3
- return chalk.cyan(`
4
- __ __ _
5
- \\ \\ / /_ _ _ __ __| | ___ _ __
6
- \\ \\ /\\ / / _\` | '__/ _\` |/ _ \\ '_ \\
7
- \\ V V / (_| | | | (_| | __/ | | |
8
- \\_/\\_/ \\__,_|_| \\__,_|\\___|_| |_|
8
+ return (chalk.rgb(199, 255, 142)(`
9
+ ░██ ░██ ░███ ░█████████ ░███████ ░██████████ ░███ ░██
10
+ ░██ ░██ ░██░██ ░██ ░██ ░██ ░██ ░██ ░████ ░██
11
+ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██
12
+ ░██ ░████ ░██ ░█████████ ░█████████ ░██ ░██ ░█████████ ░██ ░██ ░██
13
+ ░██░██ ░██░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██
14
+ ░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░████
15
+ ░███ ░███ ░██ ░██ ░██ ░██ ░███████ ░██████████ ░██ ░███
9
16
 
10
- `) + chalk.dim(" Agent Development CLI\n");
17
+ `) + chalk.dim(`Agent Development CLI v${pkg.version}\n`));
11
18
  }
12
19
  export function prompt() {
13
- return chalk.green("warden") + chalk.dim("> ");
20
+ return chalk.rgb(199, 255, 142)("warden") + chalk.dim("> ");
14
21
  }
15
22
  export function commandHelp(name, description, usage) {
16
- let output = ` ${chalk.cyan("/" + name)}`;
23
+ let output = ` ${chalk.rgb(199, 255, 142)("/" + name)}`;
17
24
  output += chalk.dim(` - ${description}`);
18
25
  if (usage) {
19
26
  output += `\n ${chalk.dim("Usage:")} ${usage}`;
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/ui/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,MAAM;IACpB,OAAO,KAAK,CAAC,IAAI,CAAC;;;;;;;CAOnB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,WAAmB,EAAE,KAAc;IAC3E,IAAI,MAAM,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3C,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,SAAS,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/ui/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CACV,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EACzD,OAAO,CACR,CACF,CAAC;AAEF,MAAM,UAAU,MAAM;IACpB,OAAO,CACL,KAAK,CAAC,GAAG,CACP,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAC;;;;;;;;;CASL,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,OAAO,IAAI,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,WAAmB,EACnB,KAAc;IAEd,IAAI,MAAM,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IACzD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,SAAS,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { TaskContext, TaskYieldUpdate } from "@wardenprotocol/agent-kit";
2
+
3
+ export async function* handler(context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
4
+ const userMessage = context.message.parts
5
+ ?.filter((p) => p.type === "text")
6
+ .map((p) => p.text)
7
+ .join("\n");
8
+
9
+ if (!userMessage) {
10
+ yield {
11
+ state: "completed",
12
+ message: {
13
+ role: "agent",
14
+ parts: [{ type: "text", text: "No message provided." }],
15
+ },
16
+ };
17
+ return;
18
+ }
19
+
20
+ // TODO: Implement your agent logic here
21
+ yield {
22
+ state: "completed",
23
+ message: {
24
+ role: "agent",
25
+ parts: [{ type: "text", text: `Echo: ${userMessage}` }],
26
+ },
27
+ };
28
+ }
@@ -0,0 +1,28 @@
1
+ import type { TaskContext, TaskYieldUpdate } from "@wardenprotocol/agent-kit";
2
+
3
+ export async function* handler(context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
4
+ const userMessage = context.message.parts
5
+ ?.filter((p) => p.type === "text")
6
+ .map((p) => p.text)
7
+ .join("\n");
8
+
9
+ if (!userMessage) {
10
+ yield {
11
+ state: "completed",
12
+ message: {
13
+ role: "agent",
14
+ parts: [{ type: "text", text: "No message provided." }],
15
+ },
16
+ };
17
+ return;
18
+ }
19
+
20
+ // TODO: Implement your agent logic here
21
+ yield {
22
+ state: "completed",
23
+ message: {
24
+ role: "agent",
25
+ parts: [{ type: "text", text: `Echo: ${userMessage}` }],
26
+ },
27
+ };
28
+ }
@@ -1,99 +1,55 @@
1
- import "dotenv/config";
2
1
  import OpenAI from "openai";
3
- import { AgentServer } from "@wardenprotocol/agent-kit";
4
2
  import type { TaskContext, TaskYieldUpdate, MessagePart } from "@wardenprotocol/agent-kit";
5
3
 
6
- const PORT = Number(process.env.PORT) || 3000;
7
- const HOST = process.env.HOST || "localhost";
8
- const BASE_URL = `http://${HOST}:${PORT}`;
9
-
10
4
  const openai = new OpenAI({
11
5
  apiKey: process.env.OPENAI_API_KEY,
12
6
  });
13
7
 
14
- const server = new AgentServer({
15
- agentCard: {
16
- name: "{{name}}",
17
- description: "{{description}}",
18
- url: BASE_URL,
19
- version: "0.1.0",
20
- capabilities: {
21
- streaming: false,
22
- multiTurn: true,
23
- },
24
- skills: [{{skills}}],
25
- },
26
- handler: async function* (context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
27
- const userMessage = context.message.parts
28
- ?.filter((p): p is MessagePart & { type: "text" } => p.type === "text")
29
- .map((p) => p.text)
30
- .join("\n");
31
-
32
- if (!userMessage) {
33
- yield {
34
- state: "completed",
35
- message: {
36
- role: "agent",
37
- parts: [{ type: "text", text: "No message provided." }],
38
- },
39
- };
40
- return;
41
- }
42
-
43
- try {
44
- yield { state: "working" };
45
-
46
- const response = await openai.chat.completions.create({
47
- model: process.env.OPENAI_MODEL || "gpt-4o-mini",
48
- messages: [
49
- { role: "system", content: "{{description}}" },
50
- { role: "user", content: userMessage },
51
- ],
52
- stream: false,
53
- });
54
-
55
- const fullResponse = response.choices[0]?.message?.content || "";
56
-
57
- yield {
58
- state: "completed",
59
- message: {
60
- role: "agent",
61
- parts: [{ type: "text", text: fullResponse }],
62
- },
63
- };
64
- } catch (error) {
65
- yield {
66
- state: "failed",
67
- message: {
68
- role: "agent",
69
- parts: [{ type: "text", text: `Error: ${String(error)}` }],
70
- },
71
- };
72
- }
73
- },
74
- });
75
-
76
- server.listen(PORT).then(() => {
77
- const hasApiKey = !!process.env.OPENAI_API_KEY;
78
- const model = process.env.OPENAI_MODEL || "gpt-4o-mini";
79
-
80
- console.log(`{{name}} (Dual Protocol)`);
81
- console.log(`Server: ${BASE_URL}`);
82
- console.log(`Model: ${model}`);
83
- console.log(`API Key: ${hasApiKey ? "configured" : "NOT SET"}`);
84
- console.log();
85
- console.log("A2A Protocol:");
86
- console.log(` Agent Card: ${BASE_URL}/.well-known/agent-card.json`);
87
- console.log(` JSON-RPC: POST ${BASE_URL}/`);
88
- console.log();
89
- console.log("LangGraph Protocol:");
90
- console.log(` Info: ${BASE_URL}/info`);
91
- console.log(` Assistants: ${BASE_URL}/assistants`);
92
- console.log(` Threads: ${BASE_URL}/threads`);
93
- console.log(` Runs: ${BASE_URL}/runs`);
8
+ export async function* handler(context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
9
+ const userMessage = context.message.parts
10
+ ?.filter((p): p is MessagePart & { type: "text" } => p.type === "text")
11
+ .map((p) => p.text)
12
+ .join("\n");
13
+
14
+ if (!userMessage) {
15
+ yield {
16
+ state: "completed",
17
+ message: {
18
+ role: "agent",
19
+ parts: [{ type: "text", text: "No message provided." }],
20
+ },
21
+ };
22
+ return;
23
+ }
94
24
 
95
- if (!hasApiKey) {
96
- console.log();
97
- console.log("Warning: OPENAI_API_KEY not set. Set it in your .env file.");
25
+ try {
26
+ yield { state: "working" };
27
+
28
+ const response = await openai.chat.completions.create({
29
+ model: process.env.OPENAI_MODEL || "gpt-4o-mini",
30
+ messages: [
31
+ { role: "system", content: "{{description}}" },
32
+ { role: "user", content: userMessage },
33
+ ],
34
+ stream: false,
35
+ });
36
+
37
+ const fullResponse = response.choices[0]?.message?.content || "";
38
+
39
+ yield {
40
+ state: "completed",
41
+ message: {
42
+ role: "agent",
43
+ parts: [{ type: "text", text: fullResponse }],
44
+ },
45
+ };
46
+ } catch (error) {
47
+ yield {
48
+ state: "failed",
49
+ message: {
50
+ role: "agent",
51
+ parts: [{ type: "text", text: `Error: ${String(error)}` }],
52
+ },
53
+ };
98
54
  }
99
- });
55
+ }
@@ -1,103 +1,59 @@
1
- import "dotenv/config";
2
1
  import OpenAI from "openai";
3
- import { AgentServer } from "@wardenprotocol/agent-kit";
4
2
  import type { TaskContext, TaskYieldUpdate, MessagePart } from "@wardenprotocol/agent-kit";
5
3
 
6
- const PORT = Number(process.env.PORT) || 3000;
7
- const HOST = process.env.HOST || "localhost";
8
- const BASE_URL = `http://${HOST}:${PORT}`;
9
-
10
4
  const openai = new OpenAI({
11
5
  apiKey: process.env.OPENAI_API_KEY,
12
6
  });
13
7
 
14
- const server = new AgentServer({
15
- agentCard: {
16
- name: "{{name}}",
17
- description: "{{description}}",
18
- url: BASE_URL,
19
- version: "0.1.0",
20
- capabilities: {
21
- streaming: true,
22
- multiTurn: false,
23
- },
24
- skills: [{{skills}}],
25
- },
26
- handler: async function* (context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
27
- const userMessage = context.message.parts
28
- ?.filter((p): p is MessagePart & { type: "text" } => p.type === "text")
29
- .map((p) => p.text)
30
- .join("\n");
31
-
32
- if (!userMessage) {
33
- yield {
34
- state: "completed",
35
- message: {
36
- role: "agent",
37
- parts: [{ type: "text", text: "No message provided." }],
38
- },
39
- };
40
- return;
41
- }
42
-
43
- try {
44
- yield { state: "working" };
45
-
46
- const stream = await openai.chat.completions.create({
47
- model: process.env.OPENAI_MODEL || "gpt-4o-mini",
48
- messages: [
49
- { role: "system", content: "{{description}}" },
50
- { role: "user", content: userMessage },
51
- ],
52
- stream: true,
53
- });
54
-
55
- let fullResponse = "";
56
- for await (const chunk of stream) {
57
- const content = chunk.choices[0]?.delta?.content || "";
58
- fullResponse += content;
59
- }
8
+ export async function* handler(context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
9
+ const userMessage = context.message.parts
10
+ ?.filter((p): p is MessagePart & { type: "text" } => p.type === "text")
11
+ .map((p) => p.text)
12
+ .join("\n");
13
+
14
+ if (!userMessage) {
15
+ yield {
16
+ state: "completed",
17
+ message: {
18
+ role: "agent",
19
+ parts: [{ type: "text", text: "No message provided." }],
20
+ },
21
+ };
22
+ return;
23
+ }
60
24
 
61
- yield {
62
- state: "completed",
63
- message: {
64
- role: "agent",
65
- parts: [{ type: "text", text: fullResponse }],
66
- },
67
- };
68
- } catch (error) {
69
- yield {
70
- state: "failed",
71
- message: {
72
- role: "agent",
73
- parts: [{ type: "text", text: `Error: ${String(error)}` }],
74
- },
75
- };
25
+ try {
26
+ yield { state: "working" };
27
+
28
+ const stream = await openai.chat.completions.create({
29
+ model: process.env.OPENAI_MODEL || "gpt-4o-mini",
30
+ messages: [
31
+ { role: "system", content: "{{description}}" },
32
+ { role: "user", content: userMessage },
33
+ ],
34
+ stream: true,
35
+ });
36
+
37
+ let fullResponse = "";
38
+ for await (const chunk of stream) {
39
+ const content = chunk.choices[0]?.delta?.content || "";
40
+ fullResponse += content;
76
41
  }
77
- },
78
- });
79
-
80
- server.listen(PORT).then(() => {
81
- const hasApiKey = !!process.env.OPENAI_API_KEY;
82
- const model = process.env.OPENAI_MODEL || "gpt-4o-mini";
83
42
 
84
- console.log(`{{name}} (Dual Protocol)`);
85
- console.log(`Server: ${BASE_URL}`);
86
- console.log(`Model: ${model}`);
87
- console.log(`API Key: ${hasApiKey ? "configured" : "NOT SET"}`);
88
- console.log();
89
- console.log("A2A Protocol:");
90
- console.log(` Agent Card: ${BASE_URL}/.well-known/agent-card.json`);
91
- console.log(` JSON-RPC: POST ${BASE_URL}/`);
92
- console.log();
93
- console.log("LangGraph Protocol:");
94
- console.log(` Info: ${BASE_URL}/info`);
95
- console.log(` Assistants: ${BASE_URL}/assistants`);
96
- console.log(` Threads: ${BASE_URL}/threads`);
97
- console.log(` Runs: ${BASE_URL}/runs`);
98
-
99
- if (!hasApiKey) {
100
- console.log();
101
- console.log("Warning: OPENAI_API_KEY not set. Set it in your .env file.");
43
+ yield {
44
+ state: "completed",
45
+ message: {
46
+ role: "agent",
47
+ parts: [{ type: "text", text: fullResponse }],
48
+ },
49
+ };
50
+ } catch (error) {
51
+ yield {
52
+ state: "failed",
53
+ message: {
54
+ role: "agent",
55
+ parts: [{ type: "text", text: `Error: ${String(error)}` }],
56
+ },
57
+ };
102
58
  }
103
- });
59
+ }
@@ -1,6 +1,6 @@
1
1
  import "dotenv/config";
2
2
  import { AgentServer } from "@wardenprotocol/agent-kit";
3
- import type { TaskContext, TaskYieldUpdate } from "@wardenprotocol/agent-kit";
3
+ import { handler } from "./agent.js";
4
4
 
5
5
  const PORT = Number(process.env.PORT) || 3000;
6
6
  const HOST = process.env.HOST || "localhost";
@@ -13,40 +13,16 @@ const server = new AgentServer({
13
13
  url: BASE_URL,
14
14
  version: "0.1.0",
15
15
  capabilities: {
16
- streaming: false,
17
- multiTurn: true,
16
+ streaming: {{capabilities_streaming}},
17
+ multiTurn: {{capabilities_multiturn}},
18
18
  },
19
19
  skills: [{{skills}}],
20
20
  },
21
- handler: async function* (context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
22
- const userMessage = context.message.parts
23
- ?.filter((p) => p.type === "text")
24
- .map((p) => p.text)
25
- .join("\n");
26
-
27
- if (!userMessage) {
28
- yield {
29
- state: "completed",
30
- message: {
31
- role: "agent",
32
- parts: [{ type: "text", text: "No message provided." }],
33
- },
34
- };
35
- return;
36
- }
37
-
38
- // TODO: Implement your agent logic here
39
- yield {
40
- state: "completed",
41
- message: {
42
- role: "agent",
43
- parts: [{ type: "text", text: `Echo: ${userMessage}` }],
44
- },
45
- };
46
- },
21
+ handler,
47
22
  });
48
23
 
49
24
  server.listen(PORT).then(() => {
25
+ {{model_startup_log}}
50
26
  console.log(`{{name}} (Dual Protocol)`);
51
27
  console.log(`Server: ${BASE_URL}`);
52
28
  console.log();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "warden-code",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Interactive CLI for bootstrapping Warden agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -52,9 +52,9 @@
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/node": "^22.10.7",
55
- "@vitest/coverage-v8": "^2.1.8",
55
+ "@vitest/coverage-v8": "^4.0.18",
56
56
  "typescript": "^5.7.3",
57
- "vitest": "^2.1.8"
57
+ "vitest": "^4.0.18"
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=18.0.0"
@@ -1,62 +0,0 @@
1
- import "dotenv/config";
2
- import { AgentServer } from "@wardenprotocol/agent-kit";
3
- import type { TaskContext, TaskYieldUpdate } from "@wardenprotocol/agent-kit";
4
-
5
- const PORT = Number(process.env.PORT) || 3000;
6
- const HOST = process.env.HOST || "localhost";
7
- const BASE_URL = `http://${HOST}:${PORT}`;
8
-
9
- const server = new AgentServer({
10
- agentCard: {
11
- name: "{{name}}",
12
- description: "{{description}}",
13
- url: BASE_URL,
14
- version: "0.1.0",
15
- capabilities: {
16
- streaming: true,
17
- multiTurn: false,
18
- },
19
- skills: [{{skills}}],
20
- },
21
- handler: async function* (context: TaskContext): AsyncGenerator<TaskYieldUpdate> {
22
- const userMessage = context.message.parts
23
- ?.filter((p) => p.type === "text")
24
- .map((p) => p.text)
25
- .join("\n");
26
-
27
- if (!userMessage) {
28
- yield {
29
- state: "completed",
30
- message: {
31
- role: "agent",
32
- parts: [{ type: "text", text: "No message provided." }],
33
- },
34
- };
35
- return;
36
- }
37
-
38
- // TODO: Implement your agent logic here
39
- yield {
40
- state: "completed",
41
- message: {
42
- role: "agent",
43
- parts: [{ type: "text", text: `Echo: ${userMessage}` }],
44
- },
45
- };
46
- },
47
- });
48
-
49
- server.listen(PORT).then(() => {
50
- console.log(`{{name}} (Dual Protocol)`);
51
- console.log(`Server: ${BASE_URL}`);
52
- console.log();
53
- console.log("A2A Protocol:");
54
- console.log(` Agent Card: ${BASE_URL}/.well-known/agent-card.json`);
55
- console.log(` JSON-RPC: POST ${BASE_URL}/`);
56
- console.log();
57
- console.log("LangGraph Protocol:");
58
- console.log(` Info: ${BASE_URL}/info`);
59
- console.log(` Assistants: ${BASE_URL}/assistants`);
60
- console.log(` Threads: ${BASE_URL}/threads`);
61
- console.log(` Runs: ${BASE_URL}/runs`);
62
- });