[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-assessment":3,"mdc--qcj5z0-key":35,"related-repo-microsoft-assessment":1621,"related-org-microsoft-assessment":1716},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":30,"sourceUrl":33,"mdContent":34},"assessment","assess application repositories for modernization","Run application assessment for a single repository",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Modernization","modernization","tag",{"name":17,"slug":18,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Code Analysis","code-analysis",34,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization","2026-07-07T06:52:46.921075",null,8,[29,14],"copilot",{"repoUrl":24,"stars":23,"forks":27,"topics":31,"description":32},[29,14],"GitHub Copilot modernization agent","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization\u002Ftree\u002FHEAD\u002Fplugins\u002Fgithub-copilot-modernization\u002Fskills\u002Fassessment","---\nname: assessment\ndescription: Run application assessment for a single repository\n---\n\n# Application Assessment\n\nThis skill performs application assessment for a single repository. It supports Java, .NET, and JavaScript\u002FTypeScript projects.\n\n## Input Parameters\n\n- `workspace-path` (optional): Path to the project to assess. Defaults to the current directory (repository root) when not specified. All assessment outputs are written relative to this path (e.g. `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`). For a repository with multiple sub-projects, pass the sub-project directory path so that each sub-project's outputs are isolated.\n\n## When to Use This Skill\n\nUse this skill when you need to:\n\n- Assess a Java or .NET application for cloud readiness and migration issues\n- Assess a JavaScript\u002FTypeScript project for outdated dependencies and available updates\n- Generate detailed assessment reports with issue analysis and recommendations\n- Understand application dependencies, frameworks, and potential migration blockers\n\n## What This Skill Does\n\nThis skill performs a simplified assessment workflow:\n\n1. **Check Project Type and Prerequisites**:\n   - **For Java projects**: Check MCP tool availability in this order:\n     1. **Primary**: Check if 'appmod-run-assessment-action' MCP tool is available\n        - If available, use ONLY this tool. It handles everything (prerequisite checks, installation, and assessment execution) in a single call.\n        - Do NOT call any other assessment MCP tools when this tool is available.\n     2. **Fallback**: If 'appmod-run-assessment-action' is NOT available, check if 'appmod-precheck-assessment' MCP tool is available\n        - If available, use the legacy workflow: call 'appmod-precheck-assessment' first, then follow its guidance for 'appmod-install-appcat' and 'appmod-run-assessment'.\n     3. If neither tool is configured, return immediately with setup instructions.\n   - **For .NET projects**: Check if .NET SDK is available\n     - No MCP tools required for .NET assessment\n   - **For JavaScript\u002FTypeScript projects**: Check if Node.js and npm are available\n     - No MCP tools required for JS\u002FTS assessment\n\n2. **Run Assessment**:\n   - **For Java projects**: Trigger AppCAT analysis via Assessment MCP server\n     - **If 'appmod-run-assessment-action' is available (primary path)**:\n       - Call 'appmod-run-assessment-action' MCP tool only\n       - The MCP tool automatically saves the report to the versioned directory\n     - **If falling back to 'appmod-precheck-assessment' (legacy path)**:\n       - Call 'appmod-precheck-assessment' to check prerequisites\n       - Call 'appmod-install-appcat' to install AppCAT if needed\n       - Call 'appmod-run-assessment' to run the assessment\n   - **For .NET projects**: Install and run AppCAT directly\n     - Install: `dotnet tool update dotnet-appcat`\n     - Find all .csproj files under `{workspace-path}`\n     - Join project paths with semicolons: `projectPaths=\"project1.csproj;project2.csproj\"`\n     - Run: `appcat analyze $projectPaths --source Solution --target Any --serializer APPMODJSON --code --privacyMode Restricted --non-interactive --report {workspace-path}\\.github\\modernize\\appcat\\result\\report.json`\n   - **For JavaScript\u002FTypeScript projects**: Install and run npm-check-updates\n     - Install: `npm install -g npm-check-updates@19.6.3 --prefix {tool-install-dir}`\n     - Run: `ncu --format group --packageFile {workspace-path}\u002Fpackage.json`\n     - Generate the `reportId` as a UTC timestamp formatted as `yyyyMMddHHmmss` (e.g. `2024-06-15T14:30:52Z` becomes `20240615143052`)\n     - Create the versioned directory: `mkdir -p {workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}`\n     - Save the output to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n     - Do NOT save a copy to the top-level assessment directory\n   - Analyzes code for cloud migration issues or dependency updates\n   - Generates structured assessment data\n\n3. **Save Report to Versioned Directory (All languages)**:\n   - **For Java projects (primary path — 'appmod-run-assessment-action')**: The MCP tool automatically saves the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json` — no manual saving needed\n   - **For Java projects (legacy fallback path — 'appmod-precheck-assessment')**:\n     1. Find `report.json` under `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F`\n     2. Read the report and extract `metadata.analysisStartTime`\n     3. Format the timestamp as `yyyyMMddHHmmss` to produce the `reportId` (e.g. `2024-06-15T14:30:52Z` becomes `20240615143052`)\n     4. Create the versioned directory: `mkdir -p {workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}`\n     5. Move the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n   - **For .NET projects**:\n     1. Find `report.json` at `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json`\n     2. Read the report and extract `metadata.analysisStartTime`\n     3. Format the timestamp as `yyyyMMddHHmmss` to produce the `reportId` (e.g. `2024-06-15T14:30:52Z` becomes `20240615143052`)\n     4. Create the versioned directory: `mkdir -p {workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}`\n     5. Move the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n   - This versioned report should be included in the pull request\n\n## How to Use\n\n### Prerequisites\n\n**For Java projects**:\n- **Primary**: MCP tool 'appmod-run-assessment-action' — preferred, handles everything in one call\n- **Fallback**: If primary tool is not available, use 'appmod-precheck-assessment' → 'appmod-install-appcat' → 'appmod-run-assessment' workflow\n- If neither tool is configured, the skill will return instructions for setup\n\n**For .NET projects**:\n- .NET SDK must be installed\n- No MCP tools required - appcat will be installed and run directly via .NET CLI\n- The assessment will automatically install `dotnet-appcat` tool if not already present\n\n**For JavaScript\u002FTypeScript projects**:\n- Node.js and npm must be installed\n- No MCP tools required - npm-check-updates will be installed and run directly via npm\n- The assessment will automatically install `npm-check-updates` if not already present\n\n### Triggering Assessment\n\nSimply express the intent to assess the application. Example prompts:\n\n- \"Assess the application\"\n- \"Run assessment for this project\"\n\nThe assessment process automatically:\n- Detects project language and framework within `{workspace-path}`\n- **For Java**: Uses MCP tool to run AppCAT and automatically save report to versioned directory\n- **For .NET**: Installs dotnet-appcat tool and runs analysis directly\n- **For JavaScript\u002FTypeScript**: Installs npm-check-updates and runs dependency analysis\n- Executes comprehensive analysis\n- **For Java (primary)**: Report is automatically saved to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n- **For Java (legacy fallback)**: Generates report at `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F`, then moved to versioned directory\n- **For .NET**: Generates report at `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json`\n- **For JavaScript\u002FTypeScript**: Generates report at `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n\n### Report Saving\n\n**For Java projects**:\n1. **If using 'appmod-run-assessment-action' (primary path)**: The MCP tool automatically saves the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json` — no manual report moving is needed\n2. **If using legacy fallback path ('appmod-precheck-assessment')**:\n   - Find `report.json` under `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F`\n   - Read the report and extract `metadata.analysisStartTime`, format as `yyyyMMddHHmmss` to get `reportId`\n   - Move the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n3. Include this versioned report in the pull request\n\n**For .NET projects**:\n1. Report is initially generated at `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json`\n2. Read the report and extract `metadata.analysisStartTime`, format as `yyyyMMddHHmmss` to get `reportId`\n3. Move the report to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n4. Include this versioned report in the pull request\n\n**For JavaScript\u002FTypeScript projects**:\n1. Generate the `reportId` as a UTC timestamp formatted as `yyyyMMddHHmmss` (e.g. `2024-06-15T14:30:52Z` becomes `20240615143052`)\n2. Create the versioned directory: `mkdir -p {workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}`\n3. Save the ncu output to `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n4. Include this versioned report in the pull request\n\n## Report Output Location\n\nReport location depends on project type:\n\n**For Java projects** (via MCP server):\n- **Primary path ('appmod-run-assessment-action')**: Automatically saved to: `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n- **Legacy fallback path ('appmod-precheck-assessment')**: Initially stored under `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F`, then moved to versioned directory: `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n\n**For .NET projects** (direct execution):\n- Initially generated at: `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json`\n- Moved to versioned directory: `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n\n**For JavaScript\u002FTypeScript projects** (direct execution):\n- Saved to versioned directory: `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n\n## Success Criteria\n\nAssessment is complete when:\n- ✅ **For Java**: MCP server is available (or clear instructions provided if not)\n- ✅ **For .NET**: .NET SDK is available and dotnet-appcat tool is installed\n- ✅ **For JavaScript\u002FTypeScript**: Node.js and npm are available and npm-check-updates is installed\n- ✅ AppCAT analysis executes without errors (Java\u002F.NET) or ncu analysis executes without errors (JS\u002FTS)\n- ✅ **For Java and .NET**: Report generated at `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json`\n- ✅ **For JavaScript\u002FTypeScript**: Report generated at `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n- ✅ Report metadata includes assessment tool version, timestamp, and configuration\n\n## Troubleshooting\n\n**Prerequisites Not Met**:\n- **For Java**: First check for 'appmod-run-assessment-action', then fall back to 'appmod-precheck-assessment'\n  - Return immediately with setup instructions if neither tool is available\n  - Do not attempt to run assessment without MCP\n- **For .NET**: Verify .NET SDK is installed\n  - Check with `dotnet --version` command\n  - Provide installation instructions if .NET SDK is missing\n- **For JavaScript\u002FTypeScript**: Verify Node.js and npm are installed\n  - Check with `npm --version` command\n  - Provide installation instructions if npm is missing\n\n**Assessment Failures**:\n- Unsupported project type (only Java, .NET, and JavaScript\u002FTypeScript supported)\n- **For Java**: MCP server communication errors\n- **For .NET**:\n  - dotnet-appcat tool installation failure\n  - appcat command execution errors\n- **For JavaScript\u002FTypeScript**:\n  - npm-check-updates installation failure\n  - ncu command execution errors\n  - No package.json found at `{workspace-path}\u002Fpackage.json`\n- Invalid project structure or build configuration\n\n**Report Generation Issues**:\n- **For Java (primary)**: No report.json found under `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-*\u002Freport.json` after MCP execution\n- **For Java (legacy fallback)**: No report.json found under `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F` after MCP execution\n- **For .NET**: Report not generated at `{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json`, or `metadata.analysisStartTime` missing from report\n- **For JavaScript\u002FTypeScript**: Report not generated at `{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md`\n- Report file is corrupted or invalid JSON (Java\u002F.NET only)\n\nFor any failure, provide clear error messages and troubleshooting steps.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,55,62,87,93,98,121,127,132,689,695,702,710,736,744,770,778,803,809,814,827,832,938,944,952,1035,1043,1090,1098,1152,1158,1163,1172,1212,1221,1244,1252,1265,1271,1276,1350,1356,1365,1448,1457,1532,1541,1616],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"application-assessment",[46],{"type":47,"value":48},"text","Application Assessment",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"This skill performs application assessment for a single repository. It supports Java, .NET, and JavaScript\u002FTypeScript projects.",{"type":41,"tag":56,"props":57,"children":59},"h2",{"id":58},"input-parameters",[60],{"type":47,"value":61},"Input Parameters",{"type":41,"tag":63,"props":64,"children":65},"ul",{},[66],{"type":41,"tag":67,"props":68,"children":69},"li",{},[70,77,79,85],{"type":41,"tag":71,"props":72,"children":74},"code",{"className":73},[],[75],{"type":47,"value":76},"workspace-path",{"type":47,"value":78}," (optional): Path to the project to assess. Defaults to the current directory (repository root) when not specified. All assessment outputs are written relative to this path (e.g. ",{"type":41,"tag":71,"props":80,"children":82},{"className":81},[],[83],{"type":47,"value":84},"{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Freport.json",{"type":47,"value":86},"). For a repository with multiple sub-projects, pass the sub-project directory path so that each sub-project's outputs are isolated.",{"type":41,"tag":56,"props":88,"children":90},{"id":89},"when-to-use-this-skill",[91],{"type":47,"value":92},"When to Use This Skill",{"type":41,"tag":50,"props":94,"children":95},{},[96],{"type":47,"value":97},"Use this skill when you need to:",{"type":41,"tag":63,"props":99,"children":100},{},[101,106,111,116],{"type":41,"tag":67,"props":102,"children":103},{},[104],{"type":47,"value":105},"Assess a Java or .NET application for cloud readiness and migration issues",{"type":41,"tag":67,"props":107,"children":108},{},[109],{"type":47,"value":110},"Assess a JavaScript\u002FTypeScript project for outdated dependencies and available updates",{"type":41,"tag":67,"props":112,"children":113},{},[114],{"type":47,"value":115},"Generate detailed assessment reports with issue analysis and recommendations",{"type":41,"tag":67,"props":117,"children":118},{},[119],{"type":47,"value":120},"Understand application dependencies, frameworks, and potential migration blockers",{"type":41,"tag":56,"props":122,"children":124},{"id":123},"what-this-skill-does",[125],{"type":47,"value":126},"What This Skill Does",{"type":41,"tag":50,"props":128,"children":129},{},[130],{"type":47,"value":131},"This skill performs a simplified assessment workflow:",{"type":41,"tag":133,"props":134,"children":135},"ol",{},[136,245,481],{"type":41,"tag":67,"props":137,"children":138},{},[139,145,147],{"type":41,"tag":140,"props":141,"children":142},"strong",{},[143],{"type":47,"value":144},"Check Project Type and Prerequisites",{"type":47,"value":146},":",{"type":41,"tag":63,"props":148,"children":149},{},[150,209,227],{"type":41,"tag":67,"props":151,"children":152},{},[153,158,160],{"type":41,"tag":140,"props":154,"children":155},{},[156],{"type":47,"value":157},"For Java projects",{"type":47,"value":159},": Check MCP tool availability in this order:\n",{"type":41,"tag":133,"props":161,"children":162},{},[163,186,204],{"type":41,"tag":67,"props":164,"children":165},{},[166,171,173],{"type":41,"tag":140,"props":167,"children":168},{},[169],{"type":47,"value":170},"Primary",{"type":47,"value":172},": Check if 'appmod-run-assessment-action' MCP tool is available\n",{"type":41,"tag":63,"props":174,"children":175},{},[176,181],{"type":41,"tag":67,"props":177,"children":178},{},[179],{"type":47,"value":180},"If available, use ONLY this tool. It handles everything (prerequisite checks, installation, and assessment execution) in a single call.",{"type":41,"tag":67,"props":182,"children":183},{},[184],{"type":47,"value":185},"Do NOT call any other assessment MCP tools when this tool is available.",{"type":41,"tag":67,"props":187,"children":188},{},[189,194,196],{"type":41,"tag":140,"props":190,"children":191},{},[192],{"type":47,"value":193},"Fallback",{"type":47,"value":195},": If 'appmod-run-assessment-action' is NOT available, check if 'appmod-precheck-assessment' MCP tool is available\n",{"type":41,"tag":63,"props":197,"children":198},{},[199],{"type":41,"tag":67,"props":200,"children":201},{},[202],{"type":47,"value":203},"If available, use the legacy workflow: call 'appmod-precheck-assessment' first, then follow its guidance for 'appmod-install-appcat' and 'appmod-run-assessment'.",{"type":41,"tag":67,"props":205,"children":206},{},[207],{"type":47,"value":208},"If neither tool is configured, return immediately with setup instructions.",{"type":41,"tag":67,"props":210,"children":211},{},[212,217,219],{"type":41,"tag":140,"props":213,"children":214},{},[215],{"type":47,"value":216},"For .NET projects",{"type":47,"value":218},": Check if .NET SDK is available\n",{"type":41,"tag":63,"props":220,"children":221},{},[222],{"type":41,"tag":67,"props":223,"children":224},{},[225],{"type":47,"value":226},"No MCP tools required for .NET assessment",{"type":41,"tag":67,"props":228,"children":229},{},[230,235,237],{"type":41,"tag":140,"props":231,"children":232},{},[233],{"type":47,"value":234},"For JavaScript\u002FTypeScript projects",{"type":47,"value":236},": Check if Node.js and npm are available\n",{"type":41,"tag":63,"props":238,"children":239},{},[240],{"type":41,"tag":67,"props":241,"children":242},{},[243],{"type":47,"value":244},"No MCP tools required for JS\u002FTS assessment",{"type":41,"tag":67,"props":246,"children":247},{},[248,253,254],{"type":41,"tag":140,"props":249,"children":250},{},[251],{"type":47,"value":252},"Run Assessment",{"type":47,"value":146},{"type":41,"tag":63,"props":255,"children":256},{},[257,319,375,471,476],{"type":41,"tag":67,"props":258,"children":259},{},[260,264,266],{"type":41,"tag":140,"props":261,"children":262},{},[263],{"type":47,"value":157},{"type":47,"value":265},": Trigger AppCAT analysis via Assessment MCP server\n",{"type":41,"tag":63,"props":267,"children":268},{},[269,292],{"type":41,"tag":67,"props":270,"children":271},{},[272,277,279],{"type":41,"tag":140,"props":273,"children":274},{},[275],{"type":47,"value":276},"If 'appmod-run-assessment-action' is available (primary path)",{"type":47,"value":278},":\n",{"type":41,"tag":63,"props":280,"children":281},{},[282,287],{"type":41,"tag":67,"props":283,"children":284},{},[285],{"type":47,"value":286},"Call 'appmod-run-assessment-action' MCP tool only",{"type":41,"tag":67,"props":288,"children":289},{},[290],{"type":47,"value":291},"The MCP tool automatically saves the report to the versioned directory",{"type":41,"tag":67,"props":293,"children":294},{},[295,300,301],{"type":41,"tag":140,"props":296,"children":297},{},[298],{"type":47,"value":299},"If falling back to 'appmod-precheck-assessment' (legacy path)",{"type":47,"value":278},{"type":41,"tag":63,"props":302,"children":303},{},[304,309,314],{"type":41,"tag":67,"props":305,"children":306},{},[307],{"type":47,"value":308},"Call 'appmod-precheck-assessment' to check prerequisites",{"type":41,"tag":67,"props":310,"children":311},{},[312],{"type":47,"value":313},"Call 'appmod-install-appcat' to install AppCAT if needed",{"type":41,"tag":67,"props":315,"children":316},{},[317],{"type":47,"value":318},"Call 'appmod-run-assessment' to run the assessment",{"type":41,"tag":67,"props":320,"children":321},{},[322,326,328],{"type":41,"tag":140,"props":323,"children":324},{},[325],{"type":47,"value":216},{"type":47,"value":327},": Install and run AppCAT directly\n",{"type":41,"tag":63,"props":329,"children":330},{},[331,342,353,364],{"type":41,"tag":67,"props":332,"children":333},{},[334,336],{"type":47,"value":335},"Install: ",{"type":41,"tag":71,"props":337,"children":339},{"className":338},[],[340],{"type":47,"value":341},"dotnet tool update dotnet-appcat",{"type":41,"tag":67,"props":343,"children":344},{},[345,347],{"type":47,"value":346},"Find all .csproj files under ",{"type":41,"tag":71,"props":348,"children":350},{"className":349},[],[351],{"type":47,"value":352},"{workspace-path}",{"type":41,"tag":67,"props":354,"children":355},{},[356,358],{"type":47,"value":357},"Join project paths with semicolons: ",{"type":41,"tag":71,"props":359,"children":361},{"className":360},[],[362],{"type":47,"value":363},"projectPaths=\"project1.csproj;project2.csproj\"",{"type":41,"tag":67,"props":365,"children":366},{},[367,369],{"type":47,"value":368},"Run: ",{"type":41,"tag":71,"props":370,"children":372},{"className":371},[],[373],{"type":47,"value":374},"appcat analyze $projectPaths --source Solution --target Any --serializer APPMODJSON --code --privacyMode Restricted --non-interactive --report {workspace-path}\\.github\\modernize\\appcat\\result\\report.json",{"type":41,"tag":67,"props":376,"children":377},{},[378,382,384],{"type":41,"tag":140,"props":379,"children":380},{},[381],{"type":47,"value":234},{"type":47,"value":383},": Install and run npm-check-updates\n",{"type":41,"tag":63,"props":385,"children":386},{},[387,397,407,444,455,466],{"type":41,"tag":67,"props":388,"children":389},{},[390,391],{"type":47,"value":335},{"type":41,"tag":71,"props":392,"children":394},{"className":393},[],[395],{"type":47,"value":396},"npm install -g npm-check-updates@19.6.3 --prefix {tool-install-dir}",{"type":41,"tag":67,"props":398,"children":399},{},[400,401],{"type":47,"value":368},{"type":41,"tag":71,"props":402,"children":404},{"className":403},[],[405],{"type":47,"value":406},"ncu --format group --packageFile {workspace-path}\u002Fpackage.json",{"type":41,"tag":67,"props":408,"children":409},{},[410,412,418,420,426,428,434,436,442],{"type":47,"value":411},"Generate the ",{"type":41,"tag":71,"props":413,"children":415},{"className":414},[],[416],{"type":47,"value":417},"reportId",{"type":47,"value":419}," as a UTC timestamp formatted as ",{"type":41,"tag":71,"props":421,"children":423},{"className":422},[],[424],{"type":47,"value":425},"yyyyMMddHHmmss",{"type":47,"value":427}," (e.g. ",{"type":41,"tag":71,"props":429,"children":431},{"className":430},[],[432],{"type":47,"value":433},"2024-06-15T14:30:52Z",{"type":47,"value":435}," becomes ",{"type":41,"tag":71,"props":437,"children":439},{"className":438},[],[440],{"type":47,"value":441},"20240615143052",{"type":47,"value":443},")",{"type":41,"tag":67,"props":445,"children":446},{},[447,449],{"type":47,"value":448},"Create the versioned directory: ",{"type":41,"tag":71,"props":450,"children":452},{"className":451},[],[453],{"type":47,"value":454},"mkdir -p {workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}",{"type":41,"tag":67,"props":456,"children":457},{},[458,460],{"type":47,"value":459},"Save the output to ",{"type":41,"tag":71,"props":461,"children":463},{"className":462},[],[464],{"type":47,"value":465},"{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-{reportId}\u002Fjs-assessment-report.md",{"type":41,"tag":67,"props":467,"children":468},{},[469],{"type":47,"value":470},"Do NOT save a copy to the top-level assessment directory",{"type":41,"tag":67,"props":472,"children":473},{},[474],{"type":47,"value":475},"Analyzes code for cloud migration issues or dependency updates",{"type":41,"tag":67,"props":477,"children":478},{},[479],{"type":47,"value":480},"Generates structured assessment data",{"type":41,"tag":67,"props":482,"children":483},{},[484,489,490],{"type":41,"tag":140,"props":485,"children":486},{},[487],{"type":47,"value":488},"Save Report to Versioned Directory (All languages)",{"type":47,"value":146},{"type":41,"tag":63,"props":491,"children":492},{},[493,510,601,684],{"type":41,"tag":67,"props":494,"children":495},{},[496,501,503,508],{"type":41,"tag":140,"props":497,"children":498},{},[499],{"type":47,"value":500},"For Java projects (primary path — 'appmod-run-assessment-action')",{"type":47,"value":502},": The MCP tool automatically saves the report to ",{"type":41,"tag":71,"props":504,"children":506},{"className":505},[],[507],{"type":47,"value":84},{"type":47,"value":509}," — no manual saving needed",{"type":41,"tag":67,"props":511,"children":512},{},[513,518,519],{"type":41,"tag":140,"props":514,"children":515},{},[516],{"type":47,"value":517},"For Java projects (legacy fallback path — 'appmod-precheck-assessment')",{"type":47,"value":278},{"type":41,"tag":133,"props":520,"children":521},{},[522,541,552,582,591],{"type":41,"tag":67,"props":523,"children":524},{},[525,527,533,535],{"type":47,"value":526},"Find ",{"type":41,"tag":71,"props":528,"children":530},{"className":529},[],[531],{"type":47,"value":532},"report.json",{"type":47,"value":534}," under ",{"type":41,"tag":71,"props":536,"children":538},{"className":537},[],[539],{"type":47,"value":540},"{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002F",{"type":41,"tag":67,"props":542,"children":543},{},[544,546],{"type":47,"value":545},"Read the report and extract ",{"type":41,"tag":71,"props":547,"children":549},{"className":548},[],[550],{"type":47,"value":551},"metadata.analysisStartTime",{"type":41,"tag":67,"props":553,"children":554},{},[555,557,562,564,569,570,575,576,581],{"type":47,"value":556},"Format the timestamp as ",{"type":41,"tag":71,"props":558,"children":560},{"className":559},[],[561],{"type":47,"value":425},{"type":47,"value":563}," to produce the ",{"type":41,"tag":71,"props":565,"children":567},{"className":566},[],[568],{"type":47,"value":417},{"type":47,"value":427},{"type":41,"tag":71,"props":571,"children":573},{"className":572},[],[574],{"type":47,"value":433},{"type":47,"value":435},{"type":41,"tag":71,"props":577,"children":579},{"className":578},[],[580],{"type":47,"value":441},{"type":47,"value":443},{"type":41,"tag":67,"props":583,"children":584},{},[585,586],{"type":47,"value":448},{"type":41,"tag":71,"props":587,"children":589},{"className":588},[],[590],{"type":47,"value":454},{"type":41,"tag":67,"props":592,"children":593},{},[594,596],{"type":47,"value":595},"Move the report to ",{"type":41,"tag":71,"props":597,"children":599},{"className":598},[],[600],{"type":47,"value":84},{"type":41,"tag":67,"props":602,"children":603},{},[604,608,609],{"type":41,"tag":140,"props":605,"children":606},{},[607],{"type":47,"value":216},{"type":47,"value":278},{"type":41,"tag":133,"props":610,"children":611},{},[612,629,638,666,675],{"type":41,"tag":67,"props":613,"children":614},{},[615,616,621,623],{"type":47,"value":526},{"type":41,"tag":71,"props":617,"children":619},{"className":618},[],[620],{"type":47,"value":532},{"type":47,"value":622}," at ",{"type":41,"tag":71,"props":624,"children":626},{"className":625},[],[627],{"type":47,"value":628},"{workspace-path}\u002F.github\u002Fmodernize\u002Fappcat\u002Fresult\u002Freport.json",{"type":41,"tag":67,"props":630,"children":631},{},[632,633],{"type":47,"value":545},{"type":41,"tag":71,"props":634,"children":636},{"className":635},[],[637],{"type":47,"value":551},{"type":41,"tag":67,"props":639,"children":640},{},[641,642,647,648,653,654,659,660,665],{"type":47,"value":556},{"type":41,"tag":71,"props":643,"children":645},{"className":644},[],[646],{"type":47,"value":425},{"type":47,"value":563},{"type":41,"tag":71,"props":649,"children":651},{"className":650},[],[652],{"type":47,"value":417},{"type":47,"value":427},{"type":41,"tag":71,"props":655,"children":657},{"className":656},[],[658],{"type":47,"value":433},{"type":47,"value":435},{"type":41,"tag":71,"props":661,"children":663},{"className":662},[],[664],{"type":47,"value":441},{"type":47,"value":443},{"type":41,"tag":67,"props":667,"children":668},{},[669,670],{"type":47,"value":448},{"type":41,"tag":71,"props":671,"children":673},{"className":672},[],[674],{"type":47,"value":454},{"type":41,"tag":67,"props":676,"children":677},{},[678,679],{"type":47,"value":595},{"type":41,"tag":71,"props":680,"children":682},{"className":681},[],[683],{"type":47,"value":84},{"type":41,"tag":67,"props":685,"children":686},{},[687],{"type":47,"value":688},"This versioned report should be included in the pull request",{"type":41,"tag":56,"props":690,"children":692},{"id":691},"how-to-use",[693],{"type":47,"value":694},"How to Use",{"type":41,"tag":696,"props":697,"children":699},"h3",{"id":698},"prerequisites",[700],{"type":47,"value":701},"Prerequisites",{"type":41,"tag":50,"props":703,"children":704},{},[705,709],{"type":41,"tag":140,"props":706,"children":707},{},[708],{"type":47,"value":157},{"type":47,"value":146},{"type":41,"tag":63,"props":711,"children":712},{},[713,722,731],{"type":41,"tag":67,"props":714,"children":715},{},[716,720],{"type":41,"tag":140,"props":717,"children":718},{},[719],{"type":47,"value":170},{"type":47,"value":721},": MCP tool 'appmod-run-assessment-action' — preferred, handles everything in one call",{"type":41,"tag":67,"props":723,"children":724},{},[725,729],{"type":41,"tag":140,"props":726,"children":727},{},[728],{"type":47,"value":193},{"type":47,"value":730},": If primary tool is not available, use 'appmod-precheck-assessment' → 'appmod-install-appcat' → 'appmod-run-assessment' workflow",{"type":41,"tag":67,"props":732,"children":733},{},[734],{"type":47,"value":735},"If neither tool is configured, the skill will return instructions for setup",{"type":41,"tag":50,"props":737,"children":738},{},[739,743],{"type":41,"tag":140,"props":740,"children":741},{},[742],{"type":47,"value":216},{"type":47,"value":146},{"type":41,"tag":63,"props":745,"children":746},{},[747,752,757],{"type":41,"tag":67,"props":748,"children":749},{},[750],{"type":47,"value":751},".NET SDK must be installed",{"type":41,"tag":67,"props":753,"children":754},{},[755],{"type":47,"value":756},"No MCP tools required - appcat will be installed and run directly via .NET CLI",{"type":41,"tag":67,"props":758,"children":759},{},[760,762,768],{"type":47,"value":761},"The assessment will automatically install ",{"type":41,"tag":71,"props":763,"children":765},{"className":764},[],[766],{"type":47,"value":767},"dotnet-appcat",{"type":47,"value":769}," tool if not already present",{"type":41,"tag":50,"props":771,"children":772},{},[773,777],{"type":41,"tag":140,"props":774,"children":775},{},[776],{"type":47,"value":234},{"type":47,"value":146},{"type":41,"tag":63,"props":779,"children":780},{},[781,786,791],{"type":41,"tag":67,"props":782,"children":783},{},[784],{"type":47,"value":785},"Node.js and npm must be installed",{"type":41,"tag":67,"props":787,"children":788},{},[789],{"type":47,"value":790},"No MCP tools required - npm-check-updates will be installed and run directly via npm",{"type":41,"tag":67,"props":792,"children":793},{},[794,795,801],{"type":47,"value":761},{"type":41,"tag":71,"props":796,"children":798},{"className":797},[],[799],{"type":47,"value":800},"npm-check-updates",{"type":47,"value":802}," if not already present",{"type":41,"tag":696,"props":804,"children":806},{"id":805},"triggering-assessment",[807],{"type":47,"value":808},"Triggering Assessment",{"type":41,"tag":50,"props":810,"children":811},{},[812],{"type":47,"value":813},"Simply express the intent to assess the application. Example prompts:",{"type":41,"tag":63,"props":815,"children":816},{},[817,822],{"type":41,"tag":67,"props":818,"children":819},{},[820],{"type":47,"value":821},"\"Assess the application\"",{"type":41,"tag":67,"props":823,"children":824},{},[825],{"type":47,"value":826},"\"Run assessment for this project\"",{"type":41,"tag":50,"props":828,"children":829},{},[830],{"type":47,"value":831},"The assessment process automatically:",{"type":41,"tag":63,"props":833,"children":834},{},[835,845,855,865,875,880,895,912,925],{"type":41,"tag":67,"props":836,"children":837},{},[838,840],{"type":47,"value":839},"Detects project language and framework within ",{"type":41,"tag":71,"props":841,"children":843},{"className":842},[],[844],{"type":47,"value":352},{"type":41,"tag":67,"props":846,"children":847},{},[848,853],{"type":41,"tag":140,"props":849,"children":850},{},[851],{"type":47,"value":852},"For Java",{"type":47,"value":854},": Uses MCP tool to run AppCAT and automatically save report to versioned directory",{"type":41,"tag":67,"props":856,"children":857},{},[858,863],{"type":41,"tag":140,"props":859,"children":860},{},[861],{"type":47,"value":862},"For .NET",{"type":47,"value":864},": Installs dotnet-appcat tool and runs analysis directly",{"type":41,"tag":67,"props":866,"children":867},{},[868,873],{"type":41,"tag":140,"props":869,"children":870},{},[871],{"type":47,"value":872},"For JavaScript\u002FTypeScript",{"type":47,"value":874},": Installs npm-check-updates and runs dependency analysis",{"type":41,"tag":67,"props":876,"children":877},{},[878],{"type":47,"value":879},"Executes comprehensive analysis",{"type":41,"tag":67,"props":881,"children":882},{},[883,888,890],{"type":41,"tag":140,"props":884,"children":885},{},[886],{"type":47,"value":887},"For Java (primary)",{"type":47,"value":889},": Report is automatically saved to ",{"type":41,"tag":71,"props":891,"children":893},{"className":892},[],[894],{"type":47,"value":84},{"type":41,"tag":67,"props":896,"children":897},{},[898,903,905,910],{"type":41,"tag":140,"props":899,"children":900},{},[901],{"type":47,"value":902},"For Java (legacy fallback)",{"type":47,"value":904},": Generates report at ",{"type":41,"tag":71,"props":906,"children":908},{"className":907},[],[909],{"type":47,"value":540},{"type":47,"value":911},", then moved to versioned directory",{"type":41,"tag":67,"props":913,"children":914},{},[915,919,920],{"type":41,"tag":140,"props":916,"children":917},{},[918],{"type":47,"value":862},{"type":47,"value":904},{"type":41,"tag":71,"props":921,"children":923},{"className":922},[],[924],{"type":47,"value":628},{"type":41,"tag":67,"props":926,"children":927},{},[928,932,933],{"type":41,"tag":140,"props":929,"children":930},{},[931],{"type":47,"value":872},{"type":47,"value":904},{"type":41,"tag":71,"props":934,"children":936},{"className":935},[],[937],{"type":47,"value":465},{"type":41,"tag":696,"props":939,"children":941},{"id":940},"report-saving",[942],{"type":47,"value":943},"Report Saving",{"type":41,"tag":50,"props":945,"children":946},{},[947,951],{"type":41,"tag":140,"props":948,"children":949},{},[950],{"type":47,"value":157},{"type":47,"value":146},{"type":41,"tag":133,"props":953,"children":954},{},[955,971,1030],{"type":41,"tag":67,"props":956,"children":957},{},[958,963,964,969],{"type":41,"tag":140,"props":959,"children":960},{},[961],{"type":47,"value":962},"If using 'appmod-run-assessment-action' (primary path)",{"type":47,"value":502},{"type":41,"tag":71,"props":965,"children":967},{"className":966},[],[968],{"type":47,"value":84},{"type":47,"value":970}," — no manual report moving is needed",{"type":41,"tag":67,"props":972,"children":973},{},[974,979,980],{"type":41,"tag":140,"props":975,"children":976},{},[977],{"type":47,"value":978},"If using legacy fallback path ('appmod-precheck-assessment')",{"type":47,"value":278},{"type":41,"tag":63,"props":981,"children":982},{},[983,998,1021],{"type":41,"tag":67,"props":984,"children":985},{},[986,987,992,993],{"type":47,"value":526},{"type":41,"tag":71,"props":988,"children":990},{"className":989},[],[991],{"type":47,"value":532},{"type":47,"value":534},{"type":41,"tag":71,"props":994,"children":996},{"className":995},[],[997],{"type":47,"value":540},{"type":41,"tag":67,"props":999,"children":1000},{},[1001,1002,1007,1009,1014,1016],{"type":47,"value":545},{"type":41,"tag":71,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":47,"value":551},{"type":47,"value":1008},", format as ",{"type":41,"tag":71,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":47,"value":425},{"type":47,"value":1015}," to get ",{"type":41,"tag":71,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":47,"value":417},{"type":41,"tag":67,"props":1022,"children":1023},{},[1024,1025],{"type":47,"value":595},{"type":41,"tag":71,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":47,"value":84},{"type":41,"tag":67,"props":1031,"children":1032},{},[1033],{"type":47,"value":1034},"Include this versioned report in the pull request",{"type":41,"tag":50,"props":1036,"children":1037},{},[1038,1042],{"type":41,"tag":140,"props":1039,"children":1040},{},[1041],{"type":47,"value":216},{"type":47,"value":146},{"type":41,"tag":133,"props":1044,"children":1045},{},[1046,1056,1077,1086],{"type":41,"tag":67,"props":1047,"children":1048},{},[1049,1051],{"type":47,"value":1050},"Report is initially generated at ",{"type":41,"tag":71,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":47,"value":628},{"type":41,"tag":67,"props":1057,"children":1058},{},[1059,1060,1065,1066,1071,1072],{"type":47,"value":545},{"type":41,"tag":71,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":47,"value":551},{"type":47,"value":1008},{"type":41,"tag":71,"props":1067,"children":1069},{"className":1068},[],[1070],{"type":47,"value":425},{"type":47,"value":1015},{"type":41,"tag":71,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":47,"value":417},{"type":41,"tag":67,"props":1078,"children":1079},{},[1080,1081],{"type":47,"value":595},{"type":41,"tag":71,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":47,"value":84},{"type":41,"tag":67,"props":1087,"children":1088},{},[1089],{"type":47,"value":1034},{"type":41,"tag":50,"props":1091,"children":1092},{},[1093,1097],{"type":41,"tag":140,"props":1094,"children":1095},{},[1096],{"type":47,"value":234},{"type":47,"value":146},{"type":41,"tag":133,"props":1099,"children":1100},{},[1101,1129,1138,1148],{"type":41,"tag":67,"props":1102,"children":1103},{},[1104,1105,1110,1111,1116,1117,1122,1123,1128],{"type":47,"value":411},{"type":41,"tag":71,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":47,"value":417},{"type":47,"value":419},{"type":41,"tag":71,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":47,"value":425},{"type":47,"value":427},{"type":41,"tag":71,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":47,"value":433},{"type":47,"value":435},{"type":41,"tag":71,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":47,"value":441},{"type":47,"value":443},{"type":41,"tag":67,"props":1130,"children":1131},{},[1132,1133],{"type":47,"value":448},{"type":41,"tag":71,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":47,"value":454},{"type":41,"tag":67,"props":1139,"children":1140},{},[1141,1143],{"type":47,"value":1142},"Save the ncu output to ",{"type":41,"tag":71,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":47,"value":465},{"type":41,"tag":67,"props":1149,"children":1150},{},[1151],{"type":47,"value":1034},{"type":41,"tag":56,"props":1153,"children":1155},{"id":1154},"report-output-location",[1156],{"type":47,"value":1157},"Report Output Location",{"type":41,"tag":50,"props":1159,"children":1160},{},[1161],{"type":47,"value":1162},"Report location depends on project type:",{"type":41,"tag":50,"props":1164,"children":1165},{},[1166,1170],{"type":41,"tag":140,"props":1167,"children":1168},{},[1169],{"type":47,"value":157},{"type":47,"value":1171}," (via MCP server):",{"type":41,"tag":63,"props":1173,"children":1174},{},[1175,1190],{"type":41,"tag":67,"props":1176,"children":1177},{},[1178,1183,1185],{"type":41,"tag":140,"props":1179,"children":1180},{},[1181],{"type":47,"value":1182},"Primary path ('appmod-run-assessment-action')",{"type":47,"value":1184},": Automatically saved to: ",{"type":41,"tag":71,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":47,"value":84},{"type":41,"tag":67,"props":1191,"children":1192},{},[1193,1198,1200,1205,1207],{"type":41,"tag":140,"props":1194,"children":1195},{},[1196],{"type":47,"value":1197},"Legacy fallback path ('appmod-precheck-assessment')",{"type":47,"value":1199},": Initially stored under ",{"type":41,"tag":71,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":47,"value":540},{"type":47,"value":1206},", then moved to versioned directory: ",{"type":41,"tag":71,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":47,"value":84},{"type":41,"tag":50,"props":1213,"children":1214},{},[1215,1219],{"type":41,"tag":140,"props":1216,"children":1217},{},[1218],{"type":47,"value":216},{"type":47,"value":1220}," (direct execution):",{"type":41,"tag":63,"props":1222,"children":1223},{},[1224,1234],{"type":41,"tag":67,"props":1225,"children":1226},{},[1227,1229],{"type":47,"value":1228},"Initially generated at: ",{"type":41,"tag":71,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":47,"value":628},{"type":41,"tag":67,"props":1235,"children":1236},{},[1237,1239],{"type":47,"value":1238},"Moved to versioned directory: ",{"type":41,"tag":71,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":47,"value":84},{"type":41,"tag":50,"props":1245,"children":1246},{},[1247,1251],{"type":41,"tag":140,"props":1248,"children":1249},{},[1250],{"type":47,"value":234},{"type":47,"value":1220},{"type":41,"tag":63,"props":1253,"children":1254},{},[1255],{"type":41,"tag":67,"props":1256,"children":1257},{},[1258,1260],{"type":47,"value":1259},"Saved to versioned directory: ",{"type":41,"tag":71,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":47,"value":465},{"type":41,"tag":56,"props":1266,"children":1268},{"id":1267},"success-criteria",[1269],{"type":47,"value":1270},"Success Criteria",{"type":41,"tag":50,"props":1272,"children":1273},{},[1274],{"type":47,"value":1275},"Assessment is complete when:",{"type":41,"tag":63,"props":1277,"children":1278},{},[1279,1290,1300,1310,1315,1331,1345],{"type":41,"tag":67,"props":1280,"children":1281},{},[1282,1284,1288],{"type":47,"value":1283},"✅ ",{"type":41,"tag":140,"props":1285,"children":1286},{},[1287],{"type":47,"value":852},{"type":47,"value":1289},": MCP server is available (or clear instructions provided if not)",{"type":41,"tag":67,"props":1291,"children":1292},{},[1293,1294,1298],{"type":47,"value":1283},{"type":41,"tag":140,"props":1295,"children":1296},{},[1297],{"type":47,"value":862},{"type":47,"value":1299},": .NET SDK is available and dotnet-appcat tool is installed",{"type":41,"tag":67,"props":1301,"children":1302},{},[1303,1304,1308],{"type":47,"value":1283},{"type":41,"tag":140,"props":1305,"children":1306},{},[1307],{"type":47,"value":872},{"type":47,"value":1309},": Node.js and npm are available and npm-check-updates is installed",{"type":41,"tag":67,"props":1311,"children":1312},{},[1313],{"type":47,"value":1314},"✅ AppCAT analysis executes without errors (Java\u002F.NET) or ncu analysis executes without errors (JS\u002FTS)",{"type":41,"tag":67,"props":1316,"children":1317},{},[1318,1319,1324,1326],{"type":47,"value":1283},{"type":41,"tag":140,"props":1320,"children":1321},{},[1322],{"type":47,"value":1323},"For Java and .NET",{"type":47,"value":1325},": Report generated at ",{"type":41,"tag":71,"props":1327,"children":1329},{"className":1328},[],[1330],{"type":47,"value":84},{"type":41,"tag":67,"props":1332,"children":1333},{},[1334,1335,1339,1340],{"type":47,"value":1283},{"type":41,"tag":140,"props":1336,"children":1337},{},[1338],{"type":47,"value":872},{"type":47,"value":1325},{"type":41,"tag":71,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":47,"value":465},{"type":41,"tag":67,"props":1346,"children":1347},{},[1348],{"type":47,"value":1349},"✅ Report metadata includes assessment tool version, timestamp, and configuration",{"type":41,"tag":56,"props":1351,"children":1353},{"id":1352},"troubleshooting",[1354],{"type":47,"value":1355},"Troubleshooting",{"type":41,"tag":50,"props":1357,"children":1358},{},[1359,1364],{"type":41,"tag":140,"props":1360,"children":1361},{},[1362],{"type":47,"value":1363},"Prerequisites Not Met",{"type":47,"value":146},{"type":41,"tag":63,"props":1366,"children":1367},{},[1368,1390,1420],{"type":41,"tag":67,"props":1369,"children":1370},{},[1371,1375,1377],{"type":41,"tag":140,"props":1372,"children":1373},{},[1374],{"type":47,"value":852},{"type":47,"value":1376},": First check for 'appmod-run-assessment-action', then fall back to 'appmod-precheck-assessment'\n",{"type":41,"tag":63,"props":1378,"children":1379},{},[1380,1385],{"type":41,"tag":67,"props":1381,"children":1382},{},[1383],{"type":47,"value":1384},"Return immediately with setup instructions if neither tool is available",{"type":41,"tag":67,"props":1386,"children":1387},{},[1388],{"type":47,"value":1389},"Do not attempt to run assessment without MCP",{"type":41,"tag":67,"props":1391,"children":1392},{},[1393,1397,1399],{"type":41,"tag":140,"props":1394,"children":1395},{},[1396],{"type":47,"value":862},{"type":47,"value":1398},": Verify .NET SDK is installed\n",{"type":41,"tag":63,"props":1400,"children":1401},{},[1402,1415],{"type":41,"tag":67,"props":1403,"children":1404},{},[1405,1407,1413],{"type":47,"value":1406},"Check with ",{"type":41,"tag":71,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":47,"value":1412},"dotnet --version",{"type":47,"value":1414}," command",{"type":41,"tag":67,"props":1416,"children":1417},{},[1418],{"type":47,"value":1419},"Provide installation instructions if .NET SDK is missing",{"type":41,"tag":67,"props":1421,"children":1422},{},[1423,1427,1429],{"type":41,"tag":140,"props":1424,"children":1425},{},[1426],{"type":47,"value":872},{"type":47,"value":1428},": Verify Node.js and npm are installed\n",{"type":41,"tag":63,"props":1430,"children":1431},{},[1432,1443],{"type":41,"tag":67,"props":1433,"children":1434},{},[1435,1436,1442],{"type":47,"value":1406},{"type":41,"tag":71,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":47,"value":1441},"npm --version",{"type":47,"value":1414},{"type":41,"tag":67,"props":1444,"children":1445},{},[1446],{"type":47,"value":1447},"Provide installation instructions if npm is missing",{"type":41,"tag":50,"props":1449,"children":1450},{},[1451,1456],{"type":41,"tag":140,"props":1452,"children":1453},{},[1454],{"type":47,"value":1455},"Assessment Failures",{"type":47,"value":146},{"type":41,"tag":63,"props":1458,"children":1459},{},[1460,1465,1474,1495,1527],{"type":41,"tag":67,"props":1461,"children":1462},{},[1463],{"type":47,"value":1464},"Unsupported project type (only Java, .NET, and JavaScript\u002FTypeScript supported)",{"type":41,"tag":67,"props":1466,"children":1467},{},[1468,1472],{"type":41,"tag":140,"props":1469,"children":1470},{},[1471],{"type":47,"value":852},{"type":47,"value":1473},": MCP server communication errors",{"type":41,"tag":67,"props":1475,"children":1476},{},[1477,1481,1482],{"type":41,"tag":140,"props":1478,"children":1479},{},[1480],{"type":47,"value":862},{"type":47,"value":278},{"type":41,"tag":63,"props":1483,"children":1484},{},[1485,1490],{"type":41,"tag":67,"props":1486,"children":1487},{},[1488],{"type":47,"value":1489},"dotnet-appcat tool installation failure",{"type":41,"tag":67,"props":1491,"children":1492},{},[1493],{"type":47,"value":1494},"appcat command execution errors",{"type":41,"tag":67,"props":1496,"children":1497},{},[1498,1502,1503],{"type":41,"tag":140,"props":1499,"children":1500},{},[1501],{"type":47,"value":872},{"type":47,"value":278},{"type":41,"tag":63,"props":1504,"children":1505},{},[1506,1511,1516],{"type":41,"tag":67,"props":1507,"children":1508},{},[1509],{"type":47,"value":1510},"npm-check-updates installation failure",{"type":41,"tag":67,"props":1512,"children":1513},{},[1514],{"type":47,"value":1515},"ncu command execution errors",{"type":41,"tag":67,"props":1517,"children":1518},{},[1519,1521],{"type":47,"value":1520},"No package.json found at ",{"type":41,"tag":71,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":47,"value":1526},"{workspace-path}\u002Fpackage.json",{"type":41,"tag":67,"props":1528,"children":1529},{},[1530],{"type":47,"value":1531},"Invalid project structure or build configuration",{"type":41,"tag":50,"props":1533,"children":1534},{},[1535,1540],{"type":41,"tag":140,"props":1536,"children":1537},{},[1538],{"type":47,"value":1539},"Report Generation Issues",{"type":47,"value":146},{"type":41,"tag":63,"props":1542,"children":1543},{},[1544,1561,1575,1598,1611],{"type":41,"tag":67,"props":1545,"children":1546},{},[1547,1551,1553,1559],{"type":41,"tag":140,"props":1548,"children":1549},{},[1550],{"type":47,"value":887},{"type":47,"value":1552},": No report.json found under ",{"type":41,"tag":71,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":47,"value":1558},"{workspace-path}\u002F.github\u002Fmodernize\u002Fassessment\u002Freports\u002Freport-*\u002Freport.json",{"type":47,"value":1560}," after MCP execution",{"type":41,"tag":67,"props":1562,"children":1563},{},[1564,1568,1569,1574],{"type":41,"tag":140,"props":1565,"children":1566},{},[1567],{"type":47,"value":902},{"type":47,"value":1552},{"type":41,"tag":71,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":47,"value":540},{"type":47,"value":1560},{"type":41,"tag":67,"props":1576,"children":1577},{},[1578,1582,1584,1589,1591,1596],{"type":41,"tag":140,"props":1579,"children":1580},{},[1581],{"type":47,"value":862},{"type":47,"value":1583},": Report not generated at ",{"type":41,"tag":71,"props":1585,"children":1587},{"className":1586},[],[1588],{"type":47,"value":628},{"type":47,"value":1590},", or ",{"type":41,"tag":71,"props":1592,"children":1594},{"className":1593},[],[1595],{"type":47,"value":551},{"type":47,"value":1597}," missing from report",{"type":41,"tag":67,"props":1599,"children":1600},{},[1601,1605,1606],{"type":41,"tag":140,"props":1602,"children":1603},{},[1604],{"type":47,"value":872},{"type":47,"value":1583},{"type":41,"tag":71,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":47,"value":465},{"type":41,"tag":67,"props":1612,"children":1613},{},[1614],{"type":47,"value":1615},"Report file is corrupted or invalid JSON (Java\u002F.NET only)",{"type":41,"tag":50,"props":1617,"children":1618},{},[1619],{"type":47,"value":1620},"For any failure, provide clear error messages and troubleshooting steps.",{"items":1622,"total":27},[1623,1630,1643,1658,1673,1688,1699],{"slug":4,"name":4,"fn":5,"description":6,"org":1624,"tags":1625,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1626,1627,1628,1629],{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1631,"name":1631,"fn":1632,"description":1633,"org":1634,"tags":1635,"stars":23,"repoUrl":24,"updatedAt":1642},"clarifying-scenarios","evaluate modernization request scenario context","Evaluates whether a user's modernization\u002Frewrite request provides enough scenario context to proceed (e.g., target component library, screenshots, design system for frontend; API contract policy, data migration strategy for backend). Produces a deterministic clarity score, asks the user for missing required fields via a structured form, and writes a canonical `clarification.md` artifact consumed by all downstream agents.\nTriggers: \"clarification gate\", \"scenario clarification\", \"elicit missing context\", \"evaluate prompt completeness\", \"ask user for screenshots \u002F target library \u002F design system\".\nNOT for: feature specification (use feature-inventory), planning (use creating-implementation-plan), implementation (use implementing-code), or resolving spec-time `[NEEDS CLARIFICATION]` markers (those remain owned by feature-inventory).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1636,1638,1641],{"name":1637,"slug":29,"type":15},"Copilot",{"name":1639,"slug":1640,"type":15},"Engineering","engineering",{"name":13,"slug":14,"type":15},"2026-07-03T16:31:04.911521",{"slug":1644,"name":1644,"fn":1645,"description":1646,"org":1647,"tags":1648,"stars":23,"repoUrl":24,"updatedAt":1657},"create-modernization-plan","create modernization plans for Azure migration","Create a modernization plan to migrate the project to Azure",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1649,1652,1655,1656],{"name":1650,"slug":1651,"type":15},"Azure","azure",{"name":1653,"slug":1654,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-07T06:52:44.361557",{"slug":1659,"name":1659,"fn":1660,"description":1661,"org":1662,"tags":1663,"stars":23,"repoUrl":24,"updatedAt":1672},"dependency-map","generate project dependency map diagrams","Generate dependency map diagram from project build files",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1664,1667,1668,1671],{"name":1665,"slug":1666,"type":15},"Architecture","architecture",{"name":21,"slug":22,"type":15},{"name":1669,"slug":1670,"type":15},"Diagrams","diagrams",{"name":1639,"slug":1640,"type":15},"2026-07-18T05:14:07.976259",{"slug":1674,"name":1674,"fn":1675,"description":1676,"org":1677,"tags":1678,"stars":23,"repoUrl":24,"updatedAt":1687},"guidelines","apply framework migration and transformation rules","Collection of framework-to-framework migration rules and transformation patterns (e.g., Struts→Spring MVC, JSP→Thymeleaf, EJB→Spring Boot).\nTriggers: \"check migration guidelines\", \"look up transformation rules\", \"find Struts-to-Spring patterns\", \"apply migration conventions\", \"conversion rules for X→Y\".\nAlso consumed automatically by breaking-down-tasks and implementing-code during migration workflows.\nNOT for: direct execution — other skills scan this directory.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1679,1682,1683,1686],{"name":1680,"slug":1681,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1684,"slug":1685,"type":15},"Migration","migration",{"name":13,"slug":14,"type":15},"2026-07-03T16:31:08.783756",{"slug":1689,"name":1689,"fn":1690,"description":1691,"org":1692,"tags":1693,"stars":23,"repoUrl":24,"updatedAt":1698},"implementing-code","execute implementation tasks for modernization","Executes a batch of implementation tasks with TDD workflow, source-anchored rewrite for behavioral fidelity, guideline-based code transformation, and full requirement tracing. Returns a structured batch report.\nTriggers: \"implement tasks\", \"execute the batch\", \"write code for these tasks\", \"implement with source anchoring\", \"run the implementation\".\nNOT for: task generation (use breaking-down-tasks), implementation planning (use creating-implementation-plan).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1694,1695,1696,1697],{"name":1637,"slug":29,"type":15},{"name":1639,"slug":1640,"type":15},{"name":1684,"slug":1685,"type":15},{"name":13,"slug":14,"type":15},"2026-07-18T05:14:07.057305",{"slug":1700,"name":1700,"fn":1701,"description":1702,"org":1703,"tags":1704,"stars":23,"repoUrl":24,"updatedAt":1715},"quality-gates","run quality gate validation for workflows","Runs quality gate validation at each workflow stage. Supports 4 gate types: spec-quality, spec-to-plan, plan-to-tasks, completeness. Produces gate pass\u002Ffail reports with actionable feedback.\nTriggers: \"run quality gate\", \"validate spec quality\", \"spec quality\", \"plan coverage\", \"check plan coverage\", \"validate plan to tasks\", \"check task traceability\", \"verify task completeness\", \"run completeness review\", \"review implementation\", \"check plan traceability\", \"check coverage\", \"completeness quality gate\", \"final sign-off\", \"feature parity sign-off\", \"completeness gate\", \"feature parity\", \"sign-off report\", \"verify all requirements\".\nRequires `type` parameter to select the gate.\nNOT for: code review, implementation (use implementing-code), spec writing.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1705,1706,1709,1712],{"name":9,"slug":8,"type":15},{"name":1707,"slug":1708,"type":15},"QA","qa",{"name":1710,"slug":1711,"type":15},"Testing","testing",{"name":1713,"slug":1714,"type":15},"Workflow Automation","workflow-automation","2026-07-07T06:52:45.631984",{"items":1717,"total":1906},[1718,1738,1757,1776,1791,1808,1819,1832,1847,1862,1881,1894],{"slug":1719,"name":1719,"fn":1720,"description":1721,"org":1722,"tags":1723,"stars":1735,"repoUrl":1736,"updatedAt":1737},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1724,1725,1728,1729,1732],{"name":1639,"slug":1640,"type":15},{"name":1726,"slug":1727,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1730,"slug":1731,"type":15},"Project Management","project-management",{"name":1733,"slug":1734,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1739,"name":1739,"fn":1740,"description":1741,"org":1742,"tags":1743,"stars":1754,"repoUrl":1755,"updatedAt":1756},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1744,1747,1750,1751],{"name":1745,"slug":1746,"type":15},".NET","net",{"name":1748,"slug":1749,"type":15},"Agents","agents",{"name":1650,"slug":1651,"type":15},{"name":1752,"slug":1753,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1758,"name":1758,"fn":1759,"description":1760,"org":1761,"tags":1762,"stars":1754,"repoUrl":1755,"updatedAt":1775},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1763,1766,1767,1770,1771,1772],{"name":1764,"slug":1765,"type":15},"Analytics","analytics",{"name":1650,"slug":1651,"type":15},{"name":1768,"slug":1769,"type":15},"Data Analysis","data-analysis",{"name":1680,"slug":1681,"type":15},{"name":9,"slug":8,"type":15},{"name":1773,"slug":1774,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1777,"name":1777,"fn":1778,"description":1779,"org":1780,"tags":1781,"stars":1754,"repoUrl":1755,"updatedAt":1790},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1782,1785,1786,1787],{"name":1783,"slug":1784,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1650,"slug":1651,"type":15},{"name":1680,"slug":1681,"type":15},{"name":1788,"slug":1789,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1792,"name":1792,"fn":1793,"description":1794,"org":1795,"tags":1796,"stars":1754,"repoUrl":1755,"updatedAt":1807},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1797,1798,1801,1802,1803,1806],{"name":1650,"slug":1651,"type":15},{"name":1799,"slug":1800,"type":15},"Compliance","compliance",{"name":1752,"slug":1753,"type":15},{"name":9,"slug":8,"type":15},{"name":1804,"slug":1805,"type":15},"Python","python",{"name":1788,"slug":1789,"type":15},"2026-07-18T05:14:23.017504",{"slug":1809,"name":1809,"fn":1810,"description":1811,"org":1812,"tags":1813,"stars":1754,"repoUrl":1755,"updatedAt":1818},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1814,1815,1816,1817],{"name":1764,"slug":1765,"type":15},{"name":1650,"slug":1651,"type":15},{"name":1752,"slug":1753,"type":15},{"name":1804,"slug":1805,"type":15},"2026-07-31T05:54:29.068751",{"slug":1820,"name":1820,"fn":1821,"description":1822,"org":1823,"tags":1824,"stars":1754,"repoUrl":1755,"updatedAt":1831},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1825,1828,1829,1830],{"name":1826,"slug":1827,"type":15},"API Development","api-development",{"name":1650,"slug":1651,"type":15},{"name":9,"slug":8,"type":15},{"name":1804,"slug":1805,"type":15},"2026-07-18T05:14:16.988376",{"slug":1833,"name":1833,"fn":1834,"description":1835,"org":1836,"tags":1837,"stars":1754,"repoUrl":1755,"updatedAt":1846},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1838,1839,1842,1845],{"name":1650,"slug":1651,"type":15},{"name":1840,"slug":1841,"type":15},"Computer Vision","computer-vision",{"name":1843,"slug":1844,"type":15},"Images","images",{"name":1804,"slug":1805,"type":15},"2026-07-18T05:14:18.007737",{"slug":1848,"name":1848,"fn":1849,"description":1850,"org":1851,"tags":1852,"stars":1754,"repoUrl":1755,"updatedAt":1861},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1853,1854,1857,1860],{"name":1650,"slug":1651,"type":15},{"name":1855,"slug":1856,"type":15},"Configuration","configuration",{"name":1858,"slug":1859,"type":15},"Feature Flags","feature-flags",{"name":1680,"slug":1681,"type":15},"2026-07-03T16:32:01.278468",{"slug":1863,"name":1863,"fn":1864,"description":1865,"org":1866,"tags":1867,"stars":1754,"repoUrl":1755,"updatedAt":1880},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1868,1871,1874,1877],{"name":1869,"slug":1870,"type":15},"Cosmos DB","cosmos-db",{"name":1872,"slug":1873,"type":15},"Database","database",{"name":1875,"slug":1876,"type":15},"NoSQL","nosql",{"name":1878,"slug":1879,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1882,"name":1882,"fn":1864,"description":1883,"org":1884,"tags":1885,"stars":1754,"repoUrl":1755,"updatedAt":1893},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1886,1887,1888,1889,1890],{"name":1869,"slug":1870,"type":15},{"name":1872,"slug":1873,"type":15},{"name":9,"slug":8,"type":15},{"name":1875,"slug":1876,"type":15},{"name":1891,"slug":1892,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1895,"name":1895,"fn":1896,"description":1897,"org":1898,"tags":1899,"stars":1754,"repoUrl":1755,"updatedAt":1905},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1900,1901,1902,1903,1904],{"name":1650,"slug":1651,"type":15},{"name":1869,"slug":1870,"type":15},{"name":1872,"slug":1873,"type":15},{"name":1680,"slug":1681,"type":15},{"name":1875,"slug":1876,"type":15},"2026-05-13T06:14:17.582229",267]