दस्तावेज़
एक सहायक उपकरण प्लगइन लिखें
एक स्व-निहित पठन उपकरण बनाएं, इसके प्रकटीकरण और तर्कों को मान्य करें, इसे जानबूझकर सक्षम करें, और वास्तव में आपको प्राप्त होने वाली कार्यकर्ता सीमा का परीक्षण करें।
अंग्रेज़ी से स्वचालित रूप से अनुवादित। अंग्रेज़ी मूल देखें
सहायक एक्सटेंशन प्रारूप चुनें
उत्पादन सहायक एक्सटेंशन लोडर प्लगइन.जेसन और एक बंडल जावास्क्रिप्ट प्रविष्टि वाली निर्देशिका स्वीकार करता है। यह मॉड्यूल को Bun वर्कर में आयात करता है और अपने एआईटूल्स रिकॉर्ड से घोषित कार्यों को सहायक में प्रदर्शित करता है। वर्तमान में समर्थित क्षमता ai:tool है। यह मार्गदर्शिका एक रीड-ओनली बोल्ट-सर्कल कैलकुलेटर बनाती है जो निर्देशांक लौटाता है; यह रेखाचित्र में ज्यामिति सम्मिलित नहीं करता है।
मेनिफेस्ट.जेसन, मुख्य, ब्राउज़र अनुमतियाँ और बूटस्ट्रैप संपत्तियों के साथ /api/plugins के अंतर्गत एक ब्राउज़र-प्लगइन ज़िप एपीआई भी है। वह इंस्टॉलर यहां वर्णित वर्कर प्लगइन को सक्षम नहीं करता है। प्लगइन HTTP संदर्भ दस्तावेज़ जो अलग प्रारूप में हों; प्लग-इन दोनों सतहों की व्याख्या करता है। केवल मेनिफेस्ट का नाम बदलकर उनके बीच अनुवाद न करें।
एक सहायक उपकरण एप्लिकेशन रनटाइम सीमा के अंदर निष्पादित कोड है। होस्ट क्षमता जांच होस्ट आरपीसी के माध्यम से पहुंच को सीमित करती है, लेकिन वर्तमान कार्यकर्ता एक ऑपरेटिंग-सिस्टम सैंडबॉक्स नहीं है। एक्सटेंशन कोड का उपयोग करें जिसका निष्पादन उस वातावरण के लिए उपयुक्त है, और इसके घोषित पढ़ने/लिखने के व्यवहार को फ़ंक्शन वास्तव में क्या करता है उससे सहमत बनाएं।
निर्देशिका और सहमति रिकॉर्ड बनाएं
आप जिस साइडकार का विस्तार करना चाहते हैं, उसकी सटीक एप्लिकेशन डेटा निर्देशिका का उपयोग करें। निर्देशिका आईडी को मेनिफेस्ट के रिवर्स-डीएनएस आईडी के समान रखते हुए, यह संरचना बनाएं:
<dataDir>/plugins/
enabled.json
com.example.bolt-circle/
plugin.json
index.js उत्पादन लोडर activate.json को सुरक्षित पहचानकर्ताओं की JSON सरणी के रूप में पढ़ता है। यह डुप्लिकेट/अमान्य प्रविष्टियों को अनदेखा करता है, और विकृत या अनुपलब्ध JSON का मतलब है कि कोई प्लगइन सक्षम नहीं है। कोई असूचीबद्ध फ़ोल्डर लोड नहीं किया गया है. लोडर एक फ़ोल्डर/मैनिफ़ेस्ट आईडी बेमेल को भी अस्वीकार कर देता है और असमर्थित क्षमताओं का अनुरोध करता है।
लोडिंग तब होती है जब सहायक प्लगइन सेवा आरंभ होती है। यह हॉट रीलोड के लिए फ़ाइल सिस्टम वॉचर को कॉन्फ़िगर नहीं करता है। पहले फ़ाइलें तैयार करें और सत्यापित करें, फिर उस इंस्टेंस को सक्षम/पुनः प्रारंभ करें। एक विफल प्लगइन एक चेतावनी लॉग करता है जबकि अन्य प्लगइन्स और एप्लिकेशन स्टार्टअप जारी रहते हैं; यह मानने के बजाय कि एक सक्षम-फ़ाइल प्रविष्टि एक चालू टूल की गारंटी देती है, उन चेतावनियों का निरीक्षण करें।
एक सटीक उपकरण अनुबंध घोषित करें
यह संपूर्ण मैनिफ़ेस्ट एकल पठन उपकरण को नाम देता है। योगदान आईडी मॉडल-सामना करने वाला स्थानीय पहचानकर्ता है; प्रविष्टि मॉड्यूल द्वारा निर्यात किए गए फ़ंक्शन का नाम देती है। वे तार भिन्न हो सकते हैं, जैसे कि बोल्ट_सर्कल और बोल्टसर्कल यहां हैं।
{
"id": "com.example.bolt-circle",
"name": "Bolt circle calculator",
"version": "1.0.0",
"apiVersion": "1",
"entry": "index.js",
"capabilities": ["ai:tool"],
"contributes": {
"aiTools": [{
"id": "bolt_circle",
"description": "Calculate equally spaced XY hole centers around the origin for a bolt circle. Returns coordinates without changing a drawing.",
"kind": "read",
"entry": "boltCircle",
"parameters": {
"type": "object",
"properties": {
"count": { "type": "integer", "minimum": 1, "maximum": 64 },
"radius": { "type": "number", "exclusiveMinimum": 0 }
},
"required": ["count", "radius"],
"additionalProperties": false
}
}]
}
} एसडीके को 3–128 वर्णों की रिवर्स-डीएनएस आईडी, वैकल्पिक प्रीरिलीज़ के साथ एक सिमेंटिक मेजर.माइनर.पैच संस्करण, एपीआई संस्करण "1", गैर-रिक्त नाम/प्रविष्टि और मान्यता प्राप्त क्षमताओं की आवश्यकता होती है। टूल आईडी लोअरकेस अक्षर से शुरू होते हैं और 40 वर्णों तक लोअरकेस अक्षरों, अंकों या अंडरस्कोर का उपयोग करते हैं। विवरण में 10–2,000 अक्षर होते हैं। टूल का प्रकार पढ़ा या लिखा जाता है; कोई विनाशकारी विस्तार प्रकार नहीं है।
पैरामीटर स्कीमा को छोटा और वर्णनात्मक रखें। इसकी भूमिका मॉडल को वैध तर्क उत्पन्न करने में मदद करना है और एडॉप्टर को निष्पादन से पहले सामान्य गलतियों को अस्वीकार करने देना है। यह कोड के अंदर सत्यापन को प्रतिस्थापित नहीं करता है।
स्व-निहित मॉड्यूल को कार्यान्वित करें
प्रविष्टि मेनिफेस्ट में नामित प्रविष्टि फ़ंक्शन के साथ aiTools निर्यात करती है। यह रनटाइम तर्कों को फिर से मान्य करता है और एक छोटा JSON-संगत परिणाम देता है। परिमित समन्वय अंकगणित और परिबद्ध गणना विकृत इनपुट को असीमित सूची या अर्थहीन आउटपुट उत्पन्न करने से रोकती है।
export const aiTools = {
boltCircle: async (args) => {
if (!args || typeof args !== "object") {
return { ok: false, error: "Expected count and radius" }
}
const { count, radius } = args
if (!Number.isInteger(count) || count < 1 || count > 64) {
return { ok: false, error: "count must be an integer from 1 to 64" }
}
if (typeof radius !== "number" || !Number.isFinite(radius) || radius <= 0) {
return { ok: false, error: "radius must be a positive finite number" }
}
const holes = Array.from({ length: count }, (_, index) => {
const angle = 2 * Math.PI * index / count
return {
x: Number((radius * Math.cos(angle)).toFixed(4)),
y: Number((radius * Math.sin(angle)).toFixed(4))
}
})
return { ok: true, units: "mm", holes }
}
} Count 4 and radius 10 return centers at approximately (10,0), (0,10), (−10,0), and (0,−10), in counter-clockwise order around the origin. The result deliberately contains no database mutation or drawing identifier. A client wanting to insert holes must use a separate supported application action with its own access and permission behavior.
नोड-शैली सापेक्ष आयात समाधान मानने के बजाय निर्भरता को प्रविष्टि में बंडल करें। होस्ट प्रविष्टि पाठ को पढ़ता है और इसे ब्लॉब मॉड्यूल के माध्यम से आयात करता है। मॉड्यूल शीर्ष-स्तरीय कोड आयात पर चलता है, इसलिए केवल कैलकुलेटर लोड करने से होने वाले दुष्प्रभावों से बचें।
मेनिफेस्ट और दोनों तर्क पथों को मान्य करें
Enable.json में प्लगइन जोड़ने से पहले सत्यापित करें। यह विकास जांच एप्लिकेशन के समान एसडीके मेनिफेस्ट पार्सर और एआई स्कीमा एडाप्टर का उपयोग करती है। स्क्रिप्ट को उन निर्भरताओं वाले कार्यक्षेत्र में रखें, जैसे ऐप्स/साइडकार, और पूर्ण प्लगइन निर्देशिका को इसके तर्क के रूप में पास करें।
import { join } from "node:path"
import { Effect } from "effect"
import { parseManifest } from "@cadcamfun/plugin-sdk"
import { pluginParameters } from "@cadcamfun/ai"
const directory = process.argv[2]
if (!directory) throw new Error("Pass the absolute plugin directory")
const manifest = await Effect.runPromise(parseManifest(
await Bun.file(join(directory, "plugin.json")).text()))
if (manifest.capabilities.some((capability) => capability !== "ai:tool")) {
throw new Error("This production loader accepts only ai:tool")
}
const contribution = manifest.contributes?.aiTools?.[0]
if (!contribution) throw new Error("No tool contribution")
const parameters = pluginParameters(contribution.parameters)
console.log(parameters.safeParse({ count: 4, radius: 10 }).success) // true
console.log(parameters.safeParse({ count: 0, radius: 10 }).success) // false
const module = await import(join(directory, manifest.entry))
console.log(await module.aiTools[contribution.entry]({ count: 4, radius: 10 }))
console.log(await module.aiTools[contribution.entry]({ count: 0, radius: 10 })) अंतिम दो कॉल एडाप्टर अस्वीकृति से स्वतंत्र रूप से फ़ंक्शन-स्तरीय व्यवहार का परीक्षण करते हैं। एसडीके मेनिफेस्ट संरचना को मान्य करता है, लेकिन उत्पादन लोडर अपनी क्षमता और फ़ोल्डर-आईडी नियम जोड़ता है। सभी तीन सीमाओं का परीक्षण करें: घोषणा, तर्क एडाप्टर, और वास्तविक मॉड्यूल फ़ंक्शन।
वास्तविक टूल पहचानकर्ता को सक्षम करें और खोजें
सत्यापन के बाद, एप्लिकेशन डेटा निर्देशिका में आईडी सक्षम करें:
["com.example.bolt-circle"] इच्छित साइडकार सेवा को पुनरारंभ/पुनः प्रारंभ करें और लोड चेतावनियों के लिए लॉग का निरीक्षण करें। फिर सूची GET /api/ai/actions. रीड प्लगइन टूल वहां और साथ ही एम्बेडेड सहायक के सामने प्रदर्शित होते हैं; नीति कैटलॉग को संकीर्ण कर सकती है. टूल पहचानकर्ता प्लगइन आईडी और स्थानीय टूल आईडी से उत्पन्न होता है, जिसे सामान्यीकृत किया जाता है और होस्ट के पहचानकर्ता आकार तक सीमित किया जाता है।
इस मेनिफेस्ट के लिए, वर्तमान व्युत्पन्न आईडी है plugin_com_example_bolt_circle_bolt_circle. प्रत्येक क्लाइंट में नामकरण नियम को दोबारा लागू करने के बजाय इसे खोजें। टूल प्रत्यय के लिए जगह छोड़ने के लिए एक लंबी प्लगइन आईडी को छोटा किया जा सकता है। कैटलॉग के विवरण में प्लगइन नाम शामिल है ताकि उपयोगकर्ता स्रोत की पहचान कर सके।
सामान्य अनुमति मोड की परवाह किए बिना, एक लेखन उपकरण को एम्बेडेड सहायक में मानव अनुमोदन के लिए चिह्नित किया गया है। बाहरी ब्रिज केवल रीड प्लगइन टूल्स को उजागर करता है और रीड/राइट टोकन के साथ भी राइट एक्सटेंशन कॉल को अस्वीकार कर देता है। दयालु रहें; एप्लिकेशन JSON स्कीमा से मनमाना मॉड्यूल साइड इफेक्ट का अनुमान नहीं लगा सकता है।
स्कोप्ड बाहरी पहुंच के माध्यम से रीड टूल को कॉल करें
किसी वास्तविक प्रोजेक्ट के लिए एप्लिकेशन द्वारा जारी ब्रिज टोकन का उपयोग करें। इसका वाहक केवल GET /api/ai/actions और POST /api/ai/actions/invoke खोलता है। यह कॉल करने वालों को प्लगइन्स इंस्टॉल करने, क्रेडेंशियल संपादित करने या असंबंधित परियोजनाओं की गणना करने की अनुमति नहीं देता है। टोकन का प्रोजेक्ट/मोड एक्शन हैंडलर द्वारा जांचा जाता है; एक स्टैंडअलोन कैलकुलेटर क्लाइंट के लिए एप्लिकेशन-व्यापी टोकन अनावश्यक है।
{
"projectId": "replace-with-your-project-id",
"tool": "plugin_com_example_bolt_circle_bolt_circle",
"input": { "count": 4, "radius": 10 }
} curl --fail-with-body \
-H "Authorization: Bearer $CADCAMFUN_BRIDGE_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @bridge-call.json \
"$CADCAMFUN_URL/api/ai/actions/invoke" प्लगइन इनपुट घोषित तर्क ऑब्जेक्ट हैं; अंतर्निहित समूहीकृत टूल के विपरीत, इस रीड प्लगइन को इनपुट के अंदर एक्शन डिस्क्रिमिनेटर की आवश्यकता नहीं होती है। ब्रिज लौटाए गए मान को टूल/एक्शन मेटाडेटा के साथ लपेटता है; कार्रवाई चल रही है. फ़ंक्शन-स्तर ok=false एक उपयोगी समन्वय सूची साबित करने वाली HTTP ट्रांसपोर्ट सफलता के बजाय एक पठनीय परिणाम बना हुआ है।
ब्रिज नीति टूल.यूज और ब्रिज.यूज की जांच करती है। गुम, समाप्त, निरस्त, या गलत प्रकार का टोकन प्राधिकरण विफलता उत्पन्न करता है। किसी अन्य प्रोजेक्ट से जुड़ा टोकन इस कॉल के दायरे को बढ़ाने का कोई तरीका नहीं है।
स्कीमा रूपांतरण और क्षमता सीमा को समझें
योगदान का JSON स्कीमा प्रतिनिधित्व योग्य होने पर एडाप्टर उसे zod में बदलता है। रूपांतरण विफल होने पर, स्कीमा के 20,000 क्रमबद्ध वर्णों से अधिक होने पर, या उसके ऑब्जेक्ट न होने पर, वह एक मनमाने ऑब्जेक्ट स्कीमा पर वापस आता है। इसलिए उदाहरण फ़ंक्शन count और radius स्वयं जाँचता है। किसी समर्थित स्कीमा का नकारात्मक फ़िक्सचर स्थानीय रूप से पास हो जाना यह सिद्ध नहीं करता कि हर स्कीमा विशेषता प्रतिनिधित्व योग्य रहेगी।
एसडीके ड्राइंग:रीड, ड्राइंग:राइट, टूलपाथ:रीड, स्टोरेज, यूआई:पैनल और एआई:टूल को पहचानता है; ड्राइंग राइट का तात्पर्य ड्राइंग रीड से है। उत्पादन सहायक लोडर वर्तमान में केवल ai:tool स्वीकार करता है। इस मेनिफेस्ट में ड्राइंग:राइट जोड़ने से इसे छोड़ दिया जाता है, ड्राइंग संपादक संदर्भ नहीं दिया जाता है।
सामान्य वर्कर बूटस्ट्रैप में प्लेसहोल्डर ड्राइंग/टूलपाथ/यूआई हैंडलर होते हैं। वे हैंडलर उत्पादन ज्यामिति एकीकरण नहीं हैं। इसी तरह, पोस्ट-प्रोसेसर या ऑपरेशन योगदान घोषित करने से सहायक लोडर उन्हें विनिर्माण रजिस्ट्रियों में तार नहीं करता है। जब सुविधा को वास्तविक CAD/CAM डेटा बदलने की आवश्यकता हो तो एक समर्थित एप्लिकेशन कार्रवाई चुनें।
कार्यान्वित कार्यकर्ता जीवनचक्र के आसपास डिज़ाइन करें
एसडीके मेनिफेस्ट, सक्रिय, वैकल्पिक सफाई और निष्क्रिय हुक के साथ एक मॉड्यूल का वर्णन करता है। वर्तमान उत्पादन AI पथ प्रविष्टि आयात करता है और निर्यात किए गए aiTools फ़ंक्शंस को कॉल करता है। इसके कार्यकर्ता आरपीसी हैंडलर को सक्रिय/निष्क्रिय करते हैं जो जीवनचक्र संदेशों को स्वीकार करते हैं लेकिन निर्यातित मॉड्यूल हुक को लागू नहीं करते हैं। इसलिए एक कैलकुलेटर सक्रियण कॉलबैक पर निर्भर हुए बिना यहां दिखाए गए न्यूनतम मॉड्यूल का उपयोग कर सकता है।
होस्ट प्रति सक्षम प्लगइन एक कार्यकर्ता शुरू करता है, आरपीसी आईडी के साथ उत्तरों को सहसंबंधित करता है, और लंबित कॉल को ट्रैक करता है। एक फ़ंक्शन अपवाद उस कॉल को विफल कर देता है; केंद्रित वास्तविक-कार्यकर्ता परीक्षणों से पता चलता है कि बाद की कॉलें अभी भी सफल हो सकती हैं। अपेक्षित अमान्य इनपुट के लिए संरचित इनकार लौटाएं, और अप्रत्याशित गणना त्रुटियों के लिए फेंकी गई विफलताओं को आरक्षित करें।
एक कॉल टाइमआउट उसके कार्यकर्ता को समाप्त कर देता है और प्लगइन को तुरंत ख़राब कर देता है। कार्यकर्ता क्रैश और पोस्टिंग विफलताएं भी चल रहे इंस्टेंस को हटा देती हैं और इसे दोषपूर्ण चिह्नित करती हैं। दुर्घटना इतिहास में दस मिनट की विंडो होती है, लेकिन वर्तमान हैंडलर पहली दुर्घटना में गलती कर देता है; यह तीन सफल पुनरारंभ प्रयासों की प्रतीक्षा नहीं करता है। स्रोत को ठीक करें और स्वचालित पुनरारंभ मानने के बजाय जानबूझकर पुनः लोड/पुनः सक्षम करें।
रनटाइम गारंटी को अनुपात में रखें
उत्पादन लोडर सामान्य जीवनचक्र/कमांड आरपीसी के लिए 10-सेकेंड होस्ट बजट की आपूर्ति करता है। एआई टूल कॉल के लिए अलग से 30-सेकंड की समय सीमा होती है। होस्ट प्लगइन को प्रति मिनट 2, 000 कॉल और 64 लंबित कॉल तक सीमित करता है। वर्कर बनाते समय यह Bun को 256 एमबी संसाधन-सीमा सेटिंग पास करता है। ये रनटाइम नियंत्रण हैं, कोई अलग प्रक्रिया या ऑपरेटिंग-सिस्टम रोकथाम नीति नहीं।
बूटस्ट्रैप एक खाली वातावरण से शुरू होता है और चयनित प्रक्रिया/नेटवर्क ग्लोबल्स को हटाने का प्रयास करता है। हटाना सर्वोत्तम प्रयास है और कुछ Bun ग्लोबल पहुंच योग्य बने रहते हैं। इसलिए मेजबान द्वारा आपूर्ति की जाने वाली एपीआई के लिए क्षमता जांच सार्थक है, लेकिन इसे मनमानी जावास्क्रिप्ट के पूर्ण अलगाव के रूप में प्रस्तुत नहीं किया जा सकता है।
मेनिफेस्ट स्कीमा में वैकल्पिक हस्ताक्षर और डेव फ़ील्ड मौजूद हैं। वर्तमान कार्यकर्ता स्थापना पथ क्रिप्टोग्राफ़िक सत्यापन के बिना हस्ताक्षर पाठ रिकॉर्ड करता है। किसी प्रकाशक को सत्यापित लेबल न लगाएं क्योंकि वह फ़ील्ड मौजूद है। एक स्व-निहित स्रोत समीक्षा और स्थापना नीति स्कीमा स्वीकृति से अलग निर्णय हैं।
दस मिनट के भीतर तीन बार क्रैश होने वाले प्लगइन्स स्वचालित रूप से अक्षम हो जाते हैं, और सहायक टूल कॉल 30 सेकंड के बाद बंद हो जाती है। दोनों मान स्थिरांक हैं apps/sidecar/src/plugins/host.ts.
किसी टूल को अपडेट करें, हटाएं और निदान करें
अद्यतन के लिए, लक्ष्य सेवा को पुनः आरंभ करने से पहले बंडल मॉड्यूल/मेनिफ़ेस्ट को संपादित और मान्य करें। जब यह समान एक्सटेंशन हो तो इसकी आईडी स्थिर रखें और जो लोड किया गया था उसकी पहचान करने के लिए संस्करण बढ़ाएं। भविष्य में आरंभीकरण पर इसे लोड करने से रोकने के लिए, इसकी आईडी को Enabled.json से हटा दें और पुनरारंभ/पुनः प्रारंभ करें। अकेले फ़ाइल बदलने से पहले से चल रहे कर्मचारी का निपटान नहीं होता है।
यदि उपकरण गायब है, तो सक्षम सरणी, सटीक फ़ोल्डर/मैनिफ़ेस्ट आईडी समानता, समर्थित क्षमता सूची और लॉग में मेनिफेस्ट डिकोड त्रुटि की जाँच करें। NoSuchTool का आमतौर पर मतलब है कि प्रविष्टि में निर्यात किए गए aiTools फ़ंक्शन का नाम नहीं है। एक तर्क इनकार स्कीमा या फ़ंक्शन गार्ड की ओर इंगित करता है। टाइमआउट काम में रुकावट या किसी अनसुलझे वादे की ओर इशारा करता है। ब्राउज़र ज़िप सक्षम/कॉन्फिग एंडपॉइंट इस कार्यकर्ता सहमति फ़ाइल का प्रबंधन नहीं करता है।
फोकस्ड कवरेज अंदर है apps/sidecar/test/plugins-ai-tools.test.ts वास्तविक श्रमिकों के लिए और ai-plugin-tools.test.ts उत्पादन लोडिंग, तर्क सत्यापन, पढ़ने/लिखने का एक्सपोज़र और ब्रिज व्यवहार के लिए। कार्यान्वयन स्रोत हैं packages/plugin-sdk/src/manifest.ts, packages/ai/src/tools/plugin-tool.ts, apps/sidecar/src/plugins/host.ts, और services/ai-plugins.ts. यह निर्धारित करने के लिए इन सीमाओं का उपयोग करें कि एक सफल परीक्षण वास्तव में क्या साबित हुआ।
अनुबंध नियम एक नज़र में
| वस्तु | बाधा | उल्लंघन करने पर क्या होता है |
|---|---|---|
औजार id | ^[a-z][a-z0-9_]{0,39}$ | मेनिफेस्ट डिकोड विफल रहता है; प्लगइन लोड नहीं है. |
description | 10–2,000 अक्षर | मेनिफेस्ट डिकोड विफल रहता है. |
kind | read या write; कोई विनाशकारी प्रकार नहीं है | मेनिफेस्ट डिकोड विफल रहता है. |
parameters | JSON स्कीमा ऑब्जेक्ट, क्रमबद्ध होने पर अधिकतम 20,000 वर्ण | बड़े आकार या अपरिवर्तनीय स्कीमा किसी भी वस्तु को स्वीकार करने के लिए वापस आते हैं। |
| क्षमताओं | केवल ai:tool सहायक मेजबान में | प्लगइन को एक चेतावनी के साथ छोड़ दिया गया है। |
| फ़ोल्डर का नाम | प्रकट के बराबर id | प्लगइन को दोनों मानों का नामकरण करते हुए एक चेतावनी के साथ छोड़ दिया गया है। |
| साधारण कॉल बजट | डिफ़ॉल्ट रूप से प्रति कॉल 5 सेकंड | कार्यकर्ता को किसी अनुत्तरदायी प्लगइन की तरह रोक दिया जाता है। |
| सहायक टूल कॉल बजट | 30 s | कॉल विफलता परिणाम देता है। |
| याद | 256 एमबी ढेर | मजदूर मारा गया. |
| दर | 2, 000 प्रति प्लगइन प्रति मिनट कॉल, 64 लंबित कॉल | दर से अधिक कॉल करने से इनकार कर दिया जाता है; एक पूरी कतार विफल हो जाती है plugin RPC queue is full. |
| क्रैश और टाइमआउट | 10 मिनट से अधिक की गणना, सीमा 3 | प्रत्येक क्रैश या टाइमआउट कार्यकर्ता को समाप्त कर देता है और प्लगइन को दोषपूर्ण चिह्नित कर देता है। |
मॉडल का विवरण लिखें. बताएं कि उपकरण क्या गणना करता है, इसकी इकाइयाँ, और इसका उपयोग कब करना है; उदाहरण के लिए, "मिलीमीटर में बोल्ट सर्कल के छेद केंद्र लौटाता है। जब उपयोगकर्ता व्यास पर समान दूरी वाले छेद के लिए पूछता है तो इसका उपयोग करें।" अस्पष्ट विवरण के कारण टूल को गलत समय पर बुलाया जाता है या बिल्कुल नहीं बुलाया जाता है।
प्री-रिलीज़ चेकलिस्ट
- प्रविष्टि को एकल स्व-निहित मॉड्यूल में बंडल करें। कार्यकर्ता रनटाइम पर कार्यक्षेत्र आयात का समाधान नहीं कर सकता।
- दौड़ना
parseManifestफाइनल परplugin.jsonऔर रिपोर्ट की गई प्रत्येक समस्या को ठीक करें। - प्रत्येक निर्यातित टूल फ़ंक्शन को सीधे वैध, सीमा और अमान्य तर्कों के साथ कॉल करें, और पुष्टि करें कि अमान्य इनपुट एक अपवाद से बचने के बजाय एक पठनीय त्रुटि परिणाम उत्पन्न करता है।
- परिणाम छोटे और JSON-संगत रखें। सहायक उन्हें पढ़ता है, और बड़े आउटपुट संदर्भ को भीड़ देते हैं।
- चुनना
readजब तक कि उपकरण कुछ न बदल दे. एwriteटूल प्रत्येक कॉल से पहले उपयोगकर्ता को संकेत देता है। - फ़ोल्डर को नीचे रखें
<data dir>/plugins/<id>/, आईडी जोड़ेंenabled.json, साइडकार को पुनरारंभ करें, और सहायक की टूल सूची से प्राप्त टूल आईडी की पुष्टि करें। - उभार
versionआपके द्वारा भेजे जाने वाले प्रत्येक परिवर्तन के लिए, और रखेंidस्थिर ताकि व्युत्पन्न टूल आईडी न बदले।
इंस्टॉल करने से पहले एक मेनिफ़ेस्ट लिंट करें
import { decodeManifest, requestedCapabilities } from "@cadcamfun/plugin-sdk"
import { Effect } from "effect"
const raw = JSON.parse(await Bun.file(process.argv[2] ?? "plugin.json").text())
const manifest = await Effect.runPromise(decodeManifest(raw)) // throws a SchemaError naming the bad field
console.log(manifest.id, manifest.version, requestedCapabilities(manifest))
for (const tool of manifest.contributes?.aiTools ?? [])
console.log(`plugin_${manifest.id}_${tool.id}`, tool.kind) | सामान्य गलती | हल करना |
|---|---|
"version": "1.0" | तीन नंबरों का प्रयोग करें: 1.0.0 |
"apiVersion": 1 | यह एक स्ट्रिंग है: "1" |
प्लगइन आईडी gear या My.Plugin | रिवर्स-डीएनएस, लोअर केस: com.example.gear |
टूल आईडी Lookup-Thread | छोटा अक्षर, अंक और अंडरस्कोर, पहला अक्षर, ≤ 40 अक्षर |
| टूल विवरण 10 वर्णों से छोटा | वर्णन करें कि यह क्या करता है और इसका उपयोग कब करना है |
दोनों की घोषणा drawing:read और drawing:write | अनुमति है, लेकिन drawing:write अकेले का तात्पर्य पहले से ही पढ़ना है |
भंडारण कुंजी से शुरू हो रही है / या युक्त .. | जैसे सापेक्ष कुंजियों का उपयोग करें presets/m2 |