@lobu/worker 2.8.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.
Files changed (117) hide show
  1. package/dist/core/error-handler.d.ts +7 -0
  2. package/dist/core/error-handler.d.ts.map +1 -0
  3. package/dist/core/error-handler.js +58 -0
  4. package/dist/core/error-handler.js.map +1 -0
  5. package/dist/core/project-scanner.d.ts +9 -0
  6. package/dist/core/project-scanner.d.ts.map +1 -0
  7. package/dist/core/project-scanner.js +64 -0
  8. package/dist/core/project-scanner.js.map +1 -0
  9. package/dist/core/types.d.ts +102 -0
  10. package/dist/core/types.d.ts.map +1 -0
  11. package/dist/core/types.js +8 -0
  12. package/dist/core/types.js.map +1 -0
  13. package/dist/core/url-utils.d.ts +5 -0
  14. package/dist/core/url-utils.d.ts.map +1 -0
  15. package/dist/core/url-utils.js +13 -0
  16. package/dist/core/url-utils.js.map +1 -0
  17. package/dist/core/workspace.d.ts +29 -0
  18. package/dist/core/workspace.d.ts.map +1 -0
  19. package/dist/core/workspace.js +104 -0
  20. package/dist/core/workspace.js.map +1 -0
  21. package/dist/embedded/just-bash-bootstrap.d.ts +21 -0
  22. package/dist/embedded/just-bash-bootstrap.d.ts.map +1 -0
  23. package/dist/embedded/just-bash-bootstrap.js +215 -0
  24. package/dist/embedded/just-bash-bootstrap.js.map +1 -0
  25. package/dist/gateway/gateway-integration.d.ts +57 -0
  26. package/dist/gateway/gateway-integration.d.ts.map +1 -0
  27. package/dist/gateway/gateway-integration.js +209 -0
  28. package/dist/gateway/gateway-integration.js.map +1 -0
  29. package/dist/gateway/message-batcher.d.ts +27 -0
  30. package/dist/gateway/message-batcher.d.ts.map +1 -0
  31. package/dist/gateway/message-batcher.js +102 -0
  32. package/dist/gateway/message-batcher.js.map +1 -0
  33. package/dist/gateway/sse-client.d.ts +74 -0
  34. package/dist/gateway/sse-client.d.ts.map +1 -0
  35. package/dist/gateway/sse-client.js +748 -0
  36. package/dist/gateway/sse-client.js.map +1 -0
  37. package/dist/gateway/types.d.ts +60 -0
  38. package/dist/gateway/types.d.ts.map +1 -0
  39. package/dist/gateway/types.js +6 -0
  40. package/dist/gateway/types.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +112 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/instructions/builder.d.ts +8 -0
  46. package/dist/instructions/builder.d.ts.map +1 -0
  47. package/dist/instructions/builder.js +53 -0
  48. package/dist/instructions/builder.js.map +1 -0
  49. package/dist/instructions/providers.d.ts +13 -0
  50. package/dist/instructions/providers.d.ts.map +1 -0
  51. package/dist/instructions/providers.js +26 -0
  52. package/dist/instructions/providers.js.map +1 -0
  53. package/dist/modules/lifecycle.d.ts +18 -0
  54. package/dist/modules/lifecycle.d.ts.map +1 -0
  55. package/dist/modules/lifecycle.js +56 -0
  56. package/dist/modules/lifecycle.js.map +1 -0
  57. package/dist/openclaw/custom-tools.d.ts +17 -0
  58. package/dist/openclaw/custom-tools.d.ts.map +1 -0
  59. package/dist/openclaw/custom-tools.js +195 -0
  60. package/dist/openclaw/custom-tools.js.map +1 -0
  61. package/dist/openclaw/instructions.d.ts +15 -0
  62. package/dist/openclaw/instructions.d.ts.map +1 -0
  63. package/dist/openclaw/instructions.js +32 -0
  64. package/dist/openclaw/instructions.js.map +1 -0
  65. package/dist/openclaw/model-resolver.d.ts +30 -0
  66. package/dist/openclaw/model-resolver.d.ts.map +1 -0
  67. package/dist/openclaw/model-resolver.js +147 -0
  68. package/dist/openclaw/model-resolver.js.map +1 -0
  69. package/dist/openclaw/plugin-loader.d.ts +39 -0
  70. package/dist/openclaw/plugin-loader.d.ts.map +1 -0
  71. package/dist/openclaw/plugin-loader.js +347 -0
  72. package/dist/openclaw/plugin-loader.js.map +1 -0
  73. package/dist/openclaw/processor.d.ts +38 -0
  74. package/dist/openclaw/processor.d.ts.map +1 -0
  75. package/dist/openclaw/processor.js +182 -0
  76. package/dist/openclaw/processor.js.map +1 -0
  77. package/dist/openclaw/session-context.d.ts +44 -0
  78. package/dist/openclaw/session-context.d.ts.map +1 -0
  79. package/dist/openclaw/session-context.js +151 -0
  80. package/dist/openclaw/session-context.js.map +1 -0
  81. package/dist/openclaw/tool-policy.d.ts +23 -0
  82. package/dist/openclaw/tool-policy.d.ts.map +1 -0
  83. package/dist/openclaw/tool-policy.js +151 -0
  84. package/dist/openclaw/tool-policy.js.map +1 -0
  85. package/dist/openclaw/tools.d.ts +6 -0
  86. package/dist/openclaw/tools.d.ts.map +1 -0
  87. package/dist/openclaw/tools.js +158 -0
  88. package/dist/openclaw/tools.js.map +1 -0
  89. package/dist/openclaw/worker.d.ts +39 -0
  90. package/dist/openclaw/worker.d.ts.map +1 -0
  91. package/dist/openclaw/worker.js +1340 -0
  92. package/dist/openclaw/worker.js.map +1 -0
  93. package/dist/server.d.ts +7 -0
  94. package/dist/server.d.ts.map +1 -0
  95. package/dist/server.js +304 -0
  96. package/dist/server.js.map +1 -0
  97. package/dist/shared/audio-provider-suggestions.d.ts +13 -0
  98. package/dist/shared/audio-provider-suggestions.d.ts.map +1 -0
  99. package/dist/shared/audio-provider-suggestions.js +105 -0
  100. package/dist/shared/audio-provider-suggestions.js.map +1 -0
  101. package/dist/shared/processor-utils.d.ts +6 -0
  102. package/dist/shared/processor-utils.d.ts.map +1 -0
  103. package/dist/shared/processor-utils.js +30 -0
  104. package/dist/shared/processor-utils.js.map +1 -0
  105. package/dist/shared/provider-auth-hints.d.ts +6 -0
  106. package/dist/shared/provider-auth-hints.d.ts.map +1 -0
  107. package/dist/shared/provider-auth-hints.js +51 -0
  108. package/dist/shared/provider-auth-hints.js.map +1 -0
  109. package/dist/shared/tool-display-config.d.ts +16 -0
  110. package/dist/shared/tool-display-config.d.ts.map +1 -0
  111. package/dist/shared/tool-display-config.js +67 -0
  112. package/dist/shared/tool-display-config.js.map +1 -0
  113. package/dist/shared/tool-implementations.d.ts +55 -0
  114. package/dist/shared/tool-implementations.d.ts.map +1 -0
  115. package/dist/shared/tool-implementations.js +519 -0
  116. package/dist/shared/tool-implementations.js.map +1 -0
  117. package/package.json +55 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invalidateSessionContextCache = invalidateSessionContextCache;
