jinzd-ai-cli 0.4.47 → 0.4.49
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 +388 -388
- package/README.zh-CN.md +401 -401
- package/dist/{chunk-DISJMBZ6.js → chunk-2K5YVZJI.js} +2 -4
- package/dist/{chunk-PUMVM572.js → chunk-47CNWVOC.js} +47 -30
- package/dist/{chunk-J7OX5EP3.js → chunk-KVYVWJYK.js} +1 -1
- package/dist/{chunk-VW2RWYKJ.js → chunk-NFIYEIFJ.js} +2 -4
- package/dist/{hub-BB7XPZBK.js → hub-TNV3IFDX.js} +1 -1
- package/dist/index.js +37 -52
- package/dist/{run-tests-6JKIZOVZ.js → run-tests-2WQVGWIW.js} +1 -1
- package/dist/{run-tests-XEPKLO5H.js → run-tests-K6IYLG6T.js} +1 -1
- package/dist/{server-TQ4GDHKK.js → server-F3UVAUXJ.js} +4 -4
- package/dist/{task-orchestrator-G4UPAHG5.js → task-orchestrator-ITCC3NZL.js} +2 -2
- package/package.json +164 -164
|
@@ -6,7 +6,7 @@ import { platform } from "os";
|
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
|
|
8
8
|
// src/core/constants.ts
|
|
9
|
-
var VERSION = "0.4.
|
|
9
|
+
var VERSION = "0.4.49";
|
|
10
10
|
var APP_NAME = "ai-cli";
|
|
11
11
|
var CONFIG_DIR_NAME = ".aicli";
|
|
12
12
|
var CONFIG_FILE_NAME = "config.json";
|
|
@@ -81,9 +81,7 @@ var AGENTIC_BEHAVIOR_GUIDELINE = `# Important Behavioral Guidelines
|
|
|
81
81
|
|
|
82
82
|
**Respond appropriately to the user's intent \u2014 do NOT over-react**:
|
|
83
83
|
- For **greetings and casual chat** (e.g., "hello", "hi", "hey", "\u4F60\u597D", "what's up"): respond naturally with a friendly greeting. Do NOT use any tools. Do NOT explore directories, read files, or start any project work. Just chat.
|
|
84
|
-
- When the user asks you to "read", "understand", "review", "analyze", "examine", or "look at" files or a project, your task is only to **read and summarize**, then wait for the user's next instruction.
|
|
85
|
-
- **Be Efficient**: Minimize the number of tool calls. For "understanding a project", reading the README and a few key entry points or configuration files is usually sufficient. Do NOT recursively explore the entire file tree or read every single file unless explicitly asked to.
|
|
86
|
-
- **Stop Early**: Once you have gathered enough information to provide a meaningful answer or summary, STOP using tools and provide your response. Do not use up rounds just because they are available.
|
|
84
|
+
- When the user asks you to "read", "understand", "review", "analyze", "examine", or "look at" files or a project, your task is only to **read and summarize**, then wait for the user's next instruction. Do not automatically start executing tasks described in the project.
|
|
87
85
|
- Only begin using write/execute tools when the user **explicitly requests** an action (e.g., "generate", "create", "modify", "run", "start", etc.).
|
|
88
86
|
- Project context files (CLAUDE.md, AICLI.md) provide background information about the project. They are NOT instructions to start working. Only use them as reference when the user asks a project-related question or task.
|
|
89
87
|
- If you are unsure about the user's intent, use the ask_user tool to confirm with the user, rather than assuming and executing on your own.`;
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ProviderNotFoundError,
|
|
8
8
|
RateLimitError,
|
|
9
9
|
schemaToJsonSchema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KVYVWJYK.js";
|
|
11
11
|
import {
|
|
12
12
|
APP_NAME,
|
|
13
13
|
CONFIG_DIR_NAME,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
MCP_TOOL_PREFIX,
|
|
21
21
|
PLUGINS_DIR_NAME,
|
|
22
22
|
VERSION
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-NFIYEIFJ.js";
|
|
24
24
|
|
|
25
25
|
// src/config/config-manager.ts
|
|
26
26
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
@@ -1546,23 +1546,33 @@ var ZhipuProvider = class extends OpenAICompatibleProvider {
|
|
|
1546
1546
|
// src/tools/hallucination.ts
|
|
1547
1547
|
var HALLUCINATION_PATTERNS = [
|
|
1548
1548
|
/文件路径[::]\s*`?[^\s`]+\.\w{1,5}/,
|
|
1549
|
-
// 文件路径: `path/to/file.ext
|
|
1550
|
-
|
|
1549
|
+
// 文件路径: `path/to/file.ext`(要求文件扩展名)
|
|
1550
|
+
/已生成[::!!]/,
|
|
1551
1551
|
// 已生成完成!
|
|
1552
|
-
|
|
1553
|
-
// 已保存到 `path
|
|
1552
|
+
/已保存到?\s*[`'"]/,
|
|
1553
|
+
// 已保存到 `path`(要求后跟路径引号)
|
|
1554
|
+
/已写入[::!!]/,
|
|
1555
|
+
// 已写入!
|
|
1556
|
+
/已创建[::!!]/,
|
|
1557
|
+
// 已创建!
|
|
1554
1558
|
/File\s+(?:written|saved|created)\s+(?:to|as|at)/i,
|
|
1559
|
+
// File written to / saved as(要求介词)
|
|
1555
1560
|
/生成完成[!!]/,
|
|
1561
|
+
// 生成完成!
|
|
1556
1562
|
/✅\s*(?:文件|已[生保写创]|第)\S*\.\w{1,5}/,
|
|
1557
|
-
// ✅ 文件已保存 path.ext
|
|
1558
|
-
|
|
1559
|
-
//
|
|
1560
|
-
|
|
1561
|
-
//
|
|
1562
|
-
|
|
1563
|
-
//
|
|
1563
|
+
// ✅ 文件已保存 path.ext(要求文件扩展名)
|
|
1564
|
+
/文件已[成功]?创建/,
|
|
1565
|
+
// 文件已成功创建 / 文件已创建
|
|
1566
|
+
/教案已[成功]?[生创保写]/,
|
|
1567
|
+
// 教案已成功生成 / 教案已保存
|
|
1568
|
+
/已成功[保写创生]入?[::!!\s`'"]/,
|
|
1569
|
+
// 已成功保存 / 已成功写入 / 已成功创建
|
|
1570
|
+
/保存[到至]了?\s*[`'"]/,
|
|
1571
|
+
// 保存到了 `path` / 保存至 'path'
|
|
1564
1572
|
/内容如下[::]/,
|
|
1573
|
+
// 内容如下:(后跟大段文件内容)
|
|
1565
1574
|
/以下是.*(?:教案|文件|内容)[::]/
|
|
1575
|
+
// 以下是xx教案内容:(Kimi 常见模式)
|
|
1566
1576
|
];
|
|
1567
1577
|
function detectsHallucinatedFileOp(content) {
|
|
1568
1578
|
return HALLUCINATION_PATTERNS.some((pattern) => pattern.test(content));
|
|
@@ -1613,29 +1623,36 @@ function buildWriteRoundReminder(writtenCount) {
|
|
|
1613
1623
|
return `
|
|
1614
1624
|
|
|
1615
1625
|
[Write Progress Reminder]
|
|
1616
|
-
You have successfully called write_file ${writtenCount} time(s) so far in this turn. If there are more files
|
|
1626
|
+
You have successfully called write_file ${writtenCount} time(s) so far in this turn. If there are more files to write, call write_file NOW for the next file. Do NOT produce a text summary until ALL files have been written via tool calls.`;
|
|
1617
1627
|
}
|
|
1618
|
-
var HALLUCINATION_CORRECTION_MESSAGE =
|
|
1628
|
+
var HALLUCINATION_CORRECTION_MESSAGE = "You did NOT actually call the write_file tool \u2014 the file was NOT created! Please immediately use the write_file tool via the function calling API to perform the actual file write. Do NOT describe file content in text \u2014 you MUST invoke write_file through the tool_calls mechanism.";
|
|
1619
1629
|
function extractClaimedFilePaths(content) {
|
|
1620
1630
|
const paths = /* @__PURE__ */ new Set();
|
|
1621
1631
|
const add = (p) => {
|
|
1622
1632
|
const trimmed = p.trim().replace(/[,,。、;;::]+$/, "");
|
|
1623
|
-
if (trimmed && /\.\w{1,6}$/.test(trimmed)
|
|
1624
|
-
paths.add(trimmed);
|
|
1625
|
-
}
|
|
1633
|
+
if (trimmed && /\.\w{1,6}$/.test(trimmed)) paths.add(trimmed);
|
|
1626
1634
|
};
|
|
1627
|
-
const lines = content.split("\n").filter((line) => {
|
|
1628
|
-
const skipKeywords = ["\u793A\u4F8B", "\u4F8B\u5982", "\u6A21\u677F", "\u89C4\u8303", "example", "template", "instance", "spec"];
|
|
1629
|
-
return !skipKeywords.some((k) => line.toLowerCase().includes(k));
|
|
1630
|
-
});
|
|
1631
|
-
const filteredContent = lines.join("\n");
|
|
1632
1635
|
let m;
|
|
1633
|
-
const
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1636
|
+
const actionLineRe = /(?:已[生保写创]|saved|written|created|完成.*(?:写入|保存|创建|生成)|输出|file\s+(?:saved|written|created))/i;
|
|
1637
|
+
const backtickRe = /`([^`\n]+?\.\w{1,6})`/g;
|
|
1638
|
+
while ((m = backtickRe.exec(content)) !== null) {
|
|
1639
|
+
let pos = m.index;
|
|
1640
|
+
let linesBack = 0;
|
|
1641
|
+
while (linesBack < 9 && pos > 0) {
|
|
1642
|
+
pos--;
|
|
1643
|
+
if (content[pos] === "\n") linesBack++;
|
|
1644
|
+
}
|
|
1645
|
+
const windowStart = pos === 0 ? 0 : pos + 1;
|
|
1646
|
+
const lineEndIdx = content.indexOf("\n", m.index + m[0].length);
|
|
1647
|
+
const window = content.slice(windowStart, lineEndIdx === -1 ? void 0 : lineEndIdx);
|
|
1648
|
+
if (actionLineRe.test(window)) add(m[1]);
|
|
1649
|
+
}
|
|
1650
|
+
const zhRe = /(?:已保存(?:到)?|已写入(?:到)?|已创建|已生成|文件路径[::]|保存为|写入到)\s*[`'”””]?([^\s`'”””,,。\n]+?\.\w{1,6})/g;
|
|
1651
|
+
while ((m = zhRe.exec(content)) !== null) add(m[1]);
|
|
1652
|
+
const enRe = /(?:saved|written|created)\s+(?:to|as|at)\s+[`'”]?([^\s`'”\n,]+?\.\w{1,6})/gi;
|
|
1653
|
+
while ((m = enRe.exec(content)) !== null) add(m[1]);
|
|
1654
|
+
const checkRe = /✅[^\n`]*?[`'”]?([^\s`'”\n,,。]+?\.\w{1,6})/g;
|
|
1655
|
+
while ((m = checkRe.exec(content)) !== null) add(m[1]);
|
|
1639
1656
|
return Array.from(paths);
|
|
1640
1657
|
}
|
|
1641
1658
|
function extractWrittenFilePaths(extraMessages) {
|
|
@@ -1708,7 +1725,7 @@ function findPhantomClaims(content, extraMessages) {
|
|
|
1708
1725
|
}
|
|
1709
1726
|
function buildPhantomCorrectionMessage(phantoms) {
|
|
1710
1727
|
const list = phantoms.map((p) => ` - ${p}`).join("\n");
|
|
1711
|
-
return "You
|
|
1728
|
+
return "You claimed to have written the following file(s), but no matching write_file tool call was actually made in this turn:\n" + list + '\n\nEach of these files does NOT exist on disk. You MUST now invoke write_file (via the function calling API) for every missing file listed above. Do NOT output another "completion summary" until the tool calls have actually been made.';
|
|
1712
1729
|
}
|
|
1713
1730
|
|
|
1714
1731
|
// src/providers/kimi.ts
|
|
@@ -8,7 +8,7 @@ import { platform } from "os";
|
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
|
|
10
10
|
// src/core/constants.ts
|
|
11
|
-
var VERSION = "0.4.
|
|
11
|
+
var VERSION = "0.4.49";
|
|
12
12
|
var APP_NAME = "ai-cli";
|
|
13
13
|
var CONFIG_DIR_NAME = ".aicli";
|
|
14
14
|
var CONFIG_FILE_NAME = "config.json";
|
|
@@ -84,9 +84,7 @@ var AGENTIC_BEHAVIOR_GUIDELINE = `# Important Behavioral Guidelines
|
|
|
84
84
|
|
|
85
85
|
**Respond appropriately to the user's intent \u2014 do NOT over-react**:
|
|
86
86
|
- For **greetings and casual chat** (e.g., "hello", "hi", "hey", "\u4F60\u597D", "what's up"): respond naturally with a friendly greeting. Do NOT use any tools. Do NOT explore directories, read files, or start any project work. Just chat.
|
|
87
|
-
- When the user asks you to "read", "understand", "review", "analyze", "examine", or "look at" files or a project, your task is only to **read and summarize**, then wait for the user's next instruction.
|
|
88
|
-
- **Be Efficient**: Minimize the number of tool calls. For "understanding a project", reading the README and a few key entry points or configuration files is usually sufficient. Do NOT recursively explore the entire file tree or read every single file unless explicitly asked to.
|
|
89
|
-
- **Stop Early**: Once you have gathered enough information to provide a meaningful answer or summary, STOP using tools and provide your response. Do not use up rounds just because they are available.
|
|
87
|
+
- When the user asks you to "read", "understand", "review", "analyze", "examine", or "look at" files or a project, your task is only to **read and summarize**, then wait for the user's next instruction. Do not automatically start executing tasks described in the project.
|
|
90
88
|
- Only begin using write/execute tools when the user **explicitly requests** an action (e.g., "generate", "create", "modify", "run", "start", etc.).
|
|
91
89
|
- Project context files (CLAUDE.md, AICLI.md) provide background information about the project. They are NOT instructions to start working. Only use them as reference when the user asks a project-related question or task.
|
|
92
90
|
- If you are unsure about the user's intent, use the ask_user tool to confirm with the user, rather than assuming and executing on your own.`;
|
|
@@ -385,7 +385,7 @@ ${content}`);
|
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
387
|
async function runTaskMode(config, providers, configManager, topic) {
|
|
388
|
-
const { TaskOrchestrator } = await import("./task-orchestrator-
|
|
388
|
+
const { TaskOrchestrator } = await import("./task-orchestrator-ITCC3NZL.js");
|
|
389
389
|
const orchestrator = new TaskOrchestrator(config, providers, configManager);
|
|
390
390
|
let interrupted = false;
|
|
391
391
|
const onSigint = () => {
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
saveDevState,
|
|
25
25
|
sessionHasMeaningfulContent,
|
|
26
26
|
setupProxy
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-47CNWVOC.js";
|
|
28
28
|
import {
|
|
29
29
|
ToolExecutor,
|
|
30
30
|
ToolRegistry,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
spawnAgentContext,
|
|
38
38
|
theme,
|
|
39
39
|
undoStack
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-KVYVWJYK.js";
|
|
41
41
|
import {
|
|
42
42
|
fileCheckpoints
|
|
43
43
|
} from "./chunk-4BKXL7SM.js";
|
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
SKILLS_DIR_NAME,
|
|
62
62
|
VERSION,
|
|
63
63
|
buildUserIdentityPrompt
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-NFIYEIFJ.js";
|
|
65
65
|
|
|
66
66
|
// src/index.ts
|
|
67
67
|
import { program } from "commander";
|
|
@@ -2099,7 +2099,7 @@ ${hint}` : "")
|
|
|
2099
2099
|
usage: "/test [command|filter]",
|
|
2100
2100
|
async execute(args, ctx) {
|
|
2101
2101
|
try {
|
|
2102
|
-
const { executeTests } = await import("./run-tests-
|
|
2102
|
+
const { executeTests } = await import("./run-tests-K6IYLG6T.js");
|
|
2103
2103
|
const argStr = args.join(" ").trim();
|
|
2104
2104
|
let testArgs = {};
|
|
2105
2105
|
if (argStr) {
|
|
@@ -4190,58 +4190,45 @@ Session '${this.resumeSessionId}' not found.
|
|
|
4190
4190
|
}
|
|
4191
4191
|
async handleChat(userInput) {
|
|
4192
4192
|
const session = this.sessions.current;
|
|
4193
|
-
const
|
|
4194
|
-
const
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
const isWriteIntent = writeIntentKeywords.some((k) => normalizedInput.includes(k));
|
|
4198
|
-
const originalBlockedTools = this.blockedTools;
|
|
4199
|
-
if (isReadIntent && !isWriteIntent) {
|
|
4200
|
-
const readOnlyBlocks = ["write_file", "edit_file", "bash", "run_interactive", "task_create", "task_stop", "git_commit"];
|
|
4201
|
-
const newBlocked = new Set(originalBlockedTools);
|
|
4202
|
-
for (const t of readOnlyBlocks) newBlocked.add(t);
|
|
4203
|
-
this.blockedTools = newBlocked;
|
|
4204
|
-
process.stdout.write(theme.dim(" \u{1F6E1}\uFE0F Read-only intent detected: restricting write tools for this turn.\n"));
|
|
4205
|
-
}
|
|
4206
|
-
const t0 = Date.now();
|
|
4207
|
-
try {
|
|
4208
|
-
const { parts, hasImage, refs } = parseAtReferences(userInput, process.cwd());
|
|
4209
|
-
for (const ref of refs) {
|
|
4210
|
-
if (ref.type === "notfound") {
|
|
4211
|
-
process.stdout.write(theme.warning(` \u26A0 File not found: ${ref.path}
|
|
4193
|
+
const { parts, hasImage, refs } = parseAtReferences(userInput, process.cwd());
|
|
4194
|
+
for (const ref of refs) {
|
|
4195
|
+
if (ref.type === "notfound") {
|
|
4196
|
+
process.stdout.write(theme.warning(` \u26A0 File not found: ${ref.path}
|
|
4212
4197
|
`));
|
|
4213
|
-
|
|
4214
|
-
|
|
4198
|
+
} else if (ref.type === "toolarge") {
|
|
4199
|
+
process.stdout.write(theme.warning(` \u26A0 Image too large (> 10 MB): ${ref.path}
|
|
4215
4200
|
`));
|
|
4216
|
-
|
|
4217
|
-
|
|
4201
|
+
} else if (ref.type === "image") {
|
|
4202
|
+
process.stdout.write(theme.dim(` \u{1F4CE} Image: ${ref.path}
|
|
4218
4203
|
`));
|
|
4219
|
-
|
|
4220
|
-
|
|
4204
|
+
} else {
|
|
4205
|
+
process.stdout.write(theme.dim(` \u{1F4C4} File: ${ref.path}
|
|
4221
4206
|
`));
|
|
4222
|
-
}
|
|
4223
4207
|
}
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
theme.warning(` \u2716 Vision not supported \u2013 ${visionHint}
|
|
4230
|
-
`)
|
|
4231
|
-
);
|
|
4232
|
-
return;
|
|
4233
|
-
}
|
|
4208
|
+
}
|
|
4209
|
+
const messageContent = parts.length > 0 ? parts.length === 1 && parts[0].type === "text" ? parts[0].text : parts : userInput;
|
|
4210
|
+
if (hasImage) {
|
|
4211
|
+
const visionHint = this.getVisionModelHint();
|
|
4212
|
+
if (visionHint) {
|
|
4234
4213
|
process.stdout.write(
|
|
4235
|
-
theme.
|
|
4214
|
+
theme.warning(` \u2716 Vision not supported \u2013 ${visionHint}
|
|
4236
4215
|
`)
|
|
4237
4216
|
);
|
|
4217
|
+
return;
|
|
4238
4218
|
}
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4219
|
+
process.stdout.write(
|
|
4220
|
+
theme.dim(` \u{1F5BC} Vision request \u2013 sending image to ${this.currentProvider}
|
|
4221
|
+
`)
|
|
4222
|
+
);
|
|
4223
|
+
}
|
|
4224
|
+
session.addMessage({
|
|
4225
|
+
role: "user",
|
|
4226
|
+
content: messageContent,
|
|
4227
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
4228
|
+
});
|
|
4229
|
+
this.events.emit("message.before", { input: userInput });
|
|
4230
|
+
const t0 = Date.now();
|
|
4231
|
+
try {
|
|
4245
4232
|
const provider = this.providers.get(this.currentProvider);
|
|
4246
4233
|
const supportsTools = "chatWithTools" in provider;
|
|
4247
4234
|
if (supportsTools) {
|
|
@@ -4262,8 +4249,6 @@ Session '${this.resumeSessionId}' not found.
|
|
|
4262
4249
|
}
|
|
4263
4250
|
} catch (err) {
|
|
4264
4251
|
this.renderer.renderError(err);
|
|
4265
|
-
} finally {
|
|
4266
|
-
this.blockedTools = originalBlockedTools;
|
|
4267
4252
|
}
|
|
4268
4253
|
}
|
|
4269
4254
|
/**
|
|
@@ -4899,8 +4884,8 @@ You have a maximum of ${MAX_TOOL_ROUNDS} tool call rounds for this task. Plan ef
|
|
|
4899
4884
|
if ("content" in result) {
|
|
4900
4885
|
const hasWriteTools = toolDefs.some((t) => t.name === "write_file" || t.name === "edit_file");
|
|
4901
4886
|
const alreadyWrote = hadPreviousWriteToolCalls(extraMessages);
|
|
4902
|
-
const phantomPaths = !this.planMode && hasWriteTools && result.content ? findPhantomClaims(result.content, extraMessages) : [];
|
|
4903
4887
|
const coarseHallucination = !this.planMode && hasWriteTools && !alreadyWrote && !!result.content && detectsHallucinatedFileOp(result.content);
|
|
4888
|
+
const phantomPaths = (coarseHallucination || alreadyWrote) && !this.planMode && hasWriteTools && result.content ? findPhantomClaims(result.content, extraMessages) : [];
|
|
4904
4889
|
if ((phantomPaths.length > 0 || coarseHallucination) && round < MAX_TOOL_ROUNDS - 1) {
|
|
4905
4890
|
const providerName = this.currentProvider;
|
|
4906
4891
|
const detail = phantomPaths.length > 0 ? ` phantom files: ${phantomPaths.join(", ")}` : "";
|
|
@@ -5484,7 +5469,7 @@ program.command("web").description("Start Web UI server with browser-based chat
|
|
|
5484
5469
|
console.error("Error: Invalid port number. Must be between 1 and 65535.");
|
|
5485
5470
|
process.exit(1);
|
|
5486
5471
|
}
|
|
5487
|
-
const { startWebServer } = await import("./server-
|
|
5472
|
+
const { startWebServer } = await import("./server-F3UVAUXJ.js");
|
|
5488
5473
|
await startWebServer({ port, host: options.host });
|
|
5489
5474
|
});
|
|
5490
5475
|
program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
|
|
@@ -5717,7 +5702,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
|
|
|
5717
5702
|
}),
|
|
5718
5703
|
config.get("customProviders")
|
|
5719
5704
|
);
|
|
5720
|
-
const { startHub } = await import("./hub-
|
|
5705
|
+
const { startHub } = await import("./hub-TNV3IFDX.js");
|
|
5721
5706
|
await startHub(
|
|
5722
5707
|
{
|
|
5723
5708
|
topic: topic ?? "",
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
hadPreviousWriteToolCalls,
|
|
16
16
|
loadDevState,
|
|
17
17
|
setupProxy
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-47CNWVOC.js";
|
|
19
19
|
import {
|
|
20
20
|
AuthManager
|
|
21
21
|
} from "./chunk-BYNY5JPB.js";
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
spawnAgentContext,
|
|
34
34
|
truncateOutput,
|
|
35
35
|
undoStack
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-KVYVWJYK.js";
|
|
37
37
|
import "./chunk-4BKXL7SM.js";
|
|
38
38
|
import {
|
|
39
39
|
AGENTIC_BEHAVIOR_GUIDELINE,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
SKILLS_DIR_NAME,
|
|
53
53
|
VERSION,
|
|
54
54
|
buildUserIdentityPrompt
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-NFIYEIFJ.js";
|
|
56
56
|
|
|
57
57
|
// src/web/server.ts
|
|
58
58
|
import express from "express";
|
|
@@ -1606,7 +1606,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
|
|
|
1606
1606
|
case "test": {
|
|
1607
1607
|
this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
|
|
1608
1608
|
try {
|
|
1609
|
-
const { executeTests } = await import("./run-tests-
|
|
1609
|
+
const { executeTests } = await import("./run-tests-K6IYLG6T.js");
|
|
1610
1610
|
const argStr = args.join(" ").trim();
|
|
1611
1611
|
let testArgs = {};
|
|
1612
1612
|
if (argStr) {
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
getDangerLevel,
|
|
5
5
|
googleSearchContext,
|
|
6
6
|
truncateOutput
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KVYVWJYK.js";
|
|
8
8
|
import "./chunk-4BKXL7SM.js";
|
|
9
9
|
import {
|
|
10
10
|
SUBAGENT_ALLOWED_TOOLS
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NFIYEIFJ.js";
|
|
12
12
|
|
|
13
13
|
// src/hub/task-orchestrator.ts
|
|
14
14
|
import { createInterface } from "readline";
|