chore: update molt.bot domains

This commit is contained in:
Peter Steinberger
2026-01-27 11:27:41 +00:00
parent f4004054ab
commit 83460df96f
137 changed files with 653 additions and 538 deletions

View File

@@ -83,6 +83,26 @@ describe("lobster plugin tool", () => {
expect(res.details).toMatchObject({ ok: true, status: "ok" });
});
it("tolerates noisy stdout before the JSON envelope", async () => {
const payload = { ok: true, status: "ok", output: [], requiresApproval: null };
const { binPath } = await writeFakeLobsterScript(
`const payload = ${JSON.stringify(payload)};\n` +
`console.log("noise before json");\n` +
`process.stdout.write(JSON.stringify(payload));\n`,
"clawdbot-lobster-plugin-noisy-",
);
const tool = createLobsterTool(fakeApi());
const res = await tool.execute("call-noisy", {
action: "run",
pipeline: "noop",
lobsterPath: binPath,
timeoutMs: 1000,
});
expect(res.details).toMatchObject({ ok: true, status: "ok" });
});
it("requires absolute lobsterPath when provided", async () => {
const tool = createLobsterTool(fakeApi());
await expect(

View File

@@ -131,10 +131,28 @@ async function runLobsterSubprocess(params: {
}
function parseEnvelope(stdout: string): LobsterEnvelope {
let parsed: unknown;
try {
parsed = JSON.parse(stdout);
} catch {
const trimmed = stdout.trim();
const tryParse = (input: string) => {
try {
return JSON.parse(input) as unknown;
} catch {
return undefined;
}
};
let parsed: unknown = tryParse(trimmed);
// Some environments can leak extra stdout (e.g. warnings/logs) before the
// final JSON envelope. Be tolerant and parse the last JSON-looking suffix.
if (parsed === undefined) {
const suffixMatch = trimmed.match(/({[\s\S]*}|\[[\s\S]*])\s*$/);
if (suffixMatch?.[1]) {
parsed = tryParse(suffixMatch[1]);
}
}
if (parsed === undefined) {
throw new Error("lobster returned invalid JSON");
}

View File

@@ -17,7 +17,7 @@ async function noteMattermostSetup(prompter: WizardPrompter): Promise<void> {
"2) Create a bot + copy its token",
"3) Use your server base URL (e.g., https://chat.example.com)",
"Tip: the bot must be a member of any channel you want it to monitor.",
"Docs: https://docs.clawd.bot/channels/mattermost",
"Docs: https://docs.molt.bot/channels/mattermost",
].join("\n"),
"Mattermost bot token",
);

View File

@@ -2,4 +2,4 @@
Tlon/Urbit channel plugin for Clawdbot. Supports DMs, group mentions, and thread replies.
Docs: https://docs.clawd.bot/channels/tlon
Docs: https://docs.molt.bot/channels/tlon

View File

@@ -80,7 +80,7 @@ Multi-account config (advanced):
## Full documentation
See https://docs.clawd.bot/channels/twitch for:
See https://docs.molt.bot/channels/twitch for:
- Token refresh setup
- Access control patterns

View File

@@ -8,8 +8,8 @@ Providers:
- **Plivo** (Voice API + XML transfer + GetInput speech)
- **Mock** (dev/no network)
Docs: `https://docs.clawd.bot/plugins/voice-call`
Plugin system: `https://docs.clawd.bot/plugin`
Docs: `https://docs.molt.bot/plugins/voice-call`
Plugin system: `https://docs.molt.bot/plugin`
## Install (local dev)

View File

@@ -45,7 +45,7 @@ export function registerVoiceCallCli(params: {
const root = program
.command("voicecall")
.description("Voice call utilities")
.addHelpText("after", () => `\nDocs: https://docs.clawd.bot/cli/voicecall\n`);
.addHelpText("after", () => `\nDocs: https://docs.molt.bot/cli/voicecall\n`);
root
.command("call")

View File

@@ -88,7 +88,7 @@ function findPackageRoot(startDir: string, name: string): string | null {
function resolveClawdbotRoot(): string {
if (coreRootCache) return coreRootCache;
const override = process.env.CLAWDBOT_ROOT?.trim();
const override = process.env.MOLTBOT_ROOT?.trim() || process.env.CLAWDBOT_ROOT?.trim();
if (override) {
coreRootCache = override;
return override;
@@ -107,15 +107,17 @@ function resolveClawdbotRoot(): string {
}
for (const start of candidates) {
const found = findPackageRoot(start, "clawdbot");
if (found) {
coreRootCache = found;
return found;
for (const name of ["moltbot", "clawdbot"]) {
const found = findPackageRoot(start, name);
if (found) {
coreRootCache = found;
return found;
}
}
}
throw new Error(
"Unable to resolve Clawdbot root. Set CLAWDBOT_ROOT to the package root.",
"Unable to resolve core root. Set MOLTBOT_ROOT (or legacy CLAWDBOT_ROOT) to the package root.",
);
}

View File

@@ -132,7 +132,7 @@ async function noteZaloTokenHelp(prompter: WizardPrompter): Promise<void> {
"2) Create a bot and get the token",
"3) Token looks like 12345689:abc-xyz",
"Tip: you can also set ZALO_BOT_TOKEN in your env.",
"Docs: https://docs.clawd.bot/channels/zalo",
"Docs: https://docs.molt.bot/channels/zalo",
].join("\n"),
"Zalo bot token",
);

View File

@@ -471,7 +471,7 @@ export const zalouserPlugin: ChannelPlugin<ResolvedZalouserAccount> = {
const ok = await checkZcaInstalled();
if (!ok) {
throw new Error(
"Missing dependency: `zca` not found in PATH. See docs.clawd.bot/channels/zalouser",
"Missing dependency: `zca` not found in PATH. See docs.molt.bot/channels/zalouser",
);
}
runtime.log(

View File

@@ -53,7 +53,7 @@ async function noteZalouserHelp(prompter: WizardPrompter): Promise<void> {
"1) Install zca-cli",
"2) You'll scan a QR code with your Zalo app",
"",
"Docs: https://docs.clawd.bot/channels/zalouser",
"Docs: https://docs.molt.bot/channels/zalouser",
].join("\n"),
"Zalo Personal Setup",
);
@@ -316,7 +316,7 @@ export const zalouserOnboardingAdapter: ChannelOnboardingAdapter = {
"The `zca` binary was not found in PATH.",
"",
"Install zca-cli, then re-run onboarding:",
"Docs: https://docs.clawd.bot/channels/zalouser",
"Docs: https://docs.molt.bot/channels/zalouser",
].join("\n"),
"Missing Dependency",
);