warden-code 0.1.2 → 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
@@ -33,7 +33,7 @@ Run `/new` to start the agent creation wizard:
33
33
 
34
34
  1. **Agent name** - a name for your agent
35
35
  2. **Description** - what your agent does
36
- 3. **Model** - Blank (echo) or OpenAI (GPT-powered)
36
+ 3. **Model** - Echo (echoes input) or OpenAI (GPT-powered)
37
37
  4. **Capability** - Streaming or Multi-turn conversations
38
38
  5. **Skills** - Define agent capabilities (optional)
39
39
 
@@ -43,8 +43,8 @@ After generation, your agent will be ready at `src/agent.ts`.
43
43
 
44
44
  | Model | Description |
45
45
  |----------|-------------|
46
- | **Blank + Streaming** | Minimal streaming agent that echoes input |
47
- | **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 |
48
48
  | **OpenAI + Streaming** | GPT-powered agent with streaming responses |
49
49
  | **OpenAI + Multi-turn** | GPT-powered agent with conversation history |
50
50
 
@@ -57,9 +57,11 @@ All options use `AgentServer` from `@wardenprotocol/agent-kit`, which exposes bo
57
57
  ```
58
58
  my-agent/
59
59
  ├── src/
60
- └── agent.ts # Your agent code
60
+ ├── agent.ts # Your agent logic (handler function)
61
+ │ └── server.ts # Server setup and configuration
61
62
  ├── package.json
62
63
  ├── tsconfig.json
64
+ ├── Dockerfile
63
65
  ├── .env.example
64
66
  └── .gitignore
65
67
  ```
@@ -68,7 +70,6 @@ my-agent/
68
70
 
69
71
  ```bash
70
72
  cd my-agent
71
- npm install
72
73
  npm run build
73
74
  npm run agent
74
75
  ```
@@ -1 +1 @@
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;AA2BrB,eAAO,MAAM,UAAU,EAAE,YAkNxB,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"}
@@ -4,6 +4,13 @@ import { input, select, confirm } from "@inquirer/prompts";
4
4
  import chalk from "chalk";
5
5
  import { isDirectoryEmpty, createDirectory, directoryExists, } from "../services/project.js";
6
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
+ };
7
14
  function validateAgentName(value) {
8
15
  if (!value.trim())
9
16
  return "Agent name is required";
@@ -50,6 +57,7 @@ export const newCommand = {
50
57
  const proceed = await confirm({
51
58
  message: "Continue anyway?",
52
59
  default: false,
60
+ theme: promptTheme,
53
61
  });
54
62
  if (!proceed) {
55
63
  return;
@@ -59,16 +67,18 @@ export const newCommand = {
59
67
  const name = await input({
60
68
  message: "Agent name:",
61
69
  validate: validateAgentName,
70
+ theme: promptTheme,
62
71
  });
63
72
  const description = await input({
64
73
  message: "Agent description:",
65
74
  default: `A helpful AI agent named ${name}`,
75
+ theme: promptTheme,
66
76
  });
67
77
  const template = await select({
68
78
  message: "Select a model:",
69
79
  choices: [
70
80
  {
71
- value: "blank",
81
+ value: "echo",
72
82
  name: "Blank",
73
83
  description: "Minimal A2A server that echoes input",
74
84
  },
@@ -78,6 +88,7 @@ export const newCommand = {
78
88
  description: "Full-featured agent with OpenAI/GPT integration",
79
89
  },
80
90
  ],
91
+ theme: promptTheme,
81
92
  });
82
93
  const capability = await select({
83
94
  message: "Select capability:",
@@ -93,12 +104,14 @@ export const newCommand = {
93
104
  description: "Support back-and-forth conversations",
94
105
  },
95
106
  ],
107
+ theme: promptTheme,
96
108
  });
97
109
  // Skills configuration
98
110
  const skills = [];
99
111
  const addSkills = await confirm({
100
112
  message: "Would you like to define skills?",
101
113
  default: true,
114
+ theme: promptTheme,
102
115
  });
103
116
  if (addSkills) {
104
117
  let addingSkills = true;
@@ -106,6 +119,7 @@ export const newCommand = {
106
119
  const skillId = await input({
107
120
  message: "Skill ID (e.g., general-assistant):",
108
121
  validate: (v) => !!v || "Skill ID is required",
122
+ theme: promptTheme,
109
123
  });
110
124
  const skillName = await input({
111
125
  message: "Skill name:",
@@ -113,10 +127,12 @@ export const newCommand = {
113
127
  .split("-")
114
128
  .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
115
129
  .join(" "),
130
+ theme: promptTheme,
116
131
  });
117
132
  const skillDescription = await input({
118
133
  message: "Skill description:",
119
134
  default: `${skillName} capability`,
135
+ theme: promptTheme,
120
136
  });
121
137
  skills.push({
122
138
  id: skillId,
@@ -126,6 +142,7 @@ export const newCommand = {
126
142
  addingSkills = await confirm({
127
143
  message: "Add another skill?",
128
144
  default: false,
145
+ theme: promptTheme,
129
146
  });
130
147
  }
131
148
  }
@@ -147,17 +164,18 @@ export const newCommand = {
147
164
  console.log(chalk.bold("Configuration Summary:"));
148
165
  console.log(chalk.dim("─".repeat(40)));
149
166
  console.log(` Name: ${chalk.rgb(199, 255, 142)(config.name)}`);
150
- console.log(` Package: ${chalk.dim(config.packageName)}`);
151
- console.log(` Description: ${chalk.dim(config.description)}`);
167
+ console.log(` Package: ${chalk.rgb(199, 255, 142)(config.packageName)}`);
168
+ console.log(` Description: ${chalk.rgb(199, 255, 142)(config.description)}`);
152
169
  console.log(` Model: ${chalk.rgb(199, 255, 142)(config.template)}`);
153
- console.log(` Streaming: ${config.capabilities.streaming ? chalk.green("Yes") : chalk.dim("No")}`);
154
- console.log(` Multi-turn: ${config.capabilities.multiTurn ? chalk.green("Yes") : chalk.dim("No")}`);
155
- console.log(` Skills: ${config.skills.length > 0 ? config.skills.map((s) => s.name).join(", ") : chalk.dim("None")}`);
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")}`);
156
173
  console.log(chalk.dim("─".repeat(40)));
157
174
  console.log();
158
175
  const confirmed = await confirm({
159
176
  message: "Generate agent with this configuration?",
160
177
  default: true,
178
+ theme: promptTheme,
161
179
  });
162
180
  if (!confirmed) {
163
181
  context.log.dim("Cancelled.");
@@ -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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"}
@@ -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,11 +46,11 @@ 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
56
  "@wardenprotocol/agent-kit": "^0.3.1",
@@ -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"}
@@ -14,7 +14,7 @@ export function banner() {
14
14
  ░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░████
15
15
  ░███ ░███ ░██ ░██ ░██ ░██ ░███████ ░██████████ ░██ ░███
16
16
 
17
- `) + chalk.dim(` Agent Development CLI v${pkg.version}\n`));
17
+ `) + chalk.dim(`Agent Development CLI v${pkg.version}\n`));
18
18
  }
19
19
  export function prompt() {
20
20
  return chalk.rgb(199, 255, 142)("warden") + chalk.dim("> ");
@@ -1 +1 @@
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,4BAA4B,GAAG,CAAC,OAAO,IAAI,CAAC,CACxD,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"}
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.2",
3
+ "version": "0.1.3",
4
4
  "description": "Interactive CLI for bootstrapping Warden agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -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
- });