openclaw-multi-auto 1.7.8 → 1.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.
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/plugin-sdk/{audio-preflight-CVWl4NKo.js → audio-preflight-yyFn-I5K.js} +12 -12
- package/dist/plugin-sdk/{audit-membership-runtime-D1VvFm38.js → audit-membership-runtime-DHo6vLy0.js} +5 -5
- package/dist/plugin-sdk/{auth-profiles.runtime-Cy2e2Wah.js → auth-profiles.runtime-DN3bNNeo.js} +12 -12
- package/dist/plugin-sdk/{bluebubbles-B_tcmPhi.js → bluebubbles-BPDNQxEz.js} +1 -1
- package/dist/plugin-sdk/bluebubbles.js +15 -15
- package/dist/plugin-sdk/{channel-access-GDk6vyOi.js → channel-access-BaZDvsTA.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-CerQrsyV.js → channel-access-configure-DLZc22_m.js} +1 -1
- package/dist/plugin-sdk/{channel-config-helpers-CX9AfjCJ.js → channel-config-helpers-CFkTEzkz.js} +3 -3
- package/dist/plugin-sdk/{compact.runtime-0XuiRVw-.js → compact.runtime-D1HfZ8IJ.js} +12 -12
- package/dist/plugin-sdk/compat.js +28 -28
- package/dist/plugin-sdk/core.js +14 -14
- package/dist/plugin-sdk/{deliver-runtime-D37pd8wU.js → deliver-runtime-DrD2s_GI.js} +12 -12
- package/dist/plugin-sdk/device-pair.js +5 -5
- package/dist/plugin-sdk/diagnostics-otel.js +2 -2
- package/dist/plugin-sdk/{discord-dU71XVvQ.js → discord-BZR9M1Ft.js} +4 -4
- package/dist/plugin-sdk/discord.js +16 -16
- package/dist/plugin-sdk/{exec-88qB5pUO.js → exec-BvTkR9oI.js} +2 -2
- package/dist/plugin-sdk/feishu.js +14 -14
- package/dist/plugin-sdk/{fetch-guard-DEyOIg88.js → fetch-guard-Cwx1pJhf.js} +1 -1
- package/dist/plugin-sdk/{fetch-Cqwcg-Kq.js → fetch-yk-axchG.js} +2 -2
- package/dist/plugin-sdk/google-gemini-cli-auth.js +4 -4
- package/dist/plugin-sdk/googlechat.js +14 -14
- package/dist/plugin-sdk/{helpers-zm9M-XCJ.js → helpers-Cj2lgcNt.js} +1 -1
- package/dist/plugin-sdk/{http-registry-CR-l0QpT.js → http-registry-DyBqqyPO.js} +2 -2
- package/dist/plugin-sdk/{image-runtime-CSZNFoHc.js → image-runtime-ChtfQsK-.js} +12 -12
- package/dist/plugin-sdk/{imessage-DvtFTwJr.js → imessage-DtibPuZP.js} +3 -3
- package/dist/plugin-sdk/imessage.js +14 -14
- package/dist/plugin-sdk/{inbound-reply-dispatch-DpGprwTU.js → inbound-reply-dispatch-CfNEV0ZG.js} +1 -1
- package/dist/plugin-sdk/index.js +28 -28
- package/dist/plugin-sdk/irc.js +15 -15
- package/dist/plugin-sdk/{logger-D-go2oXy.js → logger-C9fkmDdb.js} +2 -2
- package/dist/plugin-sdk/{logger-Jt8cCPPV.js → logger-DXnvMlr-.js} +2 -2
- package/dist/plugin-sdk/{login-CnT14vQ1.js → login-BC7QDpvj.js} +5 -5
- package/dist/plugin-sdk/{login-qr-Di9Gqms7.js → login-qr-rnZFcwNs.js} +13 -13
- package/dist/plugin-sdk/{manager-runtime-DzCE2bL1.js → manager-runtime-B8O--3Jt.js} +12 -12
- package/dist/plugin-sdk/{manager.runtime-D6nT5fqn.js → manager.runtime-U_d65Qv1.js} +18 -18
- package/dist/plugin-sdk/matrix.js +16 -16
- package/dist/plugin-sdk/mattermost.js +14 -14
- package/dist/plugin-sdk/msteams.js +16 -16
- package/dist/plugin-sdk/nextcloud-talk.js +15 -15
- package/dist/plugin-sdk/nostr.js +4 -4
- package/dist/plugin-sdk/{outbound-media-CN8bsq-T.js → outbound-media-DWtG1X8J.js} +1 -1
- package/dist/plugin-sdk/{persistent-dedupe-CjCe_L5g.js → persistent-dedupe-BroxGf3Q.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-1vkd_hCn.js → pi-model-discovery-runtime-DWyENOD9.js} +12 -12
- package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-D0XEYwCa.js → pi-tools.before-tool-call.runtime-CPBeYJY2.js} +12 -12
- package/dist/plugin-sdk/{pw-ai-DkDE5awL.js → pw-ai-DR8Hjs-J.js} +12 -12
- package/dist/plugin-sdk/{qmd-manager-CguAGtaF.js → qmd-manager-3qRPZ5ye.js} +7 -7
- package/dist/plugin-sdk/{query-expansion-ChYs46vb.js → query-expansion-BnFYorqr.js} +5 -5
- package/dist/plugin-sdk/{redact-CqHkGWow.js → redact-DTcVTGFU.js} +1 -1
- package/dist/plugin-sdk/{run-command-nYfMDZC3.js → run-command-qzkvaQG1.js} +1 -1
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-BDbgMnYK.js +24 -0
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-BYZKJw25.js +23 -0
- package/dist/plugin-sdk/{send-BDZssl9O.js → send-BZgg6N38.js} +5 -5
- package/dist/plugin-sdk/{session-DPhL1rLb.js → session-Dm0FT_vI.js} +5 -5
- package/dist/plugin-sdk/{signal-BKMAyRnz.js → signal-Dy_XjHKL.js} +6 -6
- package/dist/plugin-sdk/signal.js +14 -14
- package/dist/plugin-sdk/{slack-jues0BBq.js → slack-DNwpGTSd.js} +3 -3
- package/dist/plugin-sdk/slack.js +16 -16
- package/dist/plugin-sdk/{slash-commands.runtime-BJ6veGjC.js → slash-commands.runtime-Bn7T59g3.js} +12 -12
- package/dist/plugin-sdk/{slash-dispatch.runtime-CyWyh0DI.js → slash-dispatch.runtime-BPsvStS0.js} +12 -12
- package/dist/plugin-sdk/{slash-skill-commands.runtime-BiDqNceZ.js → slash-skill-commands.runtime-TDVZ7jxr.js} +12 -12
- package/dist/plugin-sdk/{subagent-registry-runtime-BVsFNLUF.js → subagent-registry-runtime-D3DovVGQ.js} +12 -12
- package/dist/plugin-sdk/{subsystem-DOh66yR6.js → subsystem-DXcqLSNd.js} +1 -1
- package/dist/plugin-sdk/synology-chat.js +4 -4
- package/dist/plugin-sdk/{telegram-D3JLaXTI.js → telegram-B1RGxv8p.js} +4 -4
- package/dist/plugin-sdk/telegram.js +14 -14
- package/dist/plugin-sdk/{text-chunking-Bd2LMKfE.js → text-chunking-CaqMErUv.js} +1 -1
- package/dist/plugin-sdk/{thread-bindings-Cc59nx4d.js → thread-bindings-Bp_o0GHR.js} +48 -48
- package/dist/plugin-sdk/tlon.js +13 -13
- package/dist/plugin-sdk/twitch.js +14 -14
- package/dist/plugin-sdk/{utils-BhiRkVxe.js → utils-BQpbGej3.js} +1 -1
- package/dist/plugin-sdk/{vllm-setup-R5M9rOvm.js → vllm-setup-wjrX_svM.js} +2 -2
- package/dist/plugin-sdk/voice-call.js +12 -12
- package/dist/plugin-sdk/{web-BpHTS6sG.js → web-Dz6AjTQn.js} +16 -16
- package/dist/plugin-sdk/{webhook-targets-t3fxeJQf.js → webhook-targets-yTQuv0k1.js} +1 -1
- package/dist/plugin-sdk/{whatsapp-actions-BAJ27s8B.js → whatsapp-actions-C5SohPL-.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-D6NF4OC0.js → whatsapp-heartbeat-_Kw4PPKA.js} +3 -3
- package/dist/plugin-sdk/whatsapp.js +13 -13
- package/dist/plugin-sdk/zalo.js +15 -15
- package/dist/plugin-sdk/zalouser.js +16 -16
- package/package.json +1 -1
- package/scripts/create-instance.sh +49 -181
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-UvsfFa7Q.js +0 -24
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-CYBj8E4x.js +0 -23
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import { g as normalizeAccountId, h as DEFAULT_ACCOUNT_ID } from "./session-key-CbP51u9x.js";
|
|
2
|
-
import { _ as formatPairingApproveHint, a as formatWhatsAppConfigAllowFromEntries, d as resolveWhatsAppConfigDefaultTo, u as resolveWhatsAppConfigAllowFrom } from "./channel-config-helpers-
|
|
3
|
-
import { Ia as createWhatsAppOutboundBase, La as resolveWhatsAppGroupIntroHint, Oa as listWhatsAppDirectoryGroupsFromConfig, Ra as resolveWhatsAppMentionStripPatterns, ka as listWhatsAppDirectoryPeersFromConfig, no as resolveWhatsAppGroupToolPolicy, or as createActionGate, s as WhatsAppConfigSchema, to as resolveWhatsAppGroupRequireMention, ur as readStringParam, xs as getChatChannelMeta, za as resolveWhatsAppOutboundTarget } from "./thread-bindings-
|
|
2
|
+
import { _ as formatPairingApproveHint, a as formatWhatsAppConfigAllowFromEntries, d as resolveWhatsAppConfigDefaultTo, u as resolveWhatsAppConfigAllowFrom } from "./channel-config-helpers-CFkTEzkz.js";
|
|
3
|
+
import { Ia as createWhatsAppOutboundBase, La as resolveWhatsAppGroupIntroHint, Oa as listWhatsAppDirectoryGroupsFromConfig, Ra as resolveWhatsAppMentionStripPatterns, ka as listWhatsAppDirectoryPeersFromConfig, no as resolveWhatsAppGroupToolPolicy, or as createActionGate, s as WhatsAppConfigSchema, to as resolveWhatsAppGroupRequireMention, ur as readStringParam, xs as getChatChannelMeta, za as resolveWhatsAppOutboundTarget } from "./thread-bindings-Bp_o0GHR.js";
|
|
4
4
|
import "./paths-WR8OhEmw.js";
|
|
5
5
|
import "./github-copilot-token-BGYH4ltJ.js";
|
|
6
|
-
import "./logger-
|
|
6
|
+
import "./logger-C9fkmDdb.js";
|
|
7
7
|
import "./tmp-openclaw-dir-DRPiOszV.js";
|
|
8
|
-
import "./subsystem-
|
|
9
|
-
import { d as normalizeE164 } from "./utils-
|
|
10
|
-
import "./fetch-
|
|
11
|
-
import "./exec-
|
|
8
|
+
import "./subsystem-DXcqLSNd.js";
|
|
9
|
+
import { d as normalizeE164 } from "./utils-BQpbGej3.js";
|
|
10
|
+
import "./fetch-yk-axchG.js";
|
|
11
|
+
import "./exec-BvTkR9oI.js";
|
|
12
12
|
import "./thinking-B2k7q5lY.js";
|
|
13
|
-
import "./query-expansion-
|
|
14
|
-
import "./logger-
|
|
13
|
+
import "./query-expansion-BnFYorqr.js";
|
|
14
|
+
import "./logger-DXnvMlr-.js";
|
|
15
15
|
import "./zod-schema.core-GWl_s9xp.js";
|
|
16
|
-
import "./redact-
|
|
17
|
-
import "./http-registry-
|
|
16
|
+
import "./redact-DTcVTGFU.js";
|
|
17
|
+
import "./http-registry-DyBqqyPO.js";
|
|
18
18
|
import "./pairing-token-BwgaSu88.js";
|
|
19
19
|
import "./ssrf-Dlo7BZU6.js";
|
|
20
|
-
import "./fetch-guard-
|
|
20
|
+
import "./fetch-guard-Cwx1pJhf.js";
|
|
21
21
|
import { i as resolveDefaultGroupPolicy, r as resolveAllowlistProviderRuntimeGroupPolicy } from "./runtime-group-policy-CDs_9_tb.js";
|
|
22
22
|
import "./registry-N-tffRct.js";
|
|
23
23
|
import "./http-body-CLS7yD5S.js";
|
|
24
24
|
import { t as emptyPluginConfigSchema } from "./config-schema-D85tZOYm.js";
|
|
25
25
|
import { r as migrateBaseNameToDefaultAccount, t as applyAccountNameToChannelSection } from "./setup-helpers-B1M39J3a.js";
|
|
26
26
|
import { i as buildChannelConfigSchema } from "./config-schema-BPehl1ON.js";
|
|
27
|
-
import { t as resolveWhatsAppHeartbeatRecipients } from "./whatsapp-heartbeat-
|
|
27
|
+
import { t as resolveWhatsAppHeartbeatRecipients } from "./whatsapp-heartbeat-_Kw4PPKA.js";
|
|
28
28
|
export { DEFAULT_ACCOUNT_ID, WhatsAppConfigSchema, applyAccountNameToChannelSection, buildChannelConfigSchema, createActionGate, createWhatsAppOutboundBase, emptyPluginConfigSchema, formatPairingApproveHint, formatWhatsAppConfigAllowFromEntries, getChatChannelMeta, listWhatsAppDirectoryGroupsFromConfig, listWhatsAppDirectoryPeersFromConfig, migrateBaseNameToDefaultAccount, normalizeAccountId, normalizeE164, readStringParam, resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, resolveWhatsAppConfigAllowFrom, resolveWhatsAppConfigDefaultTo, resolveWhatsAppGroupIntroHint, resolveWhatsAppGroupRequireMention, resolveWhatsAppGroupToolPolicy, resolveWhatsAppHeartbeatRecipients, resolveWhatsAppMentionStripPatterns, resolveWhatsAppOutboundTarget };
|
package/dist/plugin-sdk/zalo.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
import { g as normalizeAccountId, h as DEFAULT_ACCOUNT_ID } from "./session-key-CbP51u9x.js";
|
|
2
|
-
import { B as createAccountListHelpers, _ as formatPairingApproveHint } from "./channel-config-helpers-
|
|
3
|
-
import { Cn as createDedupeCache, L as waitForAbortSignal, P as extractToolSend, Pa as listDirectoryUserEntriesFromAllowFrom, Q as issuePairingChallenge, at as createReplyPrefixOptions, bs as resolveClientIp, ct as logTypingFailure, nt as createTypingCallbacks, oi as evaluateSenderGroupAccess, oo as isNormalizedSenderAllowed, ro as formatAllowFromLowercase, sr as jsonResult, ur as readStringParam } from "./thread-bindings-
|
|
2
|
+
import { B as createAccountListHelpers, _ as formatPairingApproveHint } from "./channel-config-helpers-CFkTEzkz.js";
|
|
3
|
+
import { Cn as createDedupeCache, L as waitForAbortSignal, P as extractToolSend, Pa as listDirectoryUserEntriesFromAllowFrom, Q as issuePairingChallenge, at as createReplyPrefixOptions, bs as resolveClientIp, ct as logTypingFailure, nt as createTypingCallbacks, oi as evaluateSenderGroupAccess, oo as isNormalizedSenderAllowed, ro as formatAllowFromLowercase, sr as jsonResult, ur as readStringParam } from "./thread-bindings-Bp_o0GHR.js";
|
|
4
4
|
import "./paths-WR8OhEmw.js";
|
|
5
5
|
import "./github-copilot-token-BGYH4ltJ.js";
|
|
6
|
-
import "./logger-
|
|
6
|
+
import "./logger-C9fkmDdb.js";
|
|
7
7
|
import "./tmp-openclaw-dir-DRPiOszV.js";
|
|
8
|
-
import "./subsystem-
|
|
9
|
-
import "./utils-
|
|
10
|
-
import "./fetch-
|
|
11
|
-
import "./exec-
|
|
8
|
+
import "./subsystem-DXcqLSNd.js";
|
|
9
|
+
import "./utils-BQpbGej3.js";
|
|
10
|
+
import "./fetch-yk-axchG.js";
|
|
11
|
+
import "./exec-BvTkR9oI.js";
|
|
12
12
|
import "./thinking-B2k7q5lY.js";
|
|
13
|
-
import "./query-expansion-
|
|
14
|
-
import "./logger-
|
|
13
|
+
import "./query-expansion-BnFYorqr.js";
|
|
14
|
+
import "./logger-DXnvMlr-.js";
|
|
15
15
|
import { H as setAccountEnabledInConfigSection, V as deleteAccountFromConfigSection, at as normalizeSecretInputString, it as normalizeResolvedSecretInputString, m as MarkdownConfigSchema, tt as hasConfiguredSecretInput } from "./zod-schema.core-GWl_s9xp.js";
|
|
16
|
-
import "./redact-
|
|
17
|
-
import "./http-registry-
|
|
16
|
+
import "./redact-DTcVTGFU.js";
|
|
17
|
+
import "./http-registry-DyBqqyPO.js";
|
|
18
18
|
import "./pairing-token-BwgaSu88.js";
|
|
19
19
|
import "./ssrf-Dlo7BZU6.js";
|
|
20
|
-
import "./fetch-guard-
|
|
20
|
+
import "./fetch-guard-Cwx1pJhf.js";
|
|
21
21
|
import { a as resolveOpenProviderRuntimeGroupPolicy, i as resolveDefaultGroupPolicy, s as warnMissingProviderGroupPolicyFallbackOnce } from "./runtime-group-policy-CDs_9_tb.js";
|
|
22
22
|
import "./registry-N-tffRct.js";
|
|
23
23
|
import "./http-body-CLS7yD5S.js";
|
|
24
24
|
import { t as emptyPluginConfigSchema } from "./config-schema-D85tZOYm.js";
|
|
25
|
-
import { c as resolveWebhookTargets, d as resolveWebhookPath, i as resolveSingleWebhookTarget, l as withResolvedWebhookRequestPipeline, n as registerWebhookTargetWithPluginRoute, s as resolveWebhookTargetWithAuthOrRejectSync, t as registerWebhookTarget } from "./webhook-targets-
|
|
25
|
+
import { c as resolveWebhookTargets, d as resolveWebhookPath, i as resolveSingleWebhookTarget, l as withResolvedWebhookRequestPipeline, n as registerWebhookTargetWithPluginRoute, s as resolveWebhookTargetWithAuthOrRejectSync, t as registerWebhookTarget } from "./webhook-targets-yTQuv0k1.js";
|
|
26
26
|
import { r as applyBasicWebhookRequestGuards, s as readJsonWebhookBodyOrReject } from "./webhook-request-guards-BSr2HYoW.js";
|
|
27
27
|
import { o as buildTokenChannelStatusSummary, t as buildBaseAccountStatusSnapshot } from "./status-helpers-BZuLH1ue.js";
|
|
28
28
|
import "./provider-env-vars-BJJqyIIb.js";
|
|
29
|
-
import { C as setTopLevelChannelDmPolicyWithAllowFrom, _ as runSingleChannelSecretStep, h as resolveAccountIdForConfigure, i as mergeAllowFromEntries, m as promptSingleChannelSecretInput, r as buildSingleChannelSecretPromptState, t as addWildcardAllowFrom, u as promptAccountId } from "./helpers-
|
|
29
|
+
import { C as setTopLevelChannelDmPolicyWithAllowFrom, _ as runSingleChannelSecretStep, h as resolveAccountIdForConfigure, i as mergeAllowFromEntries, m as promptSingleChannelSecretInput, r as buildSingleChannelSecretPromptState, t as addWildcardAllowFrom, u as promptAccountId } from "./helpers-Cj2lgcNt.js";
|
|
30
30
|
import { n as applySetupAccountConfigPatch, r as migrateBaseNameToDefaultAccount, t as applyAccountNameToChannelSection } from "./setup-helpers-B1M39J3a.js";
|
|
31
|
-
import { a as resolveSenderCommandAuthorizationWithRuntime, n as resolveChannelAccountConfigBasePath, o as buildChannelSendResult, r as resolveDirectDmAuthorizationOutcome, t as chunkTextForOutbound } from "./text-chunking-
|
|
31
|
+
import { a as resolveSenderCommandAuthorizationWithRuntime, n as resolveChannelAccountConfigBasePath, o as buildChannelSendResult, r as resolveDirectDmAuthorizationOutcome, t as chunkTextForOutbound } from "./text-chunking-CaqMErUv.js";
|
|
32
32
|
import { i as buildChannelConfigSchema } from "./config-schema-BPehl1ON.js";
|
|
33
33
|
import { t as createScopedPairingAccess } from "./pairing-access-bXidxMna.js";
|
|
34
34
|
import { r as resolveInboundRouteEnvelopeBuilderWithRuntime } from "./inbound-envelope-BxdUZQxb.js";
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { g as normalizeAccountId, h as DEFAULT_ACCOUNT_ID } from "./session-key-CbP51u9x.js";
|
|
2
|
-
import { B as createAccountListHelpers, _ as formatPairingApproveHint } from "./channel-config-helpers-
|
|
3
|
-
import { J as summarizeMapping, Q as issuePairingChallenge, at as createReplyPrefixOptions, ci as resolveSenderScopedGroupPolicy, et as resolveMentionGatingWithBypass, h as ToolPolicySchema, ii as evaluateGroupRouteAccessForPolicy, nt as createTypingCallbacks, q as mergeAllowlist, ro as formatAllowFromLowercase, tt as isDangerousNameMatchingEnabled } from "./thread-bindings-
|
|
2
|
+
import { B as createAccountListHelpers, _ as formatPairingApproveHint } from "./channel-config-helpers-CFkTEzkz.js";
|
|
3
|
+
import { J as summarizeMapping, Q as issuePairingChallenge, at as createReplyPrefixOptions, ci as resolveSenderScopedGroupPolicy, et as resolveMentionGatingWithBypass, h as ToolPolicySchema, ii as evaluateGroupRouteAccessForPolicy, nt as createTypingCallbacks, q as mergeAllowlist, ro as formatAllowFromLowercase, tt as isDangerousNameMatchingEnabled } from "./thread-bindings-Bp_o0GHR.js";
|
|
4
4
|
import "./paths-WR8OhEmw.js";
|
|
5
5
|
import "./github-copilot-token-BGYH4ltJ.js";
|
|
6
|
-
import "./logger-
|
|
6
|
+
import "./logger-C9fkmDdb.js";
|
|
7
7
|
import { t as resolvePreferredOpenClawTmpDir } from "./tmp-openclaw-dir-DRPiOszV.js";
|
|
8
|
-
import "./subsystem-
|
|
9
|
-
import "./utils-
|
|
10
|
-
import "./fetch-
|
|
11
|
-
import "./exec-
|
|
8
|
+
import "./subsystem-DXcqLSNd.js";
|
|
9
|
+
import "./utils-BQpbGej3.js";
|
|
10
|
+
import "./fetch-yk-axchG.js";
|
|
11
|
+
import "./exec-BvTkR9oI.js";
|
|
12
12
|
import "./thinking-B2k7q5lY.js";
|
|
13
|
-
import "./query-expansion-
|
|
14
|
-
import "./logger-
|
|
13
|
+
import "./query-expansion-BnFYorqr.js";
|
|
14
|
+
import "./logger-DXnvMlr-.js";
|
|
15
15
|
import { H as setAccountEnabledInConfigSection, V as deleteAccountFromConfigSection, m as MarkdownConfigSchema } from "./zod-schema.core-GWl_s9xp.js";
|
|
16
|
-
import "./redact-
|
|
17
|
-
import "./http-registry-
|
|
16
|
+
import "./redact-DTcVTGFU.js";
|
|
17
|
+
import "./http-registry-DyBqqyPO.js";
|
|
18
18
|
import "./pairing-token-BwgaSu88.js";
|
|
19
19
|
import "./ssrf-Dlo7BZU6.js";
|
|
20
|
-
import "./fetch-guard-
|
|
20
|
+
import "./fetch-guard-Cwx1pJhf.js";
|
|
21
21
|
import { a as resolveOpenProviderRuntimeGroupPolicy, i as resolveDefaultGroupPolicy, s as warnMissingProviderGroupPolicyFallbackOnce } from "./runtime-group-policy-CDs_9_tb.js";
|
|
22
22
|
import "./registry-N-tffRct.js";
|
|
23
23
|
import "./http-body-CLS7yD5S.js";
|
|
24
24
|
import { t as emptyPluginConfigSchema } from "./config-schema-D85tZOYm.js";
|
|
25
25
|
import { t as buildBaseAccountStatusSnapshot } from "./status-helpers-BZuLH1ue.js";
|
|
26
26
|
import "./provider-env-vars-BJJqyIIb.js";
|
|
27
|
-
import { C as setTopLevelChannelDmPolicyWithAllowFrom, h as resolveAccountIdForConfigure, i as mergeAllowFromEntries, t as addWildcardAllowFrom, u as promptAccountId } from "./helpers-
|
|
27
|
+
import { C as setTopLevelChannelDmPolicyWithAllowFrom, h as resolveAccountIdForConfigure, i as mergeAllowFromEntries, t as addWildcardAllowFrom, u as promptAccountId } from "./helpers-Cj2lgcNt.js";
|
|
28
28
|
import { a as patchScopedAccountConfig, n as applySetupAccountConfigPatch, r as migrateBaseNameToDefaultAccount, t as applyAccountNameToChannelSection } from "./setup-helpers-B1M39J3a.js";
|
|
29
29
|
import { t as formatResolvedUnresolvedNote } from "./resolution-notes-DLPPP3rA.js";
|
|
30
|
-
import { i as resolveSenderCommandAuthorization, n as resolveChannelAccountConfigBasePath, o as buildChannelSendResult, t as chunkTextForOutbound } from "./text-chunking-
|
|
30
|
+
import { i as resolveSenderCommandAuthorization, n as resolveChannelAccountConfigBasePath, o as buildChannelSendResult, t as chunkTextForOutbound } from "./text-chunking-CaqMErUv.js";
|
|
31
31
|
import { i as buildChannelConfigSchema } from "./config-schema-BPehl1ON.js";
|
|
32
32
|
import { t as createScopedPairingAccess } from "./pairing-access-bXidxMna.js";
|
|
33
33
|
import { a as resolveOutboundMediaUrls, o as sendMediaWithLeadingCaption, r as isNumericTargetId, s as sendPayloadWithChunkedTextAndMedia } from "./reply-payload-C0CJpM2K.js";
|
|
34
|
-
import { t as loadOutboundMediaFromUrl } from "./outbound-media-
|
|
35
|
-
import { t as promptChannelAccessConfig } from "./channel-access-
|
|
34
|
+
import { t as loadOutboundMediaFromUrl } from "./outbound-media-DWtG1X8J.js";
|
|
35
|
+
import { t as promptChannelAccessConfig } from "./channel-access-BaZDvsTA.js";
|
|
36
36
|
export { DEFAULT_ACCOUNT_ID, MarkdownConfigSchema, ToolPolicySchema, addWildcardAllowFrom, applyAccountNameToChannelSection, applySetupAccountConfigPatch, buildBaseAccountStatusSnapshot, buildChannelConfigSchema, buildChannelSendResult, chunkTextForOutbound, createAccountListHelpers, createReplyPrefixOptions, createScopedPairingAccess, createTypingCallbacks, deleteAccountFromConfigSection, emptyPluginConfigSchema, evaluateGroupRouteAccessForPolicy, formatAllowFromLowercase, formatPairingApproveHint, formatResolvedUnresolvedNote, isDangerousNameMatchingEnabled, isNumericTargetId, issuePairingChallenge, loadOutboundMediaFromUrl, mergeAllowFromEntries, mergeAllowlist, migrateBaseNameToDefaultAccount, normalizeAccountId, patchScopedAccountConfig, promptAccountId, promptChannelAccessConfig, resolveAccountIdForConfigure, resolveChannelAccountConfigBasePath, resolveDefaultGroupPolicy, resolveMentionGatingWithBypass, resolveOpenProviderRuntimeGroupPolicy, resolveOutboundMediaUrls, resolvePreferredOpenClawTmpDir, resolveSenderCommandAuthorization, resolveSenderScopedGroupPolicy, sendMediaWithLeadingCaption, sendPayloadWithChunkedTextAndMedia, setAccountEnabledInConfigSection, setTopLevelChannelDmPolicyWithAllowFrom, summarizeMapping, warnMissingProviderGroupPolicyFallbackOnce };
|
package/package.json
CHANGED
|
@@ -2,13 +2,6 @@
|
|
|
2
2
|
# =================================================================
|
|
3
3
|
# OpenClaw 深度集成初始化工具 (create-instance.sh)
|
|
4
4
|
# 功能:创建实例目录、复制源码、安装依赖、配置模型、启动服务
|
|
5
|
-
#
|
|
6
|
-
# 架构说明:
|
|
7
|
-
# - 源码位置: ~/openclaw-runtime/node_modules/openclaw-multi-auto
|
|
8
|
-
# - 实例位置: ~/openclaws/实例名/
|
|
9
|
-
# - 源码复制: ~/openclaws/实例名/dist (复制源码,不含 node_modules)
|
|
10
|
-
# - 依赖安装: ~/openclaws/实例名/node_modules (pnpm 安装)
|
|
11
|
-
# - 启动方式: ./start.sh (从 dist 目录启动,使用实例根目录的 node_modules)
|
|
12
5
|
# =================================================================
|
|
13
6
|
|
|
14
7
|
set -e
|
|
@@ -29,10 +22,7 @@ for cmd in node pnpm; do
|
|
|
29
22
|
done
|
|
30
23
|
|
|
31
24
|
# --- 1. 源码路径定位 ---
|
|
32
|
-
# 默认源码路径:~/openclaw-runtime/node_modules/openclaw-multi-auto
|
|
33
25
|
SOURCE_CODE="$HOME/openclaw-runtime/node_modules/openclaw-multi-auto"
|
|
34
|
-
|
|
35
|
-
# 允许通过环境变量覆盖
|
|
36
26
|
if [ -n "$OPENCLAW_SOURCE_DIR" ] && [ -d "$OPENCLAW_SOURCE_DIR" ]; then
|
|
37
27
|
SOURCE_CODE="$OPENCLAW_SOURCE_DIR"
|
|
38
28
|
echo -e "${BLUE}📂 使用环境变量指定的源码路径: $SOURCE_CODE${NC}"
|
|
@@ -41,21 +31,13 @@ else
|
|
|
41
31
|
echo -e "${GREEN}✅ 找到本地源码路径: $SOURCE_CODE${NC}"
|
|
42
32
|
else
|
|
43
33
|
echo -e "${RED}❌ 错误: 未找到 OpenClaw 源码目录${NC}"
|
|
44
|
-
echo -e "${YELLOW}源码路径: $SOURCE_CODE${NC}"
|
|
45
|
-
echo -e "${YELLOW}请确认已正确安装 openclaw-multi-auto${NC}"
|
|
46
34
|
exit 1
|
|
47
35
|
fi
|
|
48
36
|
fi
|
|
49
37
|
|
|
50
|
-
#
|
|
38
|
+
# 实例基础目录
|
|
51
39
|
INSTANCES_BASE="$HOME/openclaws"
|
|
52
40
|
|
|
53
|
-
# 实例根目录
|
|
54
|
-
INSTANCE_DIR="$INSTANCES_BASE/${INSTANCE_NAME}"
|
|
55
|
-
|
|
56
|
-
# dist 目录:实例根目录(不使用子目录,避免 root-alias.cjs 路径解析问题)
|
|
57
|
-
DIST_DIR="${INSTANCE_DIR}"
|
|
58
|
-
|
|
59
41
|
# --- 2. 获取实例名称 ---
|
|
60
42
|
INSTANCE_NAME="${1:-}"
|
|
61
43
|
if [ -z "$INSTANCE_NAME" ]; then
|
|
@@ -73,16 +55,16 @@ fi
|
|
|
73
55
|
|
|
74
56
|
# --- 4. 定义实例目录并清理旧残留 ---
|
|
75
57
|
INSTANCE_DIR="$INSTANCES_BASE/${INSTANCE_NAME}"
|
|
58
|
+
DIST_DIR="${INSTANCE_DIR}" # 源码复制到实例根目录(根据您的脚本)
|
|
76
59
|
|
|
77
60
|
echo -e "${BLUE}🏗️ 正在深度初始化实例: ${INSTANCE_NAME} (端口 ${PORT})${NC}"
|
|
78
|
-
echo "SOURCE_CODE = $SOURCE_CODE"
|
|
79
61
|
|
|
80
62
|
if [ -d "$INSTANCE_DIR" ]; then
|
|
81
63
|
echo -e "${YELLOW}⚠️ 清理旧实例目录...${NC}"
|
|
82
64
|
rm -rf "$INSTANCE_DIR"
|
|
83
65
|
fi
|
|
84
66
|
|
|
85
|
-
#
|
|
67
|
+
# 清理可能遗留的 workspace 配置
|
|
86
68
|
[ -d "${INSTANCES_BASE}/node_modules" ] && rm -rf "${INSTANCES_BASE}/node_modules"
|
|
87
69
|
[ -f "${INSTANCES_BASE}/pnpm-workspace.yaml" ] && rm -f "${INSTANCES_BASE}/pnpm-workspace.yaml"
|
|
88
70
|
|
|
@@ -106,16 +88,6 @@ fi
|
|
|
106
88
|
|
|
107
89
|
# --- 7. 核心代码同步 (从源码复制到实例根目录) ---
|
|
108
90
|
echo -e "${BLUE}🔄 正在从源码复制文件到实例根目录...${NC}"
|
|
109
|
-
echo -e "${YELLOW}源码路径: ${SOURCE_CODE}${NC}"
|
|
110
|
-
echo -e "${YELLOW}目标路径: ${INSTANCE_DIR}${NC}"
|
|
111
|
-
|
|
112
|
-
# 清理已存在的实例目录(如果存在)
|
|
113
|
-
if [ -d "$INSTANCE_DIR" ]; then
|
|
114
|
-
echo -e "${YELLOW}⚠️ 清理旧实例目录...${NC}"
|
|
115
|
-
rm -rf "$INSTANCE_DIR"
|
|
116
|
-
fi
|
|
117
|
-
|
|
118
|
-
# 复制源码所有内容到实例根目录
|
|
119
91
|
if cp -r "${SOURCE_CODE}/." "${INSTANCE_DIR}/"; then
|
|
120
92
|
echo -e "${GREEN}✅ 源码复制成功${NC}"
|
|
121
93
|
else
|
|
@@ -123,6 +95,13 @@ else
|
|
|
123
95
|
exit 1
|
|
124
96
|
fi
|
|
125
97
|
|
|
98
|
+
# 【关键修复】如果 config 是符号链接,则替换为普通目录
|
|
99
|
+
if [ -L "${INSTANCE_DIR}/config" ]; then
|
|
100
|
+
echo -e "${YELLOW}⚠️ 检测到 config 为符号链接,正在修复为普通目录...${NC}"
|
|
101
|
+
rm -f "${INSTANCE_DIR}/config"
|
|
102
|
+
mkdir -p "${INSTANCE_DIR}/config"
|
|
103
|
+
fi
|
|
104
|
+
|
|
126
105
|
# 验证关键文件是否存在
|
|
127
106
|
if [ ! -f "${INSTANCE_DIR}/package.json" ]; then
|
|
128
107
|
echo -e "${RED}❌ 错误: 实例目录中未找到 package.json${NC}"
|
|
@@ -130,9 +109,7 @@ if [ ! -f "${INSTANCE_DIR}/package.json" ]; then
|
|
|
130
109
|
fi
|
|
131
110
|
|
|
132
111
|
# --- 依赖安装 ---
|
|
133
|
-
# 注意:npm/pnpm 发布的包不包含 node_modules,需要在实例中安装
|
|
134
112
|
echo -e "${BLUE}📦 正在安装依赖...${NC}"
|
|
135
|
-
|
|
136
113
|
cd "${INSTANCE_DIR}"
|
|
137
114
|
|
|
138
115
|
# 临时清理可能干扰的 workspace 配置
|
|
@@ -141,11 +118,9 @@ if [ -f "${INSTANCES_BASE}/pnpm-workspace.yaml" ]; then
|
|
|
141
118
|
mv "${INSTANCES_BASE}/pnpm-workspace.yaml" "${INSTANCES_BASE}/pnpm-workspace.yaml.bak.$(date +%s)"
|
|
142
119
|
fi
|
|
143
120
|
|
|
144
|
-
# 设置 Sharp 镜像(国内加速)
|
|
145
121
|
export SHARP_BINARY_HOST="https://npmmirror.com/mirrors/sharp"
|
|
146
122
|
export SHARP_LIBVIPS_BINARY_HOST="https://npmmirror.com/mirrors/sharp-libvips"
|
|
147
123
|
|
|
148
|
-
# 安装依赖(使用国内镜像)
|
|
149
124
|
if ! pnpm install --shamefully-hoist --ignore-workspace --registry=https://registry.npmmirror.com --no-frozen-lockfile > .install.log 2>&1; then
|
|
150
125
|
echo -e "${RED}❌ 依赖安装失败,请查看日志: ${INSTANCE_DIR}/.install.log${NC}"
|
|
151
126
|
exit 1
|
|
@@ -157,22 +132,15 @@ if [ ! -d "node_modules" ]; then
|
|
|
157
132
|
fi
|
|
158
133
|
echo -e "${GREEN}✅ 依赖安装成功${NC}"
|
|
159
134
|
|
|
160
|
-
# ---
|
|
135
|
+
# --- 安装扩展 page-action-cache ---
|
|
161
136
|
echo -e "${BLUE}📦 正在安装扩展 page-action-cache...${NC}"
|
|
162
|
-
|
|
163
|
-
# 确保 extensions 目录存在
|
|
164
137
|
mkdir -p "${INSTANCE_DIR}/extensions"
|
|
165
|
-
|
|
166
138
|
cd "${INSTANCE_DIR}/extensions"
|
|
167
|
-
|
|
168
|
-
# 下载 page-action-cache tarball 并解压到临时目录
|
|
169
139
|
TEMP_EXT_DIR=$(mktemp -d)
|
|
170
140
|
cd "$TEMP_EXT_DIR"
|
|
171
141
|
if npm pack page-action-cache --registry=https://registry.npmmirror.com --quiet > /dev/null 2>&1; then
|
|
172
142
|
TARBALL=$(ls *.tgz)
|
|
173
|
-
# 解压到临时目录
|
|
174
143
|
tar -xzf "$TARBALL"
|
|
175
|
-
# 移动到 extensions/page-action-cache
|
|
176
144
|
rm -rf "${INSTANCE_DIR}/extensions/page-action-cache"
|
|
177
145
|
mv package "${INSTANCE_DIR}/extensions/page-action-cache"
|
|
178
146
|
echo -e "${GREEN}✅ page-action-cache 安装成功${NC}"
|
|
@@ -180,8 +148,6 @@ else
|
|
|
180
148
|
echo -e "${YELLOW}⚠️ page-action-cache 下载失败${NC}"
|
|
181
149
|
fi
|
|
182
150
|
rm -rf "$TEMP_EXT_DIR"
|
|
183
|
-
|
|
184
|
-
# 返回实例根目录
|
|
185
151
|
cd "${INSTANCE_DIR}"
|
|
186
152
|
|
|
187
153
|
# --- 8. 参数与交互式获取 ---
|
|
@@ -206,9 +172,17 @@ if [ -z "$API_KEY" ]; then
|
|
|
206
172
|
fi
|
|
207
173
|
|
|
208
174
|
# --- 9. 生成深度配置文件 ---
|
|
209
|
-
|
|
210
|
-
|
|
175
|
+
# 【双重保障】再次确保 config 是普通目录且可写
|
|
176
|
+
if [ -e "${INSTANCE_DIR}/config" ] && [ ! -d "${INSTANCE_DIR}/config" ]; then
|
|
177
|
+
echo -e "${YELLOW}⚠️ 检测到 config 不是目录,正在修复...${NC}"
|
|
178
|
+
rm -f "${INSTANCE_DIR}/config"
|
|
179
|
+
fi
|
|
180
|
+
mkdir -p "${INSTANCE_DIR}/config"
|
|
181
|
+
touch "${INSTANCE_DIR}/config/.write_test" || { echo -e "${RED}❌ config 目录不可写${NC}"; exit 1; }
|
|
182
|
+
rm -f "${INSTANCE_DIR}/config/.write_test"
|
|
211
183
|
|
|
184
|
+
# 设置模型变量
|
|
185
|
+
ZAI_KEY=""; DS_KEY=""; MX_KEY=""; KIMI_KEY=""; QWEN_KEY=""
|
|
212
186
|
case "$MODEL_PROVIDER" in
|
|
213
187
|
zai) PRIMARY_MODEL="zai/glm-5"; ZAI_KEY="$API_KEY" ;;
|
|
214
188
|
deepseek) PRIMARY_MODEL="deepseek/deepseek-chat"; DS_KEY="$API_KEY" ;;
|
|
@@ -235,72 +209,32 @@ cat > "${INSTANCE_DIR}/config/openclaw.json" << EOF
|
|
|
235
209
|
"baseUrl": "https://open.bigmodel.cn/api/paas/v4",
|
|
236
210
|
"apiKey": "${ZAI_KEY}",
|
|
237
211
|
"api": "openai-completions",
|
|
238
|
-
"models": [
|
|
239
|
-
{
|
|
240
|
-
"id": "glm-5",
|
|
241
|
-
"name": "GLM-5",
|
|
242
|
-
"input": ["text"],
|
|
243
|
-
"contextWindow": 32768,
|
|
244
|
-
"maxTokens": 4096
|
|
245
|
-
}
|
|
246
|
-
]
|
|
212
|
+
"models": [{"id": "glm-5","name": "GLM-5","input": ["text"],"contextWindow": 32768,"maxTokens": 4096}]
|
|
247
213
|
},
|
|
248
214
|
"deepseek": {
|
|
249
215
|
"baseUrl": "https://api.deepseek.com",
|
|
250
216
|
"apiKey": "${DS_KEY}",
|
|
251
217
|
"api": "openai-completions",
|
|
252
|
-
"models": [
|
|
253
|
-
{
|
|
254
|
-
"id": "deepseek-chat",
|
|
255
|
-
"name": "DeepSeek-Chat",
|
|
256
|
-
"input": ["text"],
|
|
257
|
-
"contextWindow": 32768,
|
|
258
|
-
"maxTokens": 4096
|
|
259
|
-
}
|
|
260
|
-
]
|
|
218
|
+
"models": [{"id": "deepseek-chat","name": "DeepSeek-Chat","input": ["text"],"contextWindow": 32768,"maxTokens": 4096}]
|
|
261
219
|
},
|
|
262
220
|
"minimax-cn": {
|
|
263
221
|
"baseUrl": "https://api.minimax.chat/v1",
|
|
264
222
|
"apiKey": "${MX_KEY}",
|
|
265
223
|
"api": "openai-completions",
|
|
266
|
-
"models": [
|
|
267
|
-
{
|
|
268
|
-
"id": "MiniMax-M2.5-highspeed",
|
|
269
|
-
"name": "MiniMax-M2.5-highspeed",
|
|
270
|
-
"input": ["text"],
|
|
271
|
-
"cost": { "input": 0.000002, "output": 0.000006 },
|
|
272
|
-
"contextWindow": 65536,
|
|
273
|
-
"maxTokens": 8192
|
|
274
|
-
}
|
|
275
|
-
]
|
|
224
|
+
"models": [{"id": "MiniMax-M2.5-highspeed","name": "MiniMax-M2.5-highspeed","input": ["text"],"cost": {"input": 2e-6,"output": 6e-6},"contextWindow": 65536,"maxTokens": 8192}]
|
|
276
225
|
},
|
|
277
226
|
"ollama": {
|
|
278
227
|
"baseUrl": "http://127.0.0.1:11434",
|
|
279
228
|
"api": "ollama",
|
|
280
|
-
"models": [
|
|
281
|
-
{
|
|
282
|
-
"id": "qwen3-vl:8b",
|
|
283
|
-
"name": "Qwen3-VL-8B",
|
|
284
|
-
"input": ["text", "image"],
|
|
285
|
-
"contextWindow": 32768,
|
|
286
|
-
"maxTokens": 4096
|
|
287
|
-
}
|
|
288
|
-
]
|
|
229
|
+
"models": [{"id": "qwen3-vl:8b","name": "Qwen3-VL-8B","input": ["text","image"],"contextWindow": 32768,"maxTokens": 4096}]
|
|
289
230
|
}
|
|
290
231
|
}
|
|
291
232
|
},
|
|
292
233
|
"agents": {
|
|
293
234
|
"defaults": {
|
|
294
235
|
"model": { "primary": "${PRIMARY_MODEL}" },
|
|
295
|
-
"imageModel": {
|
|
296
|
-
|
|
297
|
-
"fallbacks": [
|
|
298
|
-
"ollama/qwen3-vl:8b"
|
|
299
|
-
]
|
|
300
|
-
},
|
|
301
|
-
"models": {
|
|
302
|
-
"ollama/qwen3-vl:8b": {}
|
|
303
|
-
},
|
|
236
|
+
"imageModel": { "primary": "ollama/qwen3-vl:8b", "fallbacks": ["ollama/qwen3-vl:8b"] },
|
|
237
|
+
"models": { "ollama/qwen3-vl:8b": {} },
|
|
304
238
|
"workspace": "${INSTANCE_DIR}/workspace",
|
|
305
239
|
"compaction": { "mode": "safeguard" }
|
|
306
240
|
}
|
|
@@ -310,17 +244,14 @@ cat > "${INSTANCE_DIR}/config/openclaw.json" << EOF
|
|
|
310
244
|
}
|
|
311
245
|
EOF
|
|
312
246
|
|
|
313
|
-
# --- 10. 预装可选技能
|
|
247
|
+
# --- 10. 预装可选技能 ---
|
|
314
248
|
echo -e "${BLUE}🤖 正在注入飞书运维机器人引导...${NC}"
|
|
315
249
|
SKILLS_DIR="${INSTANCE_DIR}/workspace/skills"
|
|
316
250
|
mkdir -p "$SKILLS_DIR"
|
|
317
|
-
|
|
318
251
|
SKILL_PKG="jinyu-skill-feishu-config"
|
|
319
252
|
REGISTRY="https://registry.npmmirror.com"
|
|
320
|
-
|
|
321
253
|
TEMP_DIR=$(mktemp -d)
|
|
322
254
|
cd "$TEMP_DIR"
|
|
323
|
-
|
|
324
255
|
if npm pack "$SKILL_PKG@latest" --registry="$REGISTRY" --quiet > /dev/null; then
|
|
325
256
|
TARBALL=$(ls *.tgz)
|
|
326
257
|
mkdir -p "$SKILLS_DIR/feishu-config"
|
|
@@ -329,11 +260,10 @@ if npm pack "$SKILL_PKG@latest" --registry="$REGISTRY" --quiet > /dev/null; then
|
|
|
329
260
|
else
|
|
330
261
|
echo -e "${YELLOW}⚠️ 技能 feishu-config 下载失败,跳过(可手动安装)${NC}"
|
|
331
262
|
fi
|
|
332
|
-
|
|
333
263
|
cd - > /dev/null
|
|
334
264
|
rm -rf "$TEMP_DIR"
|
|
335
265
|
|
|
336
|
-
# --- 如果实例是 yunwei
|
|
266
|
+
# --- 如果实例是 yunwei,安装角色包 ---
|
|
337
267
|
if [ "$INSTANCE_NAME" = "yunwei" ]; then
|
|
338
268
|
echo -e "${BLUE}🛠️ 检测到运维实例,正在安装角色包 role-openclaw-yunwei...${NC}"
|
|
339
269
|
TEMP_ROLE_DIR=$(mktemp -d)
|
|
@@ -342,22 +272,15 @@ if [ "$INSTANCE_NAME" = "yunwei" ]; then
|
|
|
342
272
|
TARBALL=$(ls *.tgz)
|
|
343
273
|
tar -xzf "$TARBALL" --strip-components=1
|
|
344
274
|
rm "$TARBALL"
|
|
345
|
-
|
|
346
|
-
# 1. 将 memory、skills 等目录复制到 workspace 根目录(排除 .md 文件)
|
|
347
275
|
for item in *; do
|
|
348
276
|
if [ -d "$item" ]; then
|
|
349
|
-
# 目录(如 memory、skills)复制到 workspace
|
|
350
277
|
cp -r "$item" "$INSTANCE_DIR/workspace/"
|
|
351
278
|
elif [ -f "$item" ]; then
|
|
352
|
-
# 非 .md 文件(如 package.json)也复制到 workspace
|
|
353
279
|
cp "$item" "$INSTANCE_DIR/workspace/" 2>/dev/null || true
|
|
354
280
|
fi
|
|
355
281
|
done
|
|
356
|
-
|
|
357
|
-
# 2. 创建实例根目录下的 docs 目录,并将所有 .md 文件复制过去
|
|
358
282
|
mkdir -p "$INSTANCE_DIR/docs/reference/templates"
|
|
359
283
|
cp *.md "$INSTANCE_DIR/docs/reference/templates/" 2>/dev/null || true
|
|
360
|
-
|
|
361
284
|
echo -e "${GREEN}✅ 角色包安装完成,workspace 已初始化${NC}"
|
|
362
285
|
else
|
|
363
286
|
echo -e "${YELLOW}⚠️ 角色包下载失败,请检查网络或手动安装${NC}"
|
|
@@ -366,56 +289,35 @@ if [ "$INSTANCE_NAME" = "yunwei" ]; then
|
|
|
366
289
|
rm -rf "$TEMP_ROLE_DIR"
|
|
367
290
|
fi
|
|
368
291
|
|
|
369
|
-
# --- 设置 profile
|
|
370
|
-
echo -e "${BLUE}🔗 配置 profile
|
|
292
|
+
# --- 设置 profile 链接 ---
|
|
293
|
+
echo -e "${BLUE}🔗 配置 profile 链接...${NC}"
|
|
371
294
|
PROFILES_DIR="$HOME/.openclaw/profiles"
|
|
372
295
|
mkdir -p "$PROFILES_DIR"
|
|
373
|
-
|
|
374
|
-
# 配置文件软链接
|
|
375
296
|
ln -sf "$INSTANCE_DIR/config/openclaw.json" "$PROFILES_DIR/$INSTANCE_NAME.json"
|
|
376
|
-
|
|
377
|
-
# 状态目录软链接(profile 默认状态目录为 ~/.openclaw/profiles/<profile>/)
|
|
378
|
-
# 使用 -sfn 以确保目录链接正确
|
|
379
297
|
ln -sfn "$INSTANCE_DIR/state" "$PROFILES_DIR/$INSTANCE_NAME"
|
|
380
|
-
|
|
381
298
|
echo -e "${GREEN}✅ 现在可以使用 'openclaw --profile $INSTANCE_NAME ...' 管理此实例${NC}"
|
|
382
299
|
|
|
383
|
-
# --- 11.
|
|
300
|
+
# --- 11. 生成启动脚本 ---
|
|
384
301
|
cat > "${INSTANCE_DIR}/start.sh" << 'EOF'
|
|
385
302
|
#!/usr/bin/env bash
|
|
386
|
-
# =================================================================
|
|
387
|
-
# OpenClaw 实例启动脚本
|
|
388
|
-
# 功能:从 dist 目录启动实例,支持网关、TUI 等多种模式
|
|
389
|
-
# 源码位置:~/openclaws/实例名/dist
|
|
390
|
-
# =================================================================
|
|
391
|
-
|
|
392
|
-
# 获取脚本所在目录(实例根目录)
|
|
393
303
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
394
304
|
INSTANCE_NAME=$(basename "$SCRIPT_DIR")
|
|
305
|
+
DIST_DIR="$SCRIPT_DIR"
|
|
395
306
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
echo -e "\033[0;31m❌ 错误: 实例目录中未找到 package.json\033[0m"
|
|
399
|
-
echo -e "\033[1;33m请重新运行 create-instance.sh 脚本\033[0m"
|
|
307
|
+
if [ ! -f "$DIST_DIR/package.json" ]; then
|
|
308
|
+
echo -e "\033[0;31m❌ 错误: 未找到 package.json\033[0m"
|
|
400
309
|
exit 1
|
|
401
310
|
fi
|
|
402
|
-
|
|
403
|
-
# 检查实例根目录中是否包含 node_modules(依赖已安装)
|
|
404
311
|
if [ ! -d "$SCRIPT_DIR/node_modules" ]; then
|
|
405
|
-
echo -e "\033[0;31m❌ 错误:
|
|
406
|
-
echo -e "\033[1;33m请重新运行 create-instance.sh 脚本安装依赖\033[0m"
|
|
312
|
+
echo -e "\033[0;31m❌ 错误: 未找到 node_modules\033[0m"
|
|
407
313
|
exit 1
|
|
408
314
|
fi
|
|
409
315
|
|
|
410
|
-
# 导出核心配置路径
|
|
411
316
|
export OPENCLAW_CONFIG_PATH="$SCRIPT_DIR/config/openclaw.json"
|
|
412
317
|
export OPENCLAW_TMP_DIR="$SCRIPT_DIR/tmp"
|
|
413
318
|
export OPENCLAW_STATE_DIR="$SCRIPT_DIR/state"
|
|
414
|
-
|
|
415
|
-
# 设置 NODE_PATH 以使用实例根目录下的 node_modules
|
|
416
319
|
export NODE_PATH="$SCRIPT_DIR/node_modules:$NODE_PATH"
|
|
417
320
|
|
|
418
|
-
# 从配置中提取 workspace 路径并导出
|
|
419
321
|
if [ -f "$OPENCLAW_CONFIG_PATH" ]; then
|
|
420
322
|
export OPENCLAW_WORKSPACE=$(node -e "
|
|
421
323
|
const cfg = require('$OPENCLAW_CONFIG_PATH');
|
|
@@ -423,65 +325,37 @@ if [ -f "$OPENCLAW_CONFIG_PATH" ]; then
|
|
|
423
325
|
")
|
|
424
326
|
fi
|
|
425
327
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
PLIST_LABEL="ai.openclaw.$INSTANCE_NAME"
|
|
429
|
-
PLIST_PATH="$HOME/Library/LaunchAgents/$PLIST_LABEL.plist"
|
|
430
|
-
if [ ! -f "$PLIST_PATH" ]; then
|
|
431
|
-
cat > "$PLIST_PATH" <<EOP
|
|
432
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
433
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
434
|
-
<plist version="1.0">
|
|
435
|
-
<dict>
|
|
436
|
-
<key>Label</key><string>$PLIST_LABEL</string>
|
|
437
|
-
<key>ProgramArguments</key><array><string>/bin/bash</string><string>$SCRIPT_DIR/start.sh</string></array>
|
|
438
|
-
<key>RunAtLoad</key><true/><key>KeepAlive</key><true/>
|
|
439
|
-
<key>WorkingDirectory</key><string>$SCRIPT_DIR</string>
|
|
440
|
-
</dict>
|
|
441
|
-
</plist>
|
|
442
|
-
EOP
|
|
443
|
-
launchctl load "$PLIST_PATH" 2>/dev/null || true
|
|
444
|
-
fi
|
|
445
|
-
fi
|
|
446
|
-
|
|
447
|
-
# 验证可执行文件是否存在
|
|
448
|
-
if [ ! -f "$SCRIPT_DIR/dist/index.js" ]; then
|
|
449
|
-
echo -e "\033[0;31m❌ 错误: 未找到可执行文件 $SCRIPT_DIR/dist/index.js\033[0m"
|
|
328
|
+
if [ ! -f "$DIST_DIR/dist/index.js" ]; then
|
|
329
|
+
echo -e "\033[0;31m❌ 错误: 未找到可执行文件 $DIST_DIR/dist/index.js\033[0m"
|
|
450
330
|
exit 1
|
|
451
331
|
fi
|
|
452
332
|
|
|
453
|
-
# 根据命令行参数执行对应操作
|
|
454
333
|
if [ $# -eq 0 ]; then
|
|
455
|
-
# 无参数:启动网关
|
|
456
334
|
if [ -f "$OPENCLAW_CONFIG_PATH" ]; then
|
|
457
335
|
GATEWAY_PORT=$(node -e "console.log(require('$OPENCLAW_CONFIG_PATH').gateway?.port || 18789)")
|
|
458
336
|
echo -e "\033[0;32m🚀 启动 OpenClaw-$INSTANCE_NAME 网关 (端口: $GATEWAY_PORT)...\033[0m"
|
|
459
|
-
exec
|
|
337
|
+
exec node "$DIST_DIR/dist/index.js" gateway run --port "$GATEWAY_PORT"
|
|
460
338
|
else
|
|
461
|
-
echo -e "\033[0;31m❌ 错误:
|
|
339
|
+
echo -e "\033[0;31m❌ 错误: 未找到配置文件\033[0m"
|
|
462
340
|
exit 1
|
|
463
341
|
fi
|
|
464
342
|
else
|
|
465
343
|
if [ "$1" = "tui" ]; then
|
|
466
|
-
|
|
467
|
-
echo -e "\033[0;32m🚀 启动 OpenClaw-$INSTANCE_NAME TUI (workspace mode)...\033[0m"
|
|
344
|
+
echo -e "\033[0;32m🚀 启动 OpenClaw-$INSTANCE_NAME TUI...\033[0m"
|
|
468
345
|
cd "$OPENCLAW_WORKSPACE"
|
|
469
|
-
exec node "$
|
|
346
|
+
exec node "$DIST_DIR/dist/index.js" tui
|
|
470
347
|
else
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
exec $OPENCLAW_EXEC="node $SCRIPT_DIR/dist/index.js" "$@"
|
|
348
|
+
echo -e "\033[0;32m🚀 执行命令: $@\033[0m"
|
|
349
|
+
exec node "$DIST_DIR/dist/index.js" "$@"
|
|
474
350
|
fi
|
|
475
351
|
fi
|
|
476
352
|
EOF
|
|
477
|
-
|
|
478
353
|
chmod +x "${INSTANCE_DIR}/start.sh"
|
|
479
354
|
|
|
480
355
|
# --- 12. 执行拉起 ---
|
|
481
356
|
echo -e "${BLUE}⚡ 正在后台启动服务...${NC}"
|
|
482
357
|
nohup "${INSTANCE_DIR}/start.sh" > "${INSTANCE_DIR}/workspace/server.log" 2>&1 &
|
|
483
358
|
PID=$!
|
|
484
|
-
|
|
485
359
|
sleep 5
|
|
486
360
|
|
|
487
361
|
check_port() {
|
|
@@ -504,12 +378,11 @@ if kill -0 $PID 2>/dev/null; then
|
|
|
504
378
|
echo -e "📄 实时日志: tail -f ${INSTANCE_DIR}/workspace/server.log"
|
|
505
379
|
echo -e "${GREEN}================================================${NC}"
|
|
506
380
|
|
|
507
|
-
# --- 交互式菜单 ---
|
|
508
381
|
if [ -t 0 ]; then
|
|
509
382
|
echo
|
|
510
383
|
echo -e "${BLUE}请选择下一步操作:${NC}"
|
|
511
|
-
echo "1) 启动 TUI
|
|
512
|
-
echo "2) 打开 Web UI
|
|
384
|
+
echo "1) 启动 TUI"
|
|
385
|
+
echo "2) 打开 Web UI"
|
|
513
386
|
echo "3) 退出"
|
|
514
387
|
read -p "请输入数字 [1-3]: " choice
|
|
515
388
|
case $choice in
|
|
@@ -532,17 +405,12 @@ if kill -0 $PID 2>/dev/null; then
|
|
|
532
405
|
echo -e "${RED}未找到 token,请手动查看配置文件。${NC}"
|
|
533
406
|
fi
|
|
534
407
|
;;
|
|
535
|
-
3)
|
|
536
|
-
|
|
537
|
-
exit 0
|
|
538
|
-
;;
|
|
539
|
-
*)
|
|
540
|
-
echo "无效选择"
|
|
541
|
-
;;
|
|
408
|
+
3) echo "退出"; exit 0 ;;
|
|
409
|
+
*) echo "无效选择" ;;
|
|
542
410
|
esac
|
|
543
411
|
fi
|
|
544
412
|
else
|
|
545
|
-
echo -e "${YELLOW}⚠️ 进程存在但端口 ${PORT}
|
|
413
|
+
echo -e "${YELLOW}⚠️ 进程存在但端口 ${PORT} 未监听,请查看日志: ${INSTANCE_DIR}/workspace/server.log${NC}"
|
|
546
414
|
fi
|
|
547
415
|
else
|
|
548
416
|
echo -e "${RED}❌ 启动失败,请查看日志: tail -n 20 ${INSTANCE_DIR}/workspace/server.log${NC}"
|