यह पृष्ठ OpenClaw के अंदर
openclaw/plugin-sdk/* का उपयोग करने वाले plugin authors के लिए है। बाहरी apps, scripts, dashboards, CI jobs, और IDE extensions के लिए, जो Gateway के माध्यम से agents चलाना चाहते हैं, इसके बजाय बाहरी apps के लिए Gateway integrations का उपयोग करें।Import convention
हमेशा किसी विशिष्ट subpath से import करें:openclaw/plugin-sdk/channel-core को प्राथमिकता दें; व्यापक umbrella surface और buildChannelConfigSchema जैसे shared helpers के लिए openclaw/plugin-sdk/core रखें।
channel config के लिए, channel-owned JSON Schema को openclaw.plugin.json#channelConfigs के माध्यम से publish करें। plugin-sdk/channel-config-schema subpath shared schema primitives और generic builder के लिए है। OpenClaw के bundled plugins retained bundled-channel schemas के लिए plugin-sdk/bundled-channel-config-schema का उपयोग करते हैं। Deprecated compatibility exports plugin-sdk/channel-config-schema-legacy पर बने रहते हैं; कोई भी bundled schema subpath नए plugins के लिए pattern नहीं है।
Subpath reference
Plugin SDK को area के अनुसार grouped narrow subpaths के set के रूप में expose किया गया है: plugin entry, channel, provider, auth, runtime, capability, memory, और reserved bundled-plugin helpers। पूरे catalog के लिए, grouped और linked रूप में, Plugin SDK subpaths देखें। compiler entrypoint inventoryscripts/lib/plugin-sdk-entrypoints.json में रहती है; package exports, scripts/lib/plugin-sdk-private-local-only-subpaths.json में listed repo-local test/internal subpaths घटाने के बाद public subset से generate किए जाते हैं। public export count audit करने के लिए pnpm plugin-sdk:surface चलाएं। Deprecated public subpaths, जो काफी पुराने हैं और bundled extension production code द्वारा unused हैं, scripts/lib/plugin-sdk-deprecated-public-subpaths.json में track किए जाते हैं; broad deprecated re-export barrels scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json में track किए जाते हैं।
Registration API
register(api) callback को इन methods वाला OpenClawPluginApi object मिलता है:
Capability registration
| Method | यह क्या register करता है |
|---|---|
api.registerProvider(...) | Text inference (LLM) |
api.registerAgentHarness(...) | Experimental low-level agent executor |
api.registerCliBackend(...) | Local CLI inference backend |
api.registerChannel(...) | Messaging channel |
api.registerEmbeddingProvider(...) | Reusable vector embedding provider |
api.registerSpeechProvider(...) | Text-to-speech / STT synthesis |
api.registerRealtimeTranscriptionProvider(...) | Streaming realtime transcription |
api.registerRealtimeVoiceProvider(...) | Duplex realtime voice sessions |
api.registerMediaUnderstandingProvider(...) | Image/audio/video analysis |
api.registerImageGenerationProvider(...) | Image generation |
api.registerMusicGenerationProvider(...) | Music generation |
api.registerVideoGenerationProvider(...) | Video generation |
api.registerWebFetchProvider(...) | Web fetch / scrape provider |
api.registerWebSearchProvider(...) | Web search |
api.registerEmbeddingProvider(...) के साथ register किए गए embedding providers को plugin manifest में contracts.embeddingProviders में भी listed होना चाहिए। यह reusable vector generation के लिए generic embedding surface है। Memory search इस generic provider surface को consume कर सकता है। पुराना api.registerMemoryEmbeddingProvider(...) और contracts.memoryEmbeddingProviders seam deprecated compatibility है, जबकि मौजूदा memory-specific providers migrate कर रहे हैं।
Memory-specific providers जो अभी भी runtime batchEmbed(...) expose करते हैं, वे मौजूदा per-file batching contract पर रहते हैं, जब तक उनका runtime स्पष्ट रूप से sourceWideBatchEmbed: true set न करे। वह opt-in memory host को multiple dirty memory files और enabled sources से chunks को host batch limits तक एक batchEmbed(...) call में submit करने देता है। JSONL request files upload करने वाले batch adapters को provider jobs को उनके upload-size cap और request-count cap से पहले split करना होगा। provider को batch.chunks के समान क्रम में हर input chunk के लिए एक embedding return करनी होगी; जब provider file-local batches expect करता है या बड़े source-wide job में input ordering preserve नहीं कर सकता, तो flag छोड़ दें।
Tools and commands
Fixed tool names वाले simple tool-only plugins के लिएdefineToolPlugin का उपयोग करें। mixed plugins या fully dynamic tool registration के लिए api.registerTool(...) को सीधे उपयोग करें।
| Method | यह क्या register करता है |
|---|---|
api.registerTool(tool, opts?) | Agent tool (required या { optional: true }) |
api.registerCommand(def) | Custom command (LLM को bypass करता है) |
agentPromptGuidance set कर सकते हैं, जब agent को छोटा command-owned routing hint चाहिए। उस text को command itself के बारे में रखें; core prompt builders में provider- या plugin-specific policy न जोड़ें।
Guidance entries legacy strings हो सकती हैं, जो हर prompt surface पर apply होती हैं, या structured entries:
surfaces में openclaw_main, codex_app_server, cli_backend, acp_backend, या subagent शामिल हो सकते हैं। pi_main, openclaw_main के लिए deprecated alias बना हुआ है। intentional all-surface guidance के लिए surfaces omit करें। खाली surfaces array pass न करें; इसे reject किया जाता है ताकि accidental scope loss global prompt text न बन जाए।
Native Codex app-server developer instructions अन्य prompt surfaces से अधिक strict हैं: केवल codex_app_server के लिए explicitly scoped guidance ही उस higher-priority lane में promote की जाती है। Legacy string guidance और unscoped structured guidance compatibility के लिए non-Codex prompt surfaces को available रहती हैं।
Infrastructure
| Method | यह क्या register करता है |
|---|---|
api.registerHook(events, handler, opts?) | Event hook |
api.registerHttpRoute(params) | Gateway HTTP endpoint |
api.registerGatewayMethod(name, handler) | Gateway RPC method |
api.registerGatewayDiscoveryService(service) | Local Gateway discovery advertiser |
api.registerCli(registrar, opts?) | CLI subcommand |
api.registerNodeCliFeature(registrar, opts?) | openclaw nodes के तहत Node feature CLI |
api.registerService(service) | Background service |
api.registerInteractiveHandler(registration) | Interactive handler |
api.registerAgentToolResultMiddleware(...) | Runtime tool-result middleware |
api.registerMemoryPromptSupplement(builder) | Additive memory-adjacent prompt section |
api.registerMemoryCorpusSupplement(adapter) | Additive memory search/read corpus |
Host hooks for workflow plugins
Host hooks उन plugins के लिए SDK seams हैं जिन्हें केवल provider, channel, या tool जोड़ने के बजाय host lifecycle में participate करना होता है। वे generic contracts हैं; Plan Mode उनका उपयोग कर सकता है, लेकिन approval workflows, workspace policy gates, background monitors, setup wizards, और UI companion plugins भी कर सकते हैं।| विधि | इसके स्वामित्व वाला अनुबंध |
|---|---|
api.session.state.registerSessionExtension(...) | Plugin-स्वामित्व वाली, JSON-संगत सत्र स्थिति जो Gateway सत्रों के माध्यम से प्रक्षेपित होती है |
api.session.workflow.enqueueNextTurnInjection(...) | एक सत्र के लिए अगले एजेंट टर्न में इंजेक्ट किया गया टिकाऊ ठीक-एक-बार संदर्भ |
api.registerTrustedToolPolicy(...) | मेनिफेस्ट-गेटेड विश्वसनीय प्री-Plugin टूल नीति जो टूल पैरामीटरों को रोक या फिर से लिख सकती है |
api.registerToolMetadata(...) | टूल कार्यान्वयन बदले बिना टूल कैटलॉग प्रदर्शन मेटाडेटा |
api.registerCommand(...) | स्कोप किए गए Plugin कमांड; कमांड परिणाम continueAgent: true सेट कर सकते हैं; Discord नेटिव कमांड descriptionLocalizations का समर्थन करते हैं |
api.session.controls.registerControlUiDescriptor(...) | सत्र, टूल, रन, या सेटिंग सतहों के लिए Control UI योगदान डिस्क्रिप्टर |
api.lifecycle.registerRuntimeLifecycle(...) | रीसेट/डिलीट/रीलोड पथों पर Plugin-स्वामित्व वाले रनटाइम संसाधनों के लिए क्लीनअप कॉलबैक |
api.agent.events.registerAgentEventSubscription(...) | वर्कफ़्लो स्थिति और मॉनिटर के लिए सैनिटाइज़ किए गए इवेंट सब्सक्रिप्शन |
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...) | प्रति-रन Plugin स्क्रैच स्थिति जो टर्मिनल रन जीवनचक्र पर साफ़ की जाती है |
api.session.workflow.registerSessionSchedulerJob(...) | Plugin-स्वामित्व वाले शेड्यूलर जॉब के लिए क्लीनअप मेटाडेटा; काम शेड्यूल नहीं करता या टास्क रिकॉर्ड नहीं बनाता |
api.session.workflow.sendSessionAttachment(...) | सक्रिय डायरेक्ट-आउटबाउंड सत्र रूट तक बंडल्ड-केवल होस्ट-मध्यस्थ फ़ाइल अटैचमेंट डिलीवरी |
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...) | बंडल्ड-केवल Cron-समर्थित शेड्यूल किए गए सत्र टर्न और टैग-आधारित क्लीनअप |
api.session.controls.registerSessionAction(...) | टाइप किए गए सत्र एक्शन जिन्हें क्लाइंट Gateway के माध्यम से डिस्पैच कर सकते हैं |
api.session.state.registerSessionExtension(...)api.session.workflow.enqueueNextTurnInjection(...)api.session.workflow.registerSessionSchedulerJob(...)api.session.workflow.sendSessionAttachment(...)api.session.workflow.scheduleSessionTurn(...)api.session.workflow.unscheduleSessionTurnsByTag(...)api.session.controls.registerSessionAction(...)api.session.controls.registerControlUiDescriptor(...)api.agent.events.registerAgentEventSubscription(...)api.agent.events.emitAgentEvent(...)api.runContext.setRunContext(...)/getRunContext(...)/clearRunContext(...)api.lifecycle.registerRuntimeLifecycle(...)
api.registerSessionExtension, api.enqueueNextTurnInjection,
api.registerControlUiDescriptor, api.registerRuntimeLifecycle,
api.registerAgentEventSubscription, api.emitAgentEvent,
api.setRunContext, api.getRunContext, api.clearRunContext,
api.registerSessionSchedulerJob, api.registerSessionAction,
api.sendSessionAttachment, api.scheduleSessionTurn, या
api.unscheduleSessionTurnsByTag को सीधे कॉल करता हो।
scheduleSessionTurn(...) Gateway Cron शेड्यूलर के ऊपर सत्र-स्कोप की गई सुविधा है।
Cron टाइमिंग का स्वामी है और टर्न चलने पर बैकग्राउंड टास्क रिकॉर्ड बनाता है;
Plugin SDK केवल लक्ष्य सत्र, Plugin-स्वामित्व वाली नामकरण पद्धति, और क्लीनअप को सीमित करता है।
जब काम को स्वयं टिकाऊ बहु-चरणीय TaskFlow स्थिति चाहिए, तो शेड्यूल किए गए
टर्न के अंदर api.runtime.tasks.managedFlows का उपयोग करें।
अनुबंध जानबूझकर अधिकार को अलग करते हैं:
- बाहरी plugins सत्र एक्सटेंशन, UI डिस्क्रिप्टर, कमांड, टूल मेटाडेटा, नेक्स्ट-टर्न इंजेक्शन, और सामान्य हुक के स्वामी हो सकते हैं।
- विश्वसनीय टूल नीतियां सामान्य
before_tool_callहुक से पहले चलती हैं और होस्ट-विश्वसनीय होती हैं। बंडल्ड नीतियां पहले चलती हैं; इंस्टॉल किए गए Plugin की नीतियों को स्पष्ट सक्षमकरण औरcontracts.trustedToolPoliciesमें उनके स्थानीय ids की आवश्यकता होती है, और वे Plugin-लोड क्रम में अगली चलती हैं। नीति ids रजिस्टर करने वाले Plugin तक स्कोप किए जाते हैं। - आरक्षित कमांड स्वामित्व केवल बंडल्ड है। बाहरी plugins को अपने स्वयं के कमांड नामों या उपनामों का उपयोग करना चाहिए।
allowPromptInjection=falseप्रॉम्प्ट बदलने वाले हुक को अक्षम करता है, जिनमेंagent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, पुरानेbefore_agent_startसे प्रॉम्प्ट फ़ील्ड, औरenqueueNextTurnInjectionशामिल हैं।
| Plugin आर्केटाइप | उपयोग किए गए हुक |
|---|---|
| अनुमोदन वर्कफ़्लो | सत्र एक्सटेंशन, कमांड कंटिन्यूएशन, नेक्स्ट-टर्न इंजेक्शन, UI डिस्क्रिप्टर |
| बजट/वर्कस्पेस नीति गेट | विश्वसनीय टूल नीति, टूल मेटाडेटा, सत्र प्रोजेक्शन |
| बैकग्राउंड जीवनचक्र मॉनिटर | रनटाइम जीवनचक्र क्लीनअप, एजेंट इवेंट सब्सक्रिप्शन, सत्र शेड्यूलर स्वामित्व/क्लीनअप, Heartbeat प्रॉम्प्ट योगदान, UI डिस्क्रिप्टर |
| सेटअप या ऑनबोर्डिंग विज़ार्ड | सत्र एक्सटेंशन, स्कोप किए गए कमांड, Control UI डिस्क्रिप्टर |
आरक्षित कोर एडमिन नेमस्पेस (
config.*, exec.approvals.*, wizard.*,
update.*) हमेशा operator.admin ही रहते हैं, भले ही कोई Plugin
संकुचित gateway विधि स्कोप असाइन करने की कोशिश करे। Plugin-स्वामित्व वाली
विधियों के लिए Plugin-विशिष्ट प्रीफ़िक्स को प्राथमिकता दें।When to use tool-result middleware
When to use tool-result middleware
बंडल्ड plugins और मेल खाते मेनिफेस्ट अनुबंधों के साथ स्पष्ट रूप से सक्षम
इंस्टॉल किए गए plugins
api.registerAgentToolResultMiddleware(...) का उपयोग तब कर सकते हैं
जब उन्हें निष्पादन के बाद और रनटाइम द्वारा उस परिणाम को मॉडल में वापस
देने से पहले टूल परिणाम को फिर से लिखना हो। यह tokenjuice जैसे असिंक
आउटपुट रिड्यूसर के लिए विश्वसनीय रनटाइम-न्यूट्रल सीमा है।plugins को हर लक्षित रनटाइम के लिए contracts.agentToolResultMiddleware
घोषित करना होगा, उदाहरण के लिए ["openclaw", "codex"]। उस
अनुबंध के बिना, या स्पष्ट सक्षमकरण के बिना, इंस्टॉल किए गए plugins यह
मिडलवेयर रजिस्टर नहीं कर सकते; ऐसे काम के लिए सामान्य OpenClaw Plugin हुक रखें
जिसे प्री-मॉडल टूल-परिणाम टाइमिंग की आवश्यकता नहीं है। पुराना
केवल-एम्बेडेड-रनर एक्सटेंशन फ़ैक्टरी रजिस्ट्रेशन पथ हटा दिया गया है।Gateway डिस्कवरी रजिस्ट्रेशन
api.registerGatewayDiscoveryService(...) किसी Plugin को mDNS/Bonjour जैसे
स्थानीय डिस्कवरी ट्रांसपोर्ट पर सक्रिय Gateway का विज्ञापन करने देता है। OpenClaw
स्थानीय डिस्कवरी सक्षम होने पर Gateway स्टार्टअप के दौरान सेवा को कॉल करता है,
वर्तमान Gateway पोर्ट और गैर-गोपनीय TXT संकेत डेटा पास करता है, और Gateway
शटडाउन के दौरान लौटाए गए stop हैंडलर को कॉल करता है।
CLI रजिस्ट्रेशन मेटाडेटा
api.registerCli(registrar, opts?) दो प्रकार के कमांड मेटाडेटा स्वीकार करता है:
commands: रजिस्ट्रार के स्वामित्व वाले स्पष्ट कमांड नामdescriptors: CLI सहायता, रूटिंग, और lazy Plugin CLI रजिस्ट्रेशन के लिए पार्स-टाइम कमांड डिस्क्रिप्टरparentPath: नेस्टेड कमांड समूहों के लिए वैकल्पिक पैरेंट कमांड पथ, जैसे["nodes"]
api.registerNodeCliFeature(registrar, opts?) को प्राथमिकता दें। यह
api.registerCli(..., { parentPath: ["nodes"] }) के चारों ओर एक छोटा रैपर है
और openclaw nodes canvas जैसे कमांड को स्पष्ट Plugin-स्वामित्व वाले node फीचर बनाता है।
यदि आप चाहते हैं कि कोई Plugin कमांड सामान्य रूट CLI पथ में lazy-loaded रहे,
तो ऐसे descriptors दें जो उस रजिस्ट्रार द्वारा उजागर किए गए हर शीर्ष-स्तरीय
कमांड रूट को कवर करते हों।
program के रूप में मिलता है:
commands को अकेले केवल तब उपयोग करें जब आपको lazy रूट CLI रजिस्ट्रेशन की
आवश्यकता न हो। वह eager संगतता पथ समर्थित रहता है, लेकिन वह पार्स-टाइम
lazy loading के लिए डिस्क्रिप्टर-समर्थित placeholders इंस्टॉल नहीं करता।
CLI बैकएंड रजिस्ट्रेशन
api.registerCliBackend(...) किसी Plugin को claude-cli या my-cli जैसे
स्थानीय AI CLI बैकएंड के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन का स्वामी बनने देता है।
- बैकएंड
id,my-cli/gpt-5जैसे मॉडल refs में प्रदाता प्रीफ़िक्स बन जाता है। - बैकएंड
configवही आकार उपयोग करता है जोagents.defaults.cliBackends.<id>का है। - उपयोगकर्ता कॉन्फ़िगरेशन फिर भी प्राथमिक रहता है। OpenClaw CLI चलाने से पहले
agents.defaults.cliBackends.<id>को Plugin डिफ़ॉल्ट के ऊपर मर्ज करता है। - जब किसी बैकएंड को मर्ज के बाद संगतता पुनर्लेखन चाहिए हों, तो
normalizeConfigका उपयोग करें (उदाहरण के लिए पुराने फ़्लैग आकारों को सामान्य करना)। - अनुरोध-स्कोप किए गए argv पुनर्लेखन के लिए
resolveExecutionArgsका उपयोग करें जो CLI डायलेक्ट से संबंधित हों, जैसे OpenClaw thinking स्तरों को किसी नेटिव effort फ़्लैग से मैप करना। हुक कोctx.executionModeमिलता है; ephemeral/btwकॉल के लिए बैकएंड-नेटिव isolation फ़्लैग जोड़ने हेतु"side-question"का उपयोग करें। यदि वे फ़्लैग अन्यथा हमेशा-ऑन CLI के लिए नेटिव टूल को विश्वसनीय रूप से अक्षम करते हैं, तोsideQuestionToolMode: "disabled"भी घोषित करें।
एक्सक्लूसिव स्लॉट
| विधि | यह क्या पंजीकृत करती है |
|---|---|
api.registerContextEngine(id, factory) | संदर्भ इंजन (एक समय में एक सक्रिय)। जब होस्ट मॉडल/प्रदाता/मोड निदान दे सकता है, तो जीवनचक्र कॉलबैक runtimeSettings प्राप्त करते हैं; पुराने सख्त इंजन उस कुंजी के बिना फिर से आजमाए जाते हैं। |
api.registerMemoryCapability(capability) | एकीकृत स्मृति क्षमता |
api.registerMemoryPromptSection(builder) | स्मृति प्रॉम्प्ट सेक्शन बिल्डर |
api.registerMemoryFlushPlan(resolver) | स्मृति फ्लश प्लान रिज़ॉल्वर |
api.registerMemoryRuntime(runtime) | स्मृति रनटाइम अडैप्टर |
अप्रचलित स्मृति एम्बेडिंग अडैप्टर
| विधि | यह क्या पंजीकृत करती है |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | सक्रिय Plugin के लिए स्मृति एम्बेडिंग अडैप्टर |
registerMemoryCapabilityपसंदीदा विशिष्ट स्मृति-Plugin API है।registerMemoryCapabilitypublicArtifacts.listArtifacts(...)भी उजागर कर सकता है, ताकि सहयोगी plugins किसी विशिष्ट स्मृति Plugin के निजी लेआउट में जाने के बजायopenclaw/plugin-sdk/memory-host-coreके माध्यम से निर्यातित स्मृति आर्टिफैक्ट्स का उपयोग कर सकें।registerMemoryPromptSection,registerMemoryFlushPlan, औरregisterMemoryRuntimeविरासत-संगत विशिष्ट स्मृति-Plugin APIs हैं।MemoryFlushPlan.modelसक्रिय फॉलबैक चेन को विरासत में लिए बिना फ्लश टर्न को किसी सटीकprovider/modelसंदर्भ, जैसेollama/qwen3:8b, पर पिन कर सकता है।registerMemoryEmbeddingProviderअप्रचलित है। नए एम्बेडिंग प्रदाताओं कोapi.registerEmbeddingProvider(...)औरcontracts.embeddingProvidersका उपयोग करना चाहिए।- मौजूदा स्मृति-विशिष्ट प्रदाता माइग्रेशन अवधि के दौरान काम करते रहेंगे, लेकिन Plugin निरीक्षण इसे गैर-बंडल plugins के लिए संगतता ऋण के रूप में रिपोर्ट करता है।
इवेंट और जीवनचक्र
| विधि | यह क्या करती है |
|---|---|
api.on(hookName, handler, opts?) | टाइप किया गया जीवनचक्र हुक |
api.onConversationBindingResolved(handler) | बातचीत बाइंडिंग कॉलबैक |
हुक निर्णय सेमांटिक्स
before_install एक Plugin-रनटाइम जीवनचक्र हुक है, ऑपरेटर इंस्टॉल नीति सतह
नहीं। जब किसी अनुमति/ब्लॉक निर्णय को CLI और Gateway-समर्थित इंस्टॉल या अपडेट पथों
को कवर करना हो, तो security.installPolicy का उपयोग करें।
before_tool_call:{ block: true }लौटाना टर्मिनल है। जब कोई भी हैंडलर इसे सेट कर देता है, तो कम-प्राथमिकता वाले हैंडलर छोड़ दिए जाते हैं।before_tool_call:{ block: false }लौटाना कोई निर्णय नहीं माना जाता है (blockको छोड़ने जैसा), ओवरराइड नहीं।before_install:{ block: true }लौटाना टर्मिनल है। जब कोई भी हैंडलर इसे सेट कर देता है, तो कम-प्राथमिकता वाले हैंडलर छोड़ दिए जाते हैं।before_install:{ block: false }लौटाना कोई निर्णय नहीं माना जाता है (blockको छोड़ने जैसा), ओवरराइड नहीं।reply_dispatch:{ handled: true, ... }लौटाना टर्मिनल है। जब कोई भी हैंडलर डिस्पैच का दावा करता है, तो कम-प्राथमिकता वाले हैंडलर और डिफॉल्ट मॉडल डिस्पैच पथ छोड़ दिए जाते हैं।message_sending:{ cancel: true }लौटाना टर्मिनल है। जब कोई भी हैंडलर इसे सेट कर देता है, तो कम-प्राथमिकता वाले हैंडलर छोड़ दिए जाते हैं।message_sending:{ cancel: false }लौटाना कोई निर्णय नहीं माना जाता है (cancelको छोड़ने जैसा), ओवरराइड नहीं।message_received: जब आपको इनबाउंड थ्रेड/टॉपिक रूटिंग चाहिए, तो टाइप किए गएthreadIdफ़ील्ड का उपयोग करें। चैनल-विशिष्ट अतिरिक्त चीजों के लिएmetadataरखें।message_sending: चैनल-विशिष्टmetadataपर लौटने से पहले टाइप किए गएreplyToId/threadIdरूटिंग फ़ील्ड का उपयोग करें।gateway_start: आंतरिकgateway:startupहुक पर निर्भर रहने के बजाय gateway-स्वामित्व वाली स्टार्टअप स्थिति के लिएctx.config,ctx.workspaceDir, औरctx.getCron?.()का उपयोग करें।cron_changed: gateway-स्वामित्व वाले cron जीवनचक्र परिवर्तनों को देखें। बाहरी वेक शेड्यूलरों को सिंक करते समयevent.job?.state?.nextRunAtMsऔरctx.getCron?.()का उपयोग करें, और देय जांचों और निष्पादन के लिए OpenClaw को सत्य का स्रोत बनाए रखें।
API ऑब्जेक्ट फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
api.id | string | Plugin id |
api.name | string | प्रदर्शन नाम |
api.version | string? | Plugin संस्करण (वैकल्पिक) |
api.description | string? | Plugin विवरण (वैकल्पिक) |
api.source | string | Plugin स्रोत पथ |
api.rootDir | string? | Plugin रूट डायरेक्टरी (वैकल्पिक) |
api.config | OpenClawConfig | मौजूदा कॉन्फ़िग स्नैपशॉट (उपलब्ध होने पर सक्रिय इन-मेमरी रनटाइम स्नैपशॉट) |
api.pluginConfig | Record<string, unknown> | plugins.entries.<id>.config से Plugin-विशिष्ट कॉन्फ़िग |
api.runtime | PluginRuntime | रनटाइम सहायक |
api.logger | PluginLogger | स्कोप्ड लॉगर (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | मौजूदा लोड मोड; "setup-runtime" हल्की प्री-फुल-एंट्री स्टार्टअप/सेटअप विंडो है |
api.resolvePath(input) | (string) => string | Plugin रूट के सापेक्ष पथ रिज़ॉल्व करें |
आंतरिक मॉड्यूल परंपरा
अपने Plugin के भीतर, आंतरिक imports के लिए स्थानीय barrel फ़ाइलों का उपयोग करें:api.ts, runtime-api.ts,
index.ts, setup-entry.ts, और समान सार्वजनिक एंट्री फ़ाइलें) जब OpenClaw पहले से चल रहा हो,
तो सक्रिय रनटाइम कॉन्फ़िग स्नैपशॉट को प्राथमिकता देती हैं। यदि अभी कोई रनटाइम
स्नैपशॉट मौजूद नहीं है, तो वे डिस्क पर रिज़ॉल्व की गई कॉन्फ़िग फ़ाइल पर लौटती हैं।
पैकेज किए गए बंडल Plugin facades को OpenClaw के Plugin
facade loaders के माध्यम से लोड किया जाना चाहिए; dist/extensions/... से सीधे imports manifest
और रनटाइम sidecar जांचों को बायपास करते हैं, जिन्हें पैकेज किए गए installs Plugin-स्वामित्व वाले कोड के लिए उपयोग करते हैं।
प्रदाता plugins एक संकीर्ण Plugin-स्थानीय अनुबंध barrel उजागर कर सकते हैं, जब कोई
सहायक जानबूझकर प्रदाता-विशिष्ट हो और अभी किसी सामान्य SDK
subpath में न आता हो। बंडल उदाहरण:
- Anthropic: Claude
beta-header और
service_tierस्ट्रीम सहायकों के लिए सार्वजनिकapi.ts/contract-api.tsसतह। @openclaw/openai-provider:api.tsप्रदाता builders, डिफॉल्ट-मॉडल सहायकों, और realtime प्रदाता builders को निर्यात करता है।@openclaw/openrouter-provider:api.tsप्रदाता builder के साथ onboarding/config सहायकों को निर्यात करता है।
संबंधित
Entry points
definePluginEntry और defineChannelPluginEntry विकल्प।Runtime helpers
पूरा
api.runtime namespace संदर्भ।Setup and config
पैकेजिंग, manifests, और config schemas।
Testing
परीक्षण उपयोगिताएं और lint नियम।
SDK migration
अप्रचलित सतहों से माइग्रेट करना।
Plugin internals
गहन आर्किटेक्चर और क्षमता मॉडल।