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 +9 -10
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +41 -12
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/context.js +3 -3
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/services/scaffolder.d.ts.map +1 -1
- package/dist/cli/services/scaffolder.js +47 -11
- package/dist/cli/services/scaffolder.js.map +1 -1
- package/dist/cli/types.d.ts +1 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/ui/format.d.ts.map +1 -1
- package/dist/cli/ui/format.js +16 -9
- package/dist/cli/ui/format.js.map +1 -1
- package/dist/templates/echo-multiturn/agent.ts.template +28 -0
- package/dist/templates/echo-streaming/agent.ts.template +28 -0
- package/dist/templates/openai-multiturn/agent.ts.template +46 -90
- package/dist/templates/openai-streaming/agent.ts.template +48 -92
- package/dist/templates/{blank-multiturn/agent.ts.template → server.ts.template} +5 -29
- package/package.json +3 -3
- package/dist/templates/blank-streaming/agent.ts.template +0 -62
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. **
|
|
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
|
-
##
|
|
42
|
+
## Models
|
|
45
43
|
|
|
46
|
-
|
|
|
44
|
+
| Model | Description |
|
|
47
45
|
|----------|-------------|
|
|
48
|
-
| **
|
|
49
|
-
| **
|
|
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
|
|
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
|
-
│
|
|
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":"
|
|
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"}
|
package/dist/cli/commands/new.js
CHANGED
|
@@ -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
|
|
78
|
+
message: "Select a model:",
|
|
68
79
|
choices: [
|
|
69
80
|
{
|
|
70
|
-
value: "
|
|
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.
|
|
149
|
-
console.log(` Package: ${chalk.
|
|
150
|
-
console.log(` Description: ${chalk.
|
|
151
|
-
console.log(`
|
|
152
|
-
console.log(` Streaming: ${config.capabilities.streaming ? chalk.
|
|
153
|
-
console.log(` Multi-turn: ${config.capabilities.multiTurn ? chalk.
|
|
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("
|
|
177
|
-
context.log.dim("
|
|
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":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,wBAAwB,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,WAAmB;IACxC,OAAO,WAAW;SACf,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,uBAAuB;SACpD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,oBAAoB;SACzC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,4BAA4B;SAChD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,kCAAkC;IAC/C,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,KAAK,EAAE,IAAc,EAAE,OAAmB,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;YAE5B,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAElE,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;oBAC5B,OAAO,EAAE,kBAAkB;oBAC3B,OAAO,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/context.js
CHANGED
|
@@ -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.
|
|
6
|
-
success: (msg) => console.log(chalk.
|
|
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.
|
|
8
|
+
warn: (msg) => console.log(chalk.rgb(199, 255, 142)("⚠"), msg),
|
|
9
9
|
dim: (msg) => console.log(chalk.dim(msg)),
|
|
10
10
|
};
|
|
11
11
|
}
|
package/dist/cli/context.js.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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/
|
|
49
|
+
main: "dist/server.js",
|
|
37
50
|
scripts: {
|
|
38
51
|
build: "tsc",
|
|
39
52
|
dev: "tsc --watch",
|
|
40
|
-
agent: "node dist/
|
|
53
|
+
agent: "node dist/server.js",
|
|
41
54
|
},
|
|
42
55
|
dependencies: {
|
|
43
|
-
"@wardenprotocol/agent-kit": "^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
|
|
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
|
|
99
|
-
const
|
|
100
|
-
//
|
|
101
|
-
await
|
|
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 :
|
|
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":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,oDAAoD;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,QAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,MAAmB;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM;SAC5B,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,mBAAmB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,IAAI,6BAA6B,CAAC,CAAC,WAAW,gCAAgC,CAChI;SACA,IAAI,CAAC,WAAW,CAAC,CAAC;IAErB,OAAO,OAAO;SACX,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;SACrC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC;SACnD,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../src/cli/services/scaffolder.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/types.d.ts
CHANGED
package/dist/cli/types.d.ts.map
CHANGED
|
@@ -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,
|
|
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":"
|
|
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"}
|
package/dist/cli/ui/format.js
CHANGED
|
@@ -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.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
return (chalk.rgb(199, 255, 142)(`
|
|
9
|
+
░██ ░██ ░███ ░█████████ ░███████ ░██████████ ░███ ░██
|
|
10
|
+
░██ ░██ ░██░██ ░██ ░██ ░██ ░██ ░██ ░████ ░██
|
|
11
|
+
░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██
|
|
12
|
+
░██ ░████ ░██ ░█████████ ░█████████ ░██ ░██ ░█████████ ░██ ░██ ░██
|
|
13
|
+
░██░██ ░██░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██
|
|
14
|
+
░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░████
|
|
15
|
+
░███ ░███ ░██ ░██ ░██ ░██ ░███████ ░██████████ ░██ ░███
|
|
9
16
|
|
|
10
|
-
`) + chalk.dim(
|
|
17
|
+
`) + chalk.dim(`Agent Development CLI v${pkg.version}\n`));
|
|
11
18
|
}
|
|
12
19
|
export function prompt() {
|
|
13
|
-
return chalk.
|
|
20
|
+
return chalk.rgb(199, 255, 142)("warden") + chalk.dim("> ");
|
|
14
21
|
}
|
|
15
22
|
export function commandHelp(name, description, usage) {
|
|
16
|
-
let output = ` ${chalk.
|
|
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,
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
|
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:
|
|
17
|
-
multiTurn:
|
|
16
|
+
streaming: {{capabilities_streaming}},
|
|
17
|
+
multiTurn: {{capabilities_multiturn}},
|
|
18
18
|
},
|
|
19
19
|
skills: [{{skills}}],
|
|
20
20
|
},
|
|
21
|
-
handler
|
|
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.
|
|
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": "^
|
|
55
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
56
56
|
"typescript": "^5.7.3",
|
|
57
|
-
"vitest": "^
|
|
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
|
-
});
|