Plugin SDK reference
Plugin परीक्षण
OpenClaw Plugins के लिए परीक्षण उपयोगिताओं, पैटर्न और लिंट प्रवर्तन का संदर्भ।
परीक्षण उपयोगिताएँ
ये उपपथ OpenClaw के अपने बंडल किए गए Plugin परीक्षणों के लिए रिपॉज़िटरी-स्थानीय स्रोत एंट्रीपॉइंट हैं। इन्हें तृतीय-पक्ष
Plugins के लिए package.json एक्सपोर्ट के रूप में प्रकाशित नहीं किया जाता,
और ये Vitest या केवल रिपॉज़िटरी में उपलब्ध अन्य परीक्षण निर्भरताएँ इंपोर्ट कर सकते हैं।
shouldAckReaction, removeAckReactionAfterReply,} from "openclaw/plugin-sdk/channel-feedback"; bundledPluginRoot, createCliRuntimeCapture, typedCases,} from "openclaw/plugin-sdk/test-fixtures"; बंडल किए गए Plugin परीक्षणों के लिए इन केंद्रित उपपथों का उपयोग करें। पूर्व
openclaw/plugin-sdk/testing बैरल रिपॉज़िटरी-स्थानीय था, भेजे गए
पैकेजों से बाहर रखा गया था और अब हटा दिया गया है। पूर्व openclaw/plugin-sdk/test-utils
उपनाम भी इसके साथ हटा दिया गया था। pnpm run lint:plugins:no-extension-test-core-imports
(scripts/check-no-extension-test-core-imports.ts) एक्सटेंशन परीक्षणों को
ऊपर दिए गए केंद्रित परीक्षण उपपथों पर बनाए रखता है।
उपलब्ध एक्सपोर्ट
| निर्यात | उद्देश्य |
|---|---|
createTestPluginApi |
प्रत्यक्ष पंजीकरण यूनिट परीक्षणों के लिए न्यूनतम Plugin API मॉक बनाएँ। plugin-sdk/plugin-test-api से आयात करें |
AUTH_PROFILE_RUNTIME_CONTRACT |
नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा प्रमाणीकरण-प्रोफ़ाइल अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें |
DELIVERY_NO_REPLY_RUNTIME_CONTRACT |
नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा डिलीवरी-दमन अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें |
OUTCOME_FALLBACK_RUNTIME_CONTRACT |
नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा फ़ॉलबैक-वर्गीकरण अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें |
createParameterFreeTool |
नेटिव रनटाइम अनुबंध परीक्षणों के लिए डायनेमिक-टूल स्कीमा फ़िक्स्चर बनाएँ। plugin-sdk/agent-runtime-test-contracts से आयात करें |
expectChannelInboundContextContract |
चैनल के इनबाउंड संदर्भ का आकार अभिपुष्ट करें। plugin-sdk/channel-contract-testing से आयात करें |
installChannelOutboundPayloadContractSuite |
चैनल के आउटबाउंड पेलोड अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-contract-testing से आयात करें |
createStartAccountContext |
चैनल खाते के जीवनचक्र संदर्भ बनाएँ। plugin-sdk/channel-test-helpers से आयात करें |
installChannelActionsContractSuite |
सामान्य चैनल संदेश-क्रिया अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें |
installChannelSetupContractSuite |
सामान्य चैनल सेटअप अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें |
installChannelStatusContractSuite |
सामान्य चैनल स्थिति अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें |
expectDirectoryIds |
डायरेक्टरी-सूची फ़ंक्शन से चैनल डायरेक्टरी आईडी अभिपुष्ट करें। plugin-sdk/channel-test-helpers से आयात करें |
assertBundledChannelEntries |
अभिपुष्ट करें कि बंडल किए गए चैनल एंट्रीपॉइंट अपेक्षित सार्वजनिक अनुबंध उपलब्ध कराते हैं। plugin-sdk/channel-test-helpers से आयात करें |
formatEnvelopeTimestamp |
नियतात्मक एनवलप टाइमस्टैम्प स्वरूपित करें। plugin-sdk/channel-test-helpers से आयात करें |
expectPairingReplyText |
चैनल पेयरिंग उत्तर का टेक्स्ट अभिपुष्ट करें और उसका कोड निकालें। plugin-sdk/channel-test-helpers से आयात करें |
describePluginRegistrationContract |
Plugin पंजीकरण अनुबंध जाँचें इंस्टॉल करें। plugin-sdk/plugin-test-contracts से आयात करें |
registerSingleProviderPlugin |
लोडर स्मोक परीक्षणों में एक प्रोवाइडर Plugin पंजीकृत करें। plugin-sdk/plugin-test-runtime से आयात करें |
registerProviderPlugin |
एक Plugin से सभी प्रोवाइडर प्रकार कैप्चर करें। plugin-sdk/plugin-test-runtime से आयात करें |
registerProviderPlugins |
अनेक Plugins में प्रोवाइडर पंजीकरण कैप्चर करें। plugin-sdk/plugin-test-runtime से आयात करें |
requireRegisteredProvider |
अभिपुष्ट करें कि प्रोवाइडर संग्रह में कोई आईडी मौजूद है। plugin-sdk/plugin-test-runtime से आयात करें |
createRuntimeEnv |
मॉक किया गया CLI/Plugin रनटाइम परिवेश बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
createPluginRuntimeMock |
मॉक किया गया Plugin रनटाइम सरफ़ेस बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
createPluginSetupWizardStatus |
चैनल Plugins के लिए सेटअप स्थिति हेल्पर बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
createTestWizardPrompter |
मॉक किया गया सेटअप विज़ार्ड प्रॉम्प्टर बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
createRuntimeTaskFlow |
पृथक रनटाइम टास्क-फ़्लो स्थिति बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
runProviderCatalog |
परीक्षण निर्भरताओं के साथ प्रोवाइडर कैटलॉग हुक निष्पादित करें। plugin-sdk/plugin-test-runtime से आयात करें |
resolveProviderWizardOptions |
अनुबंध परीक्षणों में प्रोवाइडर सेटअप विज़ार्ड विकल्पों का समाधान करें। plugin-sdk/plugin-test-runtime से आयात करें |
resolveProviderModelPickerEntries |
अनुबंध परीक्षणों में प्रोवाइडर मॉडल-पिकर प्रविष्टियों का समाधान करें। plugin-sdk/plugin-test-runtime से आयात करें |
buildProviderPluginMethodChoice |
अभिपुष्टियों के लिए प्रोवाइडर विज़ार्ड विकल्प आईडी बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें |
setProviderWizardProvidersResolverForTest |
पृथक परीक्षणों के लिए प्रोवाइडर विज़ार्ड प्रोवाइडर इंजेक्ट करें। plugin-sdk/plugin-test-runtime से आयात करें |
describeOpenAIProviderRuntimeContract |
प्रोवाइडर-फ़ैमिली रनटाइम अनुबंध जाँचें इंस्टॉल करें। plugin-sdk/provider-test-contracts से आयात करें |
expectPassthroughReplayPolicy |
अभिपुष्ट करें कि प्रोवाइडर रीप्ले नीतियाँ प्रोवाइडर-स्वामित्व वाले टूल और मेटाडेटा से होकर अपरिवर्तित रूप से गुज़रती हैं। plugin-sdk/provider-test-contracts से आयात करें |
runRealtimeSttLiveTest |
साझा ऑडियो फ़िक्स्चर के साथ लाइव रीयलटाइम STT प्रोवाइडर परीक्षण चलाएँ। plugin-sdk/provider-test-contracts से आयात करें |
normalizeTranscriptForMatch |
फ़ज़ी अभिपुष्टियों से पहले लाइव ट्रांसक्रिप्ट आउटपुट सामान्यीकृत करें। plugin-sdk/provider-test-contracts से आयात करें |
expectExplicitVideoGenerationCapabilities |
अभिपुष्ट करें कि वीडियो प्रोवाइडर स्पष्ट जनरेशन मोड क्षमताएँ घोषित करते हैं। plugin-sdk/provider-test-contracts से आयात करें |
expectExplicitMusicGenerationCapabilities |
अभिपुष्ट करें कि संगीत प्रोवाइडर स्पष्ट जनरेशन/संपादन क्षमताएँ घोषित करते हैं। plugin-sdk/provider-test-contracts से आयात करें |
mockSuccessfulDashscopeVideoTask |
सफल DashScope-संगत वीडियो टास्क प्रतिक्रिया इंस्टॉल करें। plugin-sdk/provider-test-contracts से आयात करें |
getProviderHttpMocks |
ऑप्ट-इन प्रोवाइडर HTTP/प्रमाणीकरण Vitest मॉक एक्सेस करें। plugin-sdk/provider-http-test-mocks से आयात करें |
installProviderHttpMockCleanup |
प्रत्येक परीक्षण के बाद प्रोवाइडर HTTP/प्रमाणीकरण मॉक रीसेट करें। plugin-sdk/provider-http-test-mocks से आयात करें |
installCommonResolveTargetErrorCases |
लक्ष्य समाधान त्रुटि प्रबंधन के लिए साझा परीक्षण मामले। plugin-sdk/channel-target-testing से आयात करें |
shouldAckReaction |
जाँचें कि किसी चैनल को अभिस्वीकृति प्रतिक्रिया जोड़नी चाहिए या नहीं। plugin-sdk/channel-feedback से आयात करें |
removeAckReactionAfterReply |
उत्तर की डिलीवरी के बाद अभिस्वीकृति प्रतिक्रिया हटाएँ। plugin-sdk/channel-feedback से आयात करें |
createTestRegistry |
चैनल Plugin रजिस्ट्री फ़िक्स्चर बनाएँ। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें |
createEmptyPluginRegistry |
खाली Plugin रजिस्ट्री फ़िक्स्चर बनाएँ। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें |
setActivePluginRegistry |
Plugin रनटाइम परीक्षणों के लिए रजिस्ट्री फ़िक्स्चर इंस्टॉल करें। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें |
createRequestCaptureJsonFetch |
मीडिया हेल्पर परीक्षणों में JSON फ़ेच अनुरोध कैप्चर करें। plugin-sdk/test-media-understanding से आयात करें |
isLiveTestEnabled |
ऑप्ट-इन लाइव प्रोवाइडर परीक्षणों को गेट करें। plugin-sdk/test-live से आयात करें |
collectProviderApiKeys |
लाइव प्रोवाइडर परीक्षणों के लिए क्रेडेंशियल खोजें। plugin-sdk/test-live-auth से आयात करें |
parseProviderModelMap |
संगीत/वीडियो लाइव-परीक्षण मॉडल ओवरराइड पार्स करें। plugin-sdk/test-media-generation से आयात करें |
withServer |
उपयोग के बाद हटाए जा सकने वाले स्थानीय HTTP सर्वर के विरुद्ध परीक्षण चलाएँ। plugin-sdk/test-env से आयात करें |
createMockIncomingRequest |
न्यूनतम इनकमिंग HTTP अनुरोध ऑब्जेक्ट बनाएँ। plugin-sdk/test-env से आयात करें |
withFetchPreconnect |
प्रीकनेक्ट हुक इंस्टॉल करके फ़ेच परीक्षण चलाएँ। plugin-sdk/test-env से आयात करें |
withEnv / withEnvAsync |
परिवेश चर अस्थायी रूप से पैच करें। plugin-sdk/test-env से आयात करें |
createTempHomeEnv / withTempHome / withTempDir |
पृथक फ़ाइल-सिस्टम परीक्षण फ़िक्स्चर बनाएँ। plugin-sdk/test-env से आयात करें |
createMockServerResponse |
न्यूनतम HTTP सर्वर प्रतिक्रिया मॉक बनाएँ। plugin-sdk/test-env से आयात करें |
createProviderUsageFetch |
प्रोवाइडर उपयोग फ़ेच फ़िक्स्चर बनाएँ। plugin-sdk/test-env से आयात करें |
useFrozenTime / useRealTime |
समय-संवेदी परीक्षणों के लिए टाइमर फ़्रीज़ और पुनर्स्थापित करें। plugin-sdk/test-env से आयात करें |
createCliRuntimeCapture |
परीक्षणों में CLI रनटाइम आउटपुट कैप्चर करें। plugin-sdk/test-fixtures से आयात करें |
importFreshModule |
मॉड्यूल कैश को बायपास करने के लिए नए क्वेरी टोकन के साथ ESM मॉड्यूल आयात करें। plugin-sdk/test-fixtures से आयात करें |
bundledPluginRoot / bundledPluginFile |
बंडल किए गए Plugin स्रोत या डिस्ट फ़िक्स्चर पथों का समाधान करें। plugin-sdk/test-fixtures से आयात करें |
mockNodeBuiltinModule |
सीमित Node बिल्ट-इन Vitest मॉक इंस्टॉल करें। plugin-sdk/test-node-mocks से आयात करें |
createSandboxTestContext |
सैंडबॉक्स परीक्षण संदर्भ बनाएँ। plugin-sdk/test-fixtures से आयात करें |
writeSkill |
स्किल फ़िक्स्चर लिखें। plugin-sdk/test-fixtures से आयात करें |
makeAgentAssistantMessage |
एजेंट ट्रांसक्रिप्ट संदेश फ़िक्स्चर बनाएँ। plugin-sdk/test-fixtures से आयात करें |
peekSystemEvents / resetSystemEventsForTest |
सिस्टम इवेंट फ़िक्स्चर का निरीक्षण करें और उन्हें रीसेट करें। plugin-sdk/test-fixtures से आयात करें |
sanitizeTerminalText |
अभिपुष्टियों के लिए टर्मिनल आउटपुट स्वच्छ करें। plugin-sdk/test-fixtures से आयात करें |
countLines / hasBalancedFences |
चंकिंग आउटपुट के आकार की पुष्टि करें। plugin-sdk/test-fixtures से इम्पोर्ट करें |
typedCases |
तालिका-संचालित परीक्षणों के लिए लिटरल प्रकारों को सुरक्षित रखें। plugin-sdk/test-fixtures से इम्पोर्ट करें |
बंडल किए गए Plugin की कॉन्ट्रैक्ट सुइट केवल परीक्षण वाली रजिस्ट्री, मैनिफ़ेस्ट, सार्वजनिक आर्टिफ़ैक्ट और रनटाइम फ़िक्सचर सहायिकाओं के लिए भी इन SDK परीक्षण उपपथों का उपयोग करती हैं।
बंडल की गई OpenClaw इन्वेंट्री पर निर्भर केवल-कोर सुइट इसके बजाय
src/plugins/contracts के अंतर्गत रहती हैं।
प्रकार
केंद्रित परीक्षण उपपथ परीक्षण फ़ाइलों में उपयोगी प्रकारों को भी फिर से निर्यात करते हैं:
ChannelAccountSnapshot, ChannelGatewayContext,} from "openclaw/plugin-sdk/channel-contract"; परीक्षण लक्ष्य समाधान
चैनल लक्ष्य समाधान के लिए मानक त्रुटि मामले जोड़ने हेतु installCommonResolveTargetErrorCases का उपयोग करें:
describe("मेरे-चैनल का लक्ष्य समाधान", () => { installCommonResolveTargetErrorCases({ resolveTarget: ({ to, mode, allowFrom }) => { // आपके चैनल का लक्ष्य समाधान तर्क return myChannelResolveTarget({ to, mode, allowFrom }); }, implicitAllowFrom: ["user1", "user2"], }); // चैनल-विशिष्ट परीक्षण मामले जोड़ें it("@username लक्ष्यों का समाधान करना चाहिए", () => { // ... });});परीक्षण प्रतिरूप
पंजीकरण कॉन्ट्रैक्ट का परीक्षण
register(api) को हाथ से लिखा हुआ api मॉक देने वाले यूनिट परीक्षण OpenClaw के लोडर स्वीकृति गेट का परीक्षण नहीं करते।
आपका Plugin जिस प्रत्येक पंजीकरण सतह पर निर्भर है, उसके लिए कम-से-कम एक लोडर-समर्थित स्मोक परीक्षण जोड़ें, विशेष रूप से हुक और मेमोरी जैसी विशिष्ट क्षमताओं के लिए।
आवश्यक मेटाडेटा अनुपस्थित होने या किसी Plugin द्वारा ऐसी क्षमता API को कॉल करने पर, जिसका वह स्वामी नहीं है, वास्तविक लोडर Plugin पंजीकरण को विफल कर देता है। उदाहरण के लिए,
api.registerHook(...) के लिए हुक नाम आवश्यक है और
api.registerMemoryCapability(...) के लिए Plugin मैनिफ़ेस्ट या निर्यातित
प्रविष्टि में kind: "memory" घोषित होना आवश्यक है।
रनटाइम कॉन्फ़िगरेशन पहुँच का परीक्षण
openclaw/plugin-sdk/plugin-test-runtime से साझा Plugin रनटाइम मॉक को प्राथमिकता दें। इसकी रनटाइम कॉन्फ़िगरेशन सहायिकाएँ वर्तमान स्नैपशॉट और म्यूटेशन API का प्रतिरूपण करती हैं।
किसी चैनल Plugin का यूनिट परीक्षण
describe("मेरा-चैनल Plugin", () => { it("कॉन्फ़िगरेशन से अकाउंट का समाधान करना चाहिए", () => { const cfg = { channels: { "my-channel": { token: "test-token", allowFrom: ["user1"], }, }, }; const account = myPlugin.setup.resolveAccount(cfg, undefined); expect(account.token).toBe("test-token"); }); it("सीक्रेट को मूर्त रूप दिए बिना अकाउंट का निरीक्षण करना चाहिए", () => { const cfg = { channels: { "my-channel": { token: "test-token" }, }, }; const inspection = myPlugin.setup.inspectAccount(cfg, undefined); expect(inspection.configured).toBe(true); expect(inspection.tokenStatus).toBe("available"); // कोई टोकन मान उजागर नहीं किया गया expect(inspection).not.toHaveProperty("token"); });});किसी प्रदाता Plugin का यूनिट परीक्षण
describe("मेरा-प्रदाता Plugin", () => { it("डायनेमिक मॉडल का समाधान करना चाहिए", () => { const model = myProvider.resolveDynamicModel({ modelId: "custom-model-v2", // ... संदर्भ }); expect(model.id).toBe("custom-model-v2"); expect(model.provider).toBe("my-provider"); expect(model.api).toBe("openai-completions"); }); it("API कुंजी उपलब्ध होने पर कैटलॉग लौटाना चाहिए", async () => { const result = await myProvider.catalog.run({ resolveProviderApiKey: () => ({ apiKey: "test-key" }), // ... संदर्भ }); expect(result?.provider?.models).toHaveLength(2); });});Plugin रनटाइम को मॉक करना
createPluginRuntimeStore का उपयोग करने वाले कोड के लिए परीक्षणों में रनटाइम को मॉक करें:
const store = createPluginRuntimeStore<PluginRuntime>({ pluginId: "test-plugin", errorMessage: "परीक्षण रनटाइम सेट नहीं है",}); // परीक्षण सेटअप मेंconst mockRuntime = { agent: { resolveAgentDir: vi.fn().mockReturnValue("/tmp/agent"), // ... अन्य मॉक }, config: { current: vi.fn(() => ({}) as const), mutateConfigFile: vi.fn(), replaceConfigFile: vi.fn(), }, // ... अन्य नेमस्पेस} as unknown as PluginRuntime; store.setRuntime(mockRuntime); // परीक्षणों के बादstore.clearRuntime();प्रति-इंस्टेंस स्टब के साथ परीक्षण
प्रोटोटाइप म्यूटेशन के बजाय प्रति-इंस्टेंस स्टब को प्राथमिकता दें:
// अनुशंसित: प्रति-इंस्टेंस स्टबconst client = new MyChannelClient();client.sendMessage = vi.fn().mockResolvedValue({ id: "msg-1" }); // इससे बचें: प्रोटोटाइप म्यूटेशन// MyChannelClient.prototype.sendMessage = vi.fn();कॉन्ट्रैक्ट परीक्षण (रेपो के भीतर के Plugin)
बंडल किए गए Plugin में कॉन्ट्रैक्ट परीक्षण होते हैं, जो पंजीकरण स्वामित्व सत्यापित करते हैं:
pnpm test src/plugins/contracts/ये परीक्षण इसकी पुष्टि करते हैं:
- कौन-से Plugin कौन-से प्रदाता पंजीकृत करते हैं
- कौन-से Plugin कौन-से वाक् प्रदाता पंजीकृत करते हैं
- पंजीकरण आकृति की शुद्धता
- रनटाइम कॉन्ट्रैक्ट का अनुपालन
सीमित-दायरे वाले परीक्षण चलाना
किसी विशिष्ट Plugin के लिए:
pnpm test <bundled-plugin-root>/my-channel/केवल कॉन्ट्रैक्ट परीक्षणों के लिए:
pnpm test src/plugins/contracts/shape.contract.test.tspnpm test src/plugins/contracts/auth-choice.contract.test.tspnpm test src/plugins/contracts/runtime-seams.contract.test.tsलिंट प्रवर्तन (रेपो के भीतर के Plugin)
scripts/run-additional-boundary-checks.mjs CI में lint:plugins:*
इंपोर्ट-सीमा जाँचों का एक समूह चलाता है; प्रत्येक को स्थानीय रूप से स्वतंत्र भी चलाया जा सकता है:
| कमांड | लागू करता है |
|---|---|
pnpm run lint:plugins:no-monolithic-plugin-sdk-entry-imports |
बंडल किए गए Plugin मोनोलिथिक openclaw/plugin-sdk रूट बैरल को इंपोर्ट नहीं कर सकते। |
pnpm run lint:plugins:no-extension-src-imports |
प्रोडक्शन एक्सटेंशन फ़ाइलें रेपो के src/** ट्री को सीधे इंपोर्ट नहीं कर सकतीं (../../src/...)। |
pnpm run lint:plugins:no-extension-test-core-imports |
एक्सटेंशन परीक्षण फ़ाइलें हटाए गए SDK परीक्षण उपनाम या अन्य केवल-कोर परीक्षण सहायिकाएँ इंपोर्ट नहीं कर सकतीं। |
बाहरी Plugin पर ये लिंट नियम लागू नहीं होते, लेकिन उन्हीं प्रतिरूपों का पालन करने की अनुशंसा की जाती है।
परीक्षण कॉन्फ़िगरेशन
OpenClaw सूचनात्मक V8 कवरेज रिपोर्टिंग के साथ Vitest 4 का उपयोग करता है। Plugin परीक्षणों के लिए:
# सभी परीक्षण चलाएँpnpm test # विशिष्ट Plugin परीक्षण चलाएँpnpm test <bundled-plugin-root>/my-channel/src/channel.test.ts # किसी विशिष्ट परीक्षण नाम फ़िल्टर के साथ चलाएँpnpm test <bundled-plugin-root>/my-channel/ -t "अकाउंट का समाधान करता है" # कवरेज के साथ चलाएँpnpm test:coverageयदि स्थानीय रन से मेमोरी पर दबाव पड़ता है:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testसंबंधित
- SDK अवलोकन -- इंपोर्ट परंपराएँ
- SDK चैनल Plugin -- चैनल Plugin इंटरफ़ेस
- SDK प्रदाता Plugin -- प्रदाता Plugin हुक
- Plugin बनाना -- आरंभिक मार्गदर्शिका