[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G992HRDR3PWABA7HT1M01X":3,"skill-same:01M6G992HRDR3PWABA7HT1M01X":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":13,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6G992HRDR3PWABA7HT1M01X","azure-ai-document-intelligence-ts",null,"Extract text, tables, and structured data from documents using Azure Document Intelligence (@azure-rest\u002Fai-document-intelligence). Use when processing invoices, receipts, IDs, forms, or building custom document models.","ricardoaevt\u002Fnexus-roms","ricardoaevt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F164531880?v=4","01M6DGFGSV6CF9AKPHABBREC79","01M6DGFGYNNPJVDFQA05TDPSBN",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-ai-document-intelligence-ts\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"azure ai","azure","azure ai document intelligence ts","intelligence","document","invoices","structured data","tables","azure document intelligence","processing","forms","models","use","extract","text","receipts","ids","REST","data","documents","2026-11-10 10:12:30",false,"---\nname: azure-ai-document-intelligence-ts\ndescription: Extract text, tables, and structured data from documents using Azure Document Intelligence (@azure-rest\u002Fai-document-intelligence). Use when processing invoices, receipts, IDs, forms, or building custom document models.\npackage: \"@azure-rest\u002Fai-document-intelligence\"\n---\n\n# Azure Document Intelligence REST SDK for TypeScript\n\nExtract text, tables, and structured data from documents using prebuilt and custom models.\n\n## Installation\n\n```bash\nnpm install @azure-rest\u002Fai-document-intelligence @azure\u002Fidentity\n```\n\n## Environment Variables\n\n```bash\nDOCUMENT_INTELLIGENCE_ENDPOINT=https:\u002F\u002F\u003Cresource>.cognitiveservices.azure.com\nDOCUMENT_INTELLIGENCE_API_KEY=\u003Capi-key>\n```\n\n## Authentication\n\n**Important**: This is a REST client. `DocumentIntelligence` is a **function**, not a class.\n\n### DefaultAzureCredential\n\n```typescript\nimport DocumentIntelligence from \"@azure-rest\u002Fai-document-intelligence\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nconst client = DocumentIntelligence(\n  process.env.DOCUMENT_INTELLIGENCE_ENDPOINT!,\n  new DefaultAzureCredential()\n);\n```\n\n### API Key\n\n```typescript\nimport DocumentIntelligence from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst client = DocumentIntelligence(\n  process.env.DOCUMENT_INTELLIGENCE_ENDPOINT!,\n  { key: process.env.DOCUMENT_INTELLIGENCE_API_KEY! }\n);\n```\n\n## Analyze Document (URL)\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  AnalyzeOperationOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-layout\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: {\n      urlSource: \"https:\u002F\u002Fexample.com\u002Fdocument.pdf\"\n    },\n    queryParameters: { locale: \"en-US\" }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconsole.log(\"Pages:\", result.analyzeResult?.pages?.length);\nconsole.log(\"Tables:\", result.analyzeResult?.tables?.length);\n```\n\n## Analyze Document (Local File)\n\n```typescript\nimport { readFile } from \"node:fs\u002Fpromises\";\n\nconst fileBuffer = await readFile(\".\u002Fdocument.pdf\");\nconst base64Source = fileBuffer.toString(\"base64\");\n\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-invoice\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { base64Source }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n```\n\n## Prebuilt Models\n\n| Model ID | Description |\n|----------|-------------|\n| `prebuilt-read` | OCR - text and language extraction |\n| `prebuilt-layout` | Text, tables, selection marks, structure |\n| `prebuilt-invoice` | Invoice fields |\n| `prebuilt-receipt` | Receipt fields |\n| `prebuilt-idDocument` | ID document fields |\n| `prebuilt-tax.us.w2` | W-2 tax form fields |\n| `prebuilt-healthInsuranceCard.us` | Health insurance card fields |\n| `prebuilt-contract` | Contract fields |\n| `prebuilt-bankStatement.us` | Bank statement fields |\n\n## Extract Invoice Fields\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-invoice\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: invoiceUrl }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconst invoice = result.analyzeResult?.documents?.[0];\nif (invoice) {\n  console.log(\"Vendor:\", invoice.fields?.VendorName?.content);\n  console.log(\"Total:\", invoice.fields?.InvoiceTotal?.content);\n  console.log(\"Due Date:\", invoice.fields?.DueDate?.content);\n}\n```\n\n## Extract Receipt Fields\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-receipt\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: receiptUrl }\n  });\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconst receipt = result.analyzeResult?.documents?.[0];\nif (receipt) {\n  console.log(\"Merchant:\", receipt.fields?.MerchantName?.content);\n  console.log(\"Total:\", receipt.fields?.Total?.content);\n  \n  for (const item of receipt.fields?.Items?.values || []) {\n    console.log(\"Item:\", item.properties?.Description?.content);\n    console.log(\"Price:\", item.properties?.TotalPrice?.content);\n  }\n}\n```\n\n## List Document Models\n\n```typescript\nimport DocumentIntelligence, { isUnexpected, paginate } from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst response = await client.path(\"\u002FdocumentModels\").get();\n\nif (isUnexpected(response)) {\n  throw response.body.error;\n}\n\nfor await (const model of paginate(client, response)) {\n  console.log(model.modelId);\n}\n```\n\n## Build Custom Model\n\n```typescript\nconst initialResponse = await client.path(\"\u002FdocumentModels:build\").post({\n  body: {\n    modelId: \"my-custom-model\",\n    description: \"Custom model for purchase orders\",\n    buildMode: \"template\",  \u002F\u002F or \"neural\"\n    azureBlobSource: {\n      containerUrl: process.env.TRAINING_CONTAINER_SAS_URL!,\n      prefix: \"training-data\u002F\"\n    }\n  }\n});\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = await poller.pollUntilDone();\nconsole.log(\"Model built:\", result.body);\n```\n\n## Build Document Classifier\n\n```typescript\nimport { DocumentClassifierBuildOperationDetailsOutput } from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst containerSasUrl = process.env.TRAINING_CONTAINER_SAS_URL!;\n\nconst initialResponse = await client.path(\"\u002FdocumentClassifiers:build\").post({\n  body: {\n    classifierId: \"my-classifier\",\n    description: \"Invoice vs Receipt classifier\",\n    docTypes: {\n      invoices: {\n        azureBlobSource: { containerUrl: containerSasUrl, prefix: \"invoices\u002F\" }\n      },\n      receipts: {\n        azureBlobSource: { containerUrl: containerSasUrl, prefix: \"receipts\u002F\" }\n      }\n    }\n  }\n});\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as DocumentClassifierBuildOperationDetailsOutput;\nconsole.log(\"Classifier:\", result.result?.classifierId);\n```\n\n## Classify Document\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentClassifiers\u002F{classifierId}:analyze\", \"my-classifier\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: documentUrl },\n    queryParameters: { split: \"auto\" }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = await poller.pollUntilDone();\nconsole.log(\"Classification:\", result.body.analyzeResult?.documents);\n```\n\n## Get Service Info\n\n```typescript\nconst response = await client.path(\"\u002Finfo\").get();\n\nif (isUnexpected(response)) {\n  throw response.body.error;\n}\n\nconsole.log(\"Custom model limit:\", response.body.customDocumentModels.limit);\nconsole.log(\"Custom model count:\", response.body.customDocumentModels.count);\n```\n\n## Polling Pattern\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  AnalyzeOperationOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n\n\u002F\u002F 1. Start operation\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-layout\")\n  .post({ contentType: \"application\u002Fjson\", body: { urlSource } });\n\n\u002F\u002F 2. Check for errors\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\n\u002F\u002F 3. Create poller\nconst poller = getLongRunningPoller(client, initialResponse);\n\n\u002F\u002F 4. Optional: Monitor progress\npoller.onProgress((state) => {\n  console.log(\"Status:\", state.status);\n});\n\n\u002F\u002F 5. Wait for completion\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n```\n\n## Key Types\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  paginate,\n  parseResultIdFromResponse,\n  AnalyzeOperationOutput,\n  DocumentClassifierBuildOperationDetailsOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n```\n\n## Best Practices\n\n1. **Use getLongRunningPoller()** - Document analysis is async, always poll for results\n2. **Check isUnexpected()** - Type guard for proper error handling\n3. **Choose the right model** - Use prebuilt models when possible, custom for specialized docs\n4. **Handle confidence scores** - Fields have confidence values, set thresholds for your use case\n5. **Use pagination** - Use `paginate()` helper for listing models\n6. **Prefer neural mode** - For custom models, neural handles more variation than template\n","# Azure Document Intelligence REST SDK for TypeScript\n\nExtract text, tables, and structured data from documents using prebuilt and custom models.\n\n## Installation\n\n```bash\nnpm install @azure-rest\u002Fai-document-intelligence @azure\u002Fidentity\n```\n\n## Environment Variables\n\n```bash\nDOCUMENT_INTELLIGENCE_ENDPOINT=https:\u002F\u002F\u003Cresource>.cognitiveservices.azure.com\nDOCUMENT_INTELLIGENCE_API_KEY=\u003Capi-key>\n```\n\n## Authentication\n\n**Important**: This is a REST client. `DocumentIntelligence` is a **function**, not a class.\n\n### DefaultAzureCredential\n\n```typescript\nimport DocumentIntelligence from \"@azure-rest\u002Fai-document-intelligence\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nconst client = DocumentIntelligence(\n  process.env.DOCUMENT_INTELLIGENCE_ENDPOINT!,\n  new DefaultAzureCredential()\n);\n```\n\n### API Key\n\n```typescript\nimport DocumentIntelligence from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst client = DocumentIntelligence(\n  process.env.DOCUMENT_INTELLIGENCE_ENDPOINT!,\n  { key: process.env.DOCUMENT_INTELLIGENCE_API_KEY! }\n);\n```\n\n## Analyze Document (URL)\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  AnalyzeOperationOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-layout\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: {\n      urlSource: \"https:\u002F\u002Fexample.com\u002Fdocument.pdf\"\n    },\n    queryParameters: { locale: \"en-US\" }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconsole.log(\"Pages:\", result.analyzeResult?.pages?.length);\nconsole.log(\"Tables:\", result.analyzeResult?.tables?.length);\n```\n\n## Analyze Document (Local File)\n\n```typescript\nimport { readFile } from \"node:fs\u002Fpromises\";\n\nconst fileBuffer = await readFile(\".\u002Fdocument.pdf\");\nconst base64Source = fileBuffer.toString(\"base64\");\n\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-invoice\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { base64Source }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n```\n\n## Prebuilt Models\n\n| Model ID | Description |\n|----------|-------------|\n| `prebuilt-read` | OCR - text and language extraction |\n| `prebuilt-layout` | Text, tables, selection marks, structure |\n| `prebuilt-invoice` | Invoice fields |\n| `prebuilt-receipt` | Receipt fields |\n| `prebuilt-idDocument` | ID document fields |\n| `prebuilt-tax.us.w2` | W-2 tax form fields |\n| `prebuilt-healthInsuranceCard.us` | Health insurance card fields |\n| `prebuilt-contract` | Contract fields |\n| `prebuilt-bankStatement.us` | Bank statement fields |\n\n## Extract Invoice Fields\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-invoice\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: invoiceUrl }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconst invoice = result.analyzeResult?.documents?.[0];\nif (invoice) {\n  console.log(\"Vendor:\", invoice.fields?.VendorName?.content);\n  console.log(\"Total:\", invoice.fields?.InvoiceTotal?.content);\n  console.log(\"Due Date:\", invoice.fields?.DueDate?.content);\n}\n```\n\n## Extract Receipt Fields\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-receipt\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: receiptUrl }\n  });\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n\nconst receipt = result.analyzeResult?.documents?.[0];\nif (receipt) {\n  console.log(\"Merchant:\", receipt.fields?.MerchantName?.content);\n  console.log(\"Total:\", receipt.fields?.Total?.content);\n  \n  for (const item of receipt.fields?.Items?.values || []) {\n    console.log(\"Item:\", item.properties?.Description?.content);\n    console.log(\"Price:\", item.properties?.TotalPrice?.content);\n  }\n}\n```\n\n## List Document Models\n\n```typescript\nimport DocumentIntelligence, { isUnexpected, paginate } from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst response = await client.path(\"\u002FdocumentModels\").get();\n\nif (isUnexpected(response)) {\n  throw response.body.error;\n}\n\nfor await (const model of paginate(client, response)) {\n  console.log(model.modelId);\n}\n```\n\n## Build Custom Model\n\n```typescript\nconst initialResponse = await client.path(\"\u002FdocumentModels:build\").post({\n  body: {\n    modelId: \"my-custom-model\",\n    description: \"Custom model for purchase orders\",\n    buildMode: \"template\",  \u002F\u002F or \"neural\"\n    azureBlobSource: {\n      containerUrl: process.env.TRAINING_CONTAINER_SAS_URL!,\n      prefix: \"training-data\u002F\"\n    }\n  }\n});\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = await poller.pollUntilDone();\nconsole.log(\"Model built:\", result.body);\n```\n\n## Build Document Classifier\n\n```typescript\nimport { DocumentClassifierBuildOperationDetailsOutput } from \"@azure-rest\u002Fai-document-intelligence\";\n\nconst containerSasUrl = process.env.TRAINING_CONTAINER_SAS_URL!;\n\nconst initialResponse = await client.path(\"\u002FdocumentClassifiers:build\").post({\n  body: {\n    classifierId: \"my-classifier\",\n    description: \"Invoice vs Receipt classifier\",\n    docTypes: {\n      invoices: {\n        azureBlobSource: { containerUrl: containerSasUrl, prefix: \"invoices\u002F\" }\n      },\n      receipts: {\n        azureBlobSource: { containerUrl: containerSasUrl, prefix: \"receipts\u002F\" }\n      }\n    }\n  }\n});\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = (await poller.pollUntilDone()).body as DocumentClassifierBuildOperationDetailsOutput;\nconsole.log(\"Classifier:\", result.result?.classifierId);\n```\n\n## Classify Document\n\n```typescript\nconst initialResponse = await client\n  .path(\"\u002FdocumentClassifiers\u002F{classifierId}:analyze\", \"my-classifier\")\n  .post({\n    contentType: \"application\u002Fjson\",\n    body: { urlSource: documentUrl },\n    queryParameters: { split: \"auto\" }\n  });\n\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\nconst poller = getLongRunningPoller(client, initialResponse);\nconst result = await poller.pollUntilDone();\nconsole.log(\"Classification:\", result.body.analyzeResult?.documents);\n```\n\n## Get Service Info\n\n```typescript\nconst response = await client.path(\"\u002Finfo\").get();\n\nif (isUnexpected(response)) {\n  throw response.body.error;\n}\n\nconsole.log(\"Custom model limit:\", response.body.customDocumentModels.limit);\nconsole.log(\"Custom model count:\", response.body.customDocumentModels.count);\n```\n\n## Polling Pattern\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  AnalyzeOperationOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n\n\u002F\u002F 1. Start operation\nconst initialResponse = await client\n  .path(\"\u002FdocumentModels\u002F{modelId}:analyze\", \"prebuilt-layout\")\n  .post({ contentType: \"application\u002Fjson\", body: { urlSource } });\n\n\u002F\u002F 2. Check for errors\nif (isUnexpected(initialResponse)) {\n  throw initialResponse.body.error;\n}\n\n\u002F\u002F 3. Create poller\nconst poller = getLongRunningPoller(client, initialResponse);\n\n\u002F\u002F 4. Optional: Monitor progress\npoller.onProgress((state) => {\n  console.log(\"Status:\", state.status);\n});\n\n\u002F\u002F 5. Wait for completion\nconst result = (await poller.pollUntilDone()).body as AnalyzeOperationOutput;\n```\n\n## Key Types\n\n```typescript\nimport DocumentIntelligence, {\n  isUnexpected,\n  getLongRunningPoller,\n  paginate,\n  parseResultIdFromResponse,\n  AnalyzeOperationOutput,\n  DocumentClassifierBuildOperationDetailsOutput\n} from \"@azure-rest\u002Fai-document-intelligence\";\n```\n\n## Best Practices\n\n1. **Use getLongRunningPoller()** - Document analysis is async, always poll for results\n2. **Check isUnexpected()** - Type guard for proper error handling\n3. **Choose the right model** - Use prebuilt models when possible, custom for specialized docs\n4. **Handle confidence scores** - Fields have confidence values, set thresholds for your use case\n5. **Use pagination** - Use `paginate()` helper for listing models\n6. **Prefer neural mode** - For custom models, neural handles more variation than template\n",{"name":5,"package":48,"description":7},"@azure-rest\u002Fai-document-intelligence","main","d41309588593cee5c2fb44062474efc3a99fbcb6",".agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-ai-document-intelligence-ts","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms","https:\u002F\u002Fgithub.com\u002Fricardoaevt","2026-03-23 00:05:03",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-document-intelligence-ts",{"tool":61,"command":62},"bunx","bunx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-document-intelligence-ts",{"tool":64,"command":65},"pnpm","pnpm dlx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-document-intelligence-ts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-ai-document-intelligence-ts\u002FSKILL.md",true,[69],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Facceptance-criteria.md","REFERENCE","参考文档",10765,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-ai-document-intelligence-ts\u002Freferences\u002Facceptance-criteria.md",[76,100,116,131,142,151],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":43},"01M6G9HYKQRK6HBKVTZM3258M3","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","MIT","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[84,85,86,87,88,89,90,91,92,93,94,35,95,96,97,98,99],"openspec propose","openspec","cli","generated","with","proposal","complete","get","build","implementation","ready","user","artifacts","tasks","change","design",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":43},"01M6G9HV9V20WFCHYVSDNQMJVK","openspec-new-change","Start a new OpenSpec change using the experimental artifact workflow. Use when the user wants to create a new feature, fix, or modification with a structured step-by-step approach.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-new-change\u002FSKILL.md",[],[85,107,98,108,86,109,110,111,35,95,112,113,114,115,88],"openspec new change","new feature","structured","artifact","workflow","create","start","fix","feature",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":43},"01M6G9HRF6R89QZXGSFC9DRQW3","openspec-explore","Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-explore\u002FSKILL.md",[],[123,124,85,35,125,86,98,95,126,127,128,129,130],"openspec explore","explore","partner","think","thinking partner","thinking","ideas","requirements",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":43},"01M6G9HP3APFCXZG7XRWBMM524","openspec-continue-change","Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-continue-change\u002FSKILL.md",[],[85,138,139,98,111,86,112,95,35,140,110,141],"continue","openspec continue change","next","progress",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":43},"01M6G9HKT3WMSDBSKA7YM4MSSQ","openspec-archive-change","Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-archive-change\u002FSKILL.md",[],[149,85,150,98,86,111,95,35,93,90],"openspec archive change","archive",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":80,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":43},"01M6G9HHEG0RJK4E0YTVZZ6A8T","openspec-apply-change","Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-apply-change\u002FSKILL.md",[],[85,98,158,159,97,113,138,160,95,35,93,86],"openspec apply change","implement","work"]