needware-cli 1.0.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/.editorconfig +21 -0
- package/AGENT_COMMAND_SUMMARY.md +364 -0
- package/CHANGELOG.md +138 -0
- package/FEATURE_INTERACTIVE_MODE.md +303 -0
- package/INTERACTIVE_EXAMPLE.md +305 -0
- package/LICENSE +22 -0
- package/PROJECT_SUMMARY.md +435 -0
- package/QUICK_START.md +216 -0
- package/README.md +310 -0
- package/SETUP.md +315 -0
- package/bin/cli.js +49 -0
- package/config/default.json +20 -0
- package/dist/commands/agent.d.ts +38 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +444 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/config.d.ts +48 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +197 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/example.d.ts +32 -0
- package/dist/commands/example.d.ts.map +1 -0
- package/dist/commands/example.js +154 -0
- package/dist/commands/example.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +25 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +158 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/core/cli.d.ts +37 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +160 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/command.d.ts +41 -0
- package/dist/core/command.d.ts.map +1 -0
- package/dist/core/command.js +87 -0
- package/dist/core/command.js.map +1 -0
- package/dist/core/logger.d.ts +30 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +163 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/sdk/base-sdk.d.ts +61 -0
- package/dist/sdk/base-sdk.d.ts.map +1 -0
- package/dist/sdk/base-sdk.js +71 -0
- package/dist/sdk/base-sdk.js.map +1 -0
- package/dist/sdk/example-sdk.d.ts +40 -0
- package/dist/sdk/example-sdk.d.ts.map +1 -0
- package/dist/sdk/example-sdk.js +168 -0
- package/dist/sdk/example-sdk.js.map +1 -0
- package/dist/sdk/index.d.ts +59 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +169 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/types/command.d.ts +34 -0
- package/dist/types/command.d.ts.map +1 -0
- package/dist/types/command.js +13 -0
- package/dist/types/command.js.map +1 -0
- package/dist/types/config.d.ts +30 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/error.d.ts +24 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +33 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/sdk.d.ts +21 -0
- package/dist/types/sdk.d.ts.map +1 -0
- package/dist/types/sdk.js +6 -0
- package/dist/types/sdk.js.map +1 -0
- package/dist/utils/config.d.ts +59 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +237 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file.d.ts +66 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +162 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/validator.d.ts +66 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +120 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAIxC,qBAAa,YAAa,SAAQ,OAAO;IACvC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,mDAAmD;IACvE,QAAQ,CAAC,OAAO,WAAU;gBAEd,MAAM,EAAE,MAAM;IAIpB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAuB9D;;OAEG;YACW,QAAQ;IA8EtB;;OAEG;YACW,mBAAmB;IAwEjC;;OAEG;YACY,mBAAmB;IAsDlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkJvB;;OAEG;IACH,OAAO,CAAC,QAAQ;CA+BjB"}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent 命令 - 使用 Claude Agent SDK 执行智能任务
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.AgentCommand = void 0;
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const ora_1 = __importDefault(require("ora"));
|
|
45
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
46
|
+
const claude_agent_sdk_1 = require("@anthropic-ai/claude-agent-sdk");
|
|
47
|
+
const command_1 = require("../core/command");
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const crypto_1 = require("crypto");
|
|
50
|
+
class AgentCommand extends command_1.Command {
|
|
51
|
+
name = 'agent';
|
|
52
|
+
description = 'Execute AI agent tasks using Claude Agent SDK';
|
|
53
|
+
aliases = ['ag'];
|
|
54
|
+
constructor(logger) {
|
|
55
|
+
super(logger);
|
|
56
|
+
}
|
|
57
|
+
async execute(options) {
|
|
58
|
+
try {
|
|
59
|
+
const prompt = options.args?.[0];
|
|
60
|
+
const interactive = options.interactive || options.i;
|
|
61
|
+
// 交互式模式不需要初始 prompt
|
|
62
|
+
if (!interactive && !prompt) {
|
|
63
|
+
return this.showHelp();
|
|
64
|
+
}
|
|
65
|
+
// 如果是交互模式,使用多轮对话
|
|
66
|
+
if (interactive) {
|
|
67
|
+
return await this.runInteractiveAgent(prompt, options);
|
|
68
|
+
}
|
|
69
|
+
// 否则使用单次对话
|
|
70
|
+
return await this.runAgent(prompt, options);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const message = error instanceof Error ? error.message : 'Agent command failed';
|
|
74
|
+
return this.error(message, error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 运行 Agent 查询
|
|
79
|
+
*/
|
|
80
|
+
async runAgent(prompt, options) {
|
|
81
|
+
// 获取 API Key,优先级:命令行参数 > 环境变量 > 默认值
|
|
82
|
+
const apiKey = options.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
83
|
+
// 获取 Base URL,优先级:命令行参数 > 环境变量 > 默认值
|
|
84
|
+
const baseUrl = options.baseUrl || process.env.ANTHROPIC_BASE_URL;
|
|
85
|
+
// SDK 会在初始化时检查 process.env.ANTHROPIC_API_KEY
|
|
86
|
+
// 所以需要确保环境变量被设置
|
|
87
|
+
if (!process.env.ANTHROPIC_API_KEY) {
|
|
88
|
+
process.env.ANTHROPIC_API_KEY = apiKey;
|
|
89
|
+
}
|
|
90
|
+
if (!process.env.ANTHROPIC_BASE_URL && baseUrl) {
|
|
91
|
+
process.env.ANTHROPIC_BASE_URL = baseUrl;
|
|
92
|
+
}
|
|
93
|
+
console.log('API Key:', apiKey.substring(0, 10) + '...');
|
|
94
|
+
console.log('Base URL:', baseUrl);
|
|
95
|
+
// 获取工作目录(默认使用当前工作目录)
|
|
96
|
+
const workingDirectory = options.workingDir || process.cwd();
|
|
97
|
+
const resolvedWorkingDir = path.resolve(workingDirectory);
|
|
98
|
+
// 获取额外的目录
|
|
99
|
+
const additionalDirectories = options.additionalDirs
|
|
100
|
+
? options.additionalDirs.split(',').map((dir) => dir.trim())
|
|
101
|
+
: [];
|
|
102
|
+
console.log(chalk_1.default.blue('\n🤖 启动 Claude Agent...\n'));
|
|
103
|
+
console.log(chalk_1.default.gray(`工作目录: ${resolvedWorkingDir}`));
|
|
104
|
+
if (additionalDirectories.length > 0) {
|
|
105
|
+
console.log(chalk_1.default.gray(`额外目录: ${additionalDirectories.join(', ')}`));
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk_1.default.gray(`提示词: ${prompt}\n`));
|
|
108
|
+
const spinner = (0, ora_1.default)('Agent 正在处理...').start();
|
|
109
|
+
try {
|
|
110
|
+
// 创建 agent 查询
|
|
111
|
+
const agentQuery = (0, claude_agent_sdk_1.query)({
|
|
112
|
+
prompt: prompt.trim(),
|
|
113
|
+
options: {
|
|
114
|
+
systemPrompt: this.getSystemPrompt(resolvedWorkingDir),
|
|
115
|
+
settingSources: ['project'],
|
|
116
|
+
model: 'claude-sonnet-4-5',
|
|
117
|
+
maxTurns: 30,
|
|
118
|
+
permissionMode: 'bypassPermissions',
|
|
119
|
+
cwd: resolvedWorkingDir,
|
|
120
|
+
additionalDirectories,
|
|
121
|
+
env: {
|
|
122
|
+
ANTHROPIC_API_KEY: apiKey,
|
|
123
|
+
...(baseUrl && { ANTHROPIC_BASE_URL: baseUrl }),
|
|
124
|
+
PATH: process.env.PATH || '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
spinner.stop();
|
|
129
|
+
console.log(chalk_1.default.green('✓ Agent 已启动\n'));
|
|
130
|
+
console.log(chalk_1.default.blue('━'.repeat(60)));
|
|
131
|
+
console.log();
|
|
132
|
+
// 流式输出结果
|
|
133
|
+
for await (const message of agentQuery) {
|
|
134
|
+
this.handleAgentMessage(message);
|
|
135
|
+
}
|
|
136
|
+
console.log();
|
|
137
|
+
console.log(chalk_1.default.blue('━'.repeat(60)));
|
|
138
|
+
console.log(chalk_1.default.green('\n✓ Agent 执行完成\n'));
|
|
139
|
+
return this.success('Agent task completed successfully');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
spinner.fail(chalk_1.default.red('Agent 执行失败'));
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 运行交互式 Agent 查询(多轮对话)
|
|
148
|
+
*/
|
|
149
|
+
async runInteractiveAgent(initialPrompt, options) {
|
|
150
|
+
// 获取 API Key 和 Base URL
|
|
151
|
+
const apiKey = options.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
152
|
+
const baseUrl = options.baseUrl || process.env.ANTHROPIC_BASE_URL;
|
|
153
|
+
if (!process.env.ANTHROPIC_API_KEY) {
|
|
154
|
+
process.env.ANTHROPIC_API_KEY = apiKey;
|
|
155
|
+
}
|
|
156
|
+
if (!process.env.ANTHROPIC_BASE_URL && baseUrl) {
|
|
157
|
+
process.env.ANTHROPIC_BASE_URL = baseUrl;
|
|
158
|
+
}
|
|
159
|
+
// 获取工作目录
|
|
160
|
+
const workingDirectory = options.workingDir || process.cwd();
|
|
161
|
+
const resolvedWorkingDir = path.resolve(workingDirectory);
|
|
162
|
+
// 获取额外的目录
|
|
163
|
+
const additionalDirectories = options.additionalDirs
|
|
164
|
+
? options.additionalDirs.split(',').map((dir) => dir.trim())
|
|
165
|
+
: [];
|
|
166
|
+
console.log(chalk_1.default.blue('\n🤖 启动交互式 Claude Agent...\n'));
|
|
167
|
+
console.log(chalk_1.default.gray(`工作目录: ${resolvedWorkingDir}`));
|
|
168
|
+
if (additionalDirectories.length > 0) {
|
|
169
|
+
console.log(chalk_1.default.gray(`额外目录: ${additionalDirectories.join(', ')}`));
|
|
170
|
+
}
|
|
171
|
+
console.log(chalk_1.default.yellow(`\n💡 提示: 输入 'exit' 或 'quit' 退出对话\n`));
|
|
172
|
+
const sessionId = (0, crypto_1.randomUUID)();
|
|
173
|
+
// 创建消息流生成器
|
|
174
|
+
const messageStream = this.createMessageStream(sessionId, initialPrompt);
|
|
175
|
+
// 创建 agent 查询
|
|
176
|
+
const agentQuery = (0, claude_agent_sdk_1.query)({
|
|
177
|
+
prompt: messageStream,
|
|
178
|
+
options: {
|
|
179
|
+
systemPrompt: this.getSystemPrompt(resolvedWorkingDir),
|
|
180
|
+
settingSources: ['project'],
|
|
181
|
+
model: 'claude-sonnet-4-5',
|
|
182
|
+
maxTurns: 100, // 增加交互轮次
|
|
183
|
+
permissionMode: 'bypassPermissions',
|
|
184
|
+
cwd: resolvedWorkingDir,
|
|
185
|
+
additionalDirectories,
|
|
186
|
+
env: {
|
|
187
|
+
ANTHROPIC_API_KEY: apiKey,
|
|
188
|
+
...(baseUrl && { ANTHROPIC_BASE_URL: baseUrl }),
|
|
189
|
+
PATH: process.env.PATH || '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
console.log(chalk_1.default.green('✓ Agent 已启动\n'));
|
|
194
|
+
console.log(chalk_1.default.blue('━'.repeat(60)));
|
|
195
|
+
console.log();
|
|
196
|
+
// 流式输出结果
|
|
197
|
+
for await (const message of agentQuery) {
|
|
198
|
+
this.handleAgentMessage(message);
|
|
199
|
+
}
|
|
200
|
+
console.log();
|
|
201
|
+
console.log(chalk_1.default.blue('━'.repeat(60)));
|
|
202
|
+
console.log(chalk_1.default.green('\n✓ 对话结束\n'));
|
|
203
|
+
return this.success('Interactive agent session completed');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* 创建消息流生成器
|
|
207
|
+
*/
|
|
208
|
+
async *createMessageStream(sessionId, initialPrompt) {
|
|
209
|
+
// 如果有初始 prompt,先发送它
|
|
210
|
+
if (initialPrompt) {
|
|
211
|
+
yield {
|
|
212
|
+
session_id: sessionId,
|
|
213
|
+
type: 'user',
|
|
214
|
+
message: {
|
|
215
|
+
role: 'user',
|
|
216
|
+
content: initialPrompt.trim(),
|
|
217
|
+
},
|
|
218
|
+
parent_tool_use_id: null,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// 持续接收用户输入
|
|
222
|
+
while (true) {
|
|
223
|
+
const { userInput } = await inquirer_1.default.prompt([
|
|
224
|
+
{
|
|
225
|
+
type: 'input',
|
|
226
|
+
name: 'userInput',
|
|
227
|
+
message: chalk_1.default.cyan('You:'),
|
|
228
|
+
validate: (input) => {
|
|
229
|
+
if (!input.trim()) {
|
|
230
|
+
return '请输入内容';
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
]);
|
|
236
|
+
const trimmedInput = userInput.trim();
|
|
237
|
+
// 检查是否退出
|
|
238
|
+
if (trimmedInput.toLowerCase() === 'exit' || trimmedInput.toLowerCase() === 'quit') {
|
|
239
|
+
console.log(chalk_1.default.yellow('\n👋 退出对话...\n'));
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
// 发送用户消息
|
|
243
|
+
yield {
|
|
244
|
+
session_id: sessionId,
|
|
245
|
+
type: 'user',
|
|
246
|
+
message: {
|
|
247
|
+
role: 'user',
|
|
248
|
+
content: trimmedInput,
|
|
249
|
+
},
|
|
250
|
+
parent_tool_use_id: null,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 处理 Agent 消息
|
|
256
|
+
*/
|
|
257
|
+
handleAgentMessage(message) {
|
|
258
|
+
try {
|
|
259
|
+
// 直接输出原始消息到终端
|
|
260
|
+
console.log(JSON.stringify(message, null, 2));
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
// 如果序列化失败,尝试直接输出
|
|
264
|
+
console.log(message);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* 获取系统提示词
|
|
269
|
+
*/
|
|
270
|
+
getSystemPrompt(workingDir) {
|
|
271
|
+
return `
|
|
272
|
+
## Working Directory Context
|
|
273
|
+
|
|
274
|
+
IMPORTANT: You are working in the directory: ${workingDir}
|
|
275
|
+
All file operations (read, write, create, etc.) MUST be performed in this working directory.
|
|
276
|
+
Do NOT use /tmp or any other system directories. Work exclusively in: ${workingDir}
|
|
277
|
+
|
|
278
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
279
|
+
|
|
280
|
+
You are needware, an AI editor that creates and modifies web applications. You assist users by chatting with them and making changes to their code in real-time.
|
|
281
|
+
|
|
282
|
+
Not every interaction requires code changes - you're happy to discuss, explain concepts, or provide guidance without modifying the codebase. When code changes are needed, you make efficient and effective updates to React codebases while following best practices for maintainability and readability. You take pride in keeping things simple and elegant. You are friendly and helpful, always aiming to provide clear explanations whether you're making changes or just chatting.
|
|
283
|
+
|
|
284
|
+
Always reply in the same language as the user's message.
|
|
285
|
+
|
|
286
|
+
## Technology Stack:
|
|
287
|
+
needware projects are built on top of React, Vite, Tailwind CSS, and TypeScript.
|
|
288
|
+
- **Framework**: React
|
|
289
|
+
- **Build Tool**: Vite
|
|
290
|
+
- **Styling**: Tailwind CSS (with design system tokens)
|
|
291
|
+
- **TypeScript**: Strict mode enabled
|
|
292
|
+
- **Package Manager**: npm
|
|
293
|
+
|
|
294
|
+
## Project Structure:
|
|
295
|
+
- **Entry HTML**: \`index.html\` at project root (Vite entry point)
|
|
296
|
+
- **Source code**: All in \`src/\` directory
|
|
297
|
+
- \`main.tsx\`: React application entry point
|
|
298
|
+
- \`App.tsx\`: Main App component
|
|
299
|
+
- \`index.css\`: Global styles and design system tokens
|
|
300
|
+
- \`assets/\`: Static assets (images, icons, etc.)
|
|
301
|
+
- \`components/\`: Reusable UI components (create if needed)
|
|
302
|
+
- \`hooks/\`: Custom React hooks (create if needed)
|
|
303
|
+
- \`types/\`: TypeScript type definitions (create if needed)
|
|
304
|
+
- \`utils/\`: Utility functions (create if needed)
|
|
305
|
+
- **Public assets**: \`public/\` directory (served at root during dev/build)
|
|
306
|
+
- **Tailwind config**: \`tailwind.config.ts\` for design system customization
|
|
307
|
+
|
|
308
|
+
## Development Commands:
|
|
309
|
+
- \`npm run dev\`: Start dev server
|
|
310
|
+
- \`npm run build\`: Build for production
|
|
311
|
+
- \`npm run preview\`: Preview production build
|
|
312
|
+
- \`npm run lint\`: Run ESLint
|
|
313
|
+
|
|
314
|
+
## General Guidelines
|
|
315
|
+
|
|
316
|
+
PERFECT ARCHITECTURE: Always consider whether the code needs refactoring given the latest request. If it does, refactor the code to be more efficient and maintainable. Spaghetti code is your enemy.
|
|
317
|
+
|
|
318
|
+
MAXIMIZE EFFICIENCY: For maximum efficiency, whenever you need to perform multiple independent operations, always invoke all relevant tools simultaneously. Never make sequential tool calls when they can be combined.
|
|
319
|
+
|
|
320
|
+
CHECK UNDERSTANDING: If unsure about scope, ask for clarification rather than guessing. When you ask a question to the user, make sure to wait for their response before proceeding and calling tools.
|
|
321
|
+
|
|
322
|
+
BE CONCISE: You MUST answer concisely with fewer than 2 lines of text (not including tool use or code generation), unless user asks for detail. After editing code, do not write a long explanation, just keep it as short as possible without emojis.
|
|
323
|
+
|
|
324
|
+
COMMUNICATE ACTIONS: Before performing any changes, briefly inform the user what you will do.
|
|
325
|
+
|
|
326
|
+
## Required Workflow (Follow This Order)
|
|
327
|
+
|
|
328
|
+
1. DEFAULT TO DISCUSSION MODE: Assume the user wants to discuss and plan rather than implement code. Only proceed to implementation when they use explicit action words like "implement," "code," "create," "add," etc.
|
|
329
|
+
|
|
330
|
+
2. THINK & PLAN: When thinking about the task, you should:
|
|
331
|
+
- Restate what the user is ACTUALLY asking for (not what you think they might want)
|
|
332
|
+
- Do not hesitate to explore more of the codebase to find relevant information
|
|
333
|
+
- Define EXACTLY what will change and what will remain untouched
|
|
334
|
+
- Plan a minimal but CORRECT approach needed to fulfill the request
|
|
335
|
+
- Select the most appropriate and efficient tools
|
|
336
|
+
|
|
337
|
+
3. ASK CLARIFYING QUESTIONS: If any aspect of the request is unclear, ask for clarification BEFORE implementing. Wait for their response before proceeding and calling tools.
|
|
338
|
+
|
|
339
|
+
4. GATHER CONTEXT EFFICIENTLY:
|
|
340
|
+
- ALWAYS batch multiple file operations when possible
|
|
341
|
+
- Only read files directly relevant to the request
|
|
342
|
+
|
|
343
|
+
5. IMPLEMENTATION (when relevant):
|
|
344
|
+
- Focus on the changes explicitly requested
|
|
345
|
+
- Create small, focused components instead of large files
|
|
346
|
+
- Avoid fallbacks, edge cases, or features not explicitly requested
|
|
347
|
+
|
|
348
|
+
6. VERIFY & CONCLUDE:
|
|
349
|
+
- Ensure all changes are complete and correct
|
|
350
|
+
- Conclude with a very concise summary of the changes you made
|
|
351
|
+
- Avoid emojis
|
|
352
|
+
|
|
353
|
+
## Efficient Tool Usage
|
|
354
|
+
|
|
355
|
+
### CARDINAL RULES:
|
|
356
|
+
1. ALWAYS batch multiple operations when possible
|
|
357
|
+
2. NEVER make sequential tool calls that could be combined
|
|
358
|
+
3. Use the most appropriate tool for each task
|
|
359
|
+
|
|
360
|
+
### EFFICIENT CODE MODIFICATION
|
|
361
|
+
Choose the least invasive approach:
|
|
362
|
+
- Use search-replace for most changes
|
|
363
|
+
- Use write-file only for new files or complete rewrites
|
|
364
|
+
|
|
365
|
+
## Coding Standards:
|
|
366
|
+
- **Always use TypeScript** with proper type definitions
|
|
367
|
+
- Use **functional components** with hooks
|
|
368
|
+
- Use **modern React patterns**: useState, useEffect, useCallback, useMemo, etc.
|
|
369
|
+
- Use **ES modules** (import/export)
|
|
370
|
+
- Follow **React best practices**: component composition, prop drilling avoidance, etc.
|
|
371
|
+
- ALWAYS generate beautiful and responsive designs
|
|
372
|
+
- Use toast components to inform the user about important events
|
|
373
|
+
|
|
374
|
+
## Design System (CRITICAL):
|
|
375
|
+
The design system is everything. You should never write custom styles in components, you should always use the design system and customize it.
|
|
376
|
+
|
|
377
|
+
- **Maximize reusability** of components
|
|
378
|
+
- **Leverage index.css and tailwind.config.ts** to create a consistent design system that can be reused across the app instead of custom styles everywhere
|
|
379
|
+
- **Create variants** in the components you'll use
|
|
380
|
+
- **USE SEMANTIC TOKENS FOR COLORS**: It's important you follow best practices. DO NOT use direct colors like text-white, text-black, bg-white, bg-black, etc. Everything must be themed via the design system defined in the index.css and tailwind.config.ts files!
|
|
381
|
+
|
|
382
|
+
## File Naming Conventions:
|
|
383
|
+
- **Components**: PascalCase (e.g., \`UserProfile.tsx\`)
|
|
384
|
+
- **Hooks**: camelCase starting with 'use' (e.g., \`useAuth.ts\`)
|
|
385
|
+
- **Types**: PascalCase (e.g., \`User.ts\` or \`types.ts\`)
|
|
386
|
+
- **Utils**: camelCase (e.g., \`formatDate.ts\`)
|
|
387
|
+
- **CSS Modules**: \`ComponentName.module.css\`
|
|
388
|
+
|
|
389
|
+
## Import Paths:
|
|
390
|
+
- Use relative imports (e.g., \`import { X } from './components/X'\`)
|
|
391
|
+
- Or configure path aliases in \`vite.config.ts\` and \`tsconfig.json\` if needed
|
|
392
|
+
|
|
393
|
+
## Design Guidelines:
|
|
394
|
+
- Create **beautiful, modern, production-ready** UI designs
|
|
395
|
+
- Ensure responsive layouts (mobile-first approach)
|
|
396
|
+
- Implement proper error handling and loading states
|
|
397
|
+
- Follow accessibility best practices (semantic HTML, ARIA labels, keyboard navigation)
|
|
398
|
+
- Use modern CSS features (flexbox, grid, custom properties)
|
|
399
|
+
- Maximize reusability of components
|
|
400
|
+
- Pay attention to contrast, color, and typography
|
|
401
|
+
- Beautiful designs are your top priority
|
|
402
|
+
- **Image placeholders**: If no image URL is provided, use an Unsplash image as a substitute based on the scene
|
|
403
|
+
|
|
404
|
+
## Important Rules:
|
|
405
|
+
- When installing new packages, use \`npm install\` (not yarn or pnpm)
|
|
406
|
+
- Always maintain TypeScript type safety
|
|
407
|
+
- Hot Module Replacement (HMR) is enabled by default with Vite
|
|
408
|
+
- For production builds, assets are optimized and hashed automatically
|
|
409
|
+
- Keep explanations very, very short
|
|
410
|
+
- Minimize emoji use
|
|
411
|
+
- Make sure to write valid TypeScript and CSS code following the design system
|
|
412
|
+
- Make sure imports are correct
|
|
413
|
+
`.trim();
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* 显示帮助信息
|
|
417
|
+
*/
|
|
418
|
+
showHelp() {
|
|
419
|
+
console.log(chalk_1.default.blue('\n📖 Agent 命令帮助:\n'));
|
|
420
|
+
console.log(chalk_1.default.cyan('用法:'));
|
|
421
|
+
console.log(' needware-cli agent <prompt> [options]');
|
|
422
|
+
console.log(' needware-cli agent --interactive [initial-prompt] [options]\n');
|
|
423
|
+
console.log(chalk_1.default.cyan('选项:'));
|
|
424
|
+
console.log(' -i, --interactive 启用交互式多轮对话模式');
|
|
425
|
+
console.log(' --working-dir <path> 指定工作目录 (默认: 当前目录)');
|
|
426
|
+
console.log(' --additional-dirs <paths> 指定额外的目录 (逗号分隔)');
|
|
427
|
+
console.log(' --api-key <key> Anthropic API Key (覆盖环境变量)');
|
|
428
|
+
console.log(' --base-url <url> Anthropic API Base URL (覆盖环境变量)\n');
|
|
429
|
+
console.log(chalk_1.default.cyan('环境变量:'));
|
|
430
|
+
console.log(' ANTHROPIC_API_KEY Anthropic API Key');
|
|
431
|
+
console.log(' ANTHROPIC_BASE_URL Anthropic API Base URL\n');
|
|
432
|
+
console.log(chalk_1.default.cyan('单次对话示例:'));
|
|
433
|
+
console.log(chalk_1.default.gray(' needware-cli agent "创建一个待办事项应用"'));
|
|
434
|
+
console.log(chalk_1.default.gray(' needware-cli agent "修复登录页面的样式问题" --working-dir ./my-project'));
|
|
435
|
+
console.log(chalk_1.default.gray(' needware-cli agent "添加用户认证功能" --api-key sk-xxx\n'));
|
|
436
|
+
console.log(chalk_1.default.cyan('多轮对话示例:'));
|
|
437
|
+
console.log(chalk_1.default.gray(' needware-cli agent --interactive'));
|
|
438
|
+
console.log(chalk_1.default.gray(' needware-cli agent -i "创建一个待办事项应用"'));
|
|
439
|
+
console.log(chalk_1.default.gray(' needware-cli agent --interactive --working-dir ./my-project\n'));
|
|
440
|
+
return this.success('Help shown');
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
exports.AgentCommand = AgentCommand;
|
|
444
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置管理命令
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from '../core/command';
|
|
5
|
+
import { CommandOptions, CommandResult } from '../types';
|
|
6
|
+
import { ConfigManager } from '../utils/config';
|
|
7
|
+
import { Logger } from '../core/logger';
|
|
8
|
+
export declare class ConfigCommand extends Command {
|
|
9
|
+
readonly name = "config";
|
|
10
|
+
readonly description = "\u914D\u7F6E\u7BA1\u7406\uFF08\u67E5\u770B/\u8BBE\u7F6E\uFF09";
|
|
11
|
+
readonly aliases: string[];
|
|
12
|
+
private configManager;
|
|
13
|
+
constructor(logger: Logger, configManager: ConfigManager);
|
|
14
|
+
execute(options: CommandOptions): Promise<CommandResult>;
|
|
15
|
+
/**
|
|
16
|
+
* 列出所有配置
|
|
17
|
+
*/
|
|
18
|
+
private listConfig;
|
|
19
|
+
/**
|
|
20
|
+
* 递归打印配置
|
|
21
|
+
*/
|
|
22
|
+
private printConfig;
|
|
23
|
+
/**
|
|
24
|
+
* 格式化配置值
|
|
25
|
+
*/
|
|
26
|
+
private formatValue;
|
|
27
|
+
/**
|
|
28
|
+
* 获取配置项
|
|
29
|
+
*/
|
|
30
|
+
private getConfig;
|
|
31
|
+
/**
|
|
32
|
+
* 设置配置项
|
|
33
|
+
*/
|
|
34
|
+
private setConfig;
|
|
35
|
+
/**
|
|
36
|
+
* 重置配置
|
|
37
|
+
*/
|
|
38
|
+
private resetConfig;
|
|
39
|
+
/**
|
|
40
|
+
* 显示配置文件路径
|
|
41
|
+
*/
|
|
42
|
+
private showConfigPath;
|
|
43
|
+
/**
|
|
44
|
+
* 显示帮助信息
|
|
45
|
+
*/
|
|
46
|
+
private showHelp;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,qBAAa,aAAc,SAAQ,OAAO;IACxC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,mEAAiB;IACrC,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;IAKlD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAyB9D;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IA2CjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAqBjB"}
|