jinzd-ai-cli 0.2.21 → 0.2.23
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/{chunk-YULS53ZT.js → chunk-M6BBSIGR.js} +1 -1
- package/dist/{chunk-TVSPBTDQ.js → chunk-QZR2SIUB.js} +1 -1
- package/dist/index.js +49 -50
- package/dist/{run-tests-WUWDJM5S.js → run-tests-A74MA54Z.js} +1 -1
- package/dist/{server-FVVKVJBX.js → server-LMXSNPOQ.js} +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
theme,
|
|
37
37
|
truncateOutput,
|
|
38
38
|
undoStack
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-QZR2SIUB.js";
|
|
40
40
|
import {
|
|
41
41
|
AGENTIC_BEHAVIOR_GUIDELINE,
|
|
42
42
|
AUTHOR,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
REPO_URL,
|
|
57
57
|
SKILLS_DIR_NAME,
|
|
58
58
|
VERSION
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-M6BBSIGR.js";
|
|
60
60
|
|
|
61
61
|
// src/index.ts
|
|
62
62
|
import { program } from "commander";
|
|
@@ -1905,7 +1905,7 @@ ${hint}` : "")
|
|
|
1905
1905
|
description: "Run project tests and show structured report",
|
|
1906
1906
|
usage: "/test [command|filter]",
|
|
1907
1907
|
async execute(args, _ctx) {
|
|
1908
|
-
const { executeTests } = await import("./run-tests-
|
|
1908
|
+
const { executeTests } = await import("./run-tests-A74MA54Z.js");
|
|
1909
1909
|
const argStr = args.join(" ").trim();
|
|
1910
1910
|
let testArgs = {};
|
|
1911
1911
|
if (argStr) {
|
|
@@ -3394,12 +3394,14 @@ var Repl = class {
|
|
|
3394
3394
|
_escHandler = null;
|
|
3395
3395
|
/** User interjection: completed line queued for injection into agentic loop */
|
|
3396
3396
|
_userInterjection = null;
|
|
3397
|
-
/** User interjection:
|
|
3398
|
-
|
|
3399
|
-
/**
|
|
3400
|
-
|
|
3401
|
-
/**
|
|
3402
|
-
|
|
3397
|
+
/** User interjection: typing-trigger stdin handler (detects first printable char) */
|
|
3398
|
+
_interjectionTrigger = null;
|
|
3399
|
+
/** Whether interjection system is active (agentic loop) */
|
|
3400
|
+
_interjectionActive = false;
|
|
3401
|
+
/** Whether user is currently in interjection typing mode (rl.question active) */
|
|
3402
|
+
_interjectionTyping = false;
|
|
3403
|
+
/** Reference to the current spinner, so interjection can pause/resume it */
|
|
3404
|
+
_currentSpinner = null;
|
|
3403
3405
|
/** Multi-line input buffer: accumulates lines ending with \ */
|
|
3404
3406
|
_multilineBuf = [];
|
|
3405
3407
|
/** 运行时动态添加的额外上下文目录(/add-dir 命令) */
|
|
@@ -4534,7 +4536,7 @@ Session '${this.resumeSessionId}' not found.
|
|
|
4534
4536
|
process.stdin.removeListener("data", this._escHandler);
|
|
4535
4537
|
this._escHandler = null;
|
|
4536
4538
|
}
|
|
4537
|
-
if (!this.
|
|
4539
|
+
if (!this._interjectionActive) {
|
|
4538
4540
|
process.stdin.pause();
|
|
4539
4541
|
}
|
|
4540
4542
|
this.streamAbortController = null;
|
|
@@ -4546,54 +4548,50 @@ Session '${this.resumeSessionId}' not found.
|
|
|
4546
4548
|
*/
|
|
4547
4549
|
setupInterjectionListener() {
|
|
4548
4550
|
this._userInterjection = null;
|
|
4549
|
-
this.
|
|
4550
|
-
|
|
4551
|
+
this._interjectionActive = true;
|
|
4552
|
+
this._interjectionTyping = false;
|
|
4553
|
+
const trigger = (data) => {
|
|
4551
4554
|
if (this.toolExecutor.confirming || askUserContext.prompting) return;
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
|
|
4557
|
-
|
|
4558
|
-
|
|
4559
|
-
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4555
|
+
if (this._interjectionTyping) return;
|
|
4556
|
+
const byte = data[0];
|
|
4557
|
+
if (byte < 32 || byte === 127 || byte === 27) return;
|
|
4558
|
+
this._interjectionTyping = true;
|
|
4559
|
+
if (this._currentSpinner) this._currentSpinner.stop();
|
|
4560
|
+
const rlAny = this.rl;
|
|
4561
|
+
const savedOutput = rlAny.output;
|
|
4562
|
+
rlAny.output = process.stdout;
|
|
4563
|
+
process.stdout.write(theme.dim("\n \u25B8 "));
|
|
4564
|
+
const firstChar = data.toString("utf-8").replace(/[\x00-\x1f\x7f]/g, "");
|
|
4565
|
+
if (firstChar) process.stdout.write(firstChar);
|
|
4566
|
+
this.rl.question("", (answer) => {
|
|
4567
|
+
const fullLine = (firstChar + answer).trim();
|
|
4568
|
+
rlAny.output = savedOutput;
|
|
4569
|
+
this._interjectionTyping = false;
|
|
4570
|
+
if (fullLine.length === 0) {
|
|
4571
|
+
} else if (fullLine.startsWith("/")) {
|
|
4572
|
+
this.toolExecutor.pendingSlashCommand = fullLine;
|
|
4573
|
+
process.stdout.write(theme.dim(` (command "${fullLine}" queued)
|
|
4564
4574
|
`));
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
}
|
|
4568
|
-
}
|
|
4569
|
-
} else if (code === 127 || code === 8) {
|
|
4570
|
-
if (this._interjectionBuf.length > 0) {
|
|
4571
|
-
const chars = Array.from(this._interjectionBuf);
|
|
4572
|
-
const removed = chars.pop();
|
|
4573
|
-
this._interjectionBuf = chars.join("");
|
|
4574
|
-
const width = removed.codePointAt(0) > 255 ? 2 : 1;
|
|
4575
|
-
for (let w = 0; w < width; w++) process.stdout.write("\b \b");
|
|
4576
|
-
}
|
|
4577
|
-
} else if (code === 3 || code === 27) {
|
|
4578
|
-
} else if (code >= 32) {
|
|
4579
|
-
this._interjectionBuf += ch;
|
|
4580
|
-
process.stdout.write(ch);
|
|
4575
|
+
} else {
|
|
4576
|
+
this._userInterjection = fullLine;
|
|
4581
4577
|
}
|
|
4582
|
-
|
|
4578
|
+
if (this._currentSpinner) this._currentSpinner.start();
|
|
4579
|
+
});
|
|
4583
4580
|
};
|
|
4584
|
-
this.
|
|
4585
|
-
process.stdin.
|
|
4581
|
+
this._interjectionTrigger = trigger;
|
|
4582
|
+
process.stdin.prependListener("data", trigger);
|
|
4586
4583
|
process.stdin.resume();
|
|
4587
4584
|
}
|
|
4588
4585
|
/**
|
|
4589
4586
|
* Remove the interjection listener, clean up state.
|
|
4590
4587
|
*/
|
|
4591
4588
|
teardownInterjectionListener() {
|
|
4592
|
-
if (this.
|
|
4593
|
-
process.stdin.removeListener("data", this.
|
|
4594
|
-
this.
|
|
4589
|
+
if (this._interjectionTrigger) {
|
|
4590
|
+
process.stdin.removeListener("data", this._interjectionTrigger);
|
|
4591
|
+
this._interjectionTrigger = null;
|
|
4595
4592
|
}
|
|
4596
|
-
this.
|
|
4593
|
+
this._interjectionActive = false;
|
|
4594
|
+
this._interjectionTyping = false;
|
|
4597
4595
|
}
|
|
4598
4596
|
/**
|
|
4599
4597
|
* 注册 Ctrl+V 剪贴板图片粘贴快捷键。
|
|
@@ -4848,6 +4846,7 @@ You have a maximum of ${MAX_TOOL_ROUNDS} tool call rounds for this task. Plan ef
|
|
|
4848
4846
|
const modelParams = this.getModelParams();
|
|
4849
4847
|
const useStreaming = this.config.get("ui").streaming;
|
|
4850
4848
|
const spinner = this.renderer.showSpinner("Thinking...");
|
|
4849
|
+
this._currentSpinner = spinner;
|
|
4851
4850
|
const roundUsage = { inputTokens: 0, outputTokens: 0 };
|
|
4852
4851
|
const supportsStreamingTools = useStreaming && typeof provider.chatWithToolsStream === "function";
|
|
4853
4852
|
let consecutiveFreeRounds = 0;
|
|
@@ -5099,8 +5098,7 @@ You have a maximum of ${MAX_TOOL_ROUNDS} tool call rounds for this task. Plan ef
|
|
|
5099
5098
|
}
|
|
5100
5099
|
}
|
|
5101
5100
|
}
|
|
5102
|
-
if (this.
|
|
5103
|
-
this._confirmEndTime = Date.now();
|
|
5101
|
+
if (this._interjectionActive) {
|
|
5104
5102
|
process.stdin.resume();
|
|
5105
5103
|
}
|
|
5106
5104
|
const reasoningContent = "reasoningContent" in result ? result.reasoningContent : void 0;
|
|
@@ -5256,6 +5254,7 @@ Tip: You can continue the conversation by asking the AI to proceed.`
|
|
|
5256
5254
|
}
|
|
5257
5255
|
} finally {
|
|
5258
5256
|
this.teardownInterjectionListener();
|
|
5257
|
+
this._currentSpinner = null;
|
|
5259
5258
|
spinner.stop();
|
|
5260
5259
|
await this.checkContextPressure();
|
|
5261
5260
|
}
|
|
@@ -5519,7 +5518,7 @@ program.command("web").description("Start Web UI server with browser-based chat
|
|
|
5519
5518
|
console.error("Error: Invalid port number. Must be between 1 and 65535.");
|
|
5520
5519
|
process.exit(1);
|
|
5521
5520
|
}
|
|
5522
|
-
const { startWebServer } = await import("./server-
|
|
5521
|
+
const { startWebServer } = await import("./server-LMXSNPOQ.js");
|
|
5523
5522
|
await startWebServer({ port, host: options.host });
|
|
5524
5523
|
});
|
|
5525
5524
|
program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
setupProxy,
|
|
25
25
|
spawnAgentContext,
|
|
26
26
|
truncateOutput
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-QZR2SIUB.js";
|
|
28
28
|
import {
|
|
29
29
|
AGENTIC_BEHAVIOR_GUIDELINE,
|
|
30
30
|
CONTEXT_FILE_CANDIDATES,
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
PLAN_MODE_SYSTEM_ADDON,
|
|
37
37
|
SKILLS_DIR_NAME,
|
|
38
38
|
VERSION
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-M6BBSIGR.js";
|
|
40
40
|
import {
|
|
41
41
|
AuthManager
|
|
42
42
|
} from "./chunk-CPLT6CD3.js";
|