aico-cli 0.3.4 → 0.3.7
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/dist/chunks/simple-config.mjs +2 -2
- package/dist/cli.mjs +139 -7
- package/package.json +1 -1
- package/templates/personality.md +25 -25
|
@@ -13,7 +13,7 @@ import { join as join$1 } from 'node:path';
|
|
|
13
13
|
import { join, dirname, basename } from 'pathe';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
|
|
16
|
-
const version = "0.3.
|
|
16
|
+
const version = "0.3.7";
|
|
17
17
|
|
|
18
18
|
function displayBanner(subtitle) {
|
|
19
19
|
const defaultSubtitle = "\u4E00\u952E\u914D\u7F6E\u4F60\u7684\u5F00\u53D1\u73AF\u5883";
|
|
@@ -5560,4 +5560,4 @@ async function openSettingsJson() {
|
|
|
5560
5560
|
}
|
|
5561
5561
|
}
|
|
5562
5562
|
|
|
5563
|
-
export { AICO_CONFIG_FILE as A, getMcpConfigPath as B, CLAUDE_DIR as C, DEFAULT_FILE_COPY_CONFIGS as D, readMcpConfig as E, writeMcpConfig as F, backupMcpConfig as G, mergeMcpServers as H, buildMcpServerConfig as I, fixWindowsMcpConfig as J, addCompletedOnboarding as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, createEscapablePrompt as N, displayBannerWithInfo as O, executeWithEscapeSupport as P, handleExitPromptError as Q, handleGeneralError as R, SETTINGS_FILE as S, EscapeKeyPressed as T, displayBanner as U,
|
|
5563
|
+
export { AICO_CONFIG_FILE as A, getMcpConfigPath as B, CLAUDE_DIR as C, DEFAULT_FILE_COPY_CONFIGS as D, readMcpConfig as E, writeMcpConfig as F, backupMcpConfig as G, mergeMcpServers as H, buildMcpServerConfig as I, fixWindowsMcpConfig as J, addCompletedOnboarding as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, createEscapablePrompt as N, displayBannerWithInfo as O, executeWithEscapeSupport as P, handleExitPromptError as Q, handleGeneralError as R, SETTINGS_FILE as S, EscapeKeyPressed as T, displayBanner as U, ConfigCheckerInstaller as V, InstallationComposer as W, version as X, readAicoConfig as Y, init$1 as Z, init as a, getPlatform as b, commandExists as c, importRecommendedEnv as d, importRecommendedPermissions as e, cleanupPermissions as f, getTermuxPrefix as g, mergeAndCleanPermissions as h, isTermux as i, CLAUDE_MD_FILE as j, ClAUDE_CONFIG_FILE as k, SUPPORTED_LANGS as l, messages as m, LANG_LABELS as n, openSettingsJson as o, AI_OUTPUT_LANGUAGES as p, ensureClaudeDir as q, backupExistingConfig as r, copyConfigFiles as s, copyConfigFilesWithConfig as t, configureApi as u, mergeConfigs as v, updateDefaultModel as w, mergeSettingsFile as x, getExistingApiConfig as y, applyAiLanguageDirective as z };
|
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import cac from 'cac';
|
|
3
3
|
import ansis from 'ansis';
|
|
4
|
-
import { N as createEscapablePrompt, O as displayBannerWithInfo, a as init, P as executeWithEscapeSupport, Q as handleExitPromptError, R as handleGeneralError, T as EscapeKeyPressed, U as displayBanner, V as
|
|
4
|
+
import { N as createEscapablePrompt, O as displayBannerWithInfo, a as init, P as executeWithEscapeSupport, Q as handleExitPromptError, R as handleGeneralError, T as EscapeKeyPressed, U as displayBanner, V as ConfigCheckerInstaller, W as InstallationComposer, X as version, Y as readAicoConfig } from './chunks/simple-config.mjs';
|
|
5
5
|
import inquirer$1 from 'inquirer';
|
|
6
6
|
import { spawn, exec as exec$1 } from 'node:child_process';
|
|
7
7
|
import 'tinyexec';
|
|
@@ -127,6 +127,25 @@ promisify$1(exec$1);
|
|
|
127
127
|
|
|
128
128
|
promisify$1(exec$1);
|
|
129
129
|
|
|
130
|
+
const execAsync = promisify(exec);
|
|
131
|
+
async function run(command) {
|
|
132
|
+
try {
|
|
133
|
+
const result = await execAsync(command);
|
|
134
|
+
return result;
|
|
135
|
+
} catch (error) {
|
|
136
|
+
if (error instanceof Error) {
|
|
137
|
+
throw new Error(`Command failed: ${command}
|
|
138
|
+
Error: ${error.message}`);
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const runCommand = {
|
|
145
|
+
__proto__: null,
|
|
146
|
+
run: run
|
|
147
|
+
};
|
|
148
|
+
|
|
130
149
|
async function tryStartClaude(command, args, options) {
|
|
131
150
|
return new Promise((resolve, reject) => {
|
|
132
151
|
const child = spawn(command, args, options);
|
|
@@ -202,6 +221,30 @@ function createDefaultContext() {
|
|
|
202
221
|
async function launchCodeEditor() {
|
|
203
222
|
return startClaudeCodeEditor();
|
|
204
223
|
}
|
|
224
|
+
async function launchCUI() {
|
|
225
|
+
const { spawn } = await import('child_process');
|
|
226
|
+
const { promisify } = await import('util');
|
|
227
|
+
const exec = promisify(require("child_process").exec);
|
|
228
|
+
try {
|
|
229
|
+
console.log("\u6B63\u5728\u5B89\u88C5 pm2...");
|
|
230
|
+
await exec("npm install -g pm2");
|
|
231
|
+
console.log("pm2 \u5B89\u88C5\u6210\u529F");
|
|
232
|
+
console.log("\u6B63\u5728\u5B89\u88C5 aico-cui...");
|
|
233
|
+
await exec("npm install -g aico-cui");
|
|
234
|
+
console.log("aico-cui \u5B89\u88C5\u6210\u529F");
|
|
235
|
+
console.log("\u542F\u52A8 AICO CUI \u53EF\u89C6\u5316\u754C\u9762...");
|
|
236
|
+
const cuiProcess = spawn("aico-cui", [], { stdio: "inherit" });
|
|
237
|
+
cuiProcess.on("close", (code) => {
|
|
238
|
+
console.log(`AICO CUI \u5DF2\u9000\u51FA\uFF0C\u9000\u51FA\u7801: ${code}`);
|
|
239
|
+
});
|
|
240
|
+
cuiProcess.on("error", (err) => {
|
|
241
|
+
console.error("\u542F\u52A8 AICO CUI \u5931\u8D25:", err);
|
|
242
|
+
});
|
|
243
|
+
} catch (error) {
|
|
244
|
+
console.error("\u542F\u52A8\u53EF\u89C6\u5316\u754C\u9762\u5931\u8D25:", error);
|
|
245
|
+
throw error;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
205
248
|
|
|
206
249
|
async function showMainMenu() {
|
|
207
250
|
try {
|
|
@@ -235,6 +278,13 @@ async function showMainMenu() {
|
|
|
235
278
|
description: "\u66F4\u65B0 \u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382 \u5230\u6700\u65B0\u7248\u672C",
|
|
236
279
|
processor: () => updateAicoCli(),
|
|
237
280
|
section: "\u57FA\u7840\u914D\u7F6E"
|
|
281
|
+
},
|
|
282
|
+
"5": {
|
|
283
|
+
key: "5",
|
|
284
|
+
label: "\u542F\u52A8\u53EF\u89C6\u5316\u754C\u9762",
|
|
285
|
+
description: "\u542F\u52A8AICO CUI\u53EF\u89C6\u5316\u754C\u9762",
|
|
286
|
+
processor: () => launchCUI(),
|
|
287
|
+
section: "\u9AD8\u7EA7\u529F\u80FD"
|
|
238
288
|
}
|
|
239
289
|
};
|
|
240
290
|
let exitMenu = false;
|
|
@@ -322,7 +372,41 @@ async function update(options = {}) {
|
|
|
322
372
|
if (!options.skipBanner) {
|
|
323
373
|
displayBanner("Update AICO CLI to latest version");
|
|
324
374
|
}
|
|
375
|
+
const context = createDefaultContext();
|
|
376
|
+
const checker = new ConfigCheckerInstaller(context);
|
|
377
|
+
const configType = await checker.detectConfigType();
|
|
378
|
+
console.log(ansis.cyan(`\u{1F4CB} \u68C0\u6D4B\u5230\u914D\u7F6E\u7C7B\u578B: ${configType === "company" ? "\u516C\u53F8\u914D\u7F6E" : configType === "personal" ? "\u4E2A\u4EBA\u914D\u7F6E" : "\u65E0\u914D\u7F6E"}`));
|
|
325
379
|
await updateAicoCli();
|
|
380
|
+
if (configType === "none") {
|
|
381
|
+
console.log(ansis.yellow("\n\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230\u914D\u7F6E\uFF0C\u5C06\u6267\u884C\u521D\u59CB\u5316..."));
|
|
382
|
+
const { init } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
383
|
+
await init({
|
|
384
|
+
force: false,
|
|
385
|
+
skipBanner: true,
|
|
386
|
+
skipPrompt: true
|
|
387
|
+
});
|
|
388
|
+
console.log(ansis.green("\u2705 \u521D\u59CB\u5316\u5B8C\u6210\uFF01"));
|
|
389
|
+
} else {
|
|
390
|
+
console.log(ansis.cyan(`\u{1F504} \u66F4\u65B0${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"}\u914D\u7F6E\u5185\u5BB9...`));
|
|
391
|
+
try {
|
|
392
|
+
const composer = new InstallationComposer(context);
|
|
393
|
+
if (configType === "company") {
|
|
394
|
+
await composer.installCompanySetup({
|
|
395
|
+
force: true,
|
|
396
|
+
skipPrompt: true
|
|
397
|
+
});
|
|
398
|
+
} else {
|
|
399
|
+
await composer.installPersonalSetup({
|
|
400
|
+
force: true,
|
|
401
|
+
skipPrompt: true
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
console.log(ansis.green(`\u2705 ${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"}\u914D\u7F6E\u66F4\u65B0\u5B8C\u6210\uFF01`));
|
|
405
|
+
} catch (updateError) {
|
|
406
|
+
console.log(ansis.yellow(`\u26A0\uFE0F \u914D\u7F6E\u66F4\u65B0\u5931\u8D25: ${updateError instanceof Error ? updateError.message : String(updateError)}`));
|
|
407
|
+
console.log(ansis.gray(" \u60A8\u53EF\u4EE5\u7A0D\u540E\u624B\u52A8\u8FD0\u884C\u914D\u7F6E\u66F4\u65B0\u547D\u4EE4"));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
326
410
|
console.log(ansis.green("\n\u2705 AICO CLI \u66F4\u65B0\u5B8C\u6210\uFF01"));
|
|
327
411
|
console.log(ansis.gray(" \u60A8\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528\u5176\u4ED6\u547D\u4EE4\u914D\u7F6E\u63D0\u793A\u8BCD\u548C\u5DE5\u4F5C\u6D41\u3002"));
|
|
328
412
|
} catch (error) {
|
|
@@ -333,7 +417,7 @@ async function update(options = {}) {
|
|
|
333
417
|
}
|
|
334
418
|
|
|
335
419
|
function setupCommands(cli) {
|
|
336
|
-
cli.command("", "\u542F\u52A8\u4EE3\u7801\u7F16\u8F91\u5668\uFF08\u9ED8\u8BA4\uFF09").option("--menu", "\u663E\u793A\u4EA4\u4E92\u5F0F\u83DC\u5355").option("--init", "\u521D\u59CB\u5316\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382AI\u914D\u7F6E").option("--update", "\u66F4\u65B0\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382\u5230\u6700\u65B0\u7248\u672C").option("--company", "\u914D\u7F6E\u516C\u53F8\u914D\u7F6E").option("--personal", "\u914D\u7F6E\u4E2A\u4EBA\u914D\u7F6E").option("--help", "\u663E\u793A\u5E2E\u52A9\u4FE1\u606F").
|
|
420
|
+
cli.command("", "\u542F\u52A8\u4EE3\u7801\u7F16\u8F91\u5668\uFF08\u9ED8\u8BA4\uFF09").option("--menu", "\u663E\u793A\u4EA4\u4E92\u5F0F\u83DC\u5355").option("--init", "\u521D\u59CB\u5316\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382AI\u914D\u7F6E").option("--update", "\u66F4\u65B0\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382\u5230\u6700\u65B0\u7248\u672C").option("--company", "\u914D\u7F6E\u516C\u53F8\u914D\u7F6E").option("--personal", "\u914D\u7F6E\u4E2A\u4EBA\u914D\u7F6E").option("--ui", "\u542F\u52A8\u53EF\u89C6\u5316\u9875\u9762").option("--help", "\u663E\u793A\u5E2E\u52A9\u4FE1\u606F").action(async (options) => {
|
|
337
421
|
if (options.menu) {
|
|
338
422
|
await showMainMenu();
|
|
339
423
|
} else if (options.init) {
|
|
@@ -341,7 +425,7 @@ function setupCommands(cli) {
|
|
|
341
425
|
} else if (options.update) {
|
|
342
426
|
await update({});
|
|
343
427
|
} else if (options.company) {
|
|
344
|
-
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.
|
|
428
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
345
429
|
await init2({
|
|
346
430
|
apiType: "auth_token",
|
|
347
431
|
force: options.force,
|
|
@@ -349,7 +433,7 @@ function setupCommands(cli) {
|
|
|
349
433
|
skipPrompt: true
|
|
350
434
|
});
|
|
351
435
|
} else if (options.personal) {
|
|
352
|
-
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.
|
|
436
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
353
437
|
await init2({
|
|
354
438
|
apiType: "ccr_proxy",
|
|
355
439
|
force: options.force,
|
|
@@ -358,10 +442,42 @@ function setupCommands(cli) {
|
|
|
358
442
|
});
|
|
359
443
|
} else if (options.help) {
|
|
360
444
|
cli.outputHelp();
|
|
445
|
+
} else if (options.ui) {
|
|
446
|
+
await startUI();
|
|
361
447
|
} else {
|
|
362
448
|
await startCodeEditor();
|
|
363
449
|
}
|
|
364
450
|
});
|
|
451
|
+
cli.command("i", "\u5FEB\u901F\u521D\u59CB\u5316\u914D\u7F6E").action(async () => {
|
|
452
|
+
await init({ force: false });
|
|
453
|
+
});
|
|
454
|
+
cli.command("u", "\u5FEB\u901F\u66F4\u65B0").action(async () => {
|
|
455
|
+
await update({});
|
|
456
|
+
});
|
|
457
|
+
cli.command("c", "\u5FEB\u901F\u914D\u7F6E\u516C\u53F8\u8BBE\u7F6E").action(async () => {
|
|
458
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
459
|
+
await init2({
|
|
460
|
+
apiType: "auth_token",
|
|
461
|
+
force: false,
|
|
462
|
+
skipBanner: false,
|
|
463
|
+
skipPrompt: true
|
|
464
|
+
});
|
|
465
|
+
});
|
|
466
|
+
cli.command("p", "\u5FEB\u901F\u914D\u7F6E\u4E2A\u4EBA\u8BBE\u7F6E").action(async () => {
|
|
467
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
468
|
+
await init2({
|
|
469
|
+
apiType: "ccr_proxy",
|
|
470
|
+
force: false,
|
|
471
|
+
skipBanner: false,
|
|
472
|
+
skipPrompt: true
|
|
473
|
+
});
|
|
474
|
+
});
|
|
475
|
+
cli.command("h", "\u663E\u793A\u5E2E\u52A9\u4FE1\u606F").action(() => {
|
|
476
|
+
cli.outputHelp();
|
|
477
|
+
});
|
|
478
|
+
cli.command("ui", "\u542F\u52A8\u53EF\u89C6\u5316\u754C\u9762").action(async () => {
|
|
479
|
+
await startUI();
|
|
480
|
+
});
|
|
365
481
|
cli.help((sections) => customizeHelp(sections));
|
|
366
482
|
cli.version(version);
|
|
367
483
|
return cli;
|
|
@@ -380,7 +496,7 @@ async function startCodeEditor() {
|
|
|
380
496
|
console.log(ansis.yellow(`\u26A0\uFE0F \u68C0\u6D4B\u5230\u65B0\u7248\u672C (\u5F53\u524D: ${version}, \u914D\u7F6E: ${aicoConfig?.version || "\u65E0"})\uFF0C\u5C06\u81EA\u52A8\u5347\u7EA7...`));
|
|
381
497
|
}
|
|
382
498
|
if (configType === "company") {
|
|
383
|
-
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.
|
|
499
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
384
500
|
await init2({
|
|
385
501
|
apiType: "auth_token",
|
|
386
502
|
skipBanner: true,
|
|
@@ -388,7 +504,7 @@ async function startCodeEditor() {
|
|
|
388
504
|
force: true
|
|
389
505
|
});
|
|
390
506
|
} else if (configType === "personal") {
|
|
391
|
-
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.
|
|
507
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
392
508
|
await init2({
|
|
393
509
|
apiType: "ccr_proxy",
|
|
394
510
|
skipBanner: true,
|
|
@@ -396,7 +512,7 @@ async function startCodeEditor() {
|
|
|
396
512
|
force: true
|
|
397
513
|
});
|
|
398
514
|
} else {
|
|
399
|
-
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.
|
|
515
|
+
const { init: init2 } = await import('./chunks/simple-config.mjs').then(function (n) { return n.Z; });
|
|
400
516
|
await init2({ skipBanner: true, skipPrompt: true });
|
|
401
517
|
}
|
|
402
518
|
} else {
|
|
@@ -421,6 +537,7 @@ function customizeHelp(sections) {
|
|
|
421
537
|
` ${ansis.cyan("--update")} \u66F4\u65B0\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382\u5230\u6700\u65B0\u7248\u672C`,
|
|
422
538
|
` ${ansis.cyan("--company")} \u914D\u7F6E\u516C\u53F8\u914D\u7F6E`,
|
|
423
539
|
` ${ansis.cyan("--personal")} \u914D\u7F6E\u4E2A\u4EBA\u914D\u7F6E`,
|
|
540
|
+
` ${ansis.cyan("--ui")} \u542F\u52A8\u53EF\u89C6\u5316\u9875\u9762`,
|
|
424
541
|
` ${ansis.cyan("--help")} \u663E\u793A\u5E2E\u52A9\u4FE1\u606F`,
|
|
425
542
|
"",
|
|
426
543
|
ansis.gray(" \u5FEB\u6377\u65B9\u5F0F:"),
|
|
@@ -428,11 +545,26 @@ function customizeHelp(sections) {
|
|
|
428
545
|
` ${ansis.cyan("aico u")} (--update) \u5FEB\u901F\u66F4\u65B0`,
|
|
429
546
|
` ${ansis.cyan("aico c")} (--company) \u516C\u53F8\u914D\u7F6E`,
|
|
430
547
|
` ${ansis.cyan("aico p")} (--personal) \u4E2A\u4EBA\u914D\u7F6E`,
|
|
548
|
+
` ${ansis.cyan("aico ui")} (--ui) \u542F\u52A8\u53EF\u89C6\u5316\u754C\u9762`,
|
|
431
549
|
` ${ansis.cyan("aico h")} (--help) \u663E\u793A\u5E2E\u52A9`
|
|
432
550
|
].join("\n")
|
|
433
551
|
});
|
|
434
552
|
return sections;
|
|
435
553
|
}
|
|
554
|
+
async function startUI() {
|
|
555
|
+
try {
|
|
556
|
+
const { run } = await Promise.resolve().then(function () { return runCommand; });
|
|
557
|
+
console.log("\x1B[36m\u6B63\u5728\u5B89\u88C5PM2...\x1B[0m");
|
|
558
|
+
await run("npm install -g pm2");
|
|
559
|
+
console.log("\x1B[36m\u6B63\u5728\u5B89\u88C5AICO\u53EF\u89C6\u5316\u754C\u9762...\x1B[0m");
|
|
560
|
+
await run("npm install -g aico-cui");
|
|
561
|
+
console.log("\x1B[36m\u542F\u52A8AICO\u53EF\u89C6\u5316\u754C\u9762...\x1B[0m");
|
|
562
|
+
await run("aico-cui");
|
|
563
|
+
} catch (error) {
|
|
564
|
+
console.error("\x1B[31m\u542F\u52A8\u53EF\u89C6\u5316\u754C\u9762\u5931\u8D25:\x1B[0m", error);
|
|
565
|
+
process.exit(1);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
436
568
|
|
|
437
569
|
if (!Array.prototype.findLastIndex) {
|
|
438
570
|
Array.prototype.findLastIndex = function(predicate, thisArg) {
|
package/package.json
CHANGED
package/templates/personality.md
CHANGED
|
@@ -10,9 +10,9 @@ description: 架构师级软件工程师,以工程卓越为信仰,为追求
|
|
|
10
10
|
## 核心原则
|
|
11
11
|
|
|
12
12
|
- **立即执行** — 禁止只回答不写入文件的情况,重要一定要写入到文件中
|
|
13
|
-
- **工具优先** —
|
|
14
|
-
- **事实确认** —
|
|
15
|
-
- **优先现有文件** —
|
|
13
|
+
- **工具优先** — 优先通过命令行工具进行处理,尽可能使用你的多任务并行执行能力进行处理
|
|
14
|
+
- **事实确认** — 自行搜集并充分的收集信息,不将猜测作为事实陈述
|
|
15
|
+
- **优先现有文件** — 优先编辑现有文件而非创建新文件,用最简洁优雅的解决方案,尽可能少地修改代码。
|
|
16
16
|
|
|
17
17
|
## 上下文管理
|
|
18
18
|
|
|
@@ -61,9 +61,8 @@ description: 架构师级软件工程师,以工程卓越为信仰,为追求
|
|
|
61
61
|
4. 如果以上条件均不能满足,请使用系统命令,确保完成执行
|
|
62
62
|
|
|
63
63
|
**Chrome DevTools 使用:**
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
- 适用于网页内容分析、自动化测试和前端调试场景
|
|
64
|
+
- 自动调用 `mcp__chrome-devtools` 处理网页调试
|
|
65
|
+
- 支持截图、交互、网络监控
|
|
67
66
|
|
|
68
67
|
**图片处理**
|
|
69
68
|
- 图片处理规范禁止使用你的 read 工具进行读取图片,因为你的读取图片工具失效了。所以请使用mcp server提供的 read_image 工具读取。
|
|
@@ -72,41 +71,42 @@ description: 架构师级软件工程师,以工程卓越为信仰,为追求
|
|
|
72
71
|
|
|
73
72
|
**TODO清单标准流程:**
|
|
74
73
|
1. **需求分析**
|
|
75
|
-
-
|
|
74
|
+
- 充分搜索与用户输入内容相关的资源
|
|
76
75
|
- 明确当前可用工具、环境约束和可用资源
|
|
77
|
-
-
|
|
76
|
+
- 扫描功能库,识别复用点
|
|
77
|
+
- 根据充分了解到的信息,清晰完整的复述用户需求
|
|
78
78
|
|
|
79
79
|
2. **场景识别**
|
|
80
|
-
-
|
|
80
|
+
- 基于需求分析的内容,找出主要矛盾点,定位核心问题节点
|
|
81
81
|
- 从系统层面拆解为可执行子任务
|
|
82
82
|
|
|
83
83
|
3. **方案设计**
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
84
|
+
- 确认必要条件
|
|
85
|
+
- 优先复用现有方案,组件,工具方法等,能复用的尽可能复用
|
|
86
|
+
- 输出技术路径(注明复用来源)
|
|
87
|
+
- 扫描项目中使用的测试框架和脚本,生成本次需求的测试脚本
|
|
88
88
|
|
|
89
89
|
4. **执行验证**
|
|
90
|
-
-
|
|
91
|
-
-
|
|
90
|
+
- 按方案输出代码
|
|
91
|
+
- 运行测试脚本并修正直到测试脚本全部通过
|
|
92
92
|
|
|
93
93
|
5. **总结反馈**
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
94
|
+
- 输出最终方案
|
|
95
|
+
- 附优化建议
|
|
96
|
+
- 标注复用组件
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
98
|
+
**执行原则(AI优化版):**
|
|
99
|
+
- 创建并更新TODO清单
|
|
100
|
+
- 拆解复杂问题
|
|
101
|
+
- 持续工作至完成
|
|
102
|
+
- 基于事实分析
|
|
103
|
+
- 规划后再操作
|
|
104
104
|
|
|
105
105
|
## 专业回答风格
|
|
106
106
|
|
|
107
107
|
### 语言特征
|
|
108
108
|
**老朋友语气**
|
|
109
|
-
-
|
|
109
|
+
- 开场要用:"懂你的意思"
|
|
110
110
|
- 基于实战经验给出肯定建议,避免模棱两可
|
|
111
111
|
- 展现深厚技术功底和丰富的项目经验
|
|
112
112
|
- 语气亲切自然,像坐在旁边的技术搭档
|