[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699MZMKA4AH0MA0TAC865BM":3,"skill-same:01M699MZMKA4AH0MA0TAC865BM":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":72},"01M699MZMKA4AH0MA0TAC865BM","add-pdf-viewer",null,"Internal implementation skill invoked by \u002Fadd-native for native PDF control workflows. Handles HTTPS and file URI PDF viewing with @microsoft\u002Fpower-apps-native-pdf-viewer 0.2.9+.","microsoft\u002Fpower-platform-skills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M699JVYJFB75D9JM70BN4H0Q",1149,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fmobile-apps\u002Fskills\u002Fadd-native\u002Fadd-pdf-viewer\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,9],"viewer","add pdf viewer","add","PDF","control","for","true","sonnet","with","native","apps","false","power","edit","write","read","Bash","file","workflows","2026-11-10 10:12:30",false,"---\nname: add-pdf-viewer\ndescription: Internal implementation skill invoked by \u002Fadd-native for native PDF control workflows. Handles HTTPS and file URI PDF viewing with @microsoft\u002Fpower-apps-native-pdf-viewer 0.2.9+.\nuser-invocable: false\ndisable-model-invocation: true\nallowed-tools: Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion\nmodel: sonnet\n---\n\n**? Shared instructions: [shared-instructions.md](${PLUGIN_ROOT}\u002Fshared\u002Fshared-instructions.md)** — read first.\n\n**Working directory:** before any project read or command, execute\n[native-artifact-compatibility.md Step 0](${PLUGIN_ROOT}\u002Fshared\u002Freferences\u002Fnative-artifact-compatibility.md#0-bind-every-operation-to-the-app-root).\nInherit `\u002Fadd-native`'s resolved absolute `working_dir`; bind every shell call and\nfile tool to it, even when this helper starts from another directory.\n\n# Add PDF Viewer\n\n**Internal helper.** Users should invoke `\u002Fadd-native pdf-viewer`, `\u002Fadd-native pdf-control`, or `\u002Fadd-native @microsoft\u002Fpower-apps-native-pdf-viewer`; `\u002Fadd-native` routes here after resolving the capability.\n\nGenerate or verify the native PDF viewer wrapper and show how to call its **native React Native API**. Version 0.2.9 and later support HTTPS PDF URLs and local `file:\u002F\u002F` URIs. Do not use the HostingSDK \u002F PCF path from the package README; that is for a different use case.\n\n## Steps\n\n### 1. Verify app\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\ntest -f app.config.js && test -f power.config.json && test -f package.json && test -d src || { echo \"BLOCKED: working_dir is not an initialized app\" >&2; exit 1; }\n```\n\nIf this fails, tell the user to run `\u002Fcreate-mobile-app` first and STOP.\n\n### 2. Verify package is already present\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\nnode -e \"const p=require('.\u002Fpackage.json'); const m='@microsoft\u002Fpower-apps-native-pdf-viewer'; if (!p.dependencies?.[m]) { console.error('MISSING: ' + m + ' is not in package.json. The template\u002Fapp must already ship this native extension. This skill will not install it or edit native config.'); process.exit(1); } let v; try { v=require('.\u002Fnode_modules\u002F' + m + '\u002Fpackage.json').version; } catch { console.error('MISSING_INSTALL: cannot verify the installed ' + m + ' version. Run the project package install first.'); process.exit(1); } const [major,minor,patch]=v.split('.').map(Number); if (!(major > 0 || minor > 2 || (minor === 2 && patch >= 9))) { console.error('UNSUPPORTED_VERSION: ' + m + ' ' + v + ' does not support file:\u002F\u002F URIs. Version 0.2.9+ is required.'); process.exit(1); } console.log('OK: native PDF viewer ' + v + ' supports https:\u002F\u002F and file:\u002F\u002F');\"\n```\n\nIf the check fails, STOP. Do not run `npm install`, `npx expo install`, `pod install`, or edit `app.config.js`. Version 0.2.9+ must already be part of the app's native build.\n\n### 2a. Reconcile requested artifacts\n\nRead and execute [native-artifact-compatibility.md](${PLUGIN_ROOT}\u002Fshared\u002Freferences\u002Fnative-artifact-compatibility.md)\nSteps 1–3 for the PDF viewer row before any writes or reuse. Inherit the current\napproval\u002Fmode from `\u002Fadd-native`; do not repeat a valid scoped approval.\nInspect `src\u002Fnative\u002FpdfViewer.ts` for `openHttpsPdf`, `PdfViewerResult`, requested\noptions\u002Factions, and the actual HTTPS\u002Flocal-file behavior against installed\nversion 0.2.9+. An HTTPS-only implementation cannot satisfy a requested local\n`file:\u002F\u002F` preview. Check invalid URI and missing-native-module paths, not just\nexports; an incompatible artifact outside approval returns `NEEDS_CONTEXT` to\nthe owner, or asks standalone.\n\n### 3. Write or verify `src\u002Fnative\u002FpdfViewer.ts`\n\nApply Step 2a's decision for `src\u002Fnative\u002FpdfViewer.ts`: create when requested and\nmissing, reuse unchanged only if compatible, or make only the approved scoped\nupdate. Preserve custom code, exports, and callers; do not overwrite from the example.\n\nThe wrapper MUST:\n\n- Accept `https:\u002F\u002F` URLs and `file:\u002F\u002F` URIs.\n- Reject `content:\u002F\u002F`, `blob:`, `http:\u002F\u002F`, empty, and malformed URLs before calling native code.\n- Return a discriminated union and never throw.\n- Return `NATIVE_MODULE_MISSING` when the extension is installed in JS but unavailable in the native build.\n- Surface viewer action results (`shared`, `printed`, `dismissed`) when available.\n- Return `VIEWER_FAILED` for native errors not covered by validation\u002Fmodule checks.\n\n```ts\n\u002F\u002F src\u002Fnative\u002FpdfViewer.ts\nimport { NativePdfViewer } from '@microsoft\u002Fpower-apps-native-pdf-viewer';\n\nexport type PdfViewerResult =\n  | { ok: true; action?: 'shared' | 'printed' | 'dismissed' }\n  | { ok: false; reason: 'INVALID_URL' | 'NATIVE_MODULE_MISSING' | 'VIEWER_FAILED'; message?: string };\n\nexport async function openHttpsPdf(\n  url: string,\n  options?: { title?: string; maxFileSizeMb?: number; cacheEnabled?: boolean },\n): Promise\u003CPdfViewerResult> {\n  let parsed: URL;\n  try {\n    parsed = new URL(url);\n  } catch {\n    return { ok: false, reason: 'INVALID_URL', message: 'PDF location must be a valid https:\u002F\u002F URL or file:\u002F\u002F URI.' };\n  }\n\n  const isHttpsUrl = parsed.protocol === 'https:';\n  const isFileUri = parsed.protocol === 'file:' && url.startsWith('file:\u002F\u002F') && parsed.pathname !== '\u002F';\n  if (!isHttpsUrl && !isFileUri) {\n    return { ok: false, reason: 'INVALID_URL', message: 'Native PDF viewer supports https:\u002F\u002F and file:\u002F\u002F inputs only.' };\n  }\n\n  if (!NativePdfViewer?.openPdf) {\n    return { ok: false, reason: 'NATIVE_MODULE_MISSING', message: 'Native PDF viewer module is not available in this build.' };\n  }\n\n  try {\n    const response = await NativePdfViewer.openPdf(url, {\n      maxFileSizeMb: 50,\n      cacheEnabled: true,\n      ...options,\n    });\n\n    if (response.status === 'ok') {\n      return { ok: true, action: response.result?.action };\n    }\n\n    return { ok: false, reason: 'VIEWER_FAILED', message: response.message ?? response.error };\n  } catch (error: any) {\n    return { ok: false, reason: 'VIEWER_FAILED', message: error?.message ?? String(error) };\n  }\n}\n```\n\n### 4. Use the wrapper\n\nIntegration guidance for the owner; do not edit screens in this helper.\n\nScreens import the wrapper, not the native package directly:\n\n```ts\nimport { openHttpsPdf } from '@\u002Fnative\u002FpdfViewer';\n\nconst response = await openHttpsPdf('https:\u002F\u002Fexample.com\u002Freport.pdf', {\n  title: \"Inspection report\",\n});\n\nif (response.ok) {\n  switch (response.action) {\n    case \"shared\":\n      \u002F\u002F User completed native Share.\n      break;\n    case \"printed\":\n      \u002F\u002F User completed native Print.\n      break;\n    case \"dismissed\":\n      \u002F\u002F User closed the viewer.\n      break;\n  }\n} else {\n  console.warn(\"Failed to open PDF:\", response.reason, response.message);\n}\n```\n\nNotes:\n- URLs must use `https:\u002F\u002F` or a non-empty `file:\u002F\u002F` URI. `content:\u002F\u002F`, `blob:`, and `http:\u002F\u002F` are not supported by this skill.\n- Use `@microsoft\u002Fpower-apps-native-pdf-viewer` only for this native PDF viewing use case.\n- Use `expo-document-picker` for picking\u002Fimporting\u002Fuploading a local PDF or document.\n- Use `\u002Fadd-native pdf-report` for generated local PDFs. That helper requires `expo-print` and adds sharing behavior only when `expo-sharing` is already present.\n- Generated local PDFs from `expo-print` may be opened by native PDF viewer 0.2.9+ as `file:\u002F\u002F` URIs.\n- Share and Print are built into the native viewer; there are no separate JS share\u002Fprint calls.\n- The wrapper returns `{ ok: true } | { ok: false }`; handle every non-ok reason in UI.\n\n### 5. Type-check\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\nnpx --no-install tsc --noEmit\n```\n\nFix only in-scope helper errors, then execute the shared compatibility contract's\nStep 4. Recheck requested inputs\u002Foptions\u002Factions, invalid URI rejection, missing\nnative module, and viewer failures. Type-check success alone is insufficient;\ndo not fix screen\u002Fgenerated files.\n\n### 6. Native rebuild note\n\nThis skill does not install native code. If the package was just added outside the skill, the app needs a native rebuild outside this workflow. If the package was already in the build, Metro hot reload is enough for wrapper edits.\n\n### 7. Do not use HostingSDK \u002F PCF\n\nDo not import or register:\n\n```ts\nimport NativePdfViewerExtension from \"@microsoft\u002Fpower-apps-native-pdf-viewer\";\n```\n\nDo not wire Companion PCF or `NativePdfViewerExtension`. In Power Apps native code apps, use the native React Native API above.\n\n### 8. Summary\n\nReturn the shared compatibility result and actual created\u002Fupdated\u002Freused paths\nbefore this summary. Update memory-bank only after success, and leave final\nupdates to the owner when orchestrated.\n\nTell the user:\n\n```text\nPDF viewer added\nPackage present   : @microsoft\u002Fpower-apps-native-pdf-viewer\nWrapper           : src\u002Fnative\u002FpdfViewer.ts\nURL support       : HTTPS and file:\u002F\u002F (0.2.9+)\nType-check        : PASS\nNative rebuild    : not performed by this skill\nUsage             : openHttpsPdf(...)\nHostingSDK \u002F PCF  : not used\n```\n\nUpdate `memory-bank.md` under `Controls`:\n\n```text\n- PDF viewer added — @microsoft\u002Fpower-apps-native-pdf-viewer (\u003CISO date>)\n```\n","**? Shared instructions: [shared-instructions.md](${PLUGIN_ROOT}\u002Fshared\u002Fshared-instructions.md)** — read first.\n\n**Working directory:** before any project read or command, execute\n[native-artifact-compatibility.md Step 0](${PLUGIN_ROOT}\u002Fshared\u002Freferences\u002Fnative-artifact-compatibility.md#0-bind-every-operation-to-the-app-root).\nInherit `\u002Fadd-native`'s resolved absolute `working_dir`; bind every shell call and\nfile tool to it, even when this helper starts from another directory.\n\n# Add PDF Viewer\n\n**Internal helper.** Users should invoke `\u002Fadd-native pdf-viewer`, `\u002Fadd-native pdf-control`, or `\u002Fadd-native @microsoft\u002Fpower-apps-native-pdf-viewer`; `\u002Fadd-native` routes here after resolving the capability.\n\nGenerate or verify the native PDF viewer wrapper and show how to call its **native React Native API**. Version 0.2.9 and later support HTTPS PDF URLs and local `file:\u002F\u002F` URIs. Do not use the HostingSDK \u002F PCF path from the package README; that is for a different use case.\n\n## Steps\n\n### 1. Verify app\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\ntest -f app.config.js && test -f power.config.json && test -f package.json && test -d src || { echo \"BLOCKED: working_dir is not an initialized app\" >&2; exit 1; }\n```\n\nIf this fails, tell the user to run `\u002Fcreate-mobile-app` first and STOP.\n\n### 2. Verify package is already present\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\nnode -e \"const p=require('.\u002Fpackage.json'); const m='@microsoft\u002Fpower-apps-native-pdf-viewer'; if (!p.dependencies?.[m]) { console.error('MISSING: ' + m + ' is not in package.json. The template\u002Fapp must already ship this native extension. This skill will not install it or edit native config.'); process.exit(1); } let v; try { v=require('.\u002Fnode_modules\u002F' + m + '\u002Fpackage.json').version; } catch { console.error('MISSING_INSTALL: cannot verify the installed ' + m + ' version. Run the project package install first.'); process.exit(1); } const [major,minor,patch]=v.split('.').map(Number); if (!(major > 0 || minor > 2 || (minor === 2 && patch >= 9))) { console.error('UNSUPPORTED_VERSION: ' + m + ' ' + v + ' does not support file:\u002F\u002F URIs. Version 0.2.9+ is required.'); process.exit(1); } console.log('OK: native PDF viewer ' + v + ' supports https:\u002F\u002F and file:\u002F\u002F');\"\n```\n\nIf the check fails, STOP. Do not run `npm install`, `npx expo install`, `pod install`, or edit `app.config.js`. Version 0.2.9+ must already be part of the app's native build.\n\n### 2a. Reconcile requested artifacts\n\nRead and execute [native-artifact-compatibility.md](${PLUGIN_ROOT}\u002Fshared\u002Freferences\u002Fnative-artifact-compatibility.md)\nSteps 1–3 for the PDF viewer row before any writes or reuse. Inherit the current\napproval\u002Fmode from `\u002Fadd-native`; do not repeat a valid scoped approval.\nInspect `src\u002Fnative\u002FpdfViewer.ts` for `openHttpsPdf`, `PdfViewerResult`, requested\noptions\u002Factions, and the actual HTTPS\u002Flocal-file behavior against installed\nversion 0.2.9+. An HTTPS-only implementation cannot satisfy a requested local\n`file:\u002F\u002F` preview. Check invalid URI and missing-native-module paths, not just\nexports; an incompatible artifact outside approval returns `NEEDS_CONTEXT` to\nthe owner, or asks standalone.\n\n### 3. Write or verify `src\u002Fnative\u002FpdfViewer.ts`\n\nApply Step 2a's decision for `src\u002Fnative\u002FpdfViewer.ts`: create when requested and\nmissing, reuse unchanged only if compatible, or make only the approved scoped\nupdate. Preserve custom code, exports, and callers; do not overwrite from the example.\n\nThe wrapper MUST:\n\n- Accept `https:\u002F\u002F` URLs and `file:\u002F\u002F` URIs.\n- Reject `content:\u002F\u002F`, `blob:`, `http:\u002F\u002F`, empty, and malformed URLs before calling native code.\n- Return a discriminated union and never throw.\n- Return `NATIVE_MODULE_MISSING` when the extension is installed in JS but unavailable in the native build.\n- Surface viewer action results (`shared`, `printed`, `dismissed`) when available.\n- Return `VIEWER_FAILED` for native errors not covered by validation\u002Fmodule checks.\n\n```ts\n\u002F\u002F src\u002Fnative\u002FpdfViewer.ts\nimport { NativePdfViewer } from '@microsoft\u002Fpower-apps-native-pdf-viewer';\n\nexport type PdfViewerResult =\n  | { ok: true; action?: 'shared' | 'printed' | 'dismissed' }\n  | { ok: false; reason: 'INVALID_URL' | 'NATIVE_MODULE_MISSING' | 'VIEWER_FAILED'; message?: string };\n\nexport async function openHttpsPdf(\n  url: string,\n  options?: { title?: string; maxFileSizeMb?: number; cacheEnabled?: boolean },\n): Promise\u003CPdfViewerResult> {\n  let parsed: URL;\n  try {\n    parsed = new URL(url);\n  } catch {\n    return { ok: false, reason: 'INVALID_URL', message: 'PDF location must be a valid https:\u002F\u002F URL or file:\u002F\u002F URI.' };\n  }\n\n  const isHttpsUrl = parsed.protocol === 'https:';\n  const isFileUri = parsed.protocol === 'file:' && url.startsWith('file:\u002F\u002F') && parsed.pathname !== '\u002F';\n  if (!isHttpsUrl && !isFileUri) {\n    return { ok: false, reason: 'INVALID_URL', message: 'Native PDF viewer supports https:\u002F\u002F and file:\u002F\u002F inputs only.' };\n  }\n\n  if (!NativePdfViewer?.openPdf) {\n    return { ok: false, reason: 'NATIVE_MODULE_MISSING', message: 'Native PDF viewer module is not available in this build.' };\n  }\n\n  try {\n    const response = await NativePdfViewer.openPdf(url, {\n      maxFileSizeMb: 50,\n      cacheEnabled: true,\n      ...options,\n    });\n\n    if (response.status === 'ok') {\n      return { ok: true, action: response.result?.action };\n    }\n\n    return { ok: false, reason: 'VIEWER_FAILED', message: response.message ?? response.error };\n  } catch (error: any) {\n    return { ok: false, reason: 'VIEWER_FAILED', message: error?.message ?? String(error) };\n  }\n}\n```\n\n### 4. Use the wrapper\n\nIntegration guidance for the owner; do not edit screens in this helper.\n\nScreens import the wrapper, not the native package directly:\n\n```ts\nimport { openHttpsPdf } from '@\u002Fnative\u002FpdfViewer';\n\nconst response = await openHttpsPdf('https:\u002F\u002Fexample.com\u002Freport.pdf', {\n  title: \"Inspection report\",\n});\n\nif (response.ok) {\n  switch (response.action) {\n    case \"shared\":\n      \u002F\u002F User completed native Share.\n      break;\n    case \"printed\":\n      \u002F\u002F User completed native Print.\n      break;\n    case \"dismissed\":\n      \u002F\u002F User closed the viewer.\n      break;\n  }\n} else {\n  console.warn(\"Failed to open PDF:\", response.reason, response.message);\n}\n```\n\nNotes:\n- URLs must use `https:\u002F\u002F` or a non-empty `file:\u002F\u002F` URI. `content:\u002F\u002F`, `blob:`, and `http:\u002F\u002F` are not supported by this skill.\n- Use `@microsoft\u002Fpower-apps-native-pdf-viewer` only for this native PDF viewing use case.\n- Use `expo-document-picker` for picking\u002Fimporting\u002Fuploading a local PDF or document.\n- Use `\u002Fadd-native pdf-report` for generated local PDFs. That helper requires `expo-print` and adds sharing behavior only when `expo-sharing` is already present.\n- Generated local PDFs from `expo-print` may be opened by native PDF viewer 0.2.9+ as `file:\u002F\u002F` URIs.\n- Share and Print are built into the native viewer; there are no separate JS share\u002Fprint calls.\n- The wrapper returns `{ ok: true } | { ok: false }`; handle every non-ok reason in UI.\n\n### 5. Type-check\n\n```bash\ncd -- '\u003Cworking_dir>' || { echo \"BLOCKED: cannot enter working_dir\" >&2; exit 1; }\nnpx --no-install tsc --noEmit\n```\n\nFix only in-scope helper errors, then execute the shared compatibility contract's\nStep 4. Recheck requested inputs\u002Foptions\u002Factions, invalid URI rejection, missing\nnative module, and viewer failures. Type-check success alone is insufficient;\ndo not fix screen\u002Fgenerated files.\n\n### 6. Native rebuild note\n\nThis skill does not install native code. If the package was just added outside the skill, the app needs a native rebuild outside this workflow. If the package was already in the build, Metro hot reload is enough for wrapper edits.\n\n### 7. Do not use HostingSDK \u002F PCF\n\nDo not import or register:\n\n```ts\nimport NativePdfViewerExtension from \"@microsoft\u002Fpower-apps-native-pdf-viewer\";\n```\n\nDo not wire Companion PCF or `NativePdfViewerExtension`. In Power Apps native code apps, use the native React Native API above.\n\n### 8. Summary\n\nReturn the shared compatibility result and actual created\u002Fupdated\u002Freused paths\nbefore this summary. Update memory-bank only after success, and leave final\nupdates to the owner when orchestrated.\n\nTell the user:\n\n```text\nPDF viewer added\nPackage present   : @microsoft\u002Fpower-apps-native-pdf-viewer\nWrapper           : src\u002Fnative\u002FpdfViewer.ts\nURL support       : HTTPS and file:\u002F\u002F (0.2.9+)\nType-check        : PASS\nNative rebuild    : not performed by this skill\nUsage             : openHttpsPdf(...)\nHostingSDK \u002F PCF  : not used\n```\n\nUpdate `memory-bank.md` under `Controls`:\n\n```text\n- PDF viewer added — @microsoft\u002Fpower-apps-native-pdf-viewer (\u003CISO date>)\n```\n",{"name":5,"model":31,"description":7,"allowed-tools":48,"user-invocable":44,"disable-model-invocation":49},"Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion",true,"main","0a55a88fa2855404029d1e5450faf92878baf763","plugins\u002Fmobile-apps\u002Fskills\u002Fadd-native\u002Fadd-pdf-viewer",232,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","https:\u002F\u002Fmicrosoft.github.io\u002Fpower-platform-skills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-14 21:46:39",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":49},[62,65,68],{"tool":63,"command":64},"npx","npx skills add microsoft\u002Fpower-platform-skills --skill add-pdf-viewer",{"tool":66,"command":67},"bunx","bunx skills add microsoft\u002Fpower-platform-skills --skill add-pdf-viewer",{"tool":69,"command":70},"pnpm","pnpm dlx skills add microsoft\u002Fpower-platform-skills --skill add-pdf-viewer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fmobile-apps\u002Fskills\u002Fadd-native\u002Fadd-pdf-viewer\u002FSKILL.md",[73,79,85,91],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"examples\u002Fcalendar-client.ts","SCRIPT","脚本",2431,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fcalendar-automation\u002Fexamples\u002Fcalendar-client.ts",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"examples\u002Flist-events.jxa","OTHER","其他",730,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fcalendar-automation\u002Fexamples\u002Flist-events.jxa",{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fcalendar-scripting-dictionary.md","REFERENCE","参考文档",1294,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fcalendar-automation\u002Freferences\u002Fcalendar-scripting-dictionary.md",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":83,"sourceHtmlUrl":93},"references\u002Feventkit-limitations.md","https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fcalendar-automation\u002Freferences\u002Feventkit-limitations.md",[95,115,137,155,169,179],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":43},"01M699WVHX0XN59EPBTTPEKYPG","setup","Use when Process Intelligence needs building, explicit cloud\u002Faccount\u002Fenvironment configuration, sign-in, connection diagnostics, or recovery from an authentication error.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fsetup\u002FSKILL.md",[],[97,39,102,103,104,105,106,107,108,109,110,111,112,113,114,40],"when","connection","error","sign","intelligence","configuration","use","process","diagnostics","environment","authentication","cloud","recovery",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":43},"01M699WSR9EX55YY1WD9J22FEG","report-issue","Use when the user wants a Process Intelligence bug-report draft or support summary for a failed operation.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Freport-issue\u002FSKILL.md",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[127,128,129,130,131,109,108,132,133,106,134,135,29,102,136],"report issue","report","issue","support","user","bug","summary","draft","operation","bug-report",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":43},"01M699WR26YQ9Q21KE6MJF5B2G","investigate-process","Use when a broad Process Mining business question, observed pattern or competing explanation needs investigation across analytical perspectives.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Finvestigate-process\u002FSKILL.md",[],[109,144,145,146,102,147,148,149,150,39,151,108,152,153,154],"investigate","investigate process","mining","process mining","investigation","perspectives","question","business","pattern","across","analytical",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":43},"01M699WP9SDG5ZR12P8VYNXKTN","derive-metric","Use when a requested measure is missing, a saved custom metric needs reuse, or an ephemeral formula or derived scalar is needed.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fderive-metric\u002FSKILL.md",[],[162,163,39,108,164,165,166,167,168,102],"metric","derive metric","formula","missing","reuse","saved","custom",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":43},"01M699WMG5R8P6SMTDAS1TKF9E","compare-cohorts","Use when comparing process cohorts, departments, periods or before-and-after results under matched definitions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fcompare-cohorts\u002FSKILL.md",[],[176,177,102,108,109,178,39],"compare","compare cohorts","results",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":43},"01M699WJWNVTMP9XK3NCJHV14D","analyze-variants","Use when investigating common or slow variants, repeated work, unusual paths, or a specific Process Mining case.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fanalyze-variants\u002FSKILL.md",[],[186,187,188,147,102,146,189,190,108,109,39,191,192],"analyze","variants","analyze variants","case","paths","work","common"]