4
+ exports.getOpenClawSessionContext = getOpenClawSessionContext;
5
+ const core_1 = require("@lobu/core");
6
+ const url_utils_1 = require("../core/url-utils");
7
+ const logger = (0, core_1.createLogger)("openclaw-session-context");
8
+ const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
9
+ const DEFAULT_SESSION_CONTEXT = {
10
+ gatewayInstructions: "",
11
+ providerConfig: {},
12
+ skillsConfig: [],
13
+ mcpTools: {},
14
+ mcpContext: {},
15
+ };
16
+ // Module-level cache for session context
17
+ let cachedResult = null;
18
+ /**
19
+ * Invalidate the session context cache.
20
+ * Called by the SSE client when a config_changed event is received.
21
+ */
22
+ function invalidateSessionContextCache() {
23
+ cachedResult = null;
24
+ logger.info("Session context cache invalidated");
25
+ }
26
+ function buildMcpInstructions(mcpStatus, mcpToolIds) {
27
+ if (!mcpStatus || mcpStatus.length === 0) {
28
+ return "";
29
+ }
30
+ // MCPs with no tools at all that need setup (explicit auth/input requirements)
31
+ const undiscoveredMcps = mcpStatus.filter((mcp) => !mcpToolIds.has(mcp.id) &&
32
+ ((mcp.requiresAuth && !mcp.authenticated) ||
33
+ (mcp.requiresInput && !mcp.configured)));
34
+ // MCPs with tools visible but still needing auth to use them
35
+ const unauthenticatedMcps = mcpStatus.filter((mcp) => mcpToolIds.has(mcp.id) && mcp.requiresAuth && !mcp.authenticated);
36
+ // MCPs with no tools and no explicit auth requirement — may need plugin-level
37
+ // authentication (e.g. owletto device auth flow via owletto_login tool)
38
+ const pluginAuthMcps = mcpStatus.filter((mcp) => !mcpToolIds.has(mcp.id) && !mcp.requiresAuth && !mcp.requiresInput);
39
+ if (undiscoveredMcps.length === 0 &&
40
+ unauthenticatedMcps.length === 0 &&
41
+ pluginAuthMcps.length === 0) {
42
+ return "";
43
+ }
44
+ const lines = ["## MCP Tools Requiring Setup"];
45
+ for (const mcp of undiscoveredMcps) {
46
+ const reasons = [];
47
+ if (mcp.requiresAuth && !mcp.authenticated) {
48
+ reasons.push("OAuth authentication");
49
+ }
50
+ if (mcp.requiresInput && !mcp.configured) {
51
+ reasons.push("configuration");
52
+ }
53
+ lines.push(`- ⚠️ **${mcp.name}** (id: ${mcp.id}): Requires ${reasons.join(" and ")}. Start the relevant login flow if a login tool exists; otherwise tell the user an admin must connect it.`);
54
+ }
55
+ for (const mcp of unauthenticatedMcps) {
56
+ lines.push(`- ⚠️ **${mcp.name}** (id: ${mcp.id}): Tools are visible but require authentication to use. Start the relevant login flow if available; otherwise tell the user an admin must connect it.`);
57
+ }
58
+ for (const mcp of pluginAuthMcps) {
59
+ lines.push(`- **IMPORTANT** — **${mcp.name}** (id: ${mcp.id}): Memory tools (save_knowledge, search_knowledge) are NOT available because authentication is required. You MUST call the \`${mcp.id}_login\` tool NOW to start the login flow. After the user completes login in their browser, call \`${mcp.id}_login_check\` to finish authentication. Do NOT tell the user that memory is unavailable — instead, initiate login immediately.`);
60
+ }
61
+ return lines.join("\n");
62
+ }
63
+ function buildMcpServerInstructions(mcpInstructions) {
64
+ const entries = Object.entries(mcpInstructions).filter(([, v]) => v);
65
+ if (entries.length === 0)
66
+ return "";
67
+ const lines = ["## MCP Server Instructions", ""];
68
+ for (const [mcpId, instructions] of entries) {
69
+ lines.push(`### ${mcpId}`, "", instructions, "");
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ /**
74
+ * Fetch session context from gateway for OpenClaw worker.
75
+ * Returns gateway instructions and dynamic provider configuration.
76
+ * Caches the result until invalidated by a config_changed SSE event.
77
+ * Skips MCP server config (OpenClaw doesn't use Claude SDK's MCP format).
78
+ */
79
+ async function getOpenClawSessionContext() {
80
+ if (cachedResult && Date.now() - cachedResult.cachedAt < CACHE_TTL_MS) {
81
+ logger.debug("Returning cached session context");
82
+ return cachedResult;
83
+ }
84
+ const dispatcherUrl = process.env.DISPATCHER_URL;
85
+ const workerToken = process.env.WORKER_TOKEN;
86
+ if (!dispatcherUrl || !workerToken) {
87
+ logger.warn("Missing dispatcher URL or worker token for session context");
88
+ return { ...DEFAULT_SESSION_CONTEXT };
89
+ }
90
+ try {
91
+ const url = new URL("/worker/session-context", (0, url_utils_1.ensureBaseUrl)(dispatcherUrl));
92
+ const response = await fetch(url, {
93
+ headers: {
94
+ Authorization: `Bearer ${workerToken}`,
95
+ },
96
+ });
97
+ if (!response.ok) {
98
+ logger.warn("Gateway returned non-success status for session context", {
99
+ status: response.status,
100
+ });
101
+ return { ...DEFAULT_SESSION_CONTEXT };
102
+ }
103
+ const data = (await response.json());
104
+ logger.info(`Received session context: ${data.platformInstructions.length} chars platform instructions, ${data.mcpStatus.length} MCP status entries, provider: ${data.providerConfig?.defaultProvider || "none"}, cliBackends: ${data.providerConfig?.cliBackends?.map((b) => b.name).join(", ") || "none"}`);
105
+ const toolMcpIds = new Set(Object.keys(data.mcpTools || {}));
106
+ const mcpSetupInstructions = buildMcpInstructions(data.mcpStatus, toolMcpIds);
107
+ // Include MCP server instructions for all servers (with or without tools).
108
+ // These provide workspace context (available connectors, entity schemas, etc.)
109
+ // that helps the agent use the tools effectively.
110
+ const mcpServerInstructions = buildMcpServerInstructions(data.mcpInstructions || {});
111
+ const gatewayInstructions = [
112
+ data.agentInstructions,
113
+ data.platformInstructions,
114
+ data.networkInstructions,
115
+ data.skillsInstructions,
116
+ mcpSetupInstructions,
117
+ mcpServerInstructions,
118
+ ]
119
+ .filter(Boolean)
120
+ .join("\n\n");
121
+ const mcpTools = data.mcpTools || {};
122
+ logger.info(`Built gateway instructions: agent (${(data.agentInstructions || "").length} chars) + platform (${data.platformInstructions.length} chars) + network (${data.networkInstructions.length} chars) + skills (${(data.skillsInstructions || "").length} chars) + MCP setup (${mcpSetupInstructions.length} chars) + MCP server instructions (${mcpServerInstructions.length} chars), mcpTools: ${Object.keys(mcpTools).length} servers`);
123
+ const mcpContext = data.mcpContext || {};
124
+ const result = {
125
+ gatewayInstructions,
126
+ providerConfig: data.providerConfig || {},
127
+ skillsConfig: data.skillsConfig || [],
128
+ mcpTools,
129
+ mcpContext,
130
+ };
131
+ // Don't cache if any authenticated MCP returned no tools — likely a
132
+ // transient upstream failure that should be retried on the next message.
133
+ const hasEmptyAuthenticatedMcp = data.mcpStatus.some((mcp) => mcp.authenticated && !toolMcpIds.has(mcp.id));
134
+ if (!hasEmptyAuthenticatedMcp) {
135
+ cachedResult = { ...result, cachedAt: Date.now() };
136
+ }
137
+ else {
138
+ logger.warn("Skipping session context cache — authenticated MCP(s) returned no tools", {
139
+ emptyMcps: data.mcpStatus
140
+ .filter((mcp) => mcp.authenticated && !toolMcpIds.has(mcp.id))
141
+ .map((mcp) => mcp.id),
142
+ });
143
+ }
144
+ return result;
145
+ }
146
+ catch (error) {
147
+ logger.error("Failed to fetch session context from gateway", { error });
148
+ return { ...DEFAULT_SESSION_CONTEXT };
149
+ }
150
+ }
151
+ //# sourceMappingURL=session-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../src/openclaw/session-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ToolsConfig } from "@lobu/core";
2
+ export type BashCommandPolicy = {
3
+ allowAll: boolean;
4
+ allowPrefixes: string[];
5
+ denyPrefixes: string[];
6
+ };
7
+ export type ToolPolicy = {
8
+ toolsConfig?: ToolsConfig;
9
+ allowedPatterns: string[];
10
+ deniedPatterns: string[];
11
+ strictMode: boolean;
12
+ bashPolicy: BashCommandPolicy;
13
+ };
14
+ export declare function isDirectPackageInstallCommand(command: string): boolean;
15
+ export declare function normalizeToolList(value?: string | string[]): string[];
16
+ export declare function buildToolPolicy(params: {
17
+ toolsConfig?: ToolsConfig;
18
+ allowedTools?: string | string[];
19
+ disallowedTools?: string | string[];
20
+ }): ToolPolicy;
21
+ export declare function isToolAllowedByPolicy(toolName: string, policy: ToolPolicy): boolean;
22
+ export declare function enforceBashCommandPolicy(command: string, policy: BashCommandPolicy): void;
23
+ //# sourceMappingURL=tool-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy.d.ts","sourceRoot":"","sources":["../../src/openclaw/tool-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AA2BF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAStE;AAUD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAUrE;AA4BD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACrC,GAAG,UAAU,CAyCb;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CA8BT;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,IAAI,CA4BN"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDirectPackageInstallCommand = isDirectPackageInstallCommand;
4
+ exports.normalizeToolList = normalizeToolList;
5
+ exports.buildToolPolicy = buildToolPolicy;
6
+ exports.isToolAllowedByPolicy = isToolAllowedByPolicy;
7
+ exports.enforceBashCommandPolicy = enforceBashCommandPolicy;
8
+ const DEFAULT_PACKAGE_MANAGER_DENY_PREFIXES = [
9
+ "apt ",
10
+ "apt-get ",
11
+ "yum ",
12
+ "dnf ",
13
+ "apk ",
14
+ "pacman ",
15
+ "zypper ",
16
+ "brew ",
17
+ "nix-shell ",
18
+ "nix-env ",
19
+ "nix profile ",
20
+ "sudo apt ",
21
+ "sudo apt-get ",
22
+ "sudo yum ",
23
+ "sudo dnf ",
24
+ "sudo apk ",
25
+ "sudo pacman ",
26
+ "sudo zypper ",
27
+ "sudo brew ",
28
+ "sudo nix-shell ",
29
+ "sudo nix-env ",
30
+ "sudo nix profile ",
31
+ ];
32
+ function isDirectPackageInstallCommand(command) {
33
+ const trimmed = command.trim().toLowerCase();
34
+ if (!trimmed) {
35
+ return false;
36
+ }
37
+ return DEFAULT_PACKAGE_MANAGER_DENY_PREFIXES.some((prefix) => trimmed.startsWith(prefix.toLowerCase()));
38
+ }
39
+ function normalizePattern(pattern) {
40
+ return pattern.trim();
41
+ }
42
+ function normalizeToolName(name) {
43
+ return name.trim().toLowerCase();
44
+ }
45
+ function normalizeToolList(value) {
46
+ if (!value) {
47
+ return [];
48
+ }
49
+ const rawList = Array.isArray(value) ? value : value.split(/[,\n]/);
50
+ return rawList
51
+ .map((entry) => typeof entry === "string" ? entry.trim() : String(entry).trim())
52
+ .filter((entry) => entry.length > 0);
53
+ }
54
+ function parseBashFilter(pattern) {
55
+ const match = pattern.match(/^Bash\(([^:]+):\*\)$/i);
56
+ if (!match) {
57
+ return null;
58
+ }
59
+ const prefix = match[1]?.trim();
60
+ return prefix ? prefix : null;
61
+ }
62
+ function matchesToolPattern(toolName, pattern) {
63
+ const normalizedTool = normalizeToolName(toolName);
64
+ const normalizedPattern = normalizePattern(pattern);
65
+ const normalizedPatternLower = normalizedPattern.toLowerCase();
66
+ if (normalizedPattern === "*") {
67
+ return true;
68
+ }
69
+ if (normalizedPatternLower.endsWith("*")) {
70
+ const prefix = normalizedPatternLower.slice(0, -1);
71
+ return normalizedTool.startsWith(prefix);
72
+ }
73
+ return normalizedTool === normalizedPatternLower;
74
+ }
75
+ function buildToolPolicy(params) {
76
+ const allowedPatterns = normalizeToolList(params.allowedTools);
77
+ const deniedPatterns = normalizeToolList(params.disallowedTools);
78
+ const toolsConfig = params.toolsConfig;
79
+ const strictMode = toolsConfig?.strictMode === true;
80
+ const mergedAllowed = [
81
+ ...(toolsConfig?.allowedTools ?? []),
82
+ ...allowedPatterns,
83
+ ].map(normalizePattern);
84
+ const mergedDenied = [
85
+ ...(toolsConfig?.deniedTools ?? []),
86
+ ...deniedPatterns,
87
+ ].map(normalizePattern);
88
+ const bashAllowPrefixes = mergedAllowed
89
+ .map((pattern) => parseBashFilter(pattern))
90
+ .filter((prefix) => Boolean(prefix));
91
+ const bashDenyPrefixes = mergedDenied
92
+ .map((pattern) => parseBashFilter(pattern))
93
+ .filter((prefix) => Boolean(prefix));
94
+ const bashAllowAll = mergedAllowed.some((pattern) => matchesToolPattern("bash", pattern));
95
+ return {
96
+ toolsConfig,
97
+ allowedPatterns: mergedAllowed,
98
+ deniedPatterns: mergedDenied,
99
+ strictMode,
100
+ bashPolicy: {
101
+ allowAll: bashAllowAll,
102
+ allowPrefixes: bashAllowPrefixes,
103
+ denyPrefixes: [
104
+ ...DEFAULT_PACKAGE_MANAGER_DENY_PREFIXES,
105
+ ...bashDenyPrefixes,
106
+ ],
107
+ },
108
+ };
109
+ }
110
+ function isToolAllowedByPolicy(toolName, policy) {
111
+ const normalizedName = normalizeToolName(toolName);
112
+ const { allowedPatterns, deniedPatterns, strictMode } = policy;
113
+ const explicitDenied = deniedPatterns.some((pattern) => !parseBashFilter(pattern) && matchesToolPattern(normalizedName, pattern));
114
+ if (explicitDenied) {
115
+ return false;
116
+ }
117
+ if (normalizedName === "bash") {
118
+ if (strictMode) {
119
+ const explicitlyAllowed = allowedPatterns.some((pattern) => matchesToolPattern(normalizedName, pattern));
120
+ const hasCommandAllowlist = policy.bashPolicy.allowPrefixes.length > 0;
121
+ return explicitlyAllowed || hasCommandAllowlist;
122
+ }
123
+ return true;
124
+ }
125
+ if (!strictMode) {
126
+ return true;
127
+ }
128
+ return allowedPatterns.some((pattern) => matchesToolPattern(normalizedName, pattern));
129
+ }
130
+ function enforceBashCommandPolicy(command, policy) {
131
+ const trimmed = command.trim();
132
+ if (!trimmed) {
133
+ return;
134
+ }
135
+ const normalizedCommand = trimmed.toLowerCase();
136
+ const denyMatchPrefix = policy.denyPrefixes.find((prefix) => normalizedCommand.startsWith(prefix.toLowerCase()));
137
+ if (denyMatchPrefix) {
138
+ throw new Error("Bash command denied by policy");
139
+ }
140
+ if (policy.allowAll) {
141
+ return;
142
+ }
143
+ if (policy.allowPrefixes.length === 0) {
144
+ return;
145
+ }
146
+ const allowMatch = policy.allowPrefixes.some((prefix) => normalizedCommand.startsWith(prefix.toLowerCase()));
147
+ if (!allowMatch) {
148
+ throw new Error("Bash command not allowed by policy");
149
+ }
150
+ }
151
+ //# sourceMappingURL=tool-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy.js","sourceRoot":"","sources":["../../src/openclaw/tool-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { type BashOperations } from "@mariozechner/pi-coding-agent";
3
+ export declare function createOpenClawTools(cwd: string, options?: {
4
+ bashOperations?: BashOperations;
5
+ }): AgentTool<any>[];
6
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +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;AA8HvC,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,cAAc,CAAA;CAAE,GAC5C,SAAS,CAAC,GAAG,CAAC,EAAE,CAiClB"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOpenClawTools = createOpenClawTools;
4
+ const pi_coding_agent_1 = require("@mariozechner/pi-coding-agent");
5
+ const typebox_1 = require("@sinclair/typebox");
6
+ const tool_policy_1 = require("./tool-policy");
7
+ const CLAUDE_PARAM_GROUPS = {
8
+ read: [{ keys: ["path", "file_path"], label: "path (path or file_path)" }],
9
+ write: [{ keys: ["path", "file_path"], label: "path (path or file_path)" }],
10
+ edit: [
11
+ { keys: ["path", "file_path"], label: "path (path or file_path)" },
12
+ {
13
+ keys: ["oldText", "old_string"],
14
+ label: "oldText (oldText or old_string)",
15
+ },
16
+ {
17
+ keys: ["newText", "new_string"],
18
+ label: "newText (newText or new_string)",
19
+ },
20
+ ],
21
+ };
22
+ function normalizeToolParams(params) {
23
+ if (!params || typeof params !== "object") {
24
+ return undefined;
25
+ }
26
+ const record = params;
27
+ const normalized = { ...record };
28
+ if ("file_path" in normalized && !("path" in normalized)) {
29
+ normalized.path = normalized.file_path;
30
+ delete normalized.file_path;
31
+ }
32
+ if ("old_string" in normalized && !("oldText" in normalized)) {
33
+ normalized.oldText = normalized.old_string;
34
+ delete normalized.old_string;
35
+ }
36
+ if ("new_string" in normalized && !("newText" in normalized)) {
37
+ normalized.newText = normalized.new_string;
38
+ delete normalized.new_string;
39
+ }
40
+ return normalized;
41
+ }
42
+ function assertRequiredParams(params, groups) {
43
+ for (const group of groups) {
44
+ const hasValue = group.keys.some((key) => {
45
+ const value = params[key];
46
+ if (value === undefined || value === null) {
47
+ return false;
48
+ }
49
+ if (!group.allowEmpty &&
50
+ typeof value === "string" &&
51
+ value.trim() === "") {
52
+ return false;
53
+ }
54
+ return true;
55
+ });
56
+ if (!hasValue) {
57
+ const label = group.label ?? group.keys.join(" or ");
58
+ throw new Error(`Missing required parameter: ${label}`);
59
+ }
60
+ }
61
+ }
62
+ function wrapToolWithNormalization(params) {
63
+ const { tool, required, schema } = params;
64
+ return {
65
+ ...tool,
66
+ parameters: schema,
67
+ execute: async (toolCallId, rawParams, signal, onUpdate) => {
68
+ const normalized = normalizeToolParams(rawParams) ?? {};
69
+ assertRequiredParams(normalized, required);
70
+ return tool.execute(toolCallId, normalized, signal, onUpdate);
71
+ },
72
+ };
73
+ }
74
+ function buildReadSchema() {
75
+ return typebox_1.Type.Object({
76
+ path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
77
+ file_path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
78
+ offset: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Start reading at this byte offset" })),
79
+ limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Maximum bytes to read" })),
80
+ });
81
+ }
82
+ function buildWriteSchema() {
83
+ return typebox_1.Type.Object({
84
+ path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
85
+ file_path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
86
+ content: typebox_1.Type.String({ description: "Content to write" }),
87
+ });
88
+ }
89
+ function buildEditSchema() {
90
+ return typebox_1.Type.Object({
91
+ path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
92
+ file_path: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Path to the file" })),
93
+ oldText: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Text to replace" })),
94
+ old_string: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Text to replace" })),
95
+ newText: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Replacement text" })),
96
+ new_string: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Replacement text" })),
97
+ });
98
+ }
99
+ function createOpenClawTools(cwd, options) {
100
+ const read = wrapToolWithNormalization({
101
+ tool: (0, pi_coding_agent_1.createReadTool)(cwd),
102
+ required: CLAUDE_PARAM_GROUPS.read,
103
+ schema: buildReadSchema(),
104
+ });
105
+ const write = wrapToolWithNormalization({
106
+ tool: (0, pi_coding_agent_1.createWriteTool)(cwd),
107
+ required: CLAUDE_PARAM_GROUPS.write,
108
+ schema: buildWriteSchema(),
109
+ });
110
+ const edit = wrapToolWithNormalization({
111
+ tool: (0, pi_coding_agent_1.createEditTool)(cwd),
112
+ required: CLAUDE_PARAM_GROUPS.edit,
113
+ schema: buildEditSchema(),
114
+ });
115
+ const bashToolOpts = options?.bashOperations
116
+ ? { operations: options.bashOperations }
117
+ : undefined;
118
+ const bash = wrapBashWithProxyHint((0, pi_coding_agent_1.createBashTool)(cwd, bashToolOpts));
119
+ return [
120
+ read,
121
+ write,
122
+ edit,
123
+ bash,
124
+ (0, pi_coding_agent_1.createGrepTool)(cwd),
125
+ (0, pi_coding_agent_1.createFindTool)(cwd),
126
+ (0, pi_coding_agent_1.createLsTool)(cwd),
127
+ ];
128
+ }
129
+ /**
130
+ * Wrap bash tool to detect proxy CONNECT 403 errors and append a hint.
131
+ * curl doesn't display the proxy response body for CONNECT failures,
132
+ * so the model never sees "Domain not allowed" — only exit code 56.
133
+ */
134
+ function wrapBashWithProxyHint(tool) {
135
+ const PROXY_403_PATTERN = /Received HTTP code 403 from proxy after CONNECT/i;
136
+ return {
137
+ ...tool,
138
+ execute: async (toolCallId, params, signal, onUpdate) => {
139
+ const command = params && typeof params === "object" && "command" in params
140
+ ? String(params.command ?? "")
141
+ : "";
142
+ if ((0, tool_policy_1.isDirectPackageInstallCommand)(command)) {
143
+ throw new Error("DIRECT PACKAGE INSTALL BLOCKED. Install system packages with nixPackages in lobu.toml or agent settings instead of using package managers inside the worker.");
144
+ }
145
+ try {
146
+ return await tool.execute(toolCallId, params, signal, onUpdate);
147
+ }
148
+ catch (err) {
149
+ const msg = err?.message ?? String(err);
150
+ if (PROXY_403_PATTERN.test(msg)) {
151
+ throw new Error(`DOMAIN BLOCKED BY PROXY. The domain is blocked at the network level. Network access is configured via lobu.toml or the gateway configuration APIs — do NOT retry the request.\n\n${msg}`);
152
+ }
153
+ throw err;
154
+ }
155
+ },
156
+ };
157
+ }
158
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/openclaw/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bun
2
+ import { type WorkerTransport } from "@lobu/core";
3
+ import type { WorkerConfig, WorkerExecutor } from "../core/types";
4
+ interface ResolvedMemoryFlushConfig {
5
+ enabled: boolean;
6
+ softThresholdTokens: number;
7
+ systemPrompt: string;
8
+ prompt: string;
9
+ }
10
+ export declare function estimatePromptTokenCost(promptText: string, imageCount: number): number;
11
+ export declare function resolveMemoryFlushConfig(rawOptions: Record<string, unknown>): ResolvedMemoryFlushConfig;
12
+ export declare class OpenClawWorker implements WorkerExecutor {
13
+ private workspaceManager;
14
+ workerTransport: WorkerTransport;
15
+ private config;
16
+ private progressProcessor;
17
+ constructor(config: WorkerConfig);
18
+ /**
19
+ * Main execution workflow
20
+ */
21
+ execute(): Promise<void>;
22
+ cleanup(): Promise<void>;
23
+ getWorkerTransport(): WorkerTransport | null;
24
+ private getWorkingDirectory;
25
+ private maybeRunPreCompactionMemoryFlush;
26
+ private runAISession;
27
+ private setupIODirectories;
28
+ private downloadInputFiles;
29
+ private get uploadedFiles();
30
+ private static isImage;
31
+ private getFileIOInstructions;
32
+ /** Max image size to embed in prompt (20 MB). Larger files are skipped. */
33
+ private static readonly MAX_IMAGE_BYTES;
34
+ private loadImageAttachments;
35
+ private maybeBuildAuthHintMessage;
36
+ private maybeBuildAudioPermissionHintMessage;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/openclaw/worker.ts"],"names":[],"mappings":";AAMA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAWpB,OAAO,KAAK,EAGV,YAAY,EACZ,cAAc,EACf,MAAM,eAAe,CAAC;AAiDvB,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAoID,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;IA8PxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,kBAAkB,IAAI,eAAe,GAAG,IAAI;IAI5C,OAAO,CAAC,mBAAmB;YAIb,gCAAgC;YAqFhC,YAAY;YA62BZ,kBAAkB;YAwBlB,kBAAkB;IAgEhC,OAAO,KAAK,aAAa,GAMxB;IAED,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,qBAAqB;IA2D7B,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAoB;YAE7C,oBAAoB;YAgDpB,yBAAyB;YAkBzB,oCAAoC;CAiCnD"}