@heretek-ai/openclaw 2026.3.24 → 2026.3.25
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/CHANGELOG.md +1 -1
- package/README.md +102 -507
- package/dist/.buildstamp +1 -1
- package/dist/dns-cli-A_DUY2mI.js +2 -2
- package/dist/env-overrides-DbK0fm-W.js +1 -1
- package/dist/paths-ViKUYWUK.js +1 -1
- package/dist/pi-embedded-doAakoP8.js +6 -6
- package/dist/plugin-sdk/src/agents/subagent-orphan-recovery.d.ts +1 -1
- package/dist/plugin-sdk/src/config/paths.d.ts +1 -1
- package/dist/plugin-sdk/src/config/types.gateway.d.ts +1 -1
- package/dist/plugin-sdk/src/cron/service/state.d.ts +3 -3
- package/dist/plugin-sdk/src/infra/exec-obfuscation-detect.d.ts +1 -1
- package/dist/plugin-sdk/src/infra/outbound/agent-delivery.d.ts +1 -1
- package/dist/plugin-sdk/src/infra/outbound/sanitize-text.d.ts +2 -2
- package/dist/plugin-sdk/src/infra/outbound/targets.d.ts +1 -1
- package/dist/prompt-select-styled-CR725EJM.js +2 -2
- package/dist/register.setup-CVyj44Ne.js +1 -1
- package/dist/server-startup-matrix-migration-W3FCsqhA.js +1 -1
- package/dist/setup.finalize-2dj2-0Le.js +1 -1
- package/dist/subagent-orphan-recovery-BsV6yVqW.js +1 -1
- package/dist/update-cli-CUVntZUl.js +1 -1
- package/docs/automation/hooks.md +1 -1
- package/docs/channels/feishu.md +1 -1
- package/docs/channels/group-messages.md +1 -1
- package/docs/channels/irc.md +1 -1
- package/docs/channels/msteams.md +1 -1
- package/docs/channels/signal.md +1 -1
- package/docs/cli/config.md +2 -2
- package/docs/cli/doctor.md +1 -1
- package/docs/cli/gateway.md +1 -1
- package/docs/cli/sandbox.md +1 -1
- package/docs/cli/setup.md +1 -1
- package/docs/cli/update.md +1 -1
- package/docs/concepts/agent-workspace.md +3 -3
- package/docs/concepts/agent.md +1 -1
- package/docs/concepts/context-engine.md +1 -1
- package/docs/concepts/multi-agent.md +2 -2
- package/docs/concepts/retry.md +1 -1
- package/docs/concepts/session.md +2 -2
- package/docs/concepts/typebox.md +1 -1
- package/docs/diagnostics/flags.md +4 -4
- package/docs/docs.json +2 -2
- package/docs/gateway/bonjour.md +2 -2
- package/docs/gateway/bridge-protocol.md +1 -1
- package/docs/gateway/configuration-examples.md +2 -2
- package/docs/gateway/configuration-reference.md +4 -4
- package/docs/gateway/configuration.md +5 -5
- package/docs/gateway/discovery.md +1 -1
- package/docs/gateway/doctor.md +3 -3
- package/docs/gateway/health.md +1 -1
- package/docs/gateway/logging.md +1 -1
- package/docs/gateway/security/index.md +4 -4
- package/docs/gateway/troubleshooting.md +1 -1
- package/docs/help/environment.md +2 -2
- package/docs/help/faq.md +17 -17
- package/docs/help/testing.md +1 -1
- package/docs/index.html +230 -0
- package/docs/index.md +1 -1
- package/docs/install/ansible.md +9 -9
- package/docs/install/docker.md +5 -5
- package/docs/install/fly.md +1 -1
- package/docs/install/gcp.md +1 -1
- package/docs/install/hetzner.md +1 -1
- package/docs/install/index.md +2 -2
- package/docs/install/kubernetes.md +1 -1
- package/docs/install/macos-vm.md +1 -1
- package/docs/install/podman.md +4 -4
- package/docs/install/updating.md +1 -1
- package/docs/ja-JP/index.md +1 -1
- package/docs/logging.md +4 -4
- package/docs/nodes/talk.md +1 -1
- package/docs/perplexity.md +1 -1
- package/docs/platforms/android.md +2 -2
- package/docs/platforms/mac/bundled-gateway.md +1 -1
- package/docs/platforms/mac/dev-setup.md +2 -2
- package/docs/platforms/mac/health.md +1 -1
- package/docs/platforms/mac/signing.md +2 -2
- package/docs/platforms/mac/skills.md +1 -1
- package/docs/platforms/raspberry-pi.md +1 -1
- package/docs/platforms/windows.md +1 -1
- package/docs/providers/minimax.md +1 -1
- package/docs/reference/RELEASING.md +2 -2
- package/docs/reference/test.md +2 -2
- package/docs/reference/wizard.md +2 -2
- package/docs/start/lore.md +1 -1
- package/docs/start/openclaw.md +1 -1
- package/docs/start/setup.md +2 -2
- package/docs/start/wizard-cli-reference.md +2 -2
- package/docs/tm4-deployment-testing.md +1 -1
- package/docs/tools/browser-linux-troubleshooting.md +1 -1
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +1 -1
- package/docs/tools/browser.md +1 -1
- package/docs/tools/diffs.md +1 -1
- package/docs/tools/perplexity-search.md +1 -1
- package/docs/tools/skills-config.md +1 -1
- package/docs/tools/skills.md +2 -2
- package/docs/web/control-ui.md +1 -1
- package/docs/zh-CN/AGENTS.md +1 -1
- package/docs/zh-CN/automation/hooks.md +1 -1
- package/docs/zh-CN/channels/feishu.md +1 -1
- package/docs/zh-CN/channels/group-messages.md +1 -1
- package/docs/zh-CN/channels/imessage.md +1 -1
- package/docs/zh-CN/channels/msteams.md +1 -1
- package/docs/zh-CN/channels/whatsapp.md +2 -2
- package/docs/zh-CN/cli/doctor.md +1 -1
- package/docs/zh-CN/cli/gateway.md +1 -1
- package/docs/zh-CN/cli/sandbox.md +1 -1
- package/docs/zh-CN/cli/setup.md +1 -1
- package/docs/zh-CN/concepts/agent-workspace.md +3 -3
- package/docs/zh-CN/concepts/agent.md +1 -1
- package/docs/zh-CN/concepts/multi-agent.md +2 -2
- package/docs/zh-CN/concepts/retry.md +1 -1
- package/docs/zh-CN/concepts/session.md +1 -1
- package/docs/zh-CN/concepts/typebox.md +1 -1
- package/docs/zh-CN/diagnostics/flags.md +4 -4
- package/docs/zh-CN/gateway/bonjour.md +2 -2
- package/docs/zh-CN/gateway/bridge-protocol.md +1 -1
- package/docs/zh-CN/gateway/configuration-examples.md +2 -2
- package/docs/zh-CN/gateway/configuration-reference.md +5 -5
- package/docs/zh-CN/gateway/configuration.md +5 -5
- package/docs/zh-CN/gateway/discovery.md +1 -1
- package/docs/zh-CN/gateway/doctor.md +3 -3
- package/docs/zh-CN/gateway/health.md +1 -1
- package/docs/zh-CN/gateway/index.md +1 -1
- package/docs/zh-CN/gateway/logging.md +1 -1
- package/docs/zh-CN/gateway/security/index.md +2 -2
- package/docs/zh-CN/gateway/troubleshooting.md +8 -8
- package/docs/zh-CN/help/environment.md +1 -1
- package/docs/zh-CN/help/faq.md +16 -16
- package/docs/zh-CN/help/testing.md +1 -1
- package/docs/zh-CN/index.md +1 -1
- package/docs/zh-CN/install/ansible.md +9 -9
- package/docs/zh-CN/install/docker.md +1 -1
- package/docs/zh-CN/install/fly.md +1 -1
- package/docs/zh-CN/install/gcp.md +1 -1
- package/docs/zh-CN/install/hetzner.md +1 -1
- package/docs/zh-CN/install/index.md +4 -4
- package/docs/zh-CN/install/macos-vm.md +1 -1
- package/docs/zh-CN/install/nix.md +1 -1
- package/docs/zh-CN/install/updating.md +2 -2
- package/docs/zh-CN/logging.md +4 -4
- package/docs/zh-CN/nodes/index.md +1 -1
- package/docs/zh-CN/nodes/talk.md +1 -1
- package/docs/zh-CN/platforms/android.md +1 -1
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +1 -1
- package/docs/zh-CN/platforms/mac/dev-setup.md +2 -2
- package/docs/zh-CN/platforms/mac/health.md +1 -1
- package/docs/zh-CN/platforms/mac/signing.md +2 -2
- package/docs/zh-CN/platforms/mac/skills.md +1 -1
- package/docs/zh-CN/platforms/raspberry-pi.md +1 -1
- package/docs/zh-CN/platforms/windows.md +1 -1
- package/docs/zh-CN/providers/minimax.md +1 -1
- package/docs/zh-CN/reference/RELEASING.md +2 -2
- package/docs/zh-CN/reference/test.md +1 -1
- package/docs/zh-CN/reference/wizard.md +2 -2
- package/docs/zh-CN/start/lore.md +1 -1
- package/docs/zh-CN/start/openclaw.md +2 -2
- package/docs/zh-CN/start/quickstart.md +1 -1
- package/docs/zh-CN/start/setup.md +2 -2
- package/docs/zh-CN/start/wizard-cli-reference.md +2 -2
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +1 -1
- package/docs/zh-CN/tools/browser.md +1 -1
- package/docs/zh-CN/tools/skills-config.md +1 -1
- package/docs/zh-CN/tools/skills.md +2 -2
- package/docs/zh-CN/tools/web.md +1 -1
- package/docs/zh-CN/web/control-ui.md +1 -1
- package/package.json +21 -2
- package/skills/canvas/SKILL.md +3 -3
- package/skills/curiosity-engine/SKILL.md +2 -2
- package/skills/gh-issues/SKILL.md +6 -6
- package/skills/heretek-theme/SKILL.md +169 -0
- package/skills/openai-whisper-api/SKILL.md +1 -1
- package/skills/sherpa-onnx-tts/SKILL.md +1 -1
- package/skills/triad-unity-monitor/SKILL.md +9 -9
package/dist/.buildstamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"builtAt":
|
|
1
|
+
{"builtAt":1774290742024,"head":"06aeaf86b5adb5e631beb8720932b2a98aeddf95"}
|
package/dist/dns-cli-A_DUY2mI.js
CHANGED
|
@@ -146,7 +146,7 @@ function registerDnsCli(program) {
|
|
|
146
146
|
]
|
|
147
147
|
}).trimEnd());
|
|
148
148
|
defaultRuntime.log("");
|
|
149
|
-
defaultRuntime.log(theme.heading("Recommended ~/.
|
|
149
|
+
defaultRuntime.log(theme.heading("Recommended ~/.Heretek-AI/openclaw.json:"));
|
|
150
150
|
defaultRuntime.writeJson({
|
|
151
151
|
gateway: { bind: "auto" },
|
|
152
152
|
discovery: { wideArea: {
|
|
@@ -216,7 +216,7 @@ function registerDnsCli(program) {
|
|
|
216
216
|
], { inherit: true });
|
|
217
217
|
if (cfg.discovery?.wideArea?.enabled !== true) {
|
|
218
218
|
defaultRuntime.log("");
|
|
219
|
-
defaultRuntime.log(theme.muted("Note: enable discovery.wideArea.enabled in ~/.
|
|
219
|
+
defaultRuntime.log(theme.muted("Note: enable discovery.wideArea.enabled in ~/.Heretek-AI/openclaw.json on the gateway and restart the gateway so it writes the DNS-SD zone."));
|
|
220
220
|
}
|
|
221
221
|
});
|
|
222
222
|
}
|
|
@@ -177,7 +177,7 @@ const log = createSubsystemLogger("env-overrides");
|
|
|
177
177
|
* Tracks env var keys that are currently injected by skill overrides.
|
|
178
178
|
* Used by ACP harness spawn to strip skill-injected keys so they don't
|
|
179
179
|
* leak to child processes (e.g., OPENAI_API_KEY leaking to Codex CLI).
|
|
180
|
-
* @see https://github.com/
|
|
180
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/36280
|
|
181
181
|
*/
|
|
182
182
|
const activeSkillEnvEntries = /* @__PURE__ */ new Map();
|
|
183
183
|
/** Returns a snapshot of env var keys currently injected by skill overrides. */
|
package/dist/paths-ViKUYWUK.js
CHANGED
|
@@ -152,7 +152,7 @@ const STATE_DIR = resolveStateDir();
|
|
|
152
152
|
/**
|
|
153
153
|
* Config file path (JSON or JSON5).
|
|
154
154
|
* Can be overridden via OPENCLAW_CONFIG_PATH.
|
|
155
|
-
* Default: ~/.
|
|
155
|
+
* Default: ~/.Heretek-AI/openclaw.json (or $OPENCLAW_STATE_DIR/openclaw.json)
|
|
156
156
|
*/
|
|
157
157
|
function resolveCanonicalConfigPath(env = process.env, stateDir = resolveStateDir(env, envHomedir(env))) {
|
|
158
158
|
const override = env.OPENCLAW_CONFIG_PATH?.trim();
|
|
@@ -5721,7 +5721,7 @@ function stripMinimaxToolCallXml(text) {
|
|
|
5721
5721
|
*
|
|
5722
5722
|
* This is a provider bug — no upstream fix tracked yet.
|
|
5723
5723
|
* Remove this function when upstream providers stop leaking tokens.
|
|
5724
|
-
* @see https://github.com/
|
|
5724
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/40020
|
|
5725
5725
|
*/
|
|
5726
5726
|
const MODEL_SPECIAL_TOKEN_RE = /<[||][^||]*[||]>/g;
|
|
5727
5727
|
function stripModelSpecialTokens(text) {
|
|
@@ -17926,7 +17926,7 @@ async function resolveModelAsync(provider, modelId, agentDir, cfg, options) {
|
|
|
17926
17926
|
* error. This detects known providers that require opt-in auth and adds
|
|
17927
17927
|
* a hint.
|
|
17928
17928
|
*
|
|
17929
|
-
* See: https://github.com/
|
|
17929
|
+
* See: https://github.com/Heretek-AI/openclaw/issues/17328
|
|
17930
17930
|
*/
|
|
17931
17931
|
const LOCAL_PROVIDER_HINTS = {
|
|
17932
17932
|
ollama: "Ollama requires authentication to be registered as a provider. Set OLLAMA_API_KEY=\"ollama-local\" (any value works) or run \"openclaw configure\". See: https://docs.openclaw.ai/providers/ollama",
|
|
@@ -33179,7 +33179,7 @@ function resolveBrowserBaseUrl(params) {
|
|
|
33179
33179
|
return normalizedSandbox.replace(/\/$/, "");
|
|
33180
33180
|
}
|
|
33181
33181
|
if (params.allowHostControl === false) throw new Error("Host browser control is disabled by sandbox policy.");
|
|
33182
|
-
if (!resolved.enabled) throw new Error("Browser control is disabled. Set browser.enabled=true in ~/.
|
|
33182
|
+
if (!resolved.enabled) throw new Error("Browser control is disabled. Set browser.enabled=true in ~/.Heretek-AI/openclaw.json.");
|
|
33183
33183
|
}
|
|
33184
33184
|
function shouldPreferHostForProfile(profileName) {
|
|
33185
33185
|
if (!profileName) return false;
|
|
@@ -39111,8 +39111,8 @@ function formatOutboundPayloadLog(payload) {
|
|
|
39111
39111
|
* Converts common inline HTML to lightweight-markup equivalents used by
|
|
39112
39112
|
* WhatsApp/Signal/Telegram and strips any remaining tags.
|
|
39113
39113
|
*
|
|
39114
|
-
* @see https://github.com/
|
|
39115
|
-
* @see https://github.com/
|
|
39114
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/31884
|
|
39115
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/18558
|
|
39116
39116
|
*/
|
|
39117
39117
|
/** Channels where HTML tags should be converted/stripped. */
|
|
39118
39118
|
const PLAIN_TEXT_SURFACES = new Set([
|
|
@@ -63452,7 +63452,7 @@ function buildDocsSection(params) {
|
|
|
63452
63452
|
"## Documentation",
|
|
63453
63453
|
`OpenClaw docs: ${docsPath}`,
|
|
63454
63454
|
"Mirror: https://docs.openclaw.ai",
|
|
63455
|
-
"Source: https://github.com/
|
|
63455
|
+
"Source: https://github.com/Heretek-AI/openclaw",
|
|
63456
63456
|
"Community: https://discord.com/invite/clawd",
|
|
63457
63457
|
"Find new skills: https://clawhub.com",
|
|
63458
63458
|
"For OpenClaw behavior, commands, config, or architecture: consult local docs first.",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* that are still tracked as active in the subagent registry) and sends a
|
|
7
7
|
* synthetic resume message to restart their work.
|
|
8
8
|
*
|
|
9
|
-
* @see https://github.com/
|
|
9
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/47711
|
|
10
10
|
*/
|
|
11
11
|
import type { SubagentRunRecord } from "./subagent-registry.types.js";
|
|
12
12
|
/**
|
|
@@ -21,7 +21,7 @@ export declare const STATE_DIR: string;
|
|
|
21
21
|
/**
|
|
22
22
|
* Config file path (JSON or JSON5).
|
|
23
23
|
* Can be overridden via OPENCLAW_CONFIG_PATH.
|
|
24
|
-
* Default: ~/.
|
|
24
|
+
* Default: ~/.Heretek-AI/openclaw.json (or $OPENCLAW_STATE_DIR/openclaw.json)
|
|
25
25
|
*/
|
|
26
26
|
export declare function resolveCanonicalConfigPath(env?: NodeJS.ProcessEnv, stateDir?: string): string;
|
|
27
27
|
/**
|
|
@@ -193,7 +193,7 @@ export type GatewayReloadConfig = {
|
|
|
193
193
|
* Maximum time (ms) to wait for in-flight operations to complete before
|
|
194
194
|
* forcing a SIGUSR1 restart. Default: 300000 (5 minutes).
|
|
195
195
|
* Lower values risk aborting active subagent LLM calls.
|
|
196
|
-
* @see https://github.com/
|
|
196
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/47711
|
|
197
197
|
*/
|
|
198
198
|
deferralTimeoutMs?: number;
|
|
199
199
|
};
|
|
@@ -38,13 +38,13 @@ export type CronServiceDeps = {
|
|
|
38
38
|
/**
|
|
39
39
|
* Delay in ms between missed job executions on startup.
|
|
40
40
|
* Prevents overwhelming the gateway when many jobs are overdue.
|
|
41
|
-
* See: https://github.com/
|
|
41
|
+
* See: https://github.com/Heretek-AI/openclaw/issues/18892
|
|
42
42
|
*/
|
|
43
43
|
missedJobStaggerMs?: number;
|
|
44
44
|
/**
|
|
45
45
|
* Maximum number of missed jobs to run immediately on startup.
|
|
46
46
|
* Additional missed jobs will be rescheduled to fire gradually.
|
|
47
|
-
* See: https://github.com/
|
|
47
|
+
* See: https://github.com/Heretek-AI/openclaw/issues/18892
|
|
48
48
|
*/
|
|
49
49
|
maxMissedJobsPerRestart?: number;
|
|
50
50
|
enqueueSystemEvent: (text: string, opts?: {
|
|
@@ -85,7 +85,7 @@ export type CronServiceDeps = {
|
|
|
85
85
|
/**
|
|
86
86
|
* `true` when the isolated run already delivered its output to the target
|
|
87
87
|
* channel (including matching messaging-tool sends). See:
|
|
88
|
-
* https://github.com/
|
|
88
|
+
* https://github.com/Heretek-AI/openclaw/issues/15692
|
|
89
89
|
*/
|
|
90
90
|
delivered?: boolean;
|
|
91
91
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Detects obfuscated or encoded commands that could bypass allowlist-based
|
|
3
3
|
* security filters.
|
|
4
4
|
*
|
|
5
|
-
* Addresses: https://github.com/
|
|
5
|
+
* Addresses: https://github.com/Heretek-AI/openclaw/issues/8592
|
|
6
6
|
*/
|
|
7
7
|
export type ObfuscationDetection = {
|
|
8
8
|
detected: boolean;
|
|
@@ -24,7 +24,7 @@ export declare function resolveAgentDeliveryPlan(params: {
|
|
|
24
24
|
* overrides session-level `lastChannel` to prevent cross-channel reply
|
|
25
25
|
* routing in shared sessions (dmScope="main").
|
|
26
26
|
*
|
|
27
|
-
* @see https://github.com/
|
|
27
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/24152
|
|
28
28
|
*/
|
|
29
29
|
turnSourceChannel?: string;
|
|
30
30
|
/** Turn-source `to` — paired with `turnSourceChannel`. */
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* Converts common inline HTML to lightweight-markup equivalents used by
|
|
8
8
|
* WhatsApp/Signal/Telegram and strips any remaining tags.
|
|
9
9
|
*
|
|
10
|
-
* @see https://github.com/
|
|
11
|
-
* @see https://github.com/
|
|
10
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/31884
|
|
11
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/18558
|
|
12
12
|
*/
|
|
13
13
|
/** Returns `true` when the channel cannot render raw HTML. */
|
|
14
14
|
export declare function isPlainTextSurface(channelId: string): boolean;
|
|
@@ -57,7 +57,7 @@ export declare function resolveSessionDeliveryTarget(params: {
|
|
|
57
57
|
* Callers should set this to the channel that originated the current
|
|
58
58
|
* agent turn so the reply always routes back to the correct channel.
|
|
59
59
|
*
|
|
60
|
-
* @see https://github.com/
|
|
60
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/24152
|
|
61
61
|
*/
|
|
62
62
|
turnSourceChannel?: DeliverableMessageChannel;
|
|
63
63
|
/** Turn-source `to` — paired with `turnSourceChannel`. */
|
|
@@ -4595,8 +4595,8 @@ const MEMORY_SYSTEM_PROMPT = [
|
|
|
4595
4595
|
"Paste this into your agent:",
|
|
4596
4596
|
"",
|
|
4597
4597
|
"Install the memory system by applying:",
|
|
4598
|
-
"https://github.com/
|
|
4599
|
-
"https://github.com/
|
|
4598
|
+
"https://github.com/Heretek-AI/openclaw/commit/9ffea23f31ca1df5183b25668f8f814bee0fb34e",
|
|
4599
|
+
"https://github.com/Heretek-AI/openclaw/commit/7d1fee70e76f2f634f1b41fca927ee663914183a"
|
|
4600
4600
|
].join("\n");
|
|
4601
4601
|
async function shouldSuggestMemorySystem(workspaceDir) {
|
|
4602
4602
|
const memoryPaths = [path.join(workspaceDir, "MEMORY.md"), path.join(workspaceDir, "memory.md")];
|
|
@@ -263,7 +263,7 @@ async function setupCommand(opts, runtime = defaultRuntime) {
|
|
|
263
263
|
//#endregion
|
|
264
264
|
//#region src/cli/program/register.setup.ts
|
|
265
265
|
function registerSetupCommand(program) {
|
|
266
|
-
program.command("setup").description("Initialize ~/.
|
|
266
|
+
program.command("setup").description("Initialize ~/.Heretek-AI/openclaw.json and the agent workspace").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/setup", "docs.openclaw.ai/cli/setup")}\n`).option("--workspace <dir>", "Agent workspace directory (default: ~/.openclaw/workspace; stored as agents.defaults.workspace)").option("--wizard", "Run interactive onboarding", false).option("--non-interactive", "Run onboarding without prompts", false).option("--mode <mode>", "Onboard mode: local|remote").option("--remote-url <url>", "Remote Gateway WebSocket URL").option("--remote-token <token>", "Remote Gateway token (optional)").action(async (opts, command) => {
|
|
267
267
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
268
268
|
const hasWizardFlags = hasExplicitOptions(command, [
|
|
269
269
|
"wizard",
|
|
@@ -543,7 +543,7 @@ function normalizePackageTagInput(value, packageNames) {
|
|
|
543
543
|
const PRIMARY_PACKAGE_NAME = "openclaw";
|
|
544
544
|
const ALL_PACKAGE_NAMES = [PRIMARY_PACKAGE_NAME];
|
|
545
545
|
const GLOBAL_RENAME_PREFIX = ".";
|
|
546
|
-
const OPENCLAW_MAIN_PACKAGE_SPEC = "github:
|
|
546
|
+
const OPENCLAW_MAIN_PACKAGE_SPEC = "github:Heretek-AI/openclaw#main";
|
|
547
547
|
const NPM_GLOBAL_INSTALL_QUIET_FLAGS = [
|
|
548
548
|
"--no-fund",
|
|
549
549
|
"--no-audit",
|
|
@@ -467,7 +467,7 @@ async function finalizeSetupWizard(options) {
|
|
|
467
467
|
].join("\n"), "Start TUI (best option!)");
|
|
468
468
|
await prompter.note([
|
|
469
469
|
"Gateway token: shared auth for the Gateway + Control UI.",
|
|
470
|
-
"Stored in: ~/.
|
|
470
|
+
"Stored in: ~/.Heretek-AI/openclaw.json (gateway.auth.token) or OPENCLAW_GATEWAY_TOKEN.",
|
|
471
471
|
`View token: ${formatCliCommand("openclaw config get gateway.auth.token")}`,
|
|
472
472
|
`Generate token: ${formatCliCommand("openclaw doctor --generate-gateway-token")}`,
|
|
473
473
|
"Web UI keeps dashboard URL tokens in memory for the current tab and strips them from the URL after load.",
|
|
@@ -194,7 +194,7 @@ import crypto from "node:crypto";
|
|
|
194
194
|
* that are still tracked as active in the subagent registry) and sends a
|
|
195
195
|
* synthetic resume message to restart their work.
|
|
196
196
|
*
|
|
197
|
-
* @see https://github.com/
|
|
197
|
+
* @see https://github.com/Heretek-AI/openclaw/issues/47711
|
|
198
198
|
*/
|
|
199
199
|
const log = createSubsystemLogger("subagent-orphan-recovery");
|
|
200
200
|
/** Delay before attempting recovery to let the gateway finish bootstrapping. */
|
|
@@ -264,7 +264,7 @@ function parseTimeoutMsOrExit(timeout) {
|
|
|
264
264
|
}
|
|
265
265
|
return timeoutMs;
|
|
266
266
|
}
|
|
267
|
-
const OPENCLAW_REPO_URL = "https://github.com/
|
|
267
|
+
const OPENCLAW_REPO_URL = "https://github.com/Heretek-AI/openclaw.git";
|
|
268
268
|
const MAX_LOG_CHARS = 8e3;
|
|
269
269
|
const DEFAULT_PACKAGE_NAME = "openclaw";
|
|
270
270
|
const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME]);
|
package/docs/automation/hooks.md
CHANGED
|
@@ -1088,6 +1088,6 @@ node -e "import('./path/to/handler.ts').then(console.log)"
|
|
|
1088
1088
|
## See Also
|
|
1089
1089
|
|
|
1090
1090
|
- [CLI Reference: hooks](/cli/hooks)
|
|
1091
|
-
- [Bundled Hooks README](https://github.com/
|
|
1091
|
+
- [Bundled Hooks README](https://github.com/Heretek-AI/openclaw/tree/main/src/hooks/bundled)
|
|
1092
1092
|
- [Webhook Hooks](/automation/webhook)
|
|
1093
1093
|
- [Configuration](/gateway/configuration-reference#hooks)
|
package/docs/channels/feishu.md
CHANGED
|
@@ -23,7 +23,7 @@ Note: `agents.list[].groupChat.mentionPatterns` is now used by Telegram/Discord/
|
|
|
23
23
|
|
|
24
24
|
## Config example (WhatsApp)
|
|
25
25
|
|
|
26
|
-
Add a `groupChat` block to `~/.
|
|
26
|
+
Add a `groupChat` block to `~/.Heretek-AI/openclaw.json` so display-name pings work even when WhatsApp strips the visual `@` in the text body:
|
|
27
27
|
|
|
28
28
|
```json5
|
|
29
29
|
{
|
package/docs/channels/irc.md
CHANGED
package/docs/channels/msteams.md
CHANGED
|
@@ -145,7 +145,7 @@ Example:
|
|
|
145
145
|
2. Create an **Azure Bot** (App ID + secret + tenant ID).
|
|
146
146
|
3. Build a **Teams app package** that references the bot and includes the RSC permissions below.
|
|
147
147
|
4. Upload/install the Teams app into a team (or personal scope for DMs).
|
|
148
|
-
5. Configure `msteams` in `~/.
|
|
148
|
+
5. Configure `msteams` in `~/.Heretek-AI/openclaw.json` (or env vars) and start the gateway.
|
|
149
149
|
6. The gateway listens for Bot Framework webhook traffic on `/api/messages` by default.
|
|
150
150
|
|
|
151
151
|
## Azure Bot Setup (Prerequisites)
|
package/docs/channels/signal.md
CHANGED
|
@@ -281,7 +281,7 @@ Extra checks:
|
|
|
281
281
|
```bash
|
|
282
282
|
openclaw pairing list signal
|
|
283
283
|
pgrep -af signal-cli
|
|
284
|
-
grep -i "signal" "/tmp/
|
|
284
|
+
grep -i "signal" "/tmp/Heretek-AI/openclaw-$(date +%Y-%m-%d).log" | tail -20
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
For triage flow: [/channels/troubleshooting](/channels/troubleshooting).
|
package/docs/cli/config.md
CHANGED
|
@@ -234,7 +234,7 @@ Success example:
|
|
|
234
234
|
{
|
|
235
235
|
"ok": true,
|
|
236
236
|
"operations": 1,
|
|
237
|
-
"configPath": "~/.
|
|
237
|
+
"configPath": "~/.Heretek-AI/openclaw.json",
|
|
238
238
|
"inputModes": ["builder"],
|
|
239
239
|
"checks": {
|
|
240
240
|
"schema": false,
|
|
@@ -252,7 +252,7 @@ Failure example:
|
|
|
252
252
|
{
|
|
253
253
|
"ok": false,
|
|
254
254
|
"operations": 1,
|
|
255
|
-
"configPath": "~/.
|
|
255
|
+
"configPath": "~/.Heretek-AI/openclaw.json",
|
|
256
256
|
"inputModes": ["builder"],
|
|
257
257
|
"checks": {
|
|
258
258
|
"schema": false,
|
package/docs/cli/doctor.md
CHANGED
|
@@ -26,7 +26,7 @@ openclaw doctor --deep
|
|
|
26
26
|
Notes:
|
|
27
27
|
|
|
28
28
|
- Interactive prompts (like keychain/OAuth fixes) only run when stdin is a TTY and `--non-interactive` is **not** set. Headless runs (cron, Telegram, no terminal) will skip prompts.
|
|
29
|
-
- `--fix` (alias for `--repair`) writes a backup to `~/.
|
|
29
|
+
- `--fix` (alias for `--repair`) writes a backup to `~/.Heretek-AI/openclaw.json.bak` and drops unknown config keys, listing each removal.
|
|
30
30
|
- State integrity checks now detect orphan transcript files in the sessions directory and can archive them as `.deleted.<timestamp>` to reclaim space safely.
|
|
31
31
|
- Doctor also scans `~/.openclaw/cron/jobs.json` (or `cron.store`) for legacy cron job shapes and can rewrite them in place before the scheduler has to auto-normalize them at runtime.
|
|
32
32
|
- Doctor includes a memory-search readiness check and can recommend `openclaw configure --section model` when embedding credentials are missing.
|
package/docs/cli/gateway.md
CHANGED
|
@@ -35,7 +35,7 @@ openclaw gateway run
|
|
|
35
35
|
|
|
36
36
|
Notes:
|
|
37
37
|
|
|
38
|
-
- By default, the Gateway refuses to start unless `gateway.mode=local` is set in `~/.
|
|
38
|
+
- By default, the Gateway refuses to start unless `gateway.mode=local` is set in `~/.Heretek-AI/openclaw.json`. Use `--allow-unconfigured` for ad-hoc/dev runs.
|
|
39
39
|
- Binding beyond loopback without auth is blocked (safety guardrail).
|
|
40
40
|
- `SIGUSR1` triggers an in-process restart when authorized (`commands.restart` is enabled by default; set `commands.restart: false` to block manual restart, while gateway tool/config apply/update remain allowed).
|
|
41
41
|
- `SIGINT`/`SIGTERM` handlers stop the gateway process, but they don’t restore any custom terminal state. If you wrap the CLI with a TUI or raw-mode input, restore the terminal before exit.
|
package/docs/cli/sandbox.md
CHANGED
|
@@ -165,7 +165,7 @@ It uses the Gateway’s runtime registry and avoids mismatches when scope/sessio
|
|
|
165
165
|
|
|
166
166
|
## Configuration
|
|
167
167
|
|
|
168
|
-
Sandbox settings live in `~/.
|
|
168
|
+
Sandbox settings live in `~/.Heretek-AI/openclaw.json` under `agents.defaults.sandbox` (per-agent overrides go in `agents.list[].sandbox`):
|
|
169
169
|
|
|
170
170
|
```jsonc
|
|
171
171
|
{
|
package/docs/cli/setup.md
CHANGED
package/docs/cli/update.md
CHANGED
|
@@ -32,7 +32,7 @@ openclaw --update
|
|
|
32
32
|
|
|
33
33
|
- `--no-restart`: skip restarting the Gateway service after a successful update.
|
|
34
34
|
- `--channel <stable|beta|dev>`: set the update channel (git + npm; persisted in config).
|
|
35
|
-
- `--tag <dist-tag|version|spec>`: override the package target for this update only. For package installs, `main` maps to `github:
|
|
35
|
+
- `--tag <dist-tag|version|spec>`: override the package target for this update only. For package installs, `main` maps to `github:Heretek-AI/openclaw#main`.
|
|
36
36
|
- `--dry-run`: preview planned update actions (channel/tag/target/restart flow) without writing config, installing, syncing plugins, or restarting.
|
|
37
37
|
- `--json`: print machine-readable `UpdateRunResult` JSON.
|
|
38
38
|
- `--timeout <seconds>`: per-step timeout (default is 1200s).
|
|
@@ -26,7 +26,7 @@ inside a sandbox workspace under `~/.openclaw/sandboxes`, not your host workspac
|
|
|
26
26
|
- Default: `~/.openclaw/workspace`
|
|
27
27
|
- If `OPENCLAW_PROFILE` is set and not `"default"`, the default becomes
|
|
28
28
|
`~/.openclaw/workspace-<profile>`.
|
|
29
|
-
- Override in `~/.
|
|
29
|
+
- Override in `~/.Heretek-AI/openclaw.json`:
|
|
30
30
|
|
|
31
31
|
```json5
|
|
32
32
|
{
|
|
@@ -127,7 +127,7 @@ files.
|
|
|
127
127
|
|
|
128
128
|
These live under `~/.openclaw/` and should NOT be committed to the workspace repo:
|
|
129
129
|
|
|
130
|
-
- `~/.
|
|
130
|
+
- `~/.Heretek-AI/openclaw.json` (config)
|
|
131
131
|
- `~/.openclaw/credentials/` (OAuth tokens, API keys)
|
|
132
132
|
- `~/.openclaw/agents/<agentId>/sessions/` (session transcripts + metadata)
|
|
133
133
|
- `~/.openclaw/skills/` (managed skills)
|
|
@@ -223,7 +223,7 @@ Suggested `.gitignore` starter:
|
|
|
223
223
|
## Moving the workspace to a new machine
|
|
224
224
|
|
|
225
225
|
1. Clone the repo to the desired path (default `~/.openclaw/workspace`).
|
|
226
|
-
2. Set `agents.defaults.workspace` to that path in `~/.
|
|
226
|
+
2. Set `agents.defaults.workspace` to that path in `~/.Heretek-AI/openclaw.json`.
|
|
227
227
|
3. Run `openclaw setup --workspace <path>` to seed any missing files.
|
|
228
228
|
4. If you need sessions, copy `~/.openclaw/agents/<agentId>/sessions/` from the
|
|
229
229
|
old machine separately.
|
package/docs/concepts/agent.md
CHANGED
|
@@ -13,7 +13,7 @@ OpenClaw runs a single embedded agent runtime.
|
|
|
13
13
|
|
|
14
14
|
OpenClaw uses a single agent workspace directory (`agents.defaults.workspace`) as the agent’s **only** working directory (`cwd`) for tools and context.
|
|
15
15
|
|
|
16
|
-
Recommended: use `openclaw setup` to create `~/.
|
|
16
|
+
Recommended: use `openclaw setup` to create `~/.Heretek-AI/openclaw.json` if missing and initialize the workspace files.
|
|
17
17
|
|
|
18
18
|
Full workspace layout + backup guide: [Agent workspace](/concepts/agent-workspace)
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ Check which engine is active:
|
|
|
23
23
|
```bash
|
|
24
24
|
openclaw doctor
|
|
25
25
|
# or inspect config directly:
|
|
26
|
-
cat ~/.
|
|
26
|
+
cat ~/.Heretek-AI/openclaw.json | jq '.plugins.slots.contextEngine'
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
### Installing a context engine plugin
|
|
@@ -39,7 +39,7 @@ reach other host locations unless sandboxing is enabled. See
|
|
|
39
39
|
|
|
40
40
|
## Paths (quick map)
|
|
41
41
|
|
|
42
|
-
- Config: `~/.
|
|
42
|
+
- Config: `~/.Heretek-AI/openclaw.json` (or `OPENCLAW_CONFIG_PATH`)
|
|
43
43
|
- State dir: `~/.openclaw` (or `OPENCLAW_STATE_DIR`)
|
|
44
44
|
- Workspace: `~/.openclaw/workspace` (or `~/.openclaw/workspace-<agentId>`)
|
|
45
45
|
- Agent dir: `~/.openclaw/agents/<agentId>/agent` (or `agents.list[].agentDir`)
|
|
@@ -313,7 +313,7 @@ openclaw channels login --channel whatsapp --account personal
|
|
|
313
313
|
openclaw channels login --channel whatsapp --account biz
|
|
314
314
|
```
|
|
315
315
|
|
|
316
|
-
`~/.
|
|
316
|
+
`~/.Heretek-AI/openclaw.json` (JSON5):
|
|
317
317
|
|
|
318
318
|
```js
|
|
319
319
|
{
|
package/docs/concepts/retry.md
CHANGED
package/docs/concepts/session.md
CHANGED
|
@@ -30,7 +30,7 @@ Use `session.dmScope` to control how **direct messages** are grouped:
|
|
|
30
30
|
**The fix:** Set `dmScope` to isolate sessions per user:
|
|
31
31
|
|
|
32
32
|
```json5
|
|
33
|
-
// ~/.
|
|
33
|
+
// ~/.Heretek-AI/openclaw.json
|
|
34
34
|
{
|
|
35
35
|
session: {
|
|
36
36
|
// Secure DM mode: isolate DM context per channel + sender.
|
|
@@ -246,7 +246,7 @@ Runtime override (owner only):
|
|
|
246
246
|
## Configuration (optional rename example)
|
|
247
247
|
|
|
248
248
|
```json5
|
|
249
|
-
// ~/.
|
|
249
|
+
// ~/.Heretek-AI/openclaw.json
|
|
250
250
|
{
|
|
251
251
|
session: {
|
|
252
252
|
scope: "per-sender", // keep group keys separate
|
package/docs/concepts/typebox.md
CHANGED
|
@@ -282,7 +282,7 @@ Unknown frame types are preserved as raw payloads for forward compatibility.
|
|
|
282
282
|
Generated JSON Schema is in the repo at `dist/protocol.schema.json`. The
|
|
283
283
|
published raw file is typically available at:
|
|
284
284
|
|
|
285
|
-
- [https://raw.githubusercontent.com/
|
|
285
|
+
- [https://raw.githubusercontent.com/Heretek-AI/openclaw/main/dist/protocol.schema.json](https://raw.githubusercontent.com/Heretek-AI/openclaw/main/dist/protocol.schema.json)
|
|
286
286
|
|
|
287
287
|
## When you change schemas
|
|
288
288
|
|
|
@@ -57,7 +57,7 @@ OPENCLAW_DIAGNOSTICS=0
|
|
|
57
57
|
Flags emit logs into the standard diagnostics log file. By default:
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
/tmp/
|
|
60
|
+
/tmp/Heretek-AI/openclaw-YYYY-MM-DD.log
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
If you set `logging.file`, use that path instead. Logs are JSONL (one JSON object per line). Redaction still applies based on `logging.redactSensitive`.
|
|
@@ -67,19 +67,19 @@ If you set `logging.file`, use that path instead. Logs are JSONL (one JSON objec
|
|
|
67
67
|
Pick the latest log file:
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
ls -t /tmp/
|
|
70
|
+
ls -t /tmp/Heretek-AI/openclaw-*.log | head -n 1
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Filter for Telegram HTTP diagnostics:
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
|
-
rg "telegram http error" /tmp/
|
|
76
|
+
rg "telegram http error" /tmp/Heretek-AI/openclaw-*.log
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
Or tail while reproducing:
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
|
-
tail -f /tmp/
|
|
82
|
+
tail -f /tmp/Heretek-AI/openclaw-$(date +%F).log | rg "telegram http error"
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
For remote gateways, you can also use `openclaw logs --follow` (see [/cli/logs](/cli/logs)).
|
package/docs/docs.json
CHANGED
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"links": [
|
|
37
37
|
{
|
|
38
38
|
"label": "GitHub",
|
|
39
|
-
"href": "https://github.com/
|
|
39
|
+
"href": "https://github.com/Heretek-AI/openclaw",
|
|
40
40
|
"icon": "github"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"label": "Releases",
|
|
44
|
-
"href": "https://github.com/
|
|
44
|
+
"href": "https://github.com/Heretek-AI/openclaw/releases",
|
|
45
45
|
"icon": "package"
|
|
46
46
|
},
|
|
47
47
|
{
|
package/docs/gateway/bonjour.md
CHANGED
|
@@ -73,7 +73,7 @@ access, bind explicitly and keep auth enabled.
|
|
|
73
73
|
|
|
74
74
|
For tailnet‑only setups:
|
|
75
75
|
|
|
76
|
-
- Set `gateway.bind: "tailnet"` in `~/.
|
|
76
|
+
- Set `gateway.bind: "tailnet"` in `~/.Heretek-AI/openclaw.json`.
|
|
77
77
|
- Restart the Gateway (or restart the macOS menubar app).
|
|
78
78
|
|
|
79
79
|
## What advertises
|
|
@@ -166,7 +166,7 @@ sequences (e.g. spaces become `\032`).
|
|
|
166
166
|
## Disabling / configuration
|
|
167
167
|
|
|
168
168
|
- `OPENCLAW_DISABLE_BONJOUR=1` disables advertising (legacy: `OPENCLAW_DISABLE_BONJOUR`).
|
|
169
|
-
- `gateway.bind` in `~/.
|
|
169
|
+
- `gateway.bind` in `~/.Heretek-AI/openclaw.json` controls the Gateway bind mode.
|
|
170
170
|
- `OPENCLAW_SSH_PORT` overrides the SSH port advertised in TXT (legacy: `OPENCLAW_SSH_PORT`).
|
|
171
171
|
- `OPENCLAW_TAILNET_DNS` publishes a MagicDNS hint in TXT (legacy: `OPENCLAW_TAILNET_DNS`).
|
|
172
172
|
- `OPENCLAW_CLI_PATH` overrides the advertised CLI path (legacy: `OPENCLAW_CLI_PATH`).
|
|
@@ -80,7 +80,7 @@ Payload fields (all optional unless noted):
|
|
|
80
80
|
## Tailnet usage
|
|
81
81
|
|
|
82
82
|
- Bind the bridge to a tailnet IP: `bridge.bind: "tailnet"` in
|
|
83
|
-
`~/.
|
|
83
|
+
`~/.Heretek-AI/openclaw.json`.
|
|
84
84
|
- Clients connect via MagicDNS name or tailnet IP.
|
|
85
85
|
- Bonjour does **not** cross networks; use manual host/port or wide-area DNS‑SD
|
|
86
86
|
when needed.
|
|
@@ -22,7 +22,7 @@ Examples below are aligned with the current config schema. For the exhaustive re
|
|
|
22
22
|
}
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Save to `~/.
|
|
25
|
+
Save to `~/.Heretek-AI/openclaw.json` and you can DM the bot from that number.
|
|
26
26
|
|
|
27
27
|
### Recommended starter
|
|
28
28
|
|
|
@@ -93,7 +93,7 @@ Save to `~/.openclaw/openclaw.json` and you can DM the bot from that number.
|
|
|
93
93
|
// Logging
|
|
94
94
|
logging: {
|
|
95
95
|
level: "info",
|
|
96
|
-
file: "/tmp/
|
|
96
|
+
file: "/tmp/Heretek-AI/openclaw.log",
|
|
97
97
|
consoleLevel: "info",
|
|
98
98
|
consoleStyle: "pretty",
|
|
99
99
|
redactSensitive: "tools",
|
|
@@ -8,7 +8,7 @@ read_when:
|
|
|
8
8
|
|
|
9
9
|
# Configuration Reference
|
|
10
10
|
|
|
11
|
-
Every field available in `~/.
|
|
11
|
+
Every field available in `~/.Heretek-AI/openclaw.json`. For a task-oriented overview, see [Configuration](/gateway/configuration).
|
|
12
12
|
|
|
13
13
|
Config format is **JSON5** (comments + trailing commas allowed). All fields are optional — OpenClaw uses safe defaults when omitted.
|
|
14
14
|
|
|
@@ -2932,7 +2932,7 @@ Notes:
|
|
|
2932
2932
|
{
|
|
2933
2933
|
logging: {
|
|
2934
2934
|
level: "info",
|
|
2935
|
-
file: "/tmp/
|
|
2935
|
+
file: "/tmp/Heretek-AI/openclaw.log",
|
|
2936
2936
|
consoleLevel: "info",
|
|
2937
2937
|
consoleStyle: "pretty", // pretty | compact | json
|
|
2938
2938
|
redactSensitive: "tools", // off | tools
|
|
@@ -2941,7 +2941,7 @@ Notes:
|
|
|
2941
2941
|
}
|
|
2942
2942
|
```
|
|
2943
2943
|
|
|
2944
|
-
- Default log file: `/tmp/
|
|
2944
|
+
- Default log file: `/tmp/Heretek-AI/openclaw-YYYY-MM-DD.log`.
|
|
2945
2945
|
- Set `logging.file` for a stable path.
|
|
2946
2946
|
- `consoleLevel` bumps to `debug` when `--verbose`.
|
|
2947
2947
|
|
|
@@ -3099,7 +3099,7 @@ Template placeholders expanded in `tools.media.models[].args`:
|
|
|
3099
3099
|
Split config into multiple files:
|
|
3100
3100
|
|
|
3101
3101
|
```json5
|
|
3102
|
-
// ~/.
|
|
3102
|
+
// ~/.Heretek-AI/openclaw.json
|
|
3103
3103
|
{
|
|
3104
3104
|
gateway: { port: 18789 },
|
|
3105
3105
|
agents: { $include: "./agents.json5" },
|