duclaw-cli 1.8.14 → 1.8.15
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/bundle.js +172 -50
- package/dist/main.js +1 -1
- package/dist/worker-main.js +1 -1
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -30242,7 +30242,7 @@ function printHelp() {
|
|
|
30242
30242
|
`);
|
|
30243
30243
|
}
|
|
30244
30244
|
function printVersion() {
|
|
30245
|
-
console.log(`duclaw-cli v${true ? "1.8.
|
|
30245
|
+
console.log(`duclaw-cli v${true ? "1.8.15" : "unknown"}`);
|
|
30246
30246
|
}
|
|
30247
30247
|
function getDuclawTemplate() {
|
|
30248
30248
|
return {
|
|
@@ -32629,7 +32629,7 @@ var chokidar_default = { watch, FSWatcher };
|
|
|
32629
32629
|
var import_node_cron = __toESM(require_node_cron());
|
|
32630
32630
|
|
|
32631
32631
|
// src/agent/createAgent.ts
|
|
32632
|
-
var
|
|
32632
|
+
var import_node_crypto11 = require("node:crypto");
|
|
32633
32633
|
var import_node_fs6 = require("node:fs");
|
|
32634
32634
|
|
|
32635
32635
|
// src/background/BackgroundManager.ts
|
|
@@ -39476,13 +39476,13 @@ var Diff = class {
|
|
|
39476
39476
|
editLength++;
|
|
39477
39477
|
};
|
|
39478
39478
|
if (callback) {
|
|
39479
|
-
(function
|
|
39479
|
+
(function exec() {
|
|
39480
39480
|
setTimeout(function() {
|
|
39481
39481
|
if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
|
|
39482
39482
|
return callback(void 0);
|
|
39483
39483
|
}
|
|
39484
39484
|
if (!execEditLength()) {
|
|
39485
|
-
|
|
39485
|
+
exec();
|
|
39486
39486
|
}
|
|
39487
39487
|
}, 0);
|
|
39488
39488
|
})();
|
|
@@ -42873,6 +42873,7 @@ var mailboxFollowup = {
|
|
|
42873
42873
|
|
|
42874
42874
|
// src/tools/tools/Bash.ts
|
|
42875
42875
|
var import_node_child_process = require("node:child_process");
|
|
42876
|
+
var import_node_crypto7 = require("node:crypto");
|
|
42876
42877
|
var import_node_fs4 = require("node:fs");
|
|
42877
42878
|
var DESCRIPTION29 = `\u5728\u7CFB\u7EDF shell \u4E2D\u6267\u884C\u547D\u4EE4\u3002
|
|
42878
42879
|
|
|
@@ -42888,17 +42889,24 @@ var DESCRIPTION29 = `\u5728\u7CFB\u7EDF shell \u4E2D\u6267\u884C\u547D\u4EE4\u30
|
|
|
42888
42889
|
- Bash \u53EF\u4EE5\u7528\u6765\u8FD0\u884C\u6D4B\u8BD5\u3001\u683C\u5F0F\u5316\u3001\u8BAD\u7EC3\u3001\u63A8\u7406\u3001\u67E5\u770B\u76EE\u5F55\u3001\u6267\u884C\u5DF2\u7ECF\u5199\u597D\u7684\u811A\u672C\u3002
|
|
42889
42890
|
|
|
42890
42891
|
\u53C2\u6570\uFF1A
|
|
42892
|
+
- action: \u64CD\u4F5C\u7C7B\u578B\uFF08\u53EF\u9009\uFF0Crun/check/write/stop\uFF0C\u9ED8\u8BA4 run\uFF09
|
|
42891
42893
|
- command: \u8981\u6267\u884C\u7684 shell \u547D\u4EE4
|
|
42892
42894
|
- cwd: \u547D\u4EE4\u6267\u884C\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u524D\u76EE\u5F55\uFF09
|
|
42893
|
-
- timeout: \
|
|
42895
|
+
- timeout: \u7B49\u5F85\u547D\u4EE4\u5B8C\u6210\u7684\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF0C\u53EF\u9009\uFF0C\u9ED8\u8BA4 30000ms\uFF09\u3002\u8D85\u8FC7\u540E\u547D\u4EE4\u7EE7\u7EED\u5728\u540E\u53F0\u8FD0\u884C\uFF0C\u5E76\u8FD4\u56DE session_id
|
|
42896
|
+
- session_id: \u540E\u53F0\u8FD0\u884C\u4E2D\u7684 Bash \u4F1A\u8BDD ID\uFF08check/write/stop \u65F6\u4F7F\u7528\uFF09
|
|
42897
|
+
- input: \u5199\u5165\u540E\u53F0\u4F1A\u8BDD stdin \u7684\u5185\u5BB9\uFF08write \u65F6\u4F7F\u7528\uFF09
|
|
42894
42898
|
|
|
42895
42899
|
\u6CE8\u610F\u4E8B\u9879\uFF1A
|
|
42896
42900
|
- \u4E0D\u8981\u6267\u884C\u7834\u574F\u6027\u547D\u4EE4\uFF08\u5982 rm -rf /\uFF09
|
|
42897
|
-
- \u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\uFF08\u5982\u542F\u52A8\u670D\u52A1\u5668\uFF09\
|
|
42901
|
+
- \u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\uFF08\u5982\u542F\u52A8\u670D\u52A1\u5668\uFF09\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4\u540E\u4F1A\u4FDD\u7559\u4F1A\u8BDD\uFF0C\u53EF\u7528 session_id \u67E5\u8BE2\u589E\u91CF\u8F93\u51FA
|
|
42898
42902
|
- \u5982\u679C\u4F60\u5904\u4E8E\u90E8\u95E8\u5DE5\u4F5C\u533A\u6A21\u5F0F\uFF0Ccwd \u5FC5\u987B\u5728\u5DE5\u4F5C\u533A\u8303\u56F4\u5185
|
|
42899
42903
|
`;
|
|
42900
42904
|
var MAX_OUTPUT_LENGTH = 1e4;
|
|
42905
|
+
var MAX_SESSION_OUTPUT_LENGTH = 5e4;
|
|
42906
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
42907
|
+
var DEFAULT_SESSION_TTL_MS = 30 * 60 * 1e3;
|
|
42901
42908
|
var SHELL_CANDIDATES2 = ["/bin/sh", "/usr/bin/sh", "/bin/bash"];
|
|
42909
|
+
var sessions = /* @__PURE__ */ new Map();
|
|
42902
42910
|
function findExecutableShell2() {
|
|
42903
42911
|
for (const shell of SHELL_CANDIDATES2) {
|
|
42904
42912
|
try {
|
|
@@ -42928,12 +42936,70 @@ function validateCwd(cwd) {
|
|
|
42928
42936
|
return `[bash] \u9519\u8BEF: cwd \u4E0D\u53EF\u7528: ${cwd} (${err.message})`;
|
|
42929
42937
|
}
|
|
42930
42938
|
}
|
|
42939
|
+
function truncateOutput(output, limit = MAX_OUTPUT_LENGTH) {
|
|
42940
|
+
if (output.length <= limit) return output;
|
|
42941
|
+
return output.slice(0, limit) + `
|
|
42942
|
+
... (\u8F93\u51FA\u622A\u65AD\uFF0C\u5171 ${output.length} \u5B57\u7B26)`;
|
|
42943
|
+
}
|
|
42944
|
+
function appendSessionOutput(session, chunk, source) {
|
|
42945
|
+
const text2 = chunk.toString();
|
|
42946
|
+
session.output += source === "stderr" ? `[stderr]
|
|
42947
|
+
${text2}` : text2;
|
|
42948
|
+
if (session.output.length > MAX_SESSION_OUTPUT_LENGTH) {
|
|
42949
|
+
const removed = session.output.length - MAX_SESSION_OUTPUT_LENGTH;
|
|
42950
|
+
session.output = session.output.slice(removed);
|
|
42951
|
+
session.readOffset = Math.max(0, session.readOffset - removed);
|
|
42952
|
+
}
|
|
42953
|
+
}
|
|
42954
|
+
function finishSession(session, status, exitCode, signal) {
|
|
42955
|
+
if (session.status !== "running") return;
|
|
42956
|
+
session.status = status;
|
|
42957
|
+
session.exitCode = exitCode;
|
|
42958
|
+
session.signal = signal;
|
|
42959
|
+
session.finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
42960
|
+
if (status === "failed") {
|
|
42961
|
+
const prefix = session.output ? "\n" : "";
|
|
42962
|
+
session.output += `${prefix}[bash] \u547D\u4EE4\u9000\u51FA\u7801: ${exitCode ?? "unknown"}${signal ? `, signal: ${signal}` : ""}`;
|
|
42963
|
+
}
|
|
42964
|
+
}
|
|
42965
|
+
function renderSessionDelta(session, prefix) {
|
|
42966
|
+
const delta = session.output.slice(session.readOffset);
|
|
42967
|
+
session.readOffset = session.output.length;
|
|
42968
|
+
const body = delta ? truncateOutput(delta) : "[bash] \u6682\u65E0\u65B0\u8F93\u51FA";
|
|
42969
|
+
const state = session.status === "running" ? `\u4ECD\u5728\u8FD0\u884C` : `\u5DF2\u7ED3\u675F\uFF08status=${session.status}${session.exitCode === void 0 ? "" : `, exitCode=${session.exitCode}`}\uFF09`;
|
|
42970
|
+
return `${prefix}
|
|
42971
|
+
[bash] session_id=${session.id} ${state}
|
|
42972
|
+
${body}`;
|
|
42973
|
+
}
|
|
42974
|
+
function waitForClose(session, waitMs) {
|
|
42975
|
+
if (session.status !== "running") return Promise.resolve("closed");
|
|
42976
|
+
return new Promise((resolve11) => {
|
|
42977
|
+
const timer = setTimeout(() => {
|
|
42978
|
+
cleanup();
|
|
42979
|
+
resolve11("timeout");
|
|
42980
|
+
}, waitMs);
|
|
42981
|
+
const onClose = () => {
|
|
42982
|
+
cleanup();
|
|
42983
|
+
resolve11("closed");
|
|
42984
|
+
};
|
|
42985
|
+
const cleanup = () => {
|
|
42986
|
+
clearTimeout(timer);
|
|
42987
|
+
session.child.off("close", onClose);
|
|
42988
|
+
};
|
|
42989
|
+
session.child.once("close", onClose);
|
|
42990
|
+
});
|
|
42991
|
+
}
|
|
42931
42992
|
var bashTool = {
|
|
42932
42993
|
name: `bash`,
|
|
42933
42994
|
description: DESCRIPTION29,
|
|
42934
42995
|
input_schema: {
|
|
42935
42996
|
type: `object`,
|
|
42936
42997
|
properties: {
|
|
42998
|
+
action: {
|
|
42999
|
+
type: `string`,
|
|
43000
|
+
enum: [`run`, `check`, `write`, `stop`],
|
|
43001
|
+
description: `\u64CD\u4F5C\u7C7B\u578B\uFF1Arun \u6267\u884C\u547D\u4EE4\uFF1Bcheck \u8BFB\u53D6\u540E\u53F0\u4F1A\u8BDD\u589E\u91CF\u8F93\u51FA\uFF1Bwrite \u5411\u540E\u53F0\u4F1A\u8BDD stdin \u5199\u5165\u5185\u5BB9\uFF1Bstop \u505C\u6B62\u540E\u53F0\u4F1A\u8BDD\u3002\u9ED8\u8BA4 run`
|
|
43002
|
+
},
|
|
42937
43003
|
command: {
|
|
42938
43004
|
type: `string`,
|
|
42939
43005
|
description: `\u8981\u6267\u884C\u7684 shell \u547D\u4EE4`
|
|
@@ -42944,15 +43010,50 @@ var bashTool = {
|
|
|
42944
43010
|
},
|
|
42945
43011
|
timeout: {
|
|
42946
43012
|
type: `number`,
|
|
42947
|
-
description:
|
|
43013
|
+
description: `run \u65F6\u7B49\u5F85\u547D\u4EE4\u5B8C\u6210\u7684\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09\uFF0C\u9ED8\u8BA4 30000\u3002\u8D85\u8FC7\u540E\u8FD4\u56DE session_id\uFF0C\u547D\u4EE4\u7EE7\u7EED\u8FD0\u884C`
|
|
43014
|
+
},
|
|
43015
|
+
session_id: {
|
|
43016
|
+
type: `string`,
|
|
43017
|
+
description: `\u540E\u53F0 Bash \u4F1A\u8BDD ID\uFF0C\u7528\u4E8E check/write/stop`
|
|
43018
|
+
},
|
|
43019
|
+
input: {
|
|
43020
|
+
type: `string`,
|
|
43021
|
+
description: `write \u65F6\u5199\u5165 stdin \u7684\u5185\u5BB9`
|
|
42948
43022
|
}
|
|
42949
43023
|
},
|
|
42950
|
-
required: [
|
|
43024
|
+
required: []
|
|
42951
43025
|
},
|
|
42952
43026
|
async execute(input, userRequest) {
|
|
43027
|
+
const action = input.action || "run";
|
|
43028
|
+
const sessionId = input.session_id;
|
|
43029
|
+
if (action === "check" || action === "write" || action === "stop") {
|
|
43030
|
+
if (!sessionId) return `[bash] \u9519\u8BEF: ${action} \u9700\u8981 session_id`;
|
|
43031
|
+
const session = sessions.get(sessionId);
|
|
43032
|
+
if (!session) return `[bash] \u9519\u8BEF: \u672A\u627E\u5230 session_id: ${sessionId}`;
|
|
43033
|
+
if (action === "write") {
|
|
43034
|
+
if (session.status !== "running") {
|
|
43035
|
+
return renderSessionDelta(session, `[bash] session ${session.id} \u5DF2\u4E0D\u5728\u8FD0\u884C\uFF0C\u65E0\u6CD5\u5199\u5165 stdin`);
|
|
43036
|
+
}
|
|
43037
|
+
const stdin = input.input;
|
|
43038
|
+
if (stdin === void 0) return `[bash] \u9519\u8BEF: write \u9700\u8981 input`;
|
|
43039
|
+
session.child.stdin.write(stdin);
|
|
43040
|
+
return renderSessionDelta(session, `[bash] \u5DF2\u5199\u5165 session ${session.id} stdin`);
|
|
43041
|
+
}
|
|
43042
|
+
if (action === "stop") {
|
|
43043
|
+
if (session.status === "running") {
|
|
43044
|
+
session.child.kill("SIGTERM");
|
|
43045
|
+
finishSession(session, "stopped", null, "SIGTERM");
|
|
43046
|
+
}
|
|
43047
|
+
return renderSessionDelta(session, `[bash] \u5DF2\u505C\u6B62 session ${session.id}`);
|
|
43048
|
+
}
|
|
43049
|
+
return renderSessionDelta(session, `[bash] \u5DF2\u68C0\u67E5 session ${session.id}`);
|
|
43050
|
+
}
|
|
43051
|
+
if (action !== "run") {
|
|
43052
|
+
return `[bash] \u9519\u8BEF: \u4E0D\u652F\u6301\u7684 action: ${action}`;
|
|
43053
|
+
}
|
|
42953
43054
|
const command = input.command;
|
|
42954
43055
|
const explicitCwd = input.cwd || void 0;
|
|
42955
|
-
const timeout = input.timeout ||
|
|
43056
|
+
const timeout = input.timeout || DEFAULT_TIMEOUT_MS;
|
|
42956
43057
|
if (!command || command.trim() === "") {
|
|
42957
43058
|
return `[bash] \u9519\u8BEF: command \u4E0D\u80FD\u4E3A\u7A7A`;
|
|
42958
43059
|
}
|
|
@@ -42967,41 +43068,56 @@ var bashTool = {
|
|
|
42967
43068
|
if (!shell) {
|
|
42968
43069
|
return `[bash] \u9519\u8BEF: \u6267\u884C\u73AF\u5883\u7F3A\u5C11\u53EF\u7528 shell\uFF08\u5DF2\u68C0\u67E5 ${SHELL_CANDIDATES2.join(", ")}\uFF09\u3002\u8BF7\u5148\u68C0\u67E5\u5BB9\u5668\u955C\u50CF/rootfs/\u6302\u8F7D\u662F\u5426\u521D\u59CB\u5316\u5B8C\u6210\u3002`;
|
|
42969
43070
|
}
|
|
42970
|
-
return new Promise((resolve11) => {
|
|
43071
|
+
return new Promise(async (resolve11) => {
|
|
42971
43072
|
const options = {
|
|
42972
|
-
|
|
42973
|
-
maxBuffer: 1024 * 1024,
|
|
42974
|
-
// 1MB
|
|
42975
|
-
env: { ...process.env, PAGER: "cat" },
|
|
42976
|
-
shell
|
|
43073
|
+
env: { ...process.env, PAGER: "cat" }
|
|
42977
43074
|
};
|
|
42978
43075
|
if (cwd) options.cwd = cwd;
|
|
42979
|
-
(0, import_node_child_process.
|
|
42980
|
-
|
|
42981
|
-
|
|
42982
|
-
const trimmed = stdout.length > MAX_OUTPUT_LENGTH ? stdout.slice(0, MAX_OUTPUT_LENGTH) + `
|
|
42983
|
-
... (\u8F93\u51FA\u622A\u65AD\uFF0C\u5171 ${stdout.length} \u5B57\u7B26)` : stdout;
|
|
42984
|
-
output += trimmed;
|
|
42985
|
-
}
|
|
42986
|
-
if (stderr) {
|
|
42987
|
-
const trimmed = stderr.length > MAX_OUTPUT_LENGTH ? stderr.slice(0, MAX_OUTPUT_LENGTH) + `
|
|
42988
|
-
... (stderr \u622A\u65AD\uFF0C\u5171 ${stderr.length} \u5B57\u7B26)` : stderr;
|
|
42989
|
-
output += (output ? "\n" : "") + `[stderr]
|
|
42990
|
-
${trimmed}`;
|
|
42991
|
-
}
|
|
42992
|
-
if (error) {
|
|
42993
|
-
if (error.killed) {
|
|
42994
|
-
output += `
|
|
42995
|
-
[bash] \u547D\u4EE4\u8D85\u65F6\uFF08${timeout}ms\uFF09\uFF0C\u5DF2\u7EC8\u6B62`;
|
|
42996
|
-
} else if (!stderr) {
|
|
42997
|
-
output += (output ? "\n" : "") + `[bash] \u9519\u8BEF: ${error.message}`;
|
|
42998
|
-
}
|
|
42999
|
-
}
|
|
43000
|
-
if (!output) {
|
|
43001
|
-
output = "[bash] \u547D\u4EE4\u6267\u884C\u6210\u529F\uFF08\u65E0\u8F93\u51FA\uFF09";
|
|
43002
|
-
}
|
|
43003
|
-
resolve11(output);
|
|
43076
|
+
const child = (0, import_node_child_process.spawn)(shell, ["-c", command], {
|
|
43077
|
+
...options,
|
|
43078
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
43004
43079
|
});
|
|
43080
|
+
const id = (0, import_node_crypto7.randomUUID)().slice(0, 8);
|
|
43081
|
+
const session = {
|
|
43082
|
+
id,
|
|
43083
|
+
command,
|
|
43084
|
+
child,
|
|
43085
|
+
output: "",
|
|
43086
|
+
readOffset: 0,
|
|
43087
|
+
status: "running",
|
|
43088
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
43089
|
+
cleanupTimer: setTimeout(() => {
|
|
43090
|
+
const current = sessions.get(id);
|
|
43091
|
+
if (!current) return;
|
|
43092
|
+
if (current.status === "running") {
|
|
43093
|
+
current.child.kill("SIGTERM");
|
|
43094
|
+
finishSession(current, "stopped", null, "SIGTERM");
|
|
43095
|
+
}
|
|
43096
|
+
sessions.delete(id);
|
|
43097
|
+
}, DEFAULT_SESSION_TTL_MS)
|
|
43098
|
+
};
|
|
43099
|
+
sessions.set(id, session);
|
|
43100
|
+
child.stdout.on("data", (chunk) => appendSessionOutput(session, chunk, "stdout"));
|
|
43101
|
+
child.stderr.on("data", (chunk) => appendSessionOutput(session, chunk, "stderr"));
|
|
43102
|
+
child.on("error", (err) => {
|
|
43103
|
+
session.output += `[bash] \u9519\u8BEF: ${err.message}`;
|
|
43104
|
+
finishSession(session, "failed");
|
|
43105
|
+
});
|
|
43106
|
+
child.on("close", (code, signal) => {
|
|
43107
|
+
finishSession(session, code === 0 ? "completed" : "failed", code, signal);
|
|
43108
|
+
});
|
|
43109
|
+
const waitResult = await waitForClose(session, Math.max(0, timeout));
|
|
43110
|
+
if (waitResult === "timeout" && session.status === "running") {
|
|
43111
|
+
resolve11(renderSessionDelta(session, `[bash] \u547D\u4EE4\u4ECD\u5728\u8FD0\u884C\uFF0C\u5DF2\u4FDD\u7559\u540E\u53F0\u4F1A\u8BDD\u3002\u540E\u7EED\u4F7F\u7528 action=check \u548C session_id=${session.id} \u8BFB\u53D6\u8FDB\u5C55\uFF1B\u4F7F\u7528 action=stop \u53EF\u505C\u6B62\u3002`));
|
|
43112
|
+
return;
|
|
43113
|
+
}
|
|
43114
|
+
clearTimeout(session.cleanupTimer);
|
|
43115
|
+
sessions.delete(id);
|
|
43116
|
+
let output = session.output;
|
|
43117
|
+
if (!output) {
|
|
43118
|
+
output = session.status === "completed" ? "[bash] \u547D\u4EE4\u6267\u884C\u6210\u529F\uFF08\u65E0\u8F93\u51FA\uFF09" : "[bash] \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF08\u65E0\u8F93\u51FA\uFF09";
|
|
43119
|
+
}
|
|
43120
|
+
resolve11(truncateOutput(output));
|
|
43005
43121
|
});
|
|
43006
43122
|
}
|
|
43007
43123
|
};
|
|
@@ -43575,7 +43691,7 @@ var readDreamHistoryLimit = () => {
|
|
|
43575
43691
|
var import_node_fs5 = require("node:fs");
|
|
43576
43692
|
var import_node_os2 = require("node:os");
|
|
43577
43693
|
var import_node_path12 = require("node:path");
|
|
43578
|
-
var
|
|
43694
|
+
var import_node_crypto8 = require("node:crypto");
|
|
43579
43695
|
var SkillForgeEngine = class {
|
|
43580
43696
|
proposalStorage;
|
|
43581
43697
|
draftRoot;
|
|
@@ -43604,7 +43720,7 @@ var SkillForgeEngine = class {
|
|
|
43604
43720
|
if (pending.some((p) => p.skillName === skillName)) {
|
|
43605
43721
|
return null;
|
|
43606
43722
|
}
|
|
43607
|
-
const id = (0,
|
|
43723
|
+
const id = (0, import_node_crypto8.randomBytes)(4).toString("hex");
|
|
43608
43724
|
const draftDir = (0, import_node_path12.join)(this.draftRoot, userId, id);
|
|
43609
43725
|
(0, import_node_fs5.mkdirSync)(draftDir, { recursive: true });
|
|
43610
43726
|
(0, import_node_fs5.writeFileSync)((0, import_node_path12.join)(draftDir, "SKILL.md"), skillMd, "utf-8");
|
|
@@ -43852,7 +43968,7 @@ var skillForgeDrop = (engine) => ({
|
|
|
43852
43968
|
});
|
|
43853
43969
|
|
|
43854
43970
|
// src/memory/MemoryEngine.ts
|
|
43855
|
-
var
|
|
43971
|
+
var import_node_crypto9 = require("node:crypto");
|
|
43856
43972
|
var MemoryEngine = class {
|
|
43857
43973
|
storage;
|
|
43858
43974
|
recallIndexStorage;
|
|
@@ -43880,7 +43996,7 @@ var MemoryEngine = class {
|
|
|
43880
43996
|
}
|
|
43881
43997
|
const now = Date.now();
|
|
43882
43998
|
const memory = {
|
|
43883
|
-
id: (0,
|
|
43999
|
+
id: (0, import_node_crypto9.randomBytes)(4).toString("hex"),
|
|
43884
44000
|
userId,
|
|
43885
44001
|
title,
|
|
43886
44002
|
content,
|
|
@@ -44533,7 +44649,7 @@ var microCompactMessages = (messages, config2) => {
|
|
|
44533
44649
|
};
|
|
44534
44650
|
|
|
44535
44651
|
// src/agent/events.ts
|
|
44536
|
-
var
|
|
44652
|
+
var import_node_crypto10 = require("node:crypto");
|
|
44537
44653
|
var rowToEvent = (row) => ({
|
|
44538
44654
|
id: row.id,
|
|
44539
44655
|
userId: row.userId,
|
|
@@ -44550,7 +44666,7 @@ var rowToEvent = (row) => ({
|
|
|
44550
44666
|
var recordAgentEvent = (input) => {
|
|
44551
44667
|
const db3 = createSqliteDB();
|
|
44552
44668
|
const now = Date.now();
|
|
44553
|
-
const id = `evt_${(0,
|
|
44669
|
+
const id = `evt_${(0, import_node_crypto10.randomUUID)().slice(0, 12)}`;
|
|
44554
44670
|
const payloadJson = JSON.stringify(input.payload);
|
|
44555
44671
|
db3.prepare(`
|
|
44556
44672
|
INSERT INTO agent_events (
|
|
@@ -44682,7 +44798,7 @@ var assistantMessageFromResponse = (response) => ({
|
|
|
44682
44798
|
...response.model ? { model: response.model } : {}
|
|
44683
44799
|
});
|
|
44684
44800
|
var llmRequestIdForTurn = (request, messages, system, tools) => {
|
|
44685
|
-
const hash = (0,
|
|
44801
|
+
const hash = (0, import_node_crypto11.createHash)("sha256").update(request.requestId).update("\0").update(system).update("\0").update(JSON.stringify(messages)).update("\0").update(JSON.stringify(tools.map((tool) => tool.name).sort())).digest("hex").slice(0, 40);
|
|
44686
44802
|
return `dreq_${hash}`;
|
|
44687
44803
|
};
|
|
44688
44804
|
var getDefaultAgentConfig = (tools, systemPrompt) => {
|
|
@@ -50651,6 +50767,13 @@ var dateKeyInShanghai = (timestamp) => new Date(timestamp).toLocaleString("sv-SE
|
|
|
50651
50767
|
month: "2-digit",
|
|
50652
50768
|
day: "2-digit"
|
|
50653
50769
|
}).replace(/-/g, "");
|
|
50770
|
+
var recentDateKeysInShanghaiForTest = (now, days = 7) => {
|
|
50771
|
+
const keys = [];
|
|
50772
|
+
for (let i = days - 1; i >= 0; i--) {
|
|
50773
|
+
keys.push(dateKeyInShanghai(now - i * 864e5));
|
|
50774
|
+
}
|
|
50775
|
+
return keys;
|
|
50776
|
+
};
|
|
50654
50777
|
var messageToAgentLogEntry = (message, index) => ({
|
|
50655
50778
|
index,
|
|
50656
50779
|
role: message.role,
|
|
@@ -50679,8 +50802,7 @@ var collectConversationMessages = async (userId, limit = 300) => {
|
|
|
50679
50802
|
const storage = createRuntimeStorage(storageConf);
|
|
50680
50803
|
const now = Date.now();
|
|
50681
50804
|
const byDate = [];
|
|
50682
|
-
for (
|
|
50683
|
-
const dateStr = dateKeyInShanghai(now - i * 864e5);
|
|
50805
|
+
for (const dateStr of recentDateKeysInShanghaiForTest(now, 7)) {
|
|
50684
50806
|
const messages = await getMessages(storage, userId, limit, dateStr);
|
|
50685
50807
|
if (messages.length > 0) {
|
|
50686
50808
|
byDate.push(...messages.map((message) => ({ message, sourceKey: dateStr })));
|
|
@@ -50973,7 +51095,7 @@ var systemRoutes = new Hono2();
|
|
|
50973
51095
|
var startTime = Date.now();
|
|
50974
51096
|
systemRoutes.get("/system/info", (c) => {
|
|
50975
51097
|
return c.json({
|
|
50976
|
-
version: true ? "1.8.
|
|
51098
|
+
version: true ? "1.8.15" : "unknown",
|
|
50977
51099
|
uptime: Math.floor((Date.now() - startTime) / 1e3),
|
|
50978
51100
|
env: process.env.NODE_ENV || "development",
|
|
50979
51101
|
nodeVersion: process.version
|