warden-code 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +82 -0
- package/dist/cli/commands/clear.d.ts +3 -0
- package/dist/cli/commands/clear.d.ts.map +1 -0
- package/dist/cli/commands/clear.js +10 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/exit.d.ts +3 -0
- package/dist/cli/commands/exit.d.ts.map +1 -0
- package/dist/cli/commands/exit.js +12 -0
- package/dist/cli/commands/exit.js.map +1 -0
- package/dist/cli/commands/help.d.ts +4 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +44 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +6 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/new.d.ts +3 -0
- package/dist/cli/commands/new.d.ts.map +1 -0
- package/dist/cli/commands/new.js +184 -0
- package/dist/cli/commands/new.js.map +1 -0
- package/dist/cli/commands/registry.d.ts +12 -0
- package/dist/cli/commands/registry.d.ts.map +1 -0
- package/dist/cli/commands/registry.js +53 -0
- package/dist/cli/commands/registry.js.map +1 -0
- package/dist/cli/context.d.ts +3 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +19 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +59 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/services/project.d.ts +8 -0
- package/dist/cli/services/project.d.ts.map +1 -0
- package/dist/cli/services/project.js +57 -0
- package/dist/cli/services/project.js.map +1 -0
- package/dist/cli/services/scaffolder.d.ts +10 -0
- package/dist/cli/services/scaffolder.d.ts.map +1 -0
- package/dist/cli/services/scaffolder.js +125 -0
- package/dist/cli/services/scaffolder.js.map +1 -0
- package/dist/cli/types.d.ts +37 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/ui/format.d.ts +4 -0
- package/dist/cli/ui/format.d.ts.map +1 -0
- package/dist/cli/ui/format.js +23 -0
- package/dist/cli/ui/format.js.map +1 -0
- package/dist/templates/blank-multiturn/agent.ts.template +62 -0
- package/dist/templates/blank-streaming/agent.ts.template +62 -0
- package/dist/templates/openai-multiturn/agent.ts.template +99 -0
- package/dist/templates/openai-streaming/agent.ts.template +103 -0
- package/package.json +62 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import OpenAI from "openai";
|
|
3
|
+
import { AgentServer } from "@wardenprotocol/agent-kit";
|
|
4
|
+
import type { TaskContext, TaskYieldUpdate, MessagePart } from "@wardenprotocol/agent-kit";
|
|
5
|
+
|
|
6
|
+
const PORT = Number(process.env.PORT) || 3000;
|
|
7
|
+
const HOST = process.env.HOST || "localhost";
|
|
8
|
+
const BASE_URL = `http://${HOST}:${PORT}`;
|
|
9
|
+
|
|
10
|
+
const openai = new OpenAI({
|
|
11
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
12
|
+
});
|
|
13
|
+
|
|
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`);
|
|
94
|
+
|
|
95
|
+
if (!hasApiKey) {
|
|
96
|
+
console.log();
|
|
97
|
+
console.log("Warning: OPENAI_API_KEY not set. Set it in your .env file.");
|
|
98
|
+
}
|
|
99
|
+
});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import OpenAI from "openai";
|
|
3
|
+
import { AgentServer } from "@wardenprotocol/agent-kit";
|
|
4
|
+
import type { TaskContext, TaskYieldUpdate, MessagePart } from "@wardenprotocol/agent-kit";
|
|
5
|
+
|
|
6
|
+
const PORT = Number(process.env.PORT) || 3000;
|
|
7
|
+
const HOST = process.env.HOST || "localhost";
|
|
8
|
+
const BASE_URL = `http://${HOST}:${PORT}`;
|
|
9
|
+
|
|
10
|
+
const openai = new OpenAI({
|
|
11
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
12
|
+
});
|
|
13
|
+
|
|
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
|
+
}
|
|
60
|
+
|
|
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
|
+
};
|
|
76
|
+
}
|
|
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
|
+
|
|
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.");
|
|
102
|
+
}
|
|
103
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "warden-code",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Interactive CLI for bootstrapping Warden agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"warden": "./dist/cli/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/**/*.test.*",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc && cp -r src/templates dist/",
|
|
19
|
+
"dev": "tsc --watch",
|
|
20
|
+
"cli": "node dist/cli/index.js",
|
|
21
|
+
"clean": "rm -rf dist",
|
|
22
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
23
|
+
"test": "vitest",
|
|
24
|
+
"test:run": "vitest run",
|
|
25
|
+
"test:coverage": "vitest run --coverage"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"warden",
|
|
29
|
+
"agent",
|
|
30
|
+
"cli",
|
|
31
|
+
"a2a",
|
|
32
|
+
"langgraph",
|
|
33
|
+
"ai",
|
|
34
|
+
"scaffolding",
|
|
35
|
+
"generator"
|
|
36
|
+
],
|
|
37
|
+
"author": "Warden Protocol",
|
|
38
|
+
"license": "Apache-2.0",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/warden-protocol/agent-kit.git",
|
|
42
|
+
"directory": "warden"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/warden-protocol/agent-kit/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/warden-protocol/agent-kit/tree/main/warden#readme",
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@inquirer/prompts": "^7.0.0",
|
|
50
|
+
"chalk": "^5.4.1",
|
|
51
|
+
"ora": "^8.1.1"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/node": "^22.10.7",
|
|
55
|
+
"@vitest/coverage-v8": "^2.1.8",
|
|
56
|
+
"typescript": "^5.7.3",
|
|
57
|
+
"vitest": "^2.1.8"
|
|
58
|
+
},
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=18.0.0"
|
|
61
|
+
}
|
|
62
|
+
}
|