
# Scene डेटा प्रारूप {/* #scene-data-format */}

पंजीकरण, लॉगिन, Chrome एक्सटेंशन के लिए [मैन्युअल रिकॉर्डिंग/समीक्षा](/docs/hi/manual-recording) देखें। रिकॉर्डर यही Scene अनुबंध लेता है; चित्र Admin समीक्षा के बाद प्रकाशित होते हैं।

`reconstruct.scene.v1` स्रोत/लक्ष्य UI फ़्रेमवर्क से स्वतंत्र देखे इंटरफ़ेस का वर्णन है। Web DOM/CSS और Android views/accessibility एडेप्टर इनपुट हैं। उपभोक्ता इन मूल संरचनाओं को अपना मानक डेटा मॉडल बनाए बिना HTML, Compose या अन्य UI बना सकता है।

[JSON Schema](https://reconstruct.dev/docs/schemas/scene-v1.schema.json) सटीक फ़ील्ड, अनिवार्य सदस्य, nullable प्रकार, enum तय करती है। दस्तावेज़ स्नैपशॉट में [SHA-256](https://reconstruct.dev/docs/schemas/scene-v1.schema.json.sha256) है। वास्तविक कैप्चर में चलते सर्वर द्वारा निर्यात के साथ दिया schema/checksum लें।

[पूरा उदाहरण](https://reconstruct.dev/docs/examples/scene-export-v1.example.json) बंद/खुले संवाद फ़्रेम और दो संक्रमण देता है। यह केवल नमूना है: `example:` साक्ष्य काल्पनिक हैं, मापे उत्पाद कैप्चर नहीं।

## Web Extension परिवेश {/* #web-extension-environment */}

डेस्कटॉप Chrome एक्सटेंशन `web-extension` लेते हैं (आंतरिक C#/Admin MCP में `WebExtension`, protobuf `CAPTURE_TYPE_ENVIRONMENT_WEB_EXTENSION = 6`)। मोबाइल समर्थित नहीं। ज्यामिति अनुबंध समान है। संस्करण में टाइप्ड `browserExtension`: `id`, `name`, `version`, `packageSha256` हो सकते हैं; `displayName` सत्यापित पैकेज से है। Admin जॉब स्क्रीन रिकॉर्ड करता है, समीक्षा तक अप्रकाशित रहती हैं। नियंत्रण/गोपनीयता [मैन्युअल रिकॉर्डिंग](/docs/hi/manual-recording) में है।

आंतरिक एजेंट claim में `expected_environment` (फ़ील्ड 2) है। छोड़ने पर पुराने worker के लिए Web रहता है। कतार claim transaction में एजेंट से तुलना करती है; Admin बदलाव साधारण Web worker को स्टोर एक्सटेंशन पृष्ठ नहीं दिला सकते। ये सार्वजनिक Capture MCP टूल नहीं।

## परिवहन और प्राप्ति {/* #transport-and-acquisition */}

मानक निर्यात MCP [`get_interface_scene`](/docs/hi/mcp-tools#platform-neutral-interface-scene) से मिलता है। प्रकाशित [REST](/docs/hi/api/rest)/[gRPC](/docs/hi/api/grpc) में अलग Scene विधि नहीं। कैटलॉग, insight, फ़ाइल उत्तर JSON में भी अलग मॉडल हैं।

`list_products`, `list_platforms`, `list_versions`, `list_pages` से खोजें। चुने उत्पाद, संस्करण, परिवेश, पृष्ठ, सटीक `view` रखें। समर्थित विकल्प मौजूद कैप्चर नहीं सिद्ध करते। प्रत्येक सहेजी view अलग माँगकर अपने प्रोफ़ाइल/फ़्रेम देखें।

उदाहरण चयन के MCP `tools/call` पैरामीटर:

```json
{
  "name": "get_interface_scene",
  "arguments": {
    "product": "example-product",
    "version": "1",
    "environment": "web",
    "page": "settings",
    "view": "mobile"
  }
}
```

उत्तर संक्षिप्त **मैनिफ़ेस्ट** है:

| फ़ील्ड | अर्थ |
| --- | --- |
| `schema` | Scene ID: `reconstruct.scene.v1`। |
| `artifactSchema` | आवरण ID: `reconstruct.scene-export.v1`। |
| `path`, `uri`, `sha256`, `bytes` | निर्यात स्थान, SHA-256, बाइट लंबाई। |
| `schemaPath`, `schemaUri`, `schemaSha256` | लागू JSON Schema और digest। |
| `entryFrameId`, `frames`, `transitionCount` | प्रवेश फ़्रेम, संक्षिप्त फ़्रेम सूची, संक्रमण संख्या। |
| `frameCount`, `profileCount`, `assetCount` | निर्यात वस्तुओं की संख्या। |
| `truncated` | कम से कम एक फ़्रेम अधूरा। |
| `issueCount`, `issues`, `issuesTruncated` | कुल समस्याएँ, अधिकतम 30 की झलक। |

पथ **सर्वर फ़ाइल सिस्टम** के हैं। वास्तव में साझा हो तभी सीधे पढ़ें; अन्यथा MCP origin से URI सुलझाकर मौजूदा अनुमति से डाउनलोड करें। उत्पाद ID से URL न गढ़ें/क्रेडेंशियल न खोलें। मूल बाइट पर hash जाँचें; JSON पुनः फ़ॉर्मैट से hash बदलता है।

## निर्यात आवरण {/* #export-envelope */}

```json
{
  "schema": "reconstruct.scene-export.v1",
  "scene": {
    "schema": "reconstruct.scene.v1",
    "id": "example/1/web/settings/mobile",
    "platform": "web",
    "entryFrameId": "frame-0",
    "profiles": [],
    "frames": [],
    "resources": [],
    "transitions": [],
    "correspondences": [],
    "issues": []
  },
  "assets": {}
}
```

यह संरचना दिखाता है; पूरे उदाहरण में भरे फ़्रेम हैं। schema पर **`scene`** जाँचें, आवरण नहीं। `assets` संसाधन ID को संग्रहित बाइट से जोड़ता है। प्रविष्टि में वैकल्पिक `path`/`uri`, `mimeType`, `sha256`, `sizeBytes` हैं। बाइट न सहेजे हों तो प्रविष्टि अनुपस्थित हो सकती है। URI, परिवार नाम या खाली media उपयोगी बाइट सिद्ध नहीं करते।

## दस्तावेज़ और पहचान {/* #document-and-identity */}

| Scene सदस्य | अर्थ |
| --- | --- |
| `schema`, `id`, `platform` | आवश्यक प्रारूप, दस्तावेज़ पहचान, स्रोत (`unknown`, `web`, `android`)। |
| `entryFrameId` | वैकल्पिक पहला फ़्रेम, जो बाद के बंद/डिफ़ॉल्ट कंटेंट से पहले सहमति दिखा सकता है। |
| `profiles` | तार्किक viewport और वैकल्पिक घनत्व, फ़ॉन्ट स्केल, सुरक्षित inset, locale, थीम। |
| `frames` | देखी अवस्थाएँ और नोड सूचियाँ। |
| `resources` | नोड/टेक्स्ट के संदर्भित media/font विवरण। |
| `transitions` | रिकॉर्ड कार्य और देखे परिणाम। |
| `correspondences` | फ़्रेमों के बीच स्पष्ट नोड संबंध। |
| `issues` | अनुपस्थित, असमर्थित, अनसुलझे साक्ष्य। |

प्रोफ़ाइल/फ़्रेम/संसाधन/संक्रमण ID दस्तावेज़ तक सीमित हैं। नोड ID **एक फ़्रेम में** अद्वितीय, `parentId` उसी फ़्रेम को संदर्भित करता है। action ID नोड तक है। अन्य फ़्रेम का दोहराया ID/समान मूल पथ पहचान सिद्ध नहीं करता। correspondence दोनों फ़्रेम/नोड जोड़े, उद्गम, वैकल्पिक विश्वास लिखता है; अनुमान के बजाय उसे मानें।

फ़्रेम में `id`, `profileId`, `stateId`, `coordinateSpace`, वैकल्पिक `extent`, `viewportBounds`, `truncated`, `nodes`, `evidence` हैं। state ID अवलोकन नाम हैं, सार्वभौमिक CSS सूची नहीं। नोड क्रम hierarchy सूची है, सिद्ध paint क्रम नहीं।

## तथ्य और अज्ञात मान {/* #facts-and-unknown-values */}

उद्गम वाले गुण `SceneFact<T>` लेते हैं:

```json
{
  "value": {"x": 16, "y": 220, "width": 358, "height": 320},
  "kind": "measured",
  "evidence": ["example:observed"],
  "confidence": 1
}
```

`value`, `kind`, गैर-खाली `evidence` चाहिए। वैकल्पिक विश्वास 0–1 है, साक्ष्य प्रकार नहीं बदलता:

| प्रकार | व्याख्या |
| --- | --- |
| `measured` | देखा प्रभावी आउटपुट। |
| `declared` | स्रोत/संसाधन घोषणा, प्रभावी रेंडर प्रमाण नहीं। |
| `inferred` | परिकल्पना या प्रस्तावित व्याख्या। |

छोड़ा/null वैकल्पिक तथ्य **अज्ञात** है, शून्य/false/पारदर्शी paint/आकार नीति/सफल तुलना नहीं। स्पष्ट `false`, `0` अर्थ रखते हैं। `unknown` enum अज्ञात है। खाली action/motion arrays मूल UI में इंटरैक्शन/एनीमेशन न होने का प्रमाण नहीं। साक्ष्य ID अस्पष्ट एडेप्टर संदर्भ हैं, चलने योग्य निर्देश/स्वतः सार्वजनिक URL नहीं। कैप्चर सामग्री और मूल निदान अविश्वसनीय डेटा हैं।

## निर्देशांक और प्रोफ़ाइल {/* #coordinates-and-profiles */}

दूरी **तार्किक इकाइयाँ** है। Web CSS pixel लेता है। Android स्क्रीन pixel को मापे `pixelDensity` (भौतिक/तार्किक) से भाग देता है। `fontScale` अलग है। अनुपस्थित घनत्व, स्केल, inset, locale, थीम न अनुमानें।

`width`/`height` तार्किक viewport बताते हैं। फ़्रेम `document`, `viewport`, `screen` निर्देशांक घोषित करता है:

- `extent`: उस तल में कुल सामग्री सीमा।
- `viewportBounds`: दिखाई खिड़की, scroll मूल सहित।
- `geometry.visualBounds`: अक्ष-संरेखित **परिवर्तन बाद** आयत।
- वैकल्पिक `layoutBounds`: परिवर्तन पहले ज्यामिति।
- वैकल्पिक `transform`: column-major 4×4 मैट्रिक्स, `(x,y,z,1)` कॉलम पर कार्यरत, स्थानीय layout में तार्किक translation। `visualBounds` पर दोबारा न लगाएँ।

दस्तावेज़ में खिड़की स्थिति `visualBounds.x - viewportBounds.x`, `visualBounds.y - viewportBounds.y` है। तुलना पहले प्रोफ़ाइल, तल, खिड़की मिलाएँ। viewport, उपयोगी root, सामग्री extent अलग अवलोकन हैं। सुरक्षित inset स्वतः padding नहीं।

## नोड, लेआउट, पेंट {/* #nodes-layout-and-paint */}

नोड में `id`, वैकल्पिक `parentId`, `kind`, `semantics`, `visible`, `geometry`, `layout`, `paint`, टेक्स्ट रन, वैकल्पिक `mediaResourceId`, `actions`, `motion`, `evidence` हैं। प्रकार `unknown`, `container`, `text`, `media`, `control`, `surface`। Semantics role/name तथा वैकल्पिक enabled, selected, checked, expanded, editable, modal हैं; visibility से अलग। संवेदनशील टेक्स्ट छिपाएँ; पासवर्ड कभी Scene टेक्स्ट न बने।

| लेआउट समूह | अनुबंध |
| --- | --- |
| `placement` | `unknown`, `flow`, `anchored`, `overlay`, `sticky`. |
| `arrangement` | `unknown`, `row`, `column`, `grid`, `stack`, `free`, `flow`। Stack children ओवरलैप करता है, free स्वतंत्र स्थान है। |
| `horizontal`, `vertical` | अलग policy/value/min/max तथ्य; policy `unknown`, `intrinsic`, `fixed`, `fill`, `proportional` हैं। |
| अंतर/संरेखण | Padding, row/column gap, wrap, उलटा क्रम, मुख्य/पार अक्ष संरेखण। |
| ट्रैक | एक प्रोफ़ाइल के संख्यात्मक row/column आवंटन, लिखे responsive नियम नहीं। |
| एंकर | साक्ष्ययुक्त `referenceId` और वैकल्पिक top/right/bottom/left दूरी; फ़्रेम नोड, `$viewport`, `$frame` संदर्भ। |

Fixed/min/max और एंकर दूरी तार्किक हैं। अनुपात उपलब्ध अक्ष के इकाई-रहित भाग हैं; `fill` multiplier नहीं। मापा आयत fixed आकार, containing block, एंकर, breakpoint नहीं सिद्ध करता। मूल absolute/fixed को बिना एंकर गढ़े `overlay` बना सकते हैं। Margin मानक तत्व-अंतर नहीं।

Paint संख्यात्मक आकार, RGBA 0–1, stroke, shadow, opacity, blur, media लेता है। ठोस stroke का वैकल्पिक `edges`, `top`, `right`, `bottom`, `left` का गैर-खाली अद्वितीय उपसमूह है; छोड़ने पर पूरी सीमा। छाया offset, blur, spread, inset, उद्गम रखती है। `cornerRadii` अभी चार inset-आकार फ़ील्ड है; समान कोनों के लिए Web समान मान देता है। असमान/अंडाकार Web कोने असमर्थित रहते हैं, गढ़े map नहीं।

Media स्थान (`content`, `background`, `surface`) नोड प्रकार से अलग है। Fit `unknown`, `contain`, `cover`, `stretch`, `original`। `(x,y)` बची जगह का अंश एंकर: 0 प्रारंभ, 0.5 मध्य, 1 अंत; बाहरी अंश भी। Background fit असंबंधित content image से न लें।

रन में मूल `text`, वैकल्पिक सीमा, typography: परिवार/फ़ॉन्ट संसाधन, आकार, weight, line-height, spacing, रंग, दिशा, alignment, wrap, decoration, casing हैं। `none`, `uppercase`, `lowercase`, `capitalize` मूल शब्द/accessible name से अलग प्रदर्शन बदलते हैं। असमर्थित paint/gradient/effects समस्याएँ हैं। मनमाने native CSS मान मानक layout/paint नहीं।

## संसाधन और फ़ॉन्ट {/* #resources-and-fonts */}

संसाधन `id`, `kind`, वैकल्पिक `uri`, `mimeType`, `sha256`, `bytes`, font faces रखते हैं। प्रकार `unknown`, `image`, `vector`, `font`, `video`, `audio`, `paint`। संदर्भ उसी दस्तावेज़ में सुलझते हैं। Face परिवार, साक्ष्य प्रकार/संदर्भ, वैकल्पिक weight-range, italic, Unicode कवरेज रखता है। बाइट रखें, लागू face चुनें। नाम/URL अकेले लोड या समान fallback सिद्ध नहीं करता।

## कार्य और मोडल अवस्थाएँ {/* #actions-and-modal-states */}

Action क्षमता `unknown`, `activate`, `edit`, `scroll`, `navigate`, `focus`, `hover`, `back`, वैकल्पिक destination घोषित करते हैं। Transition में स्रोत फ़्रेम/वैकल्पिक नोड, लक्ष्य फ़्रेम, action, outcome, उद्गम है। `nodeId` हमेशा **स्रोत फ़्रेम** का है।

| परिणाम | अर्थ |
| --- | --- |
| `unknown` | परिणाम स्थापित नहीं। |
| `changed` | परिणामी बदलाव देखा गया। |
| `unchanged` | बदलाव नहीं देखा गया। |
| `failed` | कार्य विफल। |
| `performedUnverified` | इनपुट पहुँचा, अपेक्षित परिणाम सिद्ध नहीं। |

नया snapshot ID/बदला caret मेन्यू खुलने का प्रमाण नहीं। खुला modal पूरा फ़्रेम रखे: backdrop, panel, children, नीचे सामग्री। `entryFrameId`/transition से सहमति, बंद कंटेंट, tabs, खोज, खुले मेन्यू अलग करें। forced-state माप और वास्तविक pointer/touch अलग साक्ष्य हैं। स्रोत replay नए UI के कार्यात्मक परीक्षण नहीं।

## गति {/* #motion */}

रिकॉर्ड में `property`, `durationMs`, `keyframes`, `kind`, `evidence`, वैकल्पिक `delayMs`, `iterations`, cubic-Bézier `easing` (`x1`, `y1`, `x2`, `y2`) हैं। समय ms; offset 0–1 बढ़ते, easing x 0–1 हैं।

| गुण | Keyframe `value` घटक |
| --- | --- |
| `opacity` | `[alpha]`, 0–1. |
| `translation` | `[x, y, z]`, तार्किक इकाई। |
| `scale` | `[x, y, z]`, गुणक। |
| `rotation` | `[x, y, z]`, रेडियन। |
| `bounds` | `[x, y, width, height]`, तार्किक इकाई। |
| `color` | `[red, green, blue, alpha]`, 0–1. |

छोड़े विकल्प अज्ञात। शून्य iteration का अर्थ playback नहीं। अज्ञात/असीम दोहराव अनुमानित सीमित संख्या न बने। CSS/WAAPI `declared`, देखे नमूने `measured` हो सकते हैं। स्थिर चित्र/दो अंत timing/easing नहीं सिद्ध करते।

## सत्यापन और कवरेज {/* #validation-and-coverage */}

पहले schema से संरचना, फिर semantics: scoped अद्वितीय ID, सही संदर्भ, चक्रहीन parent, सीमित geometry, गैर-ऋण आकार, सामान्य रंग, font/codepoint, redaction, गति आयाम जाँचें। `SceneValidator` ये अतिरिक्त शर्तें लागू करता है। JSON Schema अकेले पूरा graph/privacy validator नहीं।

वर्तमान schema अज्ञात फ़ील्ड/पूर्णांक enum अस्वीकारता है। ID/hash तय रखें, अन्य version के लिए स्पष्ट adapter लें। अज्ञात को native layout न मानें। पुराने फ़ील्ड अर्थ रखते हैं; असंगत बदलाव के लिए नया format ID चाहिए। सर्वर अपडेट schema byte बदल सकता है: हर निर्यात के साथ schema/hash रखें।

`SceneIssue` में `code`, `message`, वैकल्पिक `frameId`/`nodeId` हैं। पूरा artifact पढ़ें, केवल preview नहीं; truncation मानें। वर्तमान बजट 100 प्रोफ़ाइल, 500 फ़्रेम, 20,000 संसाधन, 100,000 कुल नोड, 20,000/फ़्रेम है। प्राप्ति/परिवहन कम हो सकते हैं; संख्या कवरेज वादा नहीं।

नए Web कैप्चर Scene और native diagnostic देते हैं। पुराने स्पष्ट कमियों के साथ बदल सकते हैं। Android adapter माप मानक बना सकता है, पर API/MCP को प्रकाशित native Scene चाहिए। मॉडल समर्थन बिना कैप्चर परिवेश नहीं देता। अनुपस्थित अवस्थाएँ, संसाधन, गति, responsive अज्ञात रहते हैं। निर्यात/schema सफलता पुनर्निर्माण सटीकता सिद्ध नहीं।


## अनुरोध नीति {/* #request-submission-policy */}

अनुरोध उपलब्धता कैटलॉग कैप्चर से अलग है। Admin Requests → Job defaults → Request submissions में सेट करता है। सहेजा `ProductRequestJobDefaults.Submission`, `Enabled` और typed `Targets` (`Type`, `Environment`) रखता है। पुराने में सदस्य न हो तो Desktop/Web, Desktop/WebExtension, Mobile/Web रहते हैं। बंद करने पर चयन/पुराने अनुरोध रहते हैं। API और प्रमाणित MCP बनाने से पहले नीति जाँचते हैं। बंद होने पर `platforms` खाली; MCP `enabled: false` भी। सार्वजनिक ID `web`, `web-extension` हैं, enum नाम नहीं। कैटलॉग उपलब्ध कैप्चर जोड़े दिखाता है।


### समूहित अनुरोध लक्ष्य {/* #grouped-request-targets */}

नए क्लाइंट स्पष्ट प्लेटफ़ॉर्म/परिवेश जोड़े `CreateRequestRequest.targets` भेजते हैं। उदाहरण:

```json
{
  "requestType": "PRODUCT_REQUEST_TYPE_ADD",
  "url": "https://metamask.io/",
  "webExtensionUrl": "https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",
  "targets": [
    { "view": "desktop", "implementation": "web-extension" },
    { "view": "mobile", "implementation": "web" }
  ]
}
```

सर्वर हर जोड़ा वर्तमान उपलब्धता से जाँचकर typed विवरण में रखता है। स्वीकृति केवल चयनित बनाती है; उदाहरण Desktop/Web जॉब नहीं बनाता। पुराने `views`, `implementations` कार्तीय गुणन हैं; `targets` के साथ न लें। साइट `url`, एक्सटेंशन `webExtensionUrl` है। अपडेट में मौजूद `catalogId`/लक्ष्य, बिना स्रोत लिंक दें। पहले उत्पाद चुनें; उसके कैप्चर और अभी सक्षम जोड़े ही मिलते हैं। सर्वर अनुपस्थित लक्ष्य स्वयं अस्वीकारता, प्रकाशित कैप्चर से स्रोत लेता, क्लाइंट बदले लिंक अनदेखा करता है। सार्वजनिक सार एक्सटेंशन स्रोत/निजी विवरण छोड़ता है।

## अतिरिक्त Scene साक्ष्य {/* #additional-scene-evidence */}

वर्तमान schema में typed token वाले `themes` और अन्य चौड़ाइयों के विरल माप `layoutSamples` हैं। नमूने `frameId` के node संदर्भित करते हैं; frame नहीं हैं, टेक्स्ट या रूप दोबारा नहीं मापते। नमूने में अनुपस्थित node छिपा हुआ सिद्ध नहीं होता। `nodes[].states` रूप में अंतर देता है: मौजूद `patch` फ़ील्ड बदलते हैं, अनुपस्थित वैसे रहते हैं, सूचियाँ पूरी बदलती हैं। Layout में `flow`, `grow`, `shrink`, `basis`, `selfAlignment`, `order`, `gridCell`; paint में gradient और stroke शैली/स्थान हैं। ये वैकल्पिक साक्ष्य पुराने कैप्चर में न हों। स्रोत रखें; एक माप से responsive नियम न निकालें।
