@lobu/worker 3.5.0 → 4.1.0
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/core/workspace.d.ts +9 -13
- package/dist/core/workspace.d.ts.map +1 -1
- package/dist/core/workspace.js +13 -51
- package/dist/core/workspace.js.map +1 -1
- package/dist/embedded/just-bash-bootstrap.d.ts +2 -0
- package/dist/embedded/just-bash-bootstrap.d.ts.map +1 -1
- package/dist/embedded/just-bash-bootstrap.js +5 -4
- package/dist/embedded/just-bash-bootstrap.js.map +1 -1
- package/dist/embedded/mcp-cli-commands.js +1 -1
- package/dist/embedded/mcp-cli-commands.js.map +1 -1
- package/dist/gateway/sse-client.js +7 -4
- package/dist/gateway/sse-client.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/openclaw/custom-tools.d.ts +2 -0
- package/dist/openclaw/custom-tools.d.ts.map +1 -1
- package/dist/openclaw/custom-tools.js +1 -35
- package/dist/openclaw/custom-tools.js.map +1 -1
- package/dist/openclaw/processor.d.ts.map +1 -1
- package/dist/openclaw/processor.js +5 -18
- package/dist/openclaw/processor.js.map +1 -1
- package/dist/openclaw/sandbox-leak.d.ts +4 -5
- package/dist/openclaw/sandbox-leak.d.ts.map +1 -1
- package/dist/openclaw/sandbox-leak.js +28 -16
- package/dist/openclaw/sandbox-leak.js.map +1 -1
- package/dist/openclaw/session-context.d.ts.map +1 -1
- package/dist/openclaw/session-context.js +1 -2
- package/dist/openclaw/session-context.js.map +1 -1
- package/dist/openclaw/tools.d.ts.map +1 -1
- package/dist/openclaw/tools.js +3 -2
- package/dist/openclaw/tools.js.map +1 -1
- package/dist/openclaw/worker.d.ts.map +1 -1
- package/dist/openclaw/worker.js +54 -55
- package/dist/openclaw/worker.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -11
- package/dist/server.js.map +1 -1
- package/dist/shared/tool-implementations.d.ts +6 -10
- package/dist/shared/tool-implementations.d.ts.map +1 -1
- package/dist/shared/tool-implementations.js +5 -75
- package/dist/shared/tool-implementations.js.map +1 -1
- package/dist/shared/worker-env-keys.d.ts +6 -0
- package/dist/shared/worker-env-keys.d.ts.map +1 -0
- package/dist/shared/worker-env-keys.js +12 -0
- package/dist/shared/worker-env-keys.js.map +1 -0
- package/package.json +4 -4
- package/dist/core/url-utils.d.ts +0 -5
- package/dist/core/url-utils.d.ts.map +0 -1
- package/dist/core/url-utils.js +0 -13
- package/dist/core/url-utils.js.map +0 -1
- package/dist/shared/sensitive-env.d.ts +0 -5
- package/dist/shared/sensitive-env.d.ts.map +0 -1
- package/dist/shared/sensitive-env.js +0 -22
- package/dist/shared/sensitive-env.js.map +0 -1
|
@@ -60,8 +60,7 @@ class OpenClawProgressProcessor {
|
|
|
60
60
|
}
|
|
61
61
|
const assistantMessage = event.message;
|
|
62
62
|
if (assistantMessage.stopReason === "error" &&
|
|
63
|
-
|
|
64
|
-
assistantMessage.errorMessage.trim()) {
|
|
63
|
+
assistantMessage.errorMessage?.trim()) {
|
|
65
64
|
this.fatalErrorMessage = assistantMessage.errorMessage.trim();
|
|
66
65
|
return false;
|
|
67
66
|
}
|
|
@@ -70,23 +69,11 @@ class OpenClawProgressProcessor {
|
|
|
70
69
|
return false;
|
|
71
70
|
}
|
|
72
71
|
// Fallback: extract text from final message content
|
|
73
|
-
const content = event.message.content;
|
|
74
|
-
if (!Array.isArray(content)) {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
72
|
let extracted = false;
|
|
78
|
-
for (const block of content) {
|
|
79
|
-
if (block &&
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
block.type === "text" &&
|
|
83
|
-
"text" in block &&
|
|
84
|
-
typeof block.text === "string") {
|
|
85
|
-
const text = block.text;
|
|
86
|
-
if (text.trim()) {
|
|
87
|
-
this.chronologicalOutput += text;
|
|
88
|
-
extracted = true;
|
|
89
|
-
}
|
|
73
|
+
for (const block of assistantMessage.content) {
|
|
74
|
+
if (block.type === "text" && block.text.trim()) {
|
|
75
|
+
this.chronologicalOutput += block.text;
|
|
76
|
+
extracted = true;
|
|
90
77
|
}
|
|
91
78
|
}
|
|
92
79
|
return extracted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/openclaw/processor.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAE1C,+DAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,oBAAoB,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAa,yBAAyB;IAC5B,mBAAmB,GAAG,EAAE,CAAC;IACzB,eAAe,GAAG,EAAE,CAAC;IACrB,eAAe,GAAG,EAAE,CAAC;IACrB,cAAc,GAAG,KAAK,CAAC;IACvB,WAAW,GAA8C,IAAI,CAAC;IAC9D,eAAe,GAAG,KAAK,CAAC;IACxB,iBAAiB,GAAkB,IAAI,CAAC;IAEhD,iBAAiB,CAAC,OAAgB;QAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAAwB;QACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACvC,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,cAAc,GAAG,KAAK,CAAC,qBAAqB,CAAC;gBAEnD,IAAI,cAAc,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,mBAAmB,IAAI,cAAc,CAAC,KAAK,CAAC;oBACjD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,cAAc,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBAC7C,IAAI,CAAC,eAAe,IAAI,cAAc,CAAC,KAAK,CAAC;oBAC7C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,mBAAmB,IAAI,cAAc,CAAC,KAAK,CAAC;wBACjD,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,cAAc,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpE,IAAI,CAAC,mBAAmB,IAAI,qBAAqB,CAAC;oBAClD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBAClE,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC;oBACnC,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACvC,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/openclaw/processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* user-downloadable artifact, without having actually called
|
|
5
5
|
* `UploadUserFile`.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* positives that the previous broad substring check produced.
|
|
7
|
+
* Catches three structural delivery patterns (links, sandbox:// URLs,
|
|
8
|
+
* HTML attributes) plus a semantic pattern: a workspace path presented as
|
|
9
|
+
* "the file is at …" or "located at …" — the phrasing that tricks users
|
|
10
|
+
* into thinking the path is reachable.
|
|
12
11
|
*/
|
|
13
12
|
export interface LeakCheckResult {
|
|
14
13
|
/** True if the final message makes an unfulfilled file-delivery claim. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-leak.d.ts","sourceRoot":"","sources":["../../src/openclaw/sandbox-leak.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sandbox-leak.d.ts","sourceRoot":"","sources":["../../src/openclaw/sandbox-leak.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgCH,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB;6CACyC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,OAAO,GAC5B,eAAe,CA4CjB"}
|
|
@@ -5,32 +5,36 @@
|
|
|
5
5
|
* user-downloadable artifact, without having actually called
|
|
6
6
|
* `UploadUserFile`.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* positives that the previous broad substring check produced.
|
|
8
|
+
* Catches three structural delivery patterns (links, sandbox:// URLs,
|
|
9
|
+
* HTML attributes) plus a semantic pattern: a workspace path presented as
|
|
10
|
+
* "the file is at …" or "located at …" — the phrasing that tricks users
|
|
11
|
+
* into thinking the path is reachable.
|
|
13
12
|
*/
|
|
14
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
14
|
exports.checkSandboxLeak = checkSandboxLeak;
|
|
16
|
-
/**
|
|
17
|
-
* Matches Claude's `sandbox://` file-reference scheme. Any occurrence of
|
|
18
|
-
* this is unambiguously a delivery claim — the scheme exists for exactly
|
|
19
|
-
* that purpose.
|
|
20
|
-
*/
|
|
15
|
+
/** Claude's `sandbox://` file-reference scheme — always a delivery claim. */
|
|
21
16
|
const SANDBOX_URL_RE = /\bsandbox:\/{1,2}[^\s)\]}'"<>]+/gi;
|
|
22
17
|
/**
|
|
23
|
-
*
|
|
18
|
+
* Markdown link target pointing at a local workspace path, e.g.
|
|
24
19
|
* `[report](/app/workspaces/foo/bar.pdf)` or `[x](file:///workspace/y)`.
|
|
25
|
-
* The capture group is the URL/path portion so we can rewrite it.
|
|
26
20
|
*/
|
|
27
21
|
const LOCAL_MD_LINK_RE = /\]\(\s*((?:file:\/\/)?(?:\/app\/workspaces\/|\/workspace\/)[^\s)]+)\s*\)/gi;
|
|
28
22
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* redact; capture group 2 is the URL target.
|
|
23
|
+
* HTML `href`/`src` pointing at a local workspace path.
|
|
24
|
+
* Group 1 = attribute name, group 2 = URL target.
|
|
32
25
|
*/
|
|
33
26
|
const LOCAL_HREF_RE = /\b(href|src)\s*=\s*["']((?:file:\/\/)?(?:\/app\/workspaces\/|\/workspace\/)[^"']+)["']/gi;
|
|
27
|
+
/**
|
|
28
|
+
* A workspace path presented as a file location via delivery-intent phrasing
|
|
29
|
+
* (e.g. "located at", "saved to", "file is at", "available at").
|
|
30
|
+
* Only fires when the path has a file extension so directory descriptions
|
|
31
|
+
* in ls-style probes are not flagged.
|
|
32
|
+
*
|
|
33
|
+
* Matches both bare and back-ticked paths:
|
|
34
|
+
* "The file is located at: /app/workspaces/.../report.pdf"
|
|
35
|
+
* "saved to `/workspace/output/data.csv`"
|
|
36
|
+
*/
|
|
37
|
+
const DELIVERY_PHRASE_RE = /(?:located at|saved (?:to|at|in)|file is (?:at|in)|available at|created (?:at|in)|stored (?:at|in)|written to|exported to|generated (?:at|in))[:\s]+`?((?:\/app\/workspaces\/|\/workspace\/)[^\s`]+\.\w{1,10})`?/gi;
|
|
34
38
|
/**
|
|
35
39
|
* Inspect the agent's final user-facing message for unfulfilled file-delivery
|
|
36
40
|
* claims. If `sawUploadedFileEvent` is true (the agent actually called
|
|
@@ -45,11 +49,13 @@ function checkSandboxLeak(finalText, sawUploadedFileEvent) {
|
|
|
45
49
|
const hasSandboxUrl = SANDBOX_URL_RE.test(finalText);
|
|
46
50
|
const hasMdLink = LOCAL_MD_LINK_RE.test(finalText);
|
|
47
51
|
const hasHref = LOCAL_HREF_RE.test(finalText);
|
|
52
|
+
const hasDeliveryPhrase = DELIVERY_PHRASE_RE.test(finalText);
|
|
48
53
|
// Reset lastIndex — `test()` on /g regexes advances state.
|
|
49
54
|
SANDBOX_URL_RE.lastIndex = 0;
|
|
50
55
|
LOCAL_MD_LINK_RE.lastIndex = 0;
|
|
51
56
|
LOCAL_HREF_RE.lastIndex = 0;
|
|
52
|
-
|
|
57
|
+
DELIVERY_PHRASE_RE.lastIndex = 0;
|
|
58
|
+
if (!hasSandboxUrl && !hasMdLink && !hasHref && !hasDeliveryPhrase) {
|
|
53
59
|
return { leaked: false, redactedText: finalText };
|
|
54
60
|
}
|
|
55
61
|
// Redact: neutralise the link targets so the user doesn't see a broken
|
|
@@ -58,6 +64,12 @@ function checkSandboxLeak(finalText, sawUploadedFileEvent) {
|
|
|
58
64
|
redacted = redacted.replace(SANDBOX_URL_RE, "[local file, not uploaded]");
|
|
59
65
|
redacted = redacted.replace(LOCAL_MD_LINK_RE, "](about:blank)");
|
|
60
66
|
redacted = redacted.replace(LOCAL_HREF_RE, (_match, attr) => `${attr}="about:blank"`);
|
|
67
|
+
redacted = redacted.replace(DELIVERY_PHRASE_RE, (_match, _path, _offset, _full) => {
|
|
68
|
+
// Reconstruct the phrase prefix (everything before the path) by
|
|
69
|
+
// re-matching on the original substring. Simpler: replace the whole
|
|
70
|
+
// match with a generic note.
|
|
71
|
+
return "[file was created but not uploaded — use `UploadUserFile` to deliver it]";
|
|
72
|
+
});
|
|
61
73
|
const note = "\n\n_Note: I referenced a local file but did not actually upload it. " +
|
|
62
74
|
"Ask me to retry and I will use `UploadUserFile` to deliver it._";
|
|
63
75
|
return { leaked: true, redactedText: `${redacted}${note}` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-leak.js","sourceRoot":"","sources":["../../src/openclaw/sandbox-leak.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"sandbox-leak.js","sourceRoot":"","sources":["../../src/openclaw/sandbox-leak.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA+CH,4CA+CC;AA5FD,6EAA6E;AAC7E,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D;;;GAGG;AACH,MAAM,gBAAgB,GACpB,4EAA4E,CAAC;AAE/E;;;GAGG;AACH,MAAM,aAAa,GACjB,0FAA0F,CAAC;AAE7F;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GACtB,oNAAoN,CAAC;AAUvN;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,SAAiB,EACjB,oBAA6B;IAE7B,IAAI,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE7D,2DAA2D;IAC3D,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7B,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;IAC/B,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5B,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,uEAAuE;IACvE,2DAA2D;IAC3D,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;IAC1E,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAChE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,aAAa,EACb,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,gBAAgB,CAClD,CAAC;IACF,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,kBAAkB,EAClB,CAAC,MAAM,EAAE,KAAa,EAAE,OAAe,EAAE,KAAa,EAAE,EAAE;QACxD,gEAAgE;QAChE,oEAAoE;QACpE,6BAA6B;QAC7B,OAAO,0EAA0E,CAAC;IACpF,CAAC,CACF,CAAC;IAEF,MAAM,IAAI,GACR,uEAAuE;QACvE,iEAAiE,CAAC;IAEpE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../src/openclaw/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../src/openclaw/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAGvB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,cAAc;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,wFAAwF;IACxF,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAwCD;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD;AAqGD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;CAAO,GAC3C,OAAO,CAAC;IACT;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC,CAkHD"}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.invalidateSessionContextCache = invalidateSessionContextCache;
|
|
4
4
|
exports.getOpenClawSessionContext = getOpenClawSessionContext;
|
|
5
5
|
const core_1 = require("@lobu/core");
|
|
6
|
-
const url_utils_1 = require("../core/url-utils");
|
|
7
6
|
const logger = (0, core_1.createLogger)("openclaw-session-context");
|
|
8
7
|
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
9
8
|
const DEFAULT_SESSION_CONTEXT = {
|
|
@@ -116,7 +115,7 @@ async function getOpenClawSessionContext(opts = {}) {
|
|
|
116
115
|
return { ...DEFAULT_SESSION_CONTEXT };
|
|
117
116
|
}
|
|
118
117
|
try {
|
|
119
|
-
const url = new URL(`${(0,
|
|
118
|
+
const url = new URL(`${(0, core_1.ensureBaseUrl)(dispatcherUrl)}/worker/session-context`);
|
|
120
119
|
const response = await fetch(url, {
|
|
121
120
|
headers: {
|
|
122
121
|
Authorization: `Bearer ${workerToken}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../src/openclaw/session-context.ts"],"names":[],"mappings":";;AA6EA,sEAGC;AA2GD,8DAoIC;AA/TD,
|
|
1
|
+
{"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../src/openclaw/session-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/openclaw/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,KAAK,cAAc,EAQpB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/openclaw/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,KAAK,cAAc,EAQpB,MAAM,+BAA+B,CAAC;AAgIvC,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,cAAc,CAAA;CAAE,GAC5C,SAAS,CAAC,GAAG,CAAC,EAAE,CA0ClB"}
|
package/dist/openclaw/tools.js
CHANGED
|
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createOpenClawTools = createOpenClawTools;
|
|
4
4
|
const pi_coding_agent_1 = require("@mariozechner/pi-coding-agent");
|
|
5
5
|
const typebox_1 = require("@sinclair/typebox");
|
|
6
|
+
const core_1 = require("@lobu/core");
|
|
6
7
|
const tool_policy_1 = require("./tool-policy");
|
|
7
|
-
const
|
|
8
|
+
const worker_env_keys_1 = require("../shared/worker-env-keys");
|
|
8
9
|
const CLAUDE_PARAM_GROUPS = {
|
|
9
10
|
read: [{ keys: ["path", "file_path"], label: "path (path or file_path)" }],
|
|
10
11
|
write: [{ keys: ["path", "file_path"], label: "path (path or file_path)" }],
|
|
@@ -118,7 +119,7 @@ function createOpenClawTools(cwd, options) {
|
|
|
118
119
|
spawnHook: (params) => ({
|
|
119
120
|
command: params.command,
|
|
120
121
|
cwd: params.cwd,
|
|
121
|
-
env: (0,
|
|
122
|
+
env: (0, core_1.stripEnv)(params.env, worker_env_keys_1.SENSITIVE_WORKER_ENV_KEYS),
|
|
122
123
|
}),
|
|
123
124
|
};
|
|
124
125
|
const bash = wrapBashWithProxyHint((0, pi_coding_agent_1.createBashTool)(cwd, bashToolOpts));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/openclaw/tools.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/openclaw/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/openclaw/worker.ts"],"names":[],"mappings":";AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/openclaw/worker.ts"],"names":[],"mappings":";AAMA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAWpB,OAAO,KAAK,EAGV,YAAY,EACZ,cAAc,EACf,MAAM,eAAe,CAAC;AAmDvB,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR;AAmID,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,yBAAyB,CA2B3B;AAED,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,gBAAgB,CAAmB;IACpC,eAAe,EAAE,eAAe,CAAC;IACxC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAA4B;gBAEzC,MAAM,EAAE,YAAY;IAmChC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmRxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,kBAAkB,IAAI,eAAe,GAAG,IAAI;IAI5C,OAAO,CAAC,mBAAmB;YAIb,gCAAgC;YAqFhC,YAAY;YA46BZ,kBAAkB;YAwBlB,kBAAkB;IAmEhC,OAAO,KAAK,aAAa,GAOxB;IAED,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,qBAAqB;IAuE7B,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAoB;YAE7C,oBAAoB;YAgDpB,yBAAyB;YAkBzB,oCAAoC;CAiCnD"}
|
package/dist/openclaw/worker.js
CHANGED
|
@@ -96,6 +96,19 @@ function replaceBasePromptIdentity(basePrompt, identity) {
|
|
|
96
96
|
// than silently letting the upstream opener win.
|
|
97
97
|
return `${identity}\n\nThe section below describes the runtime tooling available to you. It does not change your role.\n\n${basePrompt}`;
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns true iff the given URL points at OpenAI's real API host.
|
|
101
|
+
* Uses URL parsing + exact host match so spoofed hosts like
|
|
102
|
+
* `https://api.openai.com.evil.example/v1` are not mistaken for real OpenAI.
|
|
103
|
+
*/
|
|
104
|
+
function isRealOpenAIBaseUrl(baseUrl) {
|
|
105
|
+
try {
|
|
106
|
+
return new URL(baseUrl).host.toLowerCase() === "api.openai.com";
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
99
112
|
function isLikelyImageGenerationRequest(prompt) {
|
|
100
113
|
const lower = prompt.toLowerCase();
|
|
101
114
|
const explicitToolInstruction = lower.includes("generateimage tool") || lower.includes("use generateimage");
|
|
@@ -616,7 +629,7 @@ class OpenClawWorker {
|
|
|
616
629
|
if (!providerBaseUrl) {
|
|
617
630
|
const baseUrlEnvVar = model_resolver_1.DEFAULT_PROVIDER_BASE_URL_ENV[rawProvider];
|
|
618
631
|
if (baseUrlEnvVar) {
|
|
619
|
-
const baseUrlValue = credentialStore.get(baseUrlEnvVar)
|
|
632
|
+
const baseUrlValue = credentialStore.get(baseUrlEnvVar);
|
|
620
633
|
if (baseUrlValue) {
|
|
621
634
|
providerBaseUrl = baseUrlValue;
|
|
622
635
|
}
|
|
@@ -646,9 +659,27 @@ class OpenClawWorker {
|
|
|
646
659
|
throw new Error(`Model "${modelId}" not found for provider "${provider}". Check that the model ID is valid and registered in the model registry.`);
|
|
647
660
|
}
|
|
648
661
|
}
|
|
649
|
-
const
|
|
662
|
+
const resolvedModel = providerBaseUrl
|
|
650
663
|
? { ...baseModel, baseUrl: providerBaseUrl }
|
|
651
664
|
: baseModel;
|
|
665
|
+
// Defensive: any `openai-completions` model whose baseUrl is not real
|
|
666
|
+
// OpenAI is a third-party compat endpoint (Gemini, Nvidia, Together, z.ai,
|
|
667
|
+
// etc.). These reject unknown fields and 400 with "Unknown name 'store'"
|
|
668
|
+
// if pi-ai sends `store: false`. Force it off regardless of whether the
|
|
669
|
+
// model came from the static registry or the dynamic fallback above.
|
|
670
|
+
//
|
|
671
|
+
// Host comparison uses URL parsing (not `.startsWith`) so that a baseUrl
|
|
672
|
+
// like `https://api.openai.com.evil.example/v1` doesn't get mistaken for
|
|
673
|
+
// real OpenAI. Malformed URLs are treated as third-party (safer default).
|
|
674
|
+
const isThirdPartyOpenAICompat = resolvedModel.api === "openai-completions" &&
|
|
675
|
+
typeof resolvedModel.baseUrl === "string" &&
|
|
676
|
+
!isRealOpenAIBaseUrl(resolvedModel.baseUrl);
|
|
677
|
+
const model = isThirdPartyOpenAICompat
|
|
678
|
+
? {
|
|
679
|
+
...resolvedModel,
|
|
680
|
+
compat: { ...(resolvedModel.compat ?? {}), supportsStore: false },
|
|
681
|
+
}
|
|
682
|
+
: resolvedModel;
|
|
652
683
|
const workspaceDir = this.getWorkingDirectory();
|
|
653
684
|
await fs.mkdir(path.join(workspaceDir, ".openclaw"), { recursive: true });
|
|
654
685
|
const sessionFile = path.join(workspaceDir, ".openclaw", "session.jsonl");
|
|
@@ -728,16 +759,18 @@ class OpenClawWorker {
|
|
|
728
759
|
}),
|
|
729
760
|
};
|
|
730
761
|
const gwParams = {
|
|
731
|
-
gatewayUrl:
|
|
732
|
-
workerToken:
|
|
762
|
+
gatewayUrl: (0, core_1.getOptionalEnv)("DISPATCHER_URL", ""),
|
|
763
|
+
workerToken: (0, core_1.getOptionalEnv)("WORKER_TOKEN", ""),
|
|
733
764
|
channelId: this.config.channelId,
|
|
734
765
|
conversationId: this.config.conversationId,
|
|
735
766
|
platform: this.config.platform,
|
|
767
|
+
workspaceDir,
|
|
736
768
|
};
|
|
737
769
|
let embeddedBashOps;
|
|
738
770
|
if (isEmbedded) {
|
|
739
771
|
const { createEmbeddedBashOps } = await Promise.resolve().then(() => __importStar(require("../embedded/just-bash-bootstrap")));
|
|
740
772
|
embeddedBashOps = await createEmbeddedBashOps({
|
|
773
|
+
workspaceDir,
|
|
741
774
|
mcpRuntimeRef,
|
|
742
775
|
gw: gwParams,
|
|
743
776
|
mcpExposure,
|
|
@@ -764,8 +797,8 @@ class OpenClawWorker {
|
|
|
764
797
|
};
|
|
765
798
|
});
|
|
766
799
|
}
|
|
767
|
-
const gatewayUrl =
|
|
768
|
-
const workerToken =
|
|
800
|
+
const gatewayUrl = (0, core_1.getOptionalEnv)("DISPATCHER_URL", "");
|
|
801
|
+
const workerToken = (0, core_1.getOptionalEnv)("WORKER_TOKEN", "");
|
|
769
802
|
// Credential injection — resolve API key from the in-memory credential store,
|
|
770
803
|
// falling back to process.env only for values that were present at startup.
|
|
771
804
|
const authStorage = new pi_coding_agent_1.AuthStorage();
|
|
@@ -791,7 +824,7 @@ class OpenClawWorker {
|
|
|
791
824
|
if (!providerBaseUrl) {
|
|
792
825
|
const baseUrlEnvVar = model_resolver_1.DEFAULT_PROVIDER_BASE_URL_ENV[rawProvider];
|
|
793
826
|
if (baseUrlEnvVar) {
|
|
794
|
-
const baseUrlValue = credentialStore.get(baseUrlEnvVar)
|
|
827
|
+
const baseUrlValue = credentialStore.get(baseUrlEnvVar);
|
|
795
828
|
if (baseUrlValue) {
|
|
796
829
|
providerBaseUrl = baseUrlValue;
|
|
797
830
|
}
|
|
@@ -838,6 +871,7 @@ You have access to GetChannelHistory to view previous messages in this thread.
|
|
|
838
871
|
Use it when the user references past discussions or you need context.`);
|
|
839
872
|
const customTools = (0, custom_tools_1.createOpenClawCustomTools)({
|
|
840
873
|
...gwParams,
|
|
874
|
+
workspaceDir,
|
|
841
875
|
onCustomEvent: async (name, data) => {
|
|
842
876
|
await onProgress({
|
|
843
877
|
type: "custom_event",
|
|
@@ -888,46 +922,6 @@ Use it when the user references past discussions or you need context.`);
|
|
|
888
922
|
}
|
|
889
923
|
}
|
|
890
924
|
await (0, plugin_loader_1.startPluginServices)(loadedPlugins);
|
|
891
|
-
// Proactive owletto login: call owletto_login to check auth status.
|
|
892
|
-
// If not authenticated, inject the login link into instructions so the model
|
|
893
|
-
// can relay it to the user without needing to call tools itself.
|
|
894
|
-
{
|
|
895
|
-
const loginTool = pluginTools.find((t) => t.name === "owletto_login");
|
|
896
|
-
if (loginTool) {
|
|
897
|
-
logger.info("Checking Owletto auth status via proactive login");
|
|
898
|
-
try {
|
|
899
|
-
const loginResult = await loginTool.execute("proactive-login", {}, undefined, undefined, undefined);
|
|
900
|
-
const resultText = loginResult?.content
|
|
901
|
-
?.filter((c) => c.type === "text" && typeof c.text === "string")
|
|
902
|
-
.map((c) => c.text)
|
|
903
|
-
.join("\n") || "";
|
|
904
|
-
logger.info(`Owletto login result: ${resultText.slice(0, 200)}`);
|
|
905
|
-
const parsed = JSON.parse(resultText);
|
|
906
|
-
if (parsed.status === "login_started" && parsed.verification_url) {
|
|
907
|
-
// Send login link directly to the user — don't rely on the model
|
|
908
|
-
const loginMessage = `🔑 Memory requires login. Open this link to connect:\n${parsed.verification_url}${parsed.user_code ? `\nCode: ${parsed.user_code}` : ""}\n\n`;
|
|
909
|
-
await onProgress({
|
|
910
|
-
type: "output",
|
|
911
|
-
data: loginMessage,
|
|
912
|
-
timestamp: Date.now(),
|
|
913
|
-
});
|
|
914
|
-
logger.info("Proactive owletto login started — login link sent directly to user");
|
|
915
|
-
instructionParts.push(`\n\n## Owletto Login In Progress\nThe login link and code have already been sent directly to the user by the system. Do not repeat the verification URL or code unless the user explicitly asks. Do not call owletto_login again while authentication is pending. If the current request depends on Owletto, tell the user briefly to complete login and reply once done.`);
|
|
916
|
-
}
|
|
917
|
-
else if (parsed.status === "already_authenticated") {
|
|
918
|
-
logger.info("Owletto already authenticated");
|
|
919
|
-
}
|
|
920
|
-
else if (parsed.status === "error") {
|
|
921
|
-
logger.warn(`Owletto login returned error: ${parsed.message}`);
|
|
922
|
-
instructionParts.push(`\n\n## Owletto Memory Not Connected\nOwletto memory is not connected and login could not be started automatically. Tell the user they need to connect their Owletto memory. If owletto_login tool is available, call it to try again. Otherwise tell them an admin or an existing auth flow is required.`);
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
|
-
catch (err) {
|
|
926
|
-
logger.warn(`Proactive owletto login failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
927
|
-
instructionParts.push(`\n\n## Owletto Memory Not Connected\nOwletto memory is not connected. Tell the user they need to connect their memory via Owletto. If the owletto_login tool is available, call it to start the login flow.`);
|
|
928
|
-
}
|
|
929
|
-
}
|
|
930
|
-
}
|
|
931
925
|
// Rebuild final instructions after possible login link injection
|
|
932
926
|
const finalInstructionsUpdated = instructionParts
|
|
933
927
|
.filter(Boolean)
|
|
@@ -1349,21 +1343,27 @@ Use it when the user references past discussions or you need context.`);
|
|
|
1349
1343
|
getFileIOInstructions() {
|
|
1350
1344
|
const workspaceDir = this.workspaceManager.getCurrentWorkingDirectory();
|
|
1351
1345
|
const files = this.uploadedFiles;
|
|
1346
|
+
const fileOutputRules = `
|
|
1347
|
+
**Mandatory workflow for ANY file you create or generate:**
|
|
1348
|
+
1. Write the file to disk (e.g. \`output/report.pdf\`).
|
|
1349
|
+
2. Call \`UploadUserFile\` with the file path — this is the ONLY way the user can access it.
|
|
1350
|
+
3. Confirm delivery ONLY after \`UploadUserFile\` succeeds.
|
|
1351
|
+
|
|
1352
|
+
**Workspace paths are not accessible to users.** Paths like \`/workspace/...\` or \`/app/workspaces/...\` are internal sandbox paths. Never show them as file locations, download links, or "saved at" references. The user cannot reach them. Always use \`UploadUserFile\` instead.`;
|
|
1352
1353
|
if (files.length === 0) {
|
|
1353
1354
|
return `
|
|
1354
1355
|
|
|
1355
1356
|
## File Generation & Output
|
|
1356
1357
|
|
|
1358
|
+
${fileOutputRules}
|
|
1359
|
+
|
|
1357
1360
|
**When to Create Files:**
|
|
1358
|
-
Create and show files for any output that helps answer the user's request
|
|
1361
|
+
Create and show files for any output that helps answer the user's request:
|
|
1359
1362
|
- **Charts & visualizations**: pie charts, bar graphs, plots, diagrams via \`matplotlib\`
|
|
1360
1363
|
- **Reports & documents**: analysis reports, summaries, PDFs
|
|
1361
1364
|
- **Data files**: CSV exports, JSON data, spreadsheets
|
|
1362
1365
|
- **Code files**: scripts, configurations, examples
|
|
1363
1366
|
- **Images**: generated images, processed photos, screenshots.
|
|
1364
|
-
- If the user asked you to send, share, attach, upload, export, or make a file downloadable, this sequence is required: create the file, call \`UploadUserFile\`, then tell the user it was sent only if the tool succeeds.
|
|
1365
|
-
- **Never** present \`sandbox:/\`, workspace paths, or local filesystem links as if they were real user-downloadable files.
|
|
1366
|
-
- **Never** say a file was sent unless \`UploadUserFile\` actually succeeded.
|
|
1367
1367
|
`;
|
|
1368
1368
|
}
|
|
1369
1369
|
const fileListing = files
|
|
@@ -1384,16 +1384,15 @@ Create and show files for any output that helps answer the user's request by usi
|
|
|
1384
1384
|
|
|
1385
1385
|
## File Generation & Output
|
|
1386
1386
|
|
|
1387
|
+
${fileOutputRules}
|
|
1388
|
+
|
|
1387
1389
|
**When to Create Files:**
|
|
1388
|
-
Create and show files for any output that helps answer the user's request
|
|
1390
|
+
Create and show files for any output that helps answer the user's request:
|
|
1389
1391
|
- **Charts & visualizations**: pie charts, bar graphs, plots, diagrams via \`matplotlib\`
|
|
1390
1392
|
- **Reports & documents**: analysis reports, summaries, PDFs
|
|
1391
1393
|
- **Data files**: CSV exports, JSON data, spreadsheets
|
|
1392
1394
|
- **Code files**: scripts, configurations, examples
|
|
1393
1395
|
- **Images**: generated images, processed photos, screenshots.
|
|
1394
|
-
- If the user asked you to send, share, attach, upload, export, or make a file downloadable, this sequence is required: create the file, call \`UploadUserFile\`, then tell the user it was sent only if the tool succeeds.
|
|
1395
|
-
- **Never** present \`sandbox:/\`, workspace paths, or local filesystem links as if they were real user-downloadable files.
|
|
1396
|
-
- **Never** say a file was sent unless \`UploadUserFile\` actually succeeded.
|
|
1397
1396
|
|
|
1398
1397
|
### User-Uploaded Files
|
|
1399
1398
|
The user has uploaded ${files.length} file(s) for you to analyze:
|