@zqagent/core 0.2.16 → 0.3.6
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 +1 -1
- package/README.oss.en.md +15 -2
- package/README.oss.md +18 -2
- package/README.oss.zh-TW.md +13 -2
- package/dist/McpClient-CEQBUPuC.d.cts +145 -0
- package/dist/McpClient-CEQBUPuC.d.ts +145 -0
- package/dist/{ToolRegistry-C3pTFiaJ.d.cts → ToolRegistry-Cy0fQxrb.d.ts} +2 -111
- package/dist/{ToolRegistry-C3pTFiaJ.d.ts → ToolRegistry-DouDvn9E.d.cts} +2 -111
- package/dist/{explore-RtZtb-V6.d.ts → TurnEngine-BPKhWuSI.d.cts} +108 -73
- package/dist/{explore-BgRhj6SP.d.cts → TurnEngine-DtGEuVLT.d.ts} +108 -73
- package/dist/conflictGuard-BBOOIxxK.d.cts +42 -0
- package/dist/conflictGuard-BBOOIxxK.d.ts +42 -0
- package/dist/index.cjs +5477 -1140
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +577 -195
- package/dist/index.d.ts +577 -195
- package/dist/index.js +5305 -1002
- package/dist/index.js.map +1 -1
- package/dist/internal/crypto/secrets.cjs +25 -0
- package/dist/internal/crypto/secrets.cjs.map +1 -0
- package/dist/internal/crypto/secrets.d.cts +2 -0
- package/dist/internal/crypto/secrets.d.ts +2 -0
- package/dist/internal/crypto/secrets.js +3 -0
- package/dist/internal/crypto/secrets.js.map +1 -0
- package/dist/internal/engine/FileLogHook.cjs +179 -0
- package/dist/internal/engine/FileLogHook.cjs.map +1 -0
- package/dist/internal/engine/FileLogHook.d.cts +67 -0
- package/dist/internal/engine/FileLogHook.d.ts +67 -0
- package/dist/internal/engine/FileLogHook.js +144 -0
- package/dist/internal/engine/FileLogHook.js.map +1 -0
- package/dist/internal/engine/approvalView.cjs +25 -0
- package/dist/internal/engine/approvalView.cjs.map +1 -0
- package/dist/internal/engine/approvalView.d.cts +1 -0
- package/dist/internal/engine/approvalView.d.ts +1 -0
- package/dist/internal/engine/approvalView.js +3 -0
- package/dist/internal/engine/approvalView.js.map +1 -0
- package/dist/internal/engine/limits.cjs +59 -0
- package/dist/internal/engine/limits.cjs.map +1 -0
- package/dist/internal/engine/limits.d.cts +32 -0
- package/dist/internal/engine/limits.d.ts +32 -0
- package/dist/internal/engine/limits.js +31 -0
- package/dist/internal/engine/limits.js.map +1 -0
- package/dist/internal/engine/sessionNaming.cjs +47 -0
- package/dist/internal/engine/sessionNaming.cjs.map +1 -0
- package/dist/internal/engine/sessionNaming.d.cts +25 -0
- package/dist/internal/engine/sessionNaming.d.ts +25 -0
- package/dist/internal/engine/sessionNaming.js +20 -0
- package/dist/internal/engine/sessionNaming.js.map +1 -0
- package/dist/internal/llmConfig.cjs +561 -0
- package/dist/internal/llmConfig.cjs.map +1 -0
- package/dist/internal/llmConfig.d.cts +75 -0
- package/dist/internal/llmConfig.d.ts +75 -0
- package/dist/internal/llmConfig.js +535 -0
- package/dist/internal/llmConfig.js.map +1 -0
- package/dist/internal/mcp/builtin/index.cjs +685 -0
- package/dist/internal/mcp/builtin/index.cjs.map +1 -0
- package/dist/internal/mcp/builtin/index.d.cts +21 -0
- package/dist/internal/mcp/builtin/index.d.ts +21 -0
- package/dist/internal/mcp/builtin/index.js +652 -0
- package/dist/internal/mcp/builtin/index.js.map +1 -0
- package/dist/internal/mcp/config.cjs +278 -0
- package/dist/internal/mcp/config.cjs.map +1 -0
- package/dist/internal/mcp/config.d.cts +61 -0
- package/dist/internal/mcp/config.d.ts +61 -0
- package/dist/internal/mcp/config.js +235 -0
- package/dist/internal/mcp/config.js.map +1 -0
- package/dist/internal/mcp/presets.cjs +184 -0
- package/dist/internal/mcp/presets.cjs.map +1 -0
- package/dist/internal/mcp/presets.d.cts +39 -0
- package/dist/internal/mcp/presets.d.ts +39 -0
- package/dist/internal/mcp/presets.js +158 -0
- package/dist/internal/mcp/presets.js.map +1 -0
- package/dist/internal/node-name.cjs +45 -0
- package/dist/internal/node-name.cjs.map +1 -0
- package/dist/internal/node-name.d.cts +3 -0
- package/dist/internal/node-name.d.ts +3 -0
- package/dist/internal/node-name.js +10 -0
- package/dist/internal/node-name.js.map +1 -0
- package/dist/internal/paths.cjs +63 -0
- package/dist/internal/paths.cjs.map +1 -0
- package/dist/internal/paths.d.cts +17 -0
- package/dist/internal/paths.d.ts +17 -0
- package/dist/internal/paths.js +25 -0
- package/dist/internal/paths.js.map +1 -0
- package/dist/internal/providers/diagnostics.cjs +288 -0
- package/dist/internal/providers/diagnostics.cjs.map +1 -0
- package/dist/internal/providers/diagnostics.d.cts +103 -0
- package/dist/internal/providers/diagnostics.d.ts +103 -0
- package/dist/internal/providers/diagnostics.js +250 -0
- package/dist/internal/providers/diagnostics.js.map +1 -0
- package/dist/internal/providers/models.cjs +699 -0
- package/dist/internal/providers/models.cjs.map +1 -0
- package/dist/internal/providers/models.d.cts +136 -0
- package/dist/internal/providers/models.d.ts +136 -0
- package/dist/internal/providers/models.js +654 -0
- package/dist/internal/providers/models.js.map +1 -0
- package/dist/internal/terminal.cjs +161 -0
- package/dist/internal/terminal.cjs.map +1 -0
- package/dist/internal/terminal.d.cts +58 -0
- package/dist/internal/terminal.d.ts +58 -0
- package/dist/internal/terminal.js +128 -0
- package/dist/internal/terminal.js.map +1 -0
- package/dist/internal/tools/execAsync.cjs +187 -0
- package/dist/internal/tools/execAsync.cjs.map +1 -0
- package/dist/internal/tools/execAsync.d.cts +30 -0
- package/dist/internal/tools/execAsync.d.ts +30 -0
- package/dist/internal/tools/execAsync.js +162 -0
- package/dist/internal/tools/execAsync.js.map +1 -0
- package/dist/internal/tools/git.cjs +935 -0
- package/dist/internal/tools/git.cjs.map +1 -0
- package/dist/internal/tools/git.d.cts +206 -0
- package/dist/internal/tools/git.d.ts +206 -0
- package/dist/internal/tools/git.js +883 -0
- package/dist/internal/tools/git.js.map +1 -0
- package/dist/internal/tools/pathSafety.cjs +99 -0
- package/dist/internal/tools/pathSafety.cjs.map +1 -0
- package/dist/internal/tools/pathSafety.d.cts +44 -0
- package/dist/internal/tools/pathSafety.d.ts +44 -0
- package/dist/internal/tools/pathSafety.js +61 -0
- package/dist/internal/tools/pathSafety.js.map +1 -0
- package/dist/internal/tools/plan.cjs +146 -0
- package/dist/internal/tools/plan.cjs.map +1 -0
- package/dist/internal/tools/plan.d.cts +48 -0
- package/dist/internal/tools/plan.d.ts +48 -0
- package/dist/internal/tools/plan.js +117 -0
- package/dist/internal/tools/plan.js.map +1 -0
- package/dist/internal/tools/ripgrep.cjs +118 -0
- package/dist/internal/tools/ripgrep.cjs.map +1 -0
- package/dist/internal/tools/ripgrep.d.cts +6 -0
- package/dist/internal/tools/ripgrep.d.ts +6 -0
- package/dist/internal/tools/ripgrep.js +89 -0
- package/dist/internal/tools/ripgrep.js.map +1 -0
- package/dist/internal/tools/sandbox.cjs +253 -0
- package/dist/internal/tools/sandbox.cjs.map +1 -0
- package/dist/internal/tools/sandbox.d.cts +67 -0
- package/dist/internal/tools/sandbox.d.ts +67 -0
- package/dist/internal/tools/sandbox.js +213 -0
- package/dist/internal/tools/sandbox.js.map +1 -0
- package/dist/internal/tools/shell.cjs +771 -0
- package/dist/internal/tools/shell.cjs.map +1 -0
- package/dist/internal/tools/shell.d.cts +47 -0
- package/dist/internal/tools/shell.d.ts +47 -0
- package/dist/internal/tools/shell.js +731 -0
- package/dist/internal/tools/shell.js.map +1 -0
- package/dist/internal/tools/shellRuntime.cjs +220 -0
- package/dist/internal/tools/shellRuntime.cjs.map +1 -0
- package/dist/internal/tools/shellRuntime.d.cts +67 -0
- package/dist/internal/tools/shellRuntime.d.ts +67 -0
- package/dist/internal/tools/shellRuntime.js +181 -0
- package/dist/internal/tools/shellRuntime.js.map +1 -0
- package/dist/internal/update/controller.cjs +1035 -0
- package/dist/internal/update/controller.cjs.map +1 -0
- package/dist/internal/update/controller.d.cts +150 -0
- package/dist/internal/update/controller.d.ts +150 -0
- package/dist/internal/update/controller.js +991 -0
- package/dist/internal/update/controller.js.map +1 -0
- package/dist/internal/update/platform.cjs +234 -0
- package/dist/internal/update/platform.cjs.map +1 -0
- package/dist/internal/update/platform.d.cts +77 -0
- package/dist/internal/update/platform.d.ts +77 -0
- package/dist/internal/update/platform.js +184 -0
- package/dist/internal/update/platform.js.map +1 -0
- package/dist/tools/ask.d.cts +3 -1
- package/dist/tools/ask.d.ts +3 -1
- package/dist/tools/diff.cjs +17 -6
- package/dist/tools/diff.cjs.map +1 -1
- package/dist/tools/diff.d.cts +5 -2
- package/dist/tools/diff.d.ts +5 -2
- package/dist/tools/diff.js +17 -6
- package/dist/tools/diff.js.map +1 -1
- package/dist/tools/directories.d.cts +3 -1
- package/dist/tools/directories.d.ts +3 -1
- package/dist/tools/explore.cjs +1778 -204
- package/dist/tools/explore.cjs.map +1 -1
- package/dist/tools/explore.d.cts +82 -2
- package/dist/tools/explore.d.ts +82 -2
- package/dist/tools/explore.js +1780 -204
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/files.cjs +56 -21
- package/dist/tools/files.cjs.map +1 -1
- package/dist/tools/files.d.cts +6 -3
- package/dist/tools/files.d.ts +6 -3
- package/dist/tools/files.js +56 -21
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/git.cjs +34 -25
- package/dist/tools/git.cjs.map +1 -1
- package/dist/tools/git.d.cts +4 -204
- package/dist/tools/git.d.ts +4 -204
- package/dist/tools/git.js +34 -25
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/media.cjs +280 -3
- package/dist/tools/media.cjs.map +1 -1
- package/dist/tools/media.d.cts +3 -1
- package/dist/tools/media.d.ts +3 -1
- package/dist/tools/media.js +278 -1
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/plan.cjs +62 -0
- package/dist/tools/plan.cjs.map +1 -1
- package/dist/tools/plan.d.cts +4 -17
- package/dist/tools/plan.d.ts +4 -17
- package/dist/tools/plan.js +59 -0
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/search.cjs +3 -0
- package/dist/tools/search.cjs.map +1 -1
- package/dist/tools/search.d.cts +3 -1
- package/dist/tools/search.d.ts +3 -1
- package/dist/tools/search.js +3 -0
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.cjs +76 -11
- package/dist/tools/shell.cjs.map +1 -1
- package/dist/tools/shell.d.cts +5 -39
- package/dist/tools/shell.d.ts +5 -39
- package/dist/tools/shell.js +75 -11
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/todo.d.cts +3 -1
- package/dist/tools/todo.d.ts +3 -1
- package/dist/tools/web.cjs +279 -5
- package/dist/tools/web.cjs.map +1 -1
- package/dist/tools/web.d.cts +3 -1
- package/dist/tools/web.d.ts +3 -1
- package/dist/tools/web.js +275 -3
- package/dist/tools/web.js.map +1 -1
- package/dist/types-BYyXWWPW.d.cts +237 -0
- package/dist/types-BYyXWWPW.d.ts +237 -0
- package/package.json +26 -37
- package/bin/zqagent +0 -2
- package/dist/cli/index.cjs +0 -24507
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.d.cts +0 -2
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -24490
- package/dist/cli/index.js.map +0 -1
- package/dist/server/index.cjs +0 -19824
- package/dist/server/index.cjs.map +0 -1
- package/dist/server/index.d.cts +0 -2
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +0 -19807
- package/dist/server/index.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
|
|
17
|
+
// src/crypto/secrets.ts
|
|
18
|
+
var secrets_exports = {};
|
|
19
|
+
module.exports = __toCommonJS(secrets_exports);
|
|
20
|
+
__reExport(secrets_exports, require("@zqagent/shared/secrets"), module.exports);
|
|
21
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
22
|
+
0 && (module.exports = {
|
|
23
|
+
...require("@zqagent/shared/secrets")
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=secrets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/crypto/secrets.ts"],"sourcesContent":["// 已迁移至 @zqagent/shared(core 与 hub 共用);此文件保留为兼容再导出。\nexport * from \"@zqagent/shared/secrets\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AACA,4BAAc,oCADd;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/crypto/secrets.ts"],"sourcesContent":["// 已迁移至 @zqagent/shared(core 与 hub 共用);此文件保留为兼容再导出。\nexport * from \"@zqagent/shared/secrets\";\n"],"mappings":";AACA,cAAc;","names":[]}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/engine/FileLogHook.ts
|
|
31
|
+
var FileLogHook_exports = {};
|
|
32
|
+
__export(FileLogHook_exports, {
|
|
33
|
+
FileLogHook: () => FileLogHook
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(FileLogHook_exports);
|
|
36
|
+
var fs = __toESM(require("fs"), 1);
|
|
37
|
+
var path = __toESM(require("path"), 1);
|
|
38
|
+
var FileLogHook = class {
|
|
39
|
+
constructor(sessionId, stateDir) {
|
|
40
|
+
this.sessionId = sessionId;
|
|
41
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
42
|
+
this._logPath = path.join(stateDir, `${sessionId}.jsonl`);
|
|
43
|
+
this._statePath = path.join(stateDir, `${sessionId}_state.json`);
|
|
44
|
+
}
|
|
45
|
+
sessionId;
|
|
46
|
+
_logPath;
|
|
47
|
+
_statePath;
|
|
48
|
+
onTurnStart(input) {
|
|
49
|
+
this._append({ type: "turn_start", input });
|
|
50
|
+
}
|
|
51
|
+
onTurnEnd(status, iterations, producedFiles) {
|
|
52
|
+
this._append({
|
|
53
|
+
type: "turn_end",
|
|
54
|
+
status,
|
|
55
|
+
iterations,
|
|
56
|
+
produced_files: producedFiles
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
onAssistantDelta(_text) {
|
|
60
|
+
}
|
|
61
|
+
onReasoningDelta(_text) {
|
|
62
|
+
}
|
|
63
|
+
onAssistantMessage(text, toolCalls, usage) {
|
|
64
|
+
this._append({
|
|
65
|
+
type: "assistant_message",
|
|
66
|
+
text,
|
|
67
|
+
tool_calls: toolCalls,
|
|
68
|
+
usage
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
onToolProposed(name, args) {
|
|
72
|
+
this._append({ type: "tool_proposed", name, args });
|
|
73
|
+
}
|
|
74
|
+
onToolStarted(name) {
|
|
75
|
+
this._append({ type: "tool_started", name });
|
|
76
|
+
}
|
|
77
|
+
onToolFinished(name, status, resultPreview) {
|
|
78
|
+
this._append({
|
|
79
|
+
type: "tool_finished",
|
|
80
|
+
name,
|
|
81
|
+
status,
|
|
82
|
+
result_preview: resultPreview
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
onPermissionRequired(name, reason) {
|
|
86
|
+
this._append({ type: "permission_required", name, reason });
|
|
87
|
+
}
|
|
88
|
+
onIterationEnd(iteration) {
|
|
89
|
+
this._append({ type: "iteration_end", iteration });
|
|
90
|
+
}
|
|
91
|
+
onCompacting(info) {
|
|
92
|
+
this._append({ type: "compacting", ...info ?? {} });
|
|
93
|
+
}
|
|
94
|
+
onCompacted(text, info) {
|
|
95
|
+
this._append({ type: "compacted", text, ...info ?? {} });
|
|
96
|
+
}
|
|
97
|
+
onError(error, errorType) {
|
|
98
|
+
this._append({ type: "error", error, error_type: errorType });
|
|
99
|
+
}
|
|
100
|
+
onRetry(attempt, max, reason) {
|
|
101
|
+
this._append({ type: "llm_retry", attempt, max, reason });
|
|
102
|
+
}
|
|
103
|
+
onInterrupted(iterations) {
|
|
104
|
+
this._append({ type: "interrupted", iterations });
|
|
105
|
+
}
|
|
106
|
+
onPaused(iteration, at) {
|
|
107
|
+
this._append({ type: "turn_paused", iteration, at });
|
|
108
|
+
}
|
|
109
|
+
onResumed(iteration) {
|
|
110
|
+
this._append({ type: "turn_resumed", iteration });
|
|
111
|
+
}
|
|
112
|
+
onEvent(type, data) {
|
|
113
|
+
this._append({ type, ...data });
|
|
114
|
+
}
|
|
115
|
+
/** 保存完整引擎状态快照(检查点) */
|
|
116
|
+
saveState(engine, meta) {
|
|
117
|
+
const permissions = engine.permissions;
|
|
118
|
+
const state = {
|
|
119
|
+
sessionId: this.sessionId,
|
|
120
|
+
model: engine.model,
|
|
121
|
+
messages: engine.messages,
|
|
122
|
+
compaction: engine.compactionState ? {
|
|
123
|
+
boundaryIndex: engine.compactionState.boundaryIndex,
|
|
124
|
+
summaryText: engine.compactionState.summaryText,
|
|
125
|
+
workingState: engine.compactionState.workingState,
|
|
126
|
+
userMessages: engine.compactionState.userMessages,
|
|
127
|
+
userMessagesDropped: engine.compactionState.userMessagesDropped,
|
|
128
|
+
createdAt: engine.compactionState.createdAt,
|
|
129
|
+
modelUsed: engine.compactionState.modelUsed,
|
|
130
|
+
trimmed: engine.compactionState.trimmed
|
|
131
|
+
} : null,
|
|
132
|
+
savedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
133
|
+
...permissions?.mode !== void 0 ? { permissionMode: permissions.mode } : {},
|
|
134
|
+
...permissions?.sessionAllowTools ? { allowTools: [...permissions.sessionAllowTools] } : {},
|
|
135
|
+
...permissions?.sessionAllowCommands ? { allowCommands: [...permissions.sessionAllowCommands] } : {},
|
|
136
|
+
// 会话命名元数据(可选,向后兼容旧调用)
|
|
137
|
+
...meta?.name !== void 0 ? { name: meta.name } : {},
|
|
138
|
+
...meta?.nameSource !== void 0 ? { nameSource: meta.nameSource } : {},
|
|
139
|
+
...meta?.taskCount !== void 0 ? { taskCount: meta.taskCount } : {}
|
|
140
|
+
};
|
|
141
|
+
fs.writeFileSync(this._statePath, JSON.stringify(state, null, 2), "utf-8");
|
|
142
|
+
}
|
|
143
|
+
/** 读取保存的引擎状态 */
|
|
144
|
+
static loadState(sessionId, stateDir) {
|
|
145
|
+
const p = path.join(stateDir, `${sessionId}_state.json`);
|
|
146
|
+
try {
|
|
147
|
+
const raw = fs.readFileSync(p, "utf-8");
|
|
148
|
+
return JSON.parse(raw);
|
|
149
|
+
} catch (e) {
|
|
150
|
+
console.error(e);
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** 读取事件日志 */
|
|
155
|
+
static loadEvents(sessionId, stateDir) {
|
|
156
|
+
const p = path.join(stateDir, `${sessionId}.jsonl`);
|
|
157
|
+
try {
|
|
158
|
+
const raw = fs.readFileSync(p, "utf-8");
|
|
159
|
+
return raw.trim().split("\n").filter(Boolean).map((line) => JSON.parse(line));
|
|
160
|
+
} catch (e) {
|
|
161
|
+
console.error(e);
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** 追加一行 JSON 事件 */
|
|
166
|
+
_append(entry) {
|
|
167
|
+
entry["ts"] = (/* @__PURE__ */ new Date()).toISOString();
|
|
168
|
+
try {
|
|
169
|
+
fs.appendFileSync(this._logPath, JSON.stringify(entry) + "\n", "utf-8");
|
|
170
|
+
} catch (e) {
|
|
171
|
+
console.error(e);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
176
|
+
0 && (module.exports = {
|
|
177
|
+
FileLogHook
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=FileLogHook.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/engine/FileLogHook.ts"],"sourcesContent":["/**\n * FileLogHook — 将引擎事件以 JSONL 格式持久化到文件\n *\n * 同时维护一个引擎状态快照(检查点),用于 Durable Resume。\n * 恢复时可通过 loadState() 读取消息历史和压缩状态。\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type {\n EngineHook,\n EventType,\n CompactionStartInfo,\n CompactionDoneInfo,\n} from \"./events.js\";\nimport type { TokenUsage, Message } from \"./types.js\";\nimport type { CompactionState } from \"./compaction.js\";\nimport type { TurnEngine } from \"./TurnEngine.js\";\n\n/** 保存的引擎状态(用于恢复) */\nexport interface SavedState {\n sessionId: string;\n model: string;\n messages: Message[];\n compaction: Record<string, unknown> | null;\n savedAt: string;\n /** 会话名称(AI 自动生成或用户指定) */\n name?: string;\n /** 名称来源:auto=自动生成(可被后续自动生成覆盖);user=用户手动指定(不再自动生成) */\n nameSource?: \"auto\" | \"user\";\n /** 已成功完成的任务数(用于第 1/3/5 次自动命名) */\n taskCount?: number;\n /** 权限模式(恢复会话时还原,避免重启后回到逐条审批) */\n permissionMode?: string;\n /** 会话级「总是允许此工具」 */\n allowTools?: string[];\n /** 会话级「总是允许此命令」(按可执行程序名记录) */\n allowCommands?: string[];\n}\n\n/** 会话命名相关的元数据(由 CLI 维护,随 state 快照持久化) */\nexport interface SessionNameMeta {\n name?: string;\n nameSource?: \"auto\" | \"user\";\n taskCount?: number;\n}\n\nexport class FileLogHook implements EngineHook {\n private _logPath: string;\n private _statePath: string;\n\n constructor(\n private sessionId: string,\n stateDir: string,\n ) {\n fs.mkdirSync(stateDir, { recursive: true });\n this._logPath = path.join(stateDir, `${sessionId}.jsonl`);\n this._statePath = path.join(stateDir, `${sessionId}_state.json`);\n }\n\n onTurnStart(input: string): void {\n this._append({ type: \"turn_start\", input });\n }\n onTurnEnd(status: string, iterations: number, producedFiles: string[]): void {\n this._append({\n type: \"turn_end\",\n status,\n iterations,\n produced_files: producedFiles,\n });\n }\n onAssistantDelta(_text: string): void {\n // 逐 token 太频繁,不在日志中记录\n }\n onReasoningDelta(_text: string): void {\n // 逐 token 太频繁,不在日志中记录\n }\n onAssistantMessage(\n text: string | null,\n toolCalls: string[],\n usage?: TokenUsage,\n ): void {\n this._append({\n type: \"assistant_message\",\n text,\n tool_calls: toolCalls,\n usage,\n });\n }\n onToolProposed(name: string, args: Record<string, unknown>): void {\n this._append({ type: \"tool_proposed\", name, args });\n }\n onToolStarted(name: string): void {\n this._append({ type: \"tool_started\", name });\n }\n onToolFinished(name: string, status: string, resultPreview: string): void {\n this._append({\n type: \"tool_finished\",\n name,\n status,\n result_preview: resultPreview,\n });\n }\n onPermissionRequired(name: string, reason: string): void {\n this._append({ type: \"permission_required\", name, reason });\n }\n onIterationEnd(iteration: number): void {\n // 每个检查点保存引擎状态\n this._append({ type: \"iteration_end\", iteration });\n }\n onCompacting(info?: CompactionStartInfo): void {\n this._append({ type: \"compacting\", ...(info ?? {}) });\n }\n onCompacted(text: string, info?: CompactionDoneInfo): void {\n this._append({ type: \"compacted\", text, ...(info ?? {}) });\n }\n onError(error: string, errorType: string): void {\n this._append({ type: \"error\", error, error_type: errorType });\n }\n onRetry(attempt: number, max: number, reason: string): void {\n this._append({ type: \"llm_retry\", attempt, max, reason });\n }\n\n onInterrupted(iterations: number): void {\n this._append({ type: \"interrupted\", iterations });\n }\n onPaused(iteration: number, at: string): void {\n this._append({ type: \"turn_paused\", iteration, at });\n }\n onResumed(iteration: number): void {\n this._append({ type: \"turn_resumed\", iteration });\n }\n onEvent(type: EventType, data: Record<string, unknown>): void {\n this._append({ type, ...data });\n }\n\n /** 保存完整引擎状态快照(检查点) */\n saveState(engine: TurnEngine, meta?: SessionNameMeta): void {\n // 权限状态随快照落盘:/mode、/agent 重建引擎与重启恢复都不能丢掉\n // 用户已经做过的授权,否则同一批命令会被反复审批。\n // 用可选访问兼容只提供 model/messages 的轻量 stub。\n const permissions = engine.permissions as\n | {\n mode?: string;\n sessionAllowTools?: Set<string>;\n sessionAllowCommands?: Set<string>;\n }\n | undefined;\n const state: SavedState = {\n sessionId: this.sessionId,\n model: engine.model,\n messages: engine.messages,\n compaction: engine.compactionState\n ? {\n boundaryIndex: engine.compactionState.boundaryIndex,\n summaryText: engine.compactionState.summaryText,\n workingState: engine.compactionState.workingState,\n userMessages: engine.compactionState.userMessages,\n userMessagesDropped: engine.compactionState.userMessagesDropped,\n createdAt: engine.compactionState.createdAt,\n modelUsed: engine.compactionState.modelUsed,\n trimmed: engine.compactionState.trimmed,\n }\n : null,\n savedAt: new Date().toISOString(),\n ...(permissions?.mode !== undefined\n ? { permissionMode: permissions.mode }\n : {}),\n ...(permissions?.sessionAllowTools\n ? { allowTools: [...permissions.sessionAllowTools] }\n : {}),\n ...(permissions?.sessionAllowCommands\n ? { allowCommands: [...permissions.sessionAllowCommands] }\n : {}),\n // 会话命名元数据(可选,向后兼容旧调用)\n ...(meta?.name !== undefined ? { name: meta.name } : {}),\n ...(meta?.nameSource !== undefined\n ? { nameSource: meta.nameSource }\n : {}),\n ...(meta?.taskCount !== undefined ? { taskCount: meta.taskCount } : {}),\n };\n fs.writeFileSync(this._statePath, JSON.stringify(state, null, 2), \"utf-8\");\n }\n\n /** 读取保存的引擎状态 */\n static loadState(sessionId: string, stateDir: string): SavedState | null {\n const p = path.join(stateDir, `${sessionId}_state.json`);\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n return JSON.parse(raw) as SavedState;\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n /** 读取事件日志 */\n static loadEvents(\n sessionId: string,\n stateDir: string,\n ): Record<string, unknown>[] {\n const p = path.join(stateDir, `${sessionId}.jsonl`);\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n return raw\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n } catch (e) {\n console.error(e);\n return [];\n }\n }\n\n /** 追加一行 JSON 事件 */\n private _append(entry: Record<string, unknown>): void {\n entry[\"ts\"] = new Date().toISOString();\n try {\n fs.appendFileSync(this._logPath, JSON.stringify(entry) + \"\\n\", \"utf-8\");\n } catch (e) {\n // 持久化失败不影响核心逻辑\n console.error(e);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { E as EngineHook, C as CompactionStartInfo, a as CompactionDoneInfo, b as EventType, T as TurnEngine } from '../../TurnEngine-BPKhWuSI.cjs';
|
|
2
|
+
import { T as TokenUsage, M as Message } from '../../types-BYyXWWPW.cjs';
|
|
3
|
+
import '../../ToolRegistry-DouDvn9E.cjs';
|
|
4
|
+
import 'openai/resources/chat/completions.js';
|
|
5
|
+
import 'openai/core.mjs';
|
|
6
|
+
import '@zqagent/shared/model-capabilities';
|
|
7
|
+
|
|
8
|
+
/** 保存的引擎状态(用于恢复) */
|
|
9
|
+
interface SavedState {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
model: string;
|
|
12
|
+
messages: Message[];
|
|
13
|
+
compaction: Record<string, unknown> | null;
|
|
14
|
+
savedAt: string;
|
|
15
|
+
/** 会话名称(AI 自动生成或用户指定) */
|
|
16
|
+
name?: string;
|
|
17
|
+
/** 名称来源:auto=自动生成(可被后续自动生成覆盖);user=用户手动指定(不再自动生成) */
|
|
18
|
+
nameSource?: "auto" | "user";
|
|
19
|
+
/** 已成功完成的任务数(用于第 1/3/5 次自动命名) */
|
|
20
|
+
taskCount?: number;
|
|
21
|
+
/** 权限模式(恢复会话时还原,避免重启后回到逐条审批) */
|
|
22
|
+
permissionMode?: string;
|
|
23
|
+
/** 会话级「总是允许此工具」 */
|
|
24
|
+
allowTools?: string[];
|
|
25
|
+
/** 会话级「总是允许此命令」(按可执行程序名记录) */
|
|
26
|
+
allowCommands?: string[];
|
|
27
|
+
}
|
|
28
|
+
/** 会话命名相关的元数据(由 CLI 维护,随 state 快照持久化) */
|
|
29
|
+
interface SessionNameMeta {
|
|
30
|
+
name?: string;
|
|
31
|
+
nameSource?: "auto" | "user";
|
|
32
|
+
taskCount?: number;
|
|
33
|
+
}
|
|
34
|
+
declare class FileLogHook implements EngineHook {
|
|
35
|
+
private sessionId;
|
|
36
|
+
private _logPath;
|
|
37
|
+
private _statePath;
|
|
38
|
+
constructor(sessionId: string, stateDir: string);
|
|
39
|
+
onTurnStart(input: string): void;
|
|
40
|
+
onTurnEnd(status: string, iterations: number, producedFiles: string[]): void;
|
|
41
|
+
onAssistantDelta(_text: string): void;
|
|
42
|
+
onReasoningDelta(_text: string): void;
|
|
43
|
+
onAssistantMessage(text: string | null, toolCalls: string[], usage?: TokenUsage): void;
|
|
44
|
+
onToolProposed(name: string, args: Record<string, unknown>): void;
|
|
45
|
+
onToolStarted(name: string): void;
|
|
46
|
+
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
47
|
+
onPermissionRequired(name: string, reason: string): void;
|
|
48
|
+
onIterationEnd(iteration: number): void;
|
|
49
|
+
onCompacting(info?: CompactionStartInfo): void;
|
|
50
|
+
onCompacted(text: string, info?: CompactionDoneInfo): void;
|
|
51
|
+
onError(error: string, errorType: string): void;
|
|
52
|
+
onRetry(attempt: number, max: number, reason: string): void;
|
|
53
|
+
onInterrupted(iterations: number): void;
|
|
54
|
+
onPaused(iteration: number, at: string): void;
|
|
55
|
+
onResumed(iteration: number): void;
|
|
56
|
+
onEvent(type: EventType, data: Record<string, unknown>): void;
|
|
57
|
+
/** 保存完整引擎状态快照(检查点) */
|
|
58
|
+
saveState(engine: TurnEngine, meta?: SessionNameMeta): void;
|
|
59
|
+
/** 读取保存的引擎状态 */
|
|
60
|
+
static loadState(sessionId: string, stateDir: string): SavedState | null;
|
|
61
|
+
/** 读取事件日志 */
|
|
62
|
+
static loadEvents(sessionId: string, stateDir: string): Record<string, unknown>[];
|
|
63
|
+
/** 追加一行 JSON 事件 */
|
|
64
|
+
private _append;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { FileLogHook, type SavedState, type SessionNameMeta };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { E as EngineHook, C as CompactionStartInfo, a as CompactionDoneInfo, b as EventType, T as TurnEngine } from '../../TurnEngine-DtGEuVLT.js';
|
|
2
|
+
import { T as TokenUsage, M as Message } from '../../types-BYyXWWPW.js';
|
|
3
|
+
import '../../ToolRegistry-Cy0fQxrb.js';
|
|
4
|
+
import 'openai/resources/chat/completions.js';
|
|
5
|
+
import 'openai/core.mjs';
|
|
6
|
+
import '@zqagent/shared/model-capabilities';
|
|
7
|
+
|
|
8
|
+
/** 保存的引擎状态(用于恢复) */
|
|
9
|
+
interface SavedState {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
model: string;
|
|
12
|
+
messages: Message[];
|
|
13
|
+
compaction: Record<string, unknown> | null;
|
|
14
|
+
savedAt: string;
|
|
15
|
+
/** 会话名称(AI 自动生成或用户指定) */
|
|
16
|
+
name?: string;
|
|
17
|
+
/** 名称来源:auto=自动生成(可被后续自动生成覆盖);user=用户手动指定(不再自动生成) */
|
|
18
|
+
nameSource?: "auto" | "user";
|
|
19
|
+
/** 已成功完成的任务数(用于第 1/3/5 次自动命名) */
|
|
20
|
+
taskCount?: number;
|
|
21
|
+
/** 权限模式(恢复会话时还原,避免重启后回到逐条审批) */
|
|
22
|
+
permissionMode?: string;
|
|
23
|
+
/** 会话级「总是允许此工具」 */
|
|
24
|
+
allowTools?: string[];
|
|
25
|
+
/** 会话级「总是允许此命令」(按可执行程序名记录) */
|
|
26
|
+
allowCommands?: string[];
|
|
27
|
+
}
|
|
28
|
+
/** 会话命名相关的元数据(由 CLI 维护,随 state 快照持久化) */
|
|
29
|
+
interface SessionNameMeta {
|
|
30
|
+
name?: string;
|
|
31
|
+
nameSource?: "auto" | "user";
|
|
32
|
+
taskCount?: number;
|
|
33
|
+
}
|
|
34
|
+
declare class FileLogHook implements EngineHook {
|
|
35
|
+
private sessionId;
|
|
36
|
+
private _logPath;
|
|
37
|
+
private _statePath;
|
|
38
|
+
constructor(sessionId: string, stateDir: string);
|
|
39
|
+
onTurnStart(input: string): void;
|
|
40
|
+
onTurnEnd(status: string, iterations: number, producedFiles: string[]): void;
|
|
41
|
+
onAssistantDelta(_text: string): void;
|
|
42
|
+
onReasoningDelta(_text: string): void;
|
|
43
|
+
onAssistantMessage(text: string | null, toolCalls: string[], usage?: TokenUsage): void;
|
|
44
|
+
onToolProposed(name: string, args: Record<string, unknown>): void;
|
|
45
|
+
onToolStarted(name: string): void;
|
|
46
|
+
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
47
|
+
onPermissionRequired(name: string, reason: string): void;
|
|
48
|
+
onIterationEnd(iteration: number): void;
|
|
49
|
+
onCompacting(info?: CompactionStartInfo): void;
|
|
50
|
+
onCompacted(text: string, info?: CompactionDoneInfo): void;
|
|
51
|
+
onError(error: string, errorType: string): void;
|
|
52
|
+
onRetry(attempt: number, max: number, reason: string): void;
|
|
53
|
+
onInterrupted(iterations: number): void;
|
|
54
|
+
onPaused(iteration: number, at: string): void;
|
|
55
|
+
onResumed(iteration: number): void;
|
|
56
|
+
onEvent(type: EventType, data: Record<string, unknown>): void;
|
|
57
|
+
/** 保存完整引擎状态快照(检查点) */
|
|
58
|
+
saveState(engine: TurnEngine, meta?: SessionNameMeta): void;
|
|
59
|
+
/** 读取保存的引擎状态 */
|
|
60
|
+
static loadState(sessionId: string, stateDir: string): SavedState | null;
|
|
61
|
+
/** 读取事件日志 */
|
|
62
|
+
static loadEvents(sessionId: string, stateDir: string): Record<string, unknown>[];
|
|
63
|
+
/** 追加一行 JSON 事件 */
|
|
64
|
+
private _append;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { FileLogHook, type SavedState, type SessionNameMeta };
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// src/engine/FileLogHook.ts
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
var FileLogHook = class {
|
|
5
|
+
constructor(sessionId, stateDir) {
|
|
6
|
+
this.sessionId = sessionId;
|
|
7
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
8
|
+
this._logPath = path.join(stateDir, `${sessionId}.jsonl`);
|
|
9
|
+
this._statePath = path.join(stateDir, `${sessionId}_state.json`);
|
|
10
|
+
}
|
|
11
|
+
sessionId;
|
|
12
|
+
_logPath;
|
|
13
|
+
_statePath;
|
|
14
|
+
onTurnStart(input) {
|
|
15
|
+
this._append({ type: "turn_start", input });
|
|
16
|
+
}
|
|
17
|
+
onTurnEnd(status, iterations, producedFiles) {
|
|
18
|
+
this._append({
|
|
19
|
+
type: "turn_end",
|
|
20
|
+
status,
|
|
21
|
+
iterations,
|
|
22
|
+
produced_files: producedFiles
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
onAssistantDelta(_text) {
|
|
26
|
+
}
|
|
27
|
+
onReasoningDelta(_text) {
|
|
28
|
+
}
|
|
29
|
+
onAssistantMessage(text, toolCalls, usage) {
|
|
30
|
+
this._append({
|
|
31
|
+
type: "assistant_message",
|
|
32
|
+
text,
|
|
33
|
+
tool_calls: toolCalls,
|
|
34
|
+
usage
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
onToolProposed(name, args) {
|
|
38
|
+
this._append({ type: "tool_proposed", name, args });
|
|
39
|
+
}
|
|
40
|
+
onToolStarted(name) {
|
|
41
|
+
this._append({ type: "tool_started", name });
|
|
42
|
+
}
|
|
43
|
+
onToolFinished(name, status, resultPreview) {
|
|
44
|
+
this._append({
|
|
45
|
+
type: "tool_finished",
|
|
46
|
+
name,
|
|
47
|
+
status,
|
|
48
|
+
result_preview: resultPreview
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
onPermissionRequired(name, reason) {
|
|
52
|
+
this._append({ type: "permission_required", name, reason });
|
|
53
|
+
}
|
|
54
|
+
onIterationEnd(iteration) {
|
|
55
|
+
this._append({ type: "iteration_end", iteration });
|
|
56
|
+
}
|
|
57
|
+
onCompacting(info) {
|
|
58
|
+
this._append({ type: "compacting", ...info ?? {} });
|
|
59
|
+
}
|
|
60
|
+
onCompacted(text, info) {
|
|
61
|
+
this._append({ type: "compacted", text, ...info ?? {} });
|
|
62
|
+
}
|
|
63
|
+
onError(error, errorType) {
|
|
64
|
+
this._append({ type: "error", error, error_type: errorType });
|
|
65
|
+
}
|
|
66
|
+
onRetry(attempt, max, reason) {
|
|
67
|
+
this._append({ type: "llm_retry", attempt, max, reason });
|
|
68
|
+
}
|
|
69
|
+
onInterrupted(iterations) {
|
|
70
|
+
this._append({ type: "interrupted", iterations });
|
|
71
|
+
}
|
|
72
|
+
onPaused(iteration, at) {
|
|
73
|
+
this._append({ type: "turn_paused", iteration, at });
|
|
74
|
+
}
|
|
75
|
+
onResumed(iteration) {
|
|
76
|
+
this._append({ type: "turn_resumed", iteration });
|
|
77
|
+
}
|
|
78
|
+
onEvent(type, data) {
|
|
79
|
+
this._append({ type, ...data });
|
|
80
|
+
}
|
|
81
|
+
/** 保存完整引擎状态快照(检查点) */
|
|
82
|
+
saveState(engine, meta) {
|
|
83
|
+
const permissions = engine.permissions;
|
|
84
|
+
const state = {
|
|
85
|
+
sessionId: this.sessionId,
|
|
86
|
+
model: engine.model,
|
|
87
|
+
messages: engine.messages,
|
|
88
|
+
compaction: engine.compactionState ? {
|
|
89
|
+
boundaryIndex: engine.compactionState.boundaryIndex,
|
|
90
|
+
summaryText: engine.compactionState.summaryText,
|
|
91
|
+
workingState: engine.compactionState.workingState,
|
|
92
|
+
userMessages: engine.compactionState.userMessages,
|
|
93
|
+
userMessagesDropped: engine.compactionState.userMessagesDropped,
|
|
94
|
+
createdAt: engine.compactionState.createdAt,
|
|
95
|
+
modelUsed: engine.compactionState.modelUsed,
|
|
96
|
+
trimmed: engine.compactionState.trimmed
|
|
97
|
+
} : null,
|
|
98
|
+
savedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
99
|
+
...permissions?.mode !== void 0 ? { permissionMode: permissions.mode } : {},
|
|
100
|
+
...permissions?.sessionAllowTools ? { allowTools: [...permissions.sessionAllowTools] } : {},
|
|
101
|
+
...permissions?.sessionAllowCommands ? { allowCommands: [...permissions.sessionAllowCommands] } : {},
|
|
102
|
+
// 会话命名元数据(可选,向后兼容旧调用)
|
|
103
|
+
...meta?.name !== void 0 ? { name: meta.name } : {},
|
|
104
|
+
...meta?.nameSource !== void 0 ? { nameSource: meta.nameSource } : {},
|
|
105
|
+
...meta?.taskCount !== void 0 ? { taskCount: meta.taskCount } : {}
|
|
106
|
+
};
|
|
107
|
+
fs.writeFileSync(this._statePath, JSON.stringify(state, null, 2), "utf-8");
|
|
108
|
+
}
|
|
109
|
+
/** 读取保存的引擎状态 */
|
|
110
|
+
static loadState(sessionId, stateDir) {
|
|
111
|
+
const p = path.join(stateDir, `${sessionId}_state.json`);
|
|
112
|
+
try {
|
|
113
|
+
const raw = fs.readFileSync(p, "utf-8");
|
|
114
|
+
return JSON.parse(raw);
|
|
115
|
+
} catch (e) {
|
|
116
|
+
console.error(e);
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** 读取事件日志 */
|
|
121
|
+
static loadEvents(sessionId, stateDir) {
|
|
122
|
+
const p = path.join(stateDir, `${sessionId}.jsonl`);
|
|
123
|
+
try {
|
|
124
|
+
const raw = fs.readFileSync(p, "utf-8");
|
|
125
|
+
return raw.trim().split("\n").filter(Boolean).map((line) => JSON.parse(line));
|
|
126
|
+
} catch (e) {
|
|
127
|
+
console.error(e);
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** 追加一行 JSON 事件 */
|
|
132
|
+
_append(entry) {
|
|
133
|
+
entry["ts"] = (/* @__PURE__ */ new Date()).toISOString();
|
|
134
|
+
try {
|
|
135
|
+
fs.appendFileSync(this._logPath, JSON.stringify(entry) + "\n", "utf-8");
|
|
136
|
+
} catch (e) {
|
|
137
|
+
console.error(e);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
export {
|
|
142
|
+
FileLogHook
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=FileLogHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/engine/FileLogHook.ts"],"sourcesContent":["/**\n * FileLogHook — 将引擎事件以 JSONL 格式持久化到文件\n *\n * 同时维护一个引擎状态快照(检查点),用于 Durable Resume。\n * 恢复时可通过 loadState() 读取消息历史和压缩状态。\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type {\n EngineHook,\n EventType,\n CompactionStartInfo,\n CompactionDoneInfo,\n} from \"./events.js\";\nimport type { TokenUsage, Message } from \"./types.js\";\nimport type { CompactionState } from \"./compaction.js\";\nimport type { TurnEngine } from \"./TurnEngine.js\";\n\n/** 保存的引擎状态(用于恢复) */\nexport interface SavedState {\n sessionId: string;\n model: string;\n messages: Message[];\n compaction: Record<string, unknown> | null;\n savedAt: string;\n /** 会话名称(AI 自动生成或用户指定) */\n name?: string;\n /** 名称来源:auto=自动生成(可被后续自动生成覆盖);user=用户手动指定(不再自动生成) */\n nameSource?: \"auto\" | \"user\";\n /** 已成功完成的任务数(用于第 1/3/5 次自动命名) */\n taskCount?: number;\n /** 权限模式(恢复会话时还原,避免重启后回到逐条审批) */\n permissionMode?: string;\n /** 会话级「总是允许此工具」 */\n allowTools?: string[];\n /** 会话级「总是允许此命令」(按可执行程序名记录) */\n allowCommands?: string[];\n}\n\n/** 会话命名相关的元数据(由 CLI 维护,随 state 快照持久化) */\nexport interface SessionNameMeta {\n name?: string;\n nameSource?: \"auto\" | \"user\";\n taskCount?: number;\n}\n\nexport class FileLogHook implements EngineHook {\n private _logPath: string;\n private _statePath: string;\n\n constructor(\n private sessionId: string,\n stateDir: string,\n ) {\n fs.mkdirSync(stateDir, { recursive: true });\n this._logPath = path.join(stateDir, `${sessionId}.jsonl`);\n this._statePath = path.join(stateDir, `${sessionId}_state.json`);\n }\n\n onTurnStart(input: string): void {\n this._append({ type: \"turn_start\", input });\n }\n onTurnEnd(status: string, iterations: number, producedFiles: string[]): void {\n this._append({\n type: \"turn_end\",\n status,\n iterations,\n produced_files: producedFiles,\n });\n }\n onAssistantDelta(_text: string): void {\n // 逐 token 太频繁,不在日志中记录\n }\n onReasoningDelta(_text: string): void {\n // 逐 token 太频繁,不在日志中记录\n }\n onAssistantMessage(\n text: string | null,\n toolCalls: string[],\n usage?: TokenUsage,\n ): void {\n this._append({\n type: \"assistant_message\",\n text,\n tool_calls: toolCalls,\n usage,\n });\n }\n onToolProposed(name: string, args: Record<string, unknown>): void {\n this._append({ type: \"tool_proposed\", name, args });\n }\n onToolStarted(name: string): void {\n this._append({ type: \"tool_started\", name });\n }\n onToolFinished(name: string, status: string, resultPreview: string): void {\n this._append({\n type: \"tool_finished\",\n name,\n status,\n result_preview: resultPreview,\n });\n }\n onPermissionRequired(name: string, reason: string): void {\n this._append({ type: \"permission_required\", name, reason });\n }\n onIterationEnd(iteration: number): void {\n // 每个检查点保存引擎状态\n this._append({ type: \"iteration_end\", iteration });\n }\n onCompacting(info?: CompactionStartInfo): void {\n this._append({ type: \"compacting\", ...(info ?? {}) });\n }\n onCompacted(text: string, info?: CompactionDoneInfo): void {\n this._append({ type: \"compacted\", text, ...(info ?? {}) });\n }\n onError(error: string, errorType: string): void {\n this._append({ type: \"error\", error, error_type: errorType });\n }\n onRetry(attempt: number, max: number, reason: string): void {\n this._append({ type: \"llm_retry\", attempt, max, reason });\n }\n\n onInterrupted(iterations: number): void {\n this._append({ type: \"interrupted\", iterations });\n }\n onPaused(iteration: number, at: string): void {\n this._append({ type: \"turn_paused\", iteration, at });\n }\n onResumed(iteration: number): void {\n this._append({ type: \"turn_resumed\", iteration });\n }\n onEvent(type: EventType, data: Record<string, unknown>): void {\n this._append({ type, ...data });\n }\n\n /** 保存完整引擎状态快照(检查点) */\n saveState(engine: TurnEngine, meta?: SessionNameMeta): void {\n // 权限状态随快照落盘:/mode、/agent 重建引擎与重启恢复都不能丢掉\n // 用户已经做过的授权,否则同一批命令会被反复审批。\n // 用可选访问兼容只提供 model/messages 的轻量 stub。\n const permissions = engine.permissions as\n | {\n mode?: string;\n sessionAllowTools?: Set<string>;\n sessionAllowCommands?: Set<string>;\n }\n | undefined;\n const state: SavedState = {\n sessionId: this.sessionId,\n model: engine.model,\n messages: engine.messages,\n compaction: engine.compactionState\n ? {\n boundaryIndex: engine.compactionState.boundaryIndex,\n summaryText: engine.compactionState.summaryText,\n workingState: engine.compactionState.workingState,\n userMessages: engine.compactionState.userMessages,\n userMessagesDropped: engine.compactionState.userMessagesDropped,\n createdAt: engine.compactionState.createdAt,\n modelUsed: engine.compactionState.modelUsed,\n trimmed: engine.compactionState.trimmed,\n }\n : null,\n savedAt: new Date().toISOString(),\n ...(permissions?.mode !== undefined\n ? { permissionMode: permissions.mode }\n : {}),\n ...(permissions?.sessionAllowTools\n ? { allowTools: [...permissions.sessionAllowTools] }\n : {}),\n ...(permissions?.sessionAllowCommands\n ? { allowCommands: [...permissions.sessionAllowCommands] }\n : {}),\n // 会话命名元数据(可选,向后兼容旧调用)\n ...(meta?.name !== undefined ? { name: meta.name } : {}),\n ...(meta?.nameSource !== undefined\n ? { nameSource: meta.nameSource }\n : {}),\n ...(meta?.taskCount !== undefined ? { taskCount: meta.taskCount } : {}),\n };\n fs.writeFileSync(this._statePath, JSON.stringify(state, null, 2), \"utf-8\");\n }\n\n /** 读取保存的引擎状态 */\n static loadState(sessionId: string, stateDir: string): SavedState | null {\n const p = path.join(stateDir, `${sessionId}_state.json`);\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n return JSON.parse(raw) as SavedState;\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n /** 读取事件日志 */\n static loadEvents(\n sessionId: string,\n stateDir: string,\n ): Record<string, unknown>[] {\n const p = path.join(stateDir, `${sessionId}.jsonl`);\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n return raw\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n } catch (e) {\n console.error(e);\n return [];\n }\n }\n\n /** 追加一行 JSON 事件 */\n private _append(entry: Record<string, unknown>): void {\n entry[\"ts\"] = new Date().toISOString();\n try {\n fs.appendFileSync(this._logPath, JSON.stringify(entry) + \"\\n\", \"utf-8\");\n } catch (e) {\n // 持久化失败不影响核心逻辑\n console.error(e);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
|
|
17
|
+
// src/engine/approvalView.ts
|
|
18
|
+
var approvalView_exports = {};
|
|
19
|
+
module.exports = __toCommonJS(approvalView_exports);
|
|
20
|
+
__reExport(approvalView_exports, require("@zqagent/shared/approval-view"), module.exports);
|
|
21
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
22
|
+
0 && (module.exports = {
|
|
23
|
+
...require("@zqagent/shared/approval-view")
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=approvalView.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/engine/approvalView.ts"],"sourcesContent":["// 已迁移至 @zqagent/shared(core 与 hub 共用);此文件保留为兼容再导出。\nexport * from \"@zqagent/shared/approval-view\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AACA,iCAAc,0CADd;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@zqagent/shared/approval-view';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@zqagent/shared/approval-view';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/engine/approvalView.ts"],"sourcesContent":["// 已迁移至 @zqagent/shared(core 与 hub 共用);此文件保留为兼容再导出。\nexport * from \"@zqagent/shared/approval-view\";\n"],"mappings":";AACA,cAAc;","names":[]}
|