{"_id":"@dyliu0306/courseape","_rev":"7-53557feb677662e273b9441c212488be","name":"@dyliu0306/courseape","dist-tags":{"latest":"1.0.2"},"versions":{"0.3.0":{"name":"@dyliu0306/courseape","version":"0.3.0","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@0.3.0","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"dd49963200164d39fdb69eb16fc6e182184a571b","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-0.3.0.tgz","fileCount":4,"integrity":"sha512-eGbUspK1TN7amri/CwwURmflpXhlTTfjpRyFG+jhD68PZOwfoiOdb40Hfmu4f6nsxLrcmTi+/u/nq/v+Io5F+A==","signatures":[{"sig":"MEQCIA/fKZTr1qTeN+hyu4TwF4l7vRz6I7EUFr5t8c8/h/0QAiBdMatr0V1SXvKkGiV5IQHjPOO+w8vt4JcizO9OEH4q1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6242},"engines":{"node":">=18"},"gitHead":"ad8b06757189ec7fd0158450314ced6b6384d4da","scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"0.3.0","@dyliu0306/courseape-win32-x64":"0.3.0","@dyliu0306/courseape-darwin-x64":"0.3.0","@dyliu0306/courseape-linux-arm64":"0.3.0","@dyliu0306/courseape-win32-arm64":"0.3.0","@dyliu0306/courseape-darwin-arm64":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/courseape_0.3.0_1784481492432_0.8473819182656557","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dyliu0306/courseape","version":"0.3.1","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@0.3.1","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"63f90a439362161188bfa0dcd7c6f647c2100596","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-0.3.1.tgz","fileCount":4,"integrity":"sha512-YX9N+HTkIYGVSbb6Fz9APgbBNb23MAKkl8jBnarnCp7X8nOqGS+IlvOfRrtAnwQ2buY2xVVUd+rMm5u23iawCA==","signatures":[{"sig":"MEUCIQCwe+am4hyLLnOfecGlydjmjnM7SdIFiNTANlOAw3RhswIgFGuaf+efB80uAH/arh6JZKMl1lhDYS5hvI9zMAN/k/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7621},"_from":"file:dist/packages/dyliu0306-courseape-0.3.1.tgz","engines":{"node":">=18"},"scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-0.3.1.tgz","_integrity":"sha512-YX9N+HTkIYGVSbb6Fz9APgbBNb23MAKkl8jBnarnCp7X8nOqGS+IlvOfRrtAnwQ2buY2xVVUd+rMm5u23iawCA==","repository":{"url":"git+https://github.com/dyliu0306/courseape.git","type":"git"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"0.3.1","@dyliu0306/courseape-win32-x64":"0.3.1","@dyliu0306/courseape-darwin-x64":"0.3.1","@dyliu0306/courseape-linux-arm64":"0.3.1","@dyliu0306/courseape-win32-arm64":"0.3.1","@dyliu0306/courseape-darwin-arm64":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/courseape_0.3.1_1784533567727_0.17820818806726102","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@dyliu0306/courseape","version":"0.3.2","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@0.3.2","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"bcf950ae1b19ac191f2f6353cbbeecd718cb2524","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-0.3.2.tgz","fileCount":4,"integrity":"sha512-dIGVVj5DqLONpSypTTZXgrCL6AkLCJF44NH15WW4roiKVQJYkDESAeSRnfet5v1vJmoBhX55tzYkESDSyXrwfg==","signatures":[{"sig":"MEUCIQD2O17wTw9UqPTUEcZPjMFGE1JJcExCLvugUd8pwFyXvwIgNLA9MF7R3UfpCXYHYPrtl85FGQbHbx4N7iVpfk95fww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7621},"_from":"file:dist/packages/dyliu0306-courseape-0.3.2.tgz","engines":{"node":">=18"},"scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-0.3.2.tgz","_integrity":"sha512-dIGVVj5DqLONpSypTTZXgrCL6AkLCJF44NH15WW4roiKVQJYkDESAeSRnfet5v1vJmoBhX55tzYkESDSyXrwfg==","repository":{"url":"git+https://github.com/dyliu0306/courseape.git","type":"git"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"0.3.2","@dyliu0306/courseape-win32-x64":"0.3.2","@dyliu0306/courseape-darwin-x64":"0.3.2","@dyliu0306/courseape-linux-arm64":"0.3.2","@dyliu0306/courseape-win32-arm64":"0.3.2","@dyliu0306/courseape-darwin-arm64":"0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/courseape_0.3.2_1784540992283_0.8853544000851941","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@dyliu0306/courseape","version":"0.4.0","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@0.4.0","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"340779a3165ab3e28ed1500a5b30e65a02f8de0b","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-0.4.0.tgz","fileCount":4,"integrity":"sha512-79yJTm/xzrwCqpBKkU4x22qu5I3O1mXAPvN0/KUka17iuDYYHRUKSEq+0h7anLsF5cCkNDfYYIzfWM3wtXBoQw==","signatures":[{"sig":"MEUCIAQCcOfT5LVNVkw3dH4cfB52fqJ0xfGTPHH78CeTBDuaAiEA+vjc4CX065nYjM+7HhLdzqtBdKv0NCVhLX8V+yyoHdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8755},"_from":"file:dist/packages/dyliu0306-courseape-0.4.0.tgz","engines":{"node":">=18"},"scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-0.4.0.tgz","_integrity":"sha512-79yJTm/xzrwCqpBKkU4x22qu5I3O1mXAPvN0/KUka17iuDYYHRUKSEq+0h7anLsF5cCkNDfYYIzfWM3wtXBoQw==","repository":{"url":"git+https://github.com/dyliu0306/courseape.git","type":"git"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"0.4.0","@dyliu0306/courseape-win32-x64":"0.4.0","@dyliu0306/courseape-darwin-x64":"0.4.0","@dyliu0306/courseape-linux-arm64":"0.4.0","@dyliu0306/courseape-win32-arm64":"0.4.0","@dyliu0306/courseape-darwin-arm64":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/courseape_0.4.0_1784545907148_0.9333852962328018","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@dyliu0306/courseape","version":"1.0.0","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@1.0.0","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"3c4d02d275f8820585ca4b3a32d636e90a85078d","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-1.0.0.tgz","fileCount":4,"integrity":"sha512-VrAWJ2dvrUQkI5gRgNOVvYBNG+MUmyNPCko2d291OcguW7cRlO1PtCaG+OTxIm6QSNZ1fyx1v+jDuNptvUY43g==","signatures":[{"sig":"MEUCIBDntt3xenECGhfdNkBbDCaaSWns4P7mUu88VxA/7hDOAiEAr88Pp2NTzLTcBc/rrJH6S0SdPk8Pl7v4QFuxW/D+c94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9972},"_from":"file:dist/packages/dyliu0306-courseape-1.0.0.tgz","engines":{"node":">=18"},"scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-1.0.0.tgz","_integrity":"sha512-VrAWJ2dvrUQkI5gRgNOVvYBNG+MUmyNPCko2d291OcguW7cRlO1PtCaG+OTxIm6QSNZ1fyx1v+jDuNptvUY43g==","repository":{"url":"git+https://github.com/dyliu0306/courseape.git","type":"git"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"1.0.0","@dyliu0306/courseape-win32-x64":"1.0.0","@dyliu0306/courseape-darwin-x64":"1.0.0","@dyliu0306/courseape-linux-arm64":"1.0.0","@dyliu0306/courseape-win32-arm64":"1.0.0","@dyliu0306/courseape-darwin-arm64":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/courseape_1.0.0_1784549767420_0.40651725680590167","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dyliu0306/courseape","version":"1.0.1","license":"PolyForm-Noncommercial-1.0.0","_id":"@dyliu0306/courseape@1.0.1","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"bin":{"courseape":"dist/index.js"},"dist":{"shasum":"dbc0e9ff7f50076692328a355ddd30f762948271","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-1.0.1.tgz","fileCount":4,"integrity":"sha512-v63q1mws3yAg0JYBkJZ88A3ht4xdXVOuRWnf9uMzn3hfmRcCcrVcTttbqGETdtmkhiCeNCuTGuKzrgAvzofY7Q==","signatures":[{"sig":"MEQCIBwL2snkQkNa5wx9cFwB3AZhCeqxvressy5jfEwBMwggAiANr69ep4A/gY+77r5tOYXSuSaQr55BXTb3JyMyEHnpqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10341},"_from":"file:dist/packages/dyliu0306-courseape-1.0.1.tgz","engines":{"node":">=18"},"scripts":{"build":"tsc"},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-1.0.1.tgz","_integrity":"sha512-v63q1mws3yAg0JYBkJZ88A3ht4xdXVOuRWnf9uMzn3hfmRcCcrVcTttbqGETdtmkhiCeNCuTGuKzrgAvzofY7Q==","repository":{"url":"git+https://github.com/dyliu0306/courseape.git","type":"git"},"_npmVersion":"10.8.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-linux-x64":"1.0.1","@dyliu0306/courseape-win32-x64":"1.0.1","@dyliu0306/courseape-darwin-x64":"1.0.1","@dyliu0306/courseape-linux-arm64":"1.0.1","@dyliu0306/courseape-win32-arm64":"1.0.1","@dyliu0306/courseape-darwin-arm64":"1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/courseape_1.0.1_1784558219460_0.9397191972596053","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dyliu0306/courseape","version":"1.0.2","description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","bin":{"courseape":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/dyliu0306/courseape.git"},"homepage":"https://github.com/dyliu0306/courseape#readme","bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"scripts":{"build":"tsc"},"devDependencies":{"typescript":"~5.7.0","@types/node":"^20.0.0"},"optionalDependencies":{"@dyliu0306/courseape-win32-x64":"1.0.2","@dyliu0306/courseape-win32-arm64":"1.0.2","@dyliu0306/courseape-linux-x64":"1.0.2","@dyliu0306/courseape-linux-arm64":"1.0.2","@dyliu0306/courseape-darwin-x64":"1.0.2","@dyliu0306/courseape-darwin-arm64":"1.0.2"},"license":"PolyForm-Noncommercial-1.0.0","engines":{"node":">=18"},"_id":"@dyliu0306/courseape@1.0.2","_integrity":"sha512-gbvbQbWIl45VaGuvyqg1mj1Aq3p9iyASdAfjrvgIlyAFrVTfI7Aw+QC1M3syr1ni1B+Vge+CWscVEnamNF7ykQ==","_resolved":"/home/runner/work/courseape/courseape/dist/packages/dyliu0306-courseape-1.0.2.tgz","_from":"file:dist/packages/dyliu0306-courseape-1.0.2.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-gbvbQbWIl45VaGuvyqg1mj1Aq3p9iyASdAfjrvgIlyAFrVTfI7Aw+QC1M3syr1ni1B+Vge+CWscVEnamNF7ykQ==","shasum":"ec2da39961b008eacaa3b0aad0623c506c89cd60","tarball":"https://registry.npmjs.org/@dyliu0306/courseape/-/courseape-1.0.2.tgz","fileCount":4,"unpackedSize":10573,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICZ5SauQuBQvoZr8SXSUDUZmiZl/Yhn7L0UgGR7rlSNqAiBYwTlro6thm9i8buOeAG01a4zG+YLGT4LsuaUjxGGjXw=="}]},"_npmUser":{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"},"directories":{},"maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/courseape_1.0.2_1784724615519_0.22077166325325215"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-19T17:18:12.277Z","modified":"2026-07-22T12:50:15.820Z","0.3.0":"2026-07-19T17:18:12.569Z","0.3.1":"2026-07-20T07:46:07.856Z","0.3.2":"2026-07-20T09:49:52.403Z","0.4.0":"2026-07-20T11:11:47.276Z","1.0.0":"2026-07-20T12:16:07.562Z","1.0.1":"2026-07-20T14:36:59.610Z","1.0.2":"2026-07-22T12:50:15.666Z"},"bugs":{"url":"https://github.com/dyliu0306/courseape/issues"},"license":"PolyForm-Noncommercial-1.0.0","homepage":"https://github.com/dyliu0306/courseape#readme","repository":{"type":"git","url":"git+https://github.com/dyliu0306/courseape.git"},"description":"CYCU course-planning CLI: graduation analysis, course browsing, conflict detection","maintainers":[{"name":"dyliu0306","email":"spencerliu.0306@gmail.com"}],"readme":"# CourseApe — CYCU 選課規劃工具\n\n[![npm version](https://img.shields.io/npm/v/@dyliu0306/courseape)](https://www.npmjs.com/package/@dyliu0306/courseape)\n[![CI](https://github.com/dyliu0306/courseape/actions/workflows/ci.yml/badge.svg)](https://github.com/dyliu0306/courseape/actions/workflows/ci.yml)\n[![License: PolyForm NC 1.0.0](https://img.shields.io/badge/License-PolyForm--Noncommercial--1.0.0-blue)](LICENSE)\n\n> 給中原大學學生與 AI Agent 的選課輔助系統。用自然語言提問，Agent 幫你分析畢業門檻、規劃下學期、檢查衝堂。\n\n## 它能做什麼？\n\n- **畢業門檻分析** — 你還缺哪些課、哪些學分\n- **下學期規劃** — 自動匹配重修課程、推薦選課組合\n- **衝堂檢查** — 排好的課表有沒有時間衝突\n- **課程評價搜尋** — AI 搜尋公開網路上的課程心得\n\n## 安裝\n\n### 0. 由 Agent 自動安裝\n\n在 AI Agent（OpenCode、Codex、Claude Code 等）的對話中貼上：\n\n```\n幫我安裝 https://github.com/dyliu0306/courseape\n並告訴我怎麼登入？能用來做甚麼？\n```\n\nAgent 會自動完成 npm 安裝、Skill 安裝，並引導你使用。你仍須在cmd內自行登入一次。\n\n**選擇這個安裝方式的話，可以跳過以下步驟。**\n\n### 1. 安裝 CLI\n\n```\nnpm install -g @dyliu0306/courseape\ncourseape --version\n```\n\n> 需要 [Node.js](https://nodejs.org/) v18+。安裝時一路按「下一步」即可。\n>\n> **Windows 用戶**：安裝時可能觸發 Windows Defender SmartScreen，選「仍要執行」即可。\n\n如果 npm 不可用，也可以從 [GitHub Releases](https://github.com/dyliu0306/courseape/releases) 下載對應平台的 binary。Windows x64 使用 `courseape-win32-x64.exe`。\n\n### 2. 設定帳密\n\n首次使用前，設定 iTouch 帳密（二擇一）：\n\n```\ncourseape credentials set          # 互動式輸入，存入系統鑰匙圈\n```\n\n或設定環境變數：\n\n```\n$env:CYCU_USERNAME = \"你的學號\"\n$env:CYCU_PASSWORD = \"你的密碼\"\n```\n\n> 帳密存在系統鑰匙圈（Windows 認證管理員 / Mac 鑰匙圈），不出現在任何檔案。\n\n### 3. 安裝 Agent Skill\n\nCLI 安裝完成後，在你的 AI Agent 環境中執行：\n\n```\ncourseape skills install --all\n```\n\n或指定平台：\n\n```\ncourseape skills install claude\ncourseape skills install opencode\ncourseape skills install codex\n```\n\n## Quick Start\n\n安裝完成後，在 AI Agent 裡說：\n\n```\n幫我設定 CourseApe\n```\n\nAgent 會自動：\n1. 引導你完成一次安全登入（iTouch 帳密）\n2. 從學號推導你的入學年度\n3. 詢問確認你的系所（例如「你是資訊管理學系學士班嗎？」）\n4. 同步必要的基礎資料\n\n設定完成後，直接用自然語言提問：\n\n```\n我還缺什麼課才能畢業？\n下學期要選什麼課？\n幫我查資管系這學期的必修\n```\n\n## 使用範例\n\n| 你說 | Agent 做的事 |\n|------|-------------|\n| 「幫我分析畢業門檻」 | 讀取修業辦法 PDF + 成績，交叉比對，告訴你缺什麼 |\n| 「下學期要選什麼課」 | 分析缺修課程 → 查詢開課 → 排除衝堂 → 建議選課組合 |\n| 「有沒有衝堂」 | 檢查備選清單的時間衝突 |\n| 「這堂課好不好」 | 搜尋網路上的課程與教師評價 |\n| 「資管系有什麼課」 | 篩選並顯示該系開課清單 |\n\n## 它不會做什麼\n\n- **不會幫你選課** — 實際選課還是要到學校選課系統\n- **不會儲存你的密碼在檔案中** — 帳密存在系統鑰匙圈（Windows 認證管理員 / Mac 鑰匙圈）\n- **不會上傳你的成績** — 所有資料都在本機\n\n## 隱私\n\n| 項目 | 處理方式 |\n|------|----------|\n| 帳密 | 系統鑰匙圈，不出現在任何檔案 |\n| 成績 | 本機 SQLite 資料庫 |\n| AI 分析 | CLI 預設遮罩個資；若 Agent 將資料送給外部 AI，仍受該 Agent 服務的隱私政策約束 |\n| 網路 | CourseApe 連線至 CYCU iTouch、cmap；每 4 小時最多向 npm registry 查詢一次最新版本；npm 安裝／更新時亦會連線 |\n\n## 限制\n\n- 成績分析需要 AI Agent 讀取 PDF，準確度取決於 PDF 格式與 Agent 能力\n- 課程資料來自學校系統，非即時更新；開課資料 TTL 4 小時、系所清單 24 小時\n- 通識向度判斷依賴歷史開課資料的 `OP_TYPE` 欄位，部分課程可能缺失\n- 本工具為非官方開源專案，與中原大學無關\n\n## 快速驗證（新手 5 命令）\n\n```bash\ncourseape --version\ncourseape agent doctor\ncourseape init --department \"資管系\"\ncourseape agent prepare graduation\ncourseape agent prepare planning\n```\n\n## 疑難排解\n\n| 問題 | 解法 |\n|------|------|\n| 首次登入報錯 | 先執行 `courseape credentials set` 設定帳密 |\n| 登入失敗 | `courseape credentials set` 重新設定帳密，或設定環境變數 `CYCU_USERNAME` / `CYCU_PASSWORD` |\n| Session 過期 | `courseape login` 重新登入 |\n| 系所找不到 | `courseape agent resolve \"你的系所\"` 查看候選清單 |\n| 開課資料過舊 | `courseape courses offerings --term 1151` 重新同步 |\n| PDF 驗證失敗 | `courseape data purge` 清除快取後重跑 `prepare graduation` |\n| Skill 安裝後 Agent 找不到 | 確認 `courseape skills install <平台>` 的平台名稱正確 |\n| 版本不一致 | `npm install -g @dyliu0306/courseape@latest` 重新安裝 |\n\n## 授權\n\n[PolyForm Noncommercial License 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0) — 僅限非商業用途。\n\n## 進階使用\n\n- [CLI 完整參考](https://github.com/dyliu0306/courseape/blob/master/docs/cli-reference.md) — 所有低階命令與篩選條件\n- [Agent 指南](https://github.com/dyliu0306/courseape/blob/master/docs/agent-guide.md) — Agent 支援範圍與故障排除\n- [隱私政策](https://github.com/dyliu0306/courseape/blob/master/docs/privacy.md) — 帳密、session、成績與 Agent 資料邊界\n- [開發指南](https://github.com/dyliu0306/courseape/blob/master/CONTRIBUTING.md) — 建置、測試、發布流程\n\n## 更新\n\nCourseApe 每 4 小時最多向 npm 檢查一次最新版；若有新版本，會在 stderr 顯示更新提示，不影響命令輸出或 Agent JSON。\n\n```bash\nnpm update -g @dyliu0306/courseape\ncourseape --version\n```\n\n更新後若出現 platform package 錯誤，重新安裝：\n\n```bash\nnpm install -g @dyliu0306/courseape\n```\n","readmeFilename":"README.md"}