From 2cab53bc947c52aa0e7efb5c498a4d4f43d70b72 Mon Sep 17 00:00:00 2001 From: wehub-resource-sync Date: Mon, 13 Jul 2026 12:46:28 +0800 Subject: [PATCH] chore: import upstream snapshot with attribution --- .claude/mcp_config.example.json | 14 + .codex-plugin/plugin.json | 21 + .dockerignore | 83 + .env.example | 46 + .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.md | 52 + .github/ISSUE_TEMPLATE/documentation.md | 41 + .github/ISSUE_TEMPLATE/feature_request.md | 39 + .github/ISSUE_TEMPLATE/mcp_tool.md | 42 + .github/PULL_REQUEST_TEMPLATE.md | 49 + .github/create_issues.sh | 43 + .github/workflows/docker-publish.yml | 139 + .github/workflows/quality-metrics.yml | 171 + .github/workflows/release.yml | 125 + .github/workflows/scheduled-updates.yml | 197 + .github/workflows/test-vector-dbs.yml | 112 + .github/workflows/tests.yml | 155 + .github/workflows/vector-db-export.yml | 188 + .gitignore | 79 + .gitmodules | 3 + .mcp.json | 8 + AGENTS.md | 302 + BULLETPROOF_QUICKSTART.md | 617 + CHANGELOG.md | 3293 + CLAUDE.md | 285 + CONTRIBUTING.md | 550 + DOCUMENTATION_AUDIT_REPORT_2026-05-30.md | 531 + Dockerfile | 75 + Dockerfile.mcp | 57 + LICENSE | 21 + QWEN.md | 719 + README.ar.md | 1374 + README.de.md | 1341 + README.es.md | 1380 + README.fr.md | 1380 + README.hi.md | 1377 + README.ja.md | 1376 + README.ko.md | 1376 + README.md | 1375 + README.pt-BR.md | 1380 + README.ru.md | 1358 + README.tr.md | 1381 + README.wehub.md | 7 + README.zh-CN.md | 1376 + ROADMAP.md | 433 + TROUBLESHOOTING.md | 485 + api/.gitignore | 2 + api/README.md | 267 + api/__init__.py | 6 + api/config_analyzer.py | 366 + api/main.py | 204 + api/requirements.txt | 3 + codecov.yml | 25 + configs/astrovalley_unified.json | 32 + configs/blender-unified.json | 276 + configs/claude-code-unified.json | 261 + configs/claude-code.json | 164 + configs/godot.json | 49 + configs/godot_unified.json | 108 + configs/httpx_comprehensive.json | 114 + configs/medusa-mercurjs.json | 71 + configs/react.json | 69 + configs/unity-addressables.json | 125 + configs/unity-dotween.json | 128 + configs/unity-spine.json | 136 + .../claude-plugin/.claude-plugin/plugin.json | 11 + distribution/claude-plugin/.mcp.json | 6 + distribution/claude-plugin/README.md | 93 + .../claude-plugin/commands/create-skill.md | 62 + .../claude-plugin/commands/install-skill.md | 43 + .../claude-plugin/commands/sync-config.md | 32 + .../skills/skill-builder/SKILL.md | 69 + distribution/github-action/README.md | 147 + distribution/github-action/action.yml | 92 + distribution/smithery/README.md | 109 + docker-compose.yml | 111 + docs/ARCHITECTURE.md | 263 + docs/BEST_PRACTICES.md | 496 + docs/BUG_AUDIT.md | 704 + docs/DOCKER_DEPLOYMENT.md | 762 + docs/FAQ.md | 863 + docs/KUBERNETES_DEPLOYMENT.md | 933 + docs/PRODUCTION_DEPLOYMENT.md | 827 + docs/README.md | 231 + docs/TROUBLESHOOTING.md | 1102 + docs/UML/exports/00_package_overview.png | Bin 0 -> 110434 bytes docs/UML/exports/01_cli_core.png | Bin 0 -> 144611 bytes docs/UML/exports/02_scrapers.png | Bin 0 -> 582084 bytes docs/UML/exports/03_adaptors.png | Bin 0 -> 767716 bytes docs/UML/exports/04_analysis.png | Bin 0 -> 468730 bytes docs/UML/exports/05_enhancement.png | Bin 0 -> 348725 bytes docs/UML/exports/06_packaging.png | Bin 0 -> 133058 bytes docs/UML/exports/07_mcp_server.png | Bin 0 -> 502436 bytes docs/UML/exports/08_sync.png | Bin 0 -> 219599 bytes docs/UML/exports/09_parsers.png | Bin 0 -> 116140 bytes docs/UML/exports/10_storage.png | Bin 0 -> 267650 bytes docs/UML/exports/11_embedding.png | Bin 0 -> 159619 bytes docs/UML/exports/12_benchmark.png | Bin 0 -> 130307 bytes docs/UML/exports/13_utilities.png | Bin 0 -> 270405 bytes .../exports/14_create_pipeline_sequence.png | Bin 0 -> 118277 bytes .../exports/15_github_unified_sequence.png | Bin 0 -> 172303 bytes .../exports/16_source_detection_activity.png | Bin 0 -> 175662 bytes .../exports/17_mcp_invocation_sequence.png | Bin 0 -> 90341 bytes docs/UML/exports/18_enhancement_activity.png | Bin 0 -> 118767 bytes docs/UML/exports/19_runtime_components.png | Bin 0 -> 95882 bytes .../exports/20_browser_rendering_sequence.png | Bin 0 -> 102711 bytes .../html/index.html/assets/css/bootstrap.css | 6158 + .../index.html/assets/css/jquery.bonsai.css | 36 + docs/UML/html/index.html/assets/css/main.css | 812 + .../index.html/assets/icon-font/icons.css | 3117 + .../index.html/assets/icon-font/icons.eot | Bin 0 -> 140260 bytes .../index.html/assets/icon-font/icons.html | 4438 + .../index.html/assets/icon-font/icons.ttf | Bin 0 -> 142048 bytes .../index.html/assets/icon-font/icons.woff | Bin 0 -> 63396 bytes .../assets/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../assets/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../html/index.html/assets/js/bootstrap.js | 2276 + .../assets/js/imageMapResizer.min.js | 8 + .../index.html/assets/js/jquery-2.1.0.min.js | 4 + .../index.html/assets/js/jquery.bonsai.js | 247 + .../index.html/assets/js/less-1.7.0.min.js | 16 + .../001c2eb31f7c3880775f9ab7ae4d0300.html | 419 + .../0025564de1473d71f4a6a0503fcdb056.html | 487 + .../00509100c34315b0f095eb3ccb34b023.html | 513 + .../007ccbce3f2ec8a3534b719b3f0fca25.html | 402 + .../00910695df59fa1e85314f6d17e4051f.html | 402 + .../00b94cf5cf9ebf3c6672e9c21deff7ee.html | 402 + .../00cb702eeb69e434bafcc1e2b04507b1.html | 435 + .../00fb8de24d76667858a719d127f22f51.html | 402 + .../010d7f06abc5890127077ec8d4d1038f.html | 419 + .../0145e471015eac4d3ed45baa8579cb6b.html | 321 + .../017fe081f5f76bed1d02586c4bb7f0b9.html | 419 + .../01d30778d4613da403d3225af832495c.html | 419 + .../01ff8f1b7d9d7beccdfac55ed1d3017d.html | 419 + .../020e1bb770a7768e07c0338ecb4bda09.html | 402 + .../02231b18c56eee1fe00db0b3cc88d3f3.html | 494 + .../02524d7a310024538b8bf2b5217a0405.html | 350 + .../0268261b9eda98ff7a999e6589b545c3.html | 419 + .../0285f49d97b595de19ad3a55a9aa5fac.html | 419 + .../029322692df61d1c9239a003a4f4947d.html | 321 + .../02be13f7c985dd6b4b7a23916cf05ae4.html | 402 + .../02c5b0d5c646f5b2a4735851a1a20a8f.html | 402 + .../02d026fb13af0923877f41f68fb5585e.html | 364 + .../02ddacbfe77e6d70d993a01120ddd2ac.html | 402 + .../02e78bb1d9b10da68dd8d62379086a6e.html | 402 + .../02f04803adb5c2b766559ee9412753dc.html | 419 + .../030c139fa6e0d10e86fdb3d57e91149f.html | 419 + .../0316bf28f31dfcc53a38fff09e04d662.html | 402 + .../03453c84f468d387ae974dc92ceda0d6.html | 349 + .../034b43824827421add2453b7695fc9b3.html | 402 + .../0380ecfd61cacc868ff1d659572725bc.html | 402 + .../03a572027e9889827df3efe4865d6c04.html | 402 + .../03a80d0c833ca4ccb7d1214c35c1e1f3.html | 450 + .../03b3d85c37ae6295a16b15383df9c540.html | 419 + .../03d20cc75938c4aab55c8ce9feb554c5.html | 402 + .../03e029aaa80cc56c5487c5172dbf41cc.html | 402 + .../03ec42466372e6ac1f6317227d6a0563.html | 520 + .../03f058a533840c37160ba9cbb3005bef.html | 402 + .../040003573ebaf30612a0b6c775cc3702.html | 402 + .../0423a6d6ebaedf5e0aa9c0cd98b8bff1.html | 402 + .../044b5cd04d02bac8cea889cb65106f43.html | 343 + .../0483a3757c109c28a7230e73efd926a1.html | 402 + .../0490a212778e5ffa6d79cdf230143138.html | 402 + .../04be98ec9bb8041fa720700c2ccc1351.html | 402 + .../04d495ef445aec5ab8fada58f2ad2025.html | 435 + .../04e0dd3038afc17aadc753ad9b8ffcd2.html | 426 + .../04e975cb83b23b9c6a67aad0a9f79acf.html | 407 + .../04f7b9e78182b7d501da5a2a7e9ab415.html | 460 + .../0502b099c81cd8ec649f26367f0dc00c.html | 419 + .../0525e1fe146314bf2258c8b421b5b4aa.html | 402 + .../05266a4a31f3cfbb0093b305667bc937.html | 419 + .../0551bb6cbac15533f87c5838f117a454.html | 402 + .../055516bb90ac718f5b8c1c8da847c7b0.html | 412 + .../0565785c1fa564d4b90864c7c45922e5.html | 402 + .../0581aae259550c0b2f535f82a27a20d2.html | 402 + .../05d2236199bcdc97250863d4d250f673.html | 435 + .../05d2f64f779d9377edddfd01920b899f.html | 419 + .../05d3258d24905a654413605b5e0974f5.html | 402 + .../05d369359212eac14ceb7a81753d2e87.html | 412 + .../05d6ebcd7c258f23a170566a10c631f2.html | 555 + .../05e160e75f565278ee83d6208b57c04a.html | 419 + .../068d87025fe2aadb0507fe941fef8c06.html | 402 + .../06959fa5355b0e6089c1c9f9f7af3aa6.html | 419 + .../06d8f28dd785295227c8a1d664901ca6.html | 349 + .../06f8f577e16e7d14c5086f3106796bd7.html | 402 + .../070148fb11e435ea8f68b1d19cc19db3.html | 343 + .../071d0d0f0f869f58f3ea4bc2dd916024.html | 430 + .../073c989581e4b19401094d4e6b51a5b7.html | 402 + .../07cf2536e7dbcf8d87afb33d4f6b2bdf.html | 419 + .../07dacffc54f86475400204d093091588.html | 419 + .../07ddaa4469eef6b224bce1f3f94752ef.html | 331 + .../07eacff5fbd0a5a70fe3f321c7debba4.html | 402 + .../08042f3437de69e3a4e3d65f86fde219.html | 402 + .../081582bfe433eed0e3f57b298ed41f30.html | 402 + .../08252d0c94f009b38c67287903edcb46.html | 331 + .../083bd48e3733bd417ab8120d83062ed6.html | 402 + .../084f65230d8e15d82dca008da5251503.html | 402 + .../0875b7edc4d8e095b97f5adc19022083.html | 419 + .../08a42a9cb33085033c589053dbef600c.html | 402 + .../08a4b7115cae2a5970b962330796c00f.html | 402 + .../08be6fb667da531dffce499974b3d41e.html | 402 + .../08c6a1e6dfd23011c9f97fc41749fcbf.html | 402 + .../08f15a81b2edd5a6cfdd763c99b3e6d9.html | 374 + .../0904333092b12540d685f51441775d3f.html | 402 + .../09a413250fe5275c26bd7fafb7a6af9b.html | 419 + .../09a660aa19e69354745dd6da7ad168d5.html | 402 + .../09befc42a3401e984c3472d643915c12.html | 419 + .../09c94c5e380c212e227886b2d7bd34f8.html | 419 + .../09efe71eec1d050cea48d72ce2e3afc5.html | 419 + .../0a0f1f352ebda364e54afcee85ff8e31.html | 402 + .../0a2c3c32f8650cc60d6a251e325931b7.html | 402 + .../0a628ab23c874b12d2bb7c57f08bacd3.html | 402 + .../0a8fab81ff1fe4fcf2830088d57a3389.html | 402 + .../0a97292d8e93749d795ceb9d3a7ea43b.html | 343 + .../0a98b22d6960a0d5d4b45307cf38a376.html | 402 + .../0aea6c69f9758e6f7ec260bb3a67fb7d.html | 325 + .../0af0718934b7c9bf0704b33c6edceb0a.html | 343 + .../0b13587dd50b418879fcc9d5fb4b0d63.html | 419 + .../0b2e3d4a9fce6033c27315c1506e1a28.html | 349 + .../0b3368eb34da708c263183ff1314e1e5.html | 419 + .../0ba48cfc547154448e9c53149d02ba85.html | 402 + .../0bd4e8e7709356647d357de05db61d58.html | 402 + .../0bf25460dca20f004b5c7e9765713ebb.html | 419 + .../0bf4a6eae08b8881efe05b065e34faf9.html | 402 + .../0c160ff8f76fbba9a4fa77033ab14dd0.html | 402 + .../0c19835748910e666b4024ad2c4af1bb.html | 419 + .../0c50e065455272d0f3e04945a6f664a5.html | 402 + .../0c6eeccbfdd67aa968a241acce05e20d.html | 415 + .../0c9e5ca62bc924e5da1379e801442e93.html | 402 + .../0c9e640b81f484da7afde63d602d539c.html | 419 + .../0ca567fad7b9d9a27305963eb49265f0.html | 402 + .../0ca634ac151ac989621cda7dbad8bbb3.html | 419 + .../0ce998f85652a8a9bcd417c92151f180.html | 402 + .../0cfde902fa6cc188f0f08edf2bd3ef29.html | 402 + .../0d01421788d1b29d79573983bfd4caaa.html | 402 + .../0d14235e77e55ae4ee596bb1eb4c055e.html | 402 + .../0d1b85060ff7cc969454ac1749edd700.html | 343 + .../0d650a90204a1dd25dea24fce6f69ed2.html | 402 + .../0da0ff49bfbd36a16396c2cd7a62b986.html | 402 + .../0dabb2990f22100d81566f0109ad7389.html | 407 + .../0e1a6b013283ca18f16dd031d52ab495.html | 419 + .../0e395d236ae8d376218b062ce6691548.html | 402 + .../0e49055b2ea91c18f9d50c145f6b0065.html | 419 + .../0e9b3e70fbb779d118f3feb75efea17b.html | 343 + .../0eae83fbc2e3eaaf8315f122a5692fa0.html | 343 + .../0ef2cd6fed7cb2d0466028600e2ff1f2.html | 419 + .../0f0975f4892715f4a25dd889110d21c2.html | 402 + .../0f0d72eccee0ef091c4c447e410e0e74.html | 357 + .../0f14d67760ca6deb4dae7b7d38dc1cd0.html | 402 + .../0f43fabe86dd7f957b2715cf4ec5acff.html | 402 + .../0f5cd430c28c59b81e7bdde42b5879a5.html | 402 + .../0f6fcbea117c51a2843622edb82d45bc.html | 419 + .../0f770dc4609b7edef4100bdf3c7da9cf.html | 412 + .../0fb51df235772849702822ad6564bd14.html | 402 + .../1007964c31ec39afd330c60257d2ddab.html | 402 + .../104b47e35354ace97825be9e2e305a0f.html | 402 + .../1083fbd39aa8abaa59ca84522db4c329.html | 402 + .../109fa302e9f6af1e2bc26aa7a753cd1b.html | 402 + .../10aceb25f1816142e1f6cd6f583ba60f.html | 402 + .../10ae53552fd674a8c15ff88684f4f7e8.html | 419 + .../10ae7246a744d30d9e4442c50682919f.html | 435 + .../10b08a6d5cf01426a1d15a925ffa2abb.html | 415 + .../10bb05ff02c44eb4cb7e56e656414409.html | 402 + .../10ddb05d66e61da66fdd5294e32336db.html | 402 + .../10e89b885b07c612d0c3e3ad4d3a5c9a.html | 402 + .../1131ea23ab69d35d15d1c4b9cd8d7259.html | 394 + .../1151c0a323c804e5dda7d1e6e2dcc5a6.html | 402 + .../11e1d95f8dfd5e98db160728b2d14f64.html | 343 + .../1204398e31612f8163e172c7c9d69506.html | 419 + .../1275a65b66a51f6db9de16fe1df1dc04.html | 412 + .../12931ba4dfb5230e6930a1d78b1cbfb1.html | 402 + .../12948c9de9d05fb6f1a89c9a2c49f601.html | 402 + .../12ca541a28ac30817b08abed5b789b53.html | 402 + .../12cc48b9085aa2f3e8448f5d6c68d86d.html | 349 + .../12f781340de55ea5c75d418ab74cf196.html | 419 + .../12f8523c165ccc233919e066ea39ce59.html | 402 + .../1339e1301b5e1a6500fc24d2ad8c21e3.html | 402 + .../133d163d58905e9388b375e4e8a2a931.html | 435 + .../133e0b7302027f743b0350eae86efc95.html | 402 + .../136e9c05d710dc4dc71692abb7b4072c.html | 419 + .../137ad1783cc7f455239915618dcfbbfb.html | 402 + .../138fdc81880d347a9f7353f299ae298b.html | 343 + .../13e66ee87e9a12a8405abdd0ae7086ef.html | 402 + .../14413868c72d0d5dbb4895e5c67c4e3b.html | 402 + .../14ed62b4bedb9fd3fecedd2603cd2749.html | 402 + .../1527d9d2b8fd801e023b742b83749728.html | 419 + .../153daf03c24c25715b2780ca36b33939.html | 419 + .../1543ca7cf7ffe834417433376a78765d.html | 402 + .../15616554d6102b01662c73fd5052306e.html | 402 + .../159dc9839a25bd96de00acbd9b769206.html | 402 + .../15b01c548fbf787215eefb723dd73d56.html | 402 + .../15e9103b13f3a783fe6db5bf294e12f8.html | 402 + .../15ead2572f98388553c1ba03a28e8322.html | 343 + .../1605dfe3fc5d685694f94105b3e2fa6b.html | 402 + .../160688b9cc340c7eadebfb391d74e16a.html | 415 + .../1606fbf6550c23690a7eb89de46e8a5c.html | 402 + .../160e96fe088fc50abe64342d07fdabe2.html | 331 + .../162b4a208dbb050db14ab5a412ef284b.html | 419 + .../1650213ee2ffc9a3cdbac2f940ce34a6.html | 419 + .../165d33e6e148cdb9786c9a2c90658815.html | 456 + .../1664443b916c6f148a8c3e41c44f66e4.html | 402 + .../167558f3be82547e5d04c3d2a8e3fbe7.html | 402 + .../17096c8b1c91b2c3f3f883dc58ee83af.html | 402 + .../17123b7b6ae3e80ccdda788e3d5ec287.html | 402 + .../1750eeac1450db235def25b8916a9123.html | 402 + .../1760bffa8edf160a10b394c7ed51500b.html | 402 + .../177bb964f1e06fd25015baf4b333d187.html | 349 + .../17a1c4794ab2467de72b75901ea2f914.html | 402 + .../17a6b3d24bf0cd5698d284f3b94d7960.html | 343 + .../17c9968b2c0a8b79e942213dfe132b00.html | 402 + .../181083f6a4f72266e539ae1ba17525e2.html | 402 + .../181289e9fcc05cc1a54df37baff006a7.html | 419 + .../191233b150b9f02c5b0df1f5314ac6b9.html | 402 + .../19144b86a3e677ae82857e1785386520.html | 419 + .../1959ecd67a9f11092cfa0fa76551477a.html | 419 + .../199c687357538ffcceab91bf2f5a7a8f.html | 349 + .../19aa5c7cf22d1481600dfdb3a9dd185c.html | 419 + .../19b266d59e7c2645851867cd937c5d82.html | 402 + .../19bb9755c13fe616fd937b0ef811861d.html | 349 + .../19c4071974cfc930ad375a4e44bb346f.html | 402 + .../19cbc6a831bb997a57d3bfb40ce9b7dc.html | 419 + .../19d49b05aefad7ee088628a984dc71be.html | 343 + .../19fafbea28e5d5f773d66b64b077ad83.html | 469 + .../1a6ca6010dac571b1d1045bb8904a7b2.html | 402 + .../1aa992524e3baab6fa31dc5a4882bd8f.html | 531 + .../1acf021a7d5a4e4675e75acdcd9c8fb2.html | 419 + .../1ad4e805c5d9fef62e91a7fe69ff62de.html | 402 + .../1b3a9c5f5f5c0dff2ce442439628dc61.html | 402 + .../1b502cde6ab7eb4f4b89b37b16693eb2.html | 343 + .../1b575a3d3abb12c553bb74f558756cc2.html | 419 + .../1b6d0c60cc234dc9cb28cd306d007836.html | 402 + .../1b84dfb8675aed69043b948bea836c22.html | 349 + .../1b9aae25d3c3c260af0db476bb7479b0.html | 419 + .../1bf6f985687b00551aa7c41c540587ad.html | 402 + .../1c0f1480a88315b39bf99fdb3005775b.html | 402 + .../1c281349161d02cdbfcd992861b9fc7a.html | 402 + .../1cd9ca0598c279cc254da8b0b8fc8162.html | 402 + .../1cee35c9874a55c6ea83c2acd2609358.html | 419 + .../1d5b7033ee49b0f9ac8bce3d1c3fcba5.html | 402 + .../1d6f3f444c008ac7088cf8f0335a4add.html | 402 + .../1d826af1ce33518d0b3c7f406ccb47e8.html | 402 + .../1da40a6efac2b652728d1d5516dbc700.html | 494 + .../1dc68e7f211b430d28209226b527206c.html | 419 + .../1e0799e10f4b614cbc844718c41a9469.html | 402 + .../1e303aaac065b7802550fb3f15cc8b64.html | 419 + .../1e68d69de155e4c4815d3ce063a14511.html | 402 + .../1e812b285a05e5766801ae3a9f9dceeb.html | 447 + .../1ee8533b6d95a29aa1a8628010b11bfc.html | 402 + .../1f134fe7a8d24985c2bb689805de76e8.html | 402 + .../1f180d81f85db347214ae45f4d884838.html | 558 + .../1f23f34eb1622957c41e488556b1e928.html | 394 + .../1f33d932613ef4f73e8b271adaa67b88.html | 402 + .../1f37ad81f15bfb1c7293f4a9367db409.html | 419 + .../1f49afe6fa2be8730becbe074d550763.html | 402 + .../1f4a843ab902e8801eb180f24de6d359.html | 419 + .../1f4e4b7ee724f3a511217ded69b458c1.html | 419 + .../1f63925b731195133e1da45ff0a9b32e.html | 402 + .../1f6fa1dbd7ebaf633e35b49b9555bd33.html | 343 + .../1fa8251942f80a51a2f4fdd5957661ee.html | 402 + .../1fdec12e919d6e94c4996d066fb65247.html | 402 + .../200b04a90076abbec97a2c32cdaf18ca.html | 343 + .../200c5f070762855652e8a9fede4a8fe8.html | 419 + .../209fae8aefd7aef250a6f5be0f302a96.html | 402 + .../20acf3b2cfbaab28bb83d6cf4adb4c8a.html | 402 + .../20b8567bdfffcad686eb964848dd5211.html | 415 + .../2103768dc1ca580a1bfadaf61935883c.html | 402 + .../210f221a2b7951e6b923a583e33fa859.html | 402 + .../21366b6d26099eb84405c27adbed5a75.html | 419 + .../213e00ea0ddd75982e7e19f614e908c5.html | 419 + .../2159010c157ed648011788148e598a33.html | 419 + .../21d85e78074831e8a2b85bd6dc54e6eb.html | 343 + .../21dc1e872beff2210aa899f2d49a2ce2.html | 402 + .../220e966f6f4bccb4695fddacc8d74269.html | 450 + .../226fd91ed0bcb0a9ba367ea5ec0ac3ac.html | 347 + .../229cdfe921fbf1768b0051820d62184e.html | 419 + .../22db054d3e8770bdfe26e8b41f934b9b.html | 402 + .../232cf306625a0263d58b34171fe362e9.html | 419 + .../234d9448d77cdb4e4d4387ff2ac78284.html | 415 + .../2362b73658985f8a4e4b8294cf346b57.html | 402 + .../237a43ba868c6c920d8ce325368f2a1d.html | 402 + .../23a0768f01ccbabf5487315fd4c555d5.html | 402 + .../23a6a04d443f04f3187e63da508f7f2a.html | 402 + .../23ac4f62fe4ed4ce76d7cf65bca3af25.html | 402 + .../23c1aac26f47869ff00947595b1b3834.html | 402 + .../23da6cb8091e23fa2793501ee3c6ef83.html | 402 + .../2433890d6636fdbefd8a0a156e861811.html | 402 + .../243c1b72a7ee5c112d9261244aa298e0.html | 402 + .../245f11fc3d0d9a835a368c096c0a02b4.html | 343 + .../2467f8029a96cc66874251878ca2a63c.html | 402 + .../24725f22d7d4d3c8b9d839c178fcbccb.html | 402 + .../2475c248ab0e744ad13c8427b9cba0e4.html | 402 + .../249dbefd43e65f8d9ad3c148886a55c8.html | 419 + .../252337c625b14499b0123e98a2b0f71b.html | 343 + .../253f8b544aea98e0c2ec579722ea8bd6.html | 419 + .../25939e1c109b408703b2be54908a4003.html | 402 + .../25affc2a408e8fc7b8ed42122a662ebd.html | 402 + .../26061f7c81c44b51584c9ecc23969809.html | 343 + .../26312230555bc2746cd63d3048aa8cd1.html | 402 + .../2667cb6fb1055266377d9cabe369495e.html | 402 + .../268956b34d17632b58c1be72427272eb.html | 419 + .../26960d32231706f44b6e77254d628351.html | 402 + .../26c52ed1b2f98ce15e4fe00c2385caf5.html | 407 + .../26d8099812c379cec448e1d549dee375.html | 419 + .../26f0a218b2aa56d89cdc69647eeaf82b.html | 349 + .../26f69649909a2cda95a20a23d6727aab.html | 450 + .../2730da71eca1fe14b6a2f6e7abcccfd7.html | 402 + .../275371c4bf0ed338b4e9039b202c4829.html | 343 + .../27663187617eca38262dc18c4af98333.html | 419 + .../279ec68b9f1301b39a629fba2cf04924.html | 402 + .../27edccfb3b4df2ff1bd859ff07b9c56a.html | 402 + .../27fa8dbe981edd3a531ad9a64b64031c.html | 343 + .../27fc5d7c59bfe6baeadf94e1f63ad393.html | 520 + .../280bf057219ff67b6d1298e6cea19a57.html | 419 + .../285a23b9b9c0bc77f2ea403a30d26c8a.html | 402 + .../2887c50cc9d4998f681dcc5be3d960c5.html | 402 + .../28a10f4cf0d4deec2b82f11feb536d19.html | 419 + .../2946761d820167be3c3ab799ed4d9a91.html | 419 + .../295276c85d9891f43780d31e11e708c5.html | 402 + .../296419f7b94a5f1d241a638d5f7a3f05.html | 419 + .../2995abb64ee013126f2e123a0dfba573.html | 402 + .../29ce6f9445a634a884c0bc2c38b34a76.html | 402 + .../29e09fe60f0b7f659c4b36d0afee93e0.html | 402 + .../2a9daa0ebe6c131686ca12779bd59ced.html | 440 + .../2ae6e60e44704cae514912a78f438353.html | 402 + .../2b06db0ad573ff0cfd7ca2381835f689.html | 402 + .../2b24899e1f12fdf2d677c26187576d95.html | 402 + .../2b2548a0f652c92803d834cdda45e4a7.html | 402 + .../2b54f4b5c843614daa3b8b3ba8b4193e.html | 419 + .../2b862739db03447a0e02cff6dc5622df.html | 435 + .../2b9fa359daa68c2a0fc7fc896fcf13b7.html | 402 + .../2baaf49077df34a613c960881676062d.html | 343 + .../2bf202dc3d214ceba325e5552059ec11.html | 402 + .../2c5c141f9fbf2dd6881a4ede2b172314.html | 343 + .../2c885607d32e685c884be088d3a6e76b.html | 402 + .../2cdfce726870bb1cc26eada094d274a1.html | 402 + .../2ce1eafdbd88fdde25e27747fb7bde16.html | 407 + .../2d5bf8be3d80f6305c740e1d127115f0.html | 419 + .../2d68810b0d0c4b0d278fc16bfad37ea7.html | 402 + .../2d73820363628c18f058af259760da9c.html | 402 + .../2dd3cb3232834a6b125f60fcab29a110.html | 415 + .../2de1a1a11414ed67f84dfc6efac2e7f6.html | 438 + .../2e10a7e360174a951f452da0a0b1c8bf.html | 402 + .../2e173b9bc6777a1383b4694ed37ecb78.html | 419 + .../2e25208e715d59436de44b27a44ac697.html | 419 + .../2e447af7bbf653358676478d5b9c85c6.html | 402 + .../2ed814b1eb0435b4d95bf5d9834fefa6.html | 402 + .../2f13b5a8014891bd8aeab24fdbbae145.html | 402 + .../2f1eff87acd52465ff6d4e3ac2e60e40.html | 402 + .../2f572180d8483b0855fa17dbb52be9bd.html | 402 + .../2f6f465a10f0f751b20f2b9fa6ba785d.html | 343 + .../2f89c448e2d27fba3fe2b80141fbfee0.html | 418 + .../2f8dbb2af3ab150e8d2a3dbb79d57426.html | 402 + .../2fc5d10ed30626f42b62bffae1449723.html | 343 + .../2fd6b9481a7b30e89ec477b80f5d74d5.html | 402 + .../301efe54a29d3457e6f64439d034cfc1.html | 402 + .../301fa8a34766e022b91d47782a0eb9e2.html | 402 + .../30a6785552ff78bf2d4a2b56fe89bd41.html | 450 + .../30e588fec65d47f21c7393d412572106.html | 317 + .../30e7b10c45d83d395c9065e7d522f8c5.html | 343 + .../310340d9273a0fcde54e1436a63253a7.html | 402 + .../3127b5e8b9afcd79148641d02039a191.html | 479 + .../31a600f4e035c7656bdee1875ad11750.html | 343 + .../31ead21e06afc26298aa0b7e0c12372a.html | 526 + .../320ccdd717b1d3c1602f965834981ff1.html | 419 + .../324032f1575138205edf628e46d0039a.html | 343 + .../325e44da078321794cbce9b63df04874.html | 343 + .../32848042874b1a596561432caa3ee792.html | 402 + .../32d7a1b4118e89e761afb4bd1535397c.html | 343 + .../32db8ad50a649d659e8c619f571df87d.html | 414 + .../3341b3a4553e628f3511e71142194339.html | 419 + .../3359340e9f06e544c06382103b6667df.html | 343 + .../3368899a55cb104325a3ca3c45b58645.html | 419 + .../336b3c6d65e8d8f1afa31ae20f8842d0.html | 440 + .../3383324c9ad0ce1e80830d2218dfd3e8.html | 402 + .../33bbdec27a17b8bd242093abf45232c9.html | 436 + .../34b348865a8332674e2c7e9d50370a18.html | 402 + .../353c509c5b5bcba6c62513f717733ab9.html | 419 + .../3551222ab96be3dde77819d7f92a28bb.html | 402 + .../3597cb890f4035b1753f1f1ee656577d.html | 402 + .../35d4c11fc5b354780bf3d7c38003a93f.html | 402 + .../35f14fb8e976614d89f09421e8fb9837.html | 419 + .../35fa64601006bd687f12388153118bd7.html | 402 + .../36154038f4707406901f8306d9f4f691.html | 419 + .../3619541c6aff0a2641fe8bf67dd28616.html | 419 + .../361ecc03b0e61c2f457a2e170f698c5e.html | 419 + .../362bbf24871d8b3a3671e582f05e2a2c.html | 458 + .../369dfd55790c16101cc23844bf4adf48.html | 402 + .../369fdb496dfac3cdc35c1116943bae50.html | 456 + .../36af59e59486bf023f0b0c4ae8fd6d9c.html | 394 + .../36ebe6633b3489a836799cf75538407f.html | 422 + .../36ec5e74528ee9a2e564b63d29f8649c.html | 483 + .../36efd8f989eee51e8a88438f97f78bea.html | 343 + .../36f130bf6d3df1acddfdc52f0223e887.html | 349 + .../371c300b2fbd983a23941d1c60640e3f.html | 562 + .../3759fb92985a12b31125dcacb827ec1a.html | 487 + .../37915a03a37e1ee69eb2a7a29e40603d.html | 402 + .../379a4f9f5a91c19f5813e84fb92e6558.html | 402 + .../37c9a47b25ea8e878f51da6ece627ccb.html | 419 + .../37e2d9dfe3483d68b44218e6d34bcaf8.html | 419 + .../38224ff752961db85b13ae2797e06859.html | 402 + .../38343b14941c062c9015e3974951841b.html | 402 + .../3857bfbd5714843923c9df53ace5f78b.html | 419 + .../38587f33d8dd92dfb68cc4c3c676e2e5.html | 419 + .../3861074c1d5e911c0444972dfa5b3929.html | 402 + .../386d402c41239aa9ce3138dbcfecb60e.html | 402 + .../3870c69c351bd332a9f9697d479fe536.html | 343 + .../387478afff5f6a78354eb795bbc300e5.html | 402 + .../38876e19aab80e2dd8ee0b244200f584.html | 402 + .../38abe7d99428d99e6e690b64704af9fe.html | 402 + .../38c69294c112299d217fc9a5f729dbb4.html | 402 + .../38cb4d38a46f5bd5601628c767d2344b.html | 419 + .../38f0cd50425ea72051a394a2ed425939.html | 402 + .../38f2517875133911725d0cad2a8c07e9.html | 419 + .../390038ed8252d68ebe33bd740f0e156d.html | 419 + .../39081c09b2170695a9c61a48962ec0c5.html | 343 + .../3913669e4bf93a4748fac372ae71e259.html | 402 + .../39648ab4a46c6a2ae27264dad90fdd47.html | 338 + .../39758492db5640cf1f8478f196edc993.html | 551 + .../3994fbb92507d014aa41bbe0a490931a.html | 419 + .../39cfd126c769370ab70fff39f1894fa8.html | 343 + .../39d7469dc7c7aaa78aa1f269711de5ad.html | 402 + .../3a1ece376f0cbeb72e9fd0748ef6762c.html | 402 + .../3a3464a2a27859b50fee5ff286778d2e.html | 402 + .../3a45afb4aa1f2645e64f04d24e5b77bd.html | 402 + .../3a4831c36245207f94d7a76fa17b6d8f.html | 419 + .../3a58fbd92644e259e4d2de75e397b872.html | 419 + .../3a69214dd9a52e9e0617b3863a8a36b9.html | 343 + .../3a6f454a16dc4eb6005706d3d09421f3.html | 402 + .../3a775d750d7e2bcf731796f881a0bbb3.html | 551 + .../3a7e6d511304325a081e9c2ce7ba6bf0.html | 402 + .../3a83252ee8ba5d75a9ab198e9ccca190.html | 402 + .../3a9462557ef3868d93f06820c9fc0497.html | 343 + .../3ab1c4b8220dac7db47d9f3526086ec5.html | 402 + .../3ab38e425e748fee2fab2758e5f0b37e.html | 402 + .../3af2ef8f9357b8c52b64f9d099fdd43c.html | 402 + .../3af5ea4716a6bdcdb5593eb62d9fe016.html | 552 + .../3af80cc042cd28f573d294b27ef33c15.html | 402 + .../3b2cfbe85edac83c52ee2871a3871fa5.html | 407 + .../3b35256cfac3e2ef7de552f8a55e5a50.html | 403 + .../3b78739cdb4032f81c31a205f4a5c934.html | 402 + .../3b7b6895d4c4033d89efa325506f083a.html | 412 + .../3bba106dd89cfbb665b80b7085005439.html | 419 + .../3bbe68f38776205b98b05aa18397acb1.html | 343 + .../3cbb5658d125764e887a26d5293de781.html | 402 + .../3cf701ea92cc9bb83e6018dd7ea9f6c2.html | 402 + .../3d3704106ef34d371fd534a8c2f7739d.html | 419 + .../3d583c51b2d2bdd6b8b9b6e03cfc8a37.html | 402 + .../3d6df3c4ecf914af3143c0f65f067961.html | 456 + .../3d70b9be2ff60d898edbcda3b571f957.html | 402 + .../3d78477b9b8100d7fab8f94b6c39db15.html | 419 + .../3d866dbc23f140338a9a34bb70a05bcc.html | 343 + .../3dd2e49d41599c331b9275084a9e40a6.html | 402 + .../3ddc67040343f01dfbbe14ff7df0a8af.html | 402 + .../3df22a3ce5138fbe45e51f9f78eb982a.html | 402 + .../3e1882e7d31e3ae30c721f25495aea17.html | 402 + .../3e27e3140d2eee091c8ddd0f7be5c9e6.html | 419 + .../3e2e582bc84aef04c467e4252ff5ad74.html | 343 + .../3e3d1db40f4e6318490b311c3bd934fb.html | 419 + .../3e4aa5732e0e7f992b626dbb13279a13.html | 419 + .../3e521c88fb14a310d04645e9aba96fb7.html | 419 + .../3e6133661381b7648890fcede3a9f7a7.html | 419 + .../3e6ab2ce33701b6845cc6809200ced7b.html | 343 + .../3e95bba7d7f12a9ffeaaf3cad0033554.html | 402 + .../3ec281cfe4fef095029523cf4de7443a.html | 415 + .../3ed1d92f20c1a2252e262c40da2052e7.html | 440 + .../3ee818ae6c9bd7e11ec089321851094b.html | 493 + .../3effb50b361b5e00f99243a9cb3965bc.html | 419 + .../3f0ad2d810028d52c2c844cf8f7824ec.html | 402 + .../3f1aa7388076a2cfacc9edf296143e81.html | 419 + .../3f216bd7999bb004b32837734ad20883.html | 402 + .../3f37d84312929118bde7eea2f375bf24.html | 407 + .../3f3c059566d2b14fc5c353d7f626b2cc.html | 402 + .../3f3ef9abf3d2871590e3dfa9d7bcd9da.html | 419 + .../3f7aea6cb618d84da0e2f0c3fdbadab4.html | 343 + .../3f7b90c9fca89a298ab4e7c7d662e59b.html | 343 + .../3f9cdcb7c510c57dc74afabc1a62d3ad.html | 343 + .../3fa45fcc2f4be5188c0b7b04be4e3245.html | 349 + .../3fa51210e706aa8550e7933bb41f4458.html | 419 + .../3fe24c3491f5d338fe385ac2e199e5a5.html | 502 + .../3fe9d31f893b857f5cd073ee949150cd.html | 390 + .../400907f650dd7376d9d8b86dd22214eb.html | 343 + .../405cd0ddf2fff0c98f33b9bdb4883baa.html | 419 + .../405e3ec539575c992453f2c096d860b8.html | 402 + .../40978f2e33f996c8afc2b09d3006bcb3.html | 419 + .../40a3cc19e818cfc3b0828c8a326d9171.html | 570 + .../40b4744b500108403ab15be99767f426.html | 402 + .../40c7fea8f8437dfc92f51f6a0d27794b.html | 402 + .../40dd78625a24ccf827c484b31374c2f3.html | 402 + .../410d5d9b21716886b10a55c208b4564f.html | 402 + .../4125ada28546f64b0a1faca9023a6314.html | 402 + .../414d643c48e603d427eb104550082377.html | 402 + .../41515af04a5d4262a044738080aaff7c.html | 402 + .../41963db2bb3f5abcb78acbaca78cf37a.html | 402 + .../4197618cd46d2db5cc5f8a4711310854.html | 353 + .../4209354a52c511e4fda913e417abbe49.html | 419 + .../4232d7d3b6030a860088d03085de6e7a.html | 419 + .../4236b009900ae9f24244d42cae8800ed.html | 419 + .../42378fa576adb442331c6a6003136388.html | 402 + .../42a937886ad1e7416759df5800be9246.html | 402 + .../42b9384b73f02840e77274b49dc60500.html | 412 + .../42e9cec5b18ccfc48dbcb8d64177b512.html | 402 + .../42f2131db5d32e61081d8abe6f09d323.html | 419 + .../42facd9c5cbc3353ff2d1bff34aea06f.html | 402 + .../42fd6ab13d5f054dbb78375c00bdd07f.html | 343 + .../4307bdbbb9855580283beb98878f4984.html | 402 + .../43141b35bd3e108ac97ab7cd54ee00d2.html | 412 + .../4314c1482a291ef501cbaebe75222193.html | 402 + .../4323069cfc9640314abce0f13b6c11a6.html | 584 + .../43b727ac38acfe76a016e61962ee1eb5.html | 402 + .../43d8c1611a800bc7b4155d331e5a34fb.html | 415 + .../43e928f97c52eeab7ae10469e409e0d8.html | 402 + .../43f2a029d5a43004c18bdb4fb1abb24c.html | 419 + .../4426e2f74e82e0bc367c37c24e5efe05.html | 402 + .../443e83e25373b14385d3796f952375a2.html | 343 + .../4440581d437d360e0aa11105b1f705a0.html | 402 + .../448d3206e681924bedde69b511a55c07.html | 402 + .../44d6668b25dcacbebbdd9afe26895499.html | 402 + .../44f10f9566d80eea64bbc225bff7d8d3.html | 419 + .../451b162d9cf822e19cb1b2af9cc546c9.html | 402 + .../451c70e702e9866810e2753086b97b15.html | 402 + .../45455dc1b93e25f3d013ccc5995da97c.html | 402 + .../45798c81b263501c40acf160ece59cc2.html | 435 + .../4582c98170c1b49fc05cb5016fe43148.html | 402 + .../458b028268c8353678303a345074c8af.html | 415 + .../45e58a7ee56a78f49305ce198e0efb3e.html | 402 + .../45f5d4691aad5f36b26792dedbac0bfe.html | 402 + .../46198b621922b88dcb8b4ab74746c82b.html | 402 + .../4675b270bf6913f1c59c59e259b9ad58.html | 343 + .../46997039b2e36d2219f8deee8361d8b6.html | 402 + .../469e87f8967539fe0d99f03b051da40d.html | 419 + .../46a72fb3639f2d6d8845209650f7c128.html | 399 + .../46a7b0fcad04de8a73019798dab84ad6.html | 422 + .../46bbbde1d3d18b44c7013f823276b419.html | 343 + .../46cd62c28c5514cd843dbbbe91f8357c.html | 402 + .../46cd7ee72c22209eadbfe5e231840294.html | 343 + .../46f8c5af95476336d8ac17920aa78925.html | 402 + .../47665a0c8c104b48b923c28723f72b65.html | 402 + .../4785ee3344b4825edf4aef0c54c24e20.html | 402 + .../479340e4434c2b7860404acfd6203ecb.html | 419 + .../479a8d3ca5fed82046f9867ff37418c0.html | 485 + .../479aeb596e98986da79a53fd5a58340b.html | 419 + .../47bda583dc2fee445b4d761de9e6b486.html | 418 + .../47d2886bcd16d50b085dc62ffc8f2c1f.html | 419 + .../4841a88ae5b095edd4d6f377fdf31245.html | 419 + .../4853ebf39b0adf67fd356a85aca7a430.html | 515 + .../4874c8f727e7f58a9dd9ad265e3d4bf9.html | 402 + .../4892786a2d7e18bd07ec297f95949221.html | 355 + .../48c9ec13e5ca5d2339e1566638ea7334.html | 402 + .../48f435fea56c199681875eb9b24edd26.html | 343 + .../492c18914c8e2487ac95cd3397ec447c.html | 402 + .../499480b09bfbe1fa88a3bc6224235067.html | 419 + .../4999558e57d51918765af91e120c3edf.html | 402 + .../49ab040caddebbbdfb77f798d0a0ce82.html | 343 + .../49ba67190561502dcc59f37557f9fa6a.html | 420 + .../49d55d7b6395724dd2bf8979a087068c.html | 419 + .../49d9820d2cb5299dc19011e2155f3d53.html | 402 + .../49e6b0a7d2ae9a43cb3f5c04af8f0a40.html | 402 + .../49f2e917526b89864b3f6b5681d9f9ae.html | 402 + .../4a20e5664bb1ceed45ae08c1dcacbe1d.html | 343 + .../4a9deec81e6f7aaedf8c08afbd86cbcf.html | 402 + .../4acfc984d902dc1933d5d5191acb8890.html | 419 + .../4b2f1e90c820933ea089147de8b555b7.html | 402 + .../4b444f278a0124202eb10e9beb629464.html | 402 + .../4b66a299ff1e1420de1c4c4ecf98b9ee.html | 419 + .../4b7eea618d1e475b852e38fb58d69447.html | 419 + .../4b8b9312c32580d490448b6b030746d9.html | 415 + .../4b8c730e022bd1e40244caf915724a01.html | 415 + .../4b99baf47649e80e7759a35964c8708e.html | 419 + .../4ba5b0784c64c5fc8793537687d78547.html | 402 + .../4bb542b73f8d2c4dc284f2fd78c977b2.html | 419 + .../4be322aef79c0084ccaed25a2e553117.html | 419 + .../4bee01039f3da6e55750a0a2922021d3.html | 402 + .../4bf2408399265322afe89766d5bbc282.html | 402 + .../4c042951730db2cce95b3934f350b33f.html | 419 + .../4c1d7e9b448b0fbdde8d6491114af659.html | 419 + .../4c3d4332b4d481e12a64f2b2dd59d253.html | 402 + .../4c3d4d95b54fee708dbaf4d3251d74d9.html | 392 + .../4c41d9f2298b29dadc917aa1cea4f26f.html | 343 + .../4c8be821151df33ec285486b42508f3d.html | 419 + .../4c8c1e7aeca716953fef0910dc5ea506.html | 419 + .../4c9e87ac213fd9b853db4650b2bde5c4.html | 415 + .../4d09fc947454f39e602c264b04d9889c.html | 402 + .../4d21633311eda1f30c96d5b4311081cd.html | 402 + .../4d4a6557f19341aa7d1ff9a5974f52d9.html | 419 + .../4d6d095b242e64893b888ca7d6bffb8e.html | 407 + .../4d80d417c8000706dbb7edaa65b5c115.html | 349 + .../4d9fe3ed620307c0f4026f581b1adf1e.html | 402 + .../4e1fa2eb96c12a3cd526e136042b6138.html | 402 + .../4e2ad97f9f465f0660ab333bf7bf49c2.html | 402 + .../4e9dd7c2ad1921be81d47d60b329c0d1.html | 402 + .../4eb8263776fcb815ebd7504b2f74cad5.html | 402 + .../4ed5ace6b5668bc1a7fd53a8d2447631.html | 402 + .../4eff5f6f841deb77ece97c98c8e1dc84.html | 419 + .../4f646af023dd9bea2efd0b4ab1c0a643.html | 402 + .../4f66e3836dd340af77b0e958ee88c62b.html | 402 + .../4f85fa68a0bacb3b3b59de7b28249d6e.html | 402 + .../4f90a649181aac63caf6637dc7906eb4.html | 402 + .../4f9c4c98f940a9bd5c315d0376b939f6.html | 402 + .../4fa946271a6929249146f1f7ff050b3d.html | 419 + .../4fad2db3059750ceb5136bd76af2b36f.html | 402 + .../4fad34a184416fdb6f9647ce7d636d49.html | 343 + .../4fb3fb5d9e60fa3d7dc11a02f15fab7c.html | 416 + .../4fbfc00f55a1873ca0d351eb7df44349.html | 415 + .../4fe3ad80944702091c6de9cc1d2bc38e.html | 419 + .../5008904fbce2aeaaead4fd098a082aae.html | 402 + .../504151fc3993c9111eb7cca1d4bd8186.html | 343 + .../50428c36eb64d874b69817e4f91d6f7b.html | 402 + .../507316102a09da50a3a384992aea85b1.html | 343 + .../508daa4310865e5471294746f3c114b6.html | 402 + .../508fe9916e183daefde37d978350d888.html | 402 + .../50c94d49c4f3c594d8dd4cb8c67e2b7c.html | 494 + .../50ec50dc4973124f3357e8ddaaa35223.html | 402 + .../513d3fc959ba97f63afc7538e3cc4aa5.html | 402 + .../51f5edc823ff1cb215ce49b5175c3ff5.html | 355 + .../521ada0ede7b04f46b932a04b3e95ae3.html | 402 + .../52622b8685074b90c8b84c89c9bcc105.html | 372 + .../5267ed38f2ab5da7858d7ce69b70fa37.html | 402 + .../52b72947597e1eb8edbe531f304802a4.html | 402 + .../52c9dabba4d8e43f6641273e54cbbfac.html | 419 + .../531e1a0a3af0e521659620f630f9b965.html | 402 + .../533539c40e2f436cacd6f5cb63b8d368.html | 402 + .../533cc42c82b35f77d8b9076edddf614c.html | 349 + .../5352781dc48cdbf9e61e14e7bfec43c6.html | 419 + .../53587186c1c9b901a08e3087b70dddde.html | 419 + .../5359d9429ae9b9e5c22f64c22ef4a52a.html | 402 + .../538b954053f58dad6ca48ee1883835e6.html | 343 + .../53c2f510b0b84df0598d832ceee2ae2e.html | 402 + .../53e57cdd2f5704c09cef74991889b70f.html | 402 + .../53e7bf64e35ef8ba9a6c4848aee567d2.html | 402 + .../541e9c3567c43a1d5193963ab927b0aa.html | 419 + .../5471d78388067e777fcc3b45aeb2d021.html | 402 + .../54e2bce410774a7534ef5114723e9c29.html | 343 + .../54f2b2455cd35c31c485523e1ea9aaa8.html | 343 + .../54fbf232e8ee0978a015d3904c68f9c3.html | 402 + .../55059f34c380386137c1445dfb78cfc2.html | 510 + .../552698d9688576091cfefdb839ef19a1.html | 419 + .../5541c323f937abda33d6dadae4cedc53.html | 331 + .../55503044f6056ca833de6ac0cb10ee2c.html | 402 + .../5574c976c8fd82f819548ff05180aacc.html | 402 + .../557633afa63f676085eb21465fe1e101.html | 419 + .../55a1ea61adb93d82180fe92bd70df0e2.html | 402 + .../55a7b61dc2eba15c3f98ed730658067d.html | 402 + .../55b8590cb14ace98c807dfd72d3a1220.html | 402 + .../55bf60075bf7a6937e02dc4dca1fcb15.html | 419 + .../55fd31c41183952f97062701f0ab3503.html | 419 + .../5645e0f19e205fb6a80ba09a15baa2ad.html | 419 + .../566dc4c2eb5e62405748edd8a23f7b80.html | 321 + .../56aaccda7419501c29bd4e14da25a231.html | 402 + .../56e0686ceef01f2b9e3d14d08c1dabc1.html | 419 + .../56e37b07cd1c6c53906e6fc6f815dc20.html | 419 + .../56f366085e37c7b7911dc33e91f254d7.html | 402 + .../570f16285d62d73a2d774f0ae90bfa5c.html | 419 + .../57109a4eea39512ca642b319d20103dd.html | 343 + .../571bf29265e313d5f21394c535c6d566.html | 506 + .../5736244f884406b943017aa39ea7b5af.html | 493 + .../57649a626959fd0a76dfbb12484bd560.html | 402 + .../577135d0397e93f600807f288faa80ad.html | 402 + .../577c853cfc9c13b400122c492cc3e640.html | 412 + .../57e41674ebfadd698205e7ff20acd3a0.html | 402 + .../57e49138e2708293c723ff5862c2db1d.html | 404 + .../5823bf3158da0c280b5a0508e305b99a.html | 402 + .../58341fc66cc305bef4c3b53b970a7497.html | 402 + .../585f877eabd5dc7bcd0a97dc34de37d3.html | 402 + .../587a2fe7f134e8bd7b089d751990a378.html | 402 + .../587fe6308e4744edfcb340d1de196765.html | 402 + .../58a4d2e5371472c2dd93ffc099fa2187.html | 419 + .../58a51eb70c7dfd6210bd6ffd60922475.html | 419 + .../58a7e9f01adbbeb7149a51e440961a40.html | 349 + .../58cfeae64fa36a7df5c9ae66690fbfe9.html | 402 + .../59034e14a1ff70892ded8e93b2cbff45.html | 402 + .../591be56177008b3fdcd8a8e188a699a5.html | 419 + .../591e7c92627e72f6385f800d095686f5.html | 402 + .../592f2e8f58d54aeb490f6265b5db6c8d.html | 435 + .../59cea33763fe478285b999cb0dac1840.html | 343 + .../59d253aad5f03a2f7a5b11c6552d2d2c.html | 402 + .../5a24d57f6dd45afdb4b57ba6079b2555.html | 402 + .../5a34652e61d14473341d41817db62b90.html | 419 + .../5a743b6df1c34dfa55a2901492b39083.html | 343 + .../5a99ad5bd40668c6ab3ba6c43dd4d780.html | 343 + .../5aa7a8f85fc87b62f1a8312d9718b71d.html | 419 + .../5ada2e76c2f5a18e2027b3a8cb19f5b4.html | 419 + .../5adcd2d86e95f28f331218acfbcb69a2.html | 435 + .../5aed048619037fd409f2563cc9ad7c15.html | 331 + .../5b2ea38471f13d73aff3da64b3583ac9.html | 402 + .../5b40d509f68233bdc1740b87ec92647c.html | 402 + .../5b91e8a55541a1ea74abc8b5ec818c45.html | 419 + .../5bd46556b00fe73355c2dbbfd8d8b743.html | 394 + .../5bddceaa2d1234f5551eeafd67fd4dcc.html | 402 + .../5c3ba46a6aa4c45f43f6211efcf126ec.html | 436 + .../5c4d400d9a0ba1a67ccaacec42878f35.html | 402 + .../5c7213e06487cad0f7fe846fdc3faa5b.html | 402 + .../5c7b162d10d20fa81377595dee3cb625.html | 508 + .../5ca7bf366f6e96fb4f8a1b673c0c9a99.html | 402 + .../5d0888b036bca431c000a5463f5ac011.html | 402 + .../5d29493a7cfe15fa5c4851543ede1e6f.html | 402 + .../5d42b7cd6b9122ea68ef010ce8158de5.html | 402 + .../5d5c2fa3213442a0ba485e101da16535.html | 402 + .../5d7f7b2a435011dd6a8d8d7c897cb5dd.html | 402 + .../5d8270929a3ebf138127907c38797268.html | 402 + .../5d8ea677c6f3af8acda9011dbad4ffd2.html | 402 + .../5da945fc607e3afee89bcc9824273db6.html | 419 + .../5daddaee7b89651f93efed07b52ebc60.html | 419 + .../5dd9fcf590ef73e2b441761dcdfe5b5e.html | 450 + .../5deabf2b2be337cef393615938ed51ef.html | 419 + .../5dfb81c33b5d3e2133dd0b64963ad4dc.html | 317 + .../5e071801a8160767bdd4f9c607334482.html | 349 + .../5e2ef011d06ce8319720b5920ef2989a.html | 402 + .../5e3aad043322f2f5b2acedbc3f2b9fb6.html | 492 + .../5e5c04b979b2db964c5715aeb2976efc.html | 402 + .../5e8d5f584ac0dd2ce0f7b80b9bdd3769.html | 419 + .../5e9415f4c89ed5f4bb8574d6a9829793.html | 402 + .../5ea8baabd9316c91752f4a397f7b0096.html | 402 + .../5eb79fb6e9ba48f75bfa02db67c65d5a.html | 402 + .../5ed6f8bd8558876c0d0ae22b05a44614.html | 419 + .../5f0ac78787a8baedfb228b5236f16c01.html | 419 + .../5f0fc8c9a8d68e2d81f1ae09f555f3c2.html | 419 + .../5f3052edb93ea83eb0bc3f6b5a2e7b70.html | 402 + .../5f42db891c7cab53e77218be0d6a066d.html | 343 + .../5f4bb59309e6fd16ff354fac114ca2b4.html | 317 + .../5fb81f571e9e478a71ee95a98bfaa977.html | 419 + .../5fbf2cd376427e361d43dad16bc5146c.html | 456 + .../5fd7099b44c2e60f64faacf64a025a80.html | 635 + .../6014ad3fab95f3c7ce1eeca3c6ade623.html | 419 + .../6037732d8eb06db04e9a41ca3e18dc51.html | 402 + .../6042bd1ad4836106d060799041a2f8dc.html | 402 + .../60648e818218cd36de72316be0493a7c.html | 343 + .../606976142b92c30df8a10a398571f41c.html | 494 + .../606d6f80511f0d0657cc34ab014a850c.html | 415 + .../609b42e6cd5f59a264549e8c61847ad9.html | 343 + .../609e4b01d74fa0df03212588cace4ea4.html | 402 + .../60b389fd7f33339ebd810aef6c726737.html | 419 + .../60b6a081f856f0e93288a567dca0c5a4.html | 419 + .../60c3018ce8a416fa7e731132ab1bd60f.html | 402 + .../60e93945910aedc35015216115c9f26c.html | 419 + .../611e48bf819c3d24c36c042fc2b75374.html | 412 + .../6144d03793d7f8b6f26787af23e1aefd.html | 419 + .../618bb5bf61fe2d78d68fd5f2c6833cd9.html | 349 + .../61ee68bdbed6d08ff45507ed24afb24e.html | 419 + .../61efc38c4515bced685b1a983308aa41.html | 343 + .../621424f0e4705a72829485fb8149567a.html | 415 + .../62289bc99778b82890cc702d60c7baab.html | 402 + .../6244df9e7b2bbdadb586f3798b80026f.html | 402 + .../6248d76c2960b9571136f95f0832fb00.html | 349 + .../62b6339c3010b4f88bf6fdeaa54185a5.html | 402 + .../62ede64afe3a3131ff854bbeac9ca20f.html | 419 + .../630e685537bac32c74bf34d8c1cb455d.html | 402 + .../6331b0ac3bc94d714384126f5d9534d3.html | 343 + .../633841a2bc687327f0b2dd1fe4583efa.html | 419 + .../6341313ef93d5d3e3216ccb4a96fb624.html | 349 + .../634987cfe09d28e9b041455111805d1b.html | 402 + .../6366208c0384daf8ae268569f9d2f844.html | 343 + .../6389d6b780f2b89dc580978fd072e534.html | 402 + .../63a5af9d5a22400e825837f443fcfa1b.html | 402 + .../63b52bc080e83a3604ad37ffaca96447.html | 402 + .../63bdd9a1ed32573d420b74add866fc74.html | 343 + .../63cce1f681c3f34bc9ca6a41f41b3959.html | 402 + .../64015fa39f6169d00e171f0a563a8e55.html | 412 + .../640596e4633b3d16372d41e7744c9b27.html | 402 + .../64136c670cfba27ccda044dbdb16cf20.html | 402 + .../64299856471ab520366cf7d225abf189.html | 419 + .../642c5c2cc3fef16284b4db46bf858450.html | 402 + .../64554ee462cf97bec23e5430755eff86.html | 343 + .../645a0f474f7a1b85d8f60473749d485c.html | 402 + .../649bd8581d1206e0cb8a6c4180e91faa.html | 402 + .../64bdbb35e4135f74528831cd611ccb3e.html | 419 + .../65050f9329f23ecbe43d6d6d1929a253.html | 402 + .../6507dc9541a8ed8d8ee52ff88ca32048.html | 499 + .../6508d6381747583eede472d7cb949f1c.html | 343 + .../6513dc6e54ce44742616f7d398ef30b0.html | 331 + .../652079fc3fb3a7423ac97a24465d940e.html | 419 + .../652d2134d4b4a3161786510e5274ea98.html | 402 + .../655c9b3ad8761e536ab0735f60439e0d.html | 343 + .../658f642c97886dc88647bf43bb584046.html | 419 + .../65afa674298d18cd956580a7e590edad.html | 419 + .../65c09bc51cbf71b5d1f0274562aa291a.html | 402 + .../65d458f5e18b9935d0044ecc1acbbed4.html | 419 + .../65ea7351bac5bc4ababec6c044d351d3.html | 343 + .../65ff1e180ad1717a5cf5a96384d27d62.html | 419 + .../6627df546bf1392cbdd181cea5e7e945.html | 402 + .../66771f9b37cb1c44748291b136e1afdb.html | 402 + .../669d2f5a708af47ebafe934c8c6dcc2d.html | 343 + .../66c5db9de07c76e1b7444f602a1e28f8.html | 331 + .../66dac264ff7a58f829633bb33acb90ab.html | 459 + .../670030583c63a4b8fd7051dd2dd229bc.html | 415 + .../67114b96b7afe323068cffd200af0fe2.html | 419 + .../671d773dfeebeef5cbe51d00f9e07eed.html | 440 + .../6723a9945b9974b33198ade989a6a906.html | 419 + .../67623de938d9f006e784d8c597fbf5b3.html | 343 + .../679ba992c86785408950b3595f3afc7a.html | 419 + .../68349bca69c1c7b57895f50233175342.html | 343 + .../68382121cda796b4b594866230798698.html | 419 + .../684261b1b4af46cae1d36f75b08acb1f.html | 419 + .../68477d1ff16243dbe7cf5e51a4c1688b.html | 419 + .../685f70a12514e2d9366ad8a213651a52.html | 402 + .../68707b1bad8a56d85418f26b21501d8d.html | 476 + .../6876e839968975853e9346e4bb007249.html | 450 + .../689b5ce25f8d766dfa93fead30ec0249.html | 331 + .../68a1b593e57c379f4e113dfedb8b187b.html | 402 + .../68f9de74306cfbcaf6d4b10ce4cde466.html | 402 + .../690011eb8eb436df4bc3e93dc95d063a.html | 343 + .../691b2d52b4a087f46f46943d0cefae0c.html | 349 + .../6940e15db00ec7119957ddce7aefa3a0.html | 343 + .../6977ff072726dae4def8384651ddaa7d.html | 402 + .../69db8973ec6dc42a8e9685a6a33ec792.html | 402 + .../69eef3ea9f7e9ae3d086af1f3099cb88.html | 343 + .../6a23d874ad9e285a5e40f5dd37a6f22b.html | 343 + .../6a25496164773bffdf9c3bc30c9b50bc.html | 343 + .../6a29bea56334c39e51602ca56285b73f.html | 321 + .../6a2eec429f8f7d383e3b41601d59f76b.html | 426 + .../6a2eef79c988861d973460670707d7be.html | 419 + .../6a31af6a1f5ee1002a45b6d4156bf14b.html | 435 + .../6a4361334e8b649314ed681b9e6798c3.html | 354 + .../6a75b50f51ef4dcdc92a0ac0bb9eaccd.html | 402 + .../6a89bb881b975592c46a3e385fd9ee2b.html | 402 + .../6aba05634afeb4fd935056d1d61cd8f4.html | 343 + .../6b03587bd8ab466faaae50e7895ac91d.html | 402 + .../6b5e179bbf456cdba4a10b56eb6bdb91.html | 419 + .../6b87ad8902bc1f1dd13fbeb875a6e5b2.html | 402 + .../6bd3cd02a9e8265116344dfd0589baf5.html | 419 + .../6bdfa7111970adf2c8322b42516202db.html | 343 + .../6c034d9e3ede2c95bdaa1ae5c015b4cf.html | 402 + .../6c12874fa647caeab0a513df3e114ec2.html | 396 + .../6c17a1a47c5a8ed9e8a43a3c5aa82c77.html | 402 + .../6c2964b38e2231b5c685906fabb2d512.html | 402 + .../6c69e839b15477de0afadafc42fffe0c.html | 419 + .../6c7d0836193b6a647c16572f64dbc886.html | 343 + .../6c7d5e2f0c296fd289f9822f7f90d47b.html | 419 + .../6c8408726cd5b06c522429672f34f081.html | 402 + .../6ca8230b4e6914468315588a78adfdc1.html | 402 + .../6cbe8962588cb2f254b92960bc0cc7b2.html | 402 + .../6d08b7b8b4487de643668069844785ba.html | 419 + .../6d188029ef5f789c2dbab9c732104217.html | 440 + .../6d506647c77c2329da648bc02d8b9a3b.html | 419 + .../6d9b563d0a2ceccbebde91c2d6976d9f.html | 402 + .../6da39bab2d4658c04e02e908f68c971f.html | 419 + .../6dc68e77fd5ce1f99a9e121919981a73.html | 419 + .../6de448df049ad410d7a2e820401e6791.html | 402 + .../6e00fb3dfbf97f5a8b071128fc4295de.html | 402 + .../6e12e6d93b39936b03cdf1f909ae9b33.html | 415 + .../6e19de0922dd171503417ff841ce7d9d.html | 402 + .../6e2618818b8cb3065a349896a4109851.html | 402 + .../6ecba04b7100f9747e2efc41f46dc93e.html | 343 + .../6f1139a1f45a11494769b16df3594d95.html | 343 + .../6f2bcc6e2102b31b37b3ae410b59c7f4.html | 402 + .../6f400dcf88d4f4f800810746f11c122c.html | 415 + .../6f5c72af2909b1945120c2a9f0637b9c.html | 419 + .../6f84d7c0679cea8fe818fe98a524ff15.html | 402 + .../6f8b57fe4d8fd7fa366b3ec3f97e766f.html | 402 + .../6fa7ecf53cc2648c66f15d1046f9d45d.html | 402 + .../6faff22c886500b27898f1b9f96c863b.html | 402 + .../6fcb0bd02ed0c787a074ac9345cde8f0.html | 402 + .../7010d7145e042ab490579b87053213d5.html | 343 + .../701e35fa0ff5a0ccd7080ec6e09fad38.html | 419 + .../7028e241a6222b91923a2c52d7cfe85e.html | 402 + .../7046ff799b39c140e03cfc9e90de297b.html | 343 + .../705b3e4eb2e82fa51c7043de9cf52ec3.html | 419 + .../7090d229bc69876e5b3a00fc9fe9a8c5.html | 419 + .../70c19432c1bcadcfb19a7aaa68883522.html | 402 + .../70c83a29a411150b0a347af9da937d4f.html | 402 + .../7111de81229134b9647e2271d2ddf619.html | 402 + .../713af3221357b20a5ca564f2e0610821.html | 419 + .../713e0a6105d0576001719f46acaabffc.html | 402 + .../7142311dbbe4335417459f8aa62cec8a.html | 402 + .../715b4426e8036373884fbb58ab678776.html | 402 + .../718eb80d6322b88312f8113018c4e272.html | 402 + .../71937c288e7c30f8a6b82acb768cd8f9.html | 402 + .../71f1404ae547b6df3571d8aed80f97d3.html | 419 + .../71fbf9038914b12487e9916aff3c6532.html | 343 + .../7204235636d3eb0c65cfd44d51c1467a.html | 343 + .../72069d6e4beeb48b70b3454bc913d2c3.html | 402 + .../722b32d49b91d82c5ca2d9c87f2bd82a.html | 402 + .../722f199eaf8ddea5641759a4d143cd7c.html | 402 + .../72510468946b4e68ebec290297bfdeaa.html | 419 + .../72687d6e84116da9cf28eccff3711472.html | 402 + .../728ba0c9856a59b22a40f8391ecea617.html | 402 + .../72973aecdcb744a1c2a7ce3b9831f7ce.html | 402 + .../72a1201f4dbaaadaacde4974beeb603e.html | 423 + .../72b1672acc81729cfb548b6ad68045e4.html | 349 + .../72e47b8d675c71b4855a01f50973d04a.html | 402 + .../7303481c1fcfa9ac8f96a38530787ab2.html | 349 + .../733daffe881f0fb5619f7fe9bbf66147.html | 419 + .../7340a3b340e749ed4b239523a9b5f1bf.html | 343 + .../73abbe51a89013dee90c0ab6b6ee3fc8.html | 402 + .../73c6f5ddafe896e8cdec523665ec5f8a.html | 343 + .../73c91b5f51a8f940e8c8aba09871fca8.html | 402 + .../740fc64839562d8b731638e693596822.html | 419 + .../743580d6b145ea4e45595f96b7d91458.html | 402 + .../743989ddc8ea56152bbfd970188f3359.html | 343 + .../74843569597f36e19175c0da38f04c8d.html | 402 + .../7513da682672956e072bbbde2397148f.html | 349 + .../752db2556747ab0595008a9db6b51d9a.html | 402 + .../7533a0d2f02410a94019715935d259c4.html | 419 + .../75be7fcbd95a9a22b006170699e39122.html | 419 + .../75e1815d047ccd3cd6c4390f8da3d290.html | 419 + .../75ebd6657bd3c090b066e20d46d658c5.html | 349 + .../762503f592b71bac338d499a816d6561.html | 347 + .../76591bce738af4a745190d2e2ec4bae5.html | 402 + .../768ea87d7e3539fdb96f14e8f8749734.html | 402 + .../76a895743b76da3f7e4d9417f66f07bb.html | 419 + .../771edd9d1c92f43ea9f7ce7ba297244b.html | 419 + .../7735acdbaafc4130efabc79c5bec303d.html | 419 + .../774777a3ad217504310595f657466bd4.html | 419 + .../776ce662a2fd9ce5375da7365c7a5060.html | 419 + .../776e482a9eccbb463e88c55bbbe7bae7.html | 419 + .../7796134060843a6e42689a1df2fe7bf6.html | 419 + .../779ab8ca8a1c581a052ece1414bfafec.html | 402 + .../77a84631ea4a300b592dc649ec92d45e.html | 402 + .../77de8c736008aa8b370b9b599e32c32c.html | 419 + .../77ffbe55daeeec1a86c89147aba17700.html | 402 + .../78050782199afd24c979627ee5a61d15.html | 518 + .../780aab2063811a1f5f1a2d1fa1c9fce6.html | 343 + .../78458ae125f2699eeefd6f679965e46a.html | 407 + .../7876aaf9a4c41c1f005ccc80ef1a4d9d.html | 402 + .../78badaff41241c07ff29c19231333ae4.html | 501 + .../78c51cbb7450f99fe2bf25d32c766f91.html | 402 + .../790eebbf3d34e37cdbb3b24e7147b914.html | 419 + .../792168d61e4c18e871fe4f123fee6b8b.html | 419 + .../79641f30c88bbd2a134351401a0da684.html | 409 + .../79785cf84c1c208a1c0a502e67b0d0ee.html | 402 + .../798cdb8db8e2031662dcd8e2b267ae71.html | 402 + .../79b9746a528a00e47de171dd605ce332.html | 415 + .../79ec72552b13037342f28adfed2cac09.html | 402 + .../7a3bbda7afd18c42d6f8e6b3ebc9e3c9.html | 343 + .../7a531cccef30303716930b111d6e6898.html | 402 + .../7a59927c37aa768b817db7853b53d66c.html | 402 + .../7a7582c506881a94db8da21137a56f2c.html | 402 + .../7a7a8d9d20d00f70db88f89eefdee448.html | 501 + .../7a7be093e30f46df935cc2e491db68e6.html | 402 + .../7a8a0f803d91a59c886f6ad900f4d9ad.html | 343 + .../7a9a2677c775541abe40cda24af07991.html | 402 + .../7aae9a349dce04a5462c68cc9aa5a9b5.html | 402 + .../7afbe6f0eec2d305cb937a7de5159837.html | 321 + .../7b0b7518158eb42ce7ee884c70dea610.html | 402 + .../7b306b636d9acfca99bdc2fea2b8feb9.html | 402 + .../7b5f4e4a5397c3ddbef7c70c99146a71.html | 419 + .../7b8d8d052df647c31c5fedf0de67ed3b.html | 419 + .../7ba32f1f7de1c867ee3eb54c4a3a3413.html | 402 + .../7bd43eb28f4ce9e5f3a2034cd6afca66.html | 415 + .../7bde81fd965524c964a92ccbff4770c9.html | 435 + .../7bf01f00c2634c58321cd27df466e568.html | 402 + .../7c1ea0fcb191f30c8ba0fbe440a2c43c.html | 402 + .../7c333d313ddc2f0e0f1c6bc7d481a8b0.html | 402 + .../7c3711e771905ba27160304fc6df0534.html | 419 + .../7c7f1fb877a4d86009e01f0293d6f93c.html | 419 + .../7cbdbf21ab8a73c025e82168e392c180.html | 419 + .../7cca037d7711696cc49b648ead2b2d8e.html | 419 + .../7cd64f9fd8b1669bee3bea74955e375c.html | 402 + .../7ce8fa8d6c4e527d9c69f128b25a0b00.html | 402 + .../7d06fb0bd4170f2ff2e459d70d9de835.html | 419 + .../7d1eccddaf3ae88ea3ff961f953f47be.html | 419 + .../7d43b8cb1efd816b8bc5e492b60db2d6.html | 343 + .../7d59dc49bfa2c2a6861b3a6a50a8436c.html | 402 + .../7d746fadfbed13145261470ddfe916fd.html | 415 + .../7da21169908633b315862c8d64bb4605.html | 402 + .../7dafec5f0bb361f92e16100c159a1c83.html | 415 + .../7db7a5513627eb0f20b0d127cf5fb5dc.html | 402 + .../7db90716faee68d4a442e2c029efe85e.html | 402 + .../7dc1004f3eac0d20a16770b80eb4a2b9.html | 419 + .../7dc62671b1427f630fe47e16c6654db1.html | 419 + .../7de2e742c327adb33c30705672b5e305.html | 402 + .../7debdfb42a195fb83f2ffd92b85231b1.html | 402 + .../7e095e1a3906b3074a2154c29977cae1.html | 402 + .../7e1cd8c9e1da933e53365d71166cf93a.html | 402 + .../7e5c5ff561a0cc2e719e0eda5ab3324e.html | 402 + .../7e6b5f7d0a7bf7a6b61ab06732e63db5.html | 415 + .../7e8319ee35150db50932aaf0797f6c98.html | 419 + .../7e93b7fe995fd2ace47c8e1a064609e9.html | 402 + .../7e9ee6e346acdc14c152ad8208f39bd2.html | 419 + .../7ea4f5f139979f2c7d48cf9f7ec3185f.html | 493 + .../7ecea908680b881d767cc927a097bda8.html | 402 + .../7f15792a8fa60d5a6a6cc0b3f93eefb3.html | 402 + .../7f348cef485355db09a92326cb5c03c0.html | 402 + .../7f39b85cf3ce7766ad961f9e09c72da5.html | 419 + .../7f82409f40ab6e511ba68fdb760c1637.html | 513 + .../7f83f1f1ede8511fdba5c305be74deff.html | 343 + .../7f935236823383e1e7a651967b494661.html | 349 + .../7fc3001dbd7469604a183722623e59db.html | 402 + .../7ffd8c9a88ae591e01095d11d2dd10d0.html | 402 + .../8018722bfba74ad198caaae0b20e31f6.html | 475 + .../801aaa2038ceadcbc2767ee05ed4de3d.html | 402 + .../805858e739096170736d5d31eea7d3fa.html | 343 + .../8058c1ffeab683ae6ac2e908b9d34cd7.html | 439 + .../80a182a98dab2e23c973f833741ee39e.html | 402 + .../80b3c7621ff0cf68601142a0a4e399d8.html | 402 + .../80c6aee8d2ff74293d5253df5cf90003.html | 344 + .../80e971147cb7fb58b2fadc4097bafe49.html | 402 + .../8107f4ca06d43f5b2eef889237b7f2f6.html | 402 + .../813cfad0b24c3345dd8b0dcb3e625655.html | 741 + .../817967235916d89672dcccbbe794bdb0.html | 407 + .../81baf6afead83f5aad38834340e9d53f.html | 402 + .../81c1edd0a6c62181147c6f7b0e88bd1f.html | 343 + .../81c6e8658d10a682ea87b65cb267dce3.html | 419 + .../81e7a97609eb3a92b8eea9a0d639650e.html | 402 + .../81f7f6df9ad6449cdc1e1235eacf8764.html | 419 + .../822024f8f20bbc4b7a6473083c6d14ea.html | 419 + .../8272df9c2bdea17111fd3fc99e9e7179.html | 402 + .../82b706f55a8deff88c794ebf93e0aa5d.html | 402 + .../82c2931cbfc9e497ab02762de5d7a81c.html | 419 + .../8322cbdc2fa11f93d6ade675ae4d46dc.html | 407 + .../832a7523a6272ec97b82baf1edfbaba9.html | 402 + .../83362e73b2c15fbe8ed5ed187583fbaf.html | 402 + .../833dc662eb7ce8e167a892e5a7d69ff3.html | 402 + .../8346ab571b3a6b16181e922be4c321bc.html | 402 + .../834b17d5787704fb5b557b7b870c8605.html | 402 + .../83560f5d3aed92c2b1785fb4bdd87bee.html | 419 + .../836a202301ccaaa71bd760b1fc4602eb.html | 423 + .../837cca6f5c6ffb1db884c9957c9ab1c0.html | 419 + .../83924484d40c0080ed868476fd5b85c8.html | 435 + .../83a679eea3d472490fbbd33a3f6bdbdc.html | 402 + .../83ba7b1b81694d777081a6ff2083dc05.html | 412 + .../83e6634c08dac5457ef78be84d71fb82.html | 402 + .../83fb2ab39f46f2ca41f9cb6088a54826.html | 419 + .../84625d781e222cc9cd05e0db5d4dff17.html | 402 + .../847751a7fd5361ff0eacf8b858ed07f6.html | 472 + .../84abcbfe63a71550e95b699510e10466.html | 349 + .../84b804d05c2e87df5369a550d3e2e42a.html | 402 + .../84d0ef64183b55bd43284d8ac043576b.html | 419 + .../856c671fc85abc2a986d0202b3ed5ea7.html | 402 + .../858aba4286fe50b01ecd56560312439c.html | 402 + .../8590a88fa6775e4bd1783a0bff6b9949.html | 402 + .../85ae9b7918c4375d089403f6f961af22.html | 402 + .../85b3000ea7d4a55ffc26371b6744366a.html | 419 + .../85cd45151fbea250e1cd0da26a6fadd4.html | 402 + .../860fde308abe65a462c787b2eba4781a.html | 402 + .../86539b85b95f29f5a8eb2f6a67b42d37.html | 402 + .../86610545ff6588eca66610e41b26e1a8.html | 419 + .../8664fe849097809b1b8e41c9ce287b5c.html | 419 + .../8680b54aa607acb4fbedcc5e71a36063.html | 343 + .../86888ae95a5edd1707570553780673d8.html | 349 + .../86aa98de6c4dae155e1942dfab6171c3.html | 402 + .../86dbcca35a6a58b37f9c6d4ad5dc0fb1.html | 402 + .../86ebd585cdbdc21810789d28b1633edb.html | 343 + .../86f7451d0fbdd21af571ad572ff4e09b.html | 402 + .../870ecb7a6c86cc840732e72663d8137f.html | 402 + .../872107c655b64222a5fcbbe78191fdab.html | 402 + .../8785c191a560996e5b03598b52fb4a02.html | 343 + .../8789af1369e9c13efeb298197b3c6329.html | 402 + .../878d41ac6ce2cb6176d4dc89d168f139.html | 343 + .../8791467ce6fd8c95590b44a3d4d64d72.html | 419 + .../87adb02e94648aa0f97f547a959cd351.html | 347 + .../87b695ea7819475c0a48a1d288e979e8.html | 419 + .../87e7280b1d7187961dfc1bbbc10e2475.html | 402 + .../880f562184ffc8c074fd88362b766ea1.html | 452 + .../887262ae67612443c37a535a586c2b80.html | 499 + .../88776c4dfe3a70249434a4fc2da87d07.html | 419 + .../8882a90bf08540d8598e3b9465ff2933.html | 447 + .../888cfa9217aa86a4558cd65c4cdda0de.html | 419 + .../88acc7d365942a968623caace7f45dac.html | 402 + .../88b3f2b554c9dfd86b7055467d699d9f.html | 419 + .../88b4dc2dd2433d4713c5ee879dba3520.html | 343 + .../88fbd477ab16e345aa1eda738a9d8b40.html | 419 + .../8958739b0e0d4bee0f93bf57e26999de.html | 349 + .../8958b004cc79c096262a2094e2be9593.html | 440 + .../896788cb7f73713aed42db379469e302.html | 419 + .../8973bdbc81ee2bbef7e0528254e09b36.html | 402 + .../8978c95bb2d6876b7f6c8922b442bb75.html | 419 + .../897de83c77de902b21425451767270f5.html | 402 + .../8996fc31846f9d5cde6a4db979266a17.html | 349 + .../8a236934de7461817e3edecae4cfd278.html | 402 + .../8a348f2160c810ae49eb983f5fa8fe8a.html | 343 + .../8a54769e716adaef85bcf6ff997e231a.html | 419 + .../8a8e4aecf59ac4b007a018d66076cbe2.html | 349 + .../8a9d8d2586fffa53c37435d799b71a85.html | 402 + .../8ab269a69c218e234df18b6940889082.html | 419 + .../8ab8e81ff920d0c899b55eecabe21d7a.html | 402 + .../8ab9db7f1c7e52f0d96edc386266cf44.html | 419 + .../8af5b855ec8ae0b90b62fe084aeb7279.html | 419 + .../8b1357d1b7a34ff92a2ad193dc69fa79.html | 402 + .../8b24a7ce9e5da6f475bcfe9c400da881.html | 419 + .../8b5735b02708dcea43fcff612c0c06c0.html | 402 + .../8b947b66fb3467f30760db6bd3fe5075.html | 343 + .../8baeb0ee0255f265335b161921306a47.html | 415 + .../8bb4c086dda390d441591c764635b61c.html | 402 + .../8bb9d85ef912b42bf3cb0b64b9fda70b.html | 419 + .../8bebd7d615cab68c1fc20cb15b979c0d.html | 419 + .../8c088ffbb83c25880c2017fdbe41d07e.html | 423 + .../8c0995f22408cd91bc46ab050aee2d31.html | 419 + .../8c2a9e3e46c77f66ef94d7c66e84dc57.html | 423 + .../8c51333543f86a6a9569b79bff9f7792.html | 402 + .../8c7127afc4601fce7ffd758ee88584db.html | 402 + .../8c792c8bfb122a8af8b7e55a8503580f.html | 402 + .../8c9ba83ebb9b836a2f552015e95d804a.html | 355 + .../8cc353eb9595c8e5340d8bf00ac27f09.html | 419 + .../8cc8a1e13537e01f7159f5b913fd26c2.html | 347 + .../8d13ad9a8b3cb50301ee426fd60928e3.html | 369 + .../8d1837a81cf65833c01333219ee1e01e.html | 402 + .../8d1cc3ac66bbd8aee036082838b7876d.html | 402 + .../8d1de6d935c965309d9ef3bb1a8b9635.html | 481 + .../8d4cf3a9ec2d129126594cf4e2f7d994.html | 402 + .../8d53fb6f2e1c31dd8352fb13f0b8547e.html | 402 + .../8d7d2fc396a68e1e70361b0d5b672385.html | 402 + .../8d93060f6d7a7c6803e67fc2ec0f4522.html | 366 + .../8db104128ea37b4295c8f360e30faf41.html | 349 + .../8df02ff4adda1e6a5cf00248ec82d22b.html | 412 + .../8e005f760cd30d5339a4ada643d9b466.html | 435 + .../8e52d8383b7e54c6388b8ca43814fd42.html | 402 + .../8e6112926104cfab7014a043d67ad2cd.html | 419 + .../8e74d8eb060422c6a14c291d2a96c11c.html | 402 + .../8e961a861ff0ba5602a2f324cbe187b5.html | 419 + .../8e9e8b1cef06d59b48c14788a3d97f20.html | 419 + .../8ebf93c63b121a5673cf6bec061511a9.html | 402 + .../8ecf6f225473cb90f9c2ae88ad737fa0.html | 343 + .../8ee0b0f380ceb24ff519db9affdc6224.html | 343 + .../8f04af6d81288cb58b1ae1276962dad2.html | 419 + .../8f0d4cc613187c38ac61ffd1758c924b.html | 419 + .../8f0f7965f9cadbf38e6dbaf6d177705e.html | 440 + .../8f12d296bbe4ce45e17483afee1c8cd8.html | 402 + .../8f2843983b68ccaa4a3db26474543489.html | 419 + .../8f49259fbeba8a1f456880b354fded59.html | 419 + .../8f4e26d0f8dba4b5a4e2b36c8c02a9d1.html | 402 + .../8f52fa2666bf996da7aaf5b4d6c749ef.html | 402 + .../8f62b33038d0626988820aa26fbe79ed.html | 402 + .../8f783cbf0e2b652752f59cd64e8ff039.html | 415 + .../8fbbc9107239494d2e1bffa8f049f2ea.html | 402 + .../8fc6cfdbe07f2c72abd5eab0130bfb05.html | 347 + .../8febe29eb378e64a269bb308e4ea3459.html | 402 + .../900d5a34a50081f643ef1cdd97f9c37b.html | 402 + .../90445a68b831c415f877667e5a58d2e1.html | 419 + .../90715e0faa7f24688a9cb47e2acf6fc0.html | 402 + .../908120830746a85b94a98e9c4deac67f.html | 402 + .../90ae0e28ca8335d369b5d73eb7eb94a6.html | 402 + .../90d19b49d40cf0722e8fdebaaa108f96.html | 402 + .../910f8637ff57c253179d8c350a00a672.html | 402 + .../9112e33fa33abfdb8dbfe47fd47b8bee.html | 480 + .../911d4add2644383954db4a8a25ffc104.html | 419 + .../9185e25a419a349e89aef2b818f2142f.html | 402 + .../91e7f6a3c270ad8c64368238cc22ac87.html | 402 + .../91f422ae5ef3cf6797ad64433db99df6.html | 402 + .../92080af3a1cfc638127d85f3336c85cd.html | 402 + .../922b2604fea0999eb7912febd74191ae.html | 402 + .../9230af958e26c1d175ebe5bbea8870f0.html | 402 + .../92622a626859543825d4474f821f845b.html | 402 + .../927bd96627a59304ffd8efb24855b191.html | 436 + .../9283ecc849508efbe014c62c5361e677.html | 349 + .../92aa5d6dfbd5d4b2e4bb296c3ac70f48.html | 407 + .../92c3fb6dfef55f84ac951f586116cfb0.html | 402 + .../92ffccc4c8455ac9bfeb3b44fbc29e50.html | 402 + .../9305518b7e1892f3103aa74d98a8565c.html | 402 + .../9316b30aba1da2c1992c3f48f86c7311.html | 347 + .../9375585273d705d9a7c9d8a1bec52df1.html | 466 + .../93b4a7fc69c59be544a0a080df104f52.html | 419 + .../93becefdd6adf4248b8ba012a9121400.html | 500 + .../93dddc7b87e1bfff9f9e2b638499208c.html | 331 + .../93debad7ae398a5561351a1a429c7755.html | 402 + .../93f6acb19086465a9b6e10c972f0994e.html | 402 + .../9402c46d5845017ede75344f4f7ecfaf.html | 419 + .../9412e590b5262930491197da221fb57c.html | 419 + .../942da875e16c0b8029348cc91aef84da.html | 449 + .../94aede03ed385d61888dfa3ccc4a2dc7.html | 402 + .../94d2dcca95ac297f5d65c0535b8cfa04.html | 402 + .../952df1c244451913fc5fd3be3f4a3acf.html | 402 + .../953c03c8f244268e76b315cd784ce857.html | 343 + .../956d65e83ff2db75caaa6450720f79e3.html | 402 + .../956fead0ed72ebd69506162cfd625420.html | 419 + .../957f734957e810e5036c7ab29f371773.html | 343 + .../95840d75b2e90b11e4c4d0d6a6dee126.html | 419 + .../9589968de925a0de49e30a1127322caa.html | 419 + .../959af9bdae76c0cdcfe5a785f1421b11.html | 402 + .../95fd3c67ca7e8bd9ad350de26d560bd2.html | 419 + .../960f4fca9c04fd93233f31e4b6d42f54.html | 402 + .../961e158b052789fd8741634382512dc9.html | 343 + .../9651c3076d36878b2b7818dc456700f0.html | 419 + .../965b6869fc1452eb1d01cdca87b53e5d.html | 402 + .../9661749152138a3c85e7ce9d311178ca.html | 419 + .../9668ea9f5c99ff1c7934ae708d274997.html | 402 + .../968401d11dc50f9990a6a0dab34c2f61.html | 402 + .../9688ec93af0a246eb2b38313aa90cff1.html | 402 + .../96edd68687b488a1671ee607044e45c6.html | 419 + .../975393f28febd506c6f9a4bdd7d02929.html | 494 + .../978c1ca118f58de306058615dc949190.html | 419 + .../97b28ab5cff130374e423e6c169ecc7d.html | 411 + .../97b95b5c5b969017b060025824abb4d7.html | 402 + .../97cf214879837ec1a841189cc08d5452.html | 472 + .../97cff2ffaee331186e3a8db11d2867c2.html | 402 + .../97f9a12e04a6ebcee2308fe6fbdc7928.html | 402 + .../98216249c200a886725fa2b64b293549.html | 415 + .../9822835f86394719c1ac3762555fb77b.html | 407 + .../982e52f3885bd10523418fe7d8d8cbbe.html | 349 + .../98806786a7f8155f717e3071356d6b00.html | 402 + .../988fd9a0ce11866983766110a781b83b.html | 402 + .../98abe166275cea900469632f443a8ccd.html | 402 + .../98af837bfedb290bfb41d0f8b6dd48f2.html | 402 + .../98e3846e17b5f190615b50d0e69ce2bf.html | 402 + .../98e7ef72a5335699683d46993d230ff4.html | 402 + .../99021f62e8982de2d1f1ca97245462bb.html | 419 + .../990d7a6d6d4b66121ce2f9868f0ef464.html | 343 + .../992849198ed9ec3298881b0a25a48fba.html | 419 + .../9957ade9c136ccba10262f20b1c3864a.html | 402 + .../998c1c3018b16e96777b62320a15130a.html | 402 + .../9995756c0dd1584580f3f73854f2f3ff.html | 402 + .../99ce384c154aaa2e6cfc91211b87bb2e.html | 419 + .../99e18d3f187d2f4eca697caa97e2d21a.html | 343 + .../99ea68aecf50925ed45a87ec51f38b23.html | 402 + .../9a101e5b0e553a4ee3edf569464ea442.html | 402 + .../9a39c46c59af6274ee67dd3e27e46110.html | 419 + .../9a6a2c65f0fecfbf94214fe5dacc11b2.html | 417 + .../9a75470762d321f43986bd5936916083.html | 507 + .../9a9a3029fbb0b10780cd985110a9a696.html | 402 + .../9aced20f6faa8c3b8c80944065fda4ce.html | 419 + .../9ad7a3f464d60019a373c183c1d466cc.html | 419 + .../9aeb73fea3368954a985ad0bb44044f9.html | 419 + .../9aed3900eda1721915078df583973d00.html | 402 + .../9afdaeaf99916cb02ce4ef94ecfa5bf6.html | 402 + .../9b20ab86613668a6bf592d0fe3d2077d.html | 402 + .../9b250e30db89b68226ee37eb34781885.html | 402 + .../9b473c38b5df01fca3b097ddc8e43127.html | 402 + .../9b80365c2dc3542c3e3989aed1fee44a.html | 402 + .../9bbcee2e251aefab00dea7980fee5873.html | 402 + .../9bd026fddbe177016ed72c2dc721a7ca.html | 402 + .../9c06222653da1fc7e8f091042b5fdcda.html | 504 + .../9c0a880add3ee823aefae16fe418c32d.html | 419 + .../9c3c95a6f55ff41712acc294bad47313.html | 419 + .../9c46adce84e971fafda65de20a50473a.html | 402 + .../9c55bc5d6c8066b45735f86825fd796a.html | 481 + .../9c56853cb895fef1997f38d09d156ad4.html | 482 + .../9c5f4eedf6b4c21e591a2a651e451280.html | 402 + .../9c77d89de8418c23e57114f6d0c155a3.html | 383 + .../9c817b13c52de62951ae09053c981616.html | 395 + .../9ca1a7d42c4617860ea6fe4491e4f12e.html | 402 + .../9cea5be6013b80fc2fb2c13cf697ef84.html | 402 + .../9cf1007c25af265ae79d4dbec82bc1e4.html | 419 + .../9d0579931084862e973e6bf73c4d0cc1.html | 419 + .../9d09629b8740aca2f9c171b068063153.html | 402 + .../9d6a52bb4bbb781e074da77f7191f579.html | 402 + .../9d7f9c497d0a014f7b5f778fda784e9d.html | 402 + .../9d83d1b61b8db7d48a9ea552102409af.html | 343 + .../9d9c79e73ec1fe28eca0b138e6569cea.html | 402 + .../9df4ad06844a8cfd1252909ec1aea85d.html | 402 + .../9df80117367f6ab16205b1e407bc7f82.html | 349 + .../9e1886412180dbb7dade859648be1db1.html | 343 + .../9e2c6ad8a7f1276f9fd489ac211f7a94.html | 416 + .../9e340024e3e06cc7e99051be4f784964.html | 419 + .../9e6e4cbd2b2afca073a372fc26e01ec6.html | 343 + .../9ead09e26dac432fef1cb6b1fff84466.html | 419 + .../9eb0df421154776c1e976861d7019072.html | 419 + .../9eda4f77421f1974fe6156f9875a8a8a.html | 402 + .../9ee6bef5d3ce7df6a0cb0de8945416c3.html | 402 + .../9f01adebba87d03cc42f31a6df26ecc7.html | 419 + .../9f1aab4bde6c272591f1751dd50358e4.html | 343 + .../9f50ca63e40022b3b2d9c26d881bb6c4.html | 402 + .../9f5e6b29ef45e239c5384c6cf35da69c.html | 419 + .../9f89eb8262f052c223150d7dbbde7571.html | 402 + .../9fd094e920c5e4d11d753afaade7e1ff.html | 419 + .../a0141b53773abc98214a8513f7e5eeed.html | 419 + .../a029e211634e52eada293dac8700be19.html | 402 + .../a07515fa53ddd9cb479d1d5d4af7224f.html | 331 + .../a0908078a00f8cd78b656764062a9c74.html | 402 + .../a099006589cd27ee19a9e64cf14c6eca.html | 402 + .../a0b2a2a3b07160b46f2be67afe4fc859.html | 402 + .../a105d0fe3d5cea9b47c7afa6c8557686.html | 492 + .../a1229cfb12abf3c0929046fd547f5345.html | 419 + .../a144e1ce4fd79cce4ab8fbce5dc6f04b.html | 402 + .../a14c6f5006df291a244d7aa0a55050b3.html | 419 + .../a167bc4615cab9a96ce85ba687c7df19.html | 402 + .../a179330a47399e51da4f7c67a26f624c.html | 402 + .../a1c5d58050b49f7cfc2b5de6b9352f77.html | 419 + .../a1e02a63b414efa0d2d34681244f2b55.html | 402 + .../a2130ddf8dd1b94f8054f7beff636c32.html | 402 + .../a23c5b9bd5eac02f52c56c35bf10824c.html | 402 + .../a2573fdff5ca932d6f2ebbe104715b0c.html | 402 + .../a293dadefd34e66600cdbc1288986a62.html | 436 + .../a29d7fca7b974fcc0d5f650c778967f4.html | 402 + .../a2d65517e0d804643c12d5df8f10d118.html | 343 + .../a2d8574625fb41d5283d2027232757ad.html | 419 + .../a2e251652b63e3d1fc48a3f3ec8b0d6e.html | 402 + .../a2e6ad640a780c4802296a931a5e2695.html | 402 + .../a2fdbe99d2a53fb84118d2a9ce46f29b.html | 402 + .../a309de5a9a6642a02a077eb82eeb8f41.html | 402 + .../a38d6bde5570acb6915e5998c8e3519d.html | 419 + .../a393b5d68008c7a8f1b045578bdfebcf.html | 419 + .../a3b7660419efe543795fd3d223d2daed.html | 402 + .../a3e5322c18dbe822df10310f15eb20bc.html | 440 + .../a3ee12e3b29e487b9e5bec995e46202a.html | 402 + .../a40ab0a2ee46d67846327b1cad580ff0.html | 343 + .../a41818884a205b0bf873ee45b258004c.html | 529 + .../a45b94962edc72551c47f99322a107d8.html | 343 + .../a4606a82fa614707056585bc7b11c66b.html | 501 + .../a47184837219aea9ccabc89e35d90216.html | 658 + .../a477d690ad6bbe6fc047428d3ab754af.html | 343 + .../a484177a9a1023d25d34d009f77a1a32.html | 434 + .../a4bfbb5ae93384d9a636d338b5be635f.html | 343 + .../a4d31026b46a61294b13b057899650f2.html | 402 + .../a4dfe98bc6fb53bae1d39a500b10ce03.html | 402 + .../a4ef7d6cc4d03a2d16c85ca8fa4ef434.html | 419 + .../a533cf1f2905ecd2c2e1e145cf6d343c.html | 419 + .../a5645e3d9efbfd34426269f2a9adb658.html | 402 + .../a5b96ea6baa365812d11f82ccfb1d272.html | 410 + .../a5cd295af4296fbc376a726a362495bd.html | 402 + .../a60018cc480f5465268442ac61d4e37b.html | 454 + .../a60fb8bc0997ad4a09204c2d2e69903e.html | 402 + .../a614fb1b281705d3afca465decce6f40.html | 402 + .../a61957d07e763540bf7433b6ac40a323.html | 419 + .../a636bd587986682971f3f1690b14ad35.html | 343 + .../a63c24010ca5f61c047e5d2285736fc8.html | 407 + .../a6509db15999b078f3437117b4ddedbf.html | 402 + .../a69276c7962435f893c1ca01ff1f40bd.html | 402 + .../a698111e5d01b1e4cd24381e42878559.html | 407 + .../a6a3f12d8c2054f61fb267b0088d1d71.html | 419 + .../a6b7c15ea29bdb424d6842a9934c9b30.html | 402 + .../a7741c26c6b2f4377b8f92bab668769d.html | 402 + .../a77c937d421806c0efe9333d802d9d6e.html | 419 + .../a78a6334ca73a8e8d30cef48c6544106.html | 402 + .../a7a4c18216243ec3c8b5d261f348b4d7.html | 321 + .../a7c84037cad392524be133761b1b71c4.html | 402 + .../a7cdd805cb8c231119bb50b2fe446c2e.html | 402 + .../a7d57dc36f724c02e5b653f24986cfb6.html | 402 + .../a7e387e6836008e652c37a915d30c255.html | 331 + .../a7f27c5ac2dce9656c920729f9daa223.html | 402 + .../a7fbd983699d3bdb55da895e079f0862.html | 402 + .../a80129e9d05f9fc8eb8fc07e4f30bc89.html | 402 + .../a80e3dfb6dfe79609404bb0c83231b0b.html | 419 + .../a8114ca996f6ef9d3dd1b00c84d76898.html | 419 + .../a84e08c5eee615beb71453612f3c6906.html | 402 + .../a84e57615442e5633a60a6ed31029126.html | 419 + .../a87b4a7c8e02b3cefec350503df1d72a.html | 402 + .../a8aead5d04280c45f12c39b4e5dee3fc.html | 402 + .../a8d713a91fadd36895fe38a36479a97b.html | 511 + .../a8e28abab8aa18481c19d5b69aee2938.html | 402 + .../a8e3ee43ccf9c240859db674eb83dd24.html | 402 + .../a8e8a1218b00b9045b5c4afd64f73ab3.html | 402 + .../a90a53a6723f5e6d7dcc6b8051d6ae61.html | 419 + .../a930c9cc4013879f811f6c3d14c9cc2a.html | 402 + .../a93138e6eb3c7dabb41c87224a1b973f.html | 365 + .../a93b87ecda7e9d79514042b900993122.html | 419 + .../a954f6bf7d9243bbe3486ead1b1157d0.html | 402 + .../a9b25ea3502b5187d5488221e998e9f5.html | 349 + .../a9c4d762c012ab17d06d00b4bfa29fd0.html | 419 + .../a9f90dcf117c13030ee274852b0b66f8.html | 402 + .../aa446e1685637d5e140c774510d231eb.html | 419 + .../aa5e009d088b4ab4b089054dd1ddf13e.html | 321 + .../aa6ab8441c635ce955bc904b6cc64d4f.html | 343 + .../aac23fb2d9b6c1176f2d1b16ba21c232.html | 402 + .../aaeef9710962d4d5bbe59d2b69bbb1fc.html | 402 + .../aaf2e1a48f06aa3474f1fec3c8b4affc.html | 419 + .../ab142a386ec2fd02875205340caee412.html | 419 + .../ab9b46a790d33d17e6ee96da0239ebbe.html | 412 + .../abcaa0ef89bc673bfe078b466bccddf6.html | 402 + .../abe39e5fe28e0f8bbbb2ac7a0388ee20.html | 349 + .../abf5515d6d8e67ac21e546f9bbfc697f.html | 402 + .../ac2032ad95957ef4b6cee6bfec57477c.html | 419 + .../ac262c2d3a8bf8fbd9fe904c4b5a9501.html | 419 + .../ac8269b433d3bd7f9138573618bc9c41.html | 402 + .../ac8e5315ac9da8ad181eef5e73626bd1.html | 402 + .../ac90516f493e08877340a59a5136997f.html | 402 + .../ac96f002e27eaa4ad7f7186c189d3e6f.html | 343 + .../acb84d1eaa3f58533614ac77cc530c2b.html | 333 + .../acbcfb7de002c3d1edee4058c6e7ba2d.html | 402 + .../acdd7a9f8cadf6caced1c4012dda638b.html | 419 + .../acf17c3a75bcabacbcb34a57a4772bfa.html | 343 + .../acf97a91668f0c3a77d9737ec714300b.html | 402 + .../ad2259ac2d4d0f5771570ddebc7ee9e4.html | 402 + .../ad228021824417a7bb255f308f9e192c.html | 419 + .../ad27ca0685e9b991bbbbf28d3bc5e8d7.html | 402 + .../ad55033cc2309a3a9e4e804d67ee55f9.html | 321 + .../ad6b8daf19e9d8949cfbd69a57bb49f8.html | 402 + .../ad80084b342fac7800a4cde42eeabf6e.html | 419 + .../ad80b60baa1d36f550201b6cbbfaf1ae.html | 419 + .../adc1338e0d6d43a3b7177c5b92398867.html | 402 + .../aded99086a599e94c0dc18d7c45952a0.html | 402 + .../ae2c1eeebc1e08392efdb921baa9f89b.html | 402 + .../ae3b575430c8572f482e5a64e010a788.html | 435 + .../ae3ccaa2ac21b5d615a0ffde11ddcaef.html | 402 + .../ae4867b4b3cc519128881d7f4e6d16e1.html | 402 + .../ae7569e50f60e44e774e7d437961c91d.html | 419 + .../ae829c909b4afdf0b4e5e2ac8712d682.html | 402 + .../ae9b0684f0c1994b89b3f29317c7db8c.html | 402 + .../aeb1e5634b60b1f35e096477f31e3364.html | 348 + .../aee5a411f56a6d7192d3b99ab7614fc6.html | 402 + .../aee6a3e6de2382cea2625a3d9a71b960.html | 407 + .../aefe5a98768246657522f2499b8ba899.html | 402 + .../af0f64fb43ae2c821fffdcc14777ab60.html | 402 + .../af4fc638f414030c399588ea8e84aac1.html | 419 + .../af6d0b04ad9f522c3eee942c390a9ef7.html | 402 + .../af6d70c0ad317772a08cdb52ea279b23.html | 419 + .../af91db4057deb6552b5a12e76dc12b11.html | 402 + .../afa35569bdc6202c04499edbafe4412e.html | 402 + .../afd703e18245e11ac776066c89a40488.html | 343 + .../afe66c8ced927b3c041f1814baa2fb97.html | 435 + .../aff41b6ca58b1bc6d25745d5a21549cc.html | 419 + .../b009b9cf95a8dfc000d76196d2eaf2a1.html | 402 + .../b01168d6e1774de09bd49ca511499df2.html | 402 + .../b04a3a89b6738348a56da1d800bcb9b7.html | 402 + .../b06a5e0a04c97940f01fd800c04a27bc.html | 402 + .../b06f5a69a2e9f285c56567262c88a173.html | 317 + .../b0701fbc1cfe8fad427c607efa6c4181.html | 402 + .../b0796dd845dfbe0e2c1439b690e59253.html | 397 + .../b07a7975f78acb343f0991ed70b0e910.html | 402 + .../b0985b71c0cbb15aba0b8b6597c8d27f.html | 349 + .../b0aa44ca55a3858c51d2d86c854d411b.html | 412 + .../b0cc9f6f4d4df675f041ce7b94d18fd1.html | 435 + .../b0fbb5256dcbd9f5925f477b3f972f52.html | 402 + .../b0fef7dc7755be4eaa15e0a7f4f12827.html | 406 + .../b18e0e91dce2af59407b4555fff95f88.html | 349 + .../b1cc179750d7478da42c374e551b414d.html | 617 + .../b1fb3efbe5d2f1f552ee04194a5e707f.html | 419 + .../b228c804526c235811c254669ae88b77.html | 402 + .../b230a21537abfc8cefe2c12c25bb760d.html | 414 + .../b254816f16d84cc4704eaee53420bac0.html | 419 + .../b26738a6b40d4a61914240e9fd1d20ff.html | 419 + .../b2743363efd24773abd69b142f634b92.html | 419 + .../b276e8a6b91f1ba29c3ce1c1aa5dc332.html | 419 + .../b27a54594d082c064e5647763c0a06fe.html | 402 + .../b29240362acdc4aa55f356c57f280735.html | 320 + .../b2c57d05ec72185c2458ccf2f946dc4c.html | 402 + .../b2f85f0a59485f2d3e1d71141aed2968.html | 402 + .../b32fb940be11b01ed227171f90530b1a.html | 419 + .../b33a51825dbf1fe1f1c4ec712a245654.html | 419 + .../b3462f6d71e989ee922f1db40120b1d0.html | 402 + .../b37631325aef58f4f8d1cf87a33dfca9.html | 402 + .../b3afa759ad0b1cee6e3352760dc48dc4.html | 323 + .../b3b36f825f580eddc5003175f70d1013.html | 402 + .../b3f712c63e1ab095470cab84aaacf261.html | 402 + .../b420eac2a073c70683a2aff98facb804.html | 402 + .../b4349129cca02a3a2d3ff80cb7f36f27.html | 419 + .../b43587a6a5e45406abfe403d54813405.html | 343 + .../b46df938367240524e20172eb54c73b1.html | 419 + .../b4924ee46f7fecd6f8ead195b6b664c4.html | 343 + .../b4bc8356343e393b4beedfe614553446.html | 402 + .../b4cf1e07ab8015824d28d57ce5e78d72.html | 434 + .../b4dd456a3b6e5551e4855297a9be77c2.html | 435 + .../b4de763b1543e4e541ae1075bc51e3b7.html | 402 + .../b4ef26d988932b51e41b18238a9661da.html | 402 + .../b4f424a50b2cd0f91c02f84594a57a83.html | 402 + .../b50bb7cb03f26cbf68b5d9c58d88c2e5.html | 402 + .../b5134bfe900d6000a44ca155731661d2.html | 402 + .../b524019e369364808212def4d1a9a6e8.html | 482 + .../b5331614c40134945e25890a67d25ca6.html | 402 + .../b536b7ca6190709eb8af06e69a2d8d54.html | 402 + .../b55f7c4fd5546f140f3b3f7bafafb20d.html | 402 + .../b5bebe48c49c17de6ec6e94a26a12bda.html | 402 + .../b5dcafd85744eec26dab8b4b2c4a2777.html | 419 + .../b6198e5a4981c20f4227f62ef31612de.html | 343 + .../b64879c58ebbae3020c6dbcb667c4018.html | 488 + .../b66991fb677f70035c10aedeabf4e2e4.html | 419 + .../b66dc8dfcf488925cad885f4d6ba41ff.html | 331 + .../b6d258d34cdf6648c1b3c7a7ef9bf21d.html | 343 + .../b6ea4f04de79d1150195582c93d7ac7c.html | 402 + .../b6fbacc11038bb7fe4012c9c130882a5.html | 500 + .../b73b92d28d682911e8b15c716f2ecc48.html | 407 + .../b773a435899f443e19acb787eac8ac31.html | 402 + .../b795e22adf615e98e9b9281ea63525a9.html | 402 + .../b7e42457018cc5c74579f8b43d3acf7d.html | 465 + .../b8065528ff0866debf4a0cff3e147f9d.html | 419 + .../b80d7493430809276383961c385ee860.html | 402 + .../b869be6fe71475d3fe13c51f0024f1bf.html | 435 + .../b88f7454f3653c0f4bde2de780f98ca5.html | 343 + .../b9028752f48c4fc155a99ca48fbea3eb.html | 343 + .../b93a4aa5ecca2453c53310562bc9c7fd.html | 435 + .../b93d9d68702a34dae936486f2af275e9.html | 402 + .../b981ba669c0e879541c2cf16c5fc41b1.html | 601 + .../b986c87a53d443dc96fd5618f309bfff.html | 419 + .../b98a8eadad93fb9c4632817b5ee8cf6a.html | 402 + .../b99d7d18aca96bbe8ec2e18bec829eec.html | 402 + .../b99e7554ec614098ff9e08f70a26e1ec.html | 419 + .../b9b8b36c4c411102dad2f782ee63ff91.html | 402 + .../b9d4a05e8e9382e4ee0998102d82d16b.html | 402 + .../b9eb806f1517caff6bab11898790dcd3.html | 411 + .../b9f465c166847f04c445425fb5a55d39.html | 344 + .../ba0b2503ea2cfdadce543dc91ab0424c.html | 402 + .../ba120655ae0c8a7eb4eaf046b21c5f97.html | 407 + .../ba1c32ee87b83f40c54cae72da1414e8.html | 402 + .../ba26b012a17869af0cb975f6f8c7bcae.html | 402 + .../ba34c6518c5863b7d430601eae0f980c.html | 402 + .../ba395f8cc73eea85b6d397b73756512e.html | 402 + .../ba72e8b427ca412c06af06c82d373fb9.html | 331 + .../ba77acebc769fc221e9988e278625017.html | 402 + .../ba80c4b4ca1d51e340d0385d269eafbe.html | 419 + .../babd427722148f926383f768b7ffe206.html | 402 + .../bae7a2f110da6c8036b99753c42dcf46.html | 470 + .../bafb8bf3933e0d1881f9e9b21347f4b1.html | 419 + .../bb03fcdef1d8117d1c3fa179bb25a78f.html | 402 + .../bb0fc2b3a3aa51af8540f6bfc5ff3c28.html | 402 + .../bb17008318f6d1c8da5778a4d495b418.html | 419 + .../bb34f4efaf7c99b2aa5fe3c37f25bac1.html | 419 + .../bb4d3ee4f73c29bde810d84d820777c8.html | 359 + .../bb5a0e821d35146502e601959f106ff6.html | 514 + .../bb6daad3c14f3809ac04dce5ab36f2cd.html | 419 + .../bb9e1bebb1411e4cd60b796a92673b44.html | 343 + .../bba71dde2c5eac1071d0596188f60b4e.html | 419 + .../bc15d559252d930245fe7a5e58435cbc.html | 343 + .../bc26d89a0537fce69c51a73794f1042f.html | 343 + .../bc2f60c2a04be0c34a68dd57f38382b6.html | 402 + .../bcb0a4963b09b9dde247fc2f00d0db79.html | 343 + .../bcb7ce47826f2b2842799270e0088aad.html | 343 + .../bcc1ad526d0055eaead55a934a61b383.html | 402 + .../bd28013485d36b4a56d2e284d577f815.html | 402 + .../bd288775c49225cf4cdd0834aafd3b28.html | 402 + .../bd3a346926feadd098fe7bc3e5d9af38.html | 402 + .../bd49a66486f814a48cde6e50eb7db47b.html | 343 + .../bd62bd8dda4abb84541147e66200303a.html | 402 + .../bd8aeb7c65b69547aa65632957008578.html | 419 + .../bd9ab2cd7440ceed6d93de7efc261d6c.html | 471 + .../bda3ea497013c2fb93a1d9cf5d5c9fc1.html | 402 + .../bda94fc3af8505762f1e10feef8bd571.html | 402 + .../bdc6abfd7d7119760c2a059d3bc2ad61.html | 402 + .../bdf66e01df2fcf6fdba5c65dbce4598c.html | 402 + .../be5a7a35980f01c4f0ae9589fec0f675.html | 402 + .../be653f12dac76fd779cd14c40bc893b1.html | 501 + .../beb03c927d42802e188c7161968d2782.html | 343 + .../beb3709f698b0125986b5914ebe433ca.html | 419 + .../becc6fa46b6adfa86dec05670657dde4.html | 402 + .../beded1da861ee3eb2c9e3c091905828a.html | 403 + .../bf04255f69b63d4d1b90becebe68cc50.html | 402 + .../bf38eb5620427358f67b79cc3f33ec9f.html | 419 + .../bfd4ca91cb4d70ffc4fbaae3bac4b7c7.html | 402 + .../bfd857bcb59c02d34eec9e0133205457.html | 402 + .../bff119177ab6b354e9532ca7faf8a684.html | 402 + .../c00190ac67a3ceef1f6d0d841100a767.html | 402 + .../c012770b500af89c4f9c3620b4e457e1.html | 412 + .../c0333980d1ec911e697d66ec1a7cf64a.html | 349 + .../c03a8b649da3ceb96c2a205e2e5507ca.html | 402 + .../c04056344c7ce9c5211e023df065269d.html | 428 + .../c0518f70651c4abb134315b4bdd355f1.html | 402 + .../c05377f18dcb77525294cfbd5c4a78a1.html | 402 + .../c058eb6e4e0e8f5ec2d4d2fe0d1a199a.html | 331 + .../c070d6710d6ccaf09dde327b339ca5c1.html | 402 + .../c0cfd0fb33d5b2a3c3fdd2ae4082fdd6.html | 419 + .../c0e89dbc6458e19cde045359f92db0d0.html | 419 + .../c102d84039184645d0441eedb9c5d02c.html | 343 + .../c1493c9aa8bbf49c6165094020249475.html | 435 + .../c1604d4be7d18221ee7f202c9dee2d3c.html | 413 + .../c1706647dee28e2584e3e33c9a7b2136.html | 402 + .../c186131d238cfe9f991edd5751ef3b37.html | 402 + .../c194791d574718a77cadd5b63e94ea58.html | 402 + .../c1960721ff9201e41a5b490c9b732f60.html | 343 + .../c1dbb935797e2e81e27eef0ee4569bb6.html | 402 + .../c1ede8d083a70c77c766dd303ac629e1.html | 402 + .../c1f29a6d2c77bf12ddf958204041bc4f.html | 343 + .../c1fabed9be8de143b687e1fb7586b60a.html | 419 + .../c2028ec1ab8b96bed95d70478f52cd51.html | 460 + .../c2b1755f1fd57f48f37c471be8481f05.html | 402 + .../c2ca925646d2036ed68d052bcecd3696.html | 402 + .../c2f629d5f6c489e704c93439b0b50a06.html | 419 + .../c350c06fa083d28b2f34eb91158bb24e.html | 402 + .../c37874d72771207e93ed408cd5bea157.html | 402 + .../c4091d3f81c19c5397b32ee72418844d.html | 419 + .../c423a761423cc1bf243293b29853ee9f.html | 419 + .../c4d342fb8d95459f2c54111f40250d1c.html | 402 + .../c4f5b8ebbd5c96ed40356abb99e65587.html | 402 + .../c508552adb5b33e38bba3c1c275e9ed1.html | 419 + .../c5237a40eb50716cb49108c8ae2ef819.html | 402 + .../c5297f837119c3af5aef9fefd92e92ce.html | 402 + .../c53a1f67ea692bc3510a4e3af3f0f6ee.html | 419 + .../c548524a4bccede0ae43ccf726712277.html | 419 + .../c576650a550263f7355fd0ac438a6937.html | 402 + .../c5a298a0d1cc9c98b1502dd75637694e.html | 402 + .../c5a9ab76d63b366866ceeedb57edb125.html | 402 + .../c5aade075ac9adc039c74ac01f6f0fd1.html | 419 + .../c5b418088e52f404a1f47b9d28cc83cf.html | 515 + .../c5e3df13a38c9089e4510fd73597aafb.html | 402 + .../c623ed903568fe6395f20985b7041daf.html | 450 + .../c6270d6dc44d02953b68222e7ae2e039.html | 402 + .../c62ddcef75e050f272ff1343b9b3aea8.html | 513 + .../c63d2917c99ac022d864ba27deb21f91.html | 349 + .../c64e5f2988a55c824e5f26b1773434a0.html | 402 + .../c65f59ef034563bebe9e35c6698000cb.html | 402 + .../c674a3a6c9ceb13c56376c291d6d372d.html | 419 + .../c6a6e52485fec197872bb5d1ce060faa.html | 402 + .../c720e07fb77ca1fc92d79339f9a18ccc.html | 402 + .../c725c762ad013dd2b02a485ec5db9935.html | 402 + .../c768773ff4a3f3e392490fb4e6e1b0f3.html | 402 + .../c798042ec649752f2829432e3774f1ea.html | 343 + .../c798b6d2197d07eafd88c0b991db0ec0.html | 419 + .../c7ad530b5039be62efa6fad88dc7abe3.html | 493 + .../c7bfa377357b4271b6d32d45b007f086.html | 402 + .../c7d758be7ec2f9b83dbd1e26fbfd3556.html | 402 + .../c8351c3caa2daa09b565eac3d3436c44.html | 343 + .../c83be1c6add5d07e214a3b3405cb6443.html | 419 + .../c8795d4e0edb1303b22f586dce10e917.html | 402 + .../c87f1d0d7d9bf8dfb823e7a35ce476ee.html | 402 + .../c885b9dc7c02955aec4a56ccfbfc1550.html | 478 + .../c8aba3e8361eec78b7bb06b52ee151ed.html | 353 + .../c8ad10dc9ead00fd51e4dd25d821a8d0.html | 419 + .../c8e9551b6cd4c46aa984a955f61f28f8.html | 321 + .../c905717e109b42b176f541dbe52c45cf.html | 343 + .../c91c290a4c32972e69c9f07f23b82597.html | 419 + .../c93cb3f357ba7436af6275c6e6b56a87.html | 412 + .../c96865ff3d702c2bb91ceee107ea407f.html | 402 + .../c987ae9406608a912478b24a1e455787.html | 343 + .../c99b1071c1f59ac17d0859a16a4cd2e6.html | 343 + .../ca47e6b7f91ba480b0b3eb850b26ddea.html | 419 + .../ca6e7604410ba4ab798da407a4692470.html | 435 + .../ca72eed9ae3efaba0c3fe51a50c7b6e5.html | 343 + .../ca7325d93bea6a1234a66b01fa3e4bc0.html | 415 + .../ca7d8ba70b7ae66c8f130c9e3b666a86.html | 402 + .../ca80e8e4333fd24fa0631dabdf6a902e.html | 402 + .../cabb07561850fd4a1aeae8f7c2d23ec9.html | 402 + .../cac6ad09231ee0627b9726a0dbd4f5b6.html | 402 + .../caca0e2e2ecc75832ad95d63ac93b0ce.html | 419 + .../cacc297a98a7bfd5ed1cb6dde60da532.html | 441 + .../cb0e373255cb7b1efb9087d85833d4d8.html | 343 + .../cb2288495cbd72beb8d6aff88271c27f.html | 435 + .../cb2d617ff7cc86839b2b0556c66c43c1.html | 402 + .../cb6b520db634918834555cb5d6d9744a.html | 402 + .../cb7cc8077bbbe7322a4d2e28ac77cac7.html | 419 + .../cb90a7aa8e1bded555e278558526f60b.html | 402 + .../cbbf32a0417fc93ed1a61cbbae93a6e4.html | 419 + .../cbe2d7fbedf328a68267ff0da5e10dc8.html | 402 + .../cbea774f557ccd79ede78cb47c5a48f3.html | 343 + .../cbf8cd8b6b8346b444b569e1e6c07b9d.html | 415 + .../cc29d812616b366233e53d77e525edda.html | 419 + .../cc4bf8092fb55a7bacae933e0758fe34.html | 402 + .../cc546c4f38d5fdac941622f58cef2d89.html | 450 + .../ccde172716307f516f6e0b9c819be92a.html | 419 + .../ccea5c2c930715d716c38e5e947a8f77.html | 419 + .../ccf6f009d2d2ef8438e9045b3088e422.html | 419 + .../cd80d9656ad272b13f15aa0913adb71e.html | 343 + .../cda597287a2f782d0770dcbdb962db48.html | 402 + .../cdaaebc24154dd62c3f3ee46ce42f2d4.html | 419 + .../cdb3215a047c7da7484513a5984d6c3f.html | 419 + .../ce00633d20d13101665081946ee21c7d.html | 402 + .../ce2761853894b06a1ae13a01e415e316.html | 419 + .../ce3572907df41db28373d69b0b85c8e4.html | 402 + .../ce3ec0da50d29d95544d45e9db1cf9ac.html | 402 + .../ce628460f9f546fe1b5b0e24ef1b2f45.html | 402 + .../ce7f7330ef6e96b536db28742f96d497.html | 402 + .../ce9f1d2d8b56223ff3ed921ce087eed4.html | 343 + .../cf11361424551336e643636cafe9aeb7.html | 402 + .../cf1c85ff33cb19a20ff54b9fdee103cf.html | 402 + .../cf224e15ffbed64b2d13ed36eb2bd7cf.html | 402 + .../cf3015eab8fcc2ad67f3de9ea81b5d8c.html | 349 + .../cf3b088a6922b92bd862ccc86742b5f6.html | 402 + .../cf5edefcb7cf4c2e88c37c0a4ae93608.html | 402 + .../cf627e470efc6ab3f0fad558568613bf.html | 402 + .../cf9c8b720f3815adeccaf3ef6e48c6c4.html | 312 + .../cfac916d4cdbd8d5ca90311aa44ac946.html | 402 + .../cfb8aa2a53d15908a2301026688c2b03.html | 402 + .../cfbe0690a7edbb8a9d507aed1dee6699.html | 402 + .../cfc0d297e9236e12e6ccb505c1be8483.html | 402 + .../d0054c8e8bcf61a97209f243ba46ad8c.html | 402 + .../d00e0ed8adcc761b2d9402ed19c0cb11.html | 402 + .../d017c30cbe79c225a2cea6544214780e.html | 419 + .../d04cf73597dd0fef43263d8bbcfbe770.html | 343 + .../d0605cc04fc6683a3f49bdd5292e4eaf.html | 402 + .../d09bcc91cafec33f558f5dcb199e7942.html | 419 + .../d0a69d1dc59a0db4ec018956c9559c42.html | 419 + .../d0c8f41ccb3a45e6d849869ec9fb35ea.html | 402 + .../d0cbdf91c83998be55b450c2358def67.html | 402 + .../d0d7020f2fce9a8ed92e50deb6322e09.html | 402 + .../d115533fb619c6d4f5d57667d7c450f4.html | 402 + .../d14ca5bc582872e7edab4a7495afcd2e.html | 402 + .../d15031cb144e4d7cce98ceedb4ca5d68.html | 359 + .../d151f121325ce00a55de3cfa14df0780.html | 487 + .../d178003f7e8fee3d9635eb757e1bffa1.html | 396 + .../d17d20c49ea8b49688427e3f2da2a5de.html | 494 + .../d183d33afba2ae9a4a9b9376cfe05760.html | 402 + .../d1d7434ba26052cdfe8d603b718f8118.html | 343 + .../d1efd6a86d569d79a5ddb491b532a3fc.html | 331 + .../d2078ae1c297d4621b8ca72e98967e8a.html | 343 + .../d2324646b8d4f70f00244ae52ea88932.html | 419 + .../d236ce1626e24333166afd3ca804cf77.html | 419 + .../d238049eca761991041d2cae9b883cb7.html | 419 + .../d23c45bc39f83d8ee7944f16e1fa22d9.html | 321 + .../d280b3accfb22e906c313f5e8503cbdf.html | 402 + .../d284b8928cb2f9451b498d31ae0d5c4a.html | 410 + .../d2dcc3cc36be3be2040c26f9bb7947b7.html | 402 + .../d334f298a53420077a037f8e03761d51.html | 343 + .../d3417a981ce85d9c08f25626bb3782b4.html | 419 + .../d3546e4b52b8746c9c66e6a901c32e88.html | 402 + .../d35c15f94a5d7008ebbe88cc8b0aaf57.html | 343 + .../d35cee11c86aaa14e57a2b7faade25d3.html | 435 + .../d37aca3acaa72d6e27c74d85a17e669c.html | 402 + .../d3b64a54bb181def446af43cfba80541.html | 402 + .../d41814c715a78492d72035d51c1bd229.html | 419 + .../d456039f1d41dbd5c2491f485a536e10.html | 402 + .../d473e1f5dca164ccf643cfc2437c6eb4.html | 343 + .../d49ec3c7ddec9df8a4c942bd46793899.html | 402 + .../d4b639c2fb349cb8c8d8d0cddaa4bba0.html | 419 + .../d4d2a86881caf75ce4e720d89ff48471.html | 402 + .../d527083c08ae760e504bda551a42737d.html | 455 + .../d55916b858a2614eb0964c57f3f32f38.html | 419 + .../d5dcdd7e20c8659e9a036965cebba72a.html | 343 + .../d5e75bef920c3fc5b6a2ac046e56b545.html | 419 + .../d61f34e757f509c157ac095862111835.html | 349 + .../d69298813eb326db47f8f552e34a8e54.html | 402 + .../d69886cf08aeb80f7b0b30e3b10951cb.html | 402 + .../d69b4ee9493748eaf59e638a090d3ce4.html | 419 + .../d71e0029a76327277af6300bd3e01c6f.html | 402 + .../d746b6c62eaa62747a9e9d6d11174d8a.html | 407 + .../d74b244b9b4d6000fed9110553d30beb.html | 402 + .../d763c438c67cb53c36b92602ad9a6da2.html | 343 + .../d771580bcb891fe90a5416c585b5d732.html | 402 + .../d77ac63d8655c29a0fff134db99a53b9.html | 402 + .../d7a9e9e104b934292f2ace8a568281b9.html | 402 + .../d7cb453ba80af451a8d3124c44b189f2.html | 402 + .../d7f077fc796b79b6f77c4b7709b476d6.html | 419 + .../d822f7a98ef4dfc1dbf683e026fed9bb.html | 402 + .../d82475a27d3866f7f6c3cbb20bb0a26e.html | 402 + .../d8351ca378556a1aebb47d5bf7eeeab8.html | 402 + .../d84ca3e02580c86a106b4d43bc81bf2e.html | 402 + .../d85062dbda19e66a0168bb2eed95d081.html | 402 + .../d862119ed2ae1627e0619f96b87ecf25.html | 498 + .../d8753fb7d9e46ceb76f28743f157d864.html | 402 + .../d87d15f3a50fb712b84ecd8dc40ba54a.html | 349 + .../d883198957fe06e56e66e036e9de7126.html | 419 + .../d8f1180da07f726fbeb713b67ef9a71f.html | 435 + .../d90e6502c6a3eb4ae2e5beeeb7dc3ad5.html | 478 + .../d90f184915bd08fe0d664f96dce227e1.html | 395 + .../d94f60ee90337aa5c63a1ba6a353436f.html | 402 + .../d95939a853affe6c79ab0c3fd7d3a6eb.html | 343 + .../d96ffc6326e55dd11525ed461459db79.html | 402 + .../d9861152cd06322fe71aaf67d7b8bcdc.html | 419 + .../d9ab45df055696bf6be80378edf5fc11.html | 419 + .../d9cffedae01def5563c756215969667f.html | 419 + .../da1dbdf30a8cb08beb856d45aae3a9f6.html | 440 + .../da48df54b1a398256acb4dc2ae58cdfa.html | 402 + .../da7c6876b874fa4cc351a2876422aa24.html | 402 + .../da82c376801d23bd9d9b072d38a6e6b2.html | 402 + .../da8f8a4c027a1e08668bbdd822167f11.html | 402 + .../dab69ce820849c02849061f2acf4ca3e.html | 402 + .../db29bca66759db15e59f895f933cd189.html | 402 + .../db2f092a209cfd59a07c58c629df4133.html | 402 + .../db5d895c72d5b2b8b3f04bab33f4eb3b.html | 435 + .../db7d8a34196e5d65c8c48cc8290bbdc1.html | 419 + .../db894508a2a49402b3fc9af6a38d98e6.html | 402 + .../dba99f7a081e7c618d1726dbfa5ccefe.html | 402 + .../dbb3b9d19591fd630eac2578319f303e.html | 402 + .../dbb8cacd80e67d2a583f3638daf17cb3.html | 402 + .../dbc72ccaa8428640c05bad7c8174ab26.html | 402 + .../dbd4c60dfb4cb81455e00843f89d07e4.html | 402 + .../dc055a80ca3181b36359e70c4d0a5981.html | 419 + .../dc18b7c112f1e5530e7ac575780b673b.html | 402 + .../dc7bdf41db499ac827562d35d8fc0b2d.html | 409 + .../dd1193971eeda7e00d19fcf40250ed5a.html | 419 + .../dd18a31212f1db03667c62728e551b8b.html | 402 + .../dd405c28ba07c162eec1e4d6737874bf.html | 402 + .../dd5dcf69f476d248d6302ea67638e830.html | 402 + .../dde5f7413130a3babbaccbfc2f291e51.html | 343 + .../ddefa909dd5503cf562c442f848c0978.html | 402 + .../ddf6552cb89c349f8788b7ba605fac7c.html | 419 + .../de4230f8f675843f9a3884e299464650.html | 419 + .../de68acec6763ad54251f676e972e36d4.html | 402 + .../de7e5a9eb8cf75d72842132b9b62be38.html | 402 + .../de8fe9993d1649fada596474d168b880.html | 419 + .../deba507ed2e36972f1c1f56dc6cdba14.html | 419 + .../dedc8367f8513528603b7a63e0fdb0c4.html | 349 + .../def061447064690eb783d4b0efa39c3d.html | 402 + .../def6edba48ea1999dad7c235bc33c21b.html | 402 + .../df3eeb8b298f52a6315f35f1e922f199.html | 419 + .../df56e96756846fb26561d102aeae788c.html | 402 + .../df6817e27d1b4d59876eb739917fdaeb.html | 419 + .../df79903d9ee944fd8f1569d978d05007.html | 402 + .../df7d866bec3cbf99119e16f8f2cf4ed7.html | 343 + .../df8f42c9fe5b33fe32fd5e72112547ec.html | 402 + .../dfd66657bb5fa3b02c7a363f83ea5868.html | 407 + .../html/index.html/contents/diagrams.html | 214 + .../e006537f79eb243f21316915a878bb84.html | 402 + .../e01952890b6c6621008fd8e7666ec546.html | 402 + .../e042da357077b30655fc394f51868fe2.html | 402 + .../e10e23a989f548027282cec8e1c78b9e.html | 402 + .../e116e6453030e3270b2088110e307f42.html | 402 + .../e12af3f15fdcf62a93b7209f996d9695.html | 419 + .../e15792f7dc0b43ce23a94d2d015fac08.html | 419 + .../e1b157b4ecc71fbf784ddd37bb397c71.html | 402 + .../e1c985d472242469a922d7c392aa3d83.html | 402 + .../e1edc75cb0e3ebe4bdd32aadec5c278c.html | 402 + .../e1ede8cbef14cf9e04df47940ca9a264.html | 492 + .../e1fa2ee1a2cdc2daec3f2db9e68bfb86.html | 402 + .../e1fc80c85a7f6718c46f2519bec209f0.html | 419 + .../e21e529d498de3cf286368435b4a71de.html | 415 + .../e2312ad9baf250942c292978c35328db.html | 419 + .../e261807a410d9deb91731ff67bb19e1b.html | 419 + .../e27267db3a1a495ed2e61f419e26bf8e.html | 402 + .../e28eba589245cf719a1770a080716952.html | 343 + .../e2aa92fd1a57694801b16ba814ef25d3.html | 402 + .../e2bba231e0334b85dc59fb7407478225.html | 402 + .../e2fdcfc721737e5a436904e4f0be0dd6.html | 434 + .../e30723d95f1f161490ed5af0300eefb6.html | 462 + .../e309fa6ae75dde063a181105ccfbb9a4.html | 450 + .../e3186274302c27b694e78e5bc6701b38.html | 402 + .../e37c64dd3077cac53adada0ad6cb1181.html | 402 + .../e387bba2e1d8b2ffa378bc1c3d904f4d.html | 442 + .../e3a471a68d64bb325c75494a90b6b069.html | 402 + .../e3a9f1ccc48ad66dbc95de140127874d.html | 402 + .../e3c69b236ff2a7774f00f553238d87d0.html | 402 + .../e3d5bf8c0d81cdf33c1ee8fa04330633.html | 402 + .../e3ed1e46da47368acde46f719edb027c.html | 394 + .../e3f5b4dd2c618bdded9c180d4ce9aa27.html | 399 + .../e4086c6b2b6618c3b6258bbae5b43b88.html | 402 + .../e41ef935d2ec35de411b531886c08f16.html | 402 + .../e4439a17ba3afe2152477851bde5e315.html | 402 + .../e44e797f9a5d0887b36a19249dfff8ef.html | 423 + .../e49076f6419d4546ca5ba18ae31b327e.html | 363 + .../e49f2cc316faf16f05f056fe2c782758.html | 343 + .../e4add66939453e23855b5723ff0ff7c3.html | 415 + .../e4b200454a88116c309869951de22456.html | 415 + .../e4c2f220cdbf1dd3a66598dd9a671b2f.html | 343 + .../e4d6d1344629e5ae1390ac71167bd91b.html | 407 + .../e4e295495f21f867b802143cba096780.html | 435 + .../e4e2e3c8e4a78b193f59b67b95043218.html | 419 + .../e4f39c9c5484a5a7a7109a613a85224e.html | 402 + .../e554764ada9f1c0326b01f4dd8e05903.html | 402 + .../e585b0204acfc58a0aad79179b71a0c9.html | 343 + .../e5b420d80b26881eb5a042693c1adaf6.html | 402 + .../e5bb5521771e4133efc8d09b59375227.html | 402 + .../e5ce0d6a1b01058f2cfc250b533d4a8e.html | 402 + .../e5f84daafa3d23ac2cc400003da5251a.html | 402 + .../e5f8d3a6116accc064390b42912a7679.html | 402 + .../e66d66b576b2338946d6878aaa1ed5e4.html | 402 + .../e678844f578a25aba9e783d6f1dcc406.html | 402 + .../e6a8308d04e19c55da47a90ef68dd69d.html | 402 + .../e6afa79c94bc168ad59b3bfaf32605e1.html | 419 + .../e6e808590810f7d3a55921eb62e752b0.html | 343 + .../e70be99c4e1669d4e7bed6e61594c2fb.html | 435 + .../e72bda8507d41170081ae47ba1a1a5ce.html | 419 + .../e73e958cf63128bd681aa8a115db8439.html | 402 + .../e7434c1f4b9a7b75418eb3a94e696561.html | 402 + .../e75ce066c2ae384d22b5e553daf23a92.html | 415 + .../e75e8e371548d24370e311c8971d000c.html | 402 + .../e793b24340b537c6575041606eddd3c8.html | 419 + .../e79aa2d1967e962c36257446b229bbd9.html | 419 + .../e7acff20a33dd0ccbe4dd717bad73b10.html | 402 + .../e7d6066343819ac598675113b7c4bf5c.html | 402 + .../e7ea0ec96a0ccfc55c23614daa74141d.html | 419 + .../e81f4bba713c84c716cd87005472d338.html | 419 + .../e821f8d2074f00892c8d6c2e09a5113f.html | 419 + .../e832379fc15d1c95581c539ca1ee0f85.html | 407 + .../e83fad21437fb592a7e321849357c3f7.html | 454 + .../e88ff30c37f3c5aec211b339bf6bbb17.html | 402 + .../e8ade9bed41d4855832a475565f12fc3.html | 343 + .../e8b8016efc61981fe505662828424655.html | 343 + .../e8bcfb915ebb9fd4ecf3ee8b0a9fa340.html | 349 + .../e8d97b2b3dd0be7ae3df0ab8993c67e2.html | 402 + .../e8e1a4ede6ae38982b0d0a729d7e0fb0.html | 402 + .../e8fa4d95e76893b117bcc6f54753011c.html | 487 + .../e92a84ba4f083924de5481b970693c8f.html | 402 + .../e9580b8113a26ecb061f19196f3bfa9f.html | 415 + .../e958b19ff867aa0af087c768a56d1b7c.html | 402 + .../e96ee8dbbd1e706203bc1f940a9cdc89.html | 419 + .../e97cf90a75a54edb9acb0ef8b1611f2d.html | 419 + .../e9f5fca281d9bc03348e2659e50d7169.html | 487 + .../ea087b89af05225e59d0a4f985ac8a71.html | 528 + .../ea27910830d95f83a6a97fc95548c53e.html | 402 + .../ea371ee6d7f914aee3a2f4f85494e3b5.html | 419 + .../ea53aa60ea20269debb3c46d179577cf.html | 441 + .../ea6fc2b9f029d3e1c5530dd0b981e027.html | 419 + .../eacfb6a33a8283d2400895d6a9a45bc8.html | 419 + .../ead14820ee094153abd1c0d0f3448176.html | 402 + .../eae76c7d75403eda82c28e59a464335a.html | 402 + .../eb08f76bd6462533a4c9833c2791e5b9.html | 402 + .../eb21e3642e435b24c6ecc1c4055a1425.html | 402 + .../eb4115159c79a0701a3de3dec0f6e6b1.html | 343 + .../eb47f06a2a7886db7495df0af3602b86.html | 402 + .../eb6035c8e3dcfd087fa85060ca8474ed.html | 419 + .../eb7d06a8da42f5cfb53f2d3753c421d7.html | 402 + .../eb9892eb245c9b90f27dc51342091cb9.html | 402 + .../ebd22773cb45d93b8ed3ac0dcf3562c0.html | 402 + .../ebd2bad74d7ed689e916dc8c9639f228.html | 419 + .../ec5dd1aa0467d2b71b372fce382351f5.html | 419 + .../ec7be544447374584069232bec0e4789.html | 331 + .../ec7d5fd6c983a702d485d20b2c7f27bb.html | 402 + .../ec815d98446493c79ae8b2cbfbe1bfc2.html | 402 + .../ecad55309f358d5bc502dafd11bd38ec.html | 426 + .../ecae0aa772b1fa28910837a0486b75a2.html | 349 + .../ecb8128147e822b81f7d2ef5e97b1fda.html | 419 + .../ed23ab789acfddc9ab95f4010ca641f5.html | 435 + .../ed6e506f8638f7f8be4078d3cdff9f0e.html | 419 + .../ed9fb338d6edd995d4679f50850967eb.html | 402 + .../edb68a9568a5f5e57d0ce3ab3ef4140c.html | 402 + .../edc3c238c7b4a8a03b4d060499a457a5.html | 419 + .../edc9962e658ded1c40e6b5a66e8b2df9.html | 402 + .../ede3cd4af8f09d83d4d92f40293349d2.html | 402 + .../ee3bb57814ddc07fbd64a68cc8720546.html | 331 + .../ee5b06de84f4565807ad164c85679b33.html | 343 + .../ee605a93ba894d1b04ee91a5c6776771.html | 411 + .../ee95e5fdd4c17d9da9172ff35330a2a4.html | 349 + .../ee9ce905c804b4cc7c304b074ee1686b.html | 349 + .../eeb8c21b234fd43e06fb7b2b78f1fbb9.html | 419 + .../eeca09b174ce321d860f438c79e508a8.html | 408 + .../eecdcec6120c7fc4ef299f11cd7a2dc2.html | 419 + .../eeeb39aabf2da47a1cd7c73ba927c517.html | 394 + .../ef41bcbafe1b6c0294d85f57360a0435.html | 402 + .../ef4908c1761a3ff6c0d0dfe8ae5e0036.html | 402 + .../ef4fb1599c7014f193991f9d6a7938f5.html | 419 + .../ef6935f54ab44c4b07b4c755f6af0e48.html | 402 + .../ef6c7c9110ceef73de8bb7906d899b20.html | 402 + .../ef858a3295c894f1b46b37424b4b92cb.html | 402 + .../ef8f3e0c6a50fd5473f6db4d4f63b54a.html | 402 + .../efe77e56b32efbfd469a97b1f80d91e5.html | 343 + .../effce10b5a99b8f070a3614e7fe3ea73.html | 402 + .../index.html/contents/element_index.html | 3957 + .../f08ceabc3f9d19bd988c92b4552d3a62.html | 402 + .../f08f28ad5b5a5762bde560cbca2a529b.html | 419 + .../f0b812c30823ec6c5ff97be802fbd1aa.html | 419 + .../f0eeef2a5754a526523567126dd07af5.html | 402 + .../f107c27bae48987ee3770fee9b79bd0e.html | 419 + .../f12268629ed46f7a7c8117b7236a20d2.html | 331 + .../f12ac42eebbe93fb75310d4d2778f3cd.html | 402 + .../f18bcc8ab5d0bcd7876ddf821b7c0608.html | 414 + .../f199440c2d1d18db4e139997908990d0.html | 402 + .../f1a5ea73ba5710e9903aa8cad08a389b.html | 419 + .../f1c50e69a5a5577bf17e86dec3347243.html | 402 + .../f1c71df166d864294ba8d4a7201db88a.html | 419 + .../f1cc95be32fc8657fa344bdfd19aa62e.html | 402 + .../f1dffaabd9e26930bf0ec66d2746e373.html | 419 + .../f231e0f413d22d0c06b8a4cc78a770da.html | 419 + .../f23f05ac9a5bf50e0add0d3fee78b743.html | 402 + .../f23f6da539bff7295e18bd343c7c4ac5.html | 402 + .../f2600e75f17963b2cc3da3ed298b9298.html | 486 + .../f26dd8c6a229244746b3c8b74a1fb77d.html | 402 + .../f286ae641ba380f9327f2141e07d7c7c.html | 343 + .../f29e5be6ef26215e5ce9725be69d35cc.html | 402 + .../f2a2fca31a6d7263b8f47fb19e657707.html | 402 + .../f2ab0be29bff266c3011729cab4fe4a4.html | 419 + .../f2c69b87843cac00315b3c348dd27735.html | 402 + .../f2f13dba38aadd8cba5098c87b4e53e6.html | 419 + .../f3071eeae819574a3d8eaa32155c2f2b.html | 435 + .../f3247b8f913376c368d75ce5b5d70cfb.html | 419 + .../f3351ff0cb7f1e6caf947f9ad0013db9.html | 343 + .../f33834ad967a81188b2fb70d0c2b4672.html | 343 + .../f339b04207719812df8ae31233a6f160.html | 588 + .../f35c4acce157624ebae37201b6b2b2d0.html | 402 + .../f370f212b85e2d3f821657fa0a6b370d.html | 450 + .../f39a6bb3cd8442a192e573a5fe625e2d.html | 343 + .../f3ac67b617d4a2b9d8371f65366b16f0.html | 419 + .../f3dd9a5bfe93ecc32c06b23173c2facf.html | 402 + .../f3eeafc76be1c31a500be61f86e0b3d2.html | 500 + .../f3f30ffa588233921a8514fbd97f8c52.html | 402 + .../f404e5b8c71d89b9a74f9b872351ff0d.html | 494 + .../f407456ae508f0fbdc8d0cbf8ae71d6a.html | 402 + .../f40ca628b849dbc728dc07425949362a.html | 419 + .../f44bcac9c73434092be71729befb10f5.html | 419 + .../f44f37f6c694c4f861e4b26bd676149e.html | 402 + .../f45213ac93265086fd539c5fedb5513f.html | 402 + .../f4697c6bb9abf99337a13939af9e2c56.html | 415 + .../f47d6aae34885dfae5ba9440d11dbfd5.html | 402 + .../f48e976a8edbc102b53d01a76ca50414.html | 419 + .../f4c5bbc2a24ad0ce63343911b68c911a.html | 402 + .../f4db861e5abb6fe26e3a5557cc57811a.html | 419 + .../f5063108e1157ebdb86d1ed481e80551.html | 402 + .../f51d3524b226f479ae309488cb1cac6e.html | 402 + .../f54e6be84bef0c13cf655ecb498f0a71.html | 402 + .../f5ebfb935b1f1325943d24f586e7d8e2.html | 343 + .../f5eeaadfc6f413c7f088e5de790998da.html | 402 + .../f620d47cec0d6ae63b2ef09c2c087925.html | 402 + .../f6509cddbc0004ef7d650e238d8ea807.html | 402 + .../f66d68bb315fadabe004e81050b32ffe.html | 402 + .../f66d897fb10b87d83b659b3ee4aebee8.html | 419 + .../f6c06f0451c0185eff13f47ca9fbd685.html | 402 + .../f6f8d116b761eb6f45f8a4b10054066f.html | 402 + .../f727448b83343603aa95f4e25b17cb62.html | 419 + .../f7585cacd4a4e1261530bdc98ceaa3ce.html | 343 + .../f7d0d806e1bb65b3dbdfdc3947593a1e.html | 402 + .../f80f07847e7cf50550a7175ad804a11f.html | 351 + .../f821b72afc0c59329dd76d9eb0aa9780.html | 494 + .../f82c7abc5dd1b204e9cdf88bee519907.html | 402 + .../f869a1a27bb5ff0ac7c4fe1962649b1f.html | 441 + .../f8a9a6b7e8de3c0462f313687457362d.html | 419 + .../f8b3ed068518dbb9819d650ad7557253.html | 402 + .../f8ccec46c3dcad1e435858a0af8976c7.html | 381 + .../f8eaec2b03f6b77a004f24302d2dd0a7.html | 402 + .../f8f56717b60ff7af94924f798ed87585.html | 419 + .../f90a61a955edc9f768e1d4089731ca47.html | 415 + .../f91ae981446fec5a46f97e67a832263f.html | 402 + .../f94b3508b5202f65f22e3cd8ba07b71e.html | 349 + .../f9505b106005f9fbaa2786c26285620a.html | 402 + .../f9655092d3df6e9efdb98c0e59e25ab3.html | 343 + .../f99d5836337957ec3113625565ad1408.html | 419 + .../f9a5407516d45f6cb88583cb8c7c7bb5.html | 402 + .../f9a70dc84a514ab057a51092cab62446.html | 419 + .../f9af5ed5ccf7122e3ad19360ab11594a.html | 402 + .../f9cf7eafa8bc6c04ff803a0732f5d690.html | 381 + .../fa112acd403e7bf636510e5dca788dc7.html | 541 + .../fa16a9cb0005eed1864ae4affea1f006.html | 402 + .../fa3298062baeeef9ca73909a471665aa.html | 419 + .../fa3ff5238c87cd1f12b0513d45dca2d9.html | 402 + .../fa6d4019350568a2f5204db1ea116254.html | 402 + .../fab19b7731ad702f162c5f8092364505.html | 402 + .../fabcd6b271f66277b21b7d07f5215886.html | 419 + .../fac9e874242a4803f2f0824f1cf489f0.html | 419 + .../fad2645b8ec341002a3f764ccbb6dd7b.html | 402 + .../fb1795bc5ed273620e831fadbb36d52c.html | 402 + .../fb324251c97b23cd66798426da9cf6fa.html | 402 + .../fb4849d27706d567093b9c240ec32437.html | 402 + .../fb55985eb50a17ae9eb368a7361fc893.html | 402 + .../fb682d49505ca12f3d314b843b06a5cf.html | 343 + .../fb6851a8aa75cb9004aceff7140bef44.html | 402 + .../fb6b9c75104a85c6ad6334eaac283086.html | 343 + .../fb753459804378d41227f52e20389caf.html | 402 + .../fb75b3ef6262a8efbcfcc6547317fc11.html | 419 + .../fb9623536ada266cbe8603155ed5815f.html | 402 + .../fbb743546681be6be607de9c4f64e103.html | 402 + .../fbbc06d720fb8bc33271ae8ec2b3dbe9.html | 343 + .../fc22a2c7005e8d5bb0db43c666d45678.html | 402 + .../fc6c605c957ea7abf2af14112541af84.html | 402 + .../fc9ad85d9cd8ff2b5ed6f23d4315647a.html | 420 + .../fca5566e62f6c7a91f935e357cc6d229.html | 343 + .../fd07c0cf771c975ca25a3537e94e5746.html | 435 + .../fd1226499a79fbc3b60f327e345ea8db.html | 419 + .../fd1479d5e012c64520a17ef664e76cb1.html | 402 + .../fd2677979c645c0c487eea44a08c1bf6.html | 415 + .../fd42252a2721976eae8877d6db6ee270.html | 419 + .../fd991f0e3dff94b12d14bf40ae91b528.html | 449 + .../fda95614f702e9464569e24415e01767.html | 402 + .../fdbce128eccc980dcfafb009d95b9810.html | 402 + .../fe4a1c018b5421157691c4c4f6bbbc71.html | 402 + .../fe6864275cbdaac04dce72b2f0a9667d.html | 347 + .../fe9c23285d6d72ca450de451a7961540.html | 468 + .../fea83fe9380b4aa4ad52508ef7120f25.html | 419 + .../fea939e5c16cd2a86f2b8b7fdeb7ad23.html | 343 + .../feb073a460de89f9d48a3bdc981a8291.html | 402 + .../fee3afaf28236b11cbfe947c78cbddec.html | 402 + .../ff109526680a4819b3ce61bafd134027.html | 419 + .../ff1804ff185a0999cfdc8dd31ceef08d.html | 419 + .../ff77fff774c3e6bf4968536c4b184bed.html | 415 + .../ff9978e485f7454d227539d1cbd76c79.html | 402 + .../ffaa0e856899de5141e652e5040f097a.html | 402 + .../ffd1fd91d775e51cca95b00f562032a3.html | 402 + .../ffd45aab3da307dd682235b962434758.html | 343 + .../fffc8b91d68dbe40e1d6994dc655b73e.html | 419 + .../html/index.html/contents/navigation.html | 21023 +++ .../02524d7a310024538b8bf2b5217a0405.svg | 1 + .../02d026fb13af0923877f41f68fb5585e.svg | 1 + .../371c300b2fbd983a23941d1c60640e3f.svg | 1 + .../3fe24c3491f5d338fe385ac2e199e5a5.svg | 1 + .../40a3cc19e818cfc3b0828c8a326d9171.svg | 1 + .../4323069cfc9640314abce0f13b6c11a6.svg | 1 + .../4892786a2d7e18bd07ec297f95949221.svg | 1 + .../880f562184ffc8c074fd88362b766ea1.svg | 1 + .../9c77d89de8418c23e57114f6d0c155a3.svg | 1 + .../a47184837219aea9ccabc89e35d90216.svg | 1 + .../a93138e6eb3c7dabb41c87224a1b973f.svg | 1 + .../b0796dd845dfbe0e2c1439b690e59253.svg | 1 + .../cb2288495cbd72beb8d6aff88271c27f.svg | 1 + .../d284b8928cb2f9451b498d31ae0d5c4a.svg | 1 + .../d527083c08ae760e504bda551a42737d.svg | 1 + .../d90f184915bd08fe0d664f96dce227e1.svg | 1 + .../e387bba2e1d8b2ffa378bc1c3d904f4d.svg | 1 + .../e49076f6419d4546ca5ba18ae31b327e.svg | 1 + .../e9f5fca281d9bc03348e2659e50d7169.svg | 1 + .../ea53aa60ea20269debb3c46d179577cf.svg | 1 + .../ee605a93ba894d1b04ee91a5c6776771.svg | 1 + docs/UML/html/index.html/index.html | 21 + docs/UML/skill_seekers.mdj | 105353 +++++++++++++++ docs/UML_ARCHITECTURE.md | 178 + docs/UNIFICATION_PLAN.md | 307 + docs/VIDEO_GUIDE.md | 483 + docs/advanced/custom-workflows.md | 400 + docs/advanced/mcp-server.md | 354 + docs/advanced/multi-source.md | 655 + .../plans/2026-03-14-epub-input-support.md | 1162 + ...03-14-epub-input-support-affected-files.md | 273 + .../ARCHITECTURE_VERIFICATION_REPORT.md | 835 + .../DOCUMENTATION_UPDATES_SUMMARY.md | 183 + .../archive/historical/HTTPX_SKILL_GRADING.md | 1125 + .../IMPLEMENTATION_SUMMARY_THREE_STREAM.md | 444 + .../historical/LOCAL_REPO_TEST_RESULTS.md | 475 + .../historical/SKILL_QUALITY_FIX_PLAN.md | 404 + .../historical/TEST_MCP_IN_CLAUDE_CODE.md | 342 + .../THREE_STREAM_COMPLETION_SUMMARY.md | 410 + .../historical/THREE_STREAM_STATUS_REPORT.md | 370 + docs/archive/legacy/QUICKSTART.md | 207 + docs/archive/legacy/QUICK_REFERENCE.md | 477 + docs/archive/legacy/README.md | 66 + docs/archive/legacy/USAGE.md | 822 + .../plans/2025-10-24-active-skills-design.md | 867 + .../plans/2025-10-24-active-skills-phase1.md | 682 + docs/archive/research/PDF_EXTRACTOR_POC.md | 420 + docs/archive/research/PDF_IMAGE_EXTRACTION.md | 553 + docs/archive/research/PDF_PARSING_RESEARCH.md | 491 + docs/archive/research/PDF_SYNTAX_DETECTION.md | 576 + docs/assets/atlas-cloud-logo.png | Bin 0 -> 134042 bytes docs/assets/logo.png | Bin 0 -> 1475861 bytes docs/blog/UNIVERSAL_RAG_PREPROCESSOR.md | 578 + docs/case-studies/deepwiki-open.md | 405 + docs/features/BOOTSTRAP_SKILL.md | 692 + docs/features/BOOTSTRAP_SKILL_TECHNICAL.md | 669 + docs/features/ENHANCEMENT.md | 329 + docs/features/ENHANCEMENT_MODES.md | 550 + docs/features/HOW_TO_GUIDES.md | 1356 + docs/features/PATTERN_DETECTION.md | 513 + docs/features/PDF_ADVANCED_FEATURES.md | 579 + docs/features/PDF_CHUNKING.md | 521 + docs/features/PDF_MCP_TOOL.md | 435 + docs/features/PDF_SCRAPER.md | 616 + docs/features/TEST_EXAMPLE_EXTRACTION.md | 505 + docs/features/UNIFIED_SCRAPING.md | 950 + docs/getting-started/01-installation.md | 339 + docs/getting-started/02-quick-start.md | 383 + docs/getting-started/03-your-first-skill.md | 396 + docs/getting-started/04-next-steps.md | 331 + docs/getting-started/05-scan-a-project.md | 183 + docs/guides/HTTP_TRANSPORT.md | 309 + docs/guides/MCP_SETUP.md | 1512 + docs/guides/MIGRATION_GUIDE.md | 619 + docs/guides/MULTI_AGENT_SETUP.md | 643 + docs/guides/SETUP_QUICK_REFERENCE.md | 320 + docs/guides/TESTING_GUIDE.md | 934 + docs/guides/UPLOAD_GUIDE.md | 446 + docs/integrations/CHROMA.md | 1004 + docs/integrations/CLINE.md | 1052 + docs/integrations/CONTINUE_DEV.md | 1118 + docs/integrations/CURSOR.md | 695 + docs/integrations/FAISS.md | 583 + docs/integrations/GEMINI_INTEGRATION.md | 435 + docs/integrations/HAYSTACK.md | 822 + docs/integrations/INTEGRATIONS.md | 548 + docs/integrations/LANGCHAIN.md | 518 + docs/integrations/LLAMA_INDEX.md | 528 + docs/integrations/MINIMAX_INTEGRATION.md | 391 + docs/integrations/MULTI_LLM_SUPPORT.md | 468 + docs/integrations/OPENAI_INTEGRATION.md | 515 + docs/integrations/PINECONE.md | 861 + docs/integrations/QDRANT.md | 904 + docs/integrations/RAG_PIPELINES.md | 1043 + docs/integrations/WEAVIATE.md | 993 + docs/integrations/WINDSURF.md | 978 + docs/plans/video/00_VIDEO_SOURCE_OVERVIEW.md | 262 + docs/plans/video/01_VIDEO_RESEARCH.md | 592 + docs/plans/video/02_VIDEO_DATA_MODELS.md | 973 + docs/plans/video/03_VIDEO_PIPELINE.md | 1098 + docs/plans/video/04_VIDEO_INTEGRATION.md | 809 + docs/plans/video/05_VIDEO_OUTPUT.md | 620 + docs/plans/video/06_VIDEO_TESTING.md | 749 + docs/plans/video/07_VIDEO_DEPENDENCIES.md | 516 + docs/reference/AI_SKILL_STANDARDS.md | 926 + docs/reference/API_REFERENCE.md | 898 + docs/reference/C3_x_Router_Architecture.md | 2361 + docs/reference/CLAUDE_INTEGRATION.md | 535 + docs/reference/CLI_REFERENCE.md | 1784 + docs/reference/CODE_QUALITY.md | 823 + docs/reference/CONFIG_FORMAT.md | 859 + docs/reference/ENVIRONMENT_VARIABLES.md | 885 + docs/reference/FEATURE_MATRIX.md | 382 + docs/reference/GIT_CONFIG_SOURCES.md | 921 + docs/reference/LARGE_DOCUMENTATION.md | 431 + docs/reference/LLMS_TXT_SUPPORT.md | 60 + docs/reference/MCP_REFERENCE.md | 1187 + docs/reference/SKILL_ARCHITECTURE.md | 930 + .../INTELLIGENCE_SYSTEM_ARCHITECTURE.md | 1169 + docs/roadmap/INTELLIGENCE_SYSTEM_RESEARCH.md | 739 + docs/roadmap/README.md | 353 + docs/roadmap/SKILL_INTELLIGENCE_SYSTEM.md | 1026 + docs/strategy/ACTION_PLAN.md | 917 + .../ARBITRARY_LIMITS_AND_DEAD_CODE_PLAN.md | 495 + docs/strategy/DEEPWIKI_ANALYSIS.md | 363 + docs/strategy/INTEGRATION_STRATEGY.md | 524 + docs/strategy/INTEGRATION_TEMPLATES.md | 627 + docs/strategy/KIMI_ANALYSIS_COMPARISON.md | 504 + docs/strategy/README.md | 321 + .../STAGE_1_CORRECTED_IMPLEMENTATION.md | 159 + .../STAGE_1_IMPLEMENTATION_SUMMARY.md | 175 + .../STAGE_1_REVIEW_AND_VERIFICATION.md | 280 + docs/user-guide/01-core-concepts.md | 584 + docs/user-guide/02-scraping.md | 708 + docs/user-guide/03-enhancement.md | 446 + docs/user-guide/04-packaging.md | 515 + docs/user-guide/05-workflows.md | 666 + docs/user-guide/06-troubleshooting.md | 108 + docs/zh-CN/ARCHITECTURE.md | 263 + docs/zh-CN/README.md | 233 + docs/zh-CN/advanced/custom-workflows.md | 400 + docs/zh-CN/advanced/mcp-server.md | 354 + docs/zh-CN/advanced/multi-source.md | 653 + docs/zh-CN/getting-started/01-installation.md | 332 + docs/zh-CN/getting-started/02-quick-start.md | 383 + .../getting-started/03-your-first-skill.md | 396 + docs/zh-CN/getting-started/04-next-steps.md | 327 + docs/zh-CN/reference/AI_SKILL_STANDARDS.md | 926 + docs/zh-CN/reference/API_REFERENCE.md | 896 + .../reference/C3_x_Router_Architecture.md | 2361 + docs/zh-CN/reference/CLAUDE_INTEGRATION.md | 535 + docs/zh-CN/reference/CLI_REFERENCE.md | 1783 + docs/zh-CN/reference/CODE_QUALITY.md | 823 + docs/zh-CN/reference/CONFIG_FORMAT.md | 859 + docs/zh-CN/reference/ENVIRONMENT_VARIABLES.md | 884 + docs/zh-CN/reference/FEATURE_MATRIX.md | 382 + docs/zh-CN/reference/GIT_CONFIG_SOURCES.md | 921 + docs/zh-CN/reference/LARGE_DOCUMENTATION.md | 431 + docs/zh-CN/reference/LLMS_TXT_SUPPORT.md | 60 + docs/zh-CN/reference/MCP_REFERENCE.md | 1185 + docs/zh-CN/reference/SKILL_ARCHITECTURE.md | 930 + docs/zh-CN/user-guide/01-core-concepts.md | 583 + docs/zh-CN/user-guide/02-scraping.md | 708 + docs/zh-CN/user-guide/03-enhancement.md | 446 + docs/zh-CN/user-guide/04-packaging.md | 508 + docs/zh-CN/user-guide/05-workflows.md | 666 + docs/zh-CN/user-guide/06-troubleshooting.md | 108 + example-mcp-config.json | 14 + examples/chroma-example/1_generate_skill.py | 88 + examples/chroma-example/2_upload_to_chroma.py | 172 + examples/chroma-example/3_query_example.py | 290 + examples/chroma-example/README.md | 394 + examples/chroma-example/requirements.txt | 10 + examples/cline-django-assistant/README.md | 363 + .../generate_clinerules.py | 226 + .../cline-django-assistant/requirements.txt | 5 + examples/continue-dev-universal/README.md | 597 + .../continue-dev-universal/context_server.py | 284 + examples/continue-dev-universal/quickstart.py | 190 + .../continue-dev-universal/requirements.txt | 3 + .../cursor-react-skill/.cursorrules.example | 171 + examples/cursor-react-skill/README.md | 370 + .../example-project/README.md | 43 + .../example-project/package.json | 21 + .../example-project/src/App.tsx | 23 + .../example-project/src/index.tsx | 13 + .../example-project/tsconfig.json | 25 + .../generate_cursorrules.py | 143 + examples/cursor-react-skill/requirements.txt | 7 + examples/faiss-example/1_generate_skill.py | 26 + examples/faiss-example/2_build_faiss_index.py | 72 + examples/faiss-example/3_query_example.py | 72 + examples/faiss-example/README.md | 95 + examples/faiss-example/requirements.txt | 6 + examples/haystack-pipeline/README.md | 278 + examples/haystack-pipeline/quickstart.py | 128 + examples/haystack-pipeline/requirements.txt | 11 + examples/http_transport_examples.sh | 120 + examples/langchain-rag-pipeline/README.md | 122 + examples/langchain-rag-pipeline/quickstart.py | 209 + .../langchain-rag-pipeline/requirements.txt | 17 + examples/llama-index-query-engine/README.md | 166 + .../llama-index-query-engine/quickstart.py | 219 + .../llama-index-query-engine/requirements.txt | 14 + examples/pinecone-upsert/README.md | 248 + examples/pinecone-upsert/quickstart.py | 351 + examples/pinecone-upsert/requirements.txt | 11 + examples/qdrant-example/1_generate_skill.py | 26 + examples/qdrant-example/2_upload_to_qdrant.py | 67 + examples/qdrant-example/3_query_example.py | 82 + examples/qdrant-example/README.md | 82 + examples/qdrant-example/requirements.txt | 4 + examples/test_http_server.py | 104 + examples/weaviate-example/1_generate_skill.py | 88 + .../weaviate-example/2_upload_to_weaviate.py | 185 + examples/weaviate-example/3_query_example.py | 281 + examples/weaviate-example/README.md | 339 + examples/weaviate-example/requirements.txt | 10 + .../sample_output/query_results.txt | 117 + examples/windsurf-fastapi-context/README.md | 279 + .../generate_windsurfrules.py | 159 + .../windsurf-fastapi-context/requirements.txt | 4 + helm/skill-seekers/Chart.yaml | 32 + helm/skill-seekers/templates/NOTES.txt | 144 + helm/skill-seekers/templates/_helpers.tpl | 60 + .../templates/chroma-deployment.yaml | 49 + helm/skill-seekers/templates/configmap.yaml | 12 + helm/skill-seekers/templates/hpa.yaml | 33 + helm/skill-seekers/templates/ingress.yaml | 41 + .../templates/mcp-deployment.yaml | 99 + helm/skill-seekers/templates/pvc.yaml | 110 + .../templates/qdrant-deployment.yaml | 50 + helm/skill-seekers/templates/secret.yaml | 20 + helm/skill-seekers/templates/service.yaml | 83 + .../templates/serviceaccount.yaml | 12 + .../templates/weaviate-deployment.yaml | 55 + helm/skill-seekers/values.yaml | 313 + mypy.ini | 13 + pyproject.toml | 451 + pytest.ci.ini | 20 + render-mcp.yaml | 17 + render.yaml | 17 + requirements.txt | 45 + scripts/bootstrap_skill.sh | 113 + scripts/check_translation_sync.sh | 63 + scripts/run_benchmarks.sh | 72 + scripts/run_integration_tests.sh | 248 + scripts/run_tests_fast.sh | 36 + scripts/skill_header.md | 43 + scripts/translate_doc.py | 246 + setup.sh | 585 + setup_mcp.sh | 719 + skills/skill-seekers/SKILL.md | 69 + src/skill_seekers/__init__.py | 17 + src/skill_seekers/_version.py | 52 + src/skill_seekers/benchmark/__init__.py | 41 + src/skill_seekers/benchmark/framework.py | 375 + src/skill_seekers/benchmark/models.py | 97 + src/skill_seekers/benchmark/runner.py | 330 + src/skill_seekers/cli/__init__.py | 46 + src/skill_seekers/cli/adaptors/__init__.py | 296 + src/skill_seekers/cli/adaptors/atlas.py | 19 + src/skill_seekers/cli/adaptors/base.py | 743 + src/skill_seekers/cli/adaptors/chroma.py | 447 + src/skill_seekers/cli/adaptors/claude.py | 396 + src/skill_seekers/cli/adaptors/deepseek.py | 19 + .../cli/adaptors/faiss_helpers.py | 463 + src/skill_seekers/cli/adaptors/fireworks.py | 19 + src/skill_seekers/cli/adaptors/gemini.py | 368 + src/skill_seekers/cli/adaptors/haystack.py | 357 + src/skill_seekers/cli/adaptors/ibm_bob.py | 148 + src/skill_seekers/cli/adaptors/kimi.py | 19 + src/skill_seekers/cli/adaptors/langchain.py | 339 + src/skill_seekers/cli/adaptors/llama_index.py | 380 + src/skill_seekers/cli/adaptors/markdown.py | 278 + src/skill_seekers/cli/adaptors/minimax.py | 21 + src/skill_seekers/cli/adaptors/openai.py | 413 + .../cli/adaptors/openai_compatible.py | 352 + src/skill_seekers/cli/adaptors/opencode.py | 188 + src/skill_seekers/cli/adaptors/openrouter.py | 19 + .../cli/adaptors/pinecone_adaptor.py | 492 + src/skill_seekers/cli/adaptors/qdrant.py | 543 + src/skill_seekers/cli/adaptors/qwen.py | 19 + .../cli/adaptors/streaming_adaptor.py | 241 + src/skill_seekers/cli/adaptors/together.py | 19 + src/skill_seekers/cli/adaptors/weaviate.py | 535 + src/skill_seekers/cli/agent_client.py | 842 + src/skill_seekers/cli/ai_enhancer.py | 371 + .../cli/api_reference_builder.py | 373 + .../cli/architectural_pattern_detector.py | 652 + src/skill_seekers/cli/arguments/__init__.py | 54 + src/skill_seekers/cli/arguments/analyze.py | 186 + src/skill_seekers/cli/arguments/asciidoc.py | 68 + src/skill_seekers/cli/arguments/chat.py | 102 + src/skill_seekers/cli/arguments/common.py | 266 + src/skill_seekers/cli/arguments/confluence.py | 109 + src/skill_seekers/cli/arguments/create.py | 997 + src/skill_seekers/cli/arguments/enhance.py | 146 + src/skill_seekers/cli/arguments/epub.py | 66 + src/skill_seekers/cli/arguments/github.py | 211 + src/skill_seekers/cli/arguments/html.py | 68 + src/skill_seekers/cli/arguments/jupyter.py | 68 + src/skill_seekers/cli/arguments/manpage.py | 84 + src/skill_seekers/cli/arguments/notion.py | 101 + src/skill_seekers/cli/arguments/openapi.py | 76 + src/skill_seekers/cli/arguments/package.py | 197 + src/skill_seekers/cli/arguments/pdf.py | 74 + src/skill_seekers/cli/arguments/pptx.py | 68 + src/skill_seekers/cli/arguments/rss.py | 101 + src/skill_seekers/cli/arguments/scrape.py | 216 + .../cli/arguments/sync_config.py | 66 + src/skill_seekers/cli/arguments/unified.py | 123 + src/skill_seekers/cli/arguments/upload.py | 119 + src/skill_seekers/cli/arguments/video.py | 166 + src/skill_seekers/cli/arguments/word.py | 66 + src/skill_seekers/cli/arguments/workflow.py | 70 + src/skill_seekers/cli/asciidoc_scraper.py | 922 + src/skill_seekers/cli/benchmark_cli.py | 300 + src/skill_seekers/cli/browser_renderer.py | 163 + src/skill_seekers/cli/chat_scraper.py | 1707 + src/skill_seekers/cli/cloud_storage_cli.py | 280 + src/skill_seekers/cli/code_analyzer.py | 2512 + src/skill_seekers/cli/codebase_scraper.py | 2207 + src/skill_seekers/cli/config_command.py | 563 + src/skill_seekers/cli/config_enhancer.py | 369 + src/skill_seekers/cli/config_extractor.py | 960 + src/skill_seekers/cli/config_fetcher.py | 221 + src/skill_seekers/cli/config_manager.py | 559 + src/skill_seekers/cli/config_validator.py | 572 + src/skill_seekers/cli/conflict_detector.py | 528 + src/skill_seekers/cli/confluence_scraper.py | 1887 + src/skill_seekers/cli/constants.py | 76 + src/skill_seekers/cli/create_command.py | 723 + src/skill_seekers/cli/defaults.json | 68 + src/skill_seekers/cli/defaults.py | 46 + src/skill_seekers/cli/dependency_analyzer.py | 1033 + src/skill_seekers/cli/doc_scraper.py | 2611 + src/skill_seekers/cli/doctor.py | 307 + .../cli/document_skill_builder.py | 611 + src/skill_seekers/cli/embedding_pipeline.py | 435 + src/skill_seekers/cli/enhance_command.py | 306 + src/skill_seekers/cli/enhance_skill.py | 630 + src/skill_seekers/cli/enhance_skill_local.py | 1450 + src/skill_seekers/cli/enhance_status.py | 167 + src/skill_seekers/cli/enhancement_workflow.py | 498 + src/skill_seekers/cli/epub_scraper.py | 529 + src/skill_seekers/cli/estimate_pages.py | 408 + src/skill_seekers/cli/execution_context.py | 622 + src/skill_seekers/cli/exit_codes.py | 17 + src/skill_seekers/cli/generate_router.py | 1221 + src/skill_seekers/cli/github_fetcher.py | 572 + src/skill_seekers/cli/github_scraper.py | 1534 + src/skill_seekers/cli/guide_enhancer.py | 620 + src/skill_seekers/cli/how_to_guide_builder.py | 1329 + src/skill_seekers/cli/html_scraper.py | 1296 + src/skill_seekers/cli/incremental_updater.py | 469 + src/skill_seekers/cli/install_agent.py | 440 + src/skill_seekers/cli/install_skill.py | 116 + src/skill_seekers/cli/jupyter_scraper.py | 978 + src/skill_seekers/cli/language_detector.py | 740 + src/skill_seekers/cli/llms_txt_detector.py | 60 + src/skill_seekers/cli/llms_txt_downloader.py | 104 + src/skill_seekers/cli/llms_txt_parser.py | 160 + src/skill_seekers/cli/main.py | 238 + src/skill_seekers/cli/man_scraper.py | 1245 + src/skill_seekers/cli/markdown_cleaner.py | 132 + src/skill_seekers/cli/merge_sources.py | 820 + src/skill_seekers/cli/multilang_support.py | 481 + src/skill_seekers/cli/notion_scraper.py | 869 + src/skill_seekers/cli/openapi_scraper.py | 1788 + .../cli/opencode_skill_splitter.py | 447 + src/skill_seekers/cli/package_multi.py | 77 + src/skill_seekers/cli/package_skill.py | 349 + src/skill_seekers/cli/parallel_batches.py | 97 + src/skill_seekers/cli/parsers/__init__.py | 82 + .../cli/parsers/analyze_parser.py | 36 + .../cli/parsers/asciidoc_parser.py | 32 + src/skill_seekers/cli/parsers/base.py | 75 + src/skill_seekers/cli/parsers/chat_parser.py | 32 + .../cli/parsers/config_parser.py | 31 + .../cli/parsers/confluence_parser.py | 32 + .../cli/parsers/create_parser.py | 123 + .../cli/parsers/doctor_parser.py | 25 + .../cli/parsers/enhance_parser.py | 36 + .../cli/parsers/enhance_status_parser.py | 26 + src/skill_seekers/cli/parsers/epub_parser.py | 32 + .../cli/parsers/estimate_parser.py | 52 + .../cli/parsers/extractors/__init__.py | 95 + .../cli/parsers/extractors/base_parser.py | 361 + .../cli/parsers/extractors/formatters.py | 352 + .../cli/parsers/extractors/markdown_parser.py | 724 + .../cli/parsers/extractors/pdf_parser.py | 279 + .../cli/parsers/extractors/quality_scorer.py | 384 + .../cli/parsers/extractors/rst_parser.py | 1059 + .../parsers/extractors/unified_structure.py | 442 + .../cli/parsers/github_parser.py | 35 + src/skill_seekers/cli/parsers/html_parser.py | 32 + .../cli/parsers/install_agent_parser.py | 34 + .../cli/parsers/install_parser.py | 51 + .../cli/parsers/jupyter_parser.py | 32 + .../cli/parsers/manpage_parser.py | 32 + .../cli/parsers/multilang_parser.py | 34 + .../cli/parsers/notion_parser.py | 32 + .../cli/parsers/openapi_parser.py | 32 + .../cli/parsers/package_parser.py | 32 + src/skill_seekers/cli/parsers/pdf_parser.py | 32 + src/skill_seekers/cli/parsers/pptx_parser.py | 32 + .../cli/parsers/quality_parser.py | 36 + .../cli/parsers/resume_parser.py | 27 + src/skill_seekers/cli/parsers/rss_parser.py | 32 + src/skill_seekers/cli/parsers/scan_parser.py | 107 + .../cli/parsers/scrape_parser.py | 35 + .../cli/parsers/stream_parser.py | 45 + .../cli/parsers/sync_config_parser.py | 30 + .../cli/parsers/test_examples_parser.py | 45 + .../cli/parsers/unified_parser.py | 32 + .../cli/parsers/update_parser.py | 32 + .../cli/parsers/upload_parser.py | 32 + src/skill_seekers/cli/parsers/video_parser.py | 32 + src/skill_seekers/cli/parsers/word_parser.py | 32 + .../cli/parsers/workflows_parser.py | 83 + src/skill_seekers/cli/pattern_recognizer.py | 1967 + src/skill_seekers/cli/pdf_extractor_poc.py | 1199 + src/skill_seekers/cli/pdf_scraper.py | 598 + src/skill_seekers/cli/pptx_scraper.py | 1341 + src/skill_seekers/cli/presets/__init__.py | 67 + .../cli/presets/analyze_presets.py | 259 + .../cli/presets/github_presets.py | 116 + src/skill_seekers/cli/presets/manager.py | 176 + .../cli/presets/scrape_presets.py | 127 + src/skill_seekers/cli/quality_checker.py | 519 + src/skill_seekers/cli/quality_metrics.py | 602 + src/skill_seekers/cli/rag_chunker.py | 422 + src/skill_seekers/cli/rate_limit_handler.py | 438 + src/skill_seekers/cli/resume_command.py | 162 + src/skill_seekers/cli/rss_scraper.py | 881 + src/skill_seekers/cli/run_tests.py | 230 + src/skill_seekers/cli/scan_command.py | 1337 + src/skill_seekers/cli/scraper_utils.py | 164 + src/skill_seekers/cli/setup_wizard.py | 93 + src/skill_seekers/cli/signal_collectors.py | 433 + src/skill_seekers/cli/signal_flow_analyzer.py | 475 + src/skill_seekers/cli/skill_converter.py | 205 + src/skill_seekers/cli/source_detector.py | 652 + src/skill_seekers/cli/split_config.py | 395 + src/skill_seekers/cli/storage/__init__.py | 84 + .../cli/storage/azure_storage.py | 239 + src/skill_seekers/cli/storage/base_storage.py | 268 + src/skill_seekers/cli/storage/gcs_storage.py | 186 + src/skill_seekers/cli/storage/s3_storage.py | 191 + src/skill_seekers/cli/streaming_ingest.py | 468 + src/skill_seekers/cli/swift_patterns.py | 560 + src/skill_seekers/cli/sync_cli.py | 207 + src/skill_seekers/cli/sync_config.py | 332 + .../cli/test_example_extractor.py | 1188 + src/skill_seekers/cli/test_unified_simple.py | 179 + .../cli/unified_codebase_analyzer.py | 581 + src/skill_seekers/cli/unified_enhancer.py | 300 + src/skill_seekers/cli/unified_scraper.py | 2216 + .../cli/unified_skill_builder.py | 2269 + src/skill_seekers/cli/upload_skill.py | 169 + src/skill_seekers/cli/utils.py | 568 + src/skill_seekers/cli/video_metadata.py | 270 + src/skill_seekers/cli/video_models.py | 848 + src/skill_seekers/cli/video_scraper.py | 1026 + src/skill_seekers/cli/video_segmenter.py | 231 + src/skill_seekers/cli/video_setup.py | 833 + src/skill_seekers/cli/video_transcript.py | 396 + src/skill_seekers/cli/video_visual.py | 2420 + src/skill_seekers/cli/word_scraper.py | 382 + src/skill_seekers/cli/workflow_runner.py | 219 + src/skill_seekers/cli/workflows_command.py | 308 + src/skill_seekers/embedding/__init__.py | 31 + src/skill_seekers/embedding/cache.py | 352 + src/skill_seekers/embedding/generator.py | 423 + src/skill_seekers/embedding/models.py | 130 + src/skill_seekers/embedding/server.py | 345 + src/skill_seekers/mcp/README.md | 671 + src/skill_seekers/mcp/__init__.py | 34 + src/skill_seekers/mcp/agent_detector.py | 316 + src/skill_seekers/mcp/config_publisher.py | 13 + src/skill_seekers/mcp/git_repo.py | 9 + src/skill_seekers/mcp/marketplace_manager.py | 9 + .../mcp/marketplace_publisher.py | 9 + src/skill_seekers/mcp/requirements.txt | 9 + src/skill_seekers/mcp/server.py | 231 + src/skill_seekers/mcp/server_fastmcp.py | 1792 + src/skill_seekers/mcp/server_legacy.py | 2234 + src/skill_seekers/mcp/source_manager.py | 9 + src/skill_seekers/mcp/tools/__init__.py | 187 + src/skill_seekers/mcp/tools/_common.py | 171 + src/skill_seekers/mcp/tools/config_tools.py | 271 + .../mcp/tools/marketplace_tools.py | 213 + .../mcp/tools/packaging_tools.py | 857 + src/skill_seekers/mcp/tools/scraping_tools.py | 1045 + src/skill_seekers/mcp/tools/source_tools.py | 636 + .../mcp/tools/splitting_tools.py | 119 + .../mcp/tools/subprocess_utils.py | 75 + .../mcp/tools/sync_config_tools.py | 77 + .../mcp/tools/vector_db_tools.py | 474 + src/skill_seekers/mcp/tools/workflow_tools.py | 251 + src/skill_seekers/py.typed | 0 src/skill_seekers/services/__init__.py | 17 + .../services/config_publisher.py | 259 + src/skill_seekers/services/git_repo.py | 273 + .../services/marketplace_manager.py | 196 + .../services/marketplace_publisher.py | 315 + src/skill_seekers/services/source_manager.py | 602 + src/skill_seekers/sync/__init__.py | 40 + src/skill_seekers/sync/detector.py | 315 + src/skill_seekers/sync/models.py | 141 + src/skill_seekers/sync/monitor.py | 263 + src/skill_seekers/sync/notifier.py | 139 + src/skill_seekers/workflows/__init__.py | 1 + .../workflows/accessibility-a11y.yaml | 101 + .../workflows/advanced-patterns.yaml | 109 + .../workflows/ai-assistant-internals.yaml | 131 + .../workflows/api-documentation.yaml | 71 + .../workflows/api-evolution.yaml | 93 + src/skill_seekers/workflows/api-gateway.yaml | 194 + .../workflows/architecture-comprehensive.yaml | 72 + .../workflows/auth-strategies.yaml | 102 + src/skill_seekers/workflows/aws-services.yaml | 191 + .../workflows/background-jobs.yaml | 168 + .../workflows/backup-disaster-recovery.yaml | 142 + src/skill_seekers/workflows/build-tools.yaml | 190 + .../workflows/caching-strategies.yaml | 168 + src/skill_seekers/workflows/cli-tooling.yaml | 92 + .../workflows/comparison-matrix.yaml | 95 + .../workflows/complex-merge.yaml | 222 + .../workflows/compliance-gdpr.yaml | 98 + .../workflows/component-library.yaml | 170 + .../workflows/computer-vision.yaml | 142 + .../workflows/contribution-guide.yaml | 117 + .../workflows/data-validation.yaml | 168 + .../workflows/database-schema.yaml | 99 + src/skill_seekers/workflows/deep-linking.yaml | 142 + src/skill_seekers/workflows/default.yaml | 77 + .../workflows/design-system.yaml | 142 + .../workflows/devops-deployment.yaml | 125 + .../workflows/encryption-guide.yaml | 98 + src/skill_seekers/workflows/event-driven.yaml | 166 + .../workflows/feature-engineering.yaml | 77 + .../workflows/forms-validation.yaml | 171 + .../workflows/graphql-schema.yaml | 98 + .../workflows/grpc-services.yaml | 166 + src/skill_seekers/workflows/iam-identity.yaml | 142 + .../workflows/kubernetes-deployment.yaml | 98 + .../workflows/localization-i18n.yaml | 166 + .../workflows/message-queues.yaml | 166 + .../workflows/microservices-patterns.yaml | 124 + .../workflows/migration-guide.yaml | 107 + src/skill_seekers/workflows/minimal.yaml | 32 + .../workflows/mlops-pipeline.yaml | 98 + .../workflows/model-deployment.yaml | 98 + .../workflows/observability-stack.yaml | 98 + .../workflows/offline-first.yaml | 97 + .../workflows/onboarding-beginner.yaml | 123 + .../workflows/performance-optimization.yaml | 100 + .../workflows/platform-specific.yaml | 77 + .../workflows/prompt-injection-check.yaml | 37 + .../workflows/push-notifications.yaml | 98 + .../workflows/pwa-checklist.yaml | 97 + .../workflows/rate-limiting.yaml | 92 + .../workflows/responsive-design.yaml | 94 + .../workflows/rest-api-design.yaml | 96 + .../workflows/sdk-integration.yaml | 122 + .../workflows/secrets-management.yaml | 98 + .../workflows/security-focus.yaml | 70 + .../workflows/serverless-architecture.yaml | 188 + src/skill_seekers/workflows/ssr-guide.yaml | 97 + .../workflows/state-management.yaml | 98 + .../workflows/stream-processing.yaml | 142 + .../workflows/terraform-guide.yaml | 98 + .../workflows/testing-focus.yaml | 98 + .../workflows/testing-frontend.yaml | 142 + .../workflows/troubleshooting-guide.yaml | 102 + .../workflows/unity-game-dev.yaml | 214 + .../workflows/vector-databases.yaml | 142 + .../workflows/video-tutorial.yaml | 125 + .../workflows/webhook-guide.yaml | 142 + .../workflows/websockets-realtime.yaml | 162 + templates/github-actions/update-skills.yml | 153 + tests/__init__.py | 1 + tests/conftest.py | 45 + tests/docker-compose.test.yml | 66 + tests/fixtures/example_conflicts.json | 142 + tests/fixtures/generate_fixtures.py | 285 + tests/fixtures/synthetic/document.docx | Bin 0 -> 37031 bytes tests/fixtures/synthetic/document.epub | Bin 0 -> 2372 bytes tests/fixtures/synthetic/document.pdf | Bin 0 -> 4114 bytes tests/golden/phase2/chat/SKILL.md | 165 + .../chat/references/engineering_s1-s2.md | 168 + tests/golden/phase2/chat/references/index.md | 34 + .../phase2/chat/references/random_s3-s3.md | 12 + tests/golden/phase2/chat_empty/SKILL.md | 56 + .../phase2/chat_empty/references/index.md | 15 + .../chat_empty/references/section_01.md | 2 + tests/golden/phase2/chat_single/SKILL.md | 62 + .../phase2/chat_single/references/index.md | 25 + .../phase2/chat_single/references/main.md | 12 + tests/golden/phase2/chat_topics/SKILL.md | 73 + .../chat_topics/references/general_s3-s3.md | 12 + .../phase2/chat_topics/references/index.md | 27 + .../chat_topics/references/setup_s2-s2.md | 12 + .../references/troubleshooting_s1-s1.md | 12 + tests/golden/phase2/epub/SKILL.md | 169 + .../phase2/epub/assets/section_1_img_0.png | 1 + .../golden/phase2/epub/references/handbook.md | 128 + tests/golden/phase2/epub/references/index.md | 13 + tests/golden/phase2/epub_kw/SKILL.md | 161 + .../phase2/epub_kw/assets/section_1_img_0.png | 1 + .../golden/phase2/epub_kw/references/index.md | 13 + .../epub_kw/references/section_s1-s1.md | 37 + .../epub_kw/references/section_s2-s2.md | 83 + .../epub_kw/references/section_s3-s3.md | 12 + tests/golden/phase2/html/SKILL.md | 174 + tests/golden/phase2/html/references/index.md | 13 + tests/golden/phase2/html/references/page.md | 145 + tests/golden/phase2/html_kw/SKILL.md | 166 + .../golden/phase2/html_kw/references/index.md | 14 + .../html_kw/references/section_s1-s1.md | 42 + .../html_kw/references/section_s2-s2.md | 87 + .../html_kw/references/section_s3-s4.md | 20 + tests/golden/phase2/html_multi/SKILL.md | 170 + .../references/golden_html_multi_s1-s2.md | 127 + .../references/golden_html_multi_s3-s4.md | 20 + .../phase2/html_multi/references/index.md | 13 + tests/golden/phase2/jupyter/SKILL.md | 161 + .../phase2/jupyter/references/analysis.md | 161 + .../golden/phase2/jupyter/references/index.md | 21 + tests/golden/phase2/jupyter_dir/SKILL.md | 167 + .../phase2/jupyter_dir/references/index.md | 24 + .../jupyter_dir/references/section_s1-s1.md | 20 + .../jupyter_dir/references/section_s2-s2.md | 30 + .../jupyter_dir/references/section_s3-s4.md | 31 + .../jupyter_dir/references/section_s5-s5.md | 86 + tests/golden/phase2/jupyter_kw/SKILL.md | 163 + .../phase2/jupyter_kw/references/index.md | 23 + .../jupyter_kw/references/section_04.md | 2 + .../jupyter_kw/references/section_s1-s1.md | 20 + .../jupyter_kw/references/section_s2-s2.md | 30 + .../jupyter_kw/references/section_s3-s4.md | 31 + .../jupyter_kw/references/section_s5-s5.md | 86 + tests/golden/phase2/jupyter_topics/SKILL.md | 167 + .../phase2/jupyter_topics/references/index.md | 24 + .../references/section_s1-s1.md | 20 + .../references/section_s2-s2.md | 30 + .../references/section_s3-s4.md | 31 + .../references/section_s5-s5.md | 86 + tests/golden/phase2/man/SKILL.md | 103 + tests/golden/phase2/man/references/curl_02.md | 24 + tests/golden/phase2/man/references/git_01.md | 73 + tests/golden/phase2/man/references/index.md | 19 + tests/golden/phase2/man_kw/SKILL.md | 103 + .../golden/phase2/man_kw/references/index.md | 19 + .../phase2/man_kw/references/other_02.md | 24 + .../man_kw/references/version_control_01.md | 73 + tests/golden/phase2/man_single/SKILL.md | 64 + .../phase2/man_single/references/curl.md | 24 + .../phase2/man_single/references/index.md | 15 + tests/golden/phase2/pdf/SKILL.md | 151 + .../golden/phase2/pdf/assets/page_2_img_0.png | 1 + tests/golden/phase2/pdf/references/index.md | 13 + tests/golden/phase2/pdf/references/manual.md | 124 + tests/golden/phase2/pdf_chapters/SKILL.md | 155 + .../pdf_chapters/assets/page_2_img_0.png | 1 + .../phase2/pdf_chapters/references/index.md | 15 + .../pdf_chapters/references/section_p1-p2.md | 108 + .../pdf_chapters/references/section_p3-p3.md | 20 + .../pdf_chapters/references/section_p4-p4.md | 12 + tests/golden/phase2/pdf_kw/SKILL.md | 157 + .../phase2/pdf_kw/assets/page_2_img_0.png | 1 + .../golden/phase2/pdf_kw/references/index.md | 16 + .../phase2/pdf_kw/references/section_03.md | 2 + .../phase2/pdf_kw/references/section_p1-p1.md | 28 + .../phase2/pdf_kw/references/section_p2-p2.md | 84 + .../phase2/pdf_kw/references/section_p3-p3.md | 20 + tests/golden/phase2/pptx/SKILL.md | 175 + tests/golden/phase2/pptx/references/deck.md | 132 + tests/golden/phase2/pptx/references/index.md | 15 + tests/golden/phase2/pptx_kw/SKILL.md | 165 + .../golden/phase2/pptx_kw/references/index.md | 15 + .../pptx_kw/references/section_s1-s1.md | 41 + .../pptx_kw/references/section_s2-s2.md | 83 + .../pptx_kw/references/section_s3-s3.md | 12 + tests/golden/phase2/rss/SKILL.md | 108 + tests/golden/phase2/rss/references/dev_ops.md | 26 + tests/golden/phase2/rss/references/index.md | 26 + tests/golden/phase2/rss/references/python.md | 22 + .../phase2/rss/references/uncategorized.md | 22 + tests/golden/phase2/rss/references/unnamed.md | 16 + tests/golden/phase2/rss_empty/SKILL.md | 55 + .../rss_empty/references/all_articles.md | 6 + .../phase2/rss_empty/references/index.md | 17 + tests/golden/phase2/word/SKILL.md | 167 + .../phase2/word/assets/section_1_img_0.png | 1 + tests/golden/phase2/word/references/index.md | 13 + tests/golden/phase2/word/references/manual.md | 128 + tests/mcp_integration_test.md | 568 + tests/phase2_golden_utils.py | 64 + tests/test_adaptor_benchmarks.py | 432 + tests/test_adaptors/__init__.py | 1 + tests/test_adaptors/test_adaptors_e2e.py | 895 + tests/test_adaptors/test_base.py | 118 + tests/test_adaptors/test_chroma_adaptor.py | 219 + tests/test_adaptors/test_claude_adaptor.py | 313 + .../test_enhance_via_agent_client.py | 120 + tests/test_adaptors/test_faiss_adaptor.py | 188 + tests/test_adaptors/test_gemini_adaptor.py | 144 + tests/test_adaptors/test_haystack_adaptor.py | 191 + tests/test_adaptors/test_ibm_bob_adaptor.py | 125 + tests/test_adaptors/test_langchain_adaptor.py | 229 + .../test_adaptors/test_llama_index_adaptor.py | 190 + tests/test_adaptors/test_markdown_adaptor.py | 226 + tests/test_adaptors/test_minimax_adaptor.py | 545 + tests/test_adaptors/test_openai_adaptor.py | 237 + .../test_openai_compatible_base.py | 265 + .../test_openai_compatible_shared.py | 288 + tests/test_adaptors/test_opencode_adaptor.py | 210 + tests/test_adaptors/test_qdrant_adaptor.py | 189 + .../test_streaming_mixin_formats.py | 287 + tests/test_adaptors/test_weaviate_adaptor.py | 193 + tests/test_agent_client.py | 911 + tests/test_api_reference_builder.py | 355 + tests/test_architectural_pattern_detector.py | 336 + tests/test_architecture_scenarios.py | 1058 + tests/test_async_scraping.py | 336 + tests/test_benchmark.py | 653 + tests/test_bootstrap_skill.py | 82 + tests/test_bootstrap_skill_e2e.py | 165 + tests/test_browser_renderer.py | 179 + tests/test_c3_integration.py | 524 + tests/test_chunking_integration.py | 464 + tests/test_cli_parsers.py | 385 + tests/test_cli_paths.py | 204 + tests/test_cli_refactor_e2e.py | 140 + tests/test_cloud_storage.py | 522 + tests/test_code_analyzer.py | 1466 + tests/test_codebase_scraper.py | 478 + tests/test_config_extractor.py | 655 + tests/test_config_fetcher.py | 340 + tests/test_config_manager.py | 50 + tests/test_config_publisher.py | 529 + tests/test_config_validation.py | 270 + tests/test_conflict_detector.py | 76 + tests/test_constants.py | 168 + tests/test_create_arguments.py | 403 + tests/test_create_integration_basic.py | 241 + tests/test_create_local_depth.py | 53 + tests/test_create_pipeline_regressions.py | 415 + tests/test_data_file_dir_regressions.py | 206 + tests/test_dependency_analyzer.py | 581 + tests/test_docker_smoke.py | 76 + tests/test_doctor.py | 175 + tests/test_document_skill_builder_hooks.py | 159 + tests/test_e2e_three_stream_pipeline.py | 598 + tests/test_embedding.py | 379 + tests/test_embedding_pipeline.py | 287 + tests/test_embedding_server.py | 197 + tests/test_encoding.py | 78 + tests/test_enhance_command.py | 551 + tests/test_enhance_skill_local.py | 979 + tests/test_epub_scraper.py | 1674 + tests/test_estimate_pages.py | 210 + tests/test_estimate_url_guard.py | 29 + tests/test_excluded_dirs_config.py | 350 + tests/test_execution_context.py | 656 + tests/test_framework_detection.py | 150 + tests/test_generate_router_github.py | 516 + tests/test_git_repo.py | 412 + tests/test_git_sources_e2e.py | 879 + tests/test_github_fetcher.py | 658 + tests/test_github_scraper.py | 1571 + tests/test_guide_enhancer.py | 652 + tests/test_how_to_guide_builder.py | 1162 + tests/test_incremental_updates.py | 338 + tests/test_install_agent.py | 565 + tests/test_install_multiplatform.py | 138 + tests/test_install_skill.py | 378 + tests/test_install_skill_e2e.py | 629 + tests/test_integration.py | 629 + tests/test_integration_adaptors.py | 590 + tests/test_issue_219_e2e.py | 336 + tests/test_issue_277_discord_e2e.py | 149 + tests/test_issue_277_real_world.py | 300 + tests/test_kotlin_support.py | 690 + tests/test_language_detector.py | 709 + tests/test_large_inputs.py | 122 + tests/test_llms_txt_downloader.py | 346 + tests/test_markdown_parsing.py | 461 + tests/test_marketplace_manager.py | 248 + tests/test_marketplace_publisher.py | 668 + tests/test_mcp_fastmcp.py | 889 + tests/test_mcp_git_sources.py | 569 + tests/test_mcp_inprocess_tools.py | 681 + tests/test_mcp_server.py | 733 + tests/test_mcp_tools_common.py | 72 + tests/test_mcp_vector_dbs.py | 261 + tests/test_mcp_workflow_tools.py | 606 + tests/test_merge_sources_github.py | 572 + tests/test_multi_source.py | 620 + tests/test_multilang_support.py | 287 + tests/test_new_source_types.py | 1026 + tests/test_opencode_skill_splitter.py | 280 + tests/test_package_confirm.py | 42 + tests/test_package_skill.py | 259 + tests/test_package_structure.py | 244 + tests/test_parallel_batches.py | 94 + tests/test_parallel_scraping.py | 347 + tests/test_pattern_recognizer.py | 708 + tests/test_pdf_advanced_features.py | 541 + tests/test_pdf_extractor.py | 794 + tests/test_pdf_scraper.py | 634 + tests/test_phase2_golden_chat.py | 374 + tests/test_phase2_golden_epub_word.py | 136 + tests/test_phase2_golden_html.py | 181 + tests/test_phase2_golden_jupyter.py | 205 + tests/test_phase2_golden_man.py | 139 + tests/test_phase2_golden_pdf.py | 139 + tests/test_phase2_golden_pptx.py | 143 + tests/test_phase2_golden_rss.py | 159 + tests/test_pinecone_adaptor.py | 905 + tests/test_preset_system.py | 244 + tests/test_quality_checker.py | 446 + tests/test_quality_metrics.py | 413 + tests/test_rag_chunker.py | 424 + tests/test_rate_limit_handler.py | 300 + tests/test_real_world_fastmcp.py | 558 + tests/test_registry_platform_lists.py | 105 + tests/test_scan_command.py | 1894 + tests/test_scrape_count.py | 195 + tests/test_scraper_features.py | 909 + tests/test_scraper_utils.py | 170 + tests/test_server_fastmcp_http.py | 170 + tests/test_services_backcompat.py | 74 + tests/test_setup_scripts.py | 266 + tests/test_signal_collectors.py | 445 + tests/test_signal_flow_analyzer.py | 28 + tests/test_sitemap_timeout.py | 38 + tests/test_skill_converter.py | 102 + tests/test_skip_llms_txt.py | 329 + tests/test_smart_summarization.py | 238 + tests/test_source_detector.py | 333 + tests/test_source_manager.py | 535 + tests/test_streaming_ingestion.py | 268 + tests/test_subprocess_with_streaming.py | 121 + tests/test_swift_detection.py | 1429 + tests/test_sync_config.py | 590 + tests/test_sync_config_e2e.py | 629 + tests/test_sync_detector.py | 299 + tests/test_sync_models.py | 209 + tests/test_sync_monitor.py | 254 + tests/test_sync_notifier.py | 145 + tests/test_terminal_detection.py | 329 + tests/test_test_example_extractor.py | 722 + tests/test_unified.py | 937 + tests/test_unified_analyzer.py | 423 + tests/test_unified_config_validator.py | 358 + tests/test_unified_mcp_integration.py | 275 + tests/test_unified_parsers.py | 436 + tests/test_unified_scraper_orchestration.py | 1092 + tests/test_upload_integration.py | 329 + tests/test_upload_skill.py | 141 + tests/test_url_conversion.py | 294 + tests/test_utilities.py | 331 + tests/test_video_scraper.py | 3598 + tests/test_video_setup.py | 727 + tests/test_word_scraper.py | 730 + tests/test_workflow_prompt_injection.py | 94 + tests/test_workflow_runner.py | 479 + tests/test_workflow_tools_mcp.py | 295 + tests/test_workflows_command.py | 571 + uv.lock | 7363 + 2985 files changed, 1288070 insertions(+) create mode 100644 .claude/mcp_config.example.json create mode 100644 .codex-plugin/plugin.json create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/documentation.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/mcp_tool.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100755 .github/create_issues.sh create mode 100644 .github/workflows/docker-publish.yml create mode 100644 .github/workflows/quality-metrics.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/scheduled-updates.yml create mode 100644 .github/workflows/test-vector-dbs.yml create mode 100644 .github/workflows/tests.yml create mode 100644 .github/workflows/vector-db-export.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .mcp.json create mode 100644 AGENTS.md create mode 100644 BULLETPROOF_QUICKSTART.md create mode 100644 CHANGELOG.md create mode 100644 CLAUDE.md create mode 100644 CONTRIBUTING.md create mode 100644 DOCUMENTATION_AUDIT_REPORT_2026-05-30.md create mode 100644 Dockerfile create mode 100644 Dockerfile.mcp create mode 100644 LICENSE create mode 100644 QWEN.md create mode 100644 README.ar.md create mode 100644 README.de.md create mode 100644 README.es.md create mode 100644 README.fr.md create mode 100644 README.hi.md create mode 100644 README.ja.md create mode 100644 README.ko.md create mode 100644 README.md create mode 100644 README.pt-BR.md create mode 100644 README.ru.md create mode 100644 README.tr.md create mode 100644 README.wehub.md create mode 100644 README.zh-CN.md create mode 100644 ROADMAP.md create mode 100644 TROUBLESHOOTING.md create mode 100644 api/.gitignore create mode 100644 api/README.md create mode 100644 api/__init__.py create mode 100644 api/config_analyzer.py create mode 100644 api/main.py create mode 100644 api/requirements.txt create mode 100644 codecov.yml create mode 100644 configs/astrovalley_unified.json create mode 100644 configs/blender-unified.json create mode 100644 configs/claude-code-unified.json create mode 100644 configs/claude-code.json create mode 100644 configs/godot.json create mode 100644 configs/godot_unified.json create mode 100644 configs/httpx_comprehensive.json create mode 100644 configs/medusa-mercurjs.json create mode 100644 configs/react.json create mode 100644 configs/unity-addressables.json create mode 100644 configs/unity-dotween.json create mode 100644 configs/unity-spine.json create mode 100644 distribution/claude-plugin/.claude-plugin/plugin.json create mode 100644 distribution/claude-plugin/.mcp.json create mode 100644 distribution/claude-plugin/README.md create mode 100644 distribution/claude-plugin/commands/create-skill.md create mode 100644 distribution/claude-plugin/commands/install-skill.md create mode 100644 distribution/claude-plugin/commands/sync-config.md create mode 100644 distribution/claude-plugin/skills/skill-builder/SKILL.md create mode 100644 distribution/github-action/README.md create mode 100644 distribution/github-action/action.yml create mode 100644 distribution/smithery/README.md create mode 100644 docker-compose.yml create mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/BEST_PRACTICES.md create mode 100644 docs/BUG_AUDIT.md create mode 100644 docs/DOCKER_DEPLOYMENT.md create mode 100644 docs/FAQ.md create mode 100644 docs/KUBERNETES_DEPLOYMENT.md create mode 100644 docs/PRODUCTION_DEPLOYMENT.md create mode 100644 docs/README.md create mode 100644 docs/TROUBLESHOOTING.md create mode 100644 docs/UML/exports/00_package_overview.png create mode 100644 docs/UML/exports/01_cli_core.png create mode 100644 docs/UML/exports/02_scrapers.png create mode 100644 docs/UML/exports/03_adaptors.png create mode 100644 docs/UML/exports/04_analysis.png create mode 100644 docs/UML/exports/05_enhancement.png create mode 100644 docs/UML/exports/06_packaging.png create mode 100644 docs/UML/exports/07_mcp_server.png create mode 100644 docs/UML/exports/08_sync.png create mode 100644 docs/UML/exports/09_parsers.png create mode 100644 docs/UML/exports/10_storage.png create mode 100644 docs/UML/exports/11_embedding.png create mode 100644 docs/UML/exports/12_benchmark.png create mode 100644 docs/UML/exports/13_utilities.png create mode 100644 docs/UML/exports/14_create_pipeline_sequence.png create mode 100644 docs/UML/exports/15_github_unified_sequence.png create mode 100644 docs/UML/exports/16_source_detection_activity.png create mode 100644 docs/UML/exports/17_mcp_invocation_sequence.png create mode 100644 docs/UML/exports/18_enhancement_activity.png create mode 100644 docs/UML/exports/19_runtime_components.png create mode 100644 docs/UML/exports/20_browser_rendering_sequence.png create mode 100755 docs/UML/html/index.html/assets/css/bootstrap.css create mode 100755 docs/UML/html/index.html/assets/css/jquery.bonsai.css create mode 100755 docs/UML/html/index.html/assets/css/main.css create mode 100755 docs/UML/html/index.html/assets/icon-font/icons.css create mode 100755 docs/UML/html/index.html/assets/icon-font/icons.eot create mode 100755 docs/UML/html/index.html/assets/icon-font/icons.html create mode 100755 docs/UML/html/index.html/assets/icon-font/icons.ttf create mode 100755 docs/UML/html/index.html/assets/icon-font/icons.woff create mode 100755 docs/UML/html/index.html/assets/img/glyphicons-halflings-white.png create mode 100755 docs/UML/html/index.html/assets/img/glyphicons-halflings.png create mode 100755 docs/UML/html/index.html/assets/js/bootstrap.js create mode 100755 docs/UML/html/index.html/assets/js/imageMapResizer.min.js create mode 100755 docs/UML/html/index.html/assets/js/jquery-2.1.0.min.js create mode 100755 docs/UML/html/index.html/assets/js/jquery.bonsai.js create mode 100755 docs/UML/html/index.html/assets/js/less-1.7.0.min.js create mode 100644 docs/UML/html/index.html/contents/001c2eb31f7c3880775f9ab7ae4d0300.html create mode 100644 docs/UML/html/index.html/contents/0025564de1473d71f4a6a0503fcdb056.html create mode 100644 docs/UML/html/index.html/contents/00509100c34315b0f095eb3ccb34b023.html create mode 100644 docs/UML/html/index.html/contents/007ccbce3f2ec8a3534b719b3f0fca25.html create mode 100644 docs/UML/html/index.html/contents/00910695df59fa1e85314f6d17e4051f.html create mode 100644 docs/UML/html/index.html/contents/00b94cf5cf9ebf3c6672e9c21deff7ee.html create mode 100644 docs/UML/html/index.html/contents/00cb702eeb69e434bafcc1e2b04507b1.html create mode 100644 docs/UML/html/index.html/contents/00fb8de24d76667858a719d127f22f51.html create mode 100644 docs/UML/html/index.html/contents/010d7f06abc5890127077ec8d4d1038f.html create mode 100644 docs/UML/html/index.html/contents/0145e471015eac4d3ed45baa8579cb6b.html create mode 100644 docs/UML/html/index.html/contents/017fe081f5f76bed1d02586c4bb7f0b9.html create mode 100644 docs/UML/html/index.html/contents/01d30778d4613da403d3225af832495c.html create mode 100644 docs/UML/html/index.html/contents/01ff8f1b7d9d7beccdfac55ed1d3017d.html create mode 100644 docs/UML/html/index.html/contents/020e1bb770a7768e07c0338ecb4bda09.html create mode 100644 docs/UML/html/index.html/contents/02231b18c56eee1fe00db0b3cc88d3f3.html create mode 100644 docs/UML/html/index.html/contents/02524d7a310024538b8bf2b5217a0405.html create mode 100644 docs/UML/html/index.html/contents/0268261b9eda98ff7a999e6589b545c3.html create mode 100644 docs/UML/html/index.html/contents/0285f49d97b595de19ad3a55a9aa5fac.html create mode 100644 docs/UML/html/index.html/contents/029322692df61d1c9239a003a4f4947d.html create mode 100644 docs/UML/html/index.html/contents/02be13f7c985dd6b4b7a23916cf05ae4.html create mode 100644 docs/UML/html/index.html/contents/02c5b0d5c646f5b2a4735851a1a20a8f.html create mode 100644 docs/UML/html/index.html/contents/02d026fb13af0923877f41f68fb5585e.html create mode 100644 docs/UML/html/index.html/contents/02ddacbfe77e6d70d993a01120ddd2ac.html create mode 100644 docs/UML/html/index.html/contents/02e78bb1d9b10da68dd8d62379086a6e.html create mode 100644 docs/UML/html/index.html/contents/02f04803adb5c2b766559ee9412753dc.html create mode 100644 docs/UML/html/index.html/contents/030c139fa6e0d10e86fdb3d57e91149f.html create mode 100644 docs/UML/html/index.html/contents/0316bf28f31dfcc53a38fff09e04d662.html create mode 100644 docs/UML/html/index.html/contents/03453c84f468d387ae974dc92ceda0d6.html create mode 100644 docs/UML/html/index.html/contents/034b43824827421add2453b7695fc9b3.html create mode 100644 docs/UML/html/index.html/contents/0380ecfd61cacc868ff1d659572725bc.html create mode 100644 docs/UML/html/index.html/contents/03a572027e9889827df3efe4865d6c04.html create mode 100644 docs/UML/html/index.html/contents/03a80d0c833ca4ccb7d1214c35c1e1f3.html create mode 100644 docs/UML/html/index.html/contents/03b3d85c37ae6295a16b15383df9c540.html create mode 100644 docs/UML/html/index.html/contents/03d20cc75938c4aab55c8ce9feb554c5.html create mode 100644 docs/UML/html/index.html/contents/03e029aaa80cc56c5487c5172dbf41cc.html create mode 100644 docs/UML/html/index.html/contents/03ec42466372e6ac1f6317227d6a0563.html create mode 100644 docs/UML/html/index.html/contents/03f058a533840c37160ba9cbb3005bef.html create mode 100644 docs/UML/html/index.html/contents/040003573ebaf30612a0b6c775cc3702.html create mode 100644 docs/UML/html/index.html/contents/0423a6d6ebaedf5e0aa9c0cd98b8bff1.html create mode 100644 docs/UML/html/index.html/contents/044b5cd04d02bac8cea889cb65106f43.html create mode 100644 docs/UML/html/index.html/contents/0483a3757c109c28a7230e73efd926a1.html create mode 100644 docs/UML/html/index.html/contents/0490a212778e5ffa6d79cdf230143138.html create mode 100644 docs/UML/html/index.html/contents/04be98ec9bb8041fa720700c2ccc1351.html create mode 100644 docs/UML/html/index.html/contents/04d495ef445aec5ab8fada58f2ad2025.html create mode 100644 docs/UML/html/index.html/contents/04e0dd3038afc17aadc753ad9b8ffcd2.html create mode 100644 docs/UML/html/index.html/contents/04e975cb83b23b9c6a67aad0a9f79acf.html create mode 100644 docs/UML/html/index.html/contents/04f7b9e78182b7d501da5a2a7e9ab415.html create mode 100644 docs/UML/html/index.html/contents/0502b099c81cd8ec649f26367f0dc00c.html create mode 100644 docs/UML/html/index.html/contents/0525e1fe146314bf2258c8b421b5b4aa.html create mode 100644 docs/UML/html/index.html/contents/05266a4a31f3cfbb0093b305667bc937.html create mode 100644 docs/UML/html/index.html/contents/0551bb6cbac15533f87c5838f117a454.html create mode 100644 docs/UML/html/index.html/contents/055516bb90ac718f5b8c1c8da847c7b0.html create mode 100644 docs/UML/html/index.html/contents/0565785c1fa564d4b90864c7c45922e5.html create mode 100644 docs/UML/html/index.html/contents/0581aae259550c0b2f535f82a27a20d2.html create mode 100644 docs/UML/html/index.html/contents/05d2236199bcdc97250863d4d250f673.html create mode 100644 docs/UML/html/index.html/contents/05d2f64f779d9377edddfd01920b899f.html create mode 100644 docs/UML/html/index.html/contents/05d3258d24905a654413605b5e0974f5.html create mode 100644 docs/UML/html/index.html/contents/05d369359212eac14ceb7a81753d2e87.html create mode 100644 docs/UML/html/index.html/contents/05d6ebcd7c258f23a170566a10c631f2.html create mode 100644 docs/UML/html/index.html/contents/05e160e75f565278ee83d6208b57c04a.html create mode 100644 docs/UML/html/index.html/contents/068d87025fe2aadb0507fe941fef8c06.html create mode 100644 docs/UML/html/index.html/contents/06959fa5355b0e6089c1c9f9f7af3aa6.html create mode 100644 docs/UML/html/index.html/contents/06d8f28dd785295227c8a1d664901ca6.html create mode 100644 docs/UML/html/index.html/contents/06f8f577e16e7d14c5086f3106796bd7.html create mode 100644 docs/UML/html/index.html/contents/070148fb11e435ea8f68b1d19cc19db3.html create mode 100644 docs/UML/html/index.html/contents/071d0d0f0f869f58f3ea4bc2dd916024.html create mode 100644 docs/UML/html/index.html/contents/073c989581e4b19401094d4e6b51a5b7.html create mode 100644 docs/UML/html/index.html/contents/07cf2536e7dbcf8d87afb33d4f6b2bdf.html create mode 100644 docs/UML/html/index.html/contents/07dacffc54f86475400204d093091588.html create mode 100644 docs/UML/html/index.html/contents/07ddaa4469eef6b224bce1f3f94752ef.html create mode 100644 docs/UML/html/index.html/contents/07eacff5fbd0a5a70fe3f321c7debba4.html create mode 100644 docs/UML/html/index.html/contents/08042f3437de69e3a4e3d65f86fde219.html create mode 100644 docs/UML/html/index.html/contents/081582bfe433eed0e3f57b298ed41f30.html create mode 100644 docs/UML/html/index.html/contents/08252d0c94f009b38c67287903edcb46.html create mode 100644 docs/UML/html/index.html/contents/083bd48e3733bd417ab8120d83062ed6.html create mode 100644 docs/UML/html/index.html/contents/084f65230d8e15d82dca008da5251503.html create mode 100644 docs/UML/html/index.html/contents/0875b7edc4d8e095b97f5adc19022083.html create mode 100644 docs/UML/html/index.html/contents/08a42a9cb33085033c589053dbef600c.html create mode 100644 docs/UML/html/index.html/contents/08a4b7115cae2a5970b962330796c00f.html create mode 100644 docs/UML/html/index.html/contents/08be6fb667da531dffce499974b3d41e.html create mode 100644 docs/UML/html/index.html/contents/08c6a1e6dfd23011c9f97fc41749fcbf.html create mode 100644 docs/UML/html/index.html/contents/08f15a81b2edd5a6cfdd763c99b3e6d9.html create mode 100644 docs/UML/html/index.html/contents/0904333092b12540d685f51441775d3f.html create mode 100644 docs/UML/html/index.html/contents/09a413250fe5275c26bd7fafb7a6af9b.html create mode 100644 docs/UML/html/index.html/contents/09a660aa19e69354745dd6da7ad168d5.html create mode 100644 docs/UML/html/index.html/contents/09befc42a3401e984c3472d643915c12.html create mode 100644 docs/UML/html/index.html/contents/09c94c5e380c212e227886b2d7bd34f8.html create mode 100644 docs/UML/html/index.html/contents/09efe71eec1d050cea48d72ce2e3afc5.html create mode 100644 docs/UML/html/index.html/contents/0a0f1f352ebda364e54afcee85ff8e31.html create mode 100644 docs/UML/html/index.html/contents/0a2c3c32f8650cc60d6a251e325931b7.html create mode 100644 docs/UML/html/index.html/contents/0a628ab23c874b12d2bb7c57f08bacd3.html create mode 100644 docs/UML/html/index.html/contents/0a8fab81ff1fe4fcf2830088d57a3389.html create mode 100644 docs/UML/html/index.html/contents/0a97292d8e93749d795ceb9d3a7ea43b.html create mode 100644 docs/UML/html/index.html/contents/0a98b22d6960a0d5d4b45307cf38a376.html create mode 100644 docs/UML/html/index.html/contents/0aea6c69f9758e6f7ec260bb3a67fb7d.html create mode 100644 docs/UML/html/index.html/contents/0af0718934b7c9bf0704b33c6edceb0a.html create mode 100644 docs/UML/html/index.html/contents/0b13587dd50b418879fcc9d5fb4b0d63.html create mode 100644 docs/UML/html/index.html/contents/0b2e3d4a9fce6033c27315c1506e1a28.html create mode 100644 docs/UML/html/index.html/contents/0b3368eb34da708c263183ff1314e1e5.html create mode 100644 docs/UML/html/index.html/contents/0ba48cfc547154448e9c53149d02ba85.html create mode 100644 docs/UML/html/index.html/contents/0bd4e8e7709356647d357de05db61d58.html create mode 100644 docs/UML/html/index.html/contents/0bf25460dca20f004b5c7e9765713ebb.html create mode 100644 docs/UML/html/index.html/contents/0bf4a6eae08b8881efe05b065e34faf9.html create mode 100644 docs/UML/html/index.html/contents/0c160ff8f76fbba9a4fa77033ab14dd0.html create mode 100644 docs/UML/html/index.html/contents/0c19835748910e666b4024ad2c4af1bb.html create mode 100644 docs/UML/html/index.html/contents/0c50e065455272d0f3e04945a6f664a5.html create mode 100644 docs/UML/html/index.html/contents/0c6eeccbfdd67aa968a241acce05e20d.html create mode 100644 docs/UML/html/index.html/contents/0c9e5ca62bc924e5da1379e801442e93.html create mode 100644 docs/UML/html/index.html/contents/0c9e640b81f484da7afde63d602d539c.html create mode 100644 docs/UML/html/index.html/contents/0ca567fad7b9d9a27305963eb49265f0.html create mode 100644 docs/UML/html/index.html/contents/0ca634ac151ac989621cda7dbad8bbb3.html create mode 100644 docs/UML/html/index.html/contents/0ce998f85652a8a9bcd417c92151f180.html create mode 100644 docs/UML/html/index.html/contents/0cfde902fa6cc188f0f08edf2bd3ef29.html create mode 100644 docs/UML/html/index.html/contents/0d01421788d1b29d79573983bfd4caaa.html create mode 100644 docs/UML/html/index.html/contents/0d14235e77e55ae4ee596bb1eb4c055e.html create mode 100644 docs/UML/html/index.html/contents/0d1b85060ff7cc969454ac1749edd700.html create mode 100644 docs/UML/html/index.html/contents/0d650a90204a1dd25dea24fce6f69ed2.html create mode 100644 docs/UML/html/index.html/contents/0da0ff49bfbd36a16396c2cd7a62b986.html create mode 100644 docs/UML/html/index.html/contents/0dabb2990f22100d81566f0109ad7389.html create mode 100644 docs/UML/html/index.html/contents/0e1a6b013283ca18f16dd031d52ab495.html create mode 100644 docs/UML/html/index.html/contents/0e395d236ae8d376218b062ce6691548.html create mode 100644 docs/UML/html/index.html/contents/0e49055b2ea91c18f9d50c145f6b0065.html create mode 100644 docs/UML/html/index.html/contents/0e9b3e70fbb779d118f3feb75efea17b.html create mode 100644 docs/UML/html/index.html/contents/0eae83fbc2e3eaaf8315f122a5692fa0.html create mode 100644 docs/UML/html/index.html/contents/0ef2cd6fed7cb2d0466028600e2ff1f2.html create mode 100644 docs/UML/html/index.html/contents/0f0975f4892715f4a25dd889110d21c2.html create mode 100644 docs/UML/html/index.html/contents/0f0d72eccee0ef091c4c447e410e0e74.html create mode 100644 docs/UML/html/index.html/contents/0f14d67760ca6deb4dae7b7d38dc1cd0.html create mode 100644 docs/UML/html/index.html/contents/0f43fabe86dd7f957b2715cf4ec5acff.html create mode 100644 docs/UML/html/index.html/contents/0f5cd430c28c59b81e7bdde42b5879a5.html create mode 100644 docs/UML/html/index.html/contents/0f6fcbea117c51a2843622edb82d45bc.html create mode 100644 docs/UML/html/index.html/contents/0f770dc4609b7edef4100bdf3c7da9cf.html create mode 100644 docs/UML/html/index.html/contents/0fb51df235772849702822ad6564bd14.html create mode 100644 docs/UML/html/index.html/contents/1007964c31ec39afd330c60257d2ddab.html create mode 100644 docs/UML/html/index.html/contents/104b47e35354ace97825be9e2e305a0f.html create mode 100644 docs/UML/html/index.html/contents/1083fbd39aa8abaa59ca84522db4c329.html create mode 100644 docs/UML/html/index.html/contents/109fa302e9f6af1e2bc26aa7a753cd1b.html create mode 100644 docs/UML/html/index.html/contents/10aceb25f1816142e1f6cd6f583ba60f.html create mode 100644 docs/UML/html/index.html/contents/10ae53552fd674a8c15ff88684f4f7e8.html create mode 100644 docs/UML/html/index.html/contents/10ae7246a744d30d9e4442c50682919f.html create mode 100644 docs/UML/html/index.html/contents/10b08a6d5cf01426a1d15a925ffa2abb.html create mode 100644 docs/UML/html/index.html/contents/10bb05ff02c44eb4cb7e56e656414409.html create mode 100644 docs/UML/html/index.html/contents/10ddb05d66e61da66fdd5294e32336db.html create mode 100644 docs/UML/html/index.html/contents/10e89b885b07c612d0c3e3ad4d3a5c9a.html create mode 100644 docs/UML/html/index.html/contents/1131ea23ab69d35d15d1c4b9cd8d7259.html create mode 100644 docs/UML/html/index.html/contents/1151c0a323c804e5dda7d1e6e2dcc5a6.html create mode 100644 docs/UML/html/index.html/contents/11e1d95f8dfd5e98db160728b2d14f64.html create mode 100644 docs/UML/html/index.html/contents/1204398e31612f8163e172c7c9d69506.html create mode 100644 docs/UML/html/index.html/contents/1275a65b66a51f6db9de16fe1df1dc04.html create mode 100644 docs/UML/html/index.html/contents/12931ba4dfb5230e6930a1d78b1cbfb1.html create mode 100644 docs/UML/html/index.html/contents/12948c9de9d05fb6f1a89c9a2c49f601.html create mode 100644 docs/UML/html/index.html/contents/12ca541a28ac30817b08abed5b789b53.html create mode 100644 docs/UML/html/index.html/contents/12cc48b9085aa2f3e8448f5d6c68d86d.html create mode 100644 docs/UML/html/index.html/contents/12f781340de55ea5c75d418ab74cf196.html create mode 100644 docs/UML/html/index.html/contents/12f8523c165ccc233919e066ea39ce59.html create mode 100644 docs/UML/html/index.html/contents/1339e1301b5e1a6500fc24d2ad8c21e3.html create mode 100644 docs/UML/html/index.html/contents/133d163d58905e9388b375e4e8a2a931.html create mode 100644 docs/UML/html/index.html/contents/133e0b7302027f743b0350eae86efc95.html create mode 100644 docs/UML/html/index.html/contents/136e9c05d710dc4dc71692abb7b4072c.html create mode 100644 docs/UML/html/index.html/contents/137ad1783cc7f455239915618dcfbbfb.html create mode 100644 docs/UML/html/index.html/contents/138fdc81880d347a9f7353f299ae298b.html create mode 100644 docs/UML/html/index.html/contents/13e66ee87e9a12a8405abdd0ae7086ef.html create mode 100644 docs/UML/html/index.html/contents/14413868c72d0d5dbb4895e5c67c4e3b.html create mode 100644 docs/UML/html/index.html/contents/14ed62b4bedb9fd3fecedd2603cd2749.html create mode 100644 docs/UML/html/index.html/contents/1527d9d2b8fd801e023b742b83749728.html create mode 100644 docs/UML/html/index.html/contents/153daf03c24c25715b2780ca36b33939.html create mode 100644 docs/UML/html/index.html/contents/1543ca7cf7ffe834417433376a78765d.html create mode 100644 docs/UML/html/index.html/contents/15616554d6102b01662c73fd5052306e.html create mode 100644 docs/UML/html/index.html/contents/159dc9839a25bd96de00acbd9b769206.html create mode 100644 docs/UML/html/index.html/contents/15b01c548fbf787215eefb723dd73d56.html create mode 100644 docs/UML/html/index.html/contents/15e9103b13f3a783fe6db5bf294e12f8.html create mode 100644 docs/UML/html/index.html/contents/15ead2572f98388553c1ba03a28e8322.html create mode 100644 docs/UML/html/index.html/contents/1605dfe3fc5d685694f94105b3e2fa6b.html create mode 100644 docs/UML/html/index.html/contents/160688b9cc340c7eadebfb391d74e16a.html create mode 100644 docs/UML/html/index.html/contents/1606fbf6550c23690a7eb89de46e8a5c.html create mode 100644 docs/UML/html/index.html/contents/160e96fe088fc50abe64342d07fdabe2.html create mode 100644 docs/UML/html/index.html/contents/162b4a208dbb050db14ab5a412ef284b.html create mode 100644 docs/UML/html/index.html/contents/1650213ee2ffc9a3cdbac2f940ce34a6.html create mode 100644 docs/UML/html/index.html/contents/165d33e6e148cdb9786c9a2c90658815.html create mode 100644 docs/UML/html/index.html/contents/1664443b916c6f148a8c3e41c44f66e4.html create mode 100644 docs/UML/html/index.html/contents/167558f3be82547e5d04c3d2a8e3fbe7.html create mode 100644 docs/UML/html/index.html/contents/17096c8b1c91b2c3f3f883dc58ee83af.html create mode 100644 docs/UML/html/index.html/contents/17123b7b6ae3e80ccdda788e3d5ec287.html create mode 100644 docs/UML/html/index.html/contents/1750eeac1450db235def25b8916a9123.html create mode 100644 docs/UML/html/index.html/contents/1760bffa8edf160a10b394c7ed51500b.html create mode 100644 docs/UML/html/index.html/contents/177bb964f1e06fd25015baf4b333d187.html create mode 100644 docs/UML/html/index.html/contents/17a1c4794ab2467de72b75901ea2f914.html create mode 100644 docs/UML/html/index.html/contents/17a6b3d24bf0cd5698d284f3b94d7960.html create mode 100644 docs/UML/html/index.html/contents/17c9968b2c0a8b79e942213dfe132b00.html create mode 100644 docs/UML/html/index.html/contents/181083f6a4f72266e539ae1ba17525e2.html create mode 100644 docs/UML/html/index.html/contents/181289e9fcc05cc1a54df37baff006a7.html create mode 100644 docs/UML/html/index.html/contents/191233b150b9f02c5b0df1f5314ac6b9.html create mode 100644 docs/UML/html/index.html/contents/19144b86a3e677ae82857e1785386520.html create mode 100644 docs/UML/html/index.html/contents/1959ecd67a9f11092cfa0fa76551477a.html create mode 100644 docs/UML/html/index.html/contents/199c687357538ffcceab91bf2f5a7a8f.html create mode 100644 docs/UML/html/index.html/contents/19aa5c7cf22d1481600dfdb3a9dd185c.html create mode 100644 docs/UML/html/index.html/contents/19b266d59e7c2645851867cd937c5d82.html create mode 100644 docs/UML/html/index.html/contents/19bb9755c13fe616fd937b0ef811861d.html create mode 100644 docs/UML/html/index.html/contents/19c4071974cfc930ad375a4e44bb346f.html create mode 100644 docs/UML/html/index.html/contents/19cbc6a831bb997a57d3bfb40ce9b7dc.html create mode 100644 docs/UML/html/index.html/contents/19d49b05aefad7ee088628a984dc71be.html create mode 100644 docs/UML/html/index.html/contents/19fafbea28e5d5f773d66b64b077ad83.html create mode 100644 docs/UML/html/index.html/contents/1a6ca6010dac571b1d1045bb8904a7b2.html create mode 100644 docs/UML/html/index.html/contents/1aa992524e3baab6fa31dc5a4882bd8f.html create mode 100644 docs/UML/html/index.html/contents/1acf021a7d5a4e4675e75acdcd9c8fb2.html create mode 100644 docs/UML/html/index.html/contents/1ad4e805c5d9fef62e91a7fe69ff62de.html create mode 100644 docs/UML/html/index.html/contents/1b3a9c5f5f5c0dff2ce442439628dc61.html create mode 100644 docs/UML/html/index.html/contents/1b502cde6ab7eb4f4b89b37b16693eb2.html create mode 100644 docs/UML/html/index.html/contents/1b575a3d3abb12c553bb74f558756cc2.html create mode 100644 docs/UML/html/index.html/contents/1b6d0c60cc234dc9cb28cd306d007836.html create mode 100644 docs/UML/html/index.html/contents/1b84dfb8675aed69043b948bea836c22.html create mode 100644 docs/UML/html/index.html/contents/1b9aae25d3c3c260af0db476bb7479b0.html create mode 100644 docs/UML/html/index.html/contents/1bf6f985687b00551aa7c41c540587ad.html create mode 100644 docs/UML/html/index.html/contents/1c0f1480a88315b39bf99fdb3005775b.html create mode 100644 docs/UML/html/index.html/contents/1c281349161d02cdbfcd992861b9fc7a.html create mode 100644 docs/UML/html/index.html/contents/1cd9ca0598c279cc254da8b0b8fc8162.html create mode 100644 docs/UML/html/index.html/contents/1cee35c9874a55c6ea83c2acd2609358.html create mode 100644 docs/UML/html/index.html/contents/1d5b7033ee49b0f9ac8bce3d1c3fcba5.html create mode 100644 docs/UML/html/index.html/contents/1d6f3f444c008ac7088cf8f0335a4add.html create mode 100644 docs/UML/html/index.html/contents/1d826af1ce33518d0b3c7f406ccb47e8.html create mode 100644 docs/UML/html/index.html/contents/1da40a6efac2b652728d1d5516dbc700.html create mode 100644 docs/UML/html/index.html/contents/1dc68e7f211b430d28209226b527206c.html create mode 100644 docs/UML/html/index.html/contents/1e0799e10f4b614cbc844718c41a9469.html create mode 100644 docs/UML/html/index.html/contents/1e303aaac065b7802550fb3f15cc8b64.html create mode 100644 docs/UML/html/index.html/contents/1e68d69de155e4c4815d3ce063a14511.html create mode 100644 docs/UML/html/index.html/contents/1e812b285a05e5766801ae3a9f9dceeb.html create mode 100644 docs/UML/html/index.html/contents/1ee8533b6d95a29aa1a8628010b11bfc.html create mode 100644 docs/UML/html/index.html/contents/1f134fe7a8d24985c2bb689805de76e8.html create mode 100644 docs/UML/html/index.html/contents/1f180d81f85db347214ae45f4d884838.html create mode 100644 docs/UML/html/index.html/contents/1f23f34eb1622957c41e488556b1e928.html create mode 100644 docs/UML/html/index.html/contents/1f33d932613ef4f73e8b271adaa67b88.html create mode 100644 docs/UML/html/index.html/contents/1f37ad81f15bfb1c7293f4a9367db409.html create mode 100644 docs/UML/html/index.html/contents/1f49afe6fa2be8730becbe074d550763.html create mode 100644 docs/UML/html/index.html/contents/1f4a843ab902e8801eb180f24de6d359.html create mode 100644 docs/UML/html/index.html/contents/1f4e4b7ee724f3a511217ded69b458c1.html create mode 100644 docs/UML/html/index.html/contents/1f63925b731195133e1da45ff0a9b32e.html create mode 100644 docs/UML/html/index.html/contents/1f6fa1dbd7ebaf633e35b49b9555bd33.html create mode 100644 docs/UML/html/index.html/contents/1fa8251942f80a51a2f4fdd5957661ee.html create mode 100644 docs/UML/html/index.html/contents/1fdec12e919d6e94c4996d066fb65247.html create mode 100644 docs/UML/html/index.html/contents/200b04a90076abbec97a2c32cdaf18ca.html create mode 100644 docs/UML/html/index.html/contents/200c5f070762855652e8a9fede4a8fe8.html create mode 100644 docs/UML/html/index.html/contents/209fae8aefd7aef250a6f5be0f302a96.html create mode 100644 docs/UML/html/index.html/contents/20acf3b2cfbaab28bb83d6cf4adb4c8a.html create mode 100644 docs/UML/html/index.html/contents/20b8567bdfffcad686eb964848dd5211.html create mode 100644 docs/UML/html/index.html/contents/2103768dc1ca580a1bfadaf61935883c.html create mode 100644 docs/UML/html/index.html/contents/210f221a2b7951e6b923a583e33fa859.html create mode 100644 docs/UML/html/index.html/contents/21366b6d26099eb84405c27adbed5a75.html create mode 100644 docs/UML/html/index.html/contents/213e00ea0ddd75982e7e19f614e908c5.html create mode 100644 docs/UML/html/index.html/contents/2159010c157ed648011788148e598a33.html create mode 100644 docs/UML/html/index.html/contents/21d85e78074831e8a2b85bd6dc54e6eb.html create mode 100644 docs/UML/html/index.html/contents/21dc1e872beff2210aa899f2d49a2ce2.html create mode 100644 docs/UML/html/index.html/contents/220e966f6f4bccb4695fddacc8d74269.html create mode 100644 docs/UML/html/index.html/contents/226fd91ed0bcb0a9ba367ea5ec0ac3ac.html create mode 100644 docs/UML/html/index.html/contents/229cdfe921fbf1768b0051820d62184e.html create mode 100644 docs/UML/html/index.html/contents/22db054d3e8770bdfe26e8b41f934b9b.html create mode 100644 docs/UML/html/index.html/contents/232cf306625a0263d58b34171fe362e9.html create mode 100644 docs/UML/html/index.html/contents/234d9448d77cdb4e4d4387ff2ac78284.html create mode 100644 docs/UML/html/index.html/contents/2362b73658985f8a4e4b8294cf346b57.html create mode 100644 docs/UML/html/index.html/contents/237a43ba868c6c920d8ce325368f2a1d.html create mode 100644 docs/UML/html/index.html/contents/23a0768f01ccbabf5487315fd4c555d5.html create mode 100644 docs/UML/html/index.html/contents/23a6a04d443f04f3187e63da508f7f2a.html create mode 100644 docs/UML/html/index.html/contents/23ac4f62fe4ed4ce76d7cf65bca3af25.html create mode 100644 docs/UML/html/index.html/contents/23c1aac26f47869ff00947595b1b3834.html create mode 100644 docs/UML/html/index.html/contents/23da6cb8091e23fa2793501ee3c6ef83.html create mode 100644 docs/UML/html/index.html/contents/2433890d6636fdbefd8a0a156e861811.html create mode 100644 docs/UML/html/index.html/contents/243c1b72a7ee5c112d9261244aa298e0.html create mode 100644 docs/UML/html/index.html/contents/245f11fc3d0d9a835a368c096c0a02b4.html create mode 100644 docs/UML/html/index.html/contents/2467f8029a96cc66874251878ca2a63c.html create mode 100644 docs/UML/html/index.html/contents/24725f22d7d4d3c8b9d839c178fcbccb.html create mode 100644 docs/UML/html/index.html/contents/2475c248ab0e744ad13c8427b9cba0e4.html create mode 100644 docs/UML/html/index.html/contents/249dbefd43e65f8d9ad3c148886a55c8.html create mode 100644 docs/UML/html/index.html/contents/252337c625b14499b0123e98a2b0f71b.html create mode 100644 docs/UML/html/index.html/contents/253f8b544aea98e0c2ec579722ea8bd6.html create mode 100644 docs/UML/html/index.html/contents/25939e1c109b408703b2be54908a4003.html create mode 100644 docs/UML/html/index.html/contents/25affc2a408e8fc7b8ed42122a662ebd.html create mode 100644 docs/UML/html/index.html/contents/26061f7c81c44b51584c9ecc23969809.html create mode 100644 docs/UML/html/index.html/contents/26312230555bc2746cd63d3048aa8cd1.html create mode 100644 docs/UML/html/index.html/contents/2667cb6fb1055266377d9cabe369495e.html create mode 100644 docs/UML/html/index.html/contents/268956b34d17632b58c1be72427272eb.html create mode 100644 docs/UML/html/index.html/contents/26960d32231706f44b6e77254d628351.html create mode 100644 docs/UML/html/index.html/contents/26c52ed1b2f98ce15e4fe00c2385caf5.html create mode 100644 docs/UML/html/index.html/contents/26d8099812c379cec448e1d549dee375.html create mode 100644 docs/UML/html/index.html/contents/26f0a218b2aa56d89cdc69647eeaf82b.html create mode 100644 docs/UML/html/index.html/contents/26f69649909a2cda95a20a23d6727aab.html create mode 100644 docs/UML/html/index.html/contents/2730da71eca1fe14b6a2f6e7abcccfd7.html create mode 100644 docs/UML/html/index.html/contents/275371c4bf0ed338b4e9039b202c4829.html create mode 100644 docs/UML/html/index.html/contents/27663187617eca38262dc18c4af98333.html create mode 100644 docs/UML/html/index.html/contents/279ec68b9f1301b39a629fba2cf04924.html create mode 100644 docs/UML/html/index.html/contents/27edccfb3b4df2ff1bd859ff07b9c56a.html create mode 100644 docs/UML/html/index.html/contents/27fa8dbe981edd3a531ad9a64b64031c.html create mode 100644 docs/UML/html/index.html/contents/27fc5d7c59bfe6baeadf94e1f63ad393.html create mode 100644 docs/UML/html/index.html/contents/280bf057219ff67b6d1298e6cea19a57.html create mode 100644 docs/UML/html/index.html/contents/285a23b9b9c0bc77f2ea403a30d26c8a.html create mode 100644 docs/UML/html/index.html/contents/2887c50cc9d4998f681dcc5be3d960c5.html create mode 100644 docs/UML/html/index.html/contents/28a10f4cf0d4deec2b82f11feb536d19.html create mode 100644 docs/UML/html/index.html/contents/2946761d820167be3c3ab799ed4d9a91.html create mode 100644 docs/UML/html/index.html/contents/295276c85d9891f43780d31e11e708c5.html create mode 100644 docs/UML/html/index.html/contents/296419f7b94a5f1d241a638d5f7a3f05.html create mode 100644 docs/UML/html/index.html/contents/2995abb64ee013126f2e123a0dfba573.html create mode 100644 docs/UML/html/index.html/contents/29ce6f9445a634a884c0bc2c38b34a76.html create mode 100644 docs/UML/html/index.html/contents/29e09fe60f0b7f659c4b36d0afee93e0.html create mode 100644 docs/UML/html/index.html/contents/2a9daa0ebe6c131686ca12779bd59ced.html create mode 100644 docs/UML/html/index.html/contents/2ae6e60e44704cae514912a78f438353.html create mode 100644 docs/UML/html/index.html/contents/2b06db0ad573ff0cfd7ca2381835f689.html create mode 100644 docs/UML/html/index.html/contents/2b24899e1f12fdf2d677c26187576d95.html create mode 100644 docs/UML/html/index.html/contents/2b2548a0f652c92803d834cdda45e4a7.html create mode 100644 docs/UML/html/index.html/contents/2b54f4b5c843614daa3b8b3ba8b4193e.html create mode 100644 docs/UML/html/index.html/contents/2b862739db03447a0e02cff6dc5622df.html create mode 100644 docs/UML/html/index.html/contents/2b9fa359daa68c2a0fc7fc896fcf13b7.html create mode 100644 docs/UML/html/index.html/contents/2baaf49077df34a613c960881676062d.html create mode 100644 docs/UML/html/index.html/contents/2bf202dc3d214ceba325e5552059ec11.html create mode 100644 docs/UML/html/index.html/contents/2c5c141f9fbf2dd6881a4ede2b172314.html create mode 100644 docs/UML/html/index.html/contents/2c885607d32e685c884be088d3a6e76b.html create mode 100644 docs/UML/html/index.html/contents/2cdfce726870bb1cc26eada094d274a1.html create mode 100644 docs/UML/html/index.html/contents/2ce1eafdbd88fdde25e27747fb7bde16.html create mode 100644 docs/UML/html/index.html/contents/2d5bf8be3d80f6305c740e1d127115f0.html create mode 100644 docs/UML/html/index.html/contents/2d68810b0d0c4b0d278fc16bfad37ea7.html create mode 100644 docs/UML/html/index.html/contents/2d73820363628c18f058af259760da9c.html create mode 100644 docs/UML/html/index.html/contents/2dd3cb3232834a6b125f60fcab29a110.html create mode 100644 docs/UML/html/index.html/contents/2de1a1a11414ed67f84dfc6efac2e7f6.html create mode 100644 docs/UML/html/index.html/contents/2e10a7e360174a951f452da0a0b1c8bf.html create mode 100644 docs/UML/html/index.html/contents/2e173b9bc6777a1383b4694ed37ecb78.html create mode 100644 docs/UML/html/index.html/contents/2e25208e715d59436de44b27a44ac697.html create mode 100644 docs/UML/html/index.html/contents/2e447af7bbf653358676478d5b9c85c6.html create mode 100644 docs/UML/html/index.html/contents/2ed814b1eb0435b4d95bf5d9834fefa6.html create mode 100644 docs/UML/html/index.html/contents/2f13b5a8014891bd8aeab24fdbbae145.html create mode 100644 docs/UML/html/index.html/contents/2f1eff87acd52465ff6d4e3ac2e60e40.html create mode 100644 docs/UML/html/index.html/contents/2f572180d8483b0855fa17dbb52be9bd.html create mode 100644 docs/UML/html/index.html/contents/2f6f465a10f0f751b20f2b9fa6ba785d.html create mode 100644 docs/UML/html/index.html/contents/2f89c448e2d27fba3fe2b80141fbfee0.html create mode 100644 docs/UML/html/index.html/contents/2f8dbb2af3ab150e8d2a3dbb79d57426.html create mode 100644 docs/UML/html/index.html/contents/2fc5d10ed30626f42b62bffae1449723.html create mode 100644 docs/UML/html/index.html/contents/2fd6b9481a7b30e89ec477b80f5d74d5.html create mode 100644 docs/UML/html/index.html/contents/301efe54a29d3457e6f64439d034cfc1.html create mode 100644 docs/UML/html/index.html/contents/301fa8a34766e022b91d47782a0eb9e2.html create mode 100644 docs/UML/html/index.html/contents/30a6785552ff78bf2d4a2b56fe89bd41.html create mode 100644 docs/UML/html/index.html/contents/30e588fec65d47f21c7393d412572106.html create mode 100644 docs/UML/html/index.html/contents/30e7b10c45d83d395c9065e7d522f8c5.html create mode 100644 docs/UML/html/index.html/contents/310340d9273a0fcde54e1436a63253a7.html create mode 100644 docs/UML/html/index.html/contents/3127b5e8b9afcd79148641d02039a191.html create mode 100644 docs/UML/html/index.html/contents/31a600f4e035c7656bdee1875ad11750.html create mode 100644 docs/UML/html/index.html/contents/31ead21e06afc26298aa0b7e0c12372a.html create mode 100644 docs/UML/html/index.html/contents/320ccdd717b1d3c1602f965834981ff1.html create mode 100644 docs/UML/html/index.html/contents/324032f1575138205edf628e46d0039a.html create mode 100644 docs/UML/html/index.html/contents/325e44da078321794cbce9b63df04874.html create mode 100644 docs/UML/html/index.html/contents/32848042874b1a596561432caa3ee792.html create mode 100644 docs/UML/html/index.html/contents/32d7a1b4118e89e761afb4bd1535397c.html create mode 100644 docs/UML/html/index.html/contents/32db8ad50a649d659e8c619f571df87d.html create mode 100644 docs/UML/html/index.html/contents/3341b3a4553e628f3511e71142194339.html create mode 100644 docs/UML/html/index.html/contents/3359340e9f06e544c06382103b6667df.html create mode 100644 docs/UML/html/index.html/contents/3368899a55cb104325a3ca3c45b58645.html create mode 100644 docs/UML/html/index.html/contents/336b3c6d65e8d8f1afa31ae20f8842d0.html create mode 100644 docs/UML/html/index.html/contents/3383324c9ad0ce1e80830d2218dfd3e8.html create mode 100644 docs/UML/html/index.html/contents/33bbdec27a17b8bd242093abf45232c9.html create mode 100644 docs/UML/html/index.html/contents/34b348865a8332674e2c7e9d50370a18.html create mode 100644 docs/UML/html/index.html/contents/353c509c5b5bcba6c62513f717733ab9.html create mode 100644 docs/UML/html/index.html/contents/3551222ab96be3dde77819d7f92a28bb.html create mode 100644 docs/UML/html/index.html/contents/3597cb890f4035b1753f1f1ee656577d.html create mode 100644 docs/UML/html/index.html/contents/35d4c11fc5b354780bf3d7c38003a93f.html create mode 100644 docs/UML/html/index.html/contents/35f14fb8e976614d89f09421e8fb9837.html create mode 100644 docs/UML/html/index.html/contents/35fa64601006bd687f12388153118bd7.html create mode 100644 docs/UML/html/index.html/contents/36154038f4707406901f8306d9f4f691.html create mode 100644 docs/UML/html/index.html/contents/3619541c6aff0a2641fe8bf67dd28616.html create mode 100644 docs/UML/html/index.html/contents/361ecc03b0e61c2f457a2e170f698c5e.html create mode 100644 docs/UML/html/index.html/contents/362bbf24871d8b3a3671e582f05e2a2c.html create mode 100644 docs/UML/html/index.html/contents/369dfd55790c16101cc23844bf4adf48.html create mode 100644 docs/UML/html/index.html/contents/369fdb496dfac3cdc35c1116943bae50.html create mode 100644 docs/UML/html/index.html/contents/36af59e59486bf023f0b0c4ae8fd6d9c.html create mode 100644 docs/UML/html/index.html/contents/36ebe6633b3489a836799cf75538407f.html create mode 100644 docs/UML/html/index.html/contents/36ec5e74528ee9a2e564b63d29f8649c.html create mode 100644 docs/UML/html/index.html/contents/36efd8f989eee51e8a88438f97f78bea.html create mode 100644 docs/UML/html/index.html/contents/36f130bf6d3df1acddfdc52f0223e887.html create mode 100644 docs/UML/html/index.html/contents/371c300b2fbd983a23941d1c60640e3f.html create mode 100644 docs/UML/html/index.html/contents/3759fb92985a12b31125dcacb827ec1a.html create mode 100644 docs/UML/html/index.html/contents/37915a03a37e1ee69eb2a7a29e40603d.html create mode 100644 docs/UML/html/index.html/contents/379a4f9f5a91c19f5813e84fb92e6558.html create mode 100644 docs/UML/html/index.html/contents/37c9a47b25ea8e878f51da6ece627ccb.html create mode 100644 docs/UML/html/index.html/contents/37e2d9dfe3483d68b44218e6d34bcaf8.html create mode 100644 docs/UML/html/index.html/contents/38224ff752961db85b13ae2797e06859.html create mode 100644 docs/UML/html/index.html/contents/38343b14941c062c9015e3974951841b.html create mode 100644 docs/UML/html/index.html/contents/3857bfbd5714843923c9df53ace5f78b.html create mode 100644 docs/UML/html/index.html/contents/38587f33d8dd92dfb68cc4c3c676e2e5.html create mode 100644 docs/UML/html/index.html/contents/3861074c1d5e911c0444972dfa5b3929.html create mode 100644 docs/UML/html/index.html/contents/386d402c41239aa9ce3138dbcfecb60e.html create mode 100644 docs/UML/html/index.html/contents/3870c69c351bd332a9f9697d479fe536.html create mode 100644 docs/UML/html/index.html/contents/387478afff5f6a78354eb795bbc300e5.html create mode 100644 docs/UML/html/index.html/contents/38876e19aab80e2dd8ee0b244200f584.html create mode 100644 docs/UML/html/index.html/contents/38abe7d99428d99e6e690b64704af9fe.html create mode 100644 docs/UML/html/index.html/contents/38c69294c112299d217fc9a5f729dbb4.html create mode 100644 docs/UML/html/index.html/contents/38cb4d38a46f5bd5601628c767d2344b.html create mode 100644 docs/UML/html/index.html/contents/38f0cd50425ea72051a394a2ed425939.html create mode 100644 docs/UML/html/index.html/contents/38f2517875133911725d0cad2a8c07e9.html create mode 100644 docs/UML/html/index.html/contents/390038ed8252d68ebe33bd740f0e156d.html create mode 100644 docs/UML/html/index.html/contents/39081c09b2170695a9c61a48962ec0c5.html create mode 100644 docs/UML/html/index.html/contents/3913669e4bf93a4748fac372ae71e259.html create mode 100644 docs/UML/html/index.html/contents/39648ab4a46c6a2ae27264dad90fdd47.html create mode 100644 docs/UML/html/index.html/contents/39758492db5640cf1f8478f196edc993.html create mode 100644 docs/UML/html/index.html/contents/3994fbb92507d014aa41bbe0a490931a.html create mode 100644 docs/UML/html/index.html/contents/39cfd126c769370ab70fff39f1894fa8.html create mode 100644 docs/UML/html/index.html/contents/39d7469dc7c7aaa78aa1f269711de5ad.html create mode 100644 docs/UML/html/index.html/contents/3a1ece376f0cbeb72e9fd0748ef6762c.html create mode 100644 docs/UML/html/index.html/contents/3a3464a2a27859b50fee5ff286778d2e.html create mode 100644 docs/UML/html/index.html/contents/3a45afb4aa1f2645e64f04d24e5b77bd.html create mode 100644 docs/UML/html/index.html/contents/3a4831c36245207f94d7a76fa17b6d8f.html create mode 100644 docs/UML/html/index.html/contents/3a58fbd92644e259e4d2de75e397b872.html create mode 100644 docs/UML/html/index.html/contents/3a69214dd9a52e9e0617b3863a8a36b9.html create mode 100644 docs/UML/html/index.html/contents/3a6f454a16dc4eb6005706d3d09421f3.html create mode 100644 docs/UML/html/index.html/contents/3a775d750d7e2bcf731796f881a0bbb3.html create mode 100644 docs/UML/html/index.html/contents/3a7e6d511304325a081e9c2ce7ba6bf0.html create mode 100644 docs/UML/html/index.html/contents/3a83252ee8ba5d75a9ab198e9ccca190.html create mode 100644 docs/UML/html/index.html/contents/3a9462557ef3868d93f06820c9fc0497.html create mode 100644 docs/UML/html/index.html/contents/3ab1c4b8220dac7db47d9f3526086ec5.html create mode 100644 docs/UML/html/index.html/contents/3ab38e425e748fee2fab2758e5f0b37e.html create mode 100644 docs/UML/html/index.html/contents/3af2ef8f9357b8c52b64f9d099fdd43c.html create mode 100644 docs/UML/html/index.html/contents/3af5ea4716a6bdcdb5593eb62d9fe016.html create mode 100644 docs/UML/html/index.html/contents/3af80cc042cd28f573d294b27ef33c15.html create mode 100644 docs/UML/html/index.html/contents/3b2cfbe85edac83c52ee2871a3871fa5.html create mode 100644 docs/UML/html/index.html/contents/3b35256cfac3e2ef7de552f8a55e5a50.html create mode 100644 docs/UML/html/index.html/contents/3b78739cdb4032f81c31a205f4a5c934.html create mode 100644 docs/UML/html/index.html/contents/3b7b6895d4c4033d89efa325506f083a.html create mode 100644 docs/UML/html/index.html/contents/3bba106dd89cfbb665b80b7085005439.html create mode 100644 docs/UML/html/index.html/contents/3bbe68f38776205b98b05aa18397acb1.html create mode 100644 docs/UML/html/index.html/contents/3cbb5658d125764e887a26d5293de781.html create mode 100644 docs/UML/html/index.html/contents/3cf701ea92cc9bb83e6018dd7ea9f6c2.html create mode 100644 docs/UML/html/index.html/contents/3d3704106ef34d371fd534a8c2f7739d.html create mode 100644 docs/UML/html/index.html/contents/3d583c51b2d2bdd6b8b9b6e03cfc8a37.html create mode 100644 docs/UML/html/index.html/contents/3d6df3c4ecf914af3143c0f65f067961.html create mode 100644 docs/UML/html/index.html/contents/3d70b9be2ff60d898edbcda3b571f957.html create mode 100644 docs/UML/html/index.html/contents/3d78477b9b8100d7fab8f94b6c39db15.html create mode 100644 docs/UML/html/index.html/contents/3d866dbc23f140338a9a34bb70a05bcc.html create mode 100644 docs/UML/html/index.html/contents/3dd2e49d41599c331b9275084a9e40a6.html create mode 100644 docs/UML/html/index.html/contents/3ddc67040343f01dfbbe14ff7df0a8af.html create mode 100644 docs/UML/html/index.html/contents/3df22a3ce5138fbe45e51f9f78eb982a.html create mode 100644 docs/UML/html/index.html/contents/3e1882e7d31e3ae30c721f25495aea17.html create mode 100644 docs/UML/html/index.html/contents/3e27e3140d2eee091c8ddd0f7be5c9e6.html create mode 100644 docs/UML/html/index.html/contents/3e2e582bc84aef04c467e4252ff5ad74.html create mode 100644 docs/UML/html/index.html/contents/3e3d1db40f4e6318490b311c3bd934fb.html create mode 100644 docs/UML/html/index.html/contents/3e4aa5732e0e7f992b626dbb13279a13.html create mode 100644 docs/UML/html/index.html/contents/3e521c88fb14a310d04645e9aba96fb7.html create mode 100644 docs/UML/html/index.html/contents/3e6133661381b7648890fcede3a9f7a7.html create mode 100644 docs/UML/html/index.html/contents/3e6ab2ce33701b6845cc6809200ced7b.html create mode 100644 docs/UML/html/index.html/contents/3e95bba7d7f12a9ffeaaf3cad0033554.html create mode 100644 docs/UML/html/index.html/contents/3ec281cfe4fef095029523cf4de7443a.html create mode 100644 docs/UML/html/index.html/contents/3ed1d92f20c1a2252e262c40da2052e7.html create mode 100644 docs/UML/html/index.html/contents/3ee818ae6c9bd7e11ec089321851094b.html create mode 100644 docs/UML/html/index.html/contents/3effb50b361b5e00f99243a9cb3965bc.html create mode 100644 docs/UML/html/index.html/contents/3f0ad2d810028d52c2c844cf8f7824ec.html create mode 100644 docs/UML/html/index.html/contents/3f1aa7388076a2cfacc9edf296143e81.html create mode 100644 docs/UML/html/index.html/contents/3f216bd7999bb004b32837734ad20883.html create mode 100644 docs/UML/html/index.html/contents/3f37d84312929118bde7eea2f375bf24.html create mode 100644 docs/UML/html/index.html/contents/3f3c059566d2b14fc5c353d7f626b2cc.html create mode 100644 docs/UML/html/index.html/contents/3f3ef9abf3d2871590e3dfa9d7bcd9da.html create mode 100644 docs/UML/html/index.html/contents/3f7aea6cb618d84da0e2f0c3fdbadab4.html create mode 100644 docs/UML/html/index.html/contents/3f7b90c9fca89a298ab4e7c7d662e59b.html create mode 100644 docs/UML/html/index.html/contents/3f9cdcb7c510c57dc74afabc1a62d3ad.html create mode 100644 docs/UML/html/index.html/contents/3fa45fcc2f4be5188c0b7b04be4e3245.html create mode 100644 docs/UML/html/index.html/contents/3fa51210e706aa8550e7933bb41f4458.html create mode 100644 docs/UML/html/index.html/contents/3fe24c3491f5d338fe385ac2e199e5a5.html create mode 100644 docs/UML/html/index.html/contents/3fe9d31f893b857f5cd073ee949150cd.html create mode 100644 docs/UML/html/index.html/contents/400907f650dd7376d9d8b86dd22214eb.html create mode 100644 docs/UML/html/index.html/contents/405cd0ddf2fff0c98f33b9bdb4883baa.html create mode 100644 docs/UML/html/index.html/contents/405e3ec539575c992453f2c096d860b8.html create mode 100644 docs/UML/html/index.html/contents/40978f2e33f996c8afc2b09d3006bcb3.html create mode 100644 docs/UML/html/index.html/contents/40a3cc19e818cfc3b0828c8a326d9171.html create mode 100644 docs/UML/html/index.html/contents/40b4744b500108403ab15be99767f426.html create mode 100644 docs/UML/html/index.html/contents/40c7fea8f8437dfc92f51f6a0d27794b.html create mode 100644 docs/UML/html/index.html/contents/40dd78625a24ccf827c484b31374c2f3.html create mode 100644 docs/UML/html/index.html/contents/410d5d9b21716886b10a55c208b4564f.html create mode 100644 docs/UML/html/index.html/contents/4125ada28546f64b0a1faca9023a6314.html create mode 100644 docs/UML/html/index.html/contents/414d643c48e603d427eb104550082377.html create mode 100644 docs/UML/html/index.html/contents/41515af04a5d4262a044738080aaff7c.html create mode 100644 docs/UML/html/index.html/contents/41963db2bb3f5abcb78acbaca78cf37a.html create mode 100644 docs/UML/html/index.html/contents/4197618cd46d2db5cc5f8a4711310854.html create mode 100644 docs/UML/html/index.html/contents/4209354a52c511e4fda913e417abbe49.html create mode 100644 docs/UML/html/index.html/contents/4232d7d3b6030a860088d03085de6e7a.html create mode 100644 docs/UML/html/index.html/contents/4236b009900ae9f24244d42cae8800ed.html create mode 100644 docs/UML/html/index.html/contents/42378fa576adb442331c6a6003136388.html create mode 100644 docs/UML/html/index.html/contents/42a937886ad1e7416759df5800be9246.html create mode 100644 docs/UML/html/index.html/contents/42b9384b73f02840e77274b49dc60500.html create mode 100644 docs/UML/html/index.html/contents/42e9cec5b18ccfc48dbcb8d64177b512.html create mode 100644 docs/UML/html/index.html/contents/42f2131db5d32e61081d8abe6f09d323.html create mode 100644 docs/UML/html/index.html/contents/42facd9c5cbc3353ff2d1bff34aea06f.html create mode 100644 docs/UML/html/index.html/contents/42fd6ab13d5f054dbb78375c00bdd07f.html create mode 100644 docs/UML/html/index.html/contents/4307bdbbb9855580283beb98878f4984.html create mode 100644 docs/UML/html/index.html/contents/43141b35bd3e108ac97ab7cd54ee00d2.html create mode 100644 docs/UML/html/index.html/contents/4314c1482a291ef501cbaebe75222193.html create mode 100644 docs/UML/html/index.html/contents/4323069cfc9640314abce0f13b6c11a6.html create mode 100644 docs/UML/html/index.html/contents/43b727ac38acfe76a016e61962ee1eb5.html create mode 100644 docs/UML/html/index.html/contents/43d8c1611a800bc7b4155d331e5a34fb.html create mode 100644 docs/UML/html/index.html/contents/43e928f97c52eeab7ae10469e409e0d8.html create mode 100644 docs/UML/html/index.html/contents/43f2a029d5a43004c18bdb4fb1abb24c.html create mode 100644 docs/UML/html/index.html/contents/4426e2f74e82e0bc367c37c24e5efe05.html create mode 100644 docs/UML/html/index.html/contents/443e83e25373b14385d3796f952375a2.html create mode 100644 docs/UML/html/index.html/contents/4440581d437d360e0aa11105b1f705a0.html create mode 100644 docs/UML/html/index.html/contents/448d3206e681924bedde69b511a55c07.html create mode 100644 docs/UML/html/index.html/contents/44d6668b25dcacbebbdd9afe26895499.html create mode 100644 docs/UML/html/index.html/contents/44f10f9566d80eea64bbc225bff7d8d3.html create mode 100644 docs/UML/html/index.html/contents/451b162d9cf822e19cb1b2af9cc546c9.html create mode 100644 docs/UML/html/index.html/contents/451c70e702e9866810e2753086b97b15.html create mode 100644 docs/UML/html/index.html/contents/45455dc1b93e25f3d013ccc5995da97c.html create mode 100644 docs/UML/html/index.html/contents/45798c81b263501c40acf160ece59cc2.html create mode 100644 docs/UML/html/index.html/contents/4582c98170c1b49fc05cb5016fe43148.html create mode 100644 docs/UML/html/index.html/contents/458b028268c8353678303a345074c8af.html create mode 100644 docs/UML/html/index.html/contents/45e58a7ee56a78f49305ce198e0efb3e.html create mode 100644 docs/UML/html/index.html/contents/45f5d4691aad5f36b26792dedbac0bfe.html create mode 100644 docs/UML/html/index.html/contents/46198b621922b88dcb8b4ab74746c82b.html create mode 100644 docs/UML/html/index.html/contents/4675b270bf6913f1c59c59e259b9ad58.html create mode 100644 docs/UML/html/index.html/contents/46997039b2e36d2219f8deee8361d8b6.html create mode 100644 docs/UML/html/index.html/contents/469e87f8967539fe0d99f03b051da40d.html create mode 100644 docs/UML/html/index.html/contents/46a72fb3639f2d6d8845209650f7c128.html create mode 100644 docs/UML/html/index.html/contents/46a7b0fcad04de8a73019798dab84ad6.html create mode 100644 docs/UML/html/index.html/contents/46bbbde1d3d18b44c7013f823276b419.html create mode 100644 docs/UML/html/index.html/contents/46cd62c28c5514cd843dbbbe91f8357c.html create mode 100644 docs/UML/html/index.html/contents/46cd7ee72c22209eadbfe5e231840294.html create mode 100644 docs/UML/html/index.html/contents/46f8c5af95476336d8ac17920aa78925.html create mode 100644 docs/UML/html/index.html/contents/47665a0c8c104b48b923c28723f72b65.html create mode 100644 docs/UML/html/index.html/contents/4785ee3344b4825edf4aef0c54c24e20.html create mode 100644 docs/UML/html/index.html/contents/479340e4434c2b7860404acfd6203ecb.html create mode 100644 docs/UML/html/index.html/contents/479a8d3ca5fed82046f9867ff37418c0.html create mode 100644 docs/UML/html/index.html/contents/479aeb596e98986da79a53fd5a58340b.html create mode 100644 docs/UML/html/index.html/contents/47bda583dc2fee445b4d761de9e6b486.html create mode 100644 docs/UML/html/index.html/contents/47d2886bcd16d50b085dc62ffc8f2c1f.html create mode 100644 docs/UML/html/index.html/contents/4841a88ae5b095edd4d6f377fdf31245.html create mode 100644 docs/UML/html/index.html/contents/4853ebf39b0adf67fd356a85aca7a430.html create mode 100644 docs/UML/html/index.html/contents/4874c8f727e7f58a9dd9ad265e3d4bf9.html create mode 100644 docs/UML/html/index.html/contents/4892786a2d7e18bd07ec297f95949221.html create mode 100644 docs/UML/html/index.html/contents/48c9ec13e5ca5d2339e1566638ea7334.html create mode 100644 docs/UML/html/index.html/contents/48f435fea56c199681875eb9b24edd26.html create mode 100644 docs/UML/html/index.html/contents/492c18914c8e2487ac95cd3397ec447c.html create mode 100644 docs/UML/html/index.html/contents/499480b09bfbe1fa88a3bc6224235067.html create mode 100644 docs/UML/html/index.html/contents/4999558e57d51918765af91e120c3edf.html create mode 100644 docs/UML/html/index.html/contents/49ab040caddebbbdfb77f798d0a0ce82.html create mode 100644 docs/UML/html/index.html/contents/49ba67190561502dcc59f37557f9fa6a.html create mode 100644 docs/UML/html/index.html/contents/49d55d7b6395724dd2bf8979a087068c.html create mode 100644 docs/UML/html/index.html/contents/49d9820d2cb5299dc19011e2155f3d53.html create mode 100644 docs/UML/html/index.html/contents/49e6b0a7d2ae9a43cb3f5c04af8f0a40.html create mode 100644 docs/UML/html/index.html/contents/49f2e917526b89864b3f6b5681d9f9ae.html create mode 100644 docs/UML/html/index.html/contents/4a20e5664bb1ceed45ae08c1dcacbe1d.html create mode 100644 docs/UML/html/index.html/contents/4a9deec81e6f7aaedf8c08afbd86cbcf.html create mode 100644 docs/UML/html/index.html/contents/4acfc984d902dc1933d5d5191acb8890.html create mode 100644 docs/UML/html/index.html/contents/4b2f1e90c820933ea089147de8b555b7.html create mode 100644 docs/UML/html/index.html/contents/4b444f278a0124202eb10e9beb629464.html create mode 100644 docs/UML/html/index.html/contents/4b66a299ff1e1420de1c4c4ecf98b9ee.html create mode 100644 docs/UML/html/index.html/contents/4b7eea618d1e475b852e38fb58d69447.html create mode 100644 docs/UML/html/index.html/contents/4b8b9312c32580d490448b6b030746d9.html create mode 100644 docs/UML/html/index.html/contents/4b8c730e022bd1e40244caf915724a01.html create mode 100644 docs/UML/html/index.html/contents/4b99baf47649e80e7759a35964c8708e.html create mode 100644 docs/UML/html/index.html/contents/4ba5b0784c64c5fc8793537687d78547.html create mode 100644 docs/UML/html/index.html/contents/4bb542b73f8d2c4dc284f2fd78c977b2.html create mode 100644 docs/UML/html/index.html/contents/4be322aef79c0084ccaed25a2e553117.html create mode 100644 docs/UML/html/index.html/contents/4bee01039f3da6e55750a0a2922021d3.html create mode 100644 docs/UML/html/index.html/contents/4bf2408399265322afe89766d5bbc282.html create mode 100644 docs/UML/html/index.html/contents/4c042951730db2cce95b3934f350b33f.html create mode 100644 docs/UML/html/index.html/contents/4c1d7e9b448b0fbdde8d6491114af659.html create mode 100644 docs/UML/html/index.html/contents/4c3d4332b4d481e12a64f2b2dd59d253.html create mode 100644 docs/UML/html/index.html/contents/4c3d4d95b54fee708dbaf4d3251d74d9.html create mode 100644 docs/UML/html/index.html/contents/4c41d9f2298b29dadc917aa1cea4f26f.html create mode 100644 docs/UML/html/index.html/contents/4c8be821151df33ec285486b42508f3d.html create mode 100644 docs/UML/html/index.html/contents/4c8c1e7aeca716953fef0910dc5ea506.html create mode 100644 docs/UML/html/index.html/contents/4c9e87ac213fd9b853db4650b2bde5c4.html create mode 100644 docs/UML/html/index.html/contents/4d09fc947454f39e602c264b04d9889c.html create mode 100644 docs/UML/html/index.html/contents/4d21633311eda1f30c96d5b4311081cd.html create mode 100644 docs/UML/html/index.html/contents/4d4a6557f19341aa7d1ff9a5974f52d9.html create mode 100644 docs/UML/html/index.html/contents/4d6d095b242e64893b888ca7d6bffb8e.html create mode 100644 docs/UML/html/index.html/contents/4d80d417c8000706dbb7edaa65b5c115.html create mode 100644 docs/UML/html/index.html/contents/4d9fe3ed620307c0f4026f581b1adf1e.html create mode 100644 docs/UML/html/index.html/contents/4e1fa2eb96c12a3cd526e136042b6138.html create mode 100644 docs/UML/html/index.html/contents/4e2ad97f9f465f0660ab333bf7bf49c2.html create mode 100644 docs/UML/html/index.html/contents/4e9dd7c2ad1921be81d47d60b329c0d1.html create mode 100644 docs/UML/html/index.html/contents/4eb8263776fcb815ebd7504b2f74cad5.html create mode 100644 docs/UML/html/index.html/contents/4ed5ace6b5668bc1a7fd53a8d2447631.html create mode 100644 docs/UML/html/index.html/contents/4eff5f6f841deb77ece97c98c8e1dc84.html create mode 100644 docs/UML/html/index.html/contents/4f646af023dd9bea2efd0b4ab1c0a643.html create mode 100644 docs/UML/html/index.html/contents/4f66e3836dd340af77b0e958ee88c62b.html create mode 100644 docs/UML/html/index.html/contents/4f85fa68a0bacb3b3b59de7b28249d6e.html create mode 100644 docs/UML/html/index.html/contents/4f90a649181aac63caf6637dc7906eb4.html create mode 100644 docs/UML/html/index.html/contents/4f9c4c98f940a9bd5c315d0376b939f6.html create mode 100644 docs/UML/html/index.html/contents/4fa946271a6929249146f1f7ff050b3d.html create mode 100644 docs/UML/html/index.html/contents/4fad2db3059750ceb5136bd76af2b36f.html create mode 100644 docs/UML/html/index.html/contents/4fad34a184416fdb6f9647ce7d636d49.html create mode 100644 docs/UML/html/index.html/contents/4fb3fb5d9e60fa3d7dc11a02f15fab7c.html create mode 100644 docs/UML/html/index.html/contents/4fbfc00f55a1873ca0d351eb7df44349.html create mode 100644 docs/UML/html/index.html/contents/4fe3ad80944702091c6de9cc1d2bc38e.html create mode 100644 docs/UML/html/index.html/contents/5008904fbce2aeaaead4fd098a082aae.html create mode 100644 docs/UML/html/index.html/contents/504151fc3993c9111eb7cca1d4bd8186.html create mode 100644 docs/UML/html/index.html/contents/50428c36eb64d874b69817e4f91d6f7b.html create mode 100644 docs/UML/html/index.html/contents/507316102a09da50a3a384992aea85b1.html create mode 100644 docs/UML/html/index.html/contents/508daa4310865e5471294746f3c114b6.html create mode 100644 docs/UML/html/index.html/contents/508fe9916e183daefde37d978350d888.html create mode 100644 docs/UML/html/index.html/contents/50c94d49c4f3c594d8dd4cb8c67e2b7c.html create mode 100644 docs/UML/html/index.html/contents/50ec50dc4973124f3357e8ddaaa35223.html create mode 100644 docs/UML/html/index.html/contents/513d3fc959ba97f63afc7538e3cc4aa5.html create mode 100644 docs/UML/html/index.html/contents/51f5edc823ff1cb215ce49b5175c3ff5.html create mode 100644 docs/UML/html/index.html/contents/521ada0ede7b04f46b932a04b3e95ae3.html create mode 100644 docs/UML/html/index.html/contents/52622b8685074b90c8b84c89c9bcc105.html create mode 100644 docs/UML/html/index.html/contents/5267ed38f2ab5da7858d7ce69b70fa37.html create mode 100644 docs/UML/html/index.html/contents/52b72947597e1eb8edbe531f304802a4.html create mode 100644 docs/UML/html/index.html/contents/52c9dabba4d8e43f6641273e54cbbfac.html create mode 100644 docs/UML/html/index.html/contents/531e1a0a3af0e521659620f630f9b965.html create mode 100644 docs/UML/html/index.html/contents/533539c40e2f436cacd6f5cb63b8d368.html create mode 100644 docs/UML/html/index.html/contents/533cc42c82b35f77d8b9076edddf614c.html create mode 100644 docs/UML/html/index.html/contents/5352781dc48cdbf9e61e14e7bfec43c6.html create mode 100644 docs/UML/html/index.html/contents/53587186c1c9b901a08e3087b70dddde.html create mode 100644 docs/UML/html/index.html/contents/5359d9429ae9b9e5c22f64c22ef4a52a.html create mode 100644 docs/UML/html/index.html/contents/538b954053f58dad6ca48ee1883835e6.html create mode 100644 docs/UML/html/index.html/contents/53c2f510b0b84df0598d832ceee2ae2e.html create mode 100644 docs/UML/html/index.html/contents/53e57cdd2f5704c09cef74991889b70f.html create mode 100644 docs/UML/html/index.html/contents/53e7bf64e35ef8ba9a6c4848aee567d2.html create mode 100644 docs/UML/html/index.html/contents/541e9c3567c43a1d5193963ab927b0aa.html create mode 100644 docs/UML/html/index.html/contents/5471d78388067e777fcc3b45aeb2d021.html create mode 100644 docs/UML/html/index.html/contents/54e2bce410774a7534ef5114723e9c29.html create mode 100644 docs/UML/html/index.html/contents/54f2b2455cd35c31c485523e1ea9aaa8.html create mode 100644 docs/UML/html/index.html/contents/54fbf232e8ee0978a015d3904c68f9c3.html create mode 100644 docs/UML/html/index.html/contents/55059f34c380386137c1445dfb78cfc2.html create mode 100644 docs/UML/html/index.html/contents/552698d9688576091cfefdb839ef19a1.html create mode 100644 docs/UML/html/index.html/contents/5541c323f937abda33d6dadae4cedc53.html create mode 100644 docs/UML/html/index.html/contents/55503044f6056ca833de6ac0cb10ee2c.html create mode 100644 docs/UML/html/index.html/contents/5574c976c8fd82f819548ff05180aacc.html create mode 100644 docs/UML/html/index.html/contents/557633afa63f676085eb21465fe1e101.html create mode 100644 docs/UML/html/index.html/contents/55a1ea61adb93d82180fe92bd70df0e2.html create mode 100644 docs/UML/html/index.html/contents/55a7b61dc2eba15c3f98ed730658067d.html create mode 100644 docs/UML/html/index.html/contents/55b8590cb14ace98c807dfd72d3a1220.html create mode 100644 docs/UML/html/index.html/contents/55bf60075bf7a6937e02dc4dca1fcb15.html create mode 100644 docs/UML/html/index.html/contents/55fd31c41183952f97062701f0ab3503.html create mode 100644 docs/UML/html/index.html/contents/5645e0f19e205fb6a80ba09a15baa2ad.html create mode 100644 docs/UML/html/index.html/contents/566dc4c2eb5e62405748edd8a23f7b80.html create mode 100644 docs/UML/html/index.html/contents/56aaccda7419501c29bd4e14da25a231.html create mode 100644 docs/UML/html/index.html/contents/56e0686ceef01f2b9e3d14d08c1dabc1.html create mode 100644 docs/UML/html/index.html/contents/56e37b07cd1c6c53906e6fc6f815dc20.html create mode 100644 docs/UML/html/index.html/contents/56f366085e37c7b7911dc33e91f254d7.html create mode 100644 docs/UML/html/index.html/contents/570f16285d62d73a2d774f0ae90bfa5c.html create mode 100644 docs/UML/html/index.html/contents/57109a4eea39512ca642b319d20103dd.html create mode 100644 docs/UML/html/index.html/contents/571bf29265e313d5f21394c535c6d566.html create mode 100644 docs/UML/html/index.html/contents/5736244f884406b943017aa39ea7b5af.html create mode 100644 docs/UML/html/index.html/contents/57649a626959fd0a76dfbb12484bd560.html create mode 100644 docs/UML/html/index.html/contents/577135d0397e93f600807f288faa80ad.html create mode 100644 docs/UML/html/index.html/contents/577c853cfc9c13b400122c492cc3e640.html create mode 100644 docs/UML/html/index.html/contents/57e41674ebfadd698205e7ff20acd3a0.html create mode 100644 docs/UML/html/index.html/contents/57e49138e2708293c723ff5862c2db1d.html create mode 100644 docs/UML/html/index.html/contents/5823bf3158da0c280b5a0508e305b99a.html create mode 100644 docs/UML/html/index.html/contents/58341fc66cc305bef4c3b53b970a7497.html create mode 100644 docs/UML/html/index.html/contents/585f877eabd5dc7bcd0a97dc34de37d3.html create mode 100644 docs/UML/html/index.html/contents/587a2fe7f134e8bd7b089d751990a378.html create mode 100644 docs/UML/html/index.html/contents/587fe6308e4744edfcb340d1de196765.html create mode 100644 docs/UML/html/index.html/contents/58a4d2e5371472c2dd93ffc099fa2187.html create mode 100644 docs/UML/html/index.html/contents/58a51eb70c7dfd6210bd6ffd60922475.html create mode 100644 docs/UML/html/index.html/contents/58a7e9f01adbbeb7149a51e440961a40.html create mode 100644 docs/UML/html/index.html/contents/58cfeae64fa36a7df5c9ae66690fbfe9.html create mode 100644 docs/UML/html/index.html/contents/59034e14a1ff70892ded8e93b2cbff45.html create mode 100644 docs/UML/html/index.html/contents/591be56177008b3fdcd8a8e188a699a5.html create mode 100644 docs/UML/html/index.html/contents/591e7c92627e72f6385f800d095686f5.html create mode 100644 docs/UML/html/index.html/contents/592f2e8f58d54aeb490f6265b5db6c8d.html create mode 100644 docs/UML/html/index.html/contents/59cea33763fe478285b999cb0dac1840.html create mode 100644 docs/UML/html/index.html/contents/59d253aad5f03a2f7a5b11c6552d2d2c.html create mode 100644 docs/UML/html/index.html/contents/5a24d57f6dd45afdb4b57ba6079b2555.html create mode 100644 docs/UML/html/index.html/contents/5a34652e61d14473341d41817db62b90.html create mode 100644 docs/UML/html/index.html/contents/5a743b6df1c34dfa55a2901492b39083.html create mode 100644 docs/UML/html/index.html/contents/5a99ad5bd40668c6ab3ba6c43dd4d780.html create mode 100644 docs/UML/html/index.html/contents/5aa7a8f85fc87b62f1a8312d9718b71d.html create mode 100644 docs/UML/html/index.html/contents/5ada2e76c2f5a18e2027b3a8cb19f5b4.html create mode 100644 docs/UML/html/index.html/contents/5adcd2d86e95f28f331218acfbcb69a2.html create mode 100644 docs/UML/html/index.html/contents/5aed048619037fd409f2563cc9ad7c15.html create mode 100644 docs/UML/html/index.html/contents/5b2ea38471f13d73aff3da64b3583ac9.html create mode 100644 docs/UML/html/index.html/contents/5b40d509f68233bdc1740b87ec92647c.html create mode 100644 docs/UML/html/index.html/contents/5b91e8a55541a1ea74abc8b5ec818c45.html create mode 100644 docs/UML/html/index.html/contents/5bd46556b00fe73355c2dbbfd8d8b743.html create mode 100644 docs/UML/html/index.html/contents/5bddceaa2d1234f5551eeafd67fd4dcc.html create mode 100644 docs/UML/html/index.html/contents/5c3ba46a6aa4c45f43f6211efcf126ec.html create mode 100644 docs/UML/html/index.html/contents/5c4d400d9a0ba1a67ccaacec42878f35.html create mode 100644 docs/UML/html/index.html/contents/5c7213e06487cad0f7fe846fdc3faa5b.html create mode 100644 docs/UML/html/index.html/contents/5c7b162d10d20fa81377595dee3cb625.html create mode 100644 docs/UML/html/index.html/contents/5ca7bf366f6e96fb4f8a1b673c0c9a99.html create mode 100644 docs/UML/html/index.html/contents/5d0888b036bca431c000a5463f5ac011.html create mode 100644 docs/UML/html/index.html/contents/5d29493a7cfe15fa5c4851543ede1e6f.html create mode 100644 docs/UML/html/index.html/contents/5d42b7cd6b9122ea68ef010ce8158de5.html create mode 100644 docs/UML/html/index.html/contents/5d5c2fa3213442a0ba485e101da16535.html create mode 100644 docs/UML/html/index.html/contents/5d7f7b2a435011dd6a8d8d7c897cb5dd.html create mode 100644 docs/UML/html/index.html/contents/5d8270929a3ebf138127907c38797268.html create mode 100644 docs/UML/html/index.html/contents/5d8ea677c6f3af8acda9011dbad4ffd2.html create mode 100644 docs/UML/html/index.html/contents/5da945fc607e3afee89bcc9824273db6.html create mode 100644 docs/UML/html/index.html/contents/5daddaee7b89651f93efed07b52ebc60.html create mode 100644 docs/UML/html/index.html/contents/5dd9fcf590ef73e2b441761dcdfe5b5e.html create mode 100644 docs/UML/html/index.html/contents/5deabf2b2be337cef393615938ed51ef.html create mode 100644 docs/UML/html/index.html/contents/5dfb81c33b5d3e2133dd0b64963ad4dc.html create mode 100644 docs/UML/html/index.html/contents/5e071801a8160767bdd4f9c607334482.html create mode 100644 docs/UML/html/index.html/contents/5e2ef011d06ce8319720b5920ef2989a.html create mode 100644 docs/UML/html/index.html/contents/5e3aad043322f2f5b2acedbc3f2b9fb6.html create mode 100644 docs/UML/html/index.html/contents/5e5c04b979b2db964c5715aeb2976efc.html create mode 100644 docs/UML/html/index.html/contents/5e8d5f584ac0dd2ce0f7b80b9bdd3769.html create mode 100644 docs/UML/html/index.html/contents/5e9415f4c89ed5f4bb8574d6a9829793.html create mode 100644 docs/UML/html/index.html/contents/5ea8baabd9316c91752f4a397f7b0096.html create mode 100644 docs/UML/html/index.html/contents/5eb79fb6e9ba48f75bfa02db67c65d5a.html create mode 100644 docs/UML/html/index.html/contents/5ed6f8bd8558876c0d0ae22b05a44614.html create mode 100644 docs/UML/html/index.html/contents/5f0ac78787a8baedfb228b5236f16c01.html create mode 100644 docs/UML/html/index.html/contents/5f0fc8c9a8d68e2d81f1ae09f555f3c2.html create mode 100644 docs/UML/html/index.html/contents/5f3052edb93ea83eb0bc3f6b5a2e7b70.html create mode 100644 docs/UML/html/index.html/contents/5f42db891c7cab53e77218be0d6a066d.html create mode 100644 docs/UML/html/index.html/contents/5f4bb59309e6fd16ff354fac114ca2b4.html create mode 100644 docs/UML/html/index.html/contents/5fb81f571e9e478a71ee95a98bfaa977.html create mode 100644 docs/UML/html/index.html/contents/5fbf2cd376427e361d43dad16bc5146c.html create mode 100644 docs/UML/html/index.html/contents/5fd7099b44c2e60f64faacf64a025a80.html create mode 100644 docs/UML/html/index.html/contents/6014ad3fab95f3c7ce1eeca3c6ade623.html create mode 100644 docs/UML/html/index.html/contents/6037732d8eb06db04e9a41ca3e18dc51.html create mode 100644 docs/UML/html/index.html/contents/6042bd1ad4836106d060799041a2f8dc.html create mode 100644 docs/UML/html/index.html/contents/60648e818218cd36de72316be0493a7c.html create mode 100644 docs/UML/html/index.html/contents/606976142b92c30df8a10a398571f41c.html create mode 100644 docs/UML/html/index.html/contents/606d6f80511f0d0657cc34ab014a850c.html create mode 100644 docs/UML/html/index.html/contents/609b42e6cd5f59a264549e8c61847ad9.html create mode 100644 docs/UML/html/index.html/contents/609e4b01d74fa0df03212588cace4ea4.html create mode 100644 docs/UML/html/index.html/contents/60b389fd7f33339ebd810aef6c726737.html create mode 100644 docs/UML/html/index.html/contents/60b6a081f856f0e93288a567dca0c5a4.html create mode 100644 docs/UML/html/index.html/contents/60c3018ce8a416fa7e731132ab1bd60f.html create mode 100644 docs/UML/html/index.html/contents/60e93945910aedc35015216115c9f26c.html create mode 100644 docs/UML/html/index.html/contents/611e48bf819c3d24c36c042fc2b75374.html create mode 100644 docs/UML/html/index.html/contents/6144d03793d7f8b6f26787af23e1aefd.html create mode 100644 docs/UML/html/index.html/contents/618bb5bf61fe2d78d68fd5f2c6833cd9.html create mode 100644 docs/UML/html/index.html/contents/61ee68bdbed6d08ff45507ed24afb24e.html create mode 100644 docs/UML/html/index.html/contents/61efc38c4515bced685b1a983308aa41.html create mode 100644 docs/UML/html/index.html/contents/621424f0e4705a72829485fb8149567a.html create mode 100644 docs/UML/html/index.html/contents/62289bc99778b82890cc702d60c7baab.html create mode 100644 docs/UML/html/index.html/contents/6244df9e7b2bbdadb586f3798b80026f.html create mode 100644 docs/UML/html/index.html/contents/6248d76c2960b9571136f95f0832fb00.html create mode 100644 docs/UML/html/index.html/contents/62b6339c3010b4f88bf6fdeaa54185a5.html create mode 100644 docs/UML/html/index.html/contents/62ede64afe3a3131ff854bbeac9ca20f.html create mode 100644 docs/UML/html/index.html/contents/630e685537bac32c74bf34d8c1cb455d.html create mode 100644 docs/UML/html/index.html/contents/6331b0ac3bc94d714384126f5d9534d3.html create mode 100644 docs/UML/html/index.html/contents/633841a2bc687327f0b2dd1fe4583efa.html create mode 100644 docs/UML/html/index.html/contents/6341313ef93d5d3e3216ccb4a96fb624.html create mode 100644 docs/UML/html/index.html/contents/634987cfe09d28e9b041455111805d1b.html create mode 100644 docs/UML/html/index.html/contents/6366208c0384daf8ae268569f9d2f844.html create mode 100644 docs/UML/html/index.html/contents/6389d6b780f2b89dc580978fd072e534.html create mode 100644 docs/UML/html/index.html/contents/63a5af9d5a22400e825837f443fcfa1b.html create mode 100644 docs/UML/html/index.html/contents/63b52bc080e83a3604ad37ffaca96447.html create mode 100644 docs/UML/html/index.html/contents/63bdd9a1ed32573d420b74add866fc74.html create mode 100644 docs/UML/html/index.html/contents/63cce1f681c3f34bc9ca6a41f41b3959.html create mode 100644 docs/UML/html/index.html/contents/64015fa39f6169d00e171f0a563a8e55.html create mode 100644 docs/UML/html/index.html/contents/640596e4633b3d16372d41e7744c9b27.html create mode 100644 docs/UML/html/index.html/contents/64136c670cfba27ccda044dbdb16cf20.html create mode 100644 docs/UML/html/index.html/contents/64299856471ab520366cf7d225abf189.html create mode 100644 docs/UML/html/index.html/contents/642c5c2cc3fef16284b4db46bf858450.html create mode 100644 docs/UML/html/index.html/contents/64554ee462cf97bec23e5430755eff86.html create mode 100644 docs/UML/html/index.html/contents/645a0f474f7a1b85d8f60473749d485c.html create mode 100644 docs/UML/html/index.html/contents/649bd8581d1206e0cb8a6c4180e91faa.html create mode 100644 docs/UML/html/index.html/contents/64bdbb35e4135f74528831cd611ccb3e.html create mode 100644 docs/UML/html/index.html/contents/65050f9329f23ecbe43d6d6d1929a253.html create mode 100644 docs/UML/html/index.html/contents/6507dc9541a8ed8d8ee52ff88ca32048.html create mode 100644 docs/UML/html/index.html/contents/6508d6381747583eede472d7cb949f1c.html create mode 100644 docs/UML/html/index.html/contents/6513dc6e54ce44742616f7d398ef30b0.html create mode 100644 docs/UML/html/index.html/contents/652079fc3fb3a7423ac97a24465d940e.html create mode 100644 docs/UML/html/index.html/contents/652d2134d4b4a3161786510e5274ea98.html create mode 100644 docs/UML/html/index.html/contents/655c9b3ad8761e536ab0735f60439e0d.html create mode 100644 docs/UML/html/index.html/contents/658f642c97886dc88647bf43bb584046.html create mode 100644 docs/UML/html/index.html/contents/65afa674298d18cd956580a7e590edad.html create mode 100644 docs/UML/html/index.html/contents/65c09bc51cbf71b5d1f0274562aa291a.html create mode 100644 docs/UML/html/index.html/contents/65d458f5e18b9935d0044ecc1acbbed4.html create mode 100644 docs/UML/html/index.html/contents/65ea7351bac5bc4ababec6c044d351d3.html create mode 100644 docs/UML/html/index.html/contents/65ff1e180ad1717a5cf5a96384d27d62.html create mode 100644 docs/UML/html/index.html/contents/6627df546bf1392cbdd181cea5e7e945.html create mode 100644 docs/UML/html/index.html/contents/66771f9b37cb1c44748291b136e1afdb.html create mode 100644 docs/UML/html/index.html/contents/669d2f5a708af47ebafe934c8c6dcc2d.html create mode 100644 docs/UML/html/index.html/contents/66c5db9de07c76e1b7444f602a1e28f8.html create mode 100644 docs/UML/html/index.html/contents/66dac264ff7a58f829633bb33acb90ab.html create mode 100644 docs/UML/html/index.html/contents/670030583c63a4b8fd7051dd2dd229bc.html create mode 100644 docs/UML/html/index.html/contents/67114b96b7afe323068cffd200af0fe2.html create mode 100644 docs/UML/html/index.html/contents/671d773dfeebeef5cbe51d00f9e07eed.html create mode 100644 docs/UML/html/index.html/contents/6723a9945b9974b33198ade989a6a906.html create mode 100644 docs/UML/html/index.html/contents/67623de938d9f006e784d8c597fbf5b3.html create mode 100644 docs/UML/html/index.html/contents/679ba992c86785408950b3595f3afc7a.html create mode 100644 docs/UML/html/index.html/contents/68349bca69c1c7b57895f50233175342.html create mode 100644 docs/UML/html/index.html/contents/68382121cda796b4b594866230798698.html create mode 100644 docs/UML/html/index.html/contents/684261b1b4af46cae1d36f75b08acb1f.html create mode 100644 docs/UML/html/index.html/contents/68477d1ff16243dbe7cf5e51a4c1688b.html create mode 100644 docs/UML/html/index.html/contents/685f70a12514e2d9366ad8a213651a52.html create mode 100644 docs/UML/html/index.html/contents/68707b1bad8a56d85418f26b21501d8d.html create mode 100644 docs/UML/html/index.html/contents/6876e839968975853e9346e4bb007249.html create mode 100644 docs/UML/html/index.html/contents/689b5ce25f8d766dfa93fead30ec0249.html create mode 100644 docs/UML/html/index.html/contents/68a1b593e57c379f4e113dfedb8b187b.html create mode 100644 docs/UML/html/index.html/contents/68f9de74306cfbcaf6d4b10ce4cde466.html create mode 100644 docs/UML/html/index.html/contents/690011eb8eb436df4bc3e93dc95d063a.html create mode 100644 docs/UML/html/index.html/contents/691b2d52b4a087f46f46943d0cefae0c.html create mode 100644 docs/UML/html/index.html/contents/6940e15db00ec7119957ddce7aefa3a0.html create mode 100644 docs/UML/html/index.html/contents/6977ff072726dae4def8384651ddaa7d.html create mode 100644 docs/UML/html/index.html/contents/69db8973ec6dc42a8e9685a6a33ec792.html create mode 100644 docs/UML/html/index.html/contents/69eef3ea9f7e9ae3d086af1f3099cb88.html create mode 100644 docs/UML/html/index.html/contents/6a23d874ad9e285a5e40f5dd37a6f22b.html create mode 100644 docs/UML/html/index.html/contents/6a25496164773bffdf9c3bc30c9b50bc.html create mode 100644 docs/UML/html/index.html/contents/6a29bea56334c39e51602ca56285b73f.html create mode 100644 docs/UML/html/index.html/contents/6a2eec429f8f7d383e3b41601d59f76b.html create mode 100644 docs/UML/html/index.html/contents/6a2eef79c988861d973460670707d7be.html create mode 100644 docs/UML/html/index.html/contents/6a31af6a1f5ee1002a45b6d4156bf14b.html create mode 100644 docs/UML/html/index.html/contents/6a4361334e8b649314ed681b9e6798c3.html create mode 100644 docs/UML/html/index.html/contents/6a75b50f51ef4dcdc92a0ac0bb9eaccd.html create mode 100644 docs/UML/html/index.html/contents/6a89bb881b975592c46a3e385fd9ee2b.html create mode 100644 docs/UML/html/index.html/contents/6aba05634afeb4fd935056d1d61cd8f4.html create mode 100644 docs/UML/html/index.html/contents/6b03587bd8ab466faaae50e7895ac91d.html create mode 100644 docs/UML/html/index.html/contents/6b5e179bbf456cdba4a10b56eb6bdb91.html create mode 100644 docs/UML/html/index.html/contents/6b87ad8902bc1f1dd13fbeb875a6e5b2.html create mode 100644 docs/UML/html/index.html/contents/6bd3cd02a9e8265116344dfd0589baf5.html create mode 100644 docs/UML/html/index.html/contents/6bdfa7111970adf2c8322b42516202db.html create mode 100644 docs/UML/html/index.html/contents/6c034d9e3ede2c95bdaa1ae5c015b4cf.html create mode 100644 docs/UML/html/index.html/contents/6c12874fa647caeab0a513df3e114ec2.html create mode 100644 docs/UML/html/index.html/contents/6c17a1a47c5a8ed9e8a43a3c5aa82c77.html create mode 100644 docs/UML/html/index.html/contents/6c2964b38e2231b5c685906fabb2d512.html create mode 100644 docs/UML/html/index.html/contents/6c69e839b15477de0afadafc42fffe0c.html create mode 100644 docs/UML/html/index.html/contents/6c7d0836193b6a647c16572f64dbc886.html create mode 100644 docs/UML/html/index.html/contents/6c7d5e2f0c296fd289f9822f7f90d47b.html create mode 100644 docs/UML/html/index.html/contents/6c8408726cd5b06c522429672f34f081.html create mode 100644 docs/UML/html/index.html/contents/6ca8230b4e6914468315588a78adfdc1.html create mode 100644 docs/UML/html/index.html/contents/6cbe8962588cb2f254b92960bc0cc7b2.html create mode 100644 docs/UML/html/index.html/contents/6d08b7b8b4487de643668069844785ba.html create mode 100644 docs/UML/html/index.html/contents/6d188029ef5f789c2dbab9c732104217.html create mode 100644 docs/UML/html/index.html/contents/6d506647c77c2329da648bc02d8b9a3b.html create mode 100644 docs/UML/html/index.html/contents/6d9b563d0a2ceccbebde91c2d6976d9f.html create mode 100644 docs/UML/html/index.html/contents/6da39bab2d4658c04e02e908f68c971f.html create mode 100644 docs/UML/html/index.html/contents/6dc68e77fd5ce1f99a9e121919981a73.html create mode 100644 docs/UML/html/index.html/contents/6de448df049ad410d7a2e820401e6791.html create mode 100644 docs/UML/html/index.html/contents/6e00fb3dfbf97f5a8b071128fc4295de.html create mode 100644 docs/UML/html/index.html/contents/6e12e6d93b39936b03cdf1f909ae9b33.html create mode 100644 docs/UML/html/index.html/contents/6e19de0922dd171503417ff841ce7d9d.html create mode 100644 docs/UML/html/index.html/contents/6e2618818b8cb3065a349896a4109851.html create mode 100644 docs/UML/html/index.html/contents/6ecba04b7100f9747e2efc41f46dc93e.html create mode 100644 docs/UML/html/index.html/contents/6f1139a1f45a11494769b16df3594d95.html create mode 100644 docs/UML/html/index.html/contents/6f2bcc6e2102b31b37b3ae410b59c7f4.html create mode 100644 docs/UML/html/index.html/contents/6f400dcf88d4f4f800810746f11c122c.html create mode 100644 docs/UML/html/index.html/contents/6f5c72af2909b1945120c2a9f0637b9c.html create mode 100644 docs/UML/html/index.html/contents/6f84d7c0679cea8fe818fe98a524ff15.html create mode 100644 docs/UML/html/index.html/contents/6f8b57fe4d8fd7fa366b3ec3f97e766f.html create mode 100644 docs/UML/html/index.html/contents/6fa7ecf53cc2648c66f15d1046f9d45d.html create mode 100644 docs/UML/html/index.html/contents/6faff22c886500b27898f1b9f96c863b.html create mode 100644 docs/UML/html/index.html/contents/6fcb0bd02ed0c787a074ac9345cde8f0.html create mode 100644 docs/UML/html/index.html/contents/7010d7145e042ab490579b87053213d5.html create mode 100644 docs/UML/html/index.html/contents/701e35fa0ff5a0ccd7080ec6e09fad38.html create mode 100644 docs/UML/html/index.html/contents/7028e241a6222b91923a2c52d7cfe85e.html create mode 100644 docs/UML/html/index.html/contents/7046ff799b39c140e03cfc9e90de297b.html create mode 100644 docs/UML/html/index.html/contents/705b3e4eb2e82fa51c7043de9cf52ec3.html create mode 100644 docs/UML/html/index.html/contents/7090d229bc69876e5b3a00fc9fe9a8c5.html create mode 100644 docs/UML/html/index.html/contents/70c19432c1bcadcfb19a7aaa68883522.html create mode 100644 docs/UML/html/index.html/contents/70c83a29a411150b0a347af9da937d4f.html create mode 100644 docs/UML/html/index.html/contents/7111de81229134b9647e2271d2ddf619.html create mode 100644 docs/UML/html/index.html/contents/713af3221357b20a5ca564f2e0610821.html create mode 100644 docs/UML/html/index.html/contents/713e0a6105d0576001719f46acaabffc.html create mode 100644 docs/UML/html/index.html/contents/7142311dbbe4335417459f8aa62cec8a.html create mode 100644 docs/UML/html/index.html/contents/715b4426e8036373884fbb58ab678776.html create mode 100644 docs/UML/html/index.html/contents/718eb80d6322b88312f8113018c4e272.html create mode 100644 docs/UML/html/index.html/contents/71937c288e7c30f8a6b82acb768cd8f9.html create mode 100644 docs/UML/html/index.html/contents/71f1404ae547b6df3571d8aed80f97d3.html create mode 100644 docs/UML/html/index.html/contents/71fbf9038914b12487e9916aff3c6532.html create mode 100644 docs/UML/html/index.html/contents/7204235636d3eb0c65cfd44d51c1467a.html create mode 100644 docs/UML/html/index.html/contents/72069d6e4beeb48b70b3454bc913d2c3.html create mode 100644 docs/UML/html/index.html/contents/722b32d49b91d82c5ca2d9c87f2bd82a.html create mode 100644 docs/UML/html/index.html/contents/722f199eaf8ddea5641759a4d143cd7c.html create mode 100644 docs/UML/html/index.html/contents/72510468946b4e68ebec290297bfdeaa.html create mode 100644 docs/UML/html/index.html/contents/72687d6e84116da9cf28eccff3711472.html create mode 100644 docs/UML/html/index.html/contents/728ba0c9856a59b22a40f8391ecea617.html create mode 100644 docs/UML/html/index.html/contents/72973aecdcb744a1c2a7ce3b9831f7ce.html create mode 100644 docs/UML/html/index.html/contents/72a1201f4dbaaadaacde4974beeb603e.html create mode 100644 docs/UML/html/index.html/contents/72b1672acc81729cfb548b6ad68045e4.html create mode 100644 docs/UML/html/index.html/contents/72e47b8d675c71b4855a01f50973d04a.html create mode 100644 docs/UML/html/index.html/contents/7303481c1fcfa9ac8f96a38530787ab2.html create mode 100644 docs/UML/html/index.html/contents/733daffe881f0fb5619f7fe9bbf66147.html create mode 100644 docs/UML/html/index.html/contents/7340a3b340e749ed4b239523a9b5f1bf.html create mode 100644 docs/UML/html/index.html/contents/73abbe51a89013dee90c0ab6b6ee3fc8.html create mode 100644 docs/UML/html/index.html/contents/73c6f5ddafe896e8cdec523665ec5f8a.html create mode 100644 docs/UML/html/index.html/contents/73c91b5f51a8f940e8c8aba09871fca8.html create mode 100644 docs/UML/html/index.html/contents/740fc64839562d8b731638e693596822.html create mode 100644 docs/UML/html/index.html/contents/743580d6b145ea4e45595f96b7d91458.html create mode 100644 docs/UML/html/index.html/contents/743989ddc8ea56152bbfd970188f3359.html create mode 100644 docs/UML/html/index.html/contents/74843569597f36e19175c0da38f04c8d.html create mode 100644 docs/UML/html/index.html/contents/7513da682672956e072bbbde2397148f.html create mode 100644 docs/UML/html/index.html/contents/752db2556747ab0595008a9db6b51d9a.html create mode 100644 docs/UML/html/index.html/contents/7533a0d2f02410a94019715935d259c4.html create mode 100644 docs/UML/html/index.html/contents/75be7fcbd95a9a22b006170699e39122.html create mode 100644 docs/UML/html/index.html/contents/75e1815d047ccd3cd6c4390f8da3d290.html create mode 100644 docs/UML/html/index.html/contents/75ebd6657bd3c090b066e20d46d658c5.html create mode 100644 docs/UML/html/index.html/contents/762503f592b71bac338d499a816d6561.html create mode 100644 docs/UML/html/index.html/contents/76591bce738af4a745190d2e2ec4bae5.html create mode 100644 docs/UML/html/index.html/contents/768ea87d7e3539fdb96f14e8f8749734.html create mode 100644 docs/UML/html/index.html/contents/76a895743b76da3f7e4d9417f66f07bb.html create mode 100644 docs/UML/html/index.html/contents/771edd9d1c92f43ea9f7ce7ba297244b.html create mode 100644 docs/UML/html/index.html/contents/7735acdbaafc4130efabc79c5bec303d.html create mode 100644 docs/UML/html/index.html/contents/774777a3ad217504310595f657466bd4.html create mode 100644 docs/UML/html/index.html/contents/776ce662a2fd9ce5375da7365c7a5060.html create mode 100644 docs/UML/html/index.html/contents/776e482a9eccbb463e88c55bbbe7bae7.html create mode 100644 docs/UML/html/index.html/contents/7796134060843a6e42689a1df2fe7bf6.html create mode 100644 docs/UML/html/index.html/contents/779ab8ca8a1c581a052ece1414bfafec.html create mode 100644 docs/UML/html/index.html/contents/77a84631ea4a300b592dc649ec92d45e.html create mode 100644 docs/UML/html/index.html/contents/77de8c736008aa8b370b9b599e32c32c.html create mode 100644 docs/UML/html/index.html/contents/77ffbe55daeeec1a86c89147aba17700.html create mode 100644 docs/UML/html/index.html/contents/78050782199afd24c979627ee5a61d15.html create mode 100644 docs/UML/html/index.html/contents/780aab2063811a1f5f1a2d1fa1c9fce6.html create mode 100644 docs/UML/html/index.html/contents/78458ae125f2699eeefd6f679965e46a.html create mode 100644 docs/UML/html/index.html/contents/7876aaf9a4c41c1f005ccc80ef1a4d9d.html create mode 100644 docs/UML/html/index.html/contents/78badaff41241c07ff29c19231333ae4.html create mode 100644 docs/UML/html/index.html/contents/78c51cbb7450f99fe2bf25d32c766f91.html create mode 100644 docs/UML/html/index.html/contents/790eebbf3d34e37cdbb3b24e7147b914.html create mode 100644 docs/UML/html/index.html/contents/792168d61e4c18e871fe4f123fee6b8b.html create mode 100644 docs/UML/html/index.html/contents/79641f30c88bbd2a134351401a0da684.html create mode 100644 docs/UML/html/index.html/contents/79785cf84c1c208a1c0a502e67b0d0ee.html create mode 100644 docs/UML/html/index.html/contents/798cdb8db8e2031662dcd8e2b267ae71.html create mode 100644 docs/UML/html/index.html/contents/79b9746a528a00e47de171dd605ce332.html create mode 100644 docs/UML/html/index.html/contents/79ec72552b13037342f28adfed2cac09.html create mode 100644 docs/UML/html/index.html/contents/7a3bbda7afd18c42d6f8e6b3ebc9e3c9.html create mode 100644 docs/UML/html/index.html/contents/7a531cccef30303716930b111d6e6898.html create mode 100644 docs/UML/html/index.html/contents/7a59927c37aa768b817db7853b53d66c.html create mode 100644 docs/UML/html/index.html/contents/7a7582c506881a94db8da21137a56f2c.html create mode 100644 docs/UML/html/index.html/contents/7a7a8d9d20d00f70db88f89eefdee448.html create mode 100644 docs/UML/html/index.html/contents/7a7be093e30f46df935cc2e491db68e6.html create mode 100644 docs/UML/html/index.html/contents/7a8a0f803d91a59c886f6ad900f4d9ad.html create mode 100644 docs/UML/html/index.html/contents/7a9a2677c775541abe40cda24af07991.html create mode 100644 docs/UML/html/index.html/contents/7aae9a349dce04a5462c68cc9aa5a9b5.html create mode 100644 docs/UML/html/index.html/contents/7afbe6f0eec2d305cb937a7de5159837.html create mode 100644 docs/UML/html/index.html/contents/7b0b7518158eb42ce7ee884c70dea610.html create mode 100644 docs/UML/html/index.html/contents/7b306b636d9acfca99bdc2fea2b8feb9.html create mode 100644 docs/UML/html/index.html/contents/7b5f4e4a5397c3ddbef7c70c99146a71.html create mode 100644 docs/UML/html/index.html/contents/7b8d8d052df647c31c5fedf0de67ed3b.html create mode 100644 docs/UML/html/index.html/contents/7ba32f1f7de1c867ee3eb54c4a3a3413.html create mode 100644 docs/UML/html/index.html/contents/7bd43eb28f4ce9e5f3a2034cd6afca66.html create mode 100644 docs/UML/html/index.html/contents/7bde81fd965524c964a92ccbff4770c9.html create mode 100644 docs/UML/html/index.html/contents/7bf01f00c2634c58321cd27df466e568.html create mode 100644 docs/UML/html/index.html/contents/7c1ea0fcb191f30c8ba0fbe440a2c43c.html create mode 100644 docs/UML/html/index.html/contents/7c333d313ddc2f0e0f1c6bc7d481a8b0.html create mode 100644 docs/UML/html/index.html/contents/7c3711e771905ba27160304fc6df0534.html create mode 100644 docs/UML/html/index.html/contents/7c7f1fb877a4d86009e01f0293d6f93c.html create mode 100644 docs/UML/html/index.html/contents/7cbdbf21ab8a73c025e82168e392c180.html create mode 100644 docs/UML/html/index.html/contents/7cca037d7711696cc49b648ead2b2d8e.html create mode 100644 docs/UML/html/index.html/contents/7cd64f9fd8b1669bee3bea74955e375c.html create mode 100644 docs/UML/html/index.html/contents/7ce8fa8d6c4e527d9c69f128b25a0b00.html create mode 100644 docs/UML/html/index.html/contents/7d06fb0bd4170f2ff2e459d70d9de835.html create mode 100644 docs/UML/html/index.html/contents/7d1eccddaf3ae88ea3ff961f953f47be.html create mode 100644 docs/UML/html/index.html/contents/7d43b8cb1efd816b8bc5e492b60db2d6.html create mode 100644 docs/UML/html/index.html/contents/7d59dc49bfa2c2a6861b3a6a50a8436c.html create mode 100644 docs/UML/html/index.html/contents/7d746fadfbed13145261470ddfe916fd.html create mode 100644 docs/UML/html/index.html/contents/7da21169908633b315862c8d64bb4605.html create mode 100644 docs/UML/html/index.html/contents/7dafec5f0bb361f92e16100c159a1c83.html create mode 100644 docs/UML/html/index.html/contents/7db7a5513627eb0f20b0d127cf5fb5dc.html create mode 100644 docs/UML/html/index.html/contents/7db90716faee68d4a442e2c029efe85e.html create mode 100644 docs/UML/html/index.html/contents/7dc1004f3eac0d20a16770b80eb4a2b9.html create mode 100644 docs/UML/html/index.html/contents/7dc62671b1427f630fe47e16c6654db1.html create mode 100644 docs/UML/html/index.html/contents/7de2e742c327adb33c30705672b5e305.html create mode 100644 docs/UML/html/index.html/contents/7debdfb42a195fb83f2ffd92b85231b1.html create mode 100644 docs/UML/html/index.html/contents/7e095e1a3906b3074a2154c29977cae1.html create mode 100644 docs/UML/html/index.html/contents/7e1cd8c9e1da933e53365d71166cf93a.html create mode 100644 docs/UML/html/index.html/contents/7e5c5ff561a0cc2e719e0eda5ab3324e.html create mode 100644 docs/UML/html/index.html/contents/7e6b5f7d0a7bf7a6b61ab06732e63db5.html create mode 100644 docs/UML/html/index.html/contents/7e8319ee35150db50932aaf0797f6c98.html create mode 100644 docs/UML/html/index.html/contents/7e93b7fe995fd2ace47c8e1a064609e9.html create mode 100644 docs/UML/html/index.html/contents/7e9ee6e346acdc14c152ad8208f39bd2.html create mode 100644 docs/UML/html/index.html/contents/7ea4f5f139979f2c7d48cf9f7ec3185f.html create mode 100644 docs/UML/html/index.html/contents/7ecea908680b881d767cc927a097bda8.html create mode 100644 docs/UML/html/index.html/contents/7f15792a8fa60d5a6a6cc0b3f93eefb3.html create mode 100644 docs/UML/html/index.html/contents/7f348cef485355db09a92326cb5c03c0.html create mode 100644 docs/UML/html/index.html/contents/7f39b85cf3ce7766ad961f9e09c72da5.html create mode 100644 docs/UML/html/index.html/contents/7f82409f40ab6e511ba68fdb760c1637.html create mode 100644 docs/UML/html/index.html/contents/7f83f1f1ede8511fdba5c305be74deff.html create mode 100644 docs/UML/html/index.html/contents/7f935236823383e1e7a651967b494661.html create mode 100644 docs/UML/html/index.html/contents/7fc3001dbd7469604a183722623e59db.html create mode 100644 docs/UML/html/index.html/contents/7ffd8c9a88ae591e01095d11d2dd10d0.html create mode 100644 docs/UML/html/index.html/contents/8018722bfba74ad198caaae0b20e31f6.html create mode 100644 docs/UML/html/index.html/contents/801aaa2038ceadcbc2767ee05ed4de3d.html create mode 100644 docs/UML/html/index.html/contents/805858e739096170736d5d31eea7d3fa.html create mode 100644 docs/UML/html/index.html/contents/8058c1ffeab683ae6ac2e908b9d34cd7.html create mode 100644 docs/UML/html/index.html/contents/80a182a98dab2e23c973f833741ee39e.html create mode 100644 docs/UML/html/index.html/contents/80b3c7621ff0cf68601142a0a4e399d8.html create mode 100644 docs/UML/html/index.html/contents/80c6aee8d2ff74293d5253df5cf90003.html create mode 100644 docs/UML/html/index.html/contents/80e971147cb7fb58b2fadc4097bafe49.html create mode 100644 docs/UML/html/index.html/contents/8107f4ca06d43f5b2eef889237b7f2f6.html create mode 100644 docs/UML/html/index.html/contents/813cfad0b24c3345dd8b0dcb3e625655.html create mode 100644 docs/UML/html/index.html/contents/817967235916d89672dcccbbe794bdb0.html create mode 100644 docs/UML/html/index.html/contents/81baf6afead83f5aad38834340e9d53f.html create mode 100644 docs/UML/html/index.html/contents/81c1edd0a6c62181147c6f7b0e88bd1f.html create mode 100644 docs/UML/html/index.html/contents/81c6e8658d10a682ea87b65cb267dce3.html create mode 100644 docs/UML/html/index.html/contents/81e7a97609eb3a92b8eea9a0d639650e.html create mode 100644 docs/UML/html/index.html/contents/81f7f6df9ad6449cdc1e1235eacf8764.html create mode 100644 docs/UML/html/index.html/contents/822024f8f20bbc4b7a6473083c6d14ea.html create mode 100644 docs/UML/html/index.html/contents/8272df9c2bdea17111fd3fc99e9e7179.html create mode 100644 docs/UML/html/index.html/contents/82b706f55a8deff88c794ebf93e0aa5d.html create mode 100644 docs/UML/html/index.html/contents/82c2931cbfc9e497ab02762de5d7a81c.html create mode 100644 docs/UML/html/index.html/contents/8322cbdc2fa11f93d6ade675ae4d46dc.html create mode 100644 docs/UML/html/index.html/contents/832a7523a6272ec97b82baf1edfbaba9.html create mode 100644 docs/UML/html/index.html/contents/83362e73b2c15fbe8ed5ed187583fbaf.html create mode 100644 docs/UML/html/index.html/contents/833dc662eb7ce8e167a892e5a7d69ff3.html create mode 100644 docs/UML/html/index.html/contents/8346ab571b3a6b16181e922be4c321bc.html create mode 100644 docs/UML/html/index.html/contents/834b17d5787704fb5b557b7b870c8605.html create mode 100644 docs/UML/html/index.html/contents/83560f5d3aed92c2b1785fb4bdd87bee.html create mode 100644 docs/UML/html/index.html/contents/836a202301ccaaa71bd760b1fc4602eb.html create mode 100644 docs/UML/html/index.html/contents/837cca6f5c6ffb1db884c9957c9ab1c0.html create mode 100644 docs/UML/html/index.html/contents/83924484d40c0080ed868476fd5b85c8.html create mode 100644 docs/UML/html/index.html/contents/83a679eea3d472490fbbd33a3f6bdbdc.html create mode 100644 docs/UML/html/index.html/contents/83ba7b1b81694d777081a6ff2083dc05.html create mode 100644 docs/UML/html/index.html/contents/83e6634c08dac5457ef78be84d71fb82.html create mode 100644 docs/UML/html/index.html/contents/83fb2ab39f46f2ca41f9cb6088a54826.html create mode 100644 docs/UML/html/index.html/contents/84625d781e222cc9cd05e0db5d4dff17.html create mode 100644 docs/UML/html/index.html/contents/847751a7fd5361ff0eacf8b858ed07f6.html create mode 100644 docs/UML/html/index.html/contents/84abcbfe63a71550e95b699510e10466.html create mode 100644 docs/UML/html/index.html/contents/84b804d05c2e87df5369a550d3e2e42a.html create mode 100644 docs/UML/html/index.html/contents/84d0ef64183b55bd43284d8ac043576b.html create mode 100644 docs/UML/html/index.html/contents/856c671fc85abc2a986d0202b3ed5ea7.html create mode 100644 docs/UML/html/index.html/contents/858aba4286fe50b01ecd56560312439c.html create mode 100644 docs/UML/html/index.html/contents/8590a88fa6775e4bd1783a0bff6b9949.html create mode 100644 docs/UML/html/index.html/contents/85ae9b7918c4375d089403f6f961af22.html create mode 100644 docs/UML/html/index.html/contents/85b3000ea7d4a55ffc26371b6744366a.html create mode 100644 docs/UML/html/index.html/contents/85cd45151fbea250e1cd0da26a6fadd4.html create mode 100644 docs/UML/html/index.html/contents/860fde308abe65a462c787b2eba4781a.html create mode 100644 docs/UML/html/index.html/contents/86539b85b95f29f5a8eb2f6a67b42d37.html create mode 100644 docs/UML/html/index.html/contents/86610545ff6588eca66610e41b26e1a8.html create mode 100644 docs/UML/html/index.html/contents/8664fe849097809b1b8e41c9ce287b5c.html create mode 100644 docs/UML/html/index.html/contents/8680b54aa607acb4fbedcc5e71a36063.html create mode 100644 docs/UML/html/index.html/contents/86888ae95a5edd1707570553780673d8.html create mode 100644 docs/UML/html/index.html/contents/86aa98de6c4dae155e1942dfab6171c3.html create mode 100644 docs/UML/html/index.html/contents/86dbcca35a6a58b37f9c6d4ad5dc0fb1.html create mode 100644 docs/UML/html/index.html/contents/86ebd585cdbdc21810789d28b1633edb.html create mode 100644 docs/UML/html/index.html/contents/86f7451d0fbdd21af571ad572ff4e09b.html create mode 100644 docs/UML/html/index.html/contents/870ecb7a6c86cc840732e72663d8137f.html create mode 100644 docs/UML/html/index.html/contents/872107c655b64222a5fcbbe78191fdab.html create mode 100644 docs/UML/html/index.html/contents/8785c191a560996e5b03598b52fb4a02.html create mode 100644 docs/UML/html/index.html/contents/8789af1369e9c13efeb298197b3c6329.html create mode 100644 docs/UML/html/index.html/contents/878d41ac6ce2cb6176d4dc89d168f139.html create mode 100644 docs/UML/html/index.html/contents/8791467ce6fd8c95590b44a3d4d64d72.html create mode 100644 docs/UML/html/index.html/contents/87adb02e94648aa0f97f547a959cd351.html create mode 100644 docs/UML/html/index.html/contents/87b695ea7819475c0a48a1d288e979e8.html create mode 100644 docs/UML/html/index.html/contents/87e7280b1d7187961dfc1bbbc10e2475.html create mode 100644 docs/UML/html/index.html/contents/880f562184ffc8c074fd88362b766ea1.html create mode 100644 docs/UML/html/index.html/contents/887262ae67612443c37a535a586c2b80.html create mode 100644 docs/UML/html/index.html/contents/88776c4dfe3a70249434a4fc2da87d07.html create mode 100644 docs/UML/html/index.html/contents/8882a90bf08540d8598e3b9465ff2933.html create mode 100644 docs/UML/html/index.html/contents/888cfa9217aa86a4558cd65c4cdda0de.html create mode 100644 docs/UML/html/index.html/contents/88acc7d365942a968623caace7f45dac.html create mode 100644 docs/UML/html/index.html/contents/88b3f2b554c9dfd86b7055467d699d9f.html create mode 100644 docs/UML/html/index.html/contents/88b4dc2dd2433d4713c5ee879dba3520.html create mode 100644 docs/UML/html/index.html/contents/88fbd477ab16e345aa1eda738a9d8b40.html create mode 100644 docs/UML/html/index.html/contents/8958739b0e0d4bee0f93bf57e26999de.html create mode 100644 docs/UML/html/index.html/contents/8958b004cc79c096262a2094e2be9593.html create mode 100644 docs/UML/html/index.html/contents/896788cb7f73713aed42db379469e302.html create mode 100644 docs/UML/html/index.html/contents/8973bdbc81ee2bbef7e0528254e09b36.html create mode 100644 docs/UML/html/index.html/contents/8978c95bb2d6876b7f6c8922b442bb75.html create mode 100644 docs/UML/html/index.html/contents/897de83c77de902b21425451767270f5.html create mode 100644 docs/UML/html/index.html/contents/8996fc31846f9d5cde6a4db979266a17.html create mode 100644 docs/UML/html/index.html/contents/8a236934de7461817e3edecae4cfd278.html create mode 100644 docs/UML/html/index.html/contents/8a348f2160c810ae49eb983f5fa8fe8a.html create mode 100644 docs/UML/html/index.html/contents/8a54769e716adaef85bcf6ff997e231a.html create mode 100644 docs/UML/html/index.html/contents/8a8e4aecf59ac4b007a018d66076cbe2.html create mode 100644 docs/UML/html/index.html/contents/8a9d8d2586fffa53c37435d799b71a85.html create mode 100644 docs/UML/html/index.html/contents/8ab269a69c218e234df18b6940889082.html create mode 100644 docs/UML/html/index.html/contents/8ab8e81ff920d0c899b55eecabe21d7a.html create mode 100644 docs/UML/html/index.html/contents/8ab9db7f1c7e52f0d96edc386266cf44.html create mode 100644 docs/UML/html/index.html/contents/8af5b855ec8ae0b90b62fe084aeb7279.html create mode 100644 docs/UML/html/index.html/contents/8b1357d1b7a34ff92a2ad193dc69fa79.html create mode 100644 docs/UML/html/index.html/contents/8b24a7ce9e5da6f475bcfe9c400da881.html create mode 100644 docs/UML/html/index.html/contents/8b5735b02708dcea43fcff612c0c06c0.html create mode 100644 docs/UML/html/index.html/contents/8b947b66fb3467f30760db6bd3fe5075.html create mode 100644 docs/UML/html/index.html/contents/8baeb0ee0255f265335b161921306a47.html create mode 100644 docs/UML/html/index.html/contents/8bb4c086dda390d441591c764635b61c.html create mode 100644 docs/UML/html/index.html/contents/8bb9d85ef912b42bf3cb0b64b9fda70b.html create mode 100644 docs/UML/html/index.html/contents/8bebd7d615cab68c1fc20cb15b979c0d.html create mode 100644 docs/UML/html/index.html/contents/8c088ffbb83c25880c2017fdbe41d07e.html create mode 100644 docs/UML/html/index.html/contents/8c0995f22408cd91bc46ab050aee2d31.html create mode 100644 docs/UML/html/index.html/contents/8c2a9e3e46c77f66ef94d7c66e84dc57.html create mode 100644 docs/UML/html/index.html/contents/8c51333543f86a6a9569b79bff9f7792.html create mode 100644 docs/UML/html/index.html/contents/8c7127afc4601fce7ffd758ee88584db.html create mode 100644 docs/UML/html/index.html/contents/8c792c8bfb122a8af8b7e55a8503580f.html create mode 100644 docs/UML/html/index.html/contents/8c9ba83ebb9b836a2f552015e95d804a.html create mode 100644 docs/UML/html/index.html/contents/8cc353eb9595c8e5340d8bf00ac27f09.html create mode 100644 docs/UML/html/index.html/contents/8cc8a1e13537e01f7159f5b913fd26c2.html create mode 100644 docs/UML/html/index.html/contents/8d13ad9a8b3cb50301ee426fd60928e3.html create mode 100644 docs/UML/html/index.html/contents/8d1837a81cf65833c01333219ee1e01e.html create mode 100644 docs/UML/html/index.html/contents/8d1cc3ac66bbd8aee036082838b7876d.html create mode 100644 docs/UML/html/index.html/contents/8d1de6d935c965309d9ef3bb1a8b9635.html create mode 100644 docs/UML/html/index.html/contents/8d4cf3a9ec2d129126594cf4e2f7d994.html create mode 100644 docs/UML/html/index.html/contents/8d53fb6f2e1c31dd8352fb13f0b8547e.html create mode 100644 docs/UML/html/index.html/contents/8d7d2fc396a68e1e70361b0d5b672385.html create mode 100644 docs/UML/html/index.html/contents/8d93060f6d7a7c6803e67fc2ec0f4522.html create mode 100644 docs/UML/html/index.html/contents/8db104128ea37b4295c8f360e30faf41.html create mode 100644 docs/UML/html/index.html/contents/8df02ff4adda1e6a5cf00248ec82d22b.html create mode 100644 docs/UML/html/index.html/contents/8e005f760cd30d5339a4ada643d9b466.html create mode 100644 docs/UML/html/index.html/contents/8e52d8383b7e54c6388b8ca43814fd42.html create mode 100644 docs/UML/html/index.html/contents/8e6112926104cfab7014a043d67ad2cd.html create mode 100644 docs/UML/html/index.html/contents/8e74d8eb060422c6a14c291d2a96c11c.html create mode 100644 docs/UML/html/index.html/contents/8e961a861ff0ba5602a2f324cbe187b5.html create mode 100644 docs/UML/html/index.html/contents/8e9e8b1cef06d59b48c14788a3d97f20.html create mode 100644 docs/UML/html/index.html/contents/8ebf93c63b121a5673cf6bec061511a9.html create mode 100644 docs/UML/html/index.html/contents/8ecf6f225473cb90f9c2ae88ad737fa0.html create mode 100644 docs/UML/html/index.html/contents/8ee0b0f380ceb24ff519db9affdc6224.html create mode 100644 docs/UML/html/index.html/contents/8f04af6d81288cb58b1ae1276962dad2.html create mode 100644 docs/UML/html/index.html/contents/8f0d4cc613187c38ac61ffd1758c924b.html create mode 100644 docs/UML/html/index.html/contents/8f0f7965f9cadbf38e6dbaf6d177705e.html create mode 100644 docs/UML/html/index.html/contents/8f12d296bbe4ce45e17483afee1c8cd8.html create mode 100644 docs/UML/html/index.html/contents/8f2843983b68ccaa4a3db26474543489.html create mode 100644 docs/UML/html/index.html/contents/8f49259fbeba8a1f456880b354fded59.html create mode 100644 docs/UML/html/index.html/contents/8f4e26d0f8dba4b5a4e2b36c8c02a9d1.html create mode 100644 docs/UML/html/index.html/contents/8f52fa2666bf996da7aaf5b4d6c749ef.html create mode 100644 docs/UML/html/index.html/contents/8f62b33038d0626988820aa26fbe79ed.html create mode 100644 docs/UML/html/index.html/contents/8f783cbf0e2b652752f59cd64e8ff039.html create mode 100644 docs/UML/html/index.html/contents/8fbbc9107239494d2e1bffa8f049f2ea.html create mode 100644 docs/UML/html/index.html/contents/8fc6cfdbe07f2c72abd5eab0130bfb05.html create mode 100644 docs/UML/html/index.html/contents/8febe29eb378e64a269bb308e4ea3459.html create mode 100644 docs/UML/html/index.html/contents/900d5a34a50081f643ef1cdd97f9c37b.html create mode 100644 docs/UML/html/index.html/contents/90445a68b831c415f877667e5a58d2e1.html create mode 100644 docs/UML/html/index.html/contents/90715e0faa7f24688a9cb47e2acf6fc0.html create mode 100644 docs/UML/html/index.html/contents/908120830746a85b94a98e9c4deac67f.html create mode 100644 docs/UML/html/index.html/contents/90ae0e28ca8335d369b5d73eb7eb94a6.html create mode 100644 docs/UML/html/index.html/contents/90d19b49d40cf0722e8fdebaaa108f96.html create mode 100644 docs/UML/html/index.html/contents/910f8637ff57c253179d8c350a00a672.html create mode 100644 docs/UML/html/index.html/contents/9112e33fa33abfdb8dbfe47fd47b8bee.html create mode 100644 docs/UML/html/index.html/contents/911d4add2644383954db4a8a25ffc104.html create mode 100644 docs/UML/html/index.html/contents/9185e25a419a349e89aef2b818f2142f.html create mode 100644 docs/UML/html/index.html/contents/91e7f6a3c270ad8c64368238cc22ac87.html create mode 100644 docs/UML/html/index.html/contents/91f422ae5ef3cf6797ad64433db99df6.html create mode 100644 docs/UML/html/index.html/contents/92080af3a1cfc638127d85f3336c85cd.html create mode 100644 docs/UML/html/index.html/contents/922b2604fea0999eb7912febd74191ae.html create mode 100644 docs/UML/html/index.html/contents/9230af958e26c1d175ebe5bbea8870f0.html create mode 100644 docs/UML/html/index.html/contents/92622a626859543825d4474f821f845b.html create mode 100644 docs/UML/html/index.html/contents/927bd96627a59304ffd8efb24855b191.html create mode 100644 docs/UML/html/index.html/contents/9283ecc849508efbe014c62c5361e677.html create mode 100644 docs/UML/html/index.html/contents/92aa5d6dfbd5d4b2e4bb296c3ac70f48.html create mode 100644 docs/UML/html/index.html/contents/92c3fb6dfef55f84ac951f586116cfb0.html create mode 100644 docs/UML/html/index.html/contents/92ffccc4c8455ac9bfeb3b44fbc29e50.html create mode 100644 docs/UML/html/index.html/contents/9305518b7e1892f3103aa74d98a8565c.html create mode 100644 docs/UML/html/index.html/contents/9316b30aba1da2c1992c3f48f86c7311.html create mode 100644 docs/UML/html/index.html/contents/9375585273d705d9a7c9d8a1bec52df1.html create mode 100644 docs/UML/html/index.html/contents/93b4a7fc69c59be544a0a080df104f52.html create mode 100644 docs/UML/html/index.html/contents/93becefdd6adf4248b8ba012a9121400.html create mode 100644 docs/UML/html/index.html/contents/93dddc7b87e1bfff9f9e2b638499208c.html create mode 100644 docs/UML/html/index.html/contents/93debad7ae398a5561351a1a429c7755.html create mode 100644 docs/UML/html/index.html/contents/93f6acb19086465a9b6e10c972f0994e.html create mode 100644 docs/UML/html/index.html/contents/9402c46d5845017ede75344f4f7ecfaf.html create mode 100644 docs/UML/html/index.html/contents/9412e590b5262930491197da221fb57c.html create mode 100644 docs/UML/html/index.html/contents/942da875e16c0b8029348cc91aef84da.html create mode 100644 docs/UML/html/index.html/contents/94aede03ed385d61888dfa3ccc4a2dc7.html create mode 100644 docs/UML/html/index.html/contents/94d2dcca95ac297f5d65c0535b8cfa04.html create mode 100644 docs/UML/html/index.html/contents/952df1c244451913fc5fd3be3f4a3acf.html create mode 100644 docs/UML/html/index.html/contents/953c03c8f244268e76b315cd784ce857.html create mode 100644 docs/UML/html/index.html/contents/956d65e83ff2db75caaa6450720f79e3.html create mode 100644 docs/UML/html/index.html/contents/956fead0ed72ebd69506162cfd625420.html create mode 100644 docs/UML/html/index.html/contents/957f734957e810e5036c7ab29f371773.html create mode 100644 docs/UML/html/index.html/contents/95840d75b2e90b11e4c4d0d6a6dee126.html create mode 100644 docs/UML/html/index.html/contents/9589968de925a0de49e30a1127322caa.html create mode 100644 docs/UML/html/index.html/contents/959af9bdae76c0cdcfe5a785f1421b11.html create mode 100644 docs/UML/html/index.html/contents/95fd3c67ca7e8bd9ad350de26d560bd2.html create mode 100644 docs/UML/html/index.html/contents/960f4fca9c04fd93233f31e4b6d42f54.html create mode 100644 docs/UML/html/index.html/contents/961e158b052789fd8741634382512dc9.html create mode 100644 docs/UML/html/index.html/contents/9651c3076d36878b2b7818dc456700f0.html create mode 100644 docs/UML/html/index.html/contents/965b6869fc1452eb1d01cdca87b53e5d.html create mode 100644 docs/UML/html/index.html/contents/9661749152138a3c85e7ce9d311178ca.html create mode 100644 docs/UML/html/index.html/contents/9668ea9f5c99ff1c7934ae708d274997.html create mode 100644 docs/UML/html/index.html/contents/968401d11dc50f9990a6a0dab34c2f61.html create mode 100644 docs/UML/html/index.html/contents/9688ec93af0a246eb2b38313aa90cff1.html create mode 100644 docs/UML/html/index.html/contents/96edd68687b488a1671ee607044e45c6.html create mode 100644 docs/UML/html/index.html/contents/975393f28febd506c6f9a4bdd7d02929.html create mode 100644 docs/UML/html/index.html/contents/978c1ca118f58de306058615dc949190.html create mode 100644 docs/UML/html/index.html/contents/97b28ab5cff130374e423e6c169ecc7d.html create mode 100644 docs/UML/html/index.html/contents/97b95b5c5b969017b060025824abb4d7.html create mode 100644 docs/UML/html/index.html/contents/97cf214879837ec1a841189cc08d5452.html create mode 100644 docs/UML/html/index.html/contents/97cff2ffaee331186e3a8db11d2867c2.html create mode 100644 docs/UML/html/index.html/contents/97f9a12e04a6ebcee2308fe6fbdc7928.html create mode 100644 docs/UML/html/index.html/contents/98216249c200a886725fa2b64b293549.html create mode 100644 docs/UML/html/index.html/contents/9822835f86394719c1ac3762555fb77b.html create mode 100644 docs/UML/html/index.html/contents/982e52f3885bd10523418fe7d8d8cbbe.html create mode 100644 docs/UML/html/index.html/contents/98806786a7f8155f717e3071356d6b00.html create mode 100644 docs/UML/html/index.html/contents/988fd9a0ce11866983766110a781b83b.html create mode 100644 docs/UML/html/index.html/contents/98abe166275cea900469632f443a8ccd.html create mode 100644 docs/UML/html/index.html/contents/98af837bfedb290bfb41d0f8b6dd48f2.html create mode 100644 docs/UML/html/index.html/contents/98e3846e17b5f190615b50d0e69ce2bf.html create mode 100644 docs/UML/html/index.html/contents/98e7ef72a5335699683d46993d230ff4.html create mode 100644 docs/UML/html/index.html/contents/99021f62e8982de2d1f1ca97245462bb.html create mode 100644 docs/UML/html/index.html/contents/990d7a6d6d4b66121ce2f9868f0ef464.html create mode 100644 docs/UML/html/index.html/contents/992849198ed9ec3298881b0a25a48fba.html create mode 100644 docs/UML/html/index.html/contents/9957ade9c136ccba10262f20b1c3864a.html create mode 100644 docs/UML/html/index.html/contents/998c1c3018b16e96777b62320a15130a.html create mode 100644 docs/UML/html/index.html/contents/9995756c0dd1584580f3f73854f2f3ff.html create mode 100644 docs/UML/html/index.html/contents/99ce384c154aaa2e6cfc91211b87bb2e.html create mode 100644 docs/UML/html/index.html/contents/99e18d3f187d2f4eca697caa97e2d21a.html create mode 100644 docs/UML/html/index.html/contents/99ea68aecf50925ed45a87ec51f38b23.html create mode 100644 docs/UML/html/index.html/contents/9a101e5b0e553a4ee3edf569464ea442.html create mode 100644 docs/UML/html/index.html/contents/9a39c46c59af6274ee67dd3e27e46110.html create mode 100644 docs/UML/html/index.html/contents/9a6a2c65f0fecfbf94214fe5dacc11b2.html create mode 100644 docs/UML/html/index.html/contents/9a75470762d321f43986bd5936916083.html create mode 100644 docs/UML/html/index.html/contents/9a9a3029fbb0b10780cd985110a9a696.html create mode 100644 docs/UML/html/index.html/contents/9aced20f6faa8c3b8c80944065fda4ce.html create mode 100644 docs/UML/html/index.html/contents/9ad7a3f464d60019a373c183c1d466cc.html create mode 100644 docs/UML/html/index.html/contents/9aeb73fea3368954a985ad0bb44044f9.html create mode 100644 docs/UML/html/index.html/contents/9aed3900eda1721915078df583973d00.html create mode 100644 docs/UML/html/index.html/contents/9afdaeaf99916cb02ce4ef94ecfa5bf6.html create mode 100644 docs/UML/html/index.html/contents/9b20ab86613668a6bf592d0fe3d2077d.html create mode 100644 docs/UML/html/index.html/contents/9b250e30db89b68226ee37eb34781885.html create mode 100644 docs/UML/html/index.html/contents/9b473c38b5df01fca3b097ddc8e43127.html create mode 100644 docs/UML/html/index.html/contents/9b80365c2dc3542c3e3989aed1fee44a.html create mode 100644 docs/UML/html/index.html/contents/9bbcee2e251aefab00dea7980fee5873.html create mode 100644 docs/UML/html/index.html/contents/9bd026fddbe177016ed72c2dc721a7ca.html create mode 100644 docs/UML/html/index.html/contents/9c06222653da1fc7e8f091042b5fdcda.html create mode 100644 docs/UML/html/index.html/contents/9c0a880add3ee823aefae16fe418c32d.html create mode 100644 docs/UML/html/index.html/contents/9c3c95a6f55ff41712acc294bad47313.html create mode 100644 docs/UML/html/index.html/contents/9c46adce84e971fafda65de20a50473a.html create mode 100644 docs/UML/html/index.html/contents/9c55bc5d6c8066b45735f86825fd796a.html create mode 100644 docs/UML/html/index.html/contents/9c56853cb895fef1997f38d09d156ad4.html create mode 100644 docs/UML/html/index.html/contents/9c5f4eedf6b4c21e591a2a651e451280.html create mode 100644 docs/UML/html/index.html/contents/9c77d89de8418c23e57114f6d0c155a3.html create mode 100644 docs/UML/html/index.html/contents/9c817b13c52de62951ae09053c981616.html create mode 100644 docs/UML/html/index.html/contents/9ca1a7d42c4617860ea6fe4491e4f12e.html create mode 100644 docs/UML/html/index.html/contents/9cea5be6013b80fc2fb2c13cf697ef84.html create mode 100644 docs/UML/html/index.html/contents/9cf1007c25af265ae79d4dbec82bc1e4.html create mode 100644 docs/UML/html/index.html/contents/9d0579931084862e973e6bf73c4d0cc1.html create mode 100644 docs/UML/html/index.html/contents/9d09629b8740aca2f9c171b068063153.html create mode 100644 docs/UML/html/index.html/contents/9d6a52bb4bbb781e074da77f7191f579.html create mode 100644 docs/UML/html/index.html/contents/9d7f9c497d0a014f7b5f778fda784e9d.html create mode 100644 docs/UML/html/index.html/contents/9d83d1b61b8db7d48a9ea552102409af.html create mode 100644 docs/UML/html/index.html/contents/9d9c79e73ec1fe28eca0b138e6569cea.html create mode 100644 docs/UML/html/index.html/contents/9df4ad06844a8cfd1252909ec1aea85d.html create mode 100644 docs/UML/html/index.html/contents/9df80117367f6ab16205b1e407bc7f82.html create mode 100644 docs/UML/html/index.html/contents/9e1886412180dbb7dade859648be1db1.html create mode 100644 docs/UML/html/index.html/contents/9e2c6ad8a7f1276f9fd489ac211f7a94.html create mode 100644 docs/UML/html/index.html/contents/9e340024e3e06cc7e99051be4f784964.html create mode 100644 docs/UML/html/index.html/contents/9e6e4cbd2b2afca073a372fc26e01ec6.html create mode 100644 docs/UML/html/index.html/contents/9ead09e26dac432fef1cb6b1fff84466.html create mode 100644 docs/UML/html/index.html/contents/9eb0df421154776c1e976861d7019072.html create mode 100644 docs/UML/html/index.html/contents/9eda4f77421f1974fe6156f9875a8a8a.html create mode 100644 docs/UML/html/index.html/contents/9ee6bef5d3ce7df6a0cb0de8945416c3.html create mode 100644 docs/UML/html/index.html/contents/9f01adebba87d03cc42f31a6df26ecc7.html create mode 100644 docs/UML/html/index.html/contents/9f1aab4bde6c272591f1751dd50358e4.html create mode 100644 docs/UML/html/index.html/contents/9f50ca63e40022b3b2d9c26d881bb6c4.html create mode 100644 docs/UML/html/index.html/contents/9f5e6b29ef45e239c5384c6cf35da69c.html create mode 100644 docs/UML/html/index.html/contents/9f89eb8262f052c223150d7dbbde7571.html create mode 100644 docs/UML/html/index.html/contents/9fd094e920c5e4d11d753afaade7e1ff.html create mode 100644 docs/UML/html/index.html/contents/a0141b53773abc98214a8513f7e5eeed.html create mode 100644 docs/UML/html/index.html/contents/a029e211634e52eada293dac8700be19.html create mode 100644 docs/UML/html/index.html/contents/a07515fa53ddd9cb479d1d5d4af7224f.html create mode 100644 docs/UML/html/index.html/contents/a0908078a00f8cd78b656764062a9c74.html create mode 100644 docs/UML/html/index.html/contents/a099006589cd27ee19a9e64cf14c6eca.html create mode 100644 docs/UML/html/index.html/contents/a0b2a2a3b07160b46f2be67afe4fc859.html create mode 100644 docs/UML/html/index.html/contents/a105d0fe3d5cea9b47c7afa6c8557686.html create mode 100644 docs/UML/html/index.html/contents/a1229cfb12abf3c0929046fd547f5345.html create mode 100644 docs/UML/html/index.html/contents/a144e1ce4fd79cce4ab8fbce5dc6f04b.html create mode 100644 docs/UML/html/index.html/contents/a14c6f5006df291a244d7aa0a55050b3.html create mode 100644 docs/UML/html/index.html/contents/a167bc4615cab9a96ce85ba687c7df19.html create mode 100644 docs/UML/html/index.html/contents/a179330a47399e51da4f7c67a26f624c.html create mode 100644 docs/UML/html/index.html/contents/a1c5d58050b49f7cfc2b5de6b9352f77.html create mode 100644 docs/UML/html/index.html/contents/a1e02a63b414efa0d2d34681244f2b55.html create mode 100644 docs/UML/html/index.html/contents/a2130ddf8dd1b94f8054f7beff636c32.html create mode 100644 docs/UML/html/index.html/contents/a23c5b9bd5eac02f52c56c35bf10824c.html create mode 100644 docs/UML/html/index.html/contents/a2573fdff5ca932d6f2ebbe104715b0c.html create mode 100644 docs/UML/html/index.html/contents/a293dadefd34e66600cdbc1288986a62.html create mode 100644 docs/UML/html/index.html/contents/a29d7fca7b974fcc0d5f650c778967f4.html create mode 100644 docs/UML/html/index.html/contents/a2d65517e0d804643c12d5df8f10d118.html create mode 100644 docs/UML/html/index.html/contents/a2d8574625fb41d5283d2027232757ad.html create mode 100644 docs/UML/html/index.html/contents/a2e251652b63e3d1fc48a3f3ec8b0d6e.html create mode 100644 docs/UML/html/index.html/contents/a2e6ad640a780c4802296a931a5e2695.html create mode 100644 docs/UML/html/index.html/contents/a2fdbe99d2a53fb84118d2a9ce46f29b.html create mode 100644 docs/UML/html/index.html/contents/a309de5a9a6642a02a077eb82eeb8f41.html create mode 100644 docs/UML/html/index.html/contents/a38d6bde5570acb6915e5998c8e3519d.html create mode 100644 docs/UML/html/index.html/contents/a393b5d68008c7a8f1b045578bdfebcf.html create mode 100644 docs/UML/html/index.html/contents/a3b7660419efe543795fd3d223d2daed.html create mode 100644 docs/UML/html/index.html/contents/a3e5322c18dbe822df10310f15eb20bc.html create mode 100644 docs/UML/html/index.html/contents/a3ee12e3b29e487b9e5bec995e46202a.html create mode 100644 docs/UML/html/index.html/contents/a40ab0a2ee46d67846327b1cad580ff0.html create mode 100644 docs/UML/html/index.html/contents/a41818884a205b0bf873ee45b258004c.html create mode 100644 docs/UML/html/index.html/contents/a45b94962edc72551c47f99322a107d8.html create mode 100644 docs/UML/html/index.html/contents/a4606a82fa614707056585bc7b11c66b.html create mode 100644 docs/UML/html/index.html/contents/a47184837219aea9ccabc89e35d90216.html create mode 100644 docs/UML/html/index.html/contents/a477d690ad6bbe6fc047428d3ab754af.html create mode 100644 docs/UML/html/index.html/contents/a484177a9a1023d25d34d009f77a1a32.html create mode 100644 docs/UML/html/index.html/contents/a4bfbb5ae93384d9a636d338b5be635f.html create mode 100644 docs/UML/html/index.html/contents/a4d31026b46a61294b13b057899650f2.html create mode 100644 docs/UML/html/index.html/contents/a4dfe98bc6fb53bae1d39a500b10ce03.html create mode 100644 docs/UML/html/index.html/contents/a4ef7d6cc4d03a2d16c85ca8fa4ef434.html create mode 100644 docs/UML/html/index.html/contents/a533cf1f2905ecd2c2e1e145cf6d343c.html create mode 100644 docs/UML/html/index.html/contents/a5645e3d9efbfd34426269f2a9adb658.html create mode 100644 docs/UML/html/index.html/contents/a5b96ea6baa365812d11f82ccfb1d272.html create mode 100644 docs/UML/html/index.html/contents/a5cd295af4296fbc376a726a362495bd.html create mode 100644 docs/UML/html/index.html/contents/a60018cc480f5465268442ac61d4e37b.html create mode 100644 docs/UML/html/index.html/contents/a60fb8bc0997ad4a09204c2d2e69903e.html create mode 100644 docs/UML/html/index.html/contents/a614fb1b281705d3afca465decce6f40.html create mode 100644 docs/UML/html/index.html/contents/a61957d07e763540bf7433b6ac40a323.html create mode 100644 docs/UML/html/index.html/contents/a636bd587986682971f3f1690b14ad35.html create mode 100644 docs/UML/html/index.html/contents/a63c24010ca5f61c047e5d2285736fc8.html create mode 100644 docs/UML/html/index.html/contents/a6509db15999b078f3437117b4ddedbf.html create mode 100644 docs/UML/html/index.html/contents/a69276c7962435f893c1ca01ff1f40bd.html create mode 100644 docs/UML/html/index.html/contents/a698111e5d01b1e4cd24381e42878559.html create mode 100644 docs/UML/html/index.html/contents/a6a3f12d8c2054f61fb267b0088d1d71.html create mode 100644 docs/UML/html/index.html/contents/a6b7c15ea29bdb424d6842a9934c9b30.html create mode 100644 docs/UML/html/index.html/contents/a7741c26c6b2f4377b8f92bab668769d.html create mode 100644 docs/UML/html/index.html/contents/a77c937d421806c0efe9333d802d9d6e.html create mode 100644 docs/UML/html/index.html/contents/a78a6334ca73a8e8d30cef48c6544106.html create mode 100644 docs/UML/html/index.html/contents/a7a4c18216243ec3c8b5d261f348b4d7.html create mode 100644 docs/UML/html/index.html/contents/a7c84037cad392524be133761b1b71c4.html create mode 100644 docs/UML/html/index.html/contents/a7cdd805cb8c231119bb50b2fe446c2e.html create mode 100644 docs/UML/html/index.html/contents/a7d57dc36f724c02e5b653f24986cfb6.html create mode 100644 docs/UML/html/index.html/contents/a7e387e6836008e652c37a915d30c255.html create mode 100644 docs/UML/html/index.html/contents/a7f27c5ac2dce9656c920729f9daa223.html create mode 100644 docs/UML/html/index.html/contents/a7fbd983699d3bdb55da895e079f0862.html create mode 100644 docs/UML/html/index.html/contents/a80129e9d05f9fc8eb8fc07e4f30bc89.html create mode 100644 docs/UML/html/index.html/contents/a80e3dfb6dfe79609404bb0c83231b0b.html create mode 100644 docs/UML/html/index.html/contents/a8114ca996f6ef9d3dd1b00c84d76898.html create mode 100644 docs/UML/html/index.html/contents/a84e08c5eee615beb71453612f3c6906.html create mode 100644 docs/UML/html/index.html/contents/a84e57615442e5633a60a6ed31029126.html create mode 100644 docs/UML/html/index.html/contents/a87b4a7c8e02b3cefec350503df1d72a.html create mode 100644 docs/UML/html/index.html/contents/a8aead5d04280c45f12c39b4e5dee3fc.html create mode 100644 docs/UML/html/index.html/contents/a8d713a91fadd36895fe38a36479a97b.html create mode 100644 docs/UML/html/index.html/contents/a8e28abab8aa18481c19d5b69aee2938.html create mode 100644 docs/UML/html/index.html/contents/a8e3ee43ccf9c240859db674eb83dd24.html create mode 100644 docs/UML/html/index.html/contents/a8e8a1218b00b9045b5c4afd64f73ab3.html create mode 100644 docs/UML/html/index.html/contents/a90a53a6723f5e6d7dcc6b8051d6ae61.html create mode 100644 docs/UML/html/index.html/contents/a930c9cc4013879f811f6c3d14c9cc2a.html create mode 100644 docs/UML/html/index.html/contents/a93138e6eb3c7dabb41c87224a1b973f.html create mode 100644 docs/UML/html/index.html/contents/a93b87ecda7e9d79514042b900993122.html create mode 100644 docs/UML/html/index.html/contents/a954f6bf7d9243bbe3486ead1b1157d0.html create mode 100644 docs/UML/html/index.html/contents/a9b25ea3502b5187d5488221e998e9f5.html create mode 100644 docs/UML/html/index.html/contents/a9c4d762c012ab17d06d00b4bfa29fd0.html create mode 100644 docs/UML/html/index.html/contents/a9f90dcf117c13030ee274852b0b66f8.html create mode 100644 docs/UML/html/index.html/contents/aa446e1685637d5e140c774510d231eb.html create mode 100644 docs/UML/html/index.html/contents/aa5e009d088b4ab4b089054dd1ddf13e.html create mode 100644 docs/UML/html/index.html/contents/aa6ab8441c635ce955bc904b6cc64d4f.html create mode 100644 docs/UML/html/index.html/contents/aac23fb2d9b6c1176f2d1b16ba21c232.html create mode 100644 docs/UML/html/index.html/contents/aaeef9710962d4d5bbe59d2b69bbb1fc.html create mode 100644 docs/UML/html/index.html/contents/aaf2e1a48f06aa3474f1fec3c8b4affc.html create mode 100644 docs/UML/html/index.html/contents/ab142a386ec2fd02875205340caee412.html create mode 100644 docs/UML/html/index.html/contents/ab9b46a790d33d17e6ee96da0239ebbe.html create mode 100644 docs/UML/html/index.html/contents/abcaa0ef89bc673bfe078b466bccddf6.html create mode 100644 docs/UML/html/index.html/contents/abe39e5fe28e0f8bbbb2ac7a0388ee20.html create mode 100644 docs/UML/html/index.html/contents/abf5515d6d8e67ac21e546f9bbfc697f.html create mode 100644 docs/UML/html/index.html/contents/ac2032ad95957ef4b6cee6bfec57477c.html create mode 100644 docs/UML/html/index.html/contents/ac262c2d3a8bf8fbd9fe904c4b5a9501.html create mode 100644 docs/UML/html/index.html/contents/ac8269b433d3bd7f9138573618bc9c41.html create mode 100644 docs/UML/html/index.html/contents/ac8e5315ac9da8ad181eef5e73626bd1.html create mode 100644 docs/UML/html/index.html/contents/ac90516f493e08877340a59a5136997f.html create mode 100644 docs/UML/html/index.html/contents/ac96f002e27eaa4ad7f7186c189d3e6f.html create mode 100644 docs/UML/html/index.html/contents/acb84d1eaa3f58533614ac77cc530c2b.html create mode 100644 docs/UML/html/index.html/contents/acbcfb7de002c3d1edee4058c6e7ba2d.html create mode 100644 docs/UML/html/index.html/contents/acdd7a9f8cadf6caced1c4012dda638b.html create mode 100644 docs/UML/html/index.html/contents/acf17c3a75bcabacbcb34a57a4772bfa.html create mode 100644 docs/UML/html/index.html/contents/acf97a91668f0c3a77d9737ec714300b.html create mode 100644 docs/UML/html/index.html/contents/ad2259ac2d4d0f5771570ddebc7ee9e4.html create mode 100644 docs/UML/html/index.html/contents/ad228021824417a7bb255f308f9e192c.html create mode 100644 docs/UML/html/index.html/contents/ad27ca0685e9b991bbbbf28d3bc5e8d7.html create mode 100644 docs/UML/html/index.html/contents/ad55033cc2309a3a9e4e804d67ee55f9.html create mode 100644 docs/UML/html/index.html/contents/ad6b8daf19e9d8949cfbd69a57bb49f8.html create mode 100644 docs/UML/html/index.html/contents/ad80084b342fac7800a4cde42eeabf6e.html create mode 100644 docs/UML/html/index.html/contents/ad80b60baa1d36f550201b6cbbfaf1ae.html create mode 100644 docs/UML/html/index.html/contents/adc1338e0d6d43a3b7177c5b92398867.html create mode 100644 docs/UML/html/index.html/contents/aded99086a599e94c0dc18d7c45952a0.html create mode 100644 docs/UML/html/index.html/contents/ae2c1eeebc1e08392efdb921baa9f89b.html create mode 100644 docs/UML/html/index.html/contents/ae3b575430c8572f482e5a64e010a788.html create mode 100644 docs/UML/html/index.html/contents/ae3ccaa2ac21b5d615a0ffde11ddcaef.html create mode 100644 docs/UML/html/index.html/contents/ae4867b4b3cc519128881d7f4e6d16e1.html create mode 100644 docs/UML/html/index.html/contents/ae7569e50f60e44e774e7d437961c91d.html create mode 100644 docs/UML/html/index.html/contents/ae829c909b4afdf0b4e5e2ac8712d682.html create mode 100644 docs/UML/html/index.html/contents/ae9b0684f0c1994b89b3f29317c7db8c.html create mode 100644 docs/UML/html/index.html/contents/aeb1e5634b60b1f35e096477f31e3364.html create mode 100644 docs/UML/html/index.html/contents/aee5a411f56a6d7192d3b99ab7614fc6.html create mode 100644 docs/UML/html/index.html/contents/aee6a3e6de2382cea2625a3d9a71b960.html create mode 100644 docs/UML/html/index.html/contents/aefe5a98768246657522f2499b8ba899.html create mode 100644 docs/UML/html/index.html/contents/af0f64fb43ae2c821fffdcc14777ab60.html create mode 100644 docs/UML/html/index.html/contents/af4fc638f414030c399588ea8e84aac1.html create mode 100644 docs/UML/html/index.html/contents/af6d0b04ad9f522c3eee942c390a9ef7.html create mode 100644 docs/UML/html/index.html/contents/af6d70c0ad317772a08cdb52ea279b23.html create mode 100644 docs/UML/html/index.html/contents/af91db4057deb6552b5a12e76dc12b11.html create mode 100644 docs/UML/html/index.html/contents/afa35569bdc6202c04499edbafe4412e.html create mode 100644 docs/UML/html/index.html/contents/afd703e18245e11ac776066c89a40488.html create mode 100644 docs/UML/html/index.html/contents/afe66c8ced927b3c041f1814baa2fb97.html create mode 100644 docs/UML/html/index.html/contents/aff41b6ca58b1bc6d25745d5a21549cc.html create mode 100644 docs/UML/html/index.html/contents/b009b9cf95a8dfc000d76196d2eaf2a1.html create mode 100644 docs/UML/html/index.html/contents/b01168d6e1774de09bd49ca511499df2.html create mode 100644 docs/UML/html/index.html/contents/b04a3a89b6738348a56da1d800bcb9b7.html create mode 100644 docs/UML/html/index.html/contents/b06a5e0a04c97940f01fd800c04a27bc.html create mode 100644 docs/UML/html/index.html/contents/b06f5a69a2e9f285c56567262c88a173.html create mode 100644 docs/UML/html/index.html/contents/b0701fbc1cfe8fad427c607efa6c4181.html create mode 100644 docs/UML/html/index.html/contents/b0796dd845dfbe0e2c1439b690e59253.html create mode 100644 docs/UML/html/index.html/contents/b07a7975f78acb343f0991ed70b0e910.html create mode 100644 docs/UML/html/index.html/contents/b0985b71c0cbb15aba0b8b6597c8d27f.html create mode 100644 docs/UML/html/index.html/contents/b0aa44ca55a3858c51d2d86c854d411b.html create mode 100644 docs/UML/html/index.html/contents/b0cc9f6f4d4df675f041ce7b94d18fd1.html create mode 100644 docs/UML/html/index.html/contents/b0fbb5256dcbd9f5925f477b3f972f52.html create mode 100644 docs/UML/html/index.html/contents/b0fef7dc7755be4eaa15e0a7f4f12827.html create mode 100644 docs/UML/html/index.html/contents/b18e0e91dce2af59407b4555fff95f88.html create mode 100644 docs/UML/html/index.html/contents/b1cc179750d7478da42c374e551b414d.html create mode 100644 docs/UML/html/index.html/contents/b1fb3efbe5d2f1f552ee04194a5e707f.html create mode 100644 docs/UML/html/index.html/contents/b228c804526c235811c254669ae88b77.html create mode 100644 docs/UML/html/index.html/contents/b230a21537abfc8cefe2c12c25bb760d.html create mode 100644 docs/UML/html/index.html/contents/b254816f16d84cc4704eaee53420bac0.html create mode 100644 docs/UML/html/index.html/contents/b26738a6b40d4a61914240e9fd1d20ff.html create mode 100644 docs/UML/html/index.html/contents/b2743363efd24773abd69b142f634b92.html create mode 100644 docs/UML/html/index.html/contents/b276e8a6b91f1ba29c3ce1c1aa5dc332.html create mode 100644 docs/UML/html/index.html/contents/b27a54594d082c064e5647763c0a06fe.html create mode 100644 docs/UML/html/index.html/contents/b29240362acdc4aa55f356c57f280735.html create mode 100644 docs/UML/html/index.html/contents/b2c57d05ec72185c2458ccf2f946dc4c.html create mode 100644 docs/UML/html/index.html/contents/b2f85f0a59485f2d3e1d71141aed2968.html create mode 100644 docs/UML/html/index.html/contents/b32fb940be11b01ed227171f90530b1a.html create mode 100644 docs/UML/html/index.html/contents/b33a51825dbf1fe1f1c4ec712a245654.html create mode 100644 docs/UML/html/index.html/contents/b3462f6d71e989ee922f1db40120b1d0.html create mode 100644 docs/UML/html/index.html/contents/b37631325aef58f4f8d1cf87a33dfca9.html create mode 100644 docs/UML/html/index.html/contents/b3afa759ad0b1cee6e3352760dc48dc4.html create mode 100644 docs/UML/html/index.html/contents/b3b36f825f580eddc5003175f70d1013.html create mode 100644 docs/UML/html/index.html/contents/b3f712c63e1ab095470cab84aaacf261.html create mode 100644 docs/UML/html/index.html/contents/b420eac2a073c70683a2aff98facb804.html create mode 100644 docs/UML/html/index.html/contents/b4349129cca02a3a2d3ff80cb7f36f27.html create mode 100644 docs/UML/html/index.html/contents/b43587a6a5e45406abfe403d54813405.html create mode 100644 docs/UML/html/index.html/contents/b46df938367240524e20172eb54c73b1.html create mode 100644 docs/UML/html/index.html/contents/b4924ee46f7fecd6f8ead195b6b664c4.html create mode 100644 docs/UML/html/index.html/contents/b4bc8356343e393b4beedfe614553446.html create mode 100644 docs/UML/html/index.html/contents/b4cf1e07ab8015824d28d57ce5e78d72.html create mode 100644 docs/UML/html/index.html/contents/b4dd456a3b6e5551e4855297a9be77c2.html create mode 100644 docs/UML/html/index.html/contents/b4de763b1543e4e541ae1075bc51e3b7.html create mode 100644 docs/UML/html/index.html/contents/b4ef26d988932b51e41b18238a9661da.html create mode 100644 docs/UML/html/index.html/contents/b4f424a50b2cd0f91c02f84594a57a83.html create mode 100644 docs/UML/html/index.html/contents/b50bb7cb03f26cbf68b5d9c58d88c2e5.html create mode 100644 docs/UML/html/index.html/contents/b5134bfe900d6000a44ca155731661d2.html create mode 100644 docs/UML/html/index.html/contents/b524019e369364808212def4d1a9a6e8.html create mode 100644 docs/UML/html/index.html/contents/b5331614c40134945e25890a67d25ca6.html create mode 100644 docs/UML/html/index.html/contents/b536b7ca6190709eb8af06e69a2d8d54.html create mode 100644 docs/UML/html/index.html/contents/b55f7c4fd5546f140f3b3f7bafafb20d.html create mode 100644 docs/UML/html/index.html/contents/b5bebe48c49c17de6ec6e94a26a12bda.html create mode 100644 docs/UML/html/index.html/contents/b5dcafd85744eec26dab8b4b2c4a2777.html create mode 100644 docs/UML/html/index.html/contents/b6198e5a4981c20f4227f62ef31612de.html create mode 100644 docs/UML/html/index.html/contents/b64879c58ebbae3020c6dbcb667c4018.html create mode 100644 docs/UML/html/index.html/contents/b66991fb677f70035c10aedeabf4e2e4.html create mode 100644 docs/UML/html/index.html/contents/b66dc8dfcf488925cad885f4d6ba41ff.html create mode 100644 docs/UML/html/index.html/contents/b6d258d34cdf6648c1b3c7a7ef9bf21d.html create mode 100644 docs/UML/html/index.html/contents/b6ea4f04de79d1150195582c93d7ac7c.html create mode 100644 docs/UML/html/index.html/contents/b6fbacc11038bb7fe4012c9c130882a5.html create mode 100644 docs/UML/html/index.html/contents/b73b92d28d682911e8b15c716f2ecc48.html create mode 100644 docs/UML/html/index.html/contents/b773a435899f443e19acb787eac8ac31.html create mode 100644 docs/UML/html/index.html/contents/b795e22adf615e98e9b9281ea63525a9.html create mode 100644 docs/UML/html/index.html/contents/b7e42457018cc5c74579f8b43d3acf7d.html create mode 100644 docs/UML/html/index.html/contents/b8065528ff0866debf4a0cff3e147f9d.html create mode 100644 docs/UML/html/index.html/contents/b80d7493430809276383961c385ee860.html create mode 100644 docs/UML/html/index.html/contents/b869be6fe71475d3fe13c51f0024f1bf.html create mode 100644 docs/UML/html/index.html/contents/b88f7454f3653c0f4bde2de780f98ca5.html create mode 100644 docs/UML/html/index.html/contents/b9028752f48c4fc155a99ca48fbea3eb.html create mode 100644 docs/UML/html/index.html/contents/b93a4aa5ecca2453c53310562bc9c7fd.html create mode 100644 docs/UML/html/index.html/contents/b93d9d68702a34dae936486f2af275e9.html create mode 100644 docs/UML/html/index.html/contents/b981ba669c0e879541c2cf16c5fc41b1.html create mode 100644 docs/UML/html/index.html/contents/b986c87a53d443dc96fd5618f309bfff.html create mode 100644 docs/UML/html/index.html/contents/b98a8eadad93fb9c4632817b5ee8cf6a.html create mode 100644 docs/UML/html/index.html/contents/b99d7d18aca96bbe8ec2e18bec829eec.html create mode 100644 docs/UML/html/index.html/contents/b99e7554ec614098ff9e08f70a26e1ec.html create mode 100644 docs/UML/html/index.html/contents/b9b8b36c4c411102dad2f782ee63ff91.html create mode 100644 docs/UML/html/index.html/contents/b9d4a05e8e9382e4ee0998102d82d16b.html create mode 100644 docs/UML/html/index.html/contents/b9eb806f1517caff6bab11898790dcd3.html create mode 100644 docs/UML/html/index.html/contents/b9f465c166847f04c445425fb5a55d39.html create mode 100644 docs/UML/html/index.html/contents/ba0b2503ea2cfdadce543dc91ab0424c.html create mode 100644 docs/UML/html/index.html/contents/ba120655ae0c8a7eb4eaf046b21c5f97.html create mode 100644 docs/UML/html/index.html/contents/ba1c32ee87b83f40c54cae72da1414e8.html create mode 100644 docs/UML/html/index.html/contents/ba26b012a17869af0cb975f6f8c7bcae.html create mode 100644 docs/UML/html/index.html/contents/ba34c6518c5863b7d430601eae0f980c.html create mode 100644 docs/UML/html/index.html/contents/ba395f8cc73eea85b6d397b73756512e.html create mode 100644 docs/UML/html/index.html/contents/ba72e8b427ca412c06af06c82d373fb9.html create mode 100644 docs/UML/html/index.html/contents/ba77acebc769fc221e9988e278625017.html create mode 100644 docs/UML/html/index.html/contents/ba80c4b4ca1d51e340d0385d269eafbe.html create mode 100644 docs/UML/html/index.html/contents/babd427722148f926383f768b7ffe206.html create mode 100644 docs/UML/html/index.html/contents/bae7a2f110da6c8036b99753c42dcf46.html create mode 100644 docs/UML/html/index.html/contents/bafb8bf3933e0d1881f9e9b21347f4b1.html create mode 100644 docs/UML/html/index.html/contents/bb03fcdef1d8117d1c3fa179bb25a78f.html create mode 100644 docs/UML/html/index.html/contents/bb0fc2b3a3aa51af8540f6bfc5ff3c28.html create mode 100644 docs/UML/html/index.html/contents/bb17008318f6d1c8da5778a4d495b418.html create mode 100644 docs/UML/html/index.html/contents/bb34f4efaf7c99b2aa5fe3c37f25bac1.html create mode 100644 docs/UML/html/index.html/contents/bb4d3ee4f73c29bde810d84d820777c8.html create mode 100644 docs/UML/html/index.html/contents/bb5a0e821d35146502e601959f106ff6.html create mode 100644 docs/UML/html/index.html/contents/bb6daad3c14f3809ac04dce5ab36f2cd.html create mode 100644 docs/UML/html/index.html/contents/bb9e1bebb1411e4cd60b796a92673b44.html create mode 100644 docs/UML/html/index.html/contents/bba71dde2c5eac1071d0596188f60b4e.html create mode 100644 docs/UML/html/index.html/contents/bc15d559252d930245fe7a5e58435cbc.html create mode 100644 docs/UML/html/index.html/contents/bc26d89a0537fce69c51a73794f1042f.html create mode 100644 docs/UML/html/index.html/contents/bc2f60c2a04be0c34a68dd57f38382b6.html create mode 100644 docs/UML/html/index.html/contents/bcb0a4963b09b9dde247fc2f00d0db79.html create mode 100644 docs/UML/html/index.html/contents/bcb7ce47826f2b2842799270e0088aad.html create mode 100644 docs/UML/html/index.html/contents/bcc1ad526d0055eaead55a934a61b383.html create mode 100644 docs/UML/html/index.html/contents/bd28013485d36b4a56d2e284d577f815.html create mode 100644 docs/UML/html/index.html/contents/bd288775c49225cf4cdd0834aafd3b28.html create mode 100644 docs/UML/html/index.html/contents/bd3a346926feadd098fe7bc3e5d9af38.html create mode 100644 docs/UML/html/index.html/contents/bd49a66486f814a48cde6e50eb7db47b.html create mode 100644 docs/UML/html/index.html/contents/bd62bd8dda4abb84541147e66200303a.html create mode 100644 docs/UML/html/index.html/contents/bd8aeb7c65b69547aa65632957008578.html create mode 100644 docs/UML/html/index.html/contents/bd9ab2cd7440ceed6d93de7efc261d6c.html create mode 100644 docs/UML/html/index.html/contents/bda3ea497013c2fb93a1d9cf5d5c9fc1.html create mode 100644 docs/UML/html/index.html/contents/bda94fc3af8505762f1e10feef8bd571.html create mode 100644 docs/UML/html/index.html/contents/bdc6abfd7d7119760c2a059d3bc2ad61.html create mode 100644 docs/UML/html/index.html/contents/bdf66e01df2fcf6fdba5c65dbce4598c.html create mode 100644 docs/UML/html/index.html/contents/be5a7a35980f01c4f0ae9589fec0f675.html create mode 100644 docs/UML/html/index.html/contents/be653f12dac76fd779cd14c40bc893b1.html create mode 100644 docs/UML/html/index.html/contents/beb03c927d42802e188c7161968d2782.html create mode 100644 docs/UML/html/index.html/contents/beb3709f698b0125986b5914ebe433ca.html create mode 100644 docs/UML/html/index.html/contents/becc6fa46b6adfa86dec05670657dde4.html create mode 100644 docs/UML/html/index.html/contents/beded1da861ee3eb2c9e3c091905828a.html create mode 100644 docs/UML/html/index.html/contents/bf04255f69b63d4d1b90becebe68cc50.html create mode 100644 docs/UML/html/index.html/contents/bf38eb5620427358f67b79cc3f33ec9f.html create mode 100644 docs/UML/html/index.html/contents/bfd4ca91cb4d70ffc4fbaae3bac4b7c7.html create mode 100644 docs/UML/html/index.html/contents/bfd857bcb59c02d34eec9e0133205457.html create mode 100644 docs/UML/html/index.html/contents/bff119177ab6b354e9532ca7faf8a684.html create mode 100644 docs/UML/html/index.html/contents/c00190ac67a3ceef1f6d0d841100a767.html create mode 100644 docs/UML/html/index.html/contents/c012770b500af89c4f9c3620b4e457e1.html create mode 100644 docs/UML/html/index.html/contents/c0333980d1ec911e697d66ec1a7cf64a.html create mode 100644 docs/UML/html/index.html/contents/c03a8b649da3ceb96c2a205e2e5507ca.html create mode 100644 docs/UML/html/index.html/contents/c04056344c7ce9c5211e023df065269d.html create mode 100644 docs/UML/html/index.html/contents/c0518f70651c4abb134315b4bdd355f1.html create mode 100644 docs/UML/html/index.html/contents/c05377f18dcb77525294cfbd5c4a78a1.html create mode 100644 docs/UML/html/index.html/contents/c058eb6e4e0e8f5ec2d4d2fe0d1a199a.html create mode 100644 docs/UML/html/index.html/contents/c070d6710d6ccaf09dde327b339ca5c1.html create mode 100644 docs/UML/html/index.html/contents/c0cfd0fb33d5b2a3c3fdd2ae4082fdd6.html create mode 100644 docs/UML/html/index.html/contents/c0e89dbc6458e19cde045359f92db0d0.html create mode 100644 docs/UML/html/index.html/contents/c102d84039184645d0441eedb9c5d02c.html create mode 100644 docs/UML/html/index.html/contents/c1493c9aa8bbf49c6165094020249475.html create mode 100644 docs/UML/html/index.html/contents/c1604d4be7d18221ee7f202c9dee2d3c.html create mode 100644 docs/UML/html/index.html/contents/c1706647dee28e2584e3e33c9a7b2136.html create mode 100644 docs/UML/html/index.html/contents/c186131d238cfe9f991edd5751ef3b37.html create mode 100644 docs/UML/html/index.html/contents/c194791d574718a77cadd5b63e94ea58.html create mode 100644 docs/UML/html/index.html/contents/c1960721ff9201e41a5b490c9b732f60.html create mode 100644 docs/UML/html/index.html/contents/c1dbb935797e2e81e27eef0ee4569bb6.html create mode 100644 docs/UML/html/index.html/contents/c1ede8d083a70c77c766dd303ac629e1.html create mode 100644 docs/UML/html/index.html/contents/c1f29a6d2c77bf12ddf958204041bc4f.html create mode 100644 docs/UML/html/index.html/contents/c1fabed9be8de143b687e1fb7586b60a.html create mode 100644 docs/UML/html/index.html/contents/c2028ec1ab8b96bed95d70478f52cd51.html create mode 100644 docs/UML/html/index.html/contents/c2b1755f1fd57f48f37c471be8481f05.html create mode 100644 docs/UML/html/index.html/contents/c2ca925646d2036ed68d052bcecd3696.html create mode 100644 docs/UML/html/index.html/contents/c2f629d5f6c489e704c93439b0b50a06.html create mode 100644 docs/UML/html/index.html/contents/c350c06fa083d28b2f34eb91158bb24e.html create mode 100644 docs/UML/html/index.html/contents/c37874d72771207e93ed408cd5bea157.html create mode 100644 docs/UML/html/index.html/contents/c4091d3f81c19c5397b32ee72418844d.html create mode 100644 docs/UML/html/index.html/contents/c423a761423cc1bf243293b29853ee9f.html create mode 100644 docs/UML/html/index.html/contents/c4d342fb8d95459f2c54111f40250d1c.html create mode 100644 docs/UML/html/index.html/contents/c4f5b8ebbd5c96ed40356abb99e65587.html create mode 100644 docs/UML/html/index.html/contents/c508552adb5b33e38bba3c1c275e9ed1.html create mode 100644 docs/UML/html/index.html/contents/c5237a40eb50716cb49108c8ae2ef819.html create mode 100644 docs/UML/html/index.html/contents/c5297f837119c3af5aef9fefd92e92ce.html create mode 100644 docs/UML/html/index.html/contents/c53a1f67ea692bc3510a4e3af3f0f6ee.html create mode 100644 docs/UML/html/index.html/contents/c548524a4bccede0ae43ccf726712277.html create mode 100644 docs/UML/html/index.html/contents/c576650a550263f7355fd0ac438a6937.html create mode 100644 docs/UML/html/index.html/contents/c5a298a0d1cc9c98b1502dd75637694e.html create mode 100644 docs/UML/html/index.html/contents/c5a9ab76d63b366866ceeedb57edb125.html create mode 100644 docs/UML/html/index.html/contents/c5aade075ac9adc039c74ac01f6f0fd1.html create mode 100644 docs/UML/html/index.html/contents/c5b418088e52f404a1f47b9d28cc83cf.html create mode 100644 docs/UML/html/index.html/contents/c5e3df13a38c9089e4510fd73597aafb.html create mode 100644 docs/UML/html/index.html/contents/c623ed903568fe6395f20985b7041daf.html create mode 100644 docs/UML/html/index.html/contents/c6270d6dc44d02953b68222e7ae2e039.html create mode 100644 docs/UML/html/index.html/contents/c62ddcef75e050f272ff1343b9b3aea8.html create mode 100644 docs/UML/html/index.html/contents/c63d2917c99ac022d864ba27deb21f91.html create mode 100644 docs/UML/html/index.html/contents/c64e5f2988a55c824e5f26b1773434a0.html create mode 100644 docs/UML/html/index.html/contents/c65f59ef034563bebe9e35c6698000cb.html create mode 100644 docs/UML/html/index.html/contents/c674a3a6c9ceb13c56376c291d6d372d.html create mode 100644 docs/UML/html/index.html/contents/c6a6e52485fec197872bb5d1ce060faa.html create mode 100644 docs/UML/html/index.html/contents/c720e07fb77ca1fc92d79339f9a18ccc.html create mode 100644 docs/UML/html/index.html/contents/c725c762ad013dd2b02a485ec5db9935.html create mode 100644 docs/UML/html/index.html/contents/c768773ff4a3f3e392490fb4e6e1b0f3.html create mode 100644 docs/UML/html/index.html/contents/c798042ec649752f2829432e3774f1ea.html create mode 100644 docs/UML/html/index.html/contents/c798b6d2197d07eafd88c0b991db0ec0.html create mode 100644 docs/UML/html/index.html/contents/c7ad530b5039be62efa6fad88dc7abe3.html create mode 100644 docs/UML/html/index.html/contents/c7bfa377357b4271b6d32d45b007f086.html create mode 100644 docs/UML/html/index.html/contents/c7d758be7ec2f9b83dbd1e26fbfd3556.html create mode 100644 docs/UML/html/index.html/contents/c8351c3caa2daa09b565eac3d3436c44.html create mode 100644 docs/UML/html/index.html/contents/c83be1c6add5d07e214a3b3405cb6443.html create mode 100644 docs/UML/html/index.html/contents/c8795d4e0edb1303b22f586dce10e917.html create mode 100644 docs/UML/html/index.html/contents/c87f1d0d7d9bf8dfb823e7a35ce476ee.html create mode 100644 docs/UML/html/index.html/contents/c885b9dc7c02955aec4a56ccfbfc1550.html create mode 100644 docs/UML/html/index.html/contents/c8aba3e8361eec78b7bb06b52ee151ed.html create mode 100644 docs/UML/html/index.html/contents/c8ad10dc9ead00fd51e4dd25d821a8d0.html create mode 100644 docs/UML/html/index.html/contents/c8e9551b6cd4c46aa984a955f61f28f8.html create mode 100644 docs/UML/html/index.html/contents/c905717e109b42b176f541dbe52c45cf.html create mode 100644 docs/UML/html/index.html/contents/c91c290a4c32972e69c9f07f23b82597.html create mode 100644 docs/UML/html/index.html/contents/c93cb3f357ba7436af6275c6e6b56a87.html create mode 100644 docs/UML/html/index.html/contents/c96865ff3d702c2bb91ceee107ea407f.html create mode 100644 docs/UML/html/index.html/contents/c987ae9406608a912478b24a1e455787.html create mode 100644 docs/UML/html/index.html/contents/c99b1071c1f59ac17d0859a16a4cd2e6.html create mode 100644 docs/UML/html/index.html/contents/ca47e6b7f91ba480b0b3eb850b26ddea.html create mode 100644 docs/UML/html/index.html/contents/ca6e7604410ba4ab798da407a4692470.html create mode 100644 docs/UML/html/index.html/contents/ca72eed9ae3efaba0c3fe51a50c7b6e5.html create mode 100644 docs/UML/html/index.html/contents/ca7325d93bea6a1234a66b01fa3e4bc0.html create mode 100644 docs/UML/html/index.html/contents/ca7d8ba70b7ae66c8f130c9e3b666a86.html create mode 100644 docs/UML/html/index.html/contents/ca80e8e4333fd24fa0631dabdf6a902e.html create mode 100644 docs/UML/html/index.html/contents/cabb07561850fd4a1aeae8f7c2d23ec9.html create mode 100644 docs/UML/html/index.html/contents/cac6ad09231ee0627b9726a0dbd4f5b6.html create mode 100644 docs/UML/html/index.html/contents/caca0e2e2ecc75832ad95d63ac93b0ce.html create mode 100644 docs/UML/html/index.html/contents/cacc297a98a7bfd5ed1cb6dde60da532.html create mode 100644 docs/UML/html/index.html/contents/cb0e373255cb7b1efb9087d85833d4d8.html create mode 100644 docs/UML/html/index.html/contents/cb2288495cbd72beb8d6aff88271c27f.html create mode 100644 docs/UML/html/index.html/contents/cb2d617ff7cc86839b2b0556c66c43c1.html create mode 100644 docs/UML/html/index.html/contents/cb6b520db634918834555cb5d6d9744a.html create mode 100644 docs/UML/html/index.html/contents/cb7cc8077bbbe7322a4d2e28ac77cac7.html create mode 100644 docs/UML/html/index.html/contents/cb90a7aa8e1bded555e278558526f60b.html create mode 100644 docs/UML/html/index.html/contents/cbbf32a0417fc93ed1a61cbbae93a6e4.html create mode 100644 docs/UML/html/index.html/contents/cbe2d7fbedf328a68267ff0da5e10dc8.html create mode 100644 docs/UML/html/index.html/contents/cbea774f557ccd79ede78cb47c5a48f3.html create mode 100644 docs/UML/html/index.html/contents/cbf8cd8b6b8346b444b569e1e6c07b9d.html create mode 100644 docs/UML/html/index.html/contents/cc29d812616b366233e53d77e525edda.html create mode 100644 docs/UML/html/index.html/contents/cc4bf8092fb55a7bacae933e0758fe34.html create mode 100644 docs/UML/html/index.html/contents/cc546c4f38d5fdac941622f58cef2d89.html create mode 100644 docs/UML/html/index.html/contents/ccde172716307f516f6e0b9c819be92a.html create mode 100644 docs/UML/html/index.html/contents/ccea5c2c930715d716c38e5e947a8f77.html create mode 100644 docs/UML/html/index.html/contents/ccf6f009d2d2ef8438e9045b3088e422.html create mode 100644 docs/UML/html/index.html/contents/cd80d9656ad272b13f15aa0913adb71e.html create mode 100644 docs/UML/html/index.html/contents/cda597287a2f782d0770dcbdb962db48.html create mode 100644 docs/UML/html/index.html/contents/cdaaebc24154dd62c3f3ee46ce42f2d4.html create mode 100644 docs/UML/html/index.html/contents/cdb3215a047c7da7484513a5984d6c3f.html create mode 100644 docs/UML/html/index.html/contents/ce00633d20d13101665081946ee21c7d.html create mode 100644 docs/UML/html/index.html/contents/ce2761853894b06a1ae13a01e415e316.html create mode 100644 docs/UML/html/index.html/contents/ce3572907df41db28373d69b0b85c8e4.html create mode 100644 docs/UML/html/index.html/contents/ce3ec0da50d29d95544d45e9db1cf9ac.html create mode 100644 docs/UML/html/index.html/contents/ce628460f9f546fe1b5b0e24ef1b2f45.html create mode 100644 docs/UML/html/index.html/contents/ce7f7330ef6e96b536db28742f96d497.html create mode 100644 docs/UML/html/index.html/contents/ce9f1d2d8b56223ff3ed921ce087eed4.html create mode 100644 docs/UML/html/index.html/contents/cf11361424551336e643636cafe9aeb7.html create mode 100644 docs/UML/html/index.html/contents/cf1c85ff33cb19a20ff54b9fdee103cf.html create mode 100644 docs/UML/html/index.html/contents/cf224e15ffbed64b2d13ed36eb2bd7cf.html create mode 100644 docs/UML/html/index.html/contents/cf3015eab8fcc2ad67f3de9ea81b5d8c.html create mode 100644 docs/UML/html/index.html/contents/cf3b088a6922b92bd862ccc86742b5f6.html create mode 100644 docs/UML/html/index.html/contents/cf5edefcb7cf4c2e88c37c0a4ae93608.html create mode 100644 docs/UML/html/index.html/contents/cf627e470efc6ab3f0fad558568613bf.html create mode 100644 docs/UML/html/index.html/contents/cf9c8b720f3815adeccaf3ef6e48c6c4.html create mode 100644 docs/UML/html/index.html/contents/cfac916d4cdbd8d5ca90311aa44ac946.html create mode 100644 docs/UML/html/index.html/contents/cfb8aa2a53d15908a2301026688c2b03.html create mode 100644 docs/UML/html/index.html/contents/cfbe0690a7edbb8a9d507aed1dee6699.html create mode 100644 docs/UML/html/index.html/contents/cfc0d297e9236e12e6ccb505c1be8483.html create mode 100644 docs/UML/html/index.html/contents/d0054c8e8bcf61a97209f243ba46ad8c.html create mode 100644 docs/UML/html/index.html/contents/d00e0ed8adcc761b2d9402ed19c0cb11.html create mode 100644 docs/UML/html/index.html/contents/d017c30cbe79c225a2cea6544214780e.html create mode 100644 docs/UML/html/index.html/contents/d04cf73597dd0fef43263d8bbcfbe770.html create mode 100644 docs/UML/html/index.html/contents/d0605cc04fc6683a3f49bdd5292e4eaf.html create mode 100644 docs/UML/html/index.html/contents/d09bcc91cafec33f558f5dcb199e7942.html create mode 100644 docs/UML/html/index.html/contents/d0a69d1dc59a0db4ec018956c9559c42.html create mode 100644 docs/UML/html/index.html/contents/d0c8f41ccb3a45e6d849869ec9fb35ea.html create mode 100644 docs/UML/html/index.html/contents/d0cbdf91c83998be55b450c2358def67.html create mode 100644 docs/UML/html/index.html/contents/d0d7020f2fce9a8ed92e50deb6322e09.html create mode 100644 docs/UML/html/index.html/contents/d115533fb619c6d4f5d57667d7c450f4.html create mode 100644 docs/UML/html/index.html/contents/d14ca5bc582872e7edab4a7495afcd2e.html create mode 100644 docs/UML/html/index.html/contents/d15031cb144e4d7cce98ceedb4ca5d68.html create mode 100644 docs/UML/html/index.html/contents/d151f121325ce00a55de3cfa14df0780.html create mode 100644 docs/UML/html/index.html/contents/d178003f7e8fee3d9635eb757e1bffa1.html create mode 100644 docs/UML/html/index.html/contents/d17d20c49ea8b49688427e3f2da2a5de.html create mode 100644 docs/UML/html/index.html/contents/d183d33afba2ae9a4a9b9376cfe05760.html create mode 100644 docs/UML/html/index.html/contents/d1d7434ba26052cdfe8d603b718f8118.html create mode 100644 docs/UML/html/index.html/contents/d1efd6a86d569d79a5ddb491b532a3fc.html create mode 100644 docs/UML/html/index.html/contents/d2078ae1c297d4621b8ca72e98967e8a.html create mode 100644 docs/UML/html/index.html/contents/d2324646b8d4f70f00244ae52ea88932.html create mode 100644 docs/UML/html/index.html/contents/d236ce1626e24333166afd3ca804cf77.html create mode 100644 docs/UML/html/index.html/contents/d238049eca761991041d2cae9b883cb7.html create mode 100644 docs/UML/html/index.html/contents/d23c45bc39f83d8ee7944f16e1fa22d9.html create mode 100644 docs/UML/html/index.html/contents/d280b3accfb22e906c313f5e8503cbdf.html create mode 100644 docs/UML/html/index.html/contents/d284b8928cb2f9451b498d31ae0d5c4a.html create mode 100644 docs/UML/html/index.html/contents/d2dcc3cc36be3be2040c26f9bb7947b7.html create mode 100644 docs/UML/html/index.html/contents/d334f298a53420077a037f8e03761d51.html create mode 100644 docs/UML/html/index.html/contents/d3417a981ce85d9c08f25626bb3782b4.html create mode 100644 docs/UML/html/index.html/contents/d3546e4b52b8746c9c66e6a901c32e88.html create mode 100644 docs/UML/html/index.html/contents/d35c15f94a5d7008ebbe88cc8b0aaf57.html create mode 100644 docs/UML/html/index.html/contents/d35cee11c86aaa14e57a2b7faade25d3.html create mode 100644 docs/UML/html/index.html/contents/d37aca3acaa72d6e27c74d85a17e669c.html create mode 100644 docs/UML/html/index.html/contents/d3b64a54bb181def446af43cfba80541.html create mode 100644 docs/UML/html/index.html/contents/d41814c715a78492d72035d51c1bd229.html create mode 100644 docs/UML/html/index.html/contents/d456039f1d41dbd5c2491f485a536e10.html create mode 100644 docs/UML/html/index.html/contents/d473e1f5dca164ccf643cfc2437c6eb4.html create mode 100644 docs/UML/html/index.html/contents/d49ec3c7ddec9df8a4c942bd46793899.html create mode 100644 docs/UML/html/index.html/contents/d4b639c2fb349cb8c8d8d0cddaa4bba0.html create mode 100644 docs/UML/html/index.html/contents/d4d2a86881caf75ce4e720d89ff48471.html create mode 100644 docs/UML/html/index.html/contents/d527083c08ae760e504bda551a42737d.html create mode 100644 docs/UML/html/index.html/contents/d55916b858a2614eb0964c57f3f32f38.html create mode 100644 docs/UML/html/index.html/contents/d5dcdd7e20c8659e9a036965cebba72a.html create mode 100644 docs/UML/html/index.html/contents/d5e75bef920c3fc5b6a2ac046e56b545.html create mode 100644 docs/UML/html/index.html/contents/d61f34e757f509c157ac095862111835.html create mode 100644 docs/UML/html/index.html/contents/d69298813eb326db47f8f552e34a8e54.html create mode 100644 docs/UML/html/index.html/contents/d69886cf08aeb80f7b0b30e3b10951cb.html create mode 100644 docs/UML/html/index.html/contents/d69b4ee9493748eaf59e638a090d3ce4.html create mode 100644 docs/UML/html/index.html/contents/d71e0029a76327277af6300bd3e01c6f.html create mode 100644 docs/UML/html/index.html/contents/d746b6c62eaa62747a9e9d6d11174d8a.html create mode 100644 docs/UML/html/index.html/contents/d74b244b9b4d6000fed9110553d30beb.html create mode 100644 docs/UML/html/index.html/contents/d763c438c67cb53c36b92602ad9a6da2.html create mode 100644 docs/UML/html/index.html/contents/d771580bcb891fe90a5416c585b5d732.html create mode 100644 docs/UML/html/index.html/contents/d77ac63d8655c29a0fff134db99a53b9.html create mode 100644 docs/UML/html/index.html/contents/d7a9e9e104b934292f2ace8a568281b9.html create mode 100644 docs/UML/html/index.html/contents/d7cb453ba80af451a8d3124c44b189f2.html create mode 100644 docs/UML/html/index.html/contents/d7f077fc796b79b6f77c4b7709b476d6.html create mode 100644 docs/UML/html/index.html/contents/d822f7a98ef4dfc1dbf683e026fed9bb.html create mode 100644 docs/UML/html/index.html/contents/d82475a27d3866f7f6c3cbb20bb0a26e.html create mode 100644 docs/UML/html/index.html/contents/d8351ca378556a1aebb47d5bf7eeeab8.html create mode 100644 docs/UML/html/index.html/contents/d84ca3e02580c86a106b4d43bc81bf2e.html create mode 100644 docs/UML/html/index.html/contents/d85062dbda19e66a0168bb2eed95d081.html create mode 100644 docs/UML/html/index.html/contents/d862119ed2ae1627e0619f96b87ecf25.html create mode 100644 docs/UML/html/index.html/contents/d8753fb7d9e46ceb76f28743f157d864.html create mode 100644 docs/UML/html/index.html/contents/d87d15f3a50fb712b84ecd8dc40ba54a.html create mode 100644 docs/UML/html/index.html/contents/d883198957fe06e56e66e036e9de7126.html create mode 100644 docs/UML/html/index.html/contents/d8f1180da07f726fbeb713b67ef9a71f.html create mode 100644 docs/UML/html/index.html/contents/d90e6502c6a3eb4ae2e5beeeb7dc3ad5.html create mode 100644 docs/UML/html/index.html/contents/d90f184915bd08fe0d664f96dce227e1.html create mode 100644 docs/UML/html/index.html/contents/d94f60ee90337aa5c63a1ba6a353436f.html create mode 100644 docs/UML/html/index.html/contents/d95939a853affe6c79ab0c3fd7d3a6eb.html create mode 100644 docs/UML/html/index.html/contents/d96ffc6326e55dd11525ed461459db79.html create mode 100644 docs/UML/html/index.html/contents/d9861152cd06322fe71aaf67d7b8bcdc.html create mode 100644 docs/UML/html/index.html/contents/d9ab45df055696bf6be80378edf5fc11.html create mode 100644 docs/UML/html/index.html/contents/d9cffedae01def5563c756215969667f.html create mode 100644 docs/UML/html/index.html/contents/da1dbdf30a8cb08beb856d45aae3a9f6.html create mode 100644 docs/UML/html/index.html/contents/da48df54b1a398256acb4dc2ae58cdfa.html create mode 100644 docs/UML/html/index.html/contents/da7c6876b874fa4cc351a2876422aa24.html create mode 100644 docs/UML/html/index.html/contents/da82c376801d23bd9d9b072d38a6e6b2.html create mode 100644 docs/UML/html/index.html/contents/da8f8a4c027a1e08668bbdd822167f11.html create mode 100644 docs/UML/html/index.html/contents/dab69ce820849c02849061f2acf4ca3e.html create mode 100644 docs/UML/html/index.html/contents/db29bca66759db15e59f895f933cd189.html create mode 100644 docs/UML/html/index.html/contents/db2f092a209cfd59a07c58c629df4133.html create mode 100644 docs/UML/html/index.html/contents/db5d895c72d5b2b8b3f04bab33f4eb3b.html create mode 100644 docs/UML/html/index.html/contents/db7d8a34196e5d65c8c48cc8290bbdc1.html create mode 100644 docs/UML/html/index.html/contents/db894508a2a49402b3fc9af6a38d98e6.html create mode 100644 docs/UML/html/index.html/contents/dba99f7a081e7c618d1726dbfa5ccefe.html create mode 100644 docs/UML/html/index.html/contents/dbb3b9d19591fd630eac2578319f303e.html create mode 100644 docs/UML/html/index.html/contents/dbb8cacd80e67d2a583f3638daf17cb3.html create mode 100644 docs/UML/html/index.html/contents/dbc72ccaa8428640c05bad7c8174ab26.html create mode 100644 docs/UML/html/index.html/contents/dbd4c60dfb4cb81455e00843f89d07e4.html create mode 100644 docs/UML/html/index.html/contents/dc055a80ca3181b36359e70c4d0a5981.html create mode 100644 docs/UML/html/index.html/contents/dc18b7c112f1e5530e7ac575780b673b.html create mode 100644 docs/UML/html/index.html/contents/dc7bdf41db499ac827562d35d8fc0b2d.html create mode 100644 docs/UML/html/index.html/contents/dd1193971eeda7e00d19fcf40250ed5a.html create mode 100644 docs/UML/html/index.html/contents/dd18a31212f1db03667c62728e551b8b.html create mode 100644 docs/UML/html/index.html/contents/dd405c28ba07c162eec1e4d6737874bf.html create mode 100644 docs/UML/html/index.html/contents/dd5dcf69f476d248d6302ea67638e830.html create mode 100644 docs/UML/html/index.html/contents/dde5f7413130a3babbaccbfc2f291e51.html create mode 100644 docs/UML/html/index.html/contents/ddefa909dd5503cf562c442f848c0978.html create mode 100644 docs/UML/html/index.html/contents/ddf6552cb89c349f8788b7ba605fac7c.html create mode 100644 docs/UML/html/index.html/contents/de4230f8f675843f9a3884e299464650.html create mode 100644 docs/UML/html/index.html/contents/de68acec6763ad54251f676e972e36d4.html create mode 100644 docs/UML/html/index.html/contents/de7e5a9eb8cf75d72842132b9b62be38.html create mode 100644 docs/UML/html/index.html/contents/de8fe9993d1649fada596474d168b880.html create mode 100644 docs/UML/html/index.html/contents/deba507ed2e36972f1c1f56dc6cdba14.html create mode 100644 docs/UML/html/index.html/contents/dedc8367f8513528603b7a63e0fdb0c4.html create mode 100644 docs/UML/html/index.html/contents/def061447064690eb783d4b0efa39c3d.html create mode 100644 docs/UML/html/index.html/contents/def6edba48ea1999dad7c235bc33c21b.html create mode 100644 docs/UML/html/index.html/contents/df3eeb8b298f52a6315f35f1e922f199.html create mode 100644 docs/UML/html/index.html/contents/df56e96756846fb26561d102aeae788c.html create mode 100644 docs/UML/html/index.html/contents/df6817e27d1b4d59876eb739917fdaeb.html create mode 100644 docs/UML/html/index.html/contents/df79903d9ee944fd8f1569d978d05007.html create mode 100644 docs/UML/html/index.html/contents/df7d866bec3cbf99119e16f8f2cf4ed7.html create mode 100644 docs/UML/html/index.html/contents/df8f42c9fe5b33fe32fd5e72112547ec.html create mode 100644 docs/UML/html/index.html/contents/dfd66657bb5fa3b02c7a363f83ea5868.html create mode 100644 docs/UML/html/index.html/contents/diagrams.html create mode 100644 docs/UML/html/index.html/contents/e006537f79eb243f21316915a878bb84.html create mode 100644 docs/UML/html/index.html/contents/e01952890b6c6621008fd8e7666ec546.html create mode 100644 docs/UML/html/index.html/contents/e042da357077b30655fc394f51868fe2.html create mode 100644 docs/UML/html/index.html/contents/e10e23a989f548027282cec8e1c78b9e.html create mode 100644 docs/UML/html/index.html/contents/e116e6453030e3270b2088110e307f42.html create mode 100644 docs/UML/html/index.html/contents/e12af3f15fdcf62a93b7209f996d9695.html create mode 100644 docs/UML/html/index.html/contents/e15792f7dc0b43ce23a94d2d015fac08.html create mode 100644 docs/UML/html/index.html/contents/e1b157b4ecc71fbf784ddd37bb397c71.html create mode 100644 docs/UML/html/index.html/contents/e1c985d472242469a922d7c392aa3d83.html create mode 100644 docs/UML/html/index.html/contents/e1edc75cb0e3ebe4bdd32aadec5c278c.html create mode 100644 docs/UML/html/index.html/contents/e1ede8cbef14cf9e04df47940ca9a264.html create mode 100644 docs/UML/html/index.html/contents/e1fa2ee1a2cdc2daec3f2db9e68bfb86.html create mode 100644 docs/UML/html/index.html/contents/e1fc80c85a7f6718c46f2519bec209f0.html create mode 100644 docs/UML/html/index.html/contents/e21e529d498de3cf286368435b4a71de.html create mode 100644 docs/UML/html/index.html/contents/e2312ad9baf250942c292978c35328db.html create mode 100644 docs/UML/html/index.html/contents/e261807a410d9deb91731ff67bb19e1b.html create mode 100644 docs/UML/html/index.html/contents/e27267db3a1a495ed2e61f419e26bf8e.html create mode 100644 docs/UML/html/index.html/contents/e28eba589245cf719a1770a080716952.html create mode 100644 docs/UML/html/index.html/contents/e2aa92fd1a57694801b16ba814ef25d3.html create mode 100644 docs/UML/html/index.html/contents/e2bba231e0334b85dc59fb7407478225.html create mode 100644 docs/UML/html/index.html/contents/e2fdcfc721737e5a436904e4f0be0dd6.html create mode 100644 docs/UML/html/index.html/contents/e30723d95f1f161490ed5af0300eefb6.html create mode 100644 docs/UML/html/index.html/contents/e309fa6ae75dde063a181105ccfbb9a4.html create mode 100644 docs/UML/html/index.html/contents/e3186274302c27b694e78e5bc6701b38.html create mode 100644 docs/UML/html/index.html/contents/e37c64dd3077cac53adada0ad6cb1181.html create mode 100644 docs/UML/html/index.html/contents/e387bba2e1d8b2ffa378bc1c3d904f4d.html create mode 100644 docs/UML/html/index.html/contents/e3a471a68d64bb325c75494a90b6b069.html create mode 100644 docs/UML/html/index.html/contents/e3a9f1ccc48ad66dbc95de140127874d.html create mode 100644 docs/UML/html/index.html/contents/e3c69b236ff2a7774f00f553238d87d0.html create mode 100644 docs/UML/html/index.html/contents/e3d5bf8c0d81cdf33c1ee8fa04330633.html create mode 100644 docs/UML/html/index.html/contents/e3ed1e46da47368acde46f719edb027c.html create mode 100644 docs/UML/html/index.html/contents/e3f5b4dd2c618bdded9c180d4ce9aa27.html create mode 100644 docs/UML/html/index.html/contents/e4086c6b2b6618c3b6258bbae5b43b88.html create mode 100644 docs/UML/html/index.html/contents/e41ef935d2ec35de411b531886c08f16.html create mode 100644 docs/UML/html/index.html/contents/e4439a17ba3afe2152477851bde5e315.html create mode 100644 docs/UML/html/index.html/contents/e44e797f9a5d0887b36a19249dfff8ef.html create mode 100644 docs/UML/html/index.html/contents/e49076f6419d4546ca5ba18ae31b327e.html create mode 100644 docs/UML/html/index.html/contents/e49f2cc316faf16f05f056fe2c782758.html create mode 100644 docs/UML/html/index.html/contents/e4add66939453e23855b5723ff0ff7c3.html create mode 100644 docs/UML/html/index.html/contents/e4b200454a88116c309869951de22456.html create mode 100644 docs/UML/html/index.html/contents/e4c2f220cdbf1dd3a66598dd9a671b2f.html create mode 100644 docs/UML/html/index.html/contents/e4d6d1344629e5ae1390ac71167bd91b.html create mode 100644 docs/UML/html/index.html/contents/e4e295495f21f867b802143cba096780.html create mode 100644 docs/UML/html/index.html/contents/e4e2e3c8e4a78b193f59b67b95043218.html create mode 100644 docs/UML/html/index.html/contents/e4f39c9c5484a5a7a7109a613a85224e.html create mode 100644 docs/UML/html/index.html/contents/e554764ada9f1c0326b01f4dd8e05903.html create mode 100644 docs/UML/html/index.html/contents/e585b0204acfc58a0aad79179b71a0c9.html create mode 100644 docs/UML/html/index.html/contents/e5b420d80b26881eb5a042693c1adaf6.html create mode 100644 docs/UML/html/index.html/contents/e5bb5521771e4133efc8d09b59375227.html create mode 100644 docs/UML/html/index.html/contents/e5ce0d6a1b01058f2cfc250b533d4a8e.html create mode 100644 docs/UML/html/index.html/contents/e5f84daafa3d23ac2cc400003da5251a.html create mode 100644 docs/UML/html/index.html/contents/e5f8d3a6116accc064390b42912a7679.html create mode 100644 docs/UML/html/index.html/contents/e66d66b576b2338946d6878aaa1ed5e4.html create mode 100644 docs/UML/html/index.html/contents/e678844f578a25aba9e783d6f1dcc406.html create mode 100644 docs/UML/html/index.html/contents/e6a8308d04e19c55da47a90ef68dd69d.html create mode 100644 docs/UML/html/index.html/contents/e6afa79c94bc168ad59b3bfaf32605e1.html create mode 100644 docs/UML/html/index.html/contents/e6e808590810f7d3a55921eb62e752b0.html create mode 100644 docs/UML/html/index.html/contents/e70be99c4e1669d4e7bed6e61594c2fb.html create mode 100644 docs/UML/html/index.html/contents/e72bda8507d41170081ae47ba1a1a5ce.html create mode 100644 docs/UML/html/index.html/contents/e73e958cf63128bd681aa8a115db8439.html create mode 100644 docs/UML/html/index.html/contents/e7434c1f4b9a7b75418eb3a94e696561.html create mode 100644 docs/UML/html/index.html/contents/e75ce066c2ae384d22b5e553daf23a92.html create mode 100644 docs/UML/html/index.html/contents/e75e8e371548d24370e311c8971d000c.html create mode 100644 docs/UML/html/index.html/contents/e793b24340b537c6575041606eddd3c8.html create mode 100644 docs/UML/html/index.html/contents/e79aa2d1967e962c36257446b229bbd9.html create mode 100644 docs/UML/html/index.html/contents/e7acff20a33dd0ccbe4dd717bad73b10.html create mode 100644 docs/UML/html/index.html/contents/e7d6066343819ac598675113b7c4bf5c.html create mode 100644 docs/UML/html/index.html/contents/e7ea0ec96a0ccfc55c23614daa74141d.html create mode 100644 docs/UML/html/index.html/contents/e81f4bba713c84c716cd87005472d338.html create mode 100644 docs/UML/html/index.html/contents/e821f8d2074f00892c8d6c2e09a5113f.html create mode 100644 docs/UML/html/index.html/contents/e832379fc15d1c95581c539ca1ee0f85.html create mode 100644 docs/UML/html/index.html/contents/e83fad21437fb592a7e321849357c3f7.html create mode 100644 docs/UML/html/index.html/contents/e88ff30c37f3c5aec211b339bf6bbb17.html create mode 100644 docs/UML/html/index.html/contents/e8ade9bed41d4855832a475565f12fc3.html create mode 100644 docs/UML/html/index.html/contents/e8b8016efc61981fe505662828424655.html create mode 100644 docs/UML/html/index.html/contents/e8bcfb915ebb9fd4ecf3ee8b0a9fa340.html create mode 100644 docs/UML/html/index.html/contents/e8d97b2b3dd0be7ae3df0ab8993c67e2.html create mode 100644 docs/UML/html/index.html/contents/e8e1a4ede6ae38982b0d0a729d7e0fb0.html create mode 100644 docs/UML/html/index.html/contents/e8fa4d95e76893b117bcc6f54753011c.html create mode 100644 docs/UML/html/index.html/contents/e92a84ba4f083924de5481b970693c8f.html create mode 100644 docs/UML/html/index.html/contents/e9580b8113a26ecb061f19196f3bfa9f.html create mode 100644 docs/UML/html/index.html/contents/e958b19ff867aa0af087c768a56d1b7c.html create mode 100644 docs/UML/html/index.html/contents/e96ee8dbbd1e706203bc1f940a9cdc89.html create mode 100644 docs/UML/html/index.html/contents/e97cf90a75a54edb9acb0ef8b1611f2d.html create mode 100644 docs/UML/html/index.html/contents/e9f5fca281d9bc03348e2659e50d7169.html create mode 100644 docs/UML/html/index.html/contents/ea087b89af05225e59d0a4f985ac8a71.html create mode 100644 docs/UML/html/index.html/contents/ea27910830d95f83a6a97fc95548c53e.html create mode 100644 docs/UML/html/index.html/contents/ea371ee6d7f914aee3a2f4f85494e3b5.html create mode 100644 docs/UML/html/index.html/contents/ea53aa60ea20269debb3c46d179577cf.html create mode 100644 docs/UML/html/index.html/contents/ea6fc2b9f029d3e1c5530dd0b981e027.html create mode 100644 docs/UML/html/index.html/contents/eacfb6a33a8283d2400895d6a9a45bc8.html create mode 100644 docs/UML/html/index.html/contents/ead14820ee094153abd1c0d0f3448176.html create mode 100644 docs/UML/html/index.html/contents/eae76c7d75403eda82c28e59a464335a.html create mode 100644 docs/UML/html/index.html/contents/eb08f76bd6462533a4c9833c2791e5b9.html create mode 100644 docs/UML/html/index.html/contents/eb21e3642e435b24c6ecc1c4055a1425.html create mode 100644 docs/UML/html/index.html/contents/eb4115159c79a0701a3de3dec0f6e6b1.html create mode 100644 docs/UML/html/index.html/contents/eb47f06a2a7886db7495df0af3602b86.html create mode 100644 docs/UML/html/index.html/contents/eb6035c8e3dcfd087fa85060ca8474ed.html create mode 100644 docs/UML/html/index.html/contents/eb7d06a8da42f5cfb53f2d3753c421d7.html create mode 100644 docs/UML/html/index.html/contents/eb9892eb245c9b90f27dc51342091cb9.html create mode 100644 docs/UML/html/index.html/contents/ebd22773cb45d93b8ed3ac0dcf3562c0.html create mode 100644 docs/UML/html/index.html/contents/ebd2bad74d7ed689e916dc8c9639f228.html create mode 100644 docs/UML/html/index.html/contents/ec5dd1aa0467d2b71b372fce382351f5.html create mode 100644 docs/UML/html/index.html/contents/ec7be544447374584069232bec0e4789.html create mode 100644 docs/UML/html/index.html/contents/ec7d5fd6c983a702d485d20b2c7f27bb.html create mode 100644 docs/UML/html/index.html/contents/ec815d98446493c79ae8b2cbfbe1bfc2.html create mode 100644 docs/UML/html/index.html/contents/ecad55309f358d5bc502dafd11bd38ec.html create mode 100644 docs/UML/html/index.html/contents/ecae0aa772b1fa28910837a0486b75a2.html create mode 100644 docs/UML/html/index.html/contents/ecb8128147e822b81f7d2ef5e97b1fda.html create mode 100644 docs/UML/html/index.html/contents/ed23ab789acfddc9ab95f4010ca641f5.html create mode 100644 docs/UML/html/index.html/contents/ed6e506f8638f7f8be4078d3cdff9f0e.html create mode 100644 docs/UML/html/index.html/contents/ed9fb338d6edd995d4679f50850967eb.html create mode 100644 docs/UML/html/index.html/contents/edb68a9568a5f5e57d0ce3ab3ef4140c.html create mode 100644 docs/UML/html/index.html/contents/edc3c238c7b4a8a03b4d060499a457a5.html create mode 100644 docs/UML/html/index.html/contents/edc9962e658ded1c40e6b5a66e8b2df9.html create mode 100644 docs/UML/html/index.html/contents/ede3cd4af8f09d83d4d92f40293349d2.html create mode 100644 docs/UML/html/index.html/contents/ee3bb57814ddc07fbd64a68cc8720546.html create mode 100644 docs/UML/html/index.html/contents/ee5b06de84f4565807ad164c85679b33.html create mode 100644 docs/UML/html/index.html/contents/ee605a93ba894d1b04ee91a5c6776771.html create mode 100644 docs/UML/html/index.html/contents/ee95e5fdd4c17d9da9172ff35330a2a4.html create mode 100644 docs/UML/html/index.html/contents/ee9ce905c804b4cc7c304b074ee1686b.html create mode 100644 docs/UML/html/index.html/contents/eeb8c21b234fd43e06fb7b2b78f1fbb9.html create mode 100644 docs/UML/html/index.html/contents/eeca09b174ce321d860f438c79e508a8.html create mode 100644 docs/UML/html/index.html/contents/eecdcec6120c7fc4ef299f11cd7a2dc2.html create mode 100644 docs/UML/html/index.html/contents/eeeb39aabf2da47a1cd7c73ba927c517.html create mode 100644 docs/UML/html/index.html/contents/ef41bcbafe1b6c0294d85f57360a0435.html create mode 100644 docs/UML/html/index.html/contents/ef4908c1761a3ff6c0d0dfe8ae5e0036.html create mode 100644 docs/UML/html/index.html/contents/ef4fb1599c7014f193991f9d6a7938f5.html create mode 100644 docs/UML/html/index.html/contents/ef6935f54ab44c4b07b4c755f6af0e48.html create mode 100644 docs/UML/html/index.html/contents/ef6c7c9110ceef73de8bb7906d899b20.html create mode 100644 docs/UML/html/index.html/contents/ef858a3295c894f1b46b37424b4b92cb.html create mode 100644 docs/UML/html/index.html/contents/ef8f3e0c6a50fd5473f6db4d4f63b54a.html create mode 100644 docs/UML/html/index.html/contents/efe77e56b32efbfd469a97b1f80d91e5.html create mode 100644 docs/UML/html/index.html/contents/effce10b5a99b8f070a3614e7fe3ea73.html create mode 100644 docs/UML/html/index.html/contents/element_index.html create mode 100644 docs/UML/html/index.html/contents/f08ceabc3f9d19bd988c92b4552d3a62.html create mode 100644 docs/UML/html/index.html/contents/f08f28ad5b5a5762bde560cbca2a529b.html create mode 100644 docs/UML/html/index.html/contents/f0b812c30823ec6c5ff97be802fbd1aa.html create mode 100644 docs/UML/html/index.html/contents/f0eeef2a5754a526523567126dd07af5.html create mode 100644 docs/UML/html/index.html/contents/f107c27bae48987ee3770fee9b79bd0e.html create mode 100644 docs/UML/html/index.html/contents/f12268629ed46f7a7c8117b7236a20d2.html create mode 100644 docs/UML/html/index.html/contents/f12ac42eebbe93fb75310d4d2778f3cd.html create mode 100644 docs/UML/html/index.html/contents/f18bcc8ab5d0bcd7876ddf821b7c0608.html create mode 100644 docs/UML/html/index.html/contents/f199440c2d1d18db4e139997908990d0.html create mode 100644 docs/UML/html/index.html/contents/f1a5ea73ba5710e9903aa8cad08a389b.html create mode 100644 docs/UML/html/index.html/contents/f1c50e69a5a5577bf17e86dec3347243.html create mode 100644 docs/UML/html/index.html/contents/f1c71df166d864294ba8d4a7201db88a.html create mode 100644 docs/UML/html/index.html/contents/f1cc95be32fc8657fa344bdfd19aa62e.html create mode 100644 docs/UML/html/index.html/contents/f1dffaabd9e26930bf0ec66d2746e373.html create mode 100644 docs/UML/html/index.html/contents/f231e0f413d22d0c06b8a4cc78a770da.html create mode 100644 docs/UML/html/index.html/contents/f23f05ac9a5bf50e0add0d3fee78b743.html create mode 100644 docs/UML/html/index.html/contents/f23f6da539bff7295e18bd343c7c4ac5.html create mode 100644 docs/UML/html/index.html/contents/f2600e75f17963b2cc3da3ed298b9298.html create mode 100644 docs/UML/html/index.html/contents/f26dd8c6a229244746b3c8b74a1fb77d.html create mode 100644 docs/UML/html/index.html/contents/f286ae641ba380f9327f2141e07d7c7c.html create mode 100644 docs/UML/html/index.html/contents/f29e5be6ef26215e5ce9725be69d35cc.html create mode 100644 docs/UML/html/index.html/contents/f2a2fca31a6d7263b8f47fb19e657707.html create mode 100644 docs/UML/html/index.html/contents/f2ab0be29bff266c3011729cab4fe4a4.html create mode 100644 docs/UML/html/index.html/contents/f2c69b87843cac00315b3c348dd27735.html create mode 100644 docs/UML/html/index.html/contents/f2f13dba38aadd8cba5098c87b4e53e6.html create mode 100644 docs/UML/html/index.html/contents/f3071eeae819574a3d8eaa32155c2f2b.html create mode 100644 docs/UML/html/index.html/contents/f3247b8f913376c368d75ce5b5d70cfb.html create mode 100644 docs/UML/html/index.html/contents/f3351ff0cb7f1e6caf947f9ad0013db9.html create mode 100644 docs/UML/html/index.html/contents/f33834ad967a81188b2fb70d0c2b4672.html create mode 100644 docs/UML/html/index.html/contents/f339b04207719812df8ae31233a6f160.html create mode 100644 docs/UML/html/index.html/contents/f35c4acce157624ebae37201b6b2b2d0.html create mode 100644 docs/UML/html/index.html/contents/f370f212b85e2d3f821657fa0a6b370d.html create mode 100644 docs/UML/html/index.html/contents/f39a6bb3cd8442a192e573a5fe625e2d.html create mode 100644 docs/UML/html/index.html/contents/f3ac67b617d4a2b9d8371f65366b16f0.html create mode 100644 docs/UML/html/index.html/contents/f3dd9a5bfe93ecc32c06b23173c2facf.html create mode 100644 docs/UML/html/index.html/contents/f3eeafc76be1c31a500be61f86e0b3d2.html create mode 100644 docs/UML/html/index.html/contents/f3f30ffa588233921a8514fbd97f8c52.html create mode 100644 docs/UML/html/index.html/contents/f404e5b8c71d89b9a74f9b872351ff0d.html create mode 100644 docs/UML/html/index.html/contents/f407456ae508f0fbdc8d0cbf8ae71d6a.html create mode 100644 docs/UML/html/index.html/contents/f40ca628b849dbc728dc07425949362a.html create mode 100644 docs/UML/html/index.html/contents/f44bcac9c73434092be71729befb10f5.html create mode 100644 docs/UML/html/index.html/contents/f44f37f6c694c4f861e4b26bd676149e.html create mode 100644 docs/UML/html/index.html/contents/f45213ac93265086fd539c5fedb5513f.html create mode 100644 docs/UML/html/index.html/contents/f4697c6bb9abf99337a13939af9e2c56.html create mode 100644 docs/UML/html/index.html/contents/f47d6aae34885dfae5ba9440d11dbfd5.html create mode 100644 docs/UML/html/index.html/contents/f48e976a8edbc102b53d01a76ca50414.html create mode 100644 docs/UML/html/index.html/contents/f4c5bbc2a24ad0ce63343911b68c911a.html create mode 100644 docs/UML/html/index.html/contents/f4db861e5abb6fe26e3a5557cc57811a.html create mode 100644 docs/UML/html/index.html/contents/f5063108e1157ebdb86d1ed481e80551.html create mode 100644 docs/UML/html/index.html/contents/f51d3524b226f479ae309488cb1cac6e.html create mode 100644 docs/UML/html/index.html/contents/f54e6be84bef0c13cf655ecb498f0a71.html create mode 100644 docs/UML/html/index.html/contents/f5ebfb935b1f1325943d24f586e7d8e2.html create mode 100644 docs/UML/html/index.html/contents/f5eeaadfc6f413c7f088e5de790998da.html create mode 100644 docs/UML/html/index.html/contents/f620d47cec0d6ae63b2ef09c2c087925.html create mode 100644 docs/UML/html/index.html/contents/f6509cddbc0004ef7d650e238d8ea807.html create mode 100644 docs/UML/html/index.html/contents/f66d68bb315fadabe004e81050b32ffe.html create mode 100644 docs/UML/html/index.html/contents/f66d897fb10b87d83b659b3ee4aebee8.html create mode 100644 docs/UML/html/index.html/contents/f6c06f0451c0185eff13f47ca9fbd685.html create mode 100644 docs/UML/html/index.html/contents/f6f8d116b761eb6f45f8a4b10054066f.html create mode 100644 docs/UML/html/index.html/contents/f727448b83343603aa95f4e25b17cb62.html create mode 100644 docs/UML/html/index.html/contents/f7585cacd4a4e1261530bdc98ceaa3ce.html create mode 100644 docs/UML/html/index.html/contents/f7d0d806e1bb65b3dbdfdc3947593a1e.html create mode 100644 docs/UML/html/index.html/contents/f80f07847e7cf50550a7175ad804a11f.html create mode 100644 docs/UML/html/index.html/contents/f821b72afc0c59329dd76d9eb0aa9780.html create mode 100644 docs/UML/html/index.html/contents/f82c7abc5dd1b204e9cdf88bee519907.html create mode 100644 docs/UML/html/index.html/contents/f869a1a27bb5ff0ac7c4fe1962649b1f.html create mode 100644 docs/UML/html/index.html/contents/f8a9a6b7e8de3c0462f313687457362d.html create mode 100644 docs/UML/html/index.html/contents/f8b3ed068518dbb9819d650ad7557253.html create mode 100644 docs/UML/html/index.html/contents/f8ccec46c3dcad1e435858a0af8976c7.html create mode 100644 docs/UML/html/index.html/contents/f8eaec2b03f6b77a004f24302d2dd0a7.html create mode 100644 docs/UML/html/index.html/contents/f8f56717b60ff7af94924f798ed87585.html create mode 100644 docs/UML/html/index.html/contents/f90a61a955edc9f768e1d4089731ca47.html create mode 100644 docs/UML/html/index.html/contents/f91ae981446fec5a46f97e67a832263f.html create mode 100644 docs/UML/html/index.html/contents/f94b3508b5202f65f22e3cd8ba07b71e.html create mode 100644 docs/UML/html/index.html/contents/f9505b106005f9fbaa2786c26285620a.html create mode 100644 docs/UML/html/index.html/contents/f9655092d3df6e9efdb98c0e59e25ab3.html create mode 100644 docs/UML/html/index.html/contents/f99d5836337957ec3113625565ad1408.html create mode 100644 docs/UML/html/index.html/contents/f9a5407516d45f6cb88583cb8c7c7bb5.html create mode 100644 docs/UML/html/index.html/contents/f9a70dc84a514ab057a51092cab62446.html create mode 100644 docs/UML/html/index.html/contents/f9af5ed5ccf7122e3ad19360ab11594a.html create mode 100644 docs/UML/html/index.html/contents/f9cf7eafa8bc6c04ff803a0732f5d690.html create mode 100644 docs/UML/html/index.html/contents/fa112acd403e7bf636510e5dca788dc7.html create mode 100644 docs/UML/html/index.html/contents/fa16a9cb0005eed1864ae4affea1f006.html create mode 100644 docs/UML/html/index.html/contents/fa3298062baeeef9ca73909a471665aa.html create mode 100644 docs/UML/html/index.html/contents/fa3ff5238c87cd1f12b0513d45dca2d9.html create mode 100644 docs/UML/html/index.html/contents/fa6d4019350568a2f5204db1ea116254.html create mode 100644 docs/UML/html/index.html/contents/fab19b7731ad702f162c5f8092364505.html create mode 100644 docs/UML/html/index.html/contents/fabcd6b271f66277b21b7d07f5215886.html create mode 100644 docs/UML/html/index.html/contents/fac9e874242a4803f2f0824f1cf489f0.html create mode 100644 docs/UML/html/index.html/contents/fad2645b8ec341002a3f764ccbb6dd7b.html create mode 100644 docs/UML/html/index.html/contents/fb1795bc5ed273620e831fadbb36d52c.html create mode 100644 docs/UML/html/index.html/contents/fb324251c97b23cd66798426da9cf6fa.html create mode 100644 docs/UML/html/index.html/contents/fb4849d27706d567093b9c240ec32437.html create mode 100644 docs/UML/html/index.html/contents/fb55985eb50a17ae9eb368a7361fc893.html create mode 100644 docs/UML/html/index.html/contents/fb682d49505ca12f3d314b843b06a5cf.html create mode 100644 docs/UML/html/index.html/contents/fb6851a8aa75cb9004aceff7140bef44.html create mode 100644 docs/UML/html/index.html/contents/fb6b9c75104a85c6ad6334eaac283086.html create mode 100644 docs/UML/html/index.html/contents/fb753459804378d41227f52e20389caf.html create mode 100644 docs/UML/html/index.html/contents/fb75b3ef6262a8efbcfcc6547317fc11.html create mode 100644 docs/UML/html/index.html/contents/fb9623536ada266cbe8603155ed5815f.html create mode 100644 docs/UML/html/index.html/contents/fbb743546681be6be607de9c4f64e103.html create mode 100644 docs/UML/html/index.html/contents/fbbc06d720fb8bc33271ae8ec2b3dbe9.html create mode 100644 docs/UML/html/index.html/contents/fc22a2c7005e8d5bb0db43c666d45678.html create mode 100644 docs/UML/html/index.html/contents/fc6c605c957ea7abf2af14112541af84.html create mode 100644 docs/UML/html/index.html/contents/fc9ad85d9cd8ff2b5ed6f23d4315647a.html create mode 100644 docs/UML/html/index.html/contents/fca5566e62f6c7a91f935e357cc6d229.html create mode 100644 docs/UML/html/index.html/contents/fd07c0cf771c975ca25a3537e94e5746.html create mode 100644 docs/UML/html/index.html/contents/fd1226499a79fbc3b60f327e345ea8db.html create mode 100644 docs/UML/html/index.html/contents/fd1479d5e012c64520a17ef664e76cb1.html create mode 100644 docs/UML/html/index.html/contents/fd2677979c645c0c487eea44a08c1bf6.html create mode 100644 docs/UML/html/index.html/contents/fd42252a2721976eae8877d6db6ee270.html create mode 100644 docs/UML/html/index.html/contents/fd991f0e3dff94b12d14bf40ae91b528.html create mode 100644 docs/UML/html/index.html/contents/fda95614f702e9464569e24415e01767.html create mode 100644 docs/UML/html/index.html/contents/fdbce128eccc980dcfafb009d95b9810.html create mode 100644 docs/UML/html/index.html/contents/fe4a1c018b5421157691c4c4f6bbbc71.html create mode 100644 docs/UML/html/index.html/contents/fe6864275cbdaac04dce72b2f0a9667d.html create mode 100644 docs/UML/html/index.html/contents/fe9c23285d6d72ca450de451a7961540.html create mode 100644 docs/UML/html/index.html/contents/fea83fe9380b4aa4ad52508ef7120f25.html create mode 100644 docs/UML/html/index.html/contents/fea939e5c16cd2a86f2b8b7fdeb7ad23.html create mode 100644 docs/UML/html/index.html/contents/feb073a460de89f9d48a3bdc981a8291.html create mode 100644 docs/UML/html/index.html/contents/fee3afaf28236b11cbfe947c78cbddec.html create mode 100644 docs/UML/html/index.html/contents/ff109526680a4819b3ce61bafd134027.html create mode 100644 docs/UML/html/index.html/contents/ff1804ff185a0999cfdc8dd31ceef08d.html create mode 100644 docs/UML/html/index.html/contents/ff77fff774c3e6bf4968536c4b184bed.html create mode 100644 docs/UML/html/index.html/contents/ff9978e485f7454d227539d1cbd76c79.html create mode 100644 docs/UML/html/index.html/contents/ffaa0e856899de5141e652e5040f097a.html create mode 100644 docs/UML/html/index.html/contents/ffd1fd91d775e51cca95b00f562032a3.html create mode 100644 docs/UML/html/index.html/contents/ffd45aab3da307dd682235b962434758.html create mode 100644 docs/UML/html/index.html/contents/fffc8b91d68dbe40e1d6994dc655b73e.html create mode 100644 docs/UML/html/index.html/contents/navigation.html create mode 100644 docs/UML/html/index.html/diagrams/02524d7a310024538b8bf2b5217a0405.svg create mode 100644 docs/UML/html/index.html/diagrams/02d026fb13af0923877f41f68fb5585e.svg create mode 100644 docs/UML/html/index.html/diagrams/371c300b2fbd983a23941d1c60640e3f.svg create mode 100644 docs/UML/html/index.html/diagrams/3fe24c3491f5d338fe385ac2e199e5a5.svg create mode 100644 docs/UML/html/index.html/diagrams/40a3cc19e818cfc3b0828c8a326d9171.svg create mode 100644 docs/UML/html/index.html/diagrams/4323069cfc9640314abce0f13b6c11a6.svg create mode 100644 docs/UML/html/index.html/diagrams/4892786a2d7e18bd07ec297f95949221.svg create mode 100644 docs/UML/html/index.html/diagrams/880f562184ffc8c074fd88362b766ea1.svg create mode 100644 docs/UML/html/index.html/diagrams/9c77d89de8418c23e57114f6d0c155a3.svg create mode 100644 docs/UML/html/index.html/diagrams/a47184837219aea9ccabc89e35d90216.svg create mode 100644 docs/UML/html/index.html/diagrams/a93138e6eb3c7dabb41c87224a1b973f.svg create mode 100644 docs/UML/html/index.html/diagrams/b0796dd845dfbe0e2c1439b690e59253.svg create mode 100644 docs/UML/html/index.html/diagrams/cb2288495cbd72beb8d6aff88271c27f.svg create mode 100644 docs/UML/html/index.html/diagrams/d284b8928cb2f9451b498d31ae0d5c4a.svg create mode 100644 docs/UML/html/index.html/diagrams/d527083c08ae760e504bda551a42737d.svg create mode 100644 docs/UML/html/index.html/diagrams/d90f184915bd08fe0d664f96dce227e1.svg create mode 100644 docs/UML/html/index.html/diagrams/e387bba2e1d8b2ffa378bc1c3d904f4d.svg create mode 100644 docs/UML/html/index.html/diagrams/e49076f6419d4546ca5ba18ae31b327e.svg create mode 100644 docs/UML/html/index.html/diagrams/e9f5fca281d9bc03348e2659e50d7169.svg create mode 100644 docs/UML/html/index.html/diagrams/ea53aa60ea20269debb3c46d179577cf.svg create mode 100644 docs/UML/html/index.html/diagrams/ee605a93ba894d1b04ee91a5c6776771.svg create mode 100644 docs/UML/html/index.html/index.html create mode 100644 docs/UML/skill_seekers.mdj create mode 100644 docs/UML_ARCHITECTURE.md create mode 100644 docs/UNIFICATION_PLAN.md create mode 100644 docs/VIDEO_GUIDE.md create mode 100644 docs/advanced/custom-workflows.md create mode 100644 docs/advanced/mcp-server.md create mode 100644 docs/advanced/multi-source.md create mode 100644 docs/agents/plans/2026-03-14-epub-input-support.md create mode 100644 docs/agents/research/2026-03-14-epub-input-support-affected-files.md create mode 100644 docs/archive/historical/ARCHITECTURE_VERIFICATION_REPORT.md create mode 100644 docs/archive/historical/DOCUMENTATION_UPDATES_SUMMARY.md create mode 100644 docs/archive/historical/HTTPX_SKILL_GRADING.md create mode 100644 docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md create mode 100644 docs/archive/historical/LOCAL_REPO_TEST_RESULTS.md create mode 100644 docs/archive/historical/SKILL_QUALITY_FIX_PLAN.md create mode 100644 docs/archive/historical/TEST_MCP_IN_CLAUDE_CODE.md create mode 100644 docs/archive/historical/THREE_STREAM_COMPLETION_SUMMARY.md create mode 100644 docs/archive/historical/THREE_STREAM_STATUS_REPORT.md create mode 100644 docs/archive/legacy/QUICKSTART.md create mode 100644 docs/archive/legacy/QUICK_REFERENCE.md create mode 100644 docs/archive/legacy/README.md create mode 100644 docs/archive/legacy/USAGE.md create mode 100644 docs/archive/plans/2025-10-24-active-skills-design.md create mode 100644 docs/archive/plans/2025-10-24-active-skills-phase1.md create mode 100644 docs/archive/research/PDF_EXTRACTOR_POC.md create mode 100644 docs/archive/research/PDF_IMAGE_EXTRACTION.md create mode 100644 docs/archive/research/PDF_PARSING_RESEARCH.md create mode 100644 docs/archive/research/PDF_SYNTAX_DETECTION.md create mode 100644 docs/assets/atlas-cloud-logo.png create mode 100644 docs/assets/logo.png create mode 100644 docs/blog/UNIVERSAL_RAG_PREPROCESSOR.md create mode 100644 docs/case-studies/deepwiki-open.md create mode 100644 docs/features/BOOTSTRAP_SKILL.md create mode 100644 docs/features/BOOTSTRAP_SKILL_TECHNICAL.md create mode 100644 docs/features/ENHANCEMENT.md create mode 100644 docs/features/ENHANCEMENT_MODES.md create mode 100644 docs/features/HOW_TO_GUIDES.md create mode 100644 docs/features/PATTERN_DETECTION.md create mode 100644 docs/features/PDF_ADVANCED_FEATURES.md create mode 100644 docs/features/PDF_CHUNKING.md create mode 100644 docs/features/PDF_MCP_TOOL.md create mode 100644 docs/features/PDF_SCRAPER.md create mode 100644 docs/features/TEST_EXAMPLE_EXTRACTION.md create mode 100644 docs/features/UNIFIED_SCRAPING.md create mode 100644 docs/getting-started/01-installation.md create mode 100644 docs/getting-started/02-quick-start.md create mode 100644 docs/getting-started/03-your-first-skill.md create mode 100644 docs/getting-started/04-next-steps.md create mode 100644 docs/getting-started/05-scan-a-project.md create mode 100644 docs/guides/HTTP_TRANSPORT.md create mode 100644 docs/guides/MCP_SETUP.md create mode 100644 docs/guides/MIGRATION_GUIDE.md create mode 100644 docs/guides/MULTI_AGENT_SETUP.md create mode 100644 docs/guides/SETUP_QUICK_REFERENCE.md create mode 100644 docs/guides/TESTING_GUIDE.md create mode 100644 docs/guides/UPLOAD_GUIDE.md create mode 100644 docs/integrations/CHROMA.md create mode 100644 docs/integrations/CLINE.md create mode 100644 docs/integrations/CONTINUE_DEV.md create mode 100644 docs/integrations/CURSOR.md create mode 100644 docs/integrations/FAISS.md create mode 100644 docs/integrations/GEMINI_INTEGRATION.md create mode 100644 docs/integrations/HAYSTACK.md create mode 100644 docs/integrations/INTEGRATIONS.md create mode 100644 docs/integrations/LANGCHAIN.md create mode 100644 docs/integrations/LLAMA_INDEX.md create mode 100644 docs/integrations/MINIMAX_INTEGRATION.md create mode 100644 docs/integrations/MULTI_LLM_SUPPORT.md create mode 100644 docs/integrations/OPENAI_INTEGRATION.md create mode 100644 docs/integrations/PINECONE.md create mode 100644 docs/integrations/QDRANT.md create mode 100644 docs/integrations/RAG_PIPELINES.md create mode 100644 docs/integrations/WEAVIATE.md create mode 100644 docs/integrations/WINDSURF.md create mode 100644 docs/plans/video/00_VIDEO_SOURCE_OVERVIEW.md create mode 100644 docs/plans/video/01_VIDEO_RESEARCH.md create mode 100644 docs/plans/video/02_VIDEO_DATA_MODELS.md create mode 100644 docs/plans/video/03_VIDEO_PIPELINE.md create mode 100644 docs/plans/video/04_VIDEO_INTEGRATION.md create mode 100644 docs/plans/video/05_VIDEO_OUTPUT.md create mode 100644 docs/plans/video/06_VIDEO_TESTING.md create mode 100644 docs/plans/video/07_VIDEO_DEPENDENCIES.md create mode 100644 docs/reference/AI_SKILL_STANDARDS.md create mode 100644 docs/reference/API_REFERENCE.md create mode 100644 docs/reference/C3_x_Router_Architecture.md create mode 100644 docs/reference/CLAUDE_INTEGRATION.md create mode 100644 docs/reference/CLI_REFERENCE.md create mode 100644 docs/reference/CODE_QUALITY.md create mode 100644 docs/reference/CONFIG_FORMAT.md create mode 100644 docs/reference/ENVIRONMENT_VARIABLES.md create mode 100644 docs/reference/FEATURE_MATRIX.md create mode 100644 docs/reference/GIT_CONFIG_SOURCES.md create mode 100644 docs/reference/LARGE_DOCUMENTATION.md create mode 100644 docs/reference/LLMS_TXT_SUPPORT.md create mode 100644 docs/reference/MCP_REFERENCE.md create mode 100644 docs/reference/SKILL_ARCHITECTURE.md create mode 100644 docs/roadmap/INTELLIGENCE_SYSTEM_ARCHITECTURE.md create mode 100644 docs/roadmap/INTELLIGENCE_SYSTEM_RESEARCH.md create mode 100644 docs/roadmap/README.md create mode 100644 docs/roadmap/SKILL_INTELLIGENCE_SYSTEM.md create mode 100644 docs/strategy/ACTION_PLAN.md create mode 100644 docs/strategy/ARBITRARY_LIMITS_AND_DEAD_CODE_PLAN.md create mode 100644 docs/strategy/DEEPWIKI_ANALYSIS.md create mode 100644 docs/strategy/INTEGRATION_STRATEGY.md create mode 100644 docs/strategy/INTEGRATION_TEMPLATES.md create mode 100644 docs/strategy/KIMI_ANALYSIS_COMPARISON.md create mode 100644 docs/strategy/README.md create mode 100644 docs/strategy/STAGE_1_CORRECTED_IMPLEMENTATION.md create mode 100644 docs/strategy/STAGE_1_IMPLEMENTATION_SUMMARY.md create mode 100644 docs/strategy/STAGE_1_REVIEW_AND_VERIFICATION.md create mode 100644 docs/user-guide/01-core-concepts.md create mode 100644 docs/user-guide/02-scraping.md create mode 100644 docs/user-guide/03-enhancement.md create mode 100644 docs/user-guide/04-packaging.md create mode 100644 docs/user-guide/05-workflows.md create mode 100644 docs/user-guide/06-troubleshooting.md create mode 100644 docs/zh-CN/ARCHITECTURE.md create mode 100644 docs/zh-CN/README.md create mode 100644 docs/zh-CN/advanced/custom-workflows.md create mode 100644 docs/zh-CN/advanced/mcp-server.md create mode 100644 docs/zh-CN/advanced/multi-source.md create mode 100644 docs/zh-CN/getting-started/01-installation.md create mode 100644 docs/zh-CN/getting-started/02-quick-start.md create mode 100644 docs/zh-CN/getting-started/03-your-first-skill.md create mode 100644 docs/zh-CN/getting-started/04-next-steps.md create mode 100644 docs/zh-CN/reference/AI_SKILL_STANDARDS.md create mode 100644 docs/zh-CN/reference/API_REFERENCE.md create mode 100644 docs/zh-CN/reference/C3_x_Router_Architecture.md create mode 100644 docs/zh-CN/reference/CLAUDE_INTEGRATION.md create mode 100644 docs/zh-CN/reference/CLI_REFERENCE.md create mode 100644 docs/zh-CN/reference/CODE_QUALITY.md create mode 100644 docs/zh-CN/reference/CONFIG_FORMAT.md create mode 100644 docs/zh-CN/reference/ENVIRONMENT_VARIABLES.md create mode 100644 docs/zh-CN/reference/FEATURE_MATRIX.md create mode 100644 docs/zh-CN/reference/GIT_CONFIG_SOURCES.md create mode 100644 docs/zh-CN/reference/LARGE_DOCUMENTATION.md create mode 100644 docs/zh-CN/reference/LLMS_TXT_SUPPORT.md create mode 100644 docs/zh-CN/reference/MCP_REFERENCE.md create mode 100644 docs/zh-CN/reference/SKILL_ARCHITECTURE.md create mode 100644 docs/zh-CN/user-guide/01-core-concepts.md create mode 100644 docs/zh-CN/user-guide/02-scraping.md create mode 100644 docs/zh-CN/user-guide/03-enhancement.md create mode 100644 docs/zh-CN/user-guide/04-packaging.md create mode 100644 docs/zh-CN/user-guide/05-workflows.md create mode 100644 docs/zh-CN/user-guide/06-troubleshooting.md create mode 100644 example-mcp-config.json create mode 100644 examples/chroma-example/1_generate_skill.py create mode 100644 examples/chroma-example/2_upload_to_chroma.py create mode 100644 examples/chroma-example/3_query_example.py create mode 100644 examples/chroma-example/README.md create mode 100644 examples/chroma-example/requirements.txt create mode 100644 examples/cline-django-assistant/README.md create mode 100644 examples/cline-django-assistant/generate_clinerules.py create mode 100644 examples/cline-django-assistant/requirements.txt create mode 100644 examples/continue-dev-universal/README.md create mode 100644 examples/continue-dev-universal/context_server.py create mode 100644 examples/continue-dev-universal/quickstart.py create mode 100644 examples/continue-dev-universal/requirements.txt create mode 100644 examples/cursor-react-skill/.cursorrules.example create mode 100644 examples/cursor-react-skill/README.md create mode 100644 examples/cursor-react-skill/example-project/README.md create mode 100644 examples/cursor-react-skill/example-project/package.json create mode 100644 examples/cursor-react-skill/example-project/src/App.tsx create mode 100644 examples/cursor-react-skill/example-project/src/index.tsx create mode 100644 examples/cursor-react-skill/example-project/tsconfig.json create mode 100644 examples/cursor-react-skill/generate_cursorrules.py create mode 100644 examples/cursor-react-skill/requirements.txt create mode 100644 examples/faiss-example/1_generate_skill.py create mode 100644 examples/faiss-example/2_build_faiss_index.py create mode 100644 examples/faiss-example/3_query_example.py create mode 100644 examples/faiss-example/README.md create mode 100644 examples/faiss-example/requirements.txt create mode 100644 examples/haystack-pipeline/README.md create mode 100644 examples/haystack-pipeline/quickstart.py create mode 100644 examples/haystack-pipeline/requirements.txt create mode 100644 examples/http_transport_examples.sh create mode 100644 examples/langchain-rag-pipeline/README.md create mode 100644 examples/langchain-rag-pipeline/quickstart.py create mode 100644 examples/langchain-rag-pipeline/requirements.txt create mode 100644 examples/llama-index-query-engine/README.md create mode 100644 examples/llama-index-query-engine/quickstart.py create mode 100644 examples/llama-index-query-engine/requirements.txt create mode 100644 examples/pinecone-upsert/README.md create mode 100644 examples/pinecone-upsert/quickstart.py create mode 100644 examples/pinecone-upsert/requirements.txt create mode 100644 examples/qdrant-example/1_generate_skill.py create mode 100644 examples/qdrant-example/2_upload_to_qdrant.py create mode 100644 examples/qdrant-example/3_query_example.py create mode 100644 examples/qdrant-example/README.md create mode 100644 examples/qdrant-example/requirements.txt create mode 100644 examples/test_http_server.py create mode 100644 examples/weaviate-example/1_generate_skill.py create mode 100644 examples/weaviate-example/2_upload_to_weaviate.py create mode 100644 examples/weaviate-example/3_query_example.py create mode 100644 examples/weaviate-example/README.md create mode 100644 examples/weaviate-example/requirements.txt create mode 100644 examples/weaviate-example/sample_output/query_results.txt create mode 100644 examples/windsurf-fastapi-context/README.md create mode 100644 examples/windsurf-fastapi-context/generate_windsurfrules.py create mode 100644 examples/windsurf-fastapi-context/requirements.txt create mode 100644 helm/skill-seekers/Chart.yaml create mode 100644 helm/skill-seekers/templates/NOTES.txt create mode 100644 helm/skill-seekers/templates/_helpers.tpl create mode 100644 helm/skill-seekers/templates/chroma-deployment.yaml create mode 100644 helm/skill-seekers/templates/configmap.yaml create mode 100644 helm/skill-seekers/templates/hpa.yaml create mode 100644 helm/skill-seekers/templates/ingress.yaml create mode 100644 helm/skill-seekers/templates/mcp-deployment.yaml create mode 100644 helm/skill-seekers/templates/pvc.yaml create mode 100644 helm/skill-seekers/templates/qdrant-deployment.yaml create mode 100644 helm/skill-seekers/templates/secret.yaml create mode 100644 helm/skill-seekers/templates/service.yaml create mode 100644 helm/skill-seekers/templates/serviceaccount.yaml create mode 100644 helm/skill-seekers/templates/weaviate-deployment.yaml create mode 100644 helm/skill-seekers/values.yaml create mode 100644 mypy.ini create mode 100644 pyproject.toml create mode 100644 pytest.ci.ini create mode 100644 render-mcp.yaml create mode 100644 render.yaml create mode 100644 requirements.txt create mode 100755 scripts/bootstrap_skill.sh create mode 100755 scripts/check_translation_sync.sh create mode 100755 scripts/run_benchmarks.sh create mode 100755 scripts/run_integration_tests.sh create mode 100755 scripts/run_tests_fast.sh create mode 100644 scripts/skill_header.md create mode 100644 scripts/translate_doc.py create mode 100755 setup.sh create mode 100755 setup_mcp.sh create mode 100644 skills/skill-seekers/SKILL.md create mode 100644 src/skill_seekers/__init__.py create mode 100644 src/skill_seekers/_version.py create mode 100644 src/skill_seekers/benchmark/__init__.py create mode 100644 src/skill_seekers/benchmark/framework.py create mode 100644 src/skill_seekers/benchmark/models.py create mode 100644 src/skill_seekers/benchmark/runner.py create mode 100644 src/skill_seekers/cli/__init__.py create mode 100644 src/skill_seekers/cli/adaptors/__init__.py create mode 100644 src/skill_seekers/cli/adaptors/atlas.py create mode 100644 src/skill_seekers/cli/adaptors/base.py create mode 100644 src/skill_seekers/cli/adaptors/chroma.py create mode 100644 src/skill_seekers/cli/adaptors/claude.py create mode 100644 src/skill_seekers/cli/adaptors/deepseek.py create mode 100644 src/skill_seekers/cli/adaptors/faiss_helpers.py create mode 100644 src/skill_seekers/cli/adaptors/fireworks.py create mode 100644 src/skill_seekers/cli/adaptors/gemini.py create mode 100644 src/skill_seekers/cli/adaptors/haystack.py create mode 100644 src/skill_seekers/cli/adaptors/ibm_bob.py create mode 100644 src/skill_seekers/cli/adaptors/kimi.py create mode 100644 src/skill_seekers/cli/adaptors/langchain.py create mode 100644 src/skill_seekers/cli/adaptors/llama_index.py create mode 100644 src/skill_seekers/cli/adaptors/markdown.py create mode 100644 src/skill_seekers/cli/adaptors/minimax.py create mode 100644 src/skill_seekers/cli/adaptors/openai.py create mode 100644 src/skill_seekers/cli/adaptors/openai_compatible.py create mode 100644 src/skill_seekers/cli/adaptors/opencode.py create mode 100644 src/skill_seekers/cli/adaptors/openrouter.py create mode 100644 src/skill_seekers/cli/adaptors/pinecone_adaptor.py create mode 100644 src/skill_seekers/cli/adaptors/qdrant.py create mode 100644 src/skill_seekers/cli/adaptors/qwen.py create mode 100644 src/skill_seekers/cli/adaptors/streaming_adaptor.py create mode 100644 src/skill_seekers/cli/adaptors/together.py create mode 100644 src/skill_seekers/cli/adaptors/weaviate.py create mode 100644 src/skill_seekers/cli/agent_client.py create mode 100644 src/skill_seekers/cli/ai_enhancer.py create mode 100644 src/skill_seekers/cli/api_reference_builder.py create mode 100644 src/skill_seekers/cli/architectural_pattern_detector.py create mode 100644 src/skill_seekers/cli/arguments/__init__.py create mode 100644 src/skill_seekers/cli/arguments/analyze.py create mode 100644 src/skill_seekers/cli/arguments/asciidoc.py create mode 100644 src/skill_seekers/cli/arguments/chat.py create mode 100644 src/skill_seekers/cli/arguments/common.py create mode 100644 src/skill_seekers/cli/arguments/confluence.py create mode 100644 src/skill_seekers/cli/arguments/create.py create mode 100644 src/skill_seekers/cli/arguments/enhance.py create mode 100644 src/skill_seekers/cli/arguments/epub.py create mode 100644 src/skill_seekers/cli/arguments/github.py create mode 100644 src/skill_seekers/cli/arguments/html.py create mode 100644 src/skill_seekers/cli/arguments/jupyter.py create mode 100644 src/skill_seekers/cli/arguments/manpage.py create mode 100644 src/skill_seekers/cli/arguments/notion.py create mode 100644 src/skill_seekers/cli/arguments/openapi.py create mode 100644 src/skill_seekers/cli/arguments/package.py create mode 100644 src/skill_seekers/cli/arguments/pdf.py create mode 100644 src/skill_seekers/cli/arguments/pptx.py create mode 100644 src/skill_seekers/cli/arguments/rss.py create mode 100644 src/skill_seekers/cli/arguments/scrape.py create mode 100644 src/skill_seekers/cli/arguments/sync_config.py create mode 100644 src/skill_seekers/cli/arguments/unified.py create mode 100644 src/skill_seekers/cli/arguments/upload.py create mode 100644 src/skill_seekers/cli/arguments/video.py create mode 100644 src/skill_seekers/cli/arguments/word.py create mode 100644 src/skill_seekers/cli/arguments/workflow.py create mode 100644 src/skill_seekers/cli/asciidoc_scraper.py create mode 100644 src/skill_seekers/cli/benchmark_cli.py create mode 100644 src/skill_seekers/cli/browser_renderer.py create mode 100644 src/skill_seekers/cli/chat_scraper.py create mode 100644 src/skill_seekers/cli/cloud_storage_cli.py create mode 100644 src/skill_seekers/cli/code_analyzer.py create mode 100644 src/skill_seekers/cli/codebase_scraper.py create mode 100644 src/skill_seekers/cli/config_command.py create mode 100644 src/skill_seekers/cli/config_enhancer.py create mode 100644 src/skill_seekers/cli/config_extractor.py create mode 100644 src/skill_seekers/cli/config_fetcher.py create mode 100644 src/skill_seekers/cli/config_manager.py create mode 100644 src/skill_seekers/cli/config_validator.py create mode 100644 src/skill_seekers/cli/conflict_detector.py create mode 100644 src/skill_seekers/cli/confluence_scraper.py create mode 100644 src/skill_seekers/cli/constants.py create mode 100644 src/skill_seekers/cli/create_command.py create mode 100644 src/skill_seekers/cli/defaults.json create mode 100644 src/skill_seekers/cli/defaults.py create mode 100644 src/skill_seekers/cli/dependency_analyzer.py create mode 100644 src/skill_seekers/cli/doc_scraper.py create mode 100644 src/skill_seekers/cli/doctor.py create mode 100644 src/skill_seekers/cli/document_skill_builder.py create mode 100644 src/skill_seekers/cli/embedding_pipeline.py create mode 100644 src/skill_seekers/cli/enhance_command.py create mode 100644 src/skill_seekers/cli/enhance_skill.py create mode 100644 src/skill_seekers/cli/enhance_skill_local.py create mode 100644 src/skill_seekers/cli/enhance_status.py create mode 100644 src/skill_seekers/cli/enhancement_workflow.py create mode 100644 src/skill_seekers/cli/epub_scraper.py create mode 100755 src/skill_seekers/cli/estimate_pages.py create mode 100644 src/skill_seekers/cli/execution_context.py create mode 100644 src/skill_seekers/cli/exit_codes.py create mode 100644 src/skill_seekers/cli/generate_router.py create mode 100644 src/skill_seekers/cli/github_fetcher.py create mode 100644 src/skill_seekers/cli/github_scraper.py create mode 100644 src/skill_seekers/cli/guide_enhancer.py create mode 100644 src/skill_seekers/cli/how_to_guide_builder.py create mode 100644 src/skill_seekers/cli/html_scraper.py create mode 100644 src/skill_seekers/cli/incremental_updater.py create mode 100644 src/skill_seekers/cli/install_agent.py create mode 100644 src/skill_seekers/cli/install_skill.py create mode 100644 src/skill_seekers/cli/jupyter_scraper.py create mode 100644 src/skill_seekers/cli/language_detector.py create mode 100644 src/skill_seekers/cli/llms_txt_detector.py create mode 100644 src/skill_seekers/cli/llms_txt_downloader.py create mode 100644 src/skill_seekers/cli/llms_txt_parser.py create mode 100644 src/skill_seekers/cli/main.py create mode 100644 src/skill_seekers/cli/man_scraper.py create mode 100644 src/skill_seekers/cli/markdown_cleaner.py create mode 100644 src/skill_seekers/cli/merge_sources.py create mode 100644 src/skill_seekers/cli/multilang_support.py create mode 100644 src/skill_seekers/cli/notion_scraper.py create mode 100644 src/skill_seekers/cli/openapi_scraper.py create mode 100644 src/skill_seekers/cli/opencode_skill_splitter.py create mode 100644 src/skill_seekers/cli/package_multi.py create mode 100644 src/skill_seekers/cli/package_skill.py create mode 100644 src/skill_seekers/cli/parallel_batches.py create mode 100644 src/skill_seekers/cli/parsers/__init__.py create mode 100644 src/skill_seekers/cli/parsers/analyze_parser.py create mode 100644 src/skill_seekers/cli/parsers/asciidoc_parser.py create mode 100644 src/skill_seekers/cli/parsers/base.py create mode 100644 src/skill_seekers/cli/parsers/chat_parser.py create mode 100644 src/skill_seekers/cli/parsers/config_parser.py create mode 100644 src/skill_seekers/cli/parsers/confluence_parser.py create mode 100644 src/skill_seekers/cli/parsers/create_parser.py create mode 100644 src/skill_seekers/cli/parsers/doctor_parser.py create mode 100644 src/skill_seekers/cli/parsers/enhance_parser.py create mode 100644 src/skill_seekers/cli/parsers/enhance_status_parser.py create mode 100644 src/skill_seekers/cli/parsers/epub_parser.py create mode 100644 src/skill_seekers/cli/parsers/estimate_parser.py create mode 100644 src/skill_seekers/cli/parsers/extractors/__init__.py create mode 100644 src/skill_seekers/cli/parsers/extractors/base_parser.py create mode 100644 src/skill_seekers/cli/parsers/extractors/formatters.py create mode 100644 src/skill_seekers/cli/parsers/extractors/markdown_parser.py create mode 100644 src/skill_seekers/cli/parsers/extractors/pdf_parser.py create mode 100644 src/skill_seekers/cli/parsers/extractors/quality_scorer.py create mode 100644 src/skill_seekers/cli/parsers/extractors/rst_parser.py create mode 100644 src/skill_seekers/cli/parsers/extractors/unified_structure.py create mode 100644 src/skill_seekers/cli/parsers/github_parser.py create mode 100644 src/skill_seekers/cli/parsers/html_parser.py create mode 100644 src/skill_seekers/cli/parsers/install_agent_parser.py create mode 100644 src/skill_seekers/cli/parsers/install_parser.py create mode 100644 src/skill_seekers/cli/parsers/jupyter_parser.py create mode 100644 src/skill_seekers/cli/parsers/manpage_parser.py create mode 100644 src/skill_seekers/cli/parsers/multilang_parser.py create mode 100644 src/skill_seekers/cli/parsers/notion_parser.py create mode 100644 src/skill_seekers/cli/parsers/openapi_parser.py create mode 100644 src/skill_seekers/cli/parsers/package_parser.py create mode 100644 src/skill_seekers/cli/parsers/pdf_parser.py create mode 100644 src/skill_seekers/cli/parsers/pptx_parser.py create mode 100644 src/skill_seekers/cli/parsers/quality_parser.py create mode 100644 src/skill_seekers/cli/parsers/resume_parser.py create mode 100644 src/skill_seekers/cli/parsers/rss_parser.py create mode 100644 src/skill_seekers/cli/parsers/scan_parser.py create mode 100644 src/skill_seekers/cli/parsers/scrape_parser.py create mode 100644 src/skill_seekers/cli/parsers/stream_parser.py create mode 100644 src/skill_seekers/cli/parsers/sync_config_parser.py create mode 100644 src/skill_seekers/cli/parsers/test_examples_parser.py create mode 100644 src/skill_seekers/cli/parsers/unified_parser.py create mode 100644 src/skill_seekers/cli/parsers/update_parser.py create mode 100644 src/skill_seekers/cli/parsers/upload_parser.py create mode 100644 src/skill_seekers/cli/parsers/video_parser.py create mode 100644 src/skill_seekers/cli/parsers/word_parser.py create mode 100644 src/skill_seekers/cli/parsers/workflows_parser.py create mode 100644 src/skill_seekers/cli/pattern_recognizer.py create mode 100755 src/skill_seekers/cli/pdf_extractor_poc.py create mode 100644 src/skill_seekers/cli/pdf_scraper.py create mode 100644 src/skill_seekers/cli/pptx_scraper.py create mode 100644 src/skill_seekers/cli/presets/__init__.py create mode 100644 src/skill_seekers/cli/presets/analyze_presets.py create mode 100644 src/skill_seekers/cli/presets/github_presets.py create mode 100644 src/skill_seekers/cli/presets/manager.py create mode 100644 src/skill_seekers/cli/presets/scrape_presets.py create mode 100644 src/skill_seekers/cli/quality_checker.py create mode 100644 src/skill_seekers/cli/quality_metrics.py create mode 100644 src/skill_seekers/cli/rag_chunker.py create mode 100644 src/skill_seekers/cli/rate_limit_handler.py create mode 100644 src/skill_seekers/cli/resume_command.py create mode 100644 src/skill_seekers/cli/rss_scraper.py create mode 100755 src/skill_seekers/cli/run_tests.py create mode 100644 src/skill_seekers/cli/scan_command.py create mode 100644 src/skill_seekers/cli/scraper_utils.py create mode 100644 src/skill_seekers/cli/setup_wizard.py create mode 100644 src/skill_seekers/cli/signal_collectors.py create mode 100644 src/skill_seekers/cli/signal_flow_analyzer.py create mode 100644 src/skill_seekers/cli/skill_converter.py create mode 100644 src/skill_seekers/cli/source_detector.py create mode 100644 src/skill_seekers/cli/split_config.py create mode 100644 src/skill_seekers/cli/storage/__init__.py create mode 100644 src/skill_seekers/cli/storage/azure_storage.py create mode 100644 src/skill_seekers/cli/storage/base_storage.py create mode 100644 src/skill_seekers/cli/storage/gcs_storage.py create mode 100644 src/skill_seekers/cli/storage/s3_storage.py create mode 100644 src/skill_seekers/cli/streaming_ingest.py create mode 100644 src/skill_seekers/cli/swift_patterns.py create mode 100644 src/skill_seekers/cli/sync_cli.py create mode 100644 src/skill_seekers/cli/sync_config.py create mode 100644 src/skill_seekers/cli/test_example_extractor.py create mode 100644 src/skill_seekers/cli/test_unified_simple.py create mode 100644 src/skill_seekers/cli/unified_codebase_analyzer.py create mode 100644 src/skill_seekers/cli/unified_enhancer.py create mode 100644 src/skill_seekers/cli/unified_scraper.py create mode 100644 src/skill_seekers/cli/unified_skill_builder.py create mode 100755 src/skill_seekers/cli/upload_skill.py create mode 100755 src/skill_seekers/cli/utils.py create mode 100644 src/skill_seekers/cli/video_metadata.py create mode 100644 src/skill_seekers/cli/video_models.py create mode 100644 src/skill_seekers/cli/video_scraper.py create mode 100644 src/skill_seekers/cli/video_segmenter.py create mode 100644 src/skill_seekers/cli/video_setup.py create mode 100644 src/skill_seekers/cli/video_transcript.py create mode 100644 src/skill_seekers/cli/video_visual.py create mode 100644 src/skill_seekers/cli/word_scraper.py create mode 100644 src/skill_seekers/cli/workflow_runner.py create mode 100644 src/skill_seekers/cli/workflows_command.py create mode 100644 src/skill_seekers/embedding/__init__.py create mode 100644 src/skill_seekers/embedding/cache.py create mode 100644 src/skill_seekers/embedding/generator.py create mode 100644 src/skill_seekers/embedding/models.py create mode 100644 src/skill_seekers/embedding/server.py create mode 100644 src/skill_seekers/mcp/README.md create mode 100644 src/skill_seekers/mcp/__init__.py create mode 100644 src/skill_seekers/mcp/agent_detector.py create mode 100644 src/skill_seekers/mcp/config_publisher.py create mode 100644 src/skill_seekers/mcp/git_repo.py create mode 100644 src/skill_seekers/mcp/marketplace_manager.py create mode 100644 src/skill_seekers/mcp/marketplace_publisher.py create mode 100644 src/skill_seekers/mcp/requirements.txt create mode 100644 src/skill_seekers/mcp/server.py create mode 100644 src/skill_seekers/mcp/server_fastmcp.py create mode 100644 src/skill_seekers/mcp/server_legacy.py create mode 100644 src/skill_seekers/mcp/source_manager.py create mode 100644 src/skill_seekers/mcp/tools/__init__.py create mode 100644 src/skill_seekers/mcp/tools/_common.py create mode 100644 src/skill_seekers/mcp/tools/config_tools.py create mode 100644 src/skill_seekers/mcp/tools/marketplace_tools.py create mode 100644 src/skill_seekers/mcp/tools/packaging_tools.py create mode 100644 src/skill_seekers/mcp/tools/scraping_tools.py create mode 100644 src/skill_seekers/mcp/tools/source_tools.py create mode 100644 src/skill_seekers/mcp/tools/splitting_tools.py create mode 100644 src/skill_seekers/mcp/tools/subprocess_utils.py create mode 100644 src/skill_seekers/mcp/tools/sync_config_tools.py create mode 100644 src/skill_seekers/mcp/tools/vector_db_tools.py create mode 100644 src/skill_seekers/mcp/tools/workflow_tools.py create mode 100644 src/skill_seekers/py.typed create mode 100644 src/skill_seekers/services/__init__.py create mode 100644 src/skill_seekers/services/config_publisher.py create mode 100644 src/skill_seekers/services/git_repo.py create mode 100644 src/skill_seekers/services/marketplace_manager.py create mode 100644 src/skill_seekers/services/marketplace_publisher.py create mode 100644 src/skill_seekers/services/source_manager.py create mode 100644 src/skill_seekers/sync/__init__.py create mode 100644 src/skill_seekers/sync/detector.py create mode 100644 src/skill_seekers/sync/models.py create mode 100644 src/skill_seekers/sync/monitor.py create mode 100644 src/skill_seekers/sync/notifier.py create mode 100644 src/skill_seekers/workflows/__init__.py create mode 100644 src/skill_seekers/workflows/accessibility-a11y.yaml create mode 100644 src/skill_seekers/workflows/advanced-patterns.yaml create mode 100644 src/skill_seekers/workflows/ai-assistant-internals.yaml create mode 100644 src/skill_seekers/workflows/api-documentation.yaml create mode 100644 src/skill_seekers/workflows/api-evolution.yaml create mode 100644 src/skill_seekers/workflows/api-gateway.yaml create mode 100644 src/skill_seekers/workflows/architecture-comprehensive.yaml create mode 100644 src/skill_seekers/workflows/auth-strategies.yaml create mode 100644 src/skill_seekers/workflows/aws-services.yaml create mode 100644 src/skill_seekers/workflows/background-jobs.yaml create mode 100644 src/skill_seekers/workflows/backup-disaster-recovery.yaml create mode 100644 src/skill_seekers/workflows/build-tools.yaml create mode 100644 src/skill_seekers/workflows/caching-strategies.yaml create mode 100644 src/skill_seekers/workflows/cli-tooling.yaml create mode 100644 src/skill_seekers/workflows/comparison-matrix.yaml create mode 100644 src/skill_seekers/workflows/complex-merge.yaml create mode 100644 src/skill_seekers/workflows/compliance-gdpr.yaml create mode 100644 src/skill_seekers/workflows/component-library.yaml create mode 100644 src/skill_seekers/workflows/computer-vision.yaml create mode 100644 src/skill_seekers/workflows/contribution-guide.yaml create mode 100644 src/skill_seekers/workflows/data-validation.yaml create mode 100644 src/skill_seekers/workflows/database-schema.yaml create mode 100644 src/skill_seekers/workflows/deep-linking.yaml create mode 100644 src/skill_seekers/workflows/default.yaml create mode 100644 src/skill_seekers/workflows/design-system.yaml create mode 100644 src/skill_seekers/workflows/devops-deployment.yaml create mode 100644 src/skill_seekers/workflows/encryption-guide.yaml create mode 100644 src/skill_seekers/workflows/event-driven.yaml create mode 100644 src/skill_seekers/workflows/feature-engineering.yaml create mode 100644 src/skill_seekers/workflows/forms-validation.yaml create mode 100644 src/skill_seekers/workflows/graphql-schema.yaml create mode 100644 src/skill_seekers/workflows/grpc-services.yaml create mode 100644 src/skill_seekers/workflows/iam-identity.yaml create mode 100644 src/skill_seekers/workflows/kubernetes-deployment.yaml create mode 100644 src/skill_seekers/workflows/localization-i18n.yaml create mode 100644 src/skill_seekers/workflows/message-queues.yaml create mode 100644 src/skill_seekers/workflows/microservices-patterns.yaml create mode 100644 src/skill_seekers/workflows/migration-guide.yaml create mode 100644 src/skill_seekers/workflows/minimal.yaml create mode 100644 src/skill_seekers/workflows/mlops-pipeline.yaml create mode 100644 src/skill_seekers/workflows/model-deployment.yaml create mode 100644 src/skill_seekers/workflows/observability-stack.yaml create mode 100644 src/skill_seekers/workflows/offline-first.yaml create mode 100644 src/skill_seekers/workflows/onboarding-beginner.yaml create mode 100644 src/skill_seekers/workflows/performance-optimization.yaml create mode 100644 src/skill_seekers/workflows/platform-specific.yaml create mode 100644 src/skill_seekers/workflows/prompt-injection-check.yaml create mode 100644 src/skill_seekers/workflows/push-notifications.yaml create mode 100644 src/skill_seekers/workflows/pwa-checklist.yaml create mode 100644 src/skill_seekers/workflows/rate-limiting.yaml create mode 100644 src/skill_seekers/workflows/responsive-design.yaml create mode 100644 src/skill_seekers/workflows/rest-api-design.yaml create mode 100644 src/skill_seekers/workflows/sdk-integration.yaml create mode 100644 src/skill_seekers/workflows/secrets-management.yaml create mode 100644 src/skill_seekers/workflows/security-focus.yaml create mode 100644 src/skill_seekers/workflows/serverless-architecture.yaml create mode 100644 src/skill_seekers/workflows/ssr-guide.yaml create mode 100644 src/skill_seekers/workflows/state-management.yaml create mode 100644 src/skill_seekers/workflows/stream-processing.yaml create mode 100644 src/skill_seekers/workflows/terraform-guide.yaml create mode 100644 src/skill_seekers/workflows/testing-focus.yaml create mode 100644 src/skill_seekers/workflows/testing-frontend.yaml create mode 100644 src/skill_seekers/workflows/troubleshooting-guide.yaml create mode 100644 src/skill_seekers/workflows/unity-game-dev.yaml create mode 100644 src/skill_seekers/workflows/vector-databases.yaml create mode 100644 src/skill_seekers/workflows/video-tutorial.yaml create mode 100644 src/skill_seekers/workflows/webhook-guide.yaml create mode 100644 src/skill_seekers/workflows/websockets-realtime.yaml create mode 100644 templates/github-actions/update-skills.yml create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/docker-compose.test.yml create mode 100644 tests/fixtures/example_conflicts.json create mode 100644 tests/fixtures/generate_fixtures.py create mode 100644 tests/fixtures/synthetic/document.docx create mode 100644 tests/fixtures/synthetic/document.epub create mode 100644 tests/fixtures/synthetic/document.pdf create mode 100644 tests/golden/phase2/chat/SKILL.md create mode 100644 tests/golden/phase2/chat/references/engineering_s1-s2.md create mode 100644 tests/golden/phase2/chat/references/index.md create mode 100644 tests/golden/phase2/chat/references/random_s3-s3.md create mode 100644 tests/golden/phase2/chat_empty/SKILL.md create mode 100644 tests/golden/phase2/chat_empty/references/index.md create mode 100644 tests/golden/phase2/chat_empty/references/section_01.md create mode 100644 tests/golden/phase2/chat_single/SKILL.md create mode 100644 tests/golden/phase2/chat_single/references/index.md create mode 100644 tests/golden/phase2/chat_single/references/main.md create mode 100644 tests/golden/phase2/chat_topics/SKILL.md create mode 100644 tests/golden/phase2/chat_topics/references/general_s3-s3.md create mode 100644 tests/golden/phase2/chat_topics/references/index.md create mode 100644 tests/golden/phase2/chat_topics/references/setup_s2-s2.md create mode 100644 tests/golden/phase2/chat_topics/references/troubleshooting_s1-s1.md create mode 100644 tests/golden/phase2/epub/SKILL.md create mode 100644 tests/golden/phase2/epub/assets/section_1_img_0.png create mode 100644 tests/golden/phase2/epub/references/handbook.md create mode 100644 tests/golden/phase2/epub/references/index.md create mode 100644 tests/golden/phase2/epub_kw/SKILL.md create mode 100644 tests/golden/phase2/epub_kw/assets/section_1_img_0.png create mode 100644 tests/golden/phase2/epub_kw/references/index.md create mode 100644 tests/golden/phase2/epub_kw/references/section_s1-s1.md create mode 100644 tests/golden/phase2/epub_kw/references/section_s2-s2.md create mode 100644 tests/golden/phase2/epub_kw/references/section_s3-s3.md create mode 100644 tests/golden/phase2/html/SKILL.md create mode 100644 tests/golden/phase2/html/references/index.md create mode 100644 tests/golden/phase2/html/references/page.md create mode 100644 tests/golden/phase2/html_kw/SKILL.md create mode 100644 tests/golden/phase2/html_kw/references/index.md create mode 100644 tests/golden/phase2/html_kw/references/section_s1-s1.md create mode 100644 tests/golden/phase2/html_kw/references/section_s2-s2.md create mode 100644 tests/golden/phase2/html_kw/references/section_s3-s4.md create mode 100644 tests/golden/phase2/html_multi/SKILL.md create mode 100644 tests/golden/phase2/html_multi/references/golden_html_multi_s1-s2.md create mode 100644 tests/golden/phase2/html_multi/references/golden_html_multi_s3-s4.md create mode 100644 tests/golden/phase2/html_multi/references/index.md create mode 100644 tests/golden/phase2/jupyter/SKILL.md create mode 100644 tests/golden/phase2/jupyter/references/analysis.md create mode 100644 tests/golden/phase2/jupyter/references/index.md create mode 100644 tests/golden/phase2/jupyter_dir/SKILL.md create mode 100644 tests/golden/phase2/jupyter_dir/references/index.md create mode 100644 tests/golden/phase2/jupyter_dir/references/section_s1-s1.md create mode 100644 tests/golden/phase2/jupyter_dir/references/section_s2-s2.md create mode 100644 tests/golden/phase2/jupyter_dir/references/section_s3-s4.md create mode 100644 tests/golden/phase2/jupyter_dir/references/section_s5-s5.md create mode 100644 tests/golden/phase2/jupyter_kw/SKILL.md create mode 100644 tests/golden/phase2/jupyter_kw/references/index.md create mode 100644 tests/golden/phase2/jupyter_kw/references/section_04.md create mode 100644 tests/golden/phase2/jupyter_kw/references/section_s1-s1.md create mode 100644 tests/golden/phase2/jupyter_kw/references/section_s2-s2.md create mode 100644 tests/golden/phase2/jupyter_kw/references/section_s3-s4.md create mode 100644 tests/golden/phase2/jupyter_kw/references/section_s5-s5.md create mode 100644 tests/golden/phase2/jupyter_topics/SKILL.md create mode 100644 tests/golden/phase2/jupyter_topics/references/index.md create mode 100644 tests/golden/phase2/jupyter_topics/references/section_s1-s1.md create mode 100644 tests/golden/phase2/jupyter_topics/references/section_s2-s2.md create mode 100644 tests/golden/phase2/jupyter_topics/references/section_s3-s4.md create mode 100644 tests/golden/phase2/jupyter_topics/references/section_s5-s5.md create mode 100644 tests/golden/phase2/man/SKILL.md create mode 100644 tests/golden/phase2/man/references/curl_02.md create mode 100644 tests/golden/phase2/man/references/git_01.md create mode 100644 tests/golden/phase2/man/references/index.md create mode 100644 tests/golden/phase2/man_kw/SKILL.md create mode 100644 tests/golden/phase2/man_kw/references/index.md create mode 100644 tests/golden/phase2/man_kw/references/other_02.md create mode 100644 tests/golden/phase2/man_kw/references/version_control_01.md create mode 100644 tests/golden/phase2/man_single/SKILL.md create mode 100644 tests/golden/phase2/man_single/references/curl.md create mode 100644 tests/golden/phase2/man_single/references/index.md create mode 100644 tests/golden/phase2/pdf/SKILL.md create mode 100644 tests/golden/phase2/pdf/assets/page_2_img_0.png create mode 100644 tests/golden/phase2/pdf/references/index.md create mode 100644 tests/golden/phase2/pdf/references/manual.md create mode 100644 tests/golden/phase2/pdf_chapters/SKILL.md create mode 100644 tests/golden/phase2/pdf_chapters/assets/page_2_img_0.png create mode 100644 tests/golden/phase2/pdf_chapters/references/index.md create mode 100644 tests/golden/phase2/pdf_chapters/references/section_p1-p2.md create mode 100644 tests/golden/phase2/pdf_chapters/references/section_p3-p3.md create mode 100644 tests/golden/phase2/pdf_chapters/references/section_p4-p4.md create mode 100644 tests/golden/phase2/pdf_kw/SKILL.md create mode 100644 tests/golden/phase2/pdf_kw/assets/page_2_img_0.png create mode 100644 tests/golden/phase2/pdf_kw/references/index.md create mode 100644 tests/golden/phase2/pdf_kw/references/section_03.md create mode 100644 tests/golden/phase2/pdf_kw/references/section_p1-p1.md create mode 100644 tests/golden/phase2/pdf_kw/references/section_p2-p2.md create mode 100644 tests/golden/phase2/pdf_kw/references/section_p3-p3.md create mode 100644 tests/golden/phase2/pptx/SKILL.md create mode 100644 tests/golden/phase2/pptx/references/deck.md create mode 100644 tests/golden/phase2/pptx/references/index.md create mode 100644 tests/golden/phase2/pptx_kw/SKILL.md create mode 100644 tests/golden/phase2/pptx_kw/references/index.md create mode 100644 tests/golden/phase2/pptx_kw/references/section_s1-s1.md create mode 100644 tests/golden/phase2/pptx_kw/references/section_s2-s2.md create mode 100644 tests/golden/phase2/pptx_kw/references/section_s3-s3.md create mode 100644 tests/golden/phase2/rss/SKILL.md create mode 100644 tests/golden/phase2/rss/references/dev_ops.md create mode 100644 tests/golden/phase2/rss/references/index.md create mode 100644 tests/golden/phase2/rss/references/python.md create mode 100644 tests/golden/phase2/rss/references/uncategorized.md create mode 100644 tests/golden/phase2/rss/references/unnamed.md create mode 100644 tests/golden/phase2/rss_empty/SKILL.md create mode 100644 tests/golden/phase2/rss_empty/references/all_articles.md create mode 100644 tests/golden/phase2/rss_empty/references/index.md create mode 100644 tests/golden/phase2/word/SKILL.md create mode 100644 tests/golden/phase2/word/assets/section_1_img_0.png create mode 100644 tests/golden/phase2/word/references/index.md create mode 100644 tests/golden/phase2/word/references/manual.md create mode 100644 tests/mcp_integration_test.md create mode 100644 tests/phase2_golden_utils.py create mode 100644 tests/test_adaptor_benchmarks.py create mode 100644 tests/test_adaptors/__init__.py create mode 100644 tests/test_adaptors/test_adaptors_e2e.py create mode 100644 tests/test_adaptors/test_base.py create mode 100644 tests/test_adaptors/test_chroma_adaptor.py create mode 100644 tests/test_adaptors/test_claude_adaptor.py create mode 100644 tests/test_adaptors/test_enhance_via_agent_client.py create mode 100644 tests/test_adaptors/test_faiss_adaptor.py create mode 100644 tests/test_adaptors/test_gemini_adaptor.py create mode 100644 tests/test_adaptors/test_haystack_adaptor.py create mode 100644 tests/test_adaptors/test_ibm_bob_adaptor.py create mode 100644 tests/test_adaptors/test_langchain_adaptor.py create mode 100644 tests/test_adaptors/test_llama_index_adaptor.py create mode 100644 tests/test_adaptors/test_markdown_adaptor.py create mode 100644 tests/test_adaptors/test_minimax_adaptor.py create mode 100644 tests/test_adaptors/test_openai_adaptor.py create mode 100644 tests/test_adaptors/test_openai_compatible_base.py create mode 100644 tests/test_adaptors/test_openai_compatible_shared.py create mode 100644 tests/test_adaptors/test_opencode_adaptor.py create mode 100644 tests/test_adaptors/test_qdrant_adaptor.py create mode 100644 tests/test_adaptors/test_streaming_mixin_formats.py create mode 100644 tests/test_adaptors/test_weaviate_adaptor.py create mode 100644 tests/test_agent_client.py create mode 100644 tests/test_api_reference_builder.py create mode 100644 tests/test_architectural_pattern_detector.py create mode 100644 tests/test_architecture_scenarios.py create mode 100644 tests/test_async_scraping.py create mode 100644 tests/test_benchmark.py create mode 100644 tests/test_bootstrap_skill.py create mode 100644 tests/test_bootstrap_skill_e2e.py create mode 100644 tests/test_browser_renderer.py create mode 100644 tests/test_c3_integration.py create mode 100644 tests/test_chunking_integration.py create mode 100644 tests/test_cli_parsers.py create mode 100644 tests/test_cli_paths.py create mode 100644 tests/test_cli_refactor_e2e.py create mode 100644 tests/test_cloud_storage.py create mode 100644 tests/test_code_analyzer.py create mode 100644 tests/test_codebase_scraper.py create mode 100644 tests/test_config_extractor.py create mode 100644 tests/test_config_fetcher.py create mode 100644 tests/test_config_manager.py create mode 100644 tests/test_config_publisher.py create mode 100644 tests/test_config_validation.py create mode 100644 tests/test_conflict_detector.py create mode 100644 tests/test_constants.py create mode 100644 tests/test_create_arguments.py create mode 100644 tests/test_create_integration_basic.py create mode 100644 tests/test_create_local_depth.py create mode 100644 tests/test_create_pipeline_regressions.py create mode 100644 tests/test_data_file_dir_regressions.py create mode 100644 tests/test_dependency_analyzer.py create mode 100644 tests/test_docker_smoke.py create mode 100644 tests/test_doctor.py create mode 100644 tests/test_document_skill_builder_hooks.py create mode 100644 tests/test_e2e_three_stream_pipeline.py create mode 100644 tests/test_embedding.py create mode 100644 tests/test_embedding_pipeline.py create mode 100644 tests/test_embedding_server.py create mode 100644 tests/test_encoding.py create mode 100644 tests/test_enhance_command.py create mode 100644 tests/test_enhance_skill_local.py create mode 100644 tests/test_epub_scraper.py create mode 100644 tests/test_estimate_pages.py create mode 100644 tests/test_estimate_url_guard.py create mode 100644 tests/test_excluded_dirs_config.py create mode 100644 tests/test_execution_context.py create mode 100644 tests/test_framework_detection.py create mode 100644 tests/test_generate_router_github.py create mode 100644 tests/test_git_repo.py create mode 100644 tests/test_git_sources_e2e.py create mode 100644 tests/test_github_fetcher.py create mode 100644 tests/test_github_scraper.py create mode 100644 tests/test_guide_enhancer.py create mode 100644 tests/test_how_to_guide_builder.py create mode 100644 tests/test_incremental_updates.py create mode 100644 tests/test_install_agent.py create mode 100644 tests/test_install_multiplatform.py create mode 100644 tests/test_install_skill.py create mode 100644 tests/test_install_skill_e2e.py create mode 100644 tests/test_integration.py create mode 100644 tests/test_integration_adaptors.py create mode 100644 tests/test_issue_219_e2e.py create mode 100644 tests/test_issue_277_discord_e2e.py create mode 100644 tests/test_issue_277_real_world.py create mode 100644 tests/test_kotlin_support.py create mode 100644 tests/test_language_detector.py create mode 100644 tests/test_large_inputs.py create mode 100644 tests/test_llms_txt_downloader.py create mode 100644 tests/test_markdown_parsing.py create mode 100644 tests/test_marketplace_manager.py create mode 100644 tests/test_marketplace_publisher.py create mode 100644 tests/test_mcp_fastmcp.py create mode 100644 tests/test_mcp_git_sources.py create mode 100644 tests/test_mcp_inprocess_tools.py create mode 100644 tests/test_mcp_server.py create mode 100644 tests/test_mcp_tools_common.py create mode 100644 tests/test_mcp_vector_dbs.py create mode 100644 tests/test_mcp_workflow_tools.py create mode 100644 tests/test_merge_sources_github.py create mode 100644 tests/test_multi_source.py create mode 100644 tests/test_multilang_support.py create mode 100644 tests/test_new_source_types.py create mode 100644 tests/test_opencode_skill_splitter.py create mode 100644 tests/test_package_confirm.py create mode 100644 tests/test_package_skill.py create mode 100644 tests/test_package_structure.py create mode 100644 tests/test_parallel_batches.py create mode 100644 tests/test_parallel_scraping.py create mode 100644 tests/test_pattern_recognizer.py create mode 100644 tests/test_pdf_advanced_features.py create mode 100644 tests/test_pdf_extractor.py create mode 100644 tests/test_pdf_scraper.py create mode 100644 tests/test_phase2_golden_chat.py create mode 100644 tests/test_phase2_golden_epub_word.py create mode 100644 tests/test_phase2_golden_html.py create mode 100644 tests/test_phase2_golden_jupyter.py create mode 100644 tests/test_phase2_golden_man.py create mode 100644 tests/test_phase2_golden_pdf.py create mode 100644 tests/test_phase2_golden_pptx.py create mode 100644 tests/test_phase2_golden_rss.py create mode 100644 tests/test_pinecone_adaptor.py create mode 100644 tests/test_preset_system.py create mode 100644 tests/test_quality_checker.py create mode 100644 tests/test_quality_metrics.py create mode 100644 tests/test_rag_chunker.py create mode 100644 tests/test_rate_limit_handler.py create mode 100644 tests/test_real_world_fastmcp.py create mode 100644 tests/test_registry_platform_lists.py create mode 100644 tests/test_scan_command.py create mode 100644 tests/test_scrape_count.py create mode 100644 tests/test_scraper_features.py create mode 100644 tests/test_scraper_utils.py create mode 100644 tests/test_server_fastmcp_http.py create mode 100644 tests/test_services_backcompat.py create mode 100644 tests/test_setup_scripts.py create mode 100644 tests/test_signal_collectors.py create mode 100644 tests/test_signal_flow_analyzer.py create mode 100644 tests/test_sitemap_timeout.py create mode 100644 tests/test_skill_converter.py create mode 100644 tests/test_skip_llms_txt.py create mode 100644 tests/test_smart_summarization.py create mode 100644 tests/test_source_detector.py create mode 100644 tests/test_source_manager.py create mode 100644 tests/test_streaming_ingestion.py create mode 100644 tests/test_subprocess_with_streaming.py create mode 100644 tests/test_swift_detection.py create mode 100644 tests/test_sync_config.py create mode 100644 tests/test_sync_config_e2e.py create mode 100644 tests/test_sync_detector.py create mode 100644 tests/test_sync_models.py create mode 100644 tests/test_sync_monitor.py create mode 100644 tests/test_sync_notifier.py create mode 100644 tests/test_terminal_detection.py create mode 100644 tests/test_test_example_extractor.py create mode 100644 tests/test_unified.py create mode 100644 tests/test_unified_analyzer.py create mode 100644 tests/test_unified_config_validator.py create mode 100644 tests/test_unified_mcp_integration.py create mode 100644 tests/test_unified_parsers.py create mode 100644 tests/test_unified_scraper_orchestration.py create mode 100644 tests/test_upload_integration.py create mode 100644 tests/test_upload_skill.py create mode 100644 tests/test_url_conversion.py create mode 100644 tests/test_utilities.py create mode 100644 tests/test_video_scraper.py create mode 100644 tests/test_video_setup.py create mode 100644 tests/test_word_scraper.py create mode 100644 tests/test_workflow_prompt_injection.py create mode 100644 tests/test_workflow_runner.py create mode 100644 tests/test_workflow_tools_mcp.py create mode 100644 tests/test_workflows_command.py create mode 100644 uv.lock diff --git a/.claude/mcp_config.example.json b/.claude/mcp_config.example.json new file mode 100644 index 0000000..74ba333 --- /dev/null +++ b/.claude/mcp_config.example.json @@ -0,0 +1,14 @@ +{ + "mcpServers": { + "skill-seeker": { + "type": "stdio", + "command": "/path/to/your/Skill_Seekers/.venv/bin/python3", + "args": [ + "-m", + "skill_seekers.mcp.server_fastmcp" + ], + "cwd": "/path/to/your/Skill_Seekers", + "env": {} + } + } +} diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json new file mode 100644 index 0000000..5fc1dcb --- /dev/null +++ b/.codex-plugin/plugin.json @@ -0,0 +1,21 @@ +{ + "name": "skill-seekers", + "version": "3.5.0", + "description": "Convert docs and repos into AI skills via MCP", + "author": { + "name": "yusufkaraaslan", + "url": "https://github.com/yusufkaraaslan/Skill_Seekers" + }, + "homepage": "https://skillseekersweb.com/", + "repository": "https://github.com/yusufkaraaslan/Skill_Seekers", + "keywords": ["mcp", "codex", "skills", "documentation"], + "mcpServers": "./.mcp.json", + "skills": "./skills/", + "interface": { + "displayName": "Skill Seekers", + "shortDescription": "Convert docs and repos into AI skills via MCP", + "longDescription": "Convert documentation websites, GitHub repositories, and PDFs into AI skills with automatic conflict detection.", + "category": "Development", + "websiteURL": "https://skillseekersweb.com/" + } +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ecb4a18 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,83 @@ +# Python artifacts +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +venv/ +env/ +ENV/ +.venv + +# Testing +.pytest_cache/ +.coverage +.coverage.* +htmlcov/ +.tox/ +.hypothesis/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Git +.git/ +.gitignore +.gitattributes + +# Documentation +docs/ +*.md +!README.md + +# CI/CD +.github/ +.gitlab-ci.yml +.travis.yml + +# Output directories +output/ +data/ +*.zip +*.tar.gz + +# Logs +*.log +logs/ + +# Environment files +.env +.env.* +!.env.example + +# Test files +tests/ +test_*.py +*_test.py + +# Docker +Dockerfile* +docker-compose*.yml +.dockerignore diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..709eabd --- /dev/null +++ b/.env.example @@ -0,0 +1,46 @@ +# Skill Seekers Docker Environment Configuration +# Copy this file to .env and fill in your API keys + +# Claude AI / Anthropic API +# Required for AI enhancement features +# Get your key from: https://console.anthropic.com/ +ANTHROPIC_API_KEY=sk-ant-your-key-here + +# Google Gemini API (Optional) +# Required for Gemini platform support +# Get your key from: https://makersuite.google.com/app/apikey +GOOGLE_API_KEY= + +# OpenAI API (Optional) +# Required for OpenAI/ChatGPT platform support +# Get your key from: https://platform.openai.com/api-keys +OPENAI_API_KEY= + +# GitHub Token (Optional, but recommended) +# Increases rate limits from 60/hour to 5000/hour +# Create token at: https://github.com/settings/tokens +# Required scopes: public_repo (for public repos) +GITHUB_TOKEN= + +# MCP Server Configuration +MCP_TRANSPORT=http +MCP_PORT=8765 + +# Docker Resource Limits (Optional) +# Uncomment to set custom limits +# DOCKER_CPU_LIMIT=2.0 +# DOCKER_MEMORY_LIMIT=4g + +# Pinecone API (Optional) +# Required for Pinecone vector database upload +# Get your key from: https://app.pinecone.io/ +PINECONE_API_KEY= + +# Vector Database Ports (Optional - change if needed) +# WEAVIATE_PORT=8080 +# QDRANT_PORT=6333 +# CHROMA_PORT=8000 + +# Logging (Optional) +# SKILL_SEEKERS_LOG_LEVEL=INFO +# SKILL_SEEKERS_LOG_FILE=/data/logs/skill-seekers.log diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..8cf34f1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# GitHub Sponsors configuration +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository + +buy_me_a_coffee: yusufkaraaslan diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..3dbbb62 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,52 @@ +--- +name: Bug Report +about: Report a bug or issue with Skill Seekers +title: '[BUG] ' +labels: 'type: bug' +assignees: '' +--- + +## 🛠Bug Description + +A clear and concise description of what the bug is. + +## 🔄 Steps to Reproduce + +1. Go to '...' +2. Run command '...' +3. See error + +## ✅ Expected Behavior + +What you expected to happen. + +## ⌠Actual Behavior + +What actually happened. + +## 📋 Environment + +- **OS:** [e.g., macOS 14.0, Ubuntu 22.04, Windows 11] +- **Python Version:** [e.g., 3.10, 3.11] +- **Skill Seekers Version:** [e.g., v1.0.0] +- **Installation Method:** [pip, git clone, etc.] + +## 📊 Error Output + +``` +Paste the full error message or traceback here +``` + +## 📸 Screenshots + +If applicable, add screenshots to help explain the problem. + +## 🔠Additional Context + +- Config file used (if applicable) +- Documentation URL being scraped +- Any custom modifications made + +## 🎯 Possible Solution + +If you have an idea of how to fix this, please share! diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md new file mode 100644 index 0000000..0b7a53d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -0,0 +1,41 @@ +--- +name: Documentation Improvement +about: Suggest improvements to documentation +title: '[DOCS] ' +labels: 'type: documentation' +assignees: '' +--- + +## 📚 Documentation Issue + +What documentation needs to be improved, added, or fixed? + +## 📠Location + +- **File:** [e.g., README.md, docs/CLAUDE.md] +- **Section:** [e.g., Installation, Configuration] +- **URL:** [if applicable] + +## ⌠Current State + +Describe what's currently unclear, missing, or incorrect. + +## ✅ Proposed Improvement + +How should the documentation be changed? + +## 🎯 Target Audience + +Who would benefit from this documentation improvement? +- [ ] New users +- [ ] Advanced users +- [ ] Contributors +- [ ] API users + +## 📠Additional Context + +Any additional context or examples that would help. + +## 🔗 Related Issues + +Link to any related issues or PRs. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..872b806 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,39 @@ +--- +name: Feature Request +about: Suggest a new feature for Skill Seekers +title: '[FEATURE] ' +labels: 'type: feature' +assignees: '' +--- + +## 🚀 Feature Description + +A clear and concise description of the feature you'd like to see. + +## 💡 Use Case + +Describe the problem this feature would solve. What is the user trying to accomplish? + +## 📋 Proposed Solution + +Describe how you envision this feature working. + +## 🔄 Alternatives Considered + +Have you considered any alternative solutions or workarounds? + +## 📊 Expected Impact + +- **Priority:** Low / Medium / High / Critical +- **Effort:** XS / S / M / L / XL +- **Users Affected:** Describe who would benefit + +## 📠Additional Context + +Add any other context, screenshots, or examples about the feature request. + +## ✅ Acceptance Criteria + +- [ ] Criteria 1 +- [ ] Criteria 2 +- [ ] Criteria 3 diff --git a/.github/ISSUE_TEMPLATE/mcp_tool.md b/.github/ISSUE_TEMPLATE/mcp_tool.md new file mode 100644 index 0000000..d4f1464 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/mcp_tool.md @@ -0,0 +1,42 @@ +--- +name: MCP Tool Request +about: Suggest a new tool for the MCP server +title: '[MCP] Add tool: ' +labels: mcp, enhancement +assignees: '' +--- + +## Tool Name + + +## Tool Description + + +## Input Parameters +```json +{ + "param1": { + "type": "string", + "description": "...", + "required": true + } +} +``` + +## Expected Output + + +## Use Case Example + +``` +User: "Auto-detect selectors for https://docs.example.com" +Tool: Analyzes page structure and suggests optimal selectors +``` + +## CLI Integration + +- [ ] Wraps existing CLI tool: `cli/tool_name.py` +- [ ] New functionality + +## Implementation Notes + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..94da16c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,49 @@ +# Pull Request + +## 📋 Description + +Brief description of changes made. + +## 🔗 Related Issues + +Closes #(issue number) +Relates to #(issue number) + +## 🎯 Type of Change + +- [ ] 🛠Bug fix (non-breaking change which fixes an issue) +- [ ] ✨ New feature (non-breaking change which adds functionality) +- [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] 📚 Documentation update +- [ ] â™»ï¸ Code refactoring +- [ ] âš¡ Performance improvement +- [ ] 🧪 Test update + +## ✅ Checklist + +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] Documentation updated (README, examples, AGENTS.md if CLI changed) +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have been merged and published + +## 🧪 Testing + +Describe the tests you ran to verify your changes. + +**Test Configuration:** +- Python version: +- OS: +- Dependencies installed: + +## 📸 Screenshots (if applicable) + +Add screenshots to demonstrate visual changes. + +## 📠Additional Notes + +Any additional information reviewers should know. diff --git a/.github/create_issues.sh b/.github/create_issues.sh new file mode 100755 index 0000000..72fc2ef --- /dev/null +++ b/.github/create_issues.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Script to create GitHub issues via web browser +# Since gh CLI is not available, we'll open browser to create issues + +REPO="yusufkaraaslan/Skill_Seekers" +BASE_URL="https://github.com/${REPO}/issues/new" + +echo "🚀 Creating GitHub Issues for Skill Seeker MCP Development" +echo "==========================================================" +echo "" +echo "Opening browser to create issues..." +echo "Please copy the content from .github/ISSUES_TO_CREATE.md" +echo "" + +# Issue 1: Fix test failures +echo "📠Issue 1: Fix 3 test failures" +echo "URL: ${BASE_URL}?labels=bug,tests,good+first+issue&title=Fix+3+test+failures+(warnings+vs+errors+handling)" +echo "" + +# Issue 2: MCP setup guide +echo "📠Issue 2: Create MCP setup guide" +echo "URL: ${BASE_URL}?labels=documentation,mcp,enhancement&title=Create+comprehensive+MCP+setup+guide+for+Claude+Code" +echo "" + +# Issue 3: Test MCP server +echo "📠Issue 3: Test MCP server" +echo "URL: ${BASE_URL}?labels=testing,mcp,priority-high&title=Test+MCP+server+with+actual+Claude+Code+instance" +echo "" + +# Issue 4: Update documentation +echo "📠Issue 4: Update documentation" +echo "URL: ${BASE_URL}?labels=documentation,breaking-change&title=Update+all+documentation+for+new+monorepo+structure" +echo "" + +echo "==========================================================" +echo "📋 Instructions:" +echo "1. Click each URL above (or copy to browser)" +echo "2. Copy the issue body from .github/ISSUES_TO_CREATE.md" +echo "3. Paste into the issue description" +echo "4. Click 'Submit new issue'" +echo "" +echo "Or use this quick link to view all templates:" +echo "cat .github/ISSUES_TO_CREATE.md" diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..5633d96 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,139 @@ +# Docker Image Publishing - Automated builds and pushes to Docker Hub +# Security Note: Uses secrets for Docker Hub credentials. Matrix values are hardcoded. +# Triggers: push/pull_request/workflow_dispatch only. No untrusted input. + +name: Docker Publish + +on: + push: + branches: [ main ] + tags: + - 'v*' + pull_request: + branches: [ main ] + paths: + - 'Dockerfile*' + - 'docker-compose.yml' + - 'src/**' + - 'pyproject.toml' + workflow_dispatch: + +env: + DOCKER_REGISTRY: docker.io + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + +jobs: + build-and-push: + name: Build and Push Docker Images + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + image: + - name: skill-seekers + dockerfile: Dockerfile + description: "Skill Seekers CLI - Convert documentation to AI skills" + - name: skill-seekers-mcp + dockerfile: Dockerfile.mcp + description: "Skill Seekers MCP Server - 25 tools for AI assistants" + + env: + IMAGE_NAME: ${{ matrix.image.name }} + IMAGE_DOCKERFILE: ${{ matrix.image.dockerfile }} + IMAGE_DESCRIPTION: ${{ matrix.image.description }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: ${{ env.IMAGE_DOCKERFILE }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64,linux/arm64 + + - name: Create image summary + run: | + echo "## 🳠Docker Image: $IMAGE_NAME" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Description:** $IMAGE_DESCRIPTION" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tags:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + + test-images: + name: Test Docker Images + needs: build-and-push + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Build CLI image + run: | + docker build -t skill-seekers:test -f Dockerfile . + + - name: Test CLI image + run: | + echo "🧪 Testing CLI image..." + docker run --rm skill-seekers:test skill-seekers --version + docker run --rm skill-seekers:test skill-seekers --help + + - name: Build MCP image + run: | + docker build -t skill-seekers-mcp:test -f Dockerfile.mcp . + + - name: Test MCP image + run: | + echo "🧪 Testing MCP server image..." + # Start MCP server in background + docker run -d --name mcp-test -p 8765:8765 skill-seekers-mcp:test + + # Wait for server to start + sleep 10 + + # Check health + curl -f http://localhost:8765/health || exit 1 + + # Stop container + docker stop mcp-test + docker rm mcp-test + + - name: Test Docker Compose + run: | + echo "🧪 Testing Docker Compose..." + docker compose config + echo "✅ Docker Compose configuration valid" diff --git a/.github/workflows/quality-metrics.yml b/.github/workflows/quality-metrics.yml new file mode 100644 index 0000000..1953628 --- /dev/null +++ b/.github/workflows/quality-metrics.yml @@ -0,0 +1,171 @@ +# Security Note: This workflow uses workflow_dispatch inputs and pull_request events. +# All untrusted inputs are accessed via environment variables (env:) as recommended. +# No direct usage of github.event.issue/comment/review content in run: commands. + +name: Quality Metrics Dashboard + +on: + workflow_dispatch: + inputs: + skill_dir: + description: 'Path to skill directory to analyze (e.g., output/react)' + required: true + type: string + fail_threshold: + description: 'Minimum quality score to pass (default: 70)' + required: false + default: '70' + type: string + pull_request: + paths: + - 'output/**' + - 'configs/**' + +jobs: + analyze: + name: Quality Metrics Analysis + runs-on: ubuntu-latest + + env: + SKILL_DIR_INPUT: ${{ github.event.inputs.skill_dir }} + FAIL_THRESHOLD_INPUT: ${{ github.event.inputs.fail_threshold }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e . + + - name: Find skill directories + id: find_skills + run: | + if [ -n "$SKILL_DIR_INPUT" ]; then + # Manual trigger with specific directory + echo "dirs=$SKILL_DIR_INPUT" >> $GITHUB_OUTPUT + else + # PR trigger - find all skill directories + DIRS=$(find output -maxdepth 1 -type d -name "*" ! -name "output" | tr '\n' ' ' || echo "") + if [ -z "$DIRS" ]; then + echo "No skill directories found" + echo "dirs=" >> $GITHUB_OUTPUT + else + echo "dirs=$DIRS" >> $GITHUB_OUTPUT + fi + fi + + - name: Analyze quality metrics + id: quality + run: | + DIRS="${{ steps.find_skills.outputs.dirs }}" + THRESHOLD="${FAIL_THRESHOLD_INPUT:-70}" + + if [ -z "$DIRS" ]; then + echo "No directories to analyze" + exit 0 + fi + + ALL_PASSED=true + SUMMARY_FILE="quality_summary.md" + + echo "# 📊 Quality Metrics Dashboard" > $SUMMARY_FILE + echo "" >> $SUMMARY_FILE + echo "**Threshold:** $THRESHOLD/100" >> $SUMMARY_FILE + echo "" >> $SUMMARY_FILE + + for skill_dir in $DIRS; do + if [ ! -d "$skill_dir" ]; then + continue + fi + + SKILL_NAME=$(basename "$skill_dir") + echo "🔠Analyzing $SKILL_NAME..." + + # Run quality analysis + python3 -c " + import sys + from pathlib import Path + + from skill_seekers.cli.quality_metrics import QualityAnalyzer + + skill_dir = Path('$skill_dir') + threshold = float('$THRESHOLD') + skill_name = '$SKILL_NAME' + + analyzer = QualityAnalyzer(skill_dir) + report = analyzer.generate_report() + + formatted = analyzer.format_report(report) + print(formatted) + + with open(f'quality_{skill_name}.txt', 'w') as f: + f.write(formatted) + + score = report.overall_score.total_score + grade = report.overall_score.grade + status = 'PASS' if score >= threshold else 'FAIL' + + summary_line = f'{status} **{skill_name}**: {grade} ({score:.1f}/100)' + print(f'\n{summary_line}') + + with open('quality_summary.md', 'a') as f: + f.write(f'{summary_line}\n') + + if score < threshold: + print(f'::error file={skill_dir}/SKILL.md::Quality score {score:.1f} is below threshold {threshold}') + sys.exit(1) + elif score < 80: + print(f'::warning file={skill_dir}/SKILL.md::Quality score {score:.1f} could be improved') + else: + print(f'::notice file={skill_dir}/SKILL.md::Quality score {score:.1f} - Excellent!') + " + + if [ $? -ne 0 ]; then + ALL_PASSED=false + fi + + echo "" >> $SUMMARY_FILE + done + + if [ "$ALL_PASSED" = false ]; then + echo "⌠Some skills failed quality thresholds" + exit 1 + else + echo "✅ All skills passed quality thresholds" + fi + + - name: Upload quality reports + uses: actions/upload-artifact@v4 + with: + name: quality-metrics-reports + path: quality_*.txt + retention-days: 30 + continue-on-error: true + + - name: Post summary to PR + if: github.event_name == 'pull_request' + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const summary = fs.readFileSync('quality_summary.md', 'utf8'); + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: summary + }); + continue-on-error: true + + - name: Create dashboard summary + run: | + if [ -f "quality_summary.md" ]; then + cat quality_summary.md >> $GITHUB_STEP_SUMMARY + fi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..8053afc --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,125 @@ +name: Release + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: Install uv + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + if [ -f skill_seeker_mcp/requirements.txt ]; then pip install -r skill_seeker_mcp/requirements.txt; fi + # Install package in editable mode for tests (required for src/ layout) + pip install -e . + + - name: Run tests + timeout-minutes: 30 + run: | + pip install pytest-timeout + python -m pytest tests/ -v \ + -m "not slow and not integration and not e2e and not network and not serial and not mcp_only" \ + --timeout=120 + + - name: Extract version from tag + id: get_version + run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + + - name: Verify Python version + run: | + python --version + python -c "import sys; assert sys.version_info >= (3, 10), f'Python {sys.version} is not >= 3.10'" + + - name: Verify version consistency + run: | + TAG_VERSION="${{ steps.get_version.outputs.VERSION }}" + PKG_VERSION=$(python -c "import skill_seekers; print(skill_seekers.__version__)") + TOML_VERSION=$(grep -m1 '^version' pyproject.toml | sed 's/version *= *"\(.*\)"/\1/') + echo "Tag version: $TAG_VERSION" + echo "Package version: $PKG_VERSION" + echo "TOML version: $TOML_VERSION" + if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then + echo "::error::Version mismatch! Tag=$TAG_VERSION but package reports=$PKG_VERSION" + exit 1 + fi + if [ "$TAG_VERSION" != "$TOML_VERSION" ]; then + echo "::error::Version mismatch! Tag=$TAG_VERSION but pyproject.toml has=$TOML_VERSION" + exit 1 + fi + echo "✅ All versions match: $TAG_VERSION" + + - name: Create Release Notes + id: release_notes + run: | + if [ -f CHANGELOG.md ]; then + # Extract changelog for this version (escape dots for exact match) + VERSION="${{ steps.get_version.outputs.VERSION }}" + ESCAPED_VERSION=$(echo "$VERSION" | sed 's/\./\\./g') + sed -n "/## \[${ESCAPED_VERSION}\]/,/## \[/p" CHANGELOG.md | sed '$d' > release_notes.md + fi + # Fallback if extraction produced empty file or CHANGELOG.md missing + if [ ! -s release_notes.md ]; then + echo "Release v${{ steps.get_version.outputs.VERSION }}" > release_notes.md + fi + + - name: Check if release exists + id: check_release + run: | + if gh release view ${{ github.ref_name }} > /dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create GitHub Release + if: steps.check_release.outputs.exists == 'false' + uses: softprops/action-gh-release@v1 + with: + name: v${{ steps.get_version.outputs.VERSION }} + tag_name: ${{ github.ref_name }} + body_path: release_notes.md + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Skip Release Creation + if: steps.check_release.outputs.exists == 'true' + run: | + echo "â„¹ï¸ Release ${{ github.ref_name }} already exists, skipping creation" + echo "View at: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}" + + - name: Build package + run: | + uv build + + - name: Publish to PyPI + env: + UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }} + run: | + uv publish --token $UV_PUBLISH_TOKEN diff --git a/.github/workflows/scheduled-updates.yml b/.github/workflows/scheduled-updates.yml new file mode 100644 index 0000000..078fe61 --- /dev/null +++ b/.github/workflows/scheduled-updates.yml @@ -0,0 +1,197 @@ +# Automated Skill Updates - Runs weekly to refresh documentation +# Security Note: Schedule triggers with hardcoded constants. Workflow_dispatch input +# accessed via FRAMEWORKS_INPUT env variable (safe pattern). + +name: Scheduled Skill Updates + +on: + schedule: + # Run every Sunday at 3 AM UTC + - cron: '0 3 * * 0' + workflow_dispatch: + inputs: + frameworks: + description: 'Frameworks to update (comma-separated or "all")' + required: false + default: 'all' + type: string + +jobs: + update-skills: + name: Update ${{ matrix.framework }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # Popular frameworks to keep updated + framework: + - react + - django + - fastapi + - godot + - vue + - flask + + env: + FRAMEWORK: ${{ matrix.framework }} + FRAMEWORKS_INPUT: ${{ github.event.inputs.frameworks }} + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e . + + - name: Check if framework should be updated + id: should_update + run: | + FRAMEWORKS_INPUT="${FRAMEWORKS_INPUT:-all}" + + if [ "$FRAMEWORKS_INPUT" = "all" ] || [ -z "$FRAMEWORKS_INPUT" ]; then + echo "update=true" >> $GITHUB_OUTPUT + elif echo "$FRAMEWORKS_INPUT" | grep -q "$FRAMEWORK"; then + echo "update=true" >> $GITHUB_OUTPUT + else + echo "update=false" >> $GITHUB_OUTPUT + echo "â­ï¸ Skipping $FRAMEWORK (not in update list)" + fi + + - name: Check for existing skill + if: steps.should_update.outputs.update == 'true' + id: check_existing + run: | + SKILL_DIR="output/$FRAMEWORK" + if [ -d "$SKILL_DIR" ]; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "📦 Found existing skill at $SKILL_DIR" + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "🆕 No existing skill found" + fi + + - name: Incremental update (if exists) + if: steps.should_update.outputs.update == 'true' && steps.check_existing.outputs.exists == 'true' + run: | + echo "âš¡ Performing incremental update for $FRAMEWORK..." + + SKILL_DIR="output/$FRAMEWORK" + + # Detect changes using incremental updater + python3 -c " + import sys, os + from pathlib import Path + + from skill_seekers.cli.incremental_updater import IncrementalUpdater + + framework = os.environ['FRAMEWORK'] + skill_dir = Path(f'output/{framework}') + + updater = IncrementalUpdater(skill_dir) + changes = updater.detect_changes() + + if changes.has_changes: + print(f'Changes detected:') + print(f' Added: {len(changes.added)}') + print(f' Modified: {len(changes.modified)}') + print(f' Deleted: {len(changes.deleted)}') + updater.current_versions = updater._scan_documents() + updater.save_current_versions() + else: + print('No changes detected, skill is up to date') + " + + - name: Full scrape (if new or manual) + if: steps.should_update.outputs.update == 'true' && steps.check_existing.outputs.exists == 'false' + run: | + echo "📥 Performing full scrape for $FRAMEWORK..." + + CONFIG_FILE="configs/${FRAMEWORK}.json" + + if [ ! -f "$CONFIG_FILE" ]; then + echo "âš ï¸ Config not found: $CONFIG_FILE" + exit 0 + fi + + # Use streaming ingestion for large docs + skill-seekers create "$CONFIG_FILE" --max-pages 200 + + - name: Generate quality report + if: steps.should_update.outputs.update == 'true' + run: | + SKILL_DIR="output/$FRAMEWORK" + + if [ ! -d "$SKILL_DIR" ]; then + echo "âš ï¸ Skill directory not found" + exit 0 + fi + + echo "📊 Generating quality metrics..." + + python3 -c " + import sys, os + from pathlib import Path + + from skill_seekers.cli.quality_metrics import QualityAnalyzer + + framework = os.environ['FRAMEWORK'] + skill_dir = Path(f'output/{framework}') + + analyzer = QualityAnalyzer(skill_dir) + report = analyzer.generate_report() + + print(f'Quality Score: {report.overall_score.grade} ({report.overall_score.total_score:.1f}/100)') + print(f' Completeness: {report.overall_score.completeness:.1f}%') + print(f' Accuracy: {report.overall_score.accuracy:.1f}%') + print(f' Coverage: {report.overall_score.coverage:.1f}%') + print(f' Health: {report.overall_score.health:.1f}%') + " + + - name: Package for Claude + if: steps.should_update.outputs.update == 'true' + run: | + SKILL_DIR="output/$FRAMEWORK" + + if [ -d "$SKILL_DIR" ]; then + echo "📦 Packaging $FRAMEWORK for Claude AI..." + skill-seekers package "$SKILL_DIR" --target claude + fi + + - name: Upload updated skill + if: steps.should_update.outputs.update == 'true' + uses: actions/upload-artifact@v4 + with: + name: ${{ env.FRAMEWORK }}-skill-updated + path: output/${{ env.FRAMEWORK }}.zip + retention-days: 90 + + summary: + name: Update Summary + needs: update-skills + runs-on: ubuntu-latest + if: always() + + steps: + - name: Create summary + run: | + echo "## 🔄 Scheduled Skills Update" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Date:** $(date -u '+%Y-%m-%d %H:%M UTC')" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Updated Frameworks" >> $GITHUB_STEP_SUMMARY + echo "- React" >> $GITHUB_STEP_SUMMARY + echo "- Django" >> $GITHUB_STEP_SUMMARY + echo "- FastAPI" >> $GITHUB_STEP_SUMMARY + echo "- Godot" >> $GITHUB_STEP_SUMMARY + echo "- Vue" >> $GITHUB_STEP_SUMMARY + echo "- Flask" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Updated skills available in workflow artifacts." >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/test-vector-dbs.yml b/.github/workflows/test-vector-dbs.yml new file mode 100644 index 0000000..0615919 --- /dev/null +++ b/.github/workflows/test-vector-dbs.yml @@ -0,0 +1,112 @@ +# Security Note: This workflow uses only push/pull_request/workflow_dispatch triggers. +# Matrix values are hardcoded constants. No untrusted input is used in run: commands. + +name: Test Vector Database Adaptors + +on: + push: + branches: [ main, development ] + paths: + - 'src/skill_seekers/cli/adaptors/**' + - 'src/skill_seekers/mcp/tools/vector_db_tools.py' + - 'tests/test_*adaptor*.py' + - 'tests/test_mcp_vector_dbs.py' + - 'tests/test_docker_smoke.py' + - 'tests/test_upload_integration.py' + pull_request: + branches: [ main, development ] + paths: + - 'src/skill_seekers/cli/adaptors/**' + - 'src/skill_seekers/mcp/tools/vector_db_tools.py' + - 'tests/test_*adaptor*.py' + - 'tests/test_mcp_vector_dbs.py' + - 'tests/test_docker_smoke.py' + - 'tests/test_upload_integration.py' + workflow_dispatch: + +jobs: + test-adaptors: + name: Test ${{ matrix.adaptor }} Adaptor + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + adaptor: [weaviate, chroma, faiss, qdrant] + python-version: ['3.10', '3.12'] + + env: + ADAPTOR_NAME: ${{ matrix.adaptor }} + PYTHON_VERSION: ${{ matrix.python-version }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest + pip install -e . + + - name: Run adaptor tests + run: | + echo "🧪 Testing $ADAPTOR_NAME adaptor..." + python -m pytest "tests/test_adaptors/test_${ADAPTOR_NAME}_adaptor.py" -v --tb=short + + - name: Test adaptor integration + run: | + echo "🔗 Testing $ADAPTOR_NAME integration..." + + # Create test skill + mkdir -p test_skill/references + echo "# Test Skill" > test_skill/SKILL.md + echo "Test content" >> test_skill/SKILL.md + echo "# Reference" > test_skill/references/ref.md + + # Test adaptor packaging + python3 -c " + import os + from pathlib import Path + from skill_seekers.cli.adaptors import get_adaptor + adaptor_name = os.environ['ADAPTOR_NAME'] + adaptor = get_adaptor(adaptor_name) + package_path = adaptor.package(Path('test_skill'), Path('.')) + print(f'Package created: {package_path}') + assert package_path.exists(), 'Package file not created' + print(f'Package size: {package_path.stat().st_size} bytes') + " + + - name: Upload test package + uses: actions/upload-artifact@v4 + with: + name: test-package-${{ env.ADAPTOR_NAME }}-py${{ env.PYTHON_VERSION }} + path: test_skill-${{ env.ADAPTOR_NAME }}.json + retention-days: 7 + + test-mcp-tools: + name: Test MCP Vector DB Tools + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest + pip install -e . + + - name: Run MCP vector DB tests + run: | + echo "🧪 Testing MCP vector database tools..." + python -m pytest tests/test_mcp_vector_dbs.py -v --tb=short + diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..a0cb344 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,155 @@ +name: Tests + +on: + push: + branches: [ main, development ] + pull_request: + branches: [ main, development ] + +jobs: + lint: + name: Code Quality (Ruff & Mypy) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install "ruff==0.15.8" mypy + pip install -e . + - name: Run ruff linter + run: ruff check src/ tests/ --output-format=github + - name: Run ruff formatter check + run: ruff format --check src/ tests/ + - name: Run mypy type checker + run: mypy src/skill_seekers --show-error-codes --pretty + continue-on-error: true + + test-fast: + name: Fast Unit Tests (parallel) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + python-version: ['3.10', '3.11', '3.12'] + exclude: + - os: macos-latest + python-version: '3.10' + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Cache pip packages + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest-xdist pytest-timeout + pip install -e . + - name: Run fast tests (xdist parallel) + run: | + python -m pytest tests/ -n auto --dist=loadfile \ + -m "not slow and not integration and not e2e and not network and not serial and not mcp_only" \ + -q --timeout=120 --cov=src/skill_seekers --cov-report=xml --cov-report=term + timeout-minutes: 15 + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + file: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false + + test-serial: + name: Serial / Integration / E2E Tests + runs-on: ubuntu-latest + needs: [test-fast] + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest-timeout + pip install -e . + - name: Run serial/integration/E2E tests + run: | + python -m pytest tests/ \ + --ignore=tests/test_bootstrap_skill_e2e.py \ + --ignore=tests/test_bootstrap_skill.py \ + -m "(integration or e2e or slow or network or serial) and not mcp_only" \ + -v --timeout=300 + timeout-minutes: 25 + + test-mcp: + name: MCP Server Tests + runs-on: ubuntu-latest + needs: [test-fast] + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest-timeout + pip install -e ".[mcp]" + pip install -e . + - name: Run MCP tests + run: | + python -m pytest tests/ \ + -m "mcp_only and not network" \ + -v --timeout=180 + timeout-minutes: 10 + + tests-complete: + name: Tests + needs: [lint, test-fast, test-serial, test-mcp] + runs-on: ubuntu-latest + if: always() + steps: + - name: Check all results + run: | + if [ "${{ needs.lint.result }}" != "success" ]; then + echo "⌠Code quality checks failed!" + exit 1 + fi + if [ "${{ needs.test-fast.result }}" != "success" ]; then + echo "⌠Fast tests failed!" + exit 1 + fi + if [ "${{ needs.test-serial.result }}" == "failure" ]; then + echo "⌠Serial/integration tests failed!" + exit 1 + fi + if [ "${{ needs.test-mcp.result }}" == "failure" ]; then + echo "⌠MCP tests failed!" + exit 1 + fi + echo "✅ All checks passed!" diff --git a/.github/workflows/vector-db-export.yml b/.github/workflows/vector-db-export.yml new file mode 100644 index 0000000..1958bd3 --- /dev/null +++ b/.github/workflows/vector-db-export.yml @@ -0,0 +1,188 @@ +name: Vector Database Export + +on: + workflow_dispatch: + inputs: + skill_name: + description: 'Skill name to export (e.g., react, django, godot)' + required: true + type: string + targets: + description: 'Vector databases to export (comma-separated: weaviate,chroma,faiss,qdrant or "all")' + required: true + default: 'all' + type: string + config_path: + description: 'Path to config file (optional, auto-detected from skill_name if not provided)' + required: false + type: string + schedule: + # Run weekly on Sunday at 2 AM UTC for popular frameworks + - cron: '0 2 * * 0' + +jobs: + export: + name: Export to Vector Databases + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # For scheduled runs, export popular frameworks + skill: ${{ github.event_name == 'schedule' && fromJson('["react", "django", "godot", "fastapi"]') || fromJson(format('["{0}"]', github.event.inputs.skill_name)) }} + + env: + SKILL_NAME: ${{ matrix.skill }} + TARGETS_INPUT: ${{ github.event.inputs.targets }} + CONFIG_PATH_INPUT: ${{ github.event.inputs.config_path }} + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e . + + - name: Determine config path + id: config + run: | + if [ -n "$CONFIG_PATH_INPUT" ]; then + echo "path=$CONFIG_PATH_INPUT" >> $GITHUB_OUTPUT + else + echo "path=configs/$SKILL_NAME.json" >> $GITHUB_OUTPUT + fi + + - name: Check if config exists + id: check_config + run: | + CONFIG_FILE="${{ steps.config.outputs.path }}" + if [ -f "$CONFIG_FILE" ]; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "âš ï¸ Config not found: $CONFIG_FILE" + fi + + - name: Scrape documentation + if: steps.check_config.outputs.exists == 'true' + run: | + echo "📥 Scraping documentation for $SKILL_NAME..." + skill-seekers create "${{ steps.config.outputs.path }}" --max-pages 100 + continue-on-error: true + + - name: Determine export targets + id: targets + run: | + TARGETS="${TARGETS_INPUT:-all}" + if [ "$TARGETS" = "all" ]; then + echo "list=weaviate chroma faiss qdrant" >> $GITHUB_OUTPUT + else + echo "list=$(echo "$TARGETS" | tr ',' ' ')" >> $GITHUB_OUTPUT + fi + + - name: Export to vector databases + if: steps.check_config.outputs.exists == 'true' + env: + EXPORT_TARGETS: ${{ steps.targets.outputs.list }} + run: | + SKILL_DIR="output/$SKILL_NAME" + + if [ ! -d "$SKILL_DIR" ]; then + echo "⌠Skill directory not found: $SKILL_DIR" + exit 1 + fi + + echo "📦 Exporting $SKILL_NAME to vector databases..." + + for target in $EXPORT_TARGETS; do + echo "" + echo "🔹 Exporting to $target..." + + # Use adaptor directly via CLI + python3 -c " + from pathlib import Path + from skill_seekers.cli.adaptors import get_adaptor + adaptor = get_adaptor('$target') + package_path = adaptor.package(Path('$SKILL_DIR'), Path('output')) + print(f'Exported to {package_path}') + " + + if [ $? -eq 0 ]; then + echo "✅ $target export complete" + else + echo "⌠$target export failed" + fi + done + + - name: Generate quality report + if: steps.check_config.outputs.exists == 'true' + run: | + SKILL_DIR="output/$SKILL_NAME" + + if [ -d "$SKILL_DIR" ]; then + echo "📊 Generating quality metrics..." + + python3 -c " + from pathlib import Path + from skill_seekers.cli.quality_metrics import QualityAnalyzer + analyzer = QualityAnalyzer(Path('$SKILL_DIR')) + report = analyzer.generate_report() + formatted = analyzer.format_report(report) + print(formatted) + with open('quality_report_${SKILL_NAME}.txt', 'w') as f: + f.write(formatted) + " + fi + continue-on-error: true + + - name: Upload vector database exports + if: steps.check_config.outputs.exists == 'true' + uses: actions/upload-artifact@v4 + with: + name: ${{ env.SKILL_NAME }}-vector-exports + path: | + output/${{ env.SKILL_NAME }}-*.json + retention-days: 30 + + - name: Upload quality report + if: steps.check_config.outputs.exists == 'true' + uses: actions/upload-artifact@v4 + with: + name: ${{ env.SKILL_NAME }}-quality-report + path: quality_report_${{ env.SKILL_NAME }}.txt + retention-days: 30 + continue-on-error: true + + - name: Create export summary + if: steps.check_config.outputs.exists == 'true' + env: + EXPORT_TARGETS: ${{ steps.targets.outputs.list }} + run: | + echo "## 📦 Vector Database Export Summary: $SKILL_NAME" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + for target in $EXPORT_TARGETS; do + FILE="output/${SKILL_NAME}-${target}.json" + if [ -f "$FILE" ]; then + SIZE=$(du -h "$FILE" | cut -f1) + echo "✅ **$target**: $SIZE" >> $GITHUB_STEP_SUMMARY + else + echo "⌠**$target**: Export failed" >> $GITHUB_STEP_SUMMARY + fi + done + + echo "" >> $GITHUB_STEP_SUMMARY + + if [ -f "quality_report_${SKILL_NAME}.txt" ]; then + echo "### 📊 Quality Metrics" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + head -30 "quality_report_${SKILL_NAME}.txt" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + fi diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..927051f --- /dev/null +++ b/.gitignore @@ -0,0 +1,79 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Environment variables (secrets) +.env +.env.local +.env.*.local + +# Virtual Environment +.venv/ +venv/ +ENV/ +env/ + +# Output directory +output/ +*.zip + +# Skill Seekers cache (intermediate files) +.skillseeker-cache/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Backups +*.backup + +# Testing artifacts +.pytest_cache/ +.coverage +htmlcov/ +.tox/ +*.cover +.hypothesis/ +.mypy_cache/ +.ruff_cache/ + +# Build artifacts +.build/ +skill-seekers-configs/ +.claude/skills +.mcp.json +!/.mcp.json +!distribution/claude-plugin/.mcp.json +settings.json +USER_GUIDE.md + +# Local tooling artifacts (per-developer state, not project state) +# chromadb's default persistence directory +chroma_db/ +# Superpowers SDK output +docs/superpowers/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e78ebb2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "api/configs_repo"] + path = api/configs_repo + url = https://github.com/yusufkaraaslan/skill-seekers-configs.git diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..7281144 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "skill-seekers": { + "command": "python", + "args": ["-m", "skill_seekers.mcp.server_fastmcp"] + } + } +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..09ee150 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,302 @@ +# AGENTS.md - Skill Seekers + +Comprehensive reference for AI coding agents. Skill Seekers is a Python CLI tool (v3.6.0) that converts documentation sites, GitHub repos, PDFs, videos, notebooks, wikis, and more into AI-ready skills for 21+ LLM platforms and RAG pipelines. + +## Project Overview + +**Skill Seekers** is a universal preprocessing layer that transforms raw documentation and code into structured knowledge assets. It supports 17+ source types and exports to 21+ AI platforms including Claude, Gemini, OpenAI, LangChain, LlamaIndex, and various vector databases. + +### Key Capabilities +- **Source Types (17):** Documentation websites, GitHub repos, PDFs, Word docs, EPUBs, videos, local codebases, Jupyter notebooks, HTML, OpenAPI specs, AsciiDoc, PowerPoint, Confluence, Notion, RSS feeds, man pages, chat exports +- **Export Targets (21):** Claude, Gemini, OpenAI, MiniMax, OpenCode, Kimi, DeepSeek, Qwen, OpenRouter, Together AI, Fireworks AI, Markdown, LangChain, LlamaIndex, Haystack, Weaviate, ChromaDB, FAISS, Qdrant, Pinecone +- **MCP Server:** FastMCP-based Model Context Protocol server for AI assistant integration + +## Setup + +```bash +# REQUIRED before running tests (src/ layout — tests hard-exit if package not installed) +pip install -e . + +# With dev tools (pytest, ruff, mypy, coverage) +pip install -e ".[dev]" + +# With specific LLM platform support +pip install -e ".[gemini]" # Google Gemini +pip install -e ".[openai]" # OpenAI ChatGPT +pip install -e ".[all-llms]" # All LLM platforms + +# With all optional dependencies (except video-full) +pip install -e ".[all]" + +# Full video processing (heavy dependencies) +pip install -e ".[video-full]" +``` + +Note: `tests/conftest.py` checks that `skill_seekers` is importable and calls `sys.exit(1)` if not. Always install in editable mode first. + +### Environment Variables + +Create a `.env` file or export these variables: +```bash +ANTHROPIC_API_KEY # For Claude AI enhancement +GOOGLE_API_KEY # For Gemini support +OPENAI_API_KEY # For OpenAI support +GITHUB_TOKEN # For GitHub repo scraping (higher rate limits) +``` + +## Build / Test / Lint + +```bash +# Full suite (never skip — all must pass) +pytest tests/ -v + +# Fast iteration (skip slow, integration, E2E, network, MCP) +pytest tests/ -m "not slow and not integration and not e2e and not network and not serial and not mcp_only" -q + +# Fast parallel (install pytest-xdist first) +pytest tests/ -n auto --dist=loadfile -m "not slow and not integration and not e2e and not network and not serial and not mcp_only" -q + +# 3-phase runner script (recommended for local dev) +bash scripts/run_tests_fast.sh + +# Single test +pytest tests/test_scraper_features.py::test_detect_language -v + +# Skip slow/integration +pytest tests/ -v -m "not slow and not integration" + +# With coverage +pytest tests/ --cov=src/skill_seekers --cov-report=term + +# Lint + format check (matches CI) +ruff check src/ tests/ +ruff format --check src/ tests/ + +# Type check (non-blocking — mypy is continue-on-error in CI) +mypy src/skill_seekers --show-error-codes --pretty +``` + +**Pytest config:** `asyncio_mode = "auto"`, so `@pytest.mark.asyncio` is implicit. Test markers: `slow`, `integration`, `e2e`, `venv`, `bootstrap`, `benchmark`, `asyncio`, `serial`, `network`, `mcp_only`. + +**CI note:** CI pins `ruff==0.15.8` (not the `>=0.14.13` dev dep). If formatting behaves differently locally, check the CI version. + +**CI test phases:** Tests are split into 3 parallel jobs: +- `test-fast` — 3386 unit tests with xdist across OS/Python matrix +- `test-serial` — 69 serial/integration/E2E/network tests +- `test-mcp` — 193 MCP tests (requires `[mcp]` extras) + +## Code Style + +### Formatting Rules (ruff — from pyproject.toml) +- **Line length:** 100 characters +- **Target Python:** 3.10+ +- **Enabled lint rules:** E, W, F, I, B, C4, UP, ARG, SIM +- **Ignored rules:** E501 (line length handled by formatter), F541 (f-string style), ARG002 (unused method args for interface compliance), B007 (intentional unused loop vars), I001 (formatter handles imports), SIM114 (readability preference) + +### Imports +- Sort with isort (via ruff); `skill_seekers` is first-party +- Standard library → third-party → first-party, separated by blank lines +- Use `from __future__ import annotations` only if needed for forward refs +- Guard optional imports with try/except ImportError (see `adaptors/__init__.py` pattern): + ```python + try: + from .claude import ClaudeAdaptor + from .minimax import MiniMaxAdaptor + except ImportError: + ClaudeAdaptor = None + MiniMaxAdaptor = None + ``` + +### Naming Conventions +- **Files:** `snake_case.py` (e.g., `source_detector.py`, `config_validator.py`) +- **Classes:** `PascalCase` (e.g., `SkillAdaptor`, `ClaudeAdaptor`, `SourceDetector`) +- **Functions/methods:** `snake_case` (e.g., `get_adaptor()`, `detect_language()`) +- **Constants:** `UPPER_CASE` (e.g., `ADAPTORS`, `DEFAULT_CHUNK_TOKENS`, `VALID_SOURCE_TYPES`) +- **Private:** prefix with `_` (e.g., `_read_existing_content()`, `_validate_unified()`) + +### Type Hints +- Gradual typing — add hints where practical, not enforced everywhere +- Use modern syntax: `str | None` not `Optional[str]`, `list[str]` not `List[str]` +- MyPy config: `disallow_untyped_defs = false`, `check_untyped_defs = true`, `ignore_missing_imports = true` +- Tests are excluded from strict type checking (`disallow_untyped_defs = false`, `check_untyped_defs = false` for `tests.*`) + +### Docstrings +- Module-level docstring on every file (triple-quoted, describes purpose) +- Google-style docstrings for public functions/classes +- Include `Args:`, `Returns:`, `Raises:` sections where useful + +### Error Handling +- Use specific exceptions, never bare `except:` +- Provide helpful error messages with context +- Use `raise ValueError(...)` for invalid arguments, `raise RuntimeError(...)` for state errors +- Guard optional dependency imports with try/except and give clear install instructions on failure +- Chain exceptions with `raise ... from e` when wrapping + +### Suppressing Lint Warnings +- Use inline `# noqa: XXXX` comments (e.g., `# noqa: F401` for re-exports, `# noqa: ARG001` for required but unused params) + +## Project Layout + +``` +src/skill_seekers/ # Main package (src/ layout) + cli/ # CLI commands and entry points (100+ files) + adaptors/ # Platform adaptors (Strategy pattern, inherit SkillAdaptor) + arguments/ # CLI argument definitions (one per source type) + parsers/ # Subcommand parsers (one per source type) + storage/ # Cloud storage (inherit BaseStorageAdaptor) + main.py # Unified CLI entry point (COMMAND_MODULES dict) + source_detector.py # Auto-detects source type from user input + create_command.py # Unified `create` command routing + config_validator.py # VALID_SOURCE_TYPES set + per-type validation + unified_scraper.py # Multi-source orchestrator (scraped_data + dispatch) + unified_skill_builder.py # Pairwise synthesis + generic merge + mcp/ # MCP server (FastMCP + legacy) + tools/ # MCP tool implementations by category (10 files) + server_fastmcp.py # FastMCP server implementation + server_legacy.py # Legacy MCP server + sync/ # Sync monitoring (Pydantic models) + benchmark/ # Benchmarking framework + embedding/ # FastAPI embedding server + workflows/ # 67 YAML workflow presets + _version.py # Reads version from pyproject.toml +tests/ # 160 test files (pytest) + test_adaptors/ # 22 adaptor-specific test files + conftest.py # Test configuration with package check +configs/ # Preset JSON scraping configs +docs/ # Documentation (guides, integrations, architecture) +``` + +## Key Patterns + +**Adaptor (Strategy) pattern** — all platform logic in `cli/adaptors/`. Inherit `SkillAdaptor`, implement `format_skill_md()`, `package()`, `upload()`. Register in `adaptors/__init__.py` ADAPTORS dict. + +**Scraper pattern** — each source type has: `cli/_scraper.py` (with `ToSkillConverter` class + `main()`), `arguments/.py`, `parsers/_parser.py`. Register in `parsers/__init__.py` PARSERS list, `main.py` COMMAND_MODULES dict, `config_validator.py` VALID_SOURCE_TYPES set. + +**Unified pipeline** — `unified_scraper.py` dispatches to per-type `_scrape_()` methods. `unified_skill_builder.py` uses pairwise synthesis for docs+github+pdf combos and `_generic_merge()` for all other combinations. + +**MCP tools** — grouped in `mcp/tools/` by category. `scrape_generic_tool` handles all new source types. + +**CLI subcommands** — git-style in `cli/main.py`. Each delegates to a module's `main()` function. + +**Supported source types (17):** documentation (web), github, pdf, local, word, video, epub, jupyter, html, openapi, asciidoc, pptx, confluence, notion, rss, manpage, chat. Each detected automatically by `source_detector.py`. + +**Supported platforms (21):** claude, gemini, openai, minimax, opencode, kimi, deepseek, qwen, openrouter, together, fireworks, markdown, langchain, llama-index, haystack, weaviate, chroma, faiss, qdrant, pinecone. + +## CLI Commands + +```bash +# Core commands +skill-seekers create # Create skill from any source (auto-detects type) +skill-seekers scan # AI-detect a project's tech stack and emit per-framework configs +skill-seekers enhance # AI-powered enhancement +skill-seekers package # Package skill for target platform +skill-seekers upload # Upload skill to target platform +skill-seekers install # One-command workflow (scrape + enhance + package + upload) + +# Utilities +skill-seekers estimate # Estimate page count before scraping +skill-seekers doctor # Health check for dependencies +skill-seekers config # Configure API keys and settings +skill-seekers workflows # List and apply workflow presets +skill-seekers resume # Resume interrupted scraping + +# Advanced +skill-seekers stream # Streaming ingestion +skill-seekers update # Incremental update +skill-seekers multilang # Multi-language support +``` + +## Testing Instructions + +### Test Structure +- Unit tests: `tests/test_*.py` — test individual modules +- Adaptor tests: `tests/test_adaptors/test_*_adaptor.py` — test platform adaptors +- E2E tests: `tests/test_*_e2e.py` — end-to-end integration tests + +### Running Tests +```bash +# Fast test run (skip slow/integration tests) +pytest tests/ -v -m "not slow and not integration" + +# Full test suite +pytest tests/ -v + +# With coverage report +pytest tests/ --cov=src/skill_seekers --cov-report=term-missing + +# Specific test categories +pytest tests/ -v -m "slow" # Only slow tests +pytest tests/ -v -m "integration" # Only integration tests +pytest tests/ -v -m "e2e" # Only E2E tests +``` + +### Test Fixtures +Test fixtures are located in `tests/fixtures/` and include sample configs, HTML files, and mock data. + +## Git Workflow + +- **`main`** — production, protected +- **`development`** — default PR target, active dev +- Feature branches created from `development` + +## Pre-commit Checklist + +```bash +ruff check src/ tests/ +ruff format --check src/ tests/ +pytest tests/ -v -x # stop on first failure +``` + +Never commit API keys. Use env vars: `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, `OPENAI_API_KEY`, `GITHUB_TOKEN`. + +## CI/CD + +GitHub Actions (7 workflows in `.github/workflows/`): +- **tests.yml** — ruff + mypy lint job, then pytest matrix (Ubuntu + macOS, Python 3.10-3.12) with Codecov upload +- **release.yml** — tag-triggered: tests → version verification → PyPI publish via `uv build` +- **test-vector-dbs.yml** — tests vector DB adaptors (weaviate, chroma, faiss, qdrant) +- **docker-publish.yml** — multi-platform Docker builds (amd64, arm64) for CLI + MCP images +- **quality-metrics.yml** — quality analysis with configurable threshold +- **scheduled-updates.yml** — weekly skill updates for popular frameworks +- **vector-db-export.yml** — weekly vector DB exports + +## Deployment + +### Docker +Multi-stage Dockerfile with Python 3.12 slim base: +```bash +# Build image +docker build -t skill-seekers . + +# Run CLI +docker run -v $(pwd)/output:/output skill-seekers create https://docs.example.com + +# Run MCP server +docker run -p 8765:8765 skill-seekers skill-seekers-mcp +``` + +### MCP Server +The MCP server provides Model Context Protocol integration: +```bash +# Start FastMCP server +skill-seekers-mcp + +# Or use the Python module +python -m skill_seekers.mcp.server_fastmcp +``` + +## Security Considerations + +- **API Keys:** Never commit API keys to version control. Use environment variables or `.env` files (already in `.gitignore`) +- **Docker:** Runs as non-root user (`skillseeker`, UID 1000) +- **Dependencies:** Regular security updates via `pip audit` or `safety check` +- **Sandboxing:** Video processing uses optional dependencies that can be heavy; install `[video-full]` only when needed + +## Additional Resources + +- **Website:** https://skillseekersweb.com/ +- **Documentation:** https://skillseekersweb.com/ +- **PyPI:** https://pypi.org/project/skill-seekers/ +- **Repository:** https://github.com/yusufkaraaslan/Skill_Seekers +- **Config Browser:** https://skillseekersweb.com/ +- **Project Board:** https://github.com/users/yusufkaraaslan/projects/2 diff --git a/BULLETPROOF_QUICKSTART.md b/BULLETPROOF_QUICKSTART.md new file mode 100644 index 0000000..45045b4 --- /dev/null +++ b/BULLETPROOF_QUICKSTART.md @@ -0,0 +1,617 @@ +# Bulletproof Quick Start Guide + +**Target Audience:** Complete beginners | Never used Python/git before? Start here! + +**Time:** 15-30 minutes total (including all installations) + +**Result:** Working Skill Seeker installation + your first Claude skill created + +--- + +## 📋 What You'll Need + +Before starting, you need: +- A computer (macOS, Linux, or Windows with WSL) +- Internet connection +- 30 minutes of time + +That's it! We'll install everything else together. + +--- + +## Step 1: Install Python (5 minutes) + +### Check if You Already Have Python + +Open Terminal (macOS/Linux) or Command Prompt (Windows) and type: + +```bash +python3 --version +``` + +**✅ If you see:** `Python 3.10.x` or `Python 3.11.x` or higher → **Skip to Step 2!** + +**⌠If you see:** `command not found` or version less than 3.10 → **Continue below** + +### Install Python + +#### macOS: +```bash +# Install Homebrew (if not installed) +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +# Install Python +brew install python3 +``` + +**Verify:** +```bash +python3 --version +# Should show: Python 3.11.x or similar +``` + +#### Linux (Ubuntu/Debian): +```bash +sudo apt update +sudo apt install python3 python3-pip +``` + +**Verify:** +```bash +python3 --version +pip3 --version +``` + +#### Windows: +1. Download Python from: https://www.python.org/downloads/ +2. Run installer +3. **IMPORTANT:** Check "Add Python to PATH" during installation +4. Open Command Prompt and verify: +```bash +python --version +``` + +**✅ Success looks like:** +``` +Python 3.11.5 +``` + +--- + +## Step 2: Install Git (3 minutes) + +### Check if You Have Git + +```bash +git --version +``` + +**✅ If you see:** `git version 2.x.x` → **Skip to Step 3!** + +**⌠If not installed:** + +#### macOS: +```bash +brew install git +``` + +#### Linux: +```bash +sudo apt install git +``` + +#### Windows: +Download from: https://git-scm.com/download/win + +**Verify:** +```bash +git --version +# Should show: git version 2.x.x +``` + +--- + +## Step 3: Get Skill Seeker (2 minutes) + +### Choose Where to Put It + +Pick a location for the project. Good choices: +- macOS/Linux: `~/Projects/` or `~/Documents/` + - Note: `~` means your home directory (`$HOME` or `/Users/yourname` on macOS, `/home/yourname` on Linux) +- Windows: `C:\Users\YourName\Projects\` + +### Clone the Repository + +```bash +# Create Projects directory (if it doesn't exist) +mkdir -p ~/Projects +cd ~/Projects + +# Clone Skill Seeker +git clone https://github.com/yusufkaraaslan/Skill_Seekers.git + +# Enter the directory +cd Skill_Seekers +``` + +**✅ Success looks like:** +``` +Cloning into 'Skill_Seekers'... +remote: Enumerating objects: 245, done. +remote: Counting objects: 100% (245/245), done. +``` + +**Verify you're in the right place:** +```bash +pwd +# Should show something like: +# macOS: /Users/yourname/Projects/Skill_Seekers +# Linux: /home/yourname/Projects/Skill_Seekers +# (Replace 'yourname' with YOUR actual username) + +ls +# Should show: README.md, cli/, mcp/, configs/, etc. +``` + +**⌠If `git clone` fails:** +```bash +# Check internet connection +ping google.com + +# Or download ZIP manually: +# https://github.com/yusufkaraaslan/Skill_Seekers/archive/refs/heads/main.zip +# Then unzip and cd into it +``` + +--- + +## Step 4: Setup Virtual Environment & Install Skill Seekers (3 minutes) + +A virtual environment keeps Skill Seeker's dependencies isolated and prevents conflicts. + +```bash +# Make sure you're in the Skill_Seekers directory +cd ~/Projects/Skill_Seekers # ~ means your home directory ($HOME) + # Adjust if you chose a different location + +# Create virtual environment +python3 -m venv venv + +# Activate it +source venv/bin/activate # macOS/Linux +# Windows users: venv\Scripts\activate +``` + +**✅ Success looks like:** +``` +(venv) username@computer Skill_Seekers % +``` +Notice `(venv)` appears in your prompt - this means the virtual environment is active! + +```bash +# Now install Skill Seekers package (this installs all dependencies automatically) +pip install -e . +``` + +**✅ Success looks like:** +``` +Successfully installed skill-seekers-2.7.4 requests-2.32.5 beautifulsoup4-4.14.2 anthropic-0.76.0 ... +Obtaining file:///path/to/Skill_Seekers +Installing collected packages: skill-seekers +Successfully installed skill-seekers +``` + +**What just happened?** +- `pip install -e .` installs the package in "editable" mode +- The `.` means "current directory" (where pyproject.toml is) +- This automatically installs ALL required dependencies +- This registers the `skill-seekers` command so you can use it from anywhere +- The `-e` flag means changes to the code take effect immediately (useful for development) + +**Important Notes:** +- **Every time** you open a new terminal to use Skill Seeker, run `source venv/bin/activate` first (Windows: `venv\Scripts\activate`) +- You'll know it's active when you see `(venv)` in your terminal prompt +- To deactivate later: just type `deactivate` + +**⌠If python3 not found:** +```bash +# Try without the 3 +python -m venv venv +``` + +**⌠If permission denied:** +```bash +# Virtual environment approach doesn't need sudo - you might have the wrong path +# Make sure you're in the Skill_Seekers directory: +pwd +# Should show something like: +# macOS: /Users/yourname/Projects/Skill_Seekers +# Linux: /home/yourname/Projects/Skill_Seekers +# (Replace 'yourname' with YOUR actual username) +``` + +**⌠If "pip: command not found":** +```bash +# Try with python -m pip instead +python3 -m pip install -e . +``` + +--- + +## Step 5: Test Your Installation (1 minute) + +Let's make sure everything works: + +```bash +# Test the CLI is installed correctly +skill-seekers create --help +``` + +**✅ Success looks like:** +``` +usage: skill-seekers create [-h] ... +``` + +**⌠If you see "command not found":** +```bash +# Ensure the package is installed +pip install -e . + +# Verify installation +skill-seekers --version +``` + +--- + +## Step 6: Create Your First Skill! (5-10 minutes) + +Let's create a simple skill using a preset configuration. + +### Option A: Small Test (Recommended First Time) + +```bash +# Create a config for a small site first +cat > configs/test.json << 'EOF' +{ + "name": "test-skill", + "description": "Test skill creation", + "base_url": "https://tailwindcss.com/docs/installation", + "selectors": { + "main_content": "#content-wrapper", + "title": "h1, h2, h3", + "code_blocks": "pre code" + }, + "max_pages": 5, + "rate_limit": 0.5 +} +EOF + +# Run the scraper +skill-seekers create --config configs/test.json +``` + +**Note for Windows users:** The `cat > file << 'EOF'` syntax doesn't work in PowerShell. Instead, create the file manually: + +```powershell +# In PowerShell, create configs/test.json with this content: +@" +{ + "name": "test-skill", + "description": "Test skill creation", + "base_url": "https://tailwindcss.com/docs/installation", + "selectors": { + "main_content": "#content-wrapper", + "title": "h1, h2, h3", + "code_blocks": "pre code" + }, + "max_pages": 5, + "rate_limit": 0.5 +} +"@ | Out-File -FilePath configs/test.json -Encoding utf8 + +# Then run the scraper +skill-seekers create --config configs/test.json +``` + +**What happens:** +1. Scrapes 5 pages from Tailwind CSS docs +2. Creates `output/test-skill/` directory +3. Generates SKILL.md and reference files + +**â±ï¸ Time:** ~30 seconds + +**✅ Success looks like:** +``` +Scraping: https://tailwindcss.com/docs/installation +Page 1/5: Installation +Page 2/5: Editor Setup +... +✅ Skill created at: output/test-skill/ +``` + +### Option B: Full Example (React Docs) + +```bash +# Use the React preset +skill-seekers create --config configs/react.json --max-pages 50 +``` + +**â±ï¸ Time:** ~5 minutes + +**What you get:** +- `output/react/SKILL.md` - Main skill file +- `output/react/references/` - Organized documentation + +### Verify It Worked + +```bash +# Check the output +ls output/test-skill/ +# Should show: SKILL.md, references/, scripts/, assets/ + +# Look at the generated skill +head output/test-skill/SKILL.md +``` + +--- + +## Step 7: Package for Claude (30 seconds) + +```bash +# Package the skill +skill-seekers package output/test-skill/ +``` + +**✅ Success looks like:** +``` +✅ Skill packaged successfully! +📦 Created: output/test-skill.zip +📠Size: 45.2 KB + +Ready to upload to Claude AI! +``` + +**Now you have:** `output/test-skill.zip` ready to upload to Claude! + +--- + +## Step 8: Upload to Claude (2 minutes) + +1. Go to https://claude.ai +2. Click your profile → Settings +3. Click "Knowledge" or "Skills" +4. Click "Upload Skill" +5. Select `output/test-skill.zip` +6. Done! Claude can now use this skill + +--- + +## 🎉 Success! What's Next? + +You now have a working Skill Seeker installation! Here's what you can do: + +### Try Other Presets + +```bash +# See all available presets +ls configs/ + +# Try Vue.js +skill-seekers create --config configs/vue.json --max-pages 50 + +# Try Django +skill-seekers create --config configs/django.json --max-pages 50 +``` + +### Try Other Source Types (17 Supported!) + +```bash +# Auto-detect source type with the `create` command +skill-seekers create https://docs.example.com # Documentation +skill-seekers create facebook/react # GitHub repo +skill-seekers create manual.pdf # PDF +skill-seekers create report.docx # Word document +skill-seekers create book.epub # EPUB book +skill-seekers create analysis.ipynb # Jupyter Notebook +skill-seekers create spec.yaml # OpenAPI/Swagger spec +skill-seekers create slides.pptx # PowerPoint + +# More source types +skill-seekers create --video-url https://youtube.com/watch?v=abc # Video +skill-seekers create --space-key DOCS # Confluence wiki +skill-seekers create --database-id DB_ID # Notion +skill-seekers create feed.rss # RSS feed +skill-seekers create grep.1 # Man page +skill-seekers create --chat-export-path ./slack-export # Slack/Discord +``` + +### Create Custom Skills + +```bash +# Interactive mode - answer questions +skill-seekers create --interactive + +# Or create config for any website +skill-seekers scrape \ + --name myframework \ + --url https://docs.myframework.com/ \ + --description "My favorite framework" +``` + +### Where to Save Custom Configs + +You have three options for placing your custom config files: + +**Option 1: User Config Directory (Recommended)** + +```bash +# Create config in your home directory +mkdir -p ~/.config/skill-seekers/configs +cat > ~/.config/skill-seekers/configs/myproject.json << 'EOF' +{ + "name": "myproject", + "base_url": "https://docs.myproject.com/", + "max_pages": 50 +} +EOF + +# Use it +skill-seekers create --config myproject.json +``` + +**Option 2: Current Directory (Project-Specific)** + +```bash +# Create config in your project +mkdir -p configs +nano configs/myproject.json + +# Use it +skill-seekers create --config configs/myproject.json +``` + +**Option 3: Absolute Path** + +```bash +# Use any file path +skill-seekers create --config /full/path/to/config.json +``` + +The tool searches in this order: exact path → `./configs/` → `~/.config/skill-seekers/configs/` → API presets + +### Use with Claude Code (Advanced) + +If you have Claude Code installed: + +```bash +# One-time setup +./setup_mcp.sh + +# Then use natural language in Claude Code: +# "Generate a skill for Svelte docs" +# "Package the skill at output/svelte/" +``` + +**See:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) for full MCP setup + +--- + +## 🔧 Troubleshooting + +### "Command not found" errors + +**Problem:** `python3: command not found` + +**Solution:** Python not installed or not in PATH +- macOS/Linux: Reinstall Python with brew/apt +- Windows: Reinstall Python, check "Add to PATH" +- Try `python` instead of `python3` + +### "Permission denied" errors + +**Problem:** Can't install packages + +**Solution:** +```bash +# Use --user flag for pip +pip3 install --user skill-seekers + +# Or use a virtual environment (recommended) +python3 -m venv .venv +source .venv/bin/activate +pip install -e . +``` + +### "No such file or directory" + +**Problem:** CLI not found or config file path incorrect + +**Solution:** Ensure you're using the CLI command correctly +```bash +# Verify installation +skill-seekers --version +# Should show version 3.6.0+ + +# Verify config file exists at expected path +ls configs/ +``` + +### "ModuleNotFoundError" or "command not found: skill-seekers" + +**Problem:** Package not installed or virtual environment not activated + +**Solution:** +```bash +# Install the package in editable mode +pip install -e . + +# Or if you need dev tools +pip install -e ".[dev]" +``` + +### Scraping is slow or fails + +**Problem:** Takes forever or gets errors + +**Solution:** +```bash +# Use smaller max_pages for testing +skill-seekers create --config configs/react.json --max-pages 10 + +# Check internet connection +ping google.com + +# Check the website is accessible +curl -I https://docs.yoursite.com +``` + +### Still stuck? + +1. **Check our detailed troubleshooting guide:** [TROUBLESHOOTING.md](TROUBLESHOOTING.md) +2. **Open an issue:** https://github.com/yusufkaraaslan/Skill_Seekers/issues +3. **Include this info:** + - Operating system (macOS 13, Ubuntu 22.04, Windows 11, etc.) + - Python version (`python3 --version`) + - Full error message + - What command you ran + +--- + +## 📚 Next Steps + +- **Read the full README:** [README.md](README.md) +- **Learn about presets:** [configs/](configs/) +- **Try MCP integration:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) +- **Advanced usage:** [docs/](docs/) + +--- + +## ✅ Quick Reference + +```bash +# Your typical workflow: + +# 1. Create/use a config +skill-seekers create --config configs/react.json --max-pages 50 + +# 2. Package it +skill-seekers package output/react/ + +# 3. Upload output/react.zip to Claude + +# Done! 🎉 +``` + +**Common locations:** +- **Configs:** `configs/*.json` +- **Output:** `output/skill-name/` +- **Packaged skills:** `output/skill-name.zip` + +**Time estimates:** +- Small skill (5-10 pages): 30 seconds +- Medium skill (50-100 pages): 3-5 minutes +- Large skill (500+ pages): 15-30 minutes + +--- + +**Still confused?** That's okay! Open an issue and we'll help you get started: https://github.com/yusufkaraaslan/Skill_Seekers/issues/new diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..edc171a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3293 @@ +# Changelog + +All notable changes to Skill Seeker will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +_Development version: 3.9.0.dev0_ + +### Fixed +- **Unified multi-source `skip_scrape` now rebuilds from cache** — `UnifiedScraper` reloads each configured source from `.skillseeker-cache`/cached extraction files before conflict detection and build, so cached unified configs no longer re-scrape the network (#405). + +## [3.8.0] - 2026-06-15 + +**Theme:** The Grand Unification refactor (one build pipeline, one AI transport, one parser definition, in-process MCP tools — see `docs/UNIFICATION_PLAN.md`) with a 13-bug audit fix-up and a real-world end-to-end CLI testing pass — plus MiniMax-M3, model selection, registry-driven platform targets, a Windows subprocess fix, and codebase de-duplication. + +### Fixed +- **Codebase skills built from a config no longer drop the API reference + dependency graph** — the local source carried `api_reference` and `dependency_graph`, but the unified builder never wrote them out, so a skill built from a scan-emitted `*-codebase.json` shipped without its API reference (it was stranded in the scrape cache). Both are now promoted into `references/codebase_analysis//` and linked from the index. +- **`create ./path` defaults to deep analysis** — local codebase create defaulted to `surface` depth, producing an empty `code_analysis.json` and a misleading "analyzed 0 files" log; it now defaults to `deep` (matching the scraper default and the scan-config path), with an explicit `--depth` still taking precedence. +- **`package` works non-interactively** — the quality-gate prompt raised `EOFError` when stdin wasn't a TTY (CI/pipes); it now auto-proceeds on a non-TTY or with the new `--yes`/`-y` flag, while an interactive terminal still prompts. +- **`quality` prints the score** — the standalone command saved `quality_report.json` but printed nothing; it now shows the score/grade summary, and the report serializes metric levels as `"info"`/`"warning"` instead of the Python enum repr `"MetricLevel.INFO"`. +- **`doctor` no longer miscounts `GITHUB_TOKEN` as an AI provider key** — the API-keys check now names which keys are set, so a bare GitHub token isn't misread as a provider key being configured. +- **`estimate ` gives an actionable error** — passing a URL (which `create` accepts) printed a bare "Config file not found"; it now explains that `estimate` takes a config file and points at `create --dry-run`, and exits non-zero. +- **Web sitemap discovery fails fast on unreachable hosts** — the pre-crawl sitemap probes used a single scalar timeout; they now use a `(connect, read)` timeout so an unreachable host doesn't block the full window before the crawl starts. +- **Fork-bomb guard covers the primary LOCAL enhance path** — `_run_agent_command` now marks `SKILL_SEEKER_ENHANCE_ACTIVE` in the spawned agent's environment (including terminal-mode scripts) and `run()` refuses nested spawns, so a local agent enhancing a skill can no longer recursively launch enhancement. +- **`--dry-run` and `--output` honored for unified configs** — `create` skipped injecting both into `UnifiedScraper` (every other source type got them); dry-run now previews and returns without creating directories, for legacy and unified configs alike. +- **Trailing-slash `--output` no longer leaks intermediates into the packaged skill** — `SkillConverter` resolves `skill_dir` once and strips trailing separators, so `--output out/x/` can't place `_extracted.json` inside the skill directory. +- **snake_case config classification** — `config_extractor._path_has_word` used `\b`, which never matches inside snake_case names (`app_db.yaml`); explicit lookarounds fix detection while keeping dbeaver/blog false positives excluded. +- **How-to guides no longer come out empty for control-flow-wrapped tests** — step extraction recursively descends `with`/`for`/`if`/`try` blocks in source order, and empty AST results fall back to the heuristic instead of emitting empty guides. +- **Slack 429 retry exhaustion logs a truncation warning** (matching the Discord path) instead of silently breaking pagination. +- **Kimi CLI output parsing no longer swallows unknown records** — record boundary is any CamelCase constructor, so new record types (`ToolCallPart`, …) can't leak internals into extracted text. +- **`scan` re-runs no longer churn `.archived/`** — canonical-named files fetched into the out-dir are removed after copying to the slug target, eliminating phantom "removed" diffs on every re-scan. +- **Dry-run page estimates dedupe `utm_*` variants** — `_enqueue_url` normalizes tracking params the same way the real crawl does. +- **MCP per-page diagnostics from worker threads are no longer dropped** — contextvars are propagated into `ThreadPoolExecutor` workers (doc scraper, PDF extractor, enhancers, video visual), so the per-call log capture sees them. +- **Gemini/OpenAI adaptor enhancement gained the truncation gate and atomic save** — both adaptors previously accepted truncated AI output and used a destructive rename-then-write save (a failed write left no SKILL.md); all adaptors now share one enhance flow with central truncation detection and backup+atomic-replace (`enhance_skill`'s save path fixed the same way). +- **MCP `extract_config_patterns` tool works** — it passed flags `config_extractor`'s parser rejects, so it failed on every invocation; now mapped to the real flags and pinned by a regression test. +- **Unified-CLI flags that were silently rejected now work** — `estimate --unlimited/--timeout`, `update --generate-package/--apply-update`, `quality --output`, `stream --streaming-overlap-chars/--batch-size/--checkpoint`, `multilang --report/--export`, `install --target`, and `extract-test-examples --recursive` were accepted by the standalone modules but rejected with "unrecognized arguments" by `skill-seekers ` (central-parser drift). A programmatic drift-guard test now fails CI if any module flag is missing from its central parser. +- **Windows: large subprocess output no longer freezes MCP tools** (#397) — `run_subprocess_with_streaming` replaced its `select()`-based polling loop (unsupported on Windows pipes) with reader threads, and now bounds the timeout reliably. Previously `scrape_docs`/`scrape_github` and other tools could deadlock on a full (>64 KB) pipe buffer on Windows. The fix is applied to the single shared implementation, so all callers benefit. + +### Changed +- **`quality --threshold` defaults to `None`** — without it, `quality` is report-only and keeps the historical exit-0 contract; the quality gate (non-zero exit below the score) fires only when `--threshold` is explicitly given. +- **All enhancement API calls go through `AgentClient`** — one transport with a consistent truncation gate, timeout policy, and error classification. `ANTHROPIC_BASE_URL`, per-provider model overrides (`ANTHROPIC_MODEL`/`GOOGLE_MODEL`/`OPENAI_MODEL`/`MOONSHOT_MODEL`), and the global `SKILL_SEEKER_MODEL` / `SKILL_SEEKER_PROVIDER` overrides are now honored everywhere. API-key auto-detection follows the `API_PROVIDERS` registry order (Anthropic → Google → OpenAI → Moonshot). `video_visual` frame classification is the documented multimodal exception. +- **MCP tools run in-process** — `estimate_pages`, `detect_patterns`, `extract_test_examples`, `extract_config_patterns`, `build_how_to_guides`, `split_config`, `generate_router`, `package_skill`, and `upload_skill` call the real CLI `main()` via a shared `run_cli_main()` helper instead of spawning subprocesses (faster startup, identical output contract; former hard subprocess timeouts become advisory). `enhance_skill` (LOCAL agent) and `install_skill`'s enhancement step stay subprocess **by design** (fork-bomb-guard semantics). +- **Platform `--target` choices are derived from the adaptor registry** (#400) — `enhance`, `upload`, `package`, and `install` now compute their choices from `get_enhancement_platforms()` / `get_upload_platforms()` / `list_platforms()` instead of hand-maintained lists, so newly registered adaptors appear automatically and the lists can no longer drift. Non-breaking (each new list is a superset of the old). + +### Added +- **`stream --output`** — collected chunks are written as JSON (the flag existed in the central parser but chunks were processed and dropped). +- **`multilang --languages`** — restricts `--detect`/`--export` to the given languages (previously a central-parser fiction). +- **`skill_seekers.services` package** — `marketplace_manager`, `marketplace_publisher`, `config_publisher`, `source_manager`, and `git_repo` moved out of `mcp/` so the CLI can import this domain logic without the optional `[mcp]` extra. Back-compat shims remain at the old `skill_seekers.mcp.*` paths. +- **`get_converter("config", {...})`** — `UnifiedScraper` now accepts the factory-shaped config dict, so unified configs construct through the same factory as every other source type (legacy positional construction still supported). +- **`cli/exit_codes.py`** — standard exit-code constants (`EXIT_SUCCESS`/`EXIT_ERROR`/`EXIT_VALIDATION`/`EXIT_INTERRUPT`). +- **`--model` flag for `enhance` and `package`** (#395, #398) — override the platform's default model, e.g. `skill-seekers enhance output/react/ --target minimax --model MiniMax-M2.7` or `skill-seekers package output/react/ --target minimax --model MiniMax-M2.7`. Honored uniformly across all enhancement adaptors and recorded in package metadata. Resurrects the previously-dead `custom_model` config key. +- **MiniMax-M3 is the new default MiniMax model** (#395) — fresh `--target minimax` runs use M3; the previous-generation M2.7 remains selectable via `--model`. Docs (`MINIMAX_INTEGRATION.md`, `MULTI_LLM_SUPPORT.md`) refreshed. +- **More enhancement targets** (#395) — `enhance --target` now accepts every enhancement-capable adaptor (adds `minimax`, `deepseek`, `qwen`, `openrouter`, `together`, `fireworks`); previously only `claude`/`gemini`/`openai`/`kimi` were reachable. +- **More upload targets + `supports_upload()` capability** (#400) — `upload --target` now accepts every adaptor with a real upload, adding `minimax`, `deepseek`, `qwen`, `openrouter`, `together`, `fireworks`, and `pinecone`. New `supports_upload()` adaptor method and `get_upload_platforms()` helper. + +### Internal +- **`DocumentSkillBuilder`** — the build side of all 9 document scrapers (epub, word, pptx, html, pdf, jupyter, man, rss, chat) now lives once in `cli/document_skill_builder.py` (net −1,859 lines across the scrapers). Every port is byte-identical, proven by golden trees in `tests/golden/phase2/` (`UPDATE_GOLDENS=1` refreshes them — only on purpose). +- **`UnifiedScraper` dispatch table + shared engine** — `scrape_all_sources()` routes through a class-level `SOURCE_DISPATCH` table and `_scrape_with_converter()` handles the 13 mechanical source types through the public `get_converter()`/`extract()` interface (−280 lines); new converter types registered in `CONVERTER_REGISTRY` work in unified configs automatically. +- **Single-definition CLI parsers** — the central `SubcommandParser` classes in `cli/parsers/` are now the only definition of each command's flags; standalone `main(args=None)` paths build their parser from the central class, and a drift-guard test asserts identical dests/defaults/option strings. +- **`ExecutionContext.override()` is contextvars-based** — concurrent threads/asyncio tasks (the MCP server) can no longer clobber each other's overrides; nested overrides stack and unwind; exceptions restore. +- **One home for agent/provider registries and batching** — `AGENT_PRESETS` and `API_PROVIDERS` live only in `agent_client.py` (a silently-diverged duplicate kimi preset is gone); `cli/parallel_batches.py:run_batches_parallel()` replaces three duplicated `ThreadPoolExecutor` blocks. +- **Import hygiene** — all seven `sys.path.insert` hacks in `mcp/` removed in favor of absolute `skill_seekers.*` imports; no more dual module identities. +- **Performance** — incremental Kotlin brace-depth tracking (was O(n²) prefix scans) and index-based class-body scans in `code_analyzer`, per-build memoization of import resolution in `dependency_analyzer`, GitHub `per_page` restored to `min(max_count, 100)`. +- **De-duplicated copy-pasted code into shared modules** — `mcp/tools/subprocess_utils.py` (the streaming subprocess helper, #397), `mcp/tools/_common.py` (`TextContent` fallback + `CLI_DIR`, #401), and `cli/scraper_utils.py` (`score_code_quality` + `extract_table_from_html`, #402). Behavior preserved (parity-tested); ~hundreds of duplicated lines removed. + +## [3.7.0] - 2026-05-30 + +**Theme:** AI-driven project knowledge base (`skill-seekers scan`) — bootstrap a complete skill set for a project in one command, with safety/observability/coverage hardening throughout. + +### Added +- **`skill-seekers scan ` command** (#327) — point at any project; an AI agent inspects manifests, README, Dockerfile/CI, sampled source files (first 2 KB each), and the git remote, then emits one Skill Seekers config per detected framework plus a `-codebase.json` for the project's own code. Each config stamped with `metadata.detected_version` so re-scans report added / version-bumped / removed dependencies. Internationalized canonical-name resolver (CJK + EU language suffixes) so detections like "Godot 引擎" resolve `godot`. Out-dir cache means re-scans reuse prior emissions and respect manual edits. Doctor-style report with pluralized counts and resolved / AI-generated / unresolved / archived breakdown. +- **Coverage**: scan recognizes ~50 manifest types (Pipfile, environment.yml, deno.json, flake.nix, Chart.yaml, stack.yaml, deps.edn, dune-project, BUILD.bazel, …) and walks `src/lib/app/cmd/crates/packages/apps/services/backend/frontend` plus root-level files (catches Django, flat-layout Python, Go, Rust workspaces, JS monorepos). +- **Cost + safety flags**: `--max-ai-generations N` (default 10) caps unbounded AI generation for monorepos; `--dry-run` previews what would be emitted without writing or invoking AI; `--probe-urls` HEAD-probes AI-generated URLs with retry-on-404; `--no-fetch` / `--no-generate` / `--no-publish-prompt` for offline / CI use. +- **Community submission** (opt-in): freshly AI-generated configs can be submitted to the [community registry](https://github.com/yusufkaraaslan/skill-seekers-configs) via a native-async flow. Pre-checks `GITHUB_TOKEN`, idempotency-guards against duplicate issues, retries transient failures with backoff. +- **Archival**: configs that disappear from detections are moved (not deleted) to `out_dir/.archived//` so the user never loses hand-edited work and `out_dir` stays clean. +- **Docs**: new `docs/getting-started/05-scan-a-project.md`; entries in README, FAQ, CLI Reference, Feature Matrix, Config Format, Environment Variables, and the Quick Start cross-link. + +### Changed +- **CLI dispatch unified** (#327) — `scan` and `doctor` now consume the parsed-args namespace directly via `Command(args).execute()` instead of building a second `argparse.ArgumentParser`. Eliminates the `_reconstruct_argv` hack for these commands; remaining ~14 commands flagged for migration. +- **Config schema**: `detected_version` lives under `metadata.detected_version` (alongside `metadata.version` for the config-schema version) rather than at top level. Backwards-compatible reader; old top-level placements migrate on next stamp. +- **`SourceDetector.CODE_PROJECT_MARKERS`** is now public (was `_CODE_PROJECT_MARKERS`); cross-module callers no longer reach into a private attribute. + +### Fixed +- **Correctness** (#327) — diff layer keyed by stable filename slug instead of internal config name (eliminates phantom add/remove churn); `resolve_config_path` lookups now append `.json` so local-disk + user-dir paths actually find files; out-dir cache prevents redundant API/AI calls on re-scan; lowercase filename slugs prevent duplicate-file accumulation across runs. +- **Safety** (#327) — atomic JSON writes via `os.replace` so SIGINT mid-write can't corrupt a config and silently flip it to "removed" on the next scan; `_safe_size` guards `stat()` so a broken symlink in `src/` no longer crashes the scan; `AgentClient.call` exceptions caught and logged; AI-generated config names rejected if they fail the registry regex; URL probe catches AI hallucinations of `base_url` before writing. +- **Observability** (#327) — `logging.basicConfig` in scan so `logger.warning`/`error` reaches the user (was silently dropped); non-zero exit code when no configs and no codebase config were emitted, so CI pipelines detect total-failure scans. +- **Publish flow** (#327) — native async (`asyncio.run` at single entry, `asyncio.to_thread` for `input()`); pre-check `GITHUB_TOKEN` with actionable hint instead of asking N "yes/no" questions and failing N times; idempotency check (search existing open issues) prevents duplicate submissions; retry with backoff on transient failures; nested-event-loop detection with clear message instead of opaque traceback. + +## [3.6.0] - 2026-05-03 + +**Theme:** Quality-of-life release — packaging targets, GitHub issue workflow, codebase analysis fixes, and source detection hardening. + +### Added +- **IBM Bob packaging target** — new `--target bob` adaptor and agent install support for IBM's Bob agent platform (#366) +- **GitHub issue filtering** — `--github-issue-state`, `--github-issue-labels`, and `--github-issue-since` filters in the GitHub scraper for narrowing which issues are pulled (#367) +- **Per-issue files** — GitHub scraper now writes one Markdown file per issue instead of a single bundle, improving navigation and downstream chunking (#367) +- **Pinecone frontmatter** — Pinecone vector exports now include consistent YAML frontmatter for metadata round-tripping (#367) + +### Fixed +- **Unified scraper now generates `codebase_analysis/` index** — local sources were producing C3.x outputs with broken SKILL.md links; the unified skill builder now wires up the index and resolves links correctly (#362, #376) +- **Guides fallback fires correctly** — `unified_skill_builder` was emitting a truthy placeholder for empty guides which suppressed the fallback content; placeholder removed (#364, #375) +- **HTML URLs no longer treated as local files** — `source_detector` now checks for `http(s)://` before falling through to the local-path branch, fixing false-positive routing (#373) +- **PDF extracted images appear in markdown** — `pdf_scraper` now inserts `![](…)` references for images extracted from PDFs so they render in the generated SKILL.md (#369) +- **C3.x output for local sources** — `unified` command was skipping the C3.x analysis pipeline for local codebase sources; now emits the full pattern/test/guide/config/router output (#363, #372) +- **Language filter passed to C3.x clone analysis** — repos cloned for analysis now respect `--languages` instead of analyzing every file (fixes #361, #370) +- **Unity vs Unreal detection** — Unity projects with C# imports were being misidentified as Unreal; detection now keys on C# import patterns (fixes #365, #368) + +## [3.5.1] - 2026-04-12 + +### Added +- **Centralized `defaults.json` config** — single source of truth for all default values (`rate_limit`, `max_pages`, `workers`, `async_mode`, enhancement, analysis, RAG settings). New `defaults.py` loader module. All 15+ files that previously hardcoded defaults now read from this file (#356) +- **Low-signal code snippet filtering** — `_is_low_signal_code_snippet()` filters junk patterns like bare `True`, `options`, single identifiers from quick references (#360) +- **Pattern description normalization** — `_normalize_pattern_description()` cleans boilerplate prefixes and truncates to first meaningful sentence (#360) +- **Example language priority ranking** — `_example_language_priority()` ranks Python > Bash > JSON > etc. for SKILL.md examples (#360) +- **`checkpoint_exists()` method** on `DocToSkillConverter` — was called but never defined (#360) +- **Unified config source normalization** — `DocToSkillConverter.__init__` merges fields from `sources[0]` into flat config for compatibility (#360) +- **`display_name` support** in SKILL.md generation — produces cleaner titles and slugs (#360) +- **New tests**: `test_doc_scraper_entrypoint.py` (regression for `_run_scraping`), quick-reference quality tests, docs-only compatibility tests, nested reference coverage tests (#360) + +### Changed +- **`max_pages` default is now unlimited (`-1`)** — the scraper fetches all pages unless the user explicitly sets `--max-pages`. Previously defaulted to 500 (#356) +- **`--no-rate-limit` flag now works** — was defined in CLI arguments but never consumed by `ExecutionContext` (#356) +- **`constants.py` reads from `defaults.json`** — no longer contains hardcoded magic numbers (#356) +- **`ExecutionContext.ScrapingSettings`** — `rate_limit` and `max_pages` now use real defaults instead of `None`, preventing None-poisoning downstream (#356) +- **SKILL.md frontmatter cleanup** — empty `doc_version:` and `version:` fields are now omitted; placeholder sections removed (#360) +- **Enhancement routing through platform adaptors** instead of importing nonexistent `enhance_skill_md` helper (#360) +- **`quality_metrics.py` uses `rglob`** for nested reference directories in unified skills (#360) + +### Fixed +- **`TypeError: '>' not supported between instances of 'NoneType' and 'int'`** — `rate_limit` defaulted to `None` in `ExecutionContext`, which flowed through `config.get("rate_limit", DEFAULT)` (dict.get returns None when the key exists with value None, ignoring the fallback). Fixed in `doc_scraper.py` (sync + async paths), `estimate_pages.py`, and `sync_config.py` (#356, #359) +- **`discover_urls()` loop never executed with unlimited `max_pages`** — `len(discovered) < -1` is always False. Added unlimited mode guard (#356) +- **`converter.scrape()` called nonexistent method** in `_run_scraping()` — changed to `converter.scrape_all()` (#360) +- **None-safety for BeautifulSoup attributes** — `link["href"]`, `sitemap.text`, `meta_desc["content"]` guarded against None XML text nodes (#360) +- **Python 3.10 compatibility** — backslash in f-string in `quality_metrics.py` not supported before 3.12 (#360) + +## [3.5.0] - 2026-04-09 + +**Theme:** Grand Unification — one command, one interface, direct converters. Agent-agnostic architecture, marketplace pipeline, smart SPA discovery, all content extraction enabled by default. 80+ files changed across the codebase. + +### Added +- **Grand Unification** — unified `create` command as single entry point for all 18 source types with auto-detection, direct converter invocation, and centralized enhancement (#346) +- **Agent-agnostic `AgentClient` abstraction** — all 5 enhancers now support Claude, Kimi, Codex, Copilot, OpenCode, and custom agents via a unified interface. Auto-detects agent from API keys instead of hardcoding (#336) +- **Kimi CLI integration** with stdin piping and output parsing (#336) +- **`MarketplacePublisher`** — publish skills to Claude Code plugin marketplace repos (#336) +- **`MarketplaceManager`** — register and manage marketplace repositories (#336) +- **`ConfigPublisher`** — push configs to registered config source repos (#336) +- **`push_config` MCP tool** for automated config publishing (#336) +- **Smart SPA discovery engine** — three-layer discovery: sitemap.xml, llms.txt, SPA nav rendering (#336) +- **`"browser": true` config support** for JavaScript SPA sites with browser renderer timeout defaults (60s, domcontentloaded) (#336) +- **Dynamic routing via `_build_argv()`** — replaced manual arg forwarding with dynamic forwarder, added 7 missing CLI flags (#336) +- **Kotlin language support for codebase analysis** — Full C3.x pipeline support: AST parsing (classes, objects, functions, data/sealed classes, extension functions, coroutines), dependency extraction, design pattern recognition (object declaration→Singleton, companion object→Factory, sealed class→Strategy), test example extraction (JUnit, Kotest, MockK, Spek), language detection patterns, config detection (build.gradle.kts), and extension maps across all analyzers (#287) +- **Headless browser rendering** (`--browser` flag) — uses Playwright to render JavaScript SPA sites (React, Vue, etc.) that return empty HTML shells. Auto-installs Chromium on first use. Optional dep: `pip install "skill-seekers[browser]"` (#321) +- **`skill-seekers doctor` command** — 8 diagnostic checks (Python version, package install, git, core/optional deps, API keys, MCP server, output dir) with pass/warn/fail status and `--verbose` flag (#316) +- **Prompt injection check workflow** — bundled `prompt-injection-check` workflow scans scraped content for injection patterns (role assumption, instruction overrides, delimiter injection, hidden instructions). Added as first stage in `default` and `security-focus` workflows. Flags suspicious content without removing it (#324) +- **Codex CLI plugin manifest** (`.codex-plugin/plugin.json`) for OpenAI Codex integration (#350) +- **6 behavioral UML diagrams** — 3 sequence (create pipeline, GitHub+C3.x flow, MCP invocation), 2 activity (source detection, enhancement pipeline), 1 component (runtime dependencies with interface contracts) +- **134 new tests** — `test_agent_client.py`, `test_config_publisher.py`, `_build_argv` tests. Total: 3194 passed, 39 expected skips (#336) + +### Changed +- **All content extraction features enabled by default** — pattern detection, test examples, how-to guides, config extraction, and router generation no longer require explicit opt-in +- **Renamed `claude-enhanced` merge mode to `ai-enhanced`** — backward compatibility alias kept (#336) +- **Removed 118+ hardcoded Claude references** across 60+ files (#336) +- **Refactored 5 enhancers** to use `AgentClient` abstraction (#336) +- **Removed 50-file GitHub API analysis limit** (#336) +- **Removed 100-file config extraction limit** (#336) +- **Fixed unified scraper default `max_pages`** from 100 to 500 (#336) +- **Centralized enhancement timeouts** to 45min default with unlimited support (#336) +- **Excluded slow MCP/e2e tests from CI coverage step** to prevent timeout + +### Fixed +- **`glob('*.md')` replaced with `rglob('*.md')`** in all adaptors — fixes packaging when skills are in nested directories (#349) +- **`scraped_data` list-vs-dict bug** in conflict detection (#336) +- **`base_url` passthrough** to doc scraper subprocess (#336) +- **URL filtering** now uses base directory correctly (#336) +- **C3.x analysis data loss** (#336) +- **`--enhance-level` flag** not passed correctly (#336) +- **`guide_enhancer` method rename** — `_call_claude_api` renamed to `_call_ai` (#336) +- **11 pre-existing test failures** fixed (#336) +- **Per-file language detection** in GitHub scraper (#336) +- **GitHub language detection crashes with `TypeError`** when API response contains non-integer metadata keys (e.g., `"url"`) — now filters to integer values only (#322) +- **C3.x codebase analysis crashes with `TypeError`** — `_run_c3_analysis()` and `_analyze_c3x()` passed removed `enhance_with_ai`/`ai_mode` kwargs to `analyze_codebase()` instead of `enhance_level` (#323) + +### Security +- **Removed command injection** via cloned repo script execution (#336) +- **Replaced `git add -A`** with targeted staging in marketplace publisher (#336) +- **Clear auth tokens** from cached `.git/config` after clone (#336) +- **Use `defusedxml`** for sitemap XML parsing (XXE protection) (#336) +- **Path traversal validation** for config names (#336) + +## [3.4.0] - 2026-03-21 + +### Added +- **OpenCode adaptor** (`--target opencode`) - Directory-based packaging with dual-format YAML frontmatter +- **OpenAI-compatible base class** - Shared base for all OpenAI-compatible LLM platforms +- **6 new LLM platform adaptors**: Kimi (`--target kimi`), DeepSeek (`--target deepseek`), Qwen (`--target qwen`), OpenRouter (`--target openrouter`), Together AI (`--target together`), Fireworks AI (`--target fireworks`) +- **7 new CLI agent install paths**: roo, cline, aider, bolt, kilo, continue, kimi-code (total: 18 agents) +- **OpenCode skill splitter** - Auto-split large docs into focused sub-skills with router +- **Bi-directional skill converter** - Import/export between OpenCode and any platform format +- **Distribution files** for Smithery (`smithery.yaml`), GitHub Actions (`templates/github-actions/update-skills.yml`), and Claude Code Plugin +- **Full UML architecture documentation** — 14 class diagrams synced from source code via StarUML +- **StarUML HTML API reference** documentation export +- **Ecosystem section** in README linking all Skill Seekers repos (PyPI, website, plugin, GitHub Action) + +### Fixed +- **`sanitize_url()` crashes on Python 3.14** due to strict `urlparse` rejecting bracket-containing URLs (#284) +- **Blindly appending `/index.html.md` to non-.md URLs** — now only appends for URLs that should have it (#277) +- **Unified scraper temp config** uses unified format for `doc_scraper` instead of raw args (#317) +- **Unicode arrows in CLI help text** replaced with ASCII for Windows cp1252 compatibility +- **CLI flags in plugin slash commands** corrected (`create` uses `--preset`, `package` uses `--target`) +- **MiniMax adaptor** improvements from PR #318 review (#319) +- **Misleading "Scraped N pages" count** reported visited URLs instead of saved pages — now shows `(N saved, M skipped)` (#320) +- **"No scraped data found" after successful scrape** on JavaScript SPA sites — now warns that site requires JS rendering (#320, #321) + +### Changed +- Refactored MiniMax adaptor to inherit from shared OpenAI-compatible base class +- Platform count: 5 → 12 LLM targets +- Agent count: 11 → 18 install paths +- Consolidated `Docs/` into `docs/` (single documentation directory) +- Removed stale root-level test scripts and junk files +- Removed stale `UNIFIED_PARSERS.md` superseded by UML architecture +- Added architecture references to README.md and CONTRIBUTING.md +- Fixed pre-existing ruff format issues in 5 files + +## [3.3.0] - 2026-03-16 + +**Theme:** 10 new source types (17 total), EPUB unified integration, sync-config command, performance optimizations, 12 README translations, and 19 bug fixes. 117 files changed, +41,588 lines since v3.2.0. + +### Supported Source Types (17) + +| # | Type | CLI Command | Config Type | Auto-Detection | +|---|------|-------------|-------------|----------------| +| 1 | Documentation (web) | `scrape` / `create ` | `documentation` | HTTP/HTTPS URLs | +| 2 | GitHub repository | `github` / `create owner/repo` | `github` | `owner/repo` or github.com URLs | +| 3 | PDF document | `pdf` / `create file.pdf` | `pdf` | `.pdf` extension | +| 4 | Word document | `word` / `create file.docx` | `word` | `.docx` extension | +| 5 | EPUB e-book | `epub` / `create file.epub` | `epub` | `.epub` extension | +| 6 | Video | `video` / `create ` | `video` | YouTube/Vimeo URLs, video extensions | +| 7 | Local codebase | `analyze` / `create ./path` | `local` | Directory paths | +| 8 | Jupyter Notebook | `jupyter` / `create file.ipynb` | `jupyter` | `.ipynb` extension | +| 9 | Local HTML | `html` / `create file.html` | `html` | `.html`/`.htm` extensions | +| 10 | OpenAPI/Swagger | `openapi` / `create spec.yaml` | `openapi` | `.yaml`/`.yml` with OpenAPI content | +| 11 | AsciiDoc | `asciidoc` / `create file.adoc` | `asciidoc` | `.adoc`/`.asciidoc` extensions | +| 12 | PowerPoint | `pptx` / `create file.pptx` | `pptx` | `.pptx` extension | +| 13 | RSS/Atom feed | `rss` / `create feed.rss` | `rss` | `.rss`/`.atom` extensions | +| 14 | Man pages | `manpage` / `create cmd.1` | `manpage` | `.1`–`.8`/`.man` extensions | +| 15 | Confluence wiki | `confluence` | `confluence` | API or export directory | +| 16 | Notion pages | `notion` | `notion` | API or export directory | +| 17 | Slack/Discord chat | `chat` | `chat` | Export directory or API | + +### Added + +#### 10 New Skill Source Types (17 total) + +Skill Seekers now supports 17 source types — up from 7. Every new type is fully integrated into the CLI (`skill-seekers `), `create` command auto-detection, unified multi-source configs, config validation, the MCP server, and the skill builder. + +- **Jupyter Notebook** — `skill-seekers jupyter --notebook file.ipynb` or `skill-seekers create file.ipynb` + - Extracts markdown cells, code cells with outputs, kernel metadata, imports, and language detection + - Handles single files and directories of notebooks; filters `.ipynb_checkpoints` + - Optional dependency: `pip install "skill-seekers[jupyter]"` (nbformat) + - Entry point: `skill-seekers-jupyter` + +- **Local HTML** — `skill-seekers html --html-path file.html` or `skill-seekers create file.html` + - Parses HTML using BeautifulSoup with smart main content detection (`
`, `
`, `.content`, largest div) + - Extracts headings, code blocks, tables (to markdown), images, links; converts inline HTML to markdown + - Handles single files and directories; supports `.html`, `.htm`, `.xhtml` extensions + - No extra dependencies (BeautifulSoup is a core dep) + +- **OpenAPI/Swagger** — `skill-seekers openapi --spec spec.yaml` or `skill-seekers create spec.yaml` + - Parses OpenAPI 3.0/3.1 and Swagger 2.0 specs from YAML or JSON (local files or URLs via `--spec-url`) + - Extracts endpoints, parameters, request/response schemas, security schemes, tags + - Resolves `$ref` references with circular reference protection; handles `allOf`/`oneOf`/`anyOf` + - Groups endpoints by tags; generates comprehensive API reference markdown + - Source detection sniffs YAML file content for `openapi:` or `swagger:` keys (avoids false positives on non-API YAML files) + - Optional dependency: `pip install "skill-seekers[openapi]"` (pyyaml — already a core dep, guard added for safety) + +- **AsciiDoc** — `skill-seekers asciidoc --asciidoc-path file.adoc` or `skill-seekers create file.adoc` + - Regex-based parser (no external library required) with optional `asciidoc` library support + - Extracts headings (= through =====), `[source,lang]` code blocks, `|===` tables, admonitions (NOTE/TIP/WARNING/IMPORTANT/CAUTION), and `include::` directives + - Converts AsciiDoc formatting to markdown; handles single files and directories + - Optional dependency: `pip install "skill-seekers[asciidoc]"` (asciidoc library for advanced rendering) + +- **PowerPoint (.pptx)** — `skill-seekers pptx --pptx file.pptx` or `skill-seekers create file.pptx` + - Extracts slide text, speaker notes, tables, images (with alt text), and grouped shapes + - Detects code blocks by monospace font analysis (30+ font families) + - Groups slides into sections by layout type; handles single files and directories + - Optional dependency: `pip install "skill-seekers[pptx]"` (python-pptx) + +- **RSS/Atom Feeds** — `skill-seekers rss --feed-url ` / `--feed-path file.rss` or `skill-seekers create feed.rss` + - Parses RSS 2.0, RSS 1.0, and Atom feeds via feedparser + - Optionally follows article links (`--follow-links`, default on) to scrape full page content using BeautifulSoup + - Extracts article titles, summaries, authors, dates, categories; configurable `--max-articles` (default 50) + - Source detection matches `.rss` and `.atom` extensions (`.xml` excluded to avoid false positives) + - Optional dependency: `pip install "skill-seekers[rss]"` (feedparser) + +- **Man Pages** — `skill-seekers manpage --man-names git,curl` / `--man-path dir/` or `skill-seekers create git.1` + - Extracts man pages by running `man` command via subprocess or reading `.1`–`.8`/`.man` files directly + - Handles gzip/bzip2/xz compressed man files; strips troff/groff formatting (backspace overstriking, macros, font escapes) + - Parses structured sections (NAME, SYNOPSIS, DESCRIPTION, OPTIONS, EXAMPLES, SEE ALSO) + - Source detection uses basename heuristic to avoid false positives on log rotation files (e.g., `access.log.1`) + - No external dependencies (stdlib only) + +- **Confluence** — `skill-seekers confluence --base-url --space-key ` or `--export-path dir/` + - API mode: fetches pages from Confluence REST API with pagination (`atlassian-python-api`) + - Export mode: parses Confluence HTML/XML export directories + - Extracts page content, code/panel/info/warning macros, page hierarchy, tables + - Optional dependency: `pip install "skill-seekers[confluence]"` (atlassian-python-api) + +- **Notion** — `skill-seekers notion --database-id ` / `--page-id ` or `--export-path dir/` + - API mode: fetches pages via Notion API with support for 20+ block types (paragraph, heading, code, callout, toggle, table, etc.) + - Export mode: parses Notion Markdown/CSV export directories + - Extracts rich text with annotations (bold, italic, code, links), 16+ property types for database entries + - Optional dependency: `pip install "skill-seekers[notion]"` (notion-client) + +- **Slack/Discord Chat** — `skill-seekers chat --export-path dir/` or `--token --channel ` + - Slack: parses workspace JSON exports or fetches via Slack Web API (`slack_sdk`) + - Discord: parses DiscordChatExporter JSON or fetches via Discord HTTP API + - Extracts messages, code snippets (fenced blocks), shared URLs, threads, reactions, attachments + - Generates per-channel summaries and topic categorization + - Optional dependency: `pip install "skill-seekers[chat]"` (slack-sdk) + +#### EPUB Unified Pipeline Integration +- **EPUB (.epub) input support** via `skill-seekers create book.epub` or `skill-seekers epub --epub book.epub` + - Extracts chapters, metadata (Dublin Core), code blocks, images, and tables from EPUB 2 and EPUB 3 files + - DRM detection with clear error messages (Adobe ADEPT, Apple FairPlay, Readium LCP) + - Font obfuscation correctly identified as non-DRM + - EPUB 3 TOC bug workaround (`ignore_ncx` option) + - `--help-epub` flag for EPUB-specific help + - Optional dependency: `pip install "skill-seekers[epub]"` (ebooklib) + - 107 tests across 14 test classes +- **EPUB added to unified scraper** — `_scrape_epub()` method, `scraped_data["epub"]`, config validation (`_validate_epub_source`), and dry-run display. Previously EPUB worked standalone but was missing from multi-source configs. + +#### Unified Skill Builder — Generic Merge System +- **`_generic_merge()`** — Priority-based section merge for any combination of source types not covered by existing pairwise synthesis (docs+github, docs+pdf, etc.). Produces YAML frontmatter + source-attributed sections. +- **`_append_extra_sources()`** — Appends additional source type content (e.g., Jupyter + PPTX) to pairwise-synthesized SKILL.md. +- **`_generate_generic_references()`** — Generates `references//index.md` for any source type, with ID resolution fallback chain. +- **`_SOURCE_LABELS`** dict — Human-readable labels for all 17 source types used in merge attribution. + +#### Config Validator Expansion +- **17 source types in `VALID_SOURCE_TYPES`** — All new types plus `word` and `video` now have per-type validation methods. +- **`_validate_word_source()`** — Validates `path` field for Word documents (was previously missing). +- **`_validate_video_source()`** — Validates `url`, `path`, or `playlist` field for video sources (was previously missing). +- **11 new `_validate_*_source()` methods** — One for each new type with appropriate required-field checks. + +#### Source Detection Improvements +- **7 new file extension detections** in `SourceDetector.detect()` — `.ipynb`, `.html`/`.htm`, `.pptx`, `.adoc`/`.asciidoc`, `.rss`/`.atom`, `.1`–`.8`/`.man`, `.yaml`/`.yml` (with content sniffing) +- **`_looks_like_openapi()`** — Content sniffing for YAML files: only classifies as OpenAPI if the file contains `openapi:` or `swagger:` key in first 20 lines (prevents false positives on docker-compose, Ansible, Kubernetes manifests, etc.) +- **Man page basename heuristic** — `.1`–`.8` extensions only detected as man pages if the basename has no dots (e.g., `git.1` matches but `access.log.1` does not) +- **`.xml` excluded from RSS detection** — Too generic; only `.rss` and `.atom` trigger RSS detection + +#### MCP Server Integration +- **`scrape_generic` tool** — New MCP tool handles all 10 new source types via subprocess with per-type flag mapping +- **`_PATH_FLAGS` / `_URL_FLAGS` dicts** — Correct flag routing for each source type (e.g., jupyter→`--notebook`, html→`--html-path`, rss→`--feed-url`) +- **`GENERIC_SOURCE_TYPES` tuple** — Lists all 10 new types for validation +- **Config validation display** — `validate_config` tool now shows source details for all new types +- **Tool count updated** — 33 → 34 tools (scraping tools 10 → 11) + +#### CLI Wiring +- **10 new CLI subcommands** — `jupyter`, `html`, `openapi`, `asciidoc`, `pptx`, `rss`, `manpage`, `confluence`, `notion`, `chat` in `COMMAND_MODULES` +- **10 new argument modules** — `arguments/{jupyter,html,openapi,asciidoc,pptx,rss,manpage,confluence,notion,chat}.py` with per-type `*_ARGUMENTS` dicts +- **10 new parser modules** — `parsers/{jupyter,html,openapi,asciidoc,pptx,rss,manpage,confluence,notion,chat}_parser.py` with `SubcommandParser` implementations +- **`create` command routing** — `_route_generic()` method for all new types with correct module names and CLI flags +- **10 new entry points** in pyproject.toml — `skill-seekers-{jupyter,html,openapi,asciidoc,pptx,rss,manpage,confluence,notion,chat}` +- **7 new optional dependency groups** in pyproject.toml — `[jupyter]`, `[asciidoc]`, `[pptx]`, `[confluence]`, `[notion]`, `[rss]`, `[chat]` +- **`[all]` group updated** — Includes all 7 new optional dependencies + +#### Sync Config Command +- **`skill-seekers sync-config`** — New subcommand that crawls a docs site's navigation, diffs discovered URLs against a config's `start_urls`, and optionally writes the updated list back with `--apply` (#306) + - BFS link discovery with configurable depth (default 2), max-pages, rate-limit + - Respects `url_patterns.include/exclude` from config + - Supports optional `nav_seed_urls` config field + - Handles both unified (sources array) and legacy flat config formats + - MCP `sync_config` tool included + - 57 tests (39 unit + 18 E2E with local HTTP server) + +#### Workflow & Documentation +- **`complex-merge.yaml`** — New 7-stage AI-powered workflow for complex multi-source merging (source inventory → cross-reference → conflict detection → priority merge → gap analysis → synthesis → quality check) +- **AGENTS.md rewritten** — Updated with all 17 source types, scraper pattern docs, project layout, and key pattern documentation +- **77 new integration tests** in `test_new_source_types.py` — Source detection, config validation, generic merge, CLI wiring, validation, and create command routing +- **`docs/BEST_PRACTICES.md`** — Comprehensive guide for creating high-quality skills: SKILL.md structure, code examples, prerequisites, troubleshooting, quality targets, and real-world Grade F to Grade A example (#206) +- **Documentation updated for 17 source types** — 32 files updated across README, CLI reference, feature matrix, MCP reference, config format, API reference, unified scraping, multi-source guide, installation, quick-start, core concepts, user guide, FAQ, troubleshooting, architecture, and all Chinese (zh-CN) translations +- **README translations for 10 languages (12 total)** — Added Japanese (日本語), Korean (한국어), Spanish (Español), French (Français), German (Deutsch), Portuguese (Português), Turkish (Türkçe), Arabic (العربية), Hindi (हिनà¥à¤¦à¥€), and Russian (РуÑÑкий) README translations with language selector bar across all versions + +### Performance +- **Pre-compiled regex and O(1) URL dedup in doc_scraper** — Module-level compiled patterns, `_enqueued_urls` set for O(1) dedup, cached URL patterns, async error logging fix (#309) +- **Bisect-based line indexing in code_analyzer and dependency_analyzer** — O(log n) `offset_to_line()` via bisect replaces O(n) `count("\n")` across all 10 language analyzers and all import extractors +- **O(n) parent class map for Python method detection** — Replaces O(n²) repeated AST walks in code_analyzer +- **O(1) tree traversal in github_scraper** — `deque.popleft()` replaces list `pop(0)` +- **Shared `build_line_index()` / `offset_to_line()` utilities** in `cli/utils.py` — DRY extraction from code_analyzer and dependency_analyzer + +### Fixed +- **Config validator missing `word` and `video` dispatch** — `_validate_source()` had no `elif` branches for `word` or `video` types, silently skipping validation. Added dispatch entries and `_validate_word_source()` / `_validate_video_source()` methods. +- **`openapi_scraper.py` unconditional `import yaml`** — Would crash at import time if pyyaml not installed. Added `try/except ImportError` guard with `YAML_AVAILABLE` flag and `_check_yaml_deps()` helper. +- **`asciidoc_scraper.py` missing standard arguments** — `main()` manually defined args instead of using `add_asciidoc_arguments()`. Refactored to use shared argument definitions + added enhancement workflow integration. +- **`pptx_scraper.py` missing standard arguments** — Same issue. Refactored to use `add_pptx_arguments()`. +- **`chat_scraper.py` missing standard arguments** — Same issue. Refactored to use `add_chat_arguments()`. +- **`notion_scraper.py` missing `run_workflows` call** — `--enhance-workflow` flags were silently ignored. Added workflow runner integration. +- **`openapi_scraper.py` return type `None`** — `main()` returned `None` instead of `int`. Fixed to `return 0` on success, matching all other scrapers. +- **MCP `scrape_generic_tool` flag mismatch** — Was passing `--path`/`--url` as generic flags, but every scraper expects its own flag name (e.g., `--notebook`, `--html-path`, `--spec`). All 10 source types would have failed at runtime. Fixed with per-type `_PATH_FLAGS` and `_URL_FLAGS` mappings. +- **Word scraper `docx_id` key mismatch** — Unified scraper data dict used `docx_id` but generic reference generation looked for `word_id`. Added `word_id` alias. +- **`main.py` docstring stale** — Missing all 10 new commands. Updated to list all 27 commands. +- **`source_detector.py` module docstring stale** — Described only 5 source types. Updated to describe 14+ detected types. +- **`manpage_parser.py` docstring referenced wrong file** — Said `manpage_scraper.py` but actual file is `man_scraper.py`. Fixed. +- **Parser registry test count** — Updated expected count from 25 to 35 for 10 new parsers. +- **'Invalid IPv6 URL' error on bracket-containing URLs (#284)** — URLs with square brackets (e.g., `/api/[v1]/users`) discovered via BFS crawl or HTML extraction bypassed the original fix in `_clean_url()`. Added shared `sanitize_url()` utility applied at every URL ingestion point. 16 new tests. +- **GitHub scraper 'list index out of range' on issue extraction (#269)** — PyGithub's `PaginatedList` slicing could fail on some versions or empty repos. Replaced with `itertools.islice()`. +- **Release workflow version mismatch** — GitHub release showed wrong version (v3.1.3 instead of v3.2.0) because no explicit release name was set and sed regex had unescaped dots. Added explicit `name`/`tag_name`, version consistency check (tag vs pyproject.toml vs package), and empty release notes fallback. +- **Release workflow Python 3.10 compatibility** — Version consistency check used `tomllib` (Python 3.11+). Replaced with grep/sed for 3.10 compatibility. +- **`infer_categories()` "tutorial" vs "tutorials" key mismatch** — Guard checked `'tutorial'` but wrote to `'tutorials'` key, risking silent overwrites in category inference. +- **Flaky `test_benchmark_metadata_overhead`** — Stabilized with 20 iterations, warm-up run, median averaging, and 200% threshold (was failing on CI with 5 iterations and mean). +- **CI branch protection check permanently pending** — Summary job was named 'All Checks Complete' but branch protection required 'Tests'. PRs were stuck as 'Expected — Waiting for status to be reported'. Renamed job to match. + +## [3.2.0] - 2026-03-01 + +**Theme:** Video source support, Word document support, Pinecone adaptor, and quality improvements. 94 files changed, +23,500 lines since v3.1.3. **2,540 tests passing.** + +### 🎬 Video Tutorial Scraping Pipeline (BETA) + +Complete video tutorial extraction system that converts YouTube videos and local video files into AI-consumable skills. The pipeline extracts transcripts, performs visual OCR on code editor panels, tracks code evolution across frames, and generates structured SKILL.md output. + +### Added + +#### Video Pipeline Core (`skill-seekers video`) +- **`skill-seekers video --url `** — New CLI command for video tutorial scraping. Also supports `--video-file` for local files and `--playlist` for YouTube playlists +- **`skill-seekers create `** — Auto-detects YouTube URLs and routes to video scraper +- **`video_scraper.py`** (~960 lines) — Main orchestrator: metadata → transcript → segmentation → visual extraction → SKILL.md generation +- **`video_models.py`** (~815 lines) — 20+ dataclasses: `VideoMetadata`, `TranscriptSegment`, `VideoChapter`, `KeyframeData`, `FrameSubSection`, `TextBlock`, `CodeTimeline`, `SetupModules`, etc. +- **`video_metadata.py`** (~270 lines) — YouTube metadata extraction (title, channel, views, chapters, duration) via yt-dlp; local file metadata via ffprobe +- **`video_transcript.py`** (~370 lines) — Multi-source transcript extraction with 3-tier fallback: YouTube Transcript API → yt-dlp subtitles → faster-whisper local transcription +- **`video_segmenter.py`** (~220 lines) — Chapter-based and time-window segmentation with configurable overlap +- **`video_visual.py`** (~2,410 lines) — Visual extraction pipeline: + - Keyframe detection via scene change (scenedetect) with configurable threshold + - Frame classification (code editor, slides, terminal, browser, other) + - Panel detection — splits IDE screenshots into independent sub-sections (code, terminal, file tree) + - **Per-panel OCR** — Each detected panel OCR'd independently with its own bounding box + - **Multi-engine OCR ensemble** — EasyOCR + pytesseract for code frames (per-line confidence merge with code-token preference), EasyOCR only for non-code frames + - **Parallel OCR** — `ThreadPoolExecutor` for multi-panel frames + - Narrow panel filtering (300px min width) to skip UI chrome + - Text block tracking with spatial panel position matching across frames + - Code timeline with edit tracking (additions, modifications, deletions) + - Vision API fallback when OCR confidence < 0.5 + - Tesseract circuit breaker (`_tesseract_broken` flag) — disables pytesseract after first failure +- **Audio-visual alignment** — Code blocks paired with narrator transcript for context +- **Video-specific AI enhancement** — Custom prompt for OCR denoising, code reconstruction, and tutorial narrative synthesis +- **Two-pass AI enhancement** — Pass 1 cleans reference files (Code Timeline reconstruction from transcript context), Pass 2 generates SKILL.md from cleaned references +- **`_ai_clean_reference()`** — Sends reference file to Claude to reconstruct code blocks using transcript context, fixing OCR noise before SKILL.md generation +- **`video-tutorial.yaml`** workflow preset — 4-stage enhancement pipeline (OCR cleanup → language detection → tutorial synthesis → skill polish) +- **Video arguments** — `arguments/video.py` with `VIDEO_ARGUMENTS` dict: `--url`, `--video-file`, `--playlist`, `--vision-ocr`, `--keyframe-threshold`, `--max-keyframes`, `--whisper-model`, `--setup`, etc. +- **Video parser** — `parsers/video_parser.py` for unified CLI parser registry +- **MCP `scrape_video` tool** — Full video scraping from MCP server with 6 visual params, setup mode, and playlist support +- **`tests/test_video_scraper.py`** (197 tests) — Comprehensive coverage: models, metadata, transcript, segmenter, visual extraction, OCR, panel detection, scraper integration, CLI arguments, OCR cleaning, code filtering + +#### Video `--setup`: GPU Auto-Detection & Dependency Installation +- **`skill-seekers video --setup`** — One-command GPU auto-detection and dependency installation + - `video_setup.py` (~835 lines) — Complete setup orchestration module + - **GPU auto-detection** — Detects NVIDIA (nvidia-smi → CUDA version), AMD (rocminfo → ROCm version), or CPU-only without requiring PyTorch + - **Correct PyTorch variant** — Installs from the right index URL: `cu124`/`cu121`/`cu118` for NVIDIA, `rocm6.3`/`rocm6.2.4` for AMD, `cpu` for CPU-only + - **ROCm configuration** — Sets `MIOPEN_FIND_MODE=FAST` and `HSA_OVERRIDE_GFX_VERSION` for AMD GPUs + - **Virtual environment detection** — Warns users outside a venv with opt-in `--force` override + - **System dependency checks** — Validates `tesseract` and `ffmpeg` binaries, provides OS-specific install instructions + - **Module selection** — `SetupModules` dataclass for optional component selection (easyocr, opencv, tesseract, scenedetect, whisper) + - **Base video deps always included** — `yt-dlp` and `youtube-transcript-api` installed automatically + - **Verification step** — Post-install import checks including `torch.cuda.is_available()` and `torch.version.hip` + - **Non-interactive mode** — `run_setup(interactive=False)` for MCP server and CI/CD use +- **`--setup` early-exit** — Runs before source validation (no `--url` required) +- **MCP `scrape_video` setup parameter** — `setup: bool = False` in `server_fastmcp.py` and `scraping_tools.py` +- **`create` command routing** — Forwards `--setup` to video scraper +- **`tests/test_video_setup.py`** (60 tests) — GPU detection, CUDA/ROCm version mapping, installation, verification, venv checks, system deps, module selection + +#### Microsoft Word (.docx) Support +- **`skill-seekers word --docx `** and `skill-seekers create document.docx` — Full pipeline: mammoth → HTML → BeautifulSoup → sections → SKILL.md + references/ + - `word_scraper.py` — `WordToSkillConverter` class (~600 lines) with heading/code/table/image/metadata extraction + - `arguments/word.py` — `add_word_arguments()` + `WORD_ARGUMENTS` dict + - `parsers/word_parser.py` — WordParser for unified CLI parser registry + - `tests/test_word_scraper.py` — Comprehensive test suite (~300 lines) +- **`.docx` auto-detection** in `source_detector.py` — Routes to word scraper +- **`--help-word`** flag in create command for Word-specific help +- **Word support in unified scraper** — `_scrape_word()` method for multi-source scraping +- **`skill-seekers-word`** entry point in pyproject.toml +- **`docx` optional dependency group** — `pip install skill-seekers[docx]` (mammoth + python-docx) + +#### Other Additions +- **Pinecone adaptor** — `pinecone_adaptor.py` with full upload support +- **`video` and `video-full` optional dependency groups** in pyproject.toml +- **`skill-seekers-video`** entry point in pyproject.toml +- **Video plan documents** — 8 design documents in `docs/plans/video/` (research, data models, pipeline, integration, output, testing, dependencies, overview) + +### Fixed + +#### Video Pipeline OCR Quality Fixes (6) +- **Webcam/OTHER frames skip OCR** — WEBCAM and OTHER frame types no longer get OCR'd, eliminating ~64 junk OCR results per video +- **`_clean_ocr_line()` helper** — Strips leading line numbers, IDE tab bar text, Unity Inspector labels, and VS Code collapse markers from OCR output +- **`_fix_intra_line_duplication()`** — Detects and removes token sequence repetition from multi-engine OCR overlap (e.g., `gpublic class Card Jpublic class Card` → `public class Card`) +- **`_is_likely_code()` filter** — Reference file code fences now filtered to reject UI junk (Inspector, Hierarchy, Canvas labels) that passed frame classification +- **Language detection on text groups** — `get_text_groups()` now runs `LanguageDetector.detect_from_code()` on each group, filling the previously-always-None `detected_language` field +- **OCR cleaning in text assembly** — `_assemble_structured_text()` applies `_clean_ocr_line()` to every line before joining + +#### Video Pipeline Fixes (15) +- **`extract_visual_data` returning 2-tuple instead of 3** — Caused `ValueError` crash when unpacking results +- **pytesseract in core deps** — Moved from core dependencies to `[video-full]` optional group +- **30-min timeout for video enhancement subprocess** — Previously could hang indefinitely +- **`scrape_video_impl` missing from MCP server fallback import** — Added to import block +- **Auto-generated YouTube captions not detected** — Now checks `is_generated` property on transcripts +- **`--vision-ocr` and `--video-playlist` not forwarded** — `create` command now passes these to video scraper +- **Filename collision for non-ASCII video titles** — Falls back to `video_id` when title contains non-ASCII characters +- **`_vision_used` not a proper dataclass field** — Made a proper field on `FrameSubSection` dataclass +- **6 visual params missing from MCP `scrape_video`** — Exposed keyframe_threshold, max_keyframes, whisper_model, vision_ocr, video_playlist, video_file +- **Missing video dep install instructions in unified scraper** — Added guidance when video dependencies are not installed +- **MCP docstring tool counts outdated** — Updated from 25→33 tools across 7 categories +- **Video and word commands missing from `main.py` docstring** — Added to CLI help text +- **`video-full` exclusion from `[all]` deps undocumented** — Added comment in pyproject.toml +- **Parser registry test count wrong** — Updated expected count from 22→23 for video parser + +#### Scraper & Quality Fixes +- **Issue #300: Selector fallback & dry-run link discovery** — `create https://reactflow.dev/` now finds 20+ pages (was 1): + - `extract_content()` extracted links after early-return → moved before + - Dry-run used `main.find_all("a")` instead of `soup.find_all("a")` → fixed + - Async dry-run had no link extraction at all → added + - `get_configuration()` CSS comma selector conflicted with fallback loop → removed default + - `create --config` with `base_url` config incorrectly routed to unified_scraper → now peeks at JSON + - Selector fallback duplicated in 3 places with `body` fallback → extracted `FALLBACK_MAIN_SELECTORS` constant + `_find_main_content()` helper +- **Issue #301: `setup.sh` fails on macOS** — `pip3` pointed to different Python than `python3`. Changed to `python3 -m pip`. +- **RAG chunking crash (`AttributeError: output_dir`)** — `converter.output_dir` doesn't exist on `DocToSkillConverter`. Changed to `Path(converter.skill_dir)`. +- **`--var` flag silently dropped in `create` routing** — `main.py` read `args.workflow_var` instead of `args.var` +- **`--chunk-overlap-tokens` missing from `package` command** — Wired through entire pipeline: `package_skill()` → `adaptor.package()` → `format_skill_md()` → `_maybe_chunk_content()` → `RAGChunker` +- **Chunk overlap auto-scaling** — Auto-scales to `max(50, chunk_tokens // 10)` when chunk size is non-default +- **Weaviate `ImportError` masked by generic handler** — Added `except ImportError` before `except Exception` +- **Hardcoded chunk defaults in 12 adaptors** — Replaced `512`/`50` with `DEFAULT_CHUNK_TOKENS`/`DEFAULT_CHUNK_OVERLAP_TOKENS` constants +- **Reference file code truncation** — `codebase_scraper.py` no longer truncates code blocks to 500 chars (5 locations) +- **Enhancement code block limit** — `summarize_reference()` now uses character-budget approach instead of `[:5]` cap +- **Intro boundary code block desync** — Tracks code block state to prevent splitting inside code blocks +- **Hardcoded `python` language** — `unified_skill_builder.py` and `how_to_guide_builder.py` now use detected language +- **GitHub reference file limits removed** — No more caps on issues (was 20), releases (was 10), or release bodies (was 500 chars) +- **GitHub scraper reference limits removed** — `github_scraper.py` no longer caps open_issues at 20 or closed_issues at 10 +- **PDF scraper fixes** — Real API/LOCAL enhancement (was stub); removed `[:3]` reference file limit +- **Word scraper code detection** — Detect mammoth monospace `


` blocks as code +- **Language detector method** — Fixed `detect_from_text` → `detect_from_code` in word scraper +- **`.docx` file extension validation** — Non-`.docx` files raise `ValueError` with clear message +- **Double `_score_code_quality()` call** — Consolidated to single call in word scraper +- **`--no-preserve-code` renamed** — Now `--no-preserve-code-blocks` (backward-compat alias kept) +- **Dead variable** — Removed unused `_target_lines` in `enhance_skill_local.py` + +### Changed +- **`easyocr` removed from `video-full` optional deps** — Was pulling ~2GB of NVIDIA CUDA packages regardless of GPU vendor. Now installed via `--setup` with correct PyTorch variant. +- **Video dependency error messages** — `video_scraper.py` and `video_visual.py` now suggest `skill-seekers video --setup` as primary fix +- **Shared embedding methods consolidated** — `_generate_openai_embeddings()` and `_generate_st_embeddings()` moved to `SkillAdaptor` base class, eliminating ~150 lines of duplication from chroma/weaviate/pinecone adaptors +- **Chunk constants centralized** — `DEFAULT_CHUNK_TOKENS = 512` and `DEFAULT_CHUNK_OVERLAP_TOKENS = 50` in `arguments/common.py`, used across all 12 adaptors + rag_chunker + base + package_skill + create_command +- **Enhancement summarizer architecture** — Character-budget approach with `target_ratio` for both code blocks and heading chunks + +## [3.1.3] - 2026-02-24 + +### 🛠Hotfix — Explicit Chunk Flags & Argument Pipeline Cleanup + +### Fixed +- **Issue #299: `skill-seekers package --target claude` unrecognised argument crash** — `_reconstruct_argv()` in `main.py` emits default flag values back into argv when routing subcommands. `package_skill.py` had a 105-line inline argparser that used different flag names to those in `arguments/package.py`, so forwarded flags were rejected. Fixed by replacing the inline block with a call to `add_package_arguments(parser)` — the single source of truth. + +### Changed +- **`package_skill.py` argparser refactored** — Replaced ~105 lines of inline argparse duplication with a single `add_package_arguments(parser)` call. Flag names are now guaranteed consistent with `_reconstruct_argv()` output, preventing future argument-name drift. +- **Explicit chunk flag names** — All `--chunk-*` flags now include unit suffixes to eliminate ambiguity between RAG tokens and streaming characters: + - `--chunk-size` (RAG tokens) → `--chunk-tokens` + - `--chunk-overlap` (RAG tokens) → `--chunk-overlap-tokens` + - `--chunk` (enable RAG chunking) → `--chunk-for-rag` + - `--streaming-chunk-size` (chars) → `--streaming-chunk-chars` + - `--streaming-overlap` (chars) → `--streaming-overlap-chars` + - `--chunk-size` in PDF extractor (pages) → `--pdf-pages-per-chunk` +- **`setup_logging()` centralized** — Added `setup_logging(verbose, quiet)` to `utils.py` and removed 4 duplicate module-level `logging.basicConfig()` calls from `doc_scraper.py`, `github_scraper.py`, `codebase_scraper.py`, and `unified_scraper.py` + +## [3.1.2] - 2026-02-24 + +### 🔧 Fix `create` Command Argument Forwarding, Gemini Model, and Enhance Dispatcher + +### Fixed +- **`create` command argument forwarding** — Universal flags (`--dry-run`, `--verbose`, `--quiet`, `--name`, `--description`) now work correctly across all source types. Previously, `create -p quick --dry-run`, `create owner/repo --dry-run`, and `create ./path --dry-run` would crash because sub-scrapers didn't accept those flags +- **`skill-seekers analyze --dry-run`** — Fixed `_handle_analyze_command()` in `main.py` not forwarding `--dry-run`, `--preset`, `--quiet`, `--name`, `--description`, `--api-key`, and workflow flags to codebase_scraper +- **Gemini model 404 errors** — Replaced retired `gemini-2.0-flash-exp` with `gemini-2.5-flash` (stable GA) in the Gemini adaptor. Users attempting Gemini enhancement were getting 404 Not Found errors +- **`skill-seekers enhance` auto-detection** — The documented behaviour of auto-detecting API vs LOCAL mode was never implemented. `enhance` now correctly routes to the platform API when a key is present: `ANTHROPIC_API_KEY` → Claude API, `GOOGLE_API_KEY` → Gemini API, `OPENAI_API_KEY` → OpenAI API, no key → LOCAL mode (Claude Code Max, free). Use `--mode LOCAL` to force local mode regardless + +### Added +- **Shared argument contract** — New `add_all_standard_arguments(parser)` in `arguments/common.py` registers common + behavior + workflow args on any parser as a single call +- **`BEHAVIOR_ARGUMENTS`** — Centralized `--dry-run`, `--verbose`, `--quiet` definitions in `arguments/common.py` +- **`--dry-run` for GitHub scraper** — `skill-seekers github --repo owner/repo --dry-run` now previews the operation +- **`--dry-run` for PDF scraper** — `skill-seekers pdf --name test --dry-run` now previews the operation +- **`--verbose`/`--quiet` for GitHub and PDF scrapers** — Logging level control now works consistently across all scrapers +- **`--name`/`--description` for codebase analyzer** — Custom skill name and description can now be passed to `skill-seekers analyze` +- **`--mode LOCAL` flag for `skill-seekers enhance`** — Explicitly forces LOCAL mode even when API keys are present + +### Changed +- **Argument deduplication** — Removed duplicated argument definitions from `arguments/github.py`, `arguments/scrape.py`, `arguments/analyze.py`, `arguments/pdf.py`; all now import shared args from `arguments/common.py` +- **`create` command `_add_common_args()`** — Only forwards truly universal flags; route-specific flags (`--preset`, `--config`, `--chunk-for-rag`, etc.) moved to their respective route methods +- **`codebase_scraper.py` argparser** — Replaced ~190 lines of inline argparser with `add_analyze_arguments(parser)` call + +## [3.1.1] - 2026-02-23 + +### 🛠Hotfix + +### Fixed +- **`create` command `max_pages` AttributeError** — Fixed crash when `max_pages` argument was not provided in web source routing. Uses `getattr()` for safe attribute access (#293, #294) + +### Changed +- Version bump to 3.1.1 + +## [3.1.0] - 2026-02-23 + +### 🎯 "Unified CLI & Developer Experience" — Feature Release + +**Theme:** One command for everything. Better developer tooling. 2280+ tests passing. + +### Added + +#### Unified `create` Command +- **Single command for all source types** — auto-detects URL, GitHub repo (`owner/repo`), local directory, PDF file, or multi-source config JSON + ```bash + skill-seekers create https://docs.react.dev/ + skill-seekers create facebook/react + skill-seekers create ./my-project + skill-seekers create tutorial.pdf + ``` +- **Progressive help disclosure** — default `--help` shows 13 universal flags; detailed help per source: + - `--help-web`, `--help-github`, `--help-local`, `--help-pdf`, `--help-advanced`, `--help-all` +- **`-p` shortcut** for preset selection: `skill-seekers create -p quick|standard|comprehensive` +- **`--local-repo-path`** flag for specifying local clone path in create command with validation +- Supports multi-source config files as input (routes to unified scraper) + +#### Enhancement Workflow Preset System +- **New `workflows` CLI subcommand** to manage enhancement workflow presets +- **65 bundled workflow presets** shipped as YAML files in `skill_seekers/workflows/`: + - Core: `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` + - Domain-specific: `rest-api-design`, `graphql-schema`, `grpc-services`, `websockets-realtime`, `event-driven`, `message-queues`, `stream-processing` + - Architecture: `microservices-patterns`, `serverless-architecture`, `kubernetes-deployment`, `devops-deployment`, `terraform-guide` + - Frontend: `responsive-design`, `component-library`, `forms-validation`, `design-system`, `pwa-checklist`, `ssr-guide`, `deep-linking`, `state-management` + - Quality: `testing-focus`, `testing-frontend`, `performance-optimization`, `observability-stack`, `troubleshooting-guide`, `accessibility-a11y` + - Data: `database-schema`, `data-validation`, `feature-engineering`, `vector-databases`, `mlops-pipeline`, `model-deployment`, `computer-vision` + - Security: `encryption-guide`, `iam-identity`, `secrets-management`, `compliance-gdpr`, `auth-strategies` + - Cloud: `aws-services`, `backup-disaster-recovery` + - Patterns: `advanced-patterns`, `api-evolution`, `migration-guide`, `contribution-guide`, `onboarding-beginner`, `comparison-matrix`, `sdk-integration`, `platform-specific`, `cli-tooling`, `build-tools` + - Mobile: `push-notifications`, `offline-first`, `localization-i18n` + - Background: `background-jobs`, `rate-limiting`, `caching-strategies`, `webhook-guide`, `api-gateway` +- User presets stored in `~/.config/skill-seekers/workflows/` +- Subcommands: + - `skill-seekers workflows list` — List all bundled + user workflows with descriptions + - `skill-seekers workflows show ` — Print YAML content of a workflow + - `skill-seekers workflows copy [name ...]` — Copy bundled workflow(s) to user dir + - `skill-seekers workflows add [file ...]` — Install custom YAML file(s) into user dir + - `skill-seekers workflows remove [name ...]` — Delete user workflow(s) + - `skill-seekers workflows validate ` — Parse and validate a workflow +- `copy`, `add`, `remove` all accept multiple names/files in one command (partial-failure: continues processing, returns non-zero if any item fails) +- New entry point: `skill-seekers-workflows` + +#### Multiple `--enhance-workflow` Flags from CLI +- Chain workflows in a single command: `skill-seekers create --enhance-workflow security-focus --enhance-workflow minimal` +- Supported across all scrapers: `scrape`, `github`, `analyze`, `pdf`, `unified` + +#### Smart Enhancement Dispatcher (`skill-seekers enhance`) +- Auto-routes to API mode (Claude/Gemini/OpenAI) when API key is available, LOCAL mode (Claude Code CLI) otherwise +- Decision priority: `--target` flag → config `default_agent` → env vars (`ANTHROPIC_API_KEY` → claude, `GOOGLE_API_KEY` → gemini, `OPENAI_API_KEY` → openai) → LOCAL fallback +- **Blocks LOCAL mode when running as root** (Docker/VPS) with clear error message + API mode instructions (fixes #286, #289) +- New flags: `--target`, `--api-key`, `--dry-run`, `--interactive-enhancement` + +#### Unified Document Parser System +- New `parsers/extractors.py` module with `RstParser`, `MarkdownParser` classes +- **ReStructuredText (RST) support** — parses class references, code blocks, tables, cross-references +- Shared `parse_document()` factory function for RST/Markdown/PDF input +- Integrated into documentation extraction pipeline for richer content +- `ContentBlockType` and `CrossRefType` enums for structured parsing output + +#### Local Source Support in Unified Scraper +- `"type": "local"` source type in unified config JSONs — analyze local codebases alongside web/GitHub/PDF sources +- `--local-repo-path` CLI flag in unified scraper for per-source path override + +#### CLI Flag Parity Across All Commands +- `analyze`, `pdf`, and `unified` commands now have full flag parity with `scrape`/`github`: + - `--api-key` on `pdf` and `unified` + - `--enhance-level` on `unified` + - `--dry-run` on `analyze` + - All workflow flags (`--enhance-workflow`, `--enhance-stage`, `--var`, `--workflow-dry-run`) on `analyze` +- Workflow JSON config fields (`workflows`, `workflow_stages`, `workflow_vars`) now merged with CLI flags in `unified` scraper + +### Fixed +- **Percent-encode brackets in llms.txt URLs** — prevent "Invalid IPv6 URL" errors when scraping sites with bracket characters (fixes #284) +- **Platform-appropriate config paths on Windows** — use `%APPDATA%` instead of `~/.config` (fixes #283) +- **`create` command multi-source config** — now correctly routes to unified scraper when input is a `.json` config file +- **`create` command `_add_common_args()`** — correctly forwards each `--enhance-workflow` value as a separate flag to sub-scrapers (previously collapsed list to single string, causing workflows to be ignored) +- **`_extract_markdown_content`** — filter out bare `h1` headings and short stub paragraphs that polluted extracted content +- **Godot unified config language names** — corrected `gdscript`/`gds` to proper names in `godot_unified.json` +- **Python 3.10 type union compatibility** — use `Optional[X]` instead of `X | None` in forward-reference positions +- **`_route_config` in unified scraper** — correctly handles all source types when routing config-driven scraping +- **CONFIG_ARGUMENTS** — added to ensure unified CLI has full argument visibility for config-based sources +- **Test suite isolation** — `test_swift_detection.py` now saves/restores `sys.modules` and parent package attributes; prevents `@patch` decorators in downstream files from targeting stale module objects +- **Python 3.14 chromadb compatibility** — catch `pydantic.v1.errors.ConfigError` (not just `ImportError`) when chromadb is installed +- **langchain import path** — updated `langchain.schema` → `langchain_core.documents` for langchain 1.x +- **Removed legacy `sys.path.insert()` calls** from `codebase_scraper.py`, `doc_scraper.py`, `enhance_skill.py`, `enhance_skill_local.py`, `estimate_pages.py`, `install_skill.py` (unnecessary with `pip install -e .`) +- **Benchmark timing threshold** — relaxed metadata overhead assertion from 10% to 50% for CI runner variability + +### Changed +- **Enhancement flags consolidated** — `--enhance-level` (0-3) replaces three separate flags (`--enhance`, `--enhance-local`, `--api-key`). Old flags still accepted with deprecation warnings until v4.0.0 +- **`workflows copy/add/remove`** now accept multiple names/files in one invocation +- **`pyproject.toml`** — PyYAML added as core dependency (required by workflow preset management); langchain and llama-index added as dependencies; MCP version requirement updated to `>=1.25` + +### Tests +- **2280+ tests passing** (2158 non-MCP + ~122 MCP, up from 1852 in v3.0.0), 11 skipped (external services), 0 failures +- Added `TestAnalyzeWorkflowFlags`, `TestUnifiedCLIArguments`, `TestPDFCLIArguments` classes +- Added `tests/test_mcp_workflow_tools.py` — 5 MCP workflow tool tests +- Added `tests/test_unified_scraper_orchestration.py` — UnifiedScraper orchestration tests +- Removed `@unittest.skip` from gemini/openai/claude adaptor tests that were ready +- Removed `@requires_github` from 5 unified_analyzer tests that fully mock their dependencies +- Macros-specific tests now use `@patch(sys.platform)` instead of runtime `skipTest()` for platform portability + +### Config Repository (skill-seekers-configs) +- **178 production configs reviewed and enhanced** across all 22 categories — brought to v1.1.0 quality standard +- **Removed all `max_pages` fields** from production configs (deprecated, defaults apply automatically) +- **Fixed outdated URLs**: `astro.json` (Astro v3 restructure: `/en/core-concepts/` → `/en/basics/`), `laravel.json` (11.x → 12.x throughout) +- **Fixed structural bug** in `httpx_comprehensive.json` — `url_patterns`, `categories`, `rate_limit` moved from top-level into `sources[0]` (required for unified format) +- **Removed hash-fragment start_urls** from `zod.json` (scrapers don't follow `?id=` anchors) +- **Improved category/selector quality** across all 22 categories: 5-13 categories per config, 3-6 keywords each, semantic selector fallback chains +- **README.md**: corrected config count from outdated "50+" to accurate 178 production / 182 total; all category counts verified +- **CONTRIBUTING.md, QUALITY_GUIDELINES.md, AGENTS.md**: aligned with production standards; removed all `max_pages` guidance +- **`scripts/validate-config.py`**: fixed two bugs — unified config categories lookup (was always reporting "no categories" for multi-source configs) and `max_pages` warning logic (was warning when absent, now correctly warns when present) +- **Deleted** `.github/ISSUE_TEMPLATE/submit-config.md` (old duplicate of `submit-config.yml` with outdated content) + +## [3.0.0] - 2026-02-10 + +### 🚀 "Universal Intelligence Platform" - Major Release + +**Theme:** Transform any documentation into structured knowledge for any AI system. + +This is our biggest release ever! v3.0.0 establishes Skill Seekers as the **universal documentation preprocessor** for the entire AI ecosystem - from RAG pipelines to AI coding assistants to Claude skills. + +### Highlights + +- 🚀 **16 platform adaptors** (up from 4 in v2.x) +- ðŸ› ï¸ **26 MCP tools** (up from 9) +- ✅ **1,852 tests** passing (up from 700+) +- â˜ï¸ **Cloud storage** support (S3, GCS, Azure) +- 🔄 **CI/CD ready** (GitHub Action + Docker) +- 📦 **12 example projects** for every integration +- 📚 **18 integration guides** complete + +### Added - Platform Adaptors (16 Total) + +#### RAG & Vector Databases (8) +- **LangChain** (`--format langchain`) - Output LangChain Document objects +- **LlamaIndex** (`--format llama-index`) - Output LlamaIndex TextNode objects +- **Chroma** (`--format chroma`) - Direct ChromaDB integration +- **FAISS** (`--format faiss`) - Facebook AI Similarity Search +- **Haystack** (`--format haystack`) - Deepset Haystack pipelines +- **Qdrant** (`--format qdrant`) - Qdrant vector database +- **Weaviate** (`--format weaviate`) - Weaviate vector search +- **Pinecone-ready** (`--target markdown`) - Markdown format ready for Pinecone + +#### AI Platforms (3) +- **Claude** (`--target claude`) - Claude AI skills (ZIP + YAML) +- **Gemini** (`--target gemini`) - Google Gemini skills (tar.gz) +- **OpenAI** (`--target openai`) - OpenAI ChatGPT (ZIP + Vector Store) + +#### AI Coding Assistants (4) +- **Cursor** (`--target claude` + `.cursorrules`) - Cursor IDE integration +- **Windsurf** (`--target claude` + `.windsurfrules`) - Windsurf/Codeium +- **Cline** (`--target claude` + `.clinerules`) - VS Code extension +- **Continue.dev** (`--target claude`) - Universal IDE support + +#### Generic (1) +- **Markdown** (`--target markdown`) - Generic ZIP export + +### Added - MCP Tools (26 Total) + +#### Config Tools (3) +- `generate_config` - Generate scraping configuration +- `list_configs` - List available preset configs +- `validate_config` - Validate config JSON structure + +#### Scraping Tools (8) +- `estimate_pages` - Estimate page count before scraping +- `scrape_docs` - Scrape documentation websites +- `scrape_github` - Scrape GitHub repositories +- `scrape_pdf` - Extract from PDF files +- `scrape_codebase` - Analyze local codebases +- `detect_patterns` - Detect design patterns in code +- `extract_test_examples` - Extract usage examples from tests +- `build_how_to_guides` - Build how-to guides from code + +#### Packaging Tools (4) +- `package_skill` - Package skill for target platform +- `upload_skill` - Upload to LLM platform +- `enhance_skill` - AI-powered enhancement +- `install_skill` - One-command complete workflow + +#### Source Tools (5) +- `fetch_config` - Fetch config from remote source +- `submit_config` - Submit config for approval +- `add_config_source` - Add Git config source +- `list_config_sources` - List config sources +- `remove_config_source` - Remove config source + +#### Splitting Tools (2) +- `split_config` - Split large configs +- `generate_router` - Generate router skills + +#### Vector DB Tools (4) +- `export_to_weaviate` - Export to Weaviate +- `export_to_chroma` - Export to ChromaDB +- `export_to_faiss` - Export to FAISS +- `export_to_qdrant` - Export to Qdrant + +### Added - Cloud Storage + +Upload skills directly to cloud storage: + +- **AWS S3** - `skill-seekers cloud upload --provider s3 --bucket my-bucket` +- **Google Cloud Storage** - `skill-seekers cloud upload --provider gcs --bucket my-bucket` +- **Azure Blob Storage** - `skill-seekers cloud upload --provider azure --container my-container` + +Features: +- Upload/download directories +- List files with metadata +- Check file existence +- Generate presigned URLs +- Cloud-agnostic interface + +### Added - CI/CD Support + +#### GitHub Action +```yaml +- uses: skill-seekers/action@v1 + with: + config: configs/react.json + format: langchain +``` + +Features: +- Auto-update on doc changes +- Matrix builds for multiple frameworks +- Scheduled updates +- Caching for faster runs + +#### Docker +```bash +docker run -v $(pwd):/data skill-seekers:latest scrape --config /data/config.json +``` + +### Added - Production Infrastructure + +- **Helm Charts** - Kubernetes deployment +- **Docker Compose** - Local vector DB stack +- **Monitoring** - Sentry integration, sync monitoring +- **Benchmarking** - Performance testing framework + +### Added - 12 Example Projects + +Complete working examples for every integration: + +1. **langchain-rag-pipeline** - React docs → LangChain → Chroma +2. **llama-index-query-engine** - Vue docs → LlamaIndex +3. **pinecone-upsert** - Documentation → Pinecone +4. **chroma-example** - Full ChromaDB workflow +5. **faiss-example** - FAISS index building +6. **haystack-pipeline** - Haystack RAG pipeline +7. **qdrant-example** - Qdrant vector DB +8. **weaviate-example** - Weaviate integration +9. **cursor-react-skill** - React skill for Cursor +10. **windsurf-fastapi-context** - FastAPI for Windsurf +11. **cline-django-assistant** - Django assistant for Cline +12. **continue-dev-universal** - Universal IDE context + +### Quality Metrics + +- ✅ **1,852 tests** across 100 test files +- ✅ **58,512 lines** of Python code +- ✅ **80+ documentation** files +- ✅ **100% test coverage** for critical paths +- ✅ **CI/CD** on every commit + +### Fixed + +#### URL Conversion Bug with Anchor Fragments (Issue #277) +- **Critical Bug Fix**: Fixed 404 errors when scraping documentation with anchor links + - **Problem**: URLs with anchor fragments (e.g., `#synchronous-initialization`) were malformed + - Incorrect: `https://example.com/docs/api#method/index.html.md` ⌠+ - Correct: `https://example.com/docs/api/index.html.md` ✅ + - **Root Cause**: `_convert_to_md_urls()` didn't strip anchor fragments before appending `/index.html.md` + - **Solution**: Parse URLs with `urllib.parse` to remove fragments and deduplicate base URLs + - **Impact**: Prevents duplicate requests for the same page with different anchors + - **Additional Fix**: Changed `.md` detection from `".md" in url` to `url.endswith('.md')` + - Prevents false matches on URLs like `/cmd-line` or `/AMD-processors` +- **Test Coverage**: 12 comprehensive tests covering all edge cases + - Anchor fragment stripping + - Deduplication of multiple anchors on same URL + - Query parameter preservation + - Trailing slash handling + - Real-world MikroORM case validation + - 54/54 tests passing (42 existing + 12 new) +- **Reported by**: @devjones via Issue #277 + +### Added + +#### Extended Language Detection (NEW) +- **7 New Programming Languages**: Dart, Scala, SCSS, SASS, Elixir, Lua, Perl + - Pattern-based detection with confidence scoring (0.6-0.8+ thresholds) + - **70 regex patterns** prioritizing unique identifiers (weight 5) + - Framework-specific patterns: + - **Dart**: Flutter widgets (`StatelessWidget`, `StatefulWidget`, `Widget build()`) + - **Scala**: Pattern matching (`case class`, `trait`, `match {}`) + - **SCSS**: Preprocessor features (`$variables`, `@mixin`, `@include`, `@extend`) + - **SASS**: Indented syntax (`=mixin`, `+include`, `$variables`) + - **Elixir**: Functional patterns (`defmodule`, `def ... do`, pipe operator `|>`) + - **Lua**: Game scripting (`local`, `repeat...until`, `~=`, `elseif`) + - **Perl**: Text processing (`my $`, `use strict`, `sub`, `chomp`, regex `=~`) + - **Comprehensive test coverage**: 7 new tests, 30/30 passing (100%) + - **False positive prevention**: Unique identifiers (weight 5) + confidence thresholds + - **No regressions**: All existing language detection tests still pass + - **Total language support**: Now 27+ programming languages + - **Credit**: Contributed by @PaawanBarach via PR #275 + +#### Multi-Agent Support for Local Enhancement (NEW) +- **Multiple Coding Agent Support**: Choose your preferred local coding agent for SKILL.md enhancement + - **Claude Code** (default): Claude Code CLI with `--dangerously-skip-permissions` + - **Codex CLI**: OpenAI Codex CLI with `--full-auto` and `--skip-git-repo-check` + - **Copilot CLI**: GitHub Copilot CLI (`gh copilot chat`) + - **OpenCode CLI**: OpenCode CLI + - **Custom agents**: Use any CLI tool with `--agent custom --agent-cmd "command {prompt_file}"` +- **CLI Arguments**: New flags for agent selection + - `--agent`: Choose agent (claude, codex, copilot, opencode, custom) + - `--agent-cmd`: Override command template for custom agents +- **Environment Variables**: CI/CD friendly configuration + - `SKILL_SEEKER_AGENT`: Default agent to use + - `SKILL_SEEKER_AGENT_CMD`: Default command template for custom agents +- **Security First**: Custom command validation + - Blocks dangerous shell characters (`;`, `&`, `|`, `$`, `` ` ``, `\n`, `\r`) + - Validates executable exists in PATH + - Safe parsing with `shlex.split()` +- **Dual Input Modes**: Supports both file-based and stdin-based agents + - File-based: Uses `{prompt_file}` placeholder (Claude, custom agents) + - Stdin-based: Pipes prompt via stdin (Codex CLI) +- **Backward Compatible**: Claude Code remains the default, no breaking changes +- **Comprehensive Tests**: 13 new tests covering all agent types and security validation +- **Agent Normalization**: Smart alias handling (e.g., "claude-code" → "claude") +- **Credit**: Contributed by @rovo79 (Robert Dean) via PR #270 + +#### C3.10: Signal Flow Analysis for Godot Projects (NEW) +- **Complete Signal Flow Analysis System**: Analyze event-driven architectures in Godot game projects + - Signal declaration extraction (`signal` keyword detection) + - Connection mapping (`.connect()` calls with targets and methods) + - Emission tracking (`.emit()` and `emit_signal()` calls) + - **208 signals**, **634 connections**, and **298 emissions** detected in test project (Cosmic Idler) + - Signal density metrics (signals per file) + - Event chain detection (signals triggering other signals) + - Output: `signal_flow.json`, `signal_flow.mmd` (Mermaid diagram), `signal_reference.md` + +- **Signal Pattern Detection**: Three major patterns identified + - **EventBus Pattern** (0.90 confidence): Centralized signal hub in autoload + - **Observer Pattern** (0.85 confidence): Multi-observer signals (3+ listeners) + - **Event Chains** (0.80 confidence): Cascading signal propagation + +- **Signal-Based How-To Guides (C3.10.1)**: AI-generated usage guides + - Step-by-step guides (Connect → Emit → Handle) + - Real code examples from project + - Common usage locations + - Parameter documentation + - Output: `signal_how_to_guides.md` (10 guides for Cosmic Idler) + +#### Godot Game Engine Support +- **Comprehensive Godot File Type Support**: Full analysis of Godot 4.x projects + - **GDScript (.gd)**: 265 files analyzed in test project + - **Scene files (.tscn)**: 118 scene files + - **Resource files (.tres)**: 38 resource files + - **Shader files (.gdshader, .gdshaderinc)**: 9 shader files + - **C# integration**: Phantom Camera addon (13 files) + +- **GDScript Language Support**: Complete GDScript parsing with regex-based extraction + - Dependency extraction: `preload()`, `load()`, `extends` patterns + - Test framework detection: GUT, gdUnit4, WAT + - Test file patterns: `test_*.gd`, `*_test.gd` + - Signal syntax: `signal`, `.connect()`, `.emit()` + - Export decorators: `@export`, `@onready` + - Test decorators: `@test` (gdUnit4) + +- **Game Engine Framework Detection**: Improved detection for Unity, Unreal, Godot + - **Godot markers**: `project.godot`, `.godot` directory, `.tscn`, `.tres`, `.gd` files + - **Unity markers**: `Assembly-CSharp.csproj`, `UnityEngine.dll`, `ProjectSettings/ProjectVersion.txt` + - **Unreal markers**: `.uproject`, `Source/`, `Config/DefaultEngine.ini` + - Fixed false positive Unity detection (was using generic "Assets" keyword) + +- **GDScript Test Extraction**: Extract usage examples from Godot test files + - **396 test cases** extracted from 20 GUT test files in test project + - Patterns: instantiation (`preload().new()`, `load().new()`), assertions (`assert_eq`, `assert_true`), signals + - GUT framework: `extends GutTest`, `func test_*()`, `add_child_autofree()` + - Test categories: instantiation, assertions, signal connections, setup/teardown + - Real code examples from production test files + +#### C3.9: Project Documentation Extraction +- **Markdown Documentation Extraction**: Automatically extracts and categorizes all `.md` files from projects + - Smart categorization by folder/filename (overview, architecture, guides, workflows, features, etc.) + - Processing depth control: `surface` (raw copy), `deep` (parse+summarize), `full` (AI-enhanced) + - AI enhancement (level 2+) adds topic extraction and cross-references + - New "📖 Project Documentation" section in SKILL.md + - Output to `references/documentation/` organized by category + - Default ON, use `--skip-docs` to disable + - 15 new tests for documentation extraction features + +#### Granular AI Enhancement Control +- **`--enhance-level` Flag**: Fine-grained control over AI enhancement (0-3) + - Level 0: No AI enhancement (default) + - Level 1: SKILL.md enhancement only (fast, high value) + - Level 2: SKILL.md + Architecture + Config + Documentation + - Level 3: Full enhancement (patterns, tests, config, architecture, docs) +- **Config Integration**: `default_enhance_level` setting in `~/.config/skill-seekers/config.json` +- **MCP Support**: All MCP tools updated with `enhance_level` parameter +- **Independent from `--comprehensive`**: Enhancement level is separate from feature depth + +#### C# Language Support +- **C# Test Example Extraction**: Full support for C# test frameworks + - Language alias mapping (C# → csharp, C++ → cpp) + - NUnit, xUnit, MSTest test framework patterns + - Mock pattern support (NSubstitute, Moq) + - Zenject dependency injection patterns + - Setup/teardown method extraction + - 2 new tests for C# extraction features + +#### Performance Optimizations +- **Parallel LOCAL Mode AI Enhancement**: 6-12x faster with ThreadPoolExecutor + - Concurrent workers: 3 (configurable via `local_parallel_workers`) + - Batch processing: 20 patterns per Claude CLI call (configurable via `local_batch_size`) + - Significant speedup for large codebases +- **Config Settings**: New `ai_enhancement` section in config + - `local_batch_size`: Patterns per CLI call (default: 20) + - `local_parallel_workers`: Concurrent workers (default: 3) + +#### UX Improvements +- **Auto-Enhancement**: SKILL.md automatically enhanced when using `--enhance` or `--comprehensive` + - No need for separate `skill-seekers enhance` command + - Seamless one-command workflow + - 10-minute timeout for large codebases + - Graceful fallback with retry instructions on failure +- **LOCAL Mode Fallback**: All AI enhancements now fall back to LOCAL mode when no API key is set + - Applies to: pattern enhancement (C3.1), test examples (C3.2), architecture (C3.7) + - Uses Claude Code CLI instead of failing silently + - Better UX: "Using LOCAL mode (Claude Code CLI)" instead of "AI disabled" + +- Support for custom Claude-compatible API endpoints via `ANTHROPIC_BASE_URL` environment variable +- Compatibility with GLM-4.7 and other Claude-compatible APIs across all AI enhancement features + +### Changed +- All AI enhancement modules now respect `ANTHROPIC_BASE_URL` for custom endpoints +- Updated documentation with GLM-4.7 configuration examples +- Rewritten LOCAL mode in `config_enhancer.py` to use Claude CLI properly with explicit output file paths +- Updated MCP `scrape_codebase_tool` with `skip_docs` and `enhance_level` parameters +- Updated CLAUDE.md with C3.9 documentation extraction feature +- Increased default batch size from 5 to 20 patterns for LOCAL mode + +### Fixed +- **C# Test Extraction**: Fixed "Language C# not supported" error with language alias mapping +- **Config Type Field Mismatch**: Fixed KeyError in `config_enhancer.py` by supporting both "type" and "config_type" fields +- **LocalSkillEnhancer Import**: Fixed incorrect import and method call in `main.py` (SkillEnhancer → LocalSkillEnhancer) +- **Code Quality**: Fixed 4 critical linter errors (unused imports, variables, arguments, import sorting) + +#### Godot Game Engine Fixes +- **GDScript Dependency Extraction**: Fixed 265+ "Syntax error in *.gd" warnings (commit 3e6c448) + - GDScript files were incorrectly routed to Python AST parser + - Created dedicated `_extract_gdscript_imports()` with regex patterns + - Now correctly parses `preload()`, `load()`, `extends` patterns + - Result: 377 dependencies extracted with 0 warnings + +- **Framework Detection False Positive**: Fixed Unity detection on Godot projects (commit 50b28fe) + - Was detecting "Unity" due to generic "Assets" keyword in comments + - Changed Unity markers to specific files: `Assembly-CSharp.csproj`, `UnityEngine.dll`, `Library/` + - Now correctly detects Godot via `project.godot`, `.godot` directory + +- **Circular Dependencies**: Fixed self-referential cycles (commit 50b28fe) + - 3 self-loop warnings (files depending on themselves) + - Added `target != file_path` check in dependency graph builder + - Result: 0 circular dependencies detected + +- **GDScript Test Discovery**: Fixed 0 test files found in Godot projects (commit 50b28fe) + - Added GDScript test patterns: `test_*.gd`, `*_test.gd` + - Added GDScript to LANGUAGE_MAP + - Result: 32 test files discovered (20 GUT files with 396 tests) + +- **GDScript Test Extraction**: Fixed "Language GDScript not supported" warning (commit c826690) + - Added GDScript regex patterns to PATTERNS dictionary + - Patterns: instantiation (`preload().new()`), assertions (`assert_eq`), signals (`.connect()`) + - Result: 22 test examples extracted successfully + +- **Config Extractor Array Handling**: Fixed JSON/YAML array parsing (commit fca0951) + - Error: `'list' object has no attribute 'items'` on root-level arrays + - Added isinstance checks for dict/list/primitive at root + - Result: No JSON array errors, save.json parsed correctly + +- **Progress Indicators**: Fixed missing progress for small batches (commit eec37f5) + - Progress only shown every 5 batches, invisible for small jobs + - Modified condition to always show for batches < 10 + - Result: "Progress: 1/2 batches completed" now visible + +#### Other Fixes +- **C# Test Extraction**: Fixed "Language C# not supported" error with language alias mapping +- **Config Type Field Mismatch**: Fixed KeyError in `config_enhancer.py` by supporting both "type" and "config_type" fields +- **LocalSkillEnhancer Import**: Fixed incorrect import and method call in `main.py` (SkillEnhancer → LocalSkillEnhancer) +- **Code Quality**: Fixed 4 critical linter errors (unused imports, variables, arguments, import sorting) + +### Tests +- **GDScript Test Extraction Test**: Added comprehensive test case for GDScript GUT/gdUnit4 framework + - Tests player instantiation with `preload()` and `load()` + - Tests signal connections and emissions + - Tests gdUnit4 `@test` annotation syntax + - Tests game state management patterns + - 4 test functions with 60+ lines of GDScript code + - Validates extraction of instantiations, assertions, and signal patterns + +### Removed +- Removed client-specific documentation files from repository + +--- + +## [2.7.4] - 2026-01-22 + +### 🔧 Bug Fix - Language Selector Links + +This **patch release** fixes the broken Chinese language selector link that appeared on PyPI and other non-GitHub platforms. + +### Fixed + +- **Broken Language Selector Links on PyPI** + - **Issue**: Chinese language link used relative URL (`README.zh-CN.md`) which only worked on GitHub + - **Impact**: Users on PyPI clicking "简体中文" got 404 errors + - **Solution**: Changed to absolute GitHub URL (`https://github.com/yusufkaraaslan/Skill_Seekers/blob/main/README.zh-CN.md`) + - **Result**: Language selector now works on PyPI, GitHub, and all platforms + - **Files Fixed**: `README.md`, `README.zh-CN.md` + +### Technical Details + +**Why This Happened:** +- PyPI displays `README.md` but doesn't include `README.zh-CN.md` in the package +- Relative links break when README is rendered outside GitHub repository context +- Absolute GitHub URLs work universally across all platforms + +**Impact:** +- ✅ Chinese language link now accessible from PyPI +- ✅ Consistent experience across all platforms +- ✅ Better user experience for Chinese developers + +--- + +## [2.7.3] - 2026-01-21 + +### 🌠International i18n Release + +This **documentation release** adds comprehensive Chinese language support, making Skill Seekers accessible to the world's largest developer community. + +### Added + +- **🇨🇳 Chinese (Simplified) README Translation** (#260) + - Complete 1,962-line translation of all documentation (README.zh-CN.md) + - Language selector badges in both English and Chinese READMEs + - Machine translation disclaimer with invitation for community improvements + - GitHub issue #260 created for community review and contributions + - Impact: Makes Skill Seekers accessible to 1+ billion Chinese speakers + +- **📦 PyPI Metadata Internationalization** + - Updated package description to highlight Chinese documentation availability + - Added i18n-related keywords: "i18n", "chinese", "international" + - Added Natural Language classifiers: English and Chinese (Simplified) + - Added direct link to Chinese README in project URLs + - Impact: Better discoverability on PyPI for Chinese developers + +### Why This Matters + +- **Market Reach**: Addresses existing Chinese traffic and taps into world's largest developer community +- **Discoverability**: Better indexing on Chinese search engines (Baidu, Gitee, etc.) +- **User Experience**: Native language documentation lowers barrier to entry +- **Community Growth**: Opens contribution opportunities from Chinese developers +- **Competitive Edge**: Most similar tools don't offer Chinese documentation + +### Community Engagement + +Chinese developers are invited to improve the translation quality: +- Review issue: https://github.com/yusufkaraaslan/Skill_Seekers/issues/260 +- Translation guidelines provided for technical accuracy and natural expression +- All contributions welcome and appreciated + +--- + +## [2.7.2] - 2026-01-21 + +### 🚨 Critical CLI Bug Fixes + +This **hotfix release** resolves 4 critical CLI bugs reported in issues #258 and #259 that prevented core commands from working correctly. + +### Fixed + +- **Issue #258: `install --config` command fails with unified scraper** (#258) + - **Root Cause**: `unified_scraper.py` missing `--fresh` and `--dry-run` argument definitions + - **Solution**: Added both flags to unified_scraper argument parser and main.py dispatcher + - **Impact**: `skill-seekers install --config react` now works without "unrecognized arguments" error + - **Files Fixed**: `src/skill_seekers/cli/unified_scraper.py`, `src/skill_seekers/cli/main.py` + +- **Issue #259 (Original): `scrape` command doesn't accept URL and --max-pages** (#259) + - **Root Cause**: No positional URL argument or `--max-pages` flag support + - **Solution**: Added positional URL argument and `--max-pages` flag with safety warnings + - **Impact**: `skill-seekers scrape https://example.com --max-pages 50` now works + - **Safety Warnings**: + - âš ï¸ Warning if max-pages > 1000 (may take hours) + - âš ï¸ Warning if max-pages < 10 (incomplete skill) + - **Files Fixed**: `src/skill_seekers/cli/doc_scraper.py`, `src/skill_seekers/cli/main.py` + +- **Issue #259 (Comment A): Version shows 2.7.0 instead of actual version** (#259) + - **Root Cause**: Hardcoded version string in main.py + - **Solution**: Import `__version__` from `__init__.py` dynamically + - **Impact**: `skill-seekers --version` now shows correct version (2.7.2) + - **Files Fixed**: `src/skill_seekers/cli/main.py` + +- **Issue #259 (Comment B): PDF command shows empty "Error: " message** (#259) + - **Root Cause**: Exception handler didn't handle empty exception messages + - **Solution**: + - Improved exception handler to show exception type if message is empty + - Added proper error handling with context-specific messages + - Added traceback support in verbose mode + - **Impact**: PDF errors now show clear messages like "Error: RuntimeError occurred" instead of just "Error: " + - **Files Fixed**: `src/skill_seekers/cli/main.py`, `src/skill_seekers/cli/pdf_scraper.py` + +### Testing + +- ✅ Verified `skill-seekers install --config react --dry-run` works +- ✅ Verified `skill-seekers scrape https://tailwindcss.com/docs/installation --max-pages 50` works +- ✅ Verified `skill-seekers --version` shows "2.7.2" +- ✅ Verified PDF errors show proper messages +- ✅ All 202 tests passing + +--- + +## [2.7.1] - 2026-01-18 + +### 🚨 Critical Bug Fix - Config Download 404 Errors + +This **hotfix release** resolves a critical bug causing 404 errors when downloading configs from the API. + +### Fixed + +- **Critical: Config download 404 errors** - Fixed bug where code was constructing download URLs manually instead of using the `download_url` field from the API response + - **Root Cause**: Code was building `f"{API_BASE_URL}/api/download/{config_name}.json"` which failed when actual URLs differed (CDN URLs, version-specific paths) + - **Solution**: Changed to use `config_info.get("download_url")` from API response in both MCP server implementations + - **Files Fixed**: + - `src/skill_seekers/mcp/tools/source_tools.py` (FastMCP server) + - `src/skill_seekers/mcp/server_legacy.py` (Legacy server) + - **Impact**: Fixes all config downloads from skillseekersweb.com API and private Git repositories + - **Reported By**: User testing `skill-seekers install --config godot --unlimited` + - **Testing**: All 15 source tools tests pass, all 8 fetch_config tests pass + +--- + +## [2.7.0] - 2026-01-18 + +### 🔠Smart Rate Limit Management & Multi-Token Configuration + +This **minor feature release** introduces intelligent GitHub rate limit handling, multi-profile token management, and comprehensive configuration system. Say goodbye to indefinite waits and confusing token setup! + +### Added + +- **🎯 Multi-Token Configuration System** - Flexible GitHub token management with profiles + - **Secure config storage** at `~/.config/skill-seekers/config.json` with 600 permissions + - **Multiple GitHub profiles** support (personal, work, OSS, etc.) + - Per-profile rate limit strategies: `prompt`, `wait`, `switch`, `fail` + - Configurable timeout per profile (default: 30 minutes) + - Auto-detection and smart fallback chain + - Profile switching when rate limited + - **API key management** for Claude, Gemini, OpenAI + - Environment variable fallback (ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENAI_API_KEY) + - Config file storage with secure permissions + - **Progress tracking** for resumable jobs + - Auto-save at configurable intervals (default: 60 seconds) + - Job metadata: command, progress, checkpoints, timestamps + - Stored at `~/.local/share/skill-seekers/progress/` + - **Auto-cleanup** of old progress files (default: 7 days, configurable) + - **First-run experience** with welcome message and quick setup + - **ConfigManager class** with singleton pattern for global access + +- **🧙 Interactive Configuration Wizard** - Beautiful terminal UI for easy setup + - **Main menu** with 7 options: + 1. GitHub Token Setup + 2. API Keys (Claude, Gemini, OpenAI) + 3. Rate Limit Settings + 4. Resume Settings + 5. View Current Configuration + 6. Test Connections + 7. Clean Up Old Progress Files + - **GitHub token management**: + - Add/remove profiles with descriptions + - Set default profile + - Browser integration - opens GitHub token creation page + - Token validation with format checking (ghp_*, github_pat_*) + - Strategy selection per profile + - **API keys setup** with browser integration for each provider + - **Connection testing** to verify tokens and API keys + - **Configuration display** with current status and sources + - **CLI commands**: + - `skill-seekers config` - Main menu + - `skill-seekers config --github` - Direct to GitHub setup + - `skill-seekers config --api-keys` - Direct to API keys + - `skill-seekers config --show` - Show current config + - `skill-seekers config --test` - Test connections + +- **🚦 Smart Rate Limit Handler** - Intelligent GitHub API rate limit management + - **Upfront warning** about token status (60/hour vs 5000/hour) + - **Real-time detection** of rate limits from GitHub API responses + - Parses X-RateLimit-* headers + - Detects 403 rate limit errors + - Calculates reset time from timestamps + - **Live countdown timers** with progress display + - **Automatic profile switching** - tries next available profile when rate limited + - **Four rate limit strategies**: + - `prompt` - Ask user what to do (default, interactive) + - `wait` - Auto-wait with countdown timer + - `switch` - Automatically try another profile + - `fail` - Fail immediately with clear error + - **Non-interactive mode** for CI/CD (fail fast, no prompts) + - **Configurable timeouts** per profile (prevents indefinite waits) + - **RateLimitHandler class** with strategy pattern + - **Integration points**: GitHub fetcher, GitHub scraper + +- **📦 Resume Command** - Resume interrupted scraping jobs + - **List resumable jobs** with progress details: + - Job ID, started time, command + - Current phase and file counts + - Last updated timestamp + - **Resume from checkpoints** (skeleton implemented, ready for integration) + - **Auto-cleanup** of old jobs (respects config settings) + - **CLI commands**: + - `skill-seekers resume --list` - List all resumable jobs + - `skill-seekers resume ` - Resume specific job + - `skill-seekers resume --clean` - Clean up old jobs + - **Progress storage** at `~/.local/share/skill-seekers/progress/.json` + +- **âš™ï¸ CLI Enhancements** - New flags and improved UX + - **--non-interactive flag** for CI/CD mode + - Available on: `skill-seekers github` + - Fails fast on rate limits instead of prompting + - Perfect for automated pipelines + - **--profile flag** to select specific GitHub profile + - Available on: `skill-seekers github` + - Uses configured profile from `~/.config/skill-seekers/config.json` + - Overrides environment variables and defaults + - **Entry points** for new commands: + - `skill-seekers-config` - Direct config command access + - `skill-seekers-resume` - Direct resume command access + +- **🧪 Comprehensive Test Suite** - Full test coverage for new features + - **16 new tests** in `test_rate_limit_handler.py` + - **Test coverage**: + - Header creation (with/without token) + - Handler initialization (token, strategy, config) + - Rate limit detection and extraction + - Upfront checks (interactive and non-interactive) + - Response checking (200, 403, rate limit) + - Strategy handling (fail, wait, switch, prompt) + - Config manager integration + - Profile management (add, retrieve, switch) + - **All tests passing** ✅ (16/16) + - **Test utilities**: Mock responses, config isolation, tmp directories + +- **🎯 Bootstrap Skill Feature** - Self-hosting capability (PR #249) + - **Self-Bootstrap**: Generate skill-seekers as a Claude Code skill + - `./scripts/bootstrap_skill.sh` - One-command bootstrap + - Combines manual header with auto-generated codebase analysis + - Output: `output/skill-seekers/` ready for Claude Code + - Install: `cp -r output/skill-seekers ~/.claude/skills/` + - **Robust Frontmatter Detection**: + - Dynamic YAML frontmatter boundary detection (not hardcoded line counts) + - Fallback to line 6 if frontmatter not found + - Future-proof against frontmatter field additions + - **SKILL.md Validation**: + - File existence and non-empty checks + - Frontmatter delimiter presence + - Required fields validation (name, description) + - Exit with clear error messages on validation failures + - **Comprehensive Error Handling**: + - UV dependency check with install instructions + - Permission checks for output directory + - Graceful degradation on missing header file + +- **🔧 MCP Now Optional** - User choice for installation profile + - **CLI Only**: `pip install skill-seekers` - No MCP dependencies + - **MCP Integration**: `pip install skill-seekers[mcp]` - Full MCP support + - **All Features**: `pip install skill-seekers[all]` - Everything enabled + - **Lazy Loading**: Graceful failure with helpful error messages when MCP not installed + - **Interactive Setup Wizard**: + - Shows all installation options on first run + - Stored at `~/.config/skill-seekers/.setup_shown` + - Accessible via `skill-seekers-setup` command + - **Entry Point**: `skill-seekers-setup` for manual access + +- **🧪 E2E Testing for Bootstrap** - Comprehensive end-to-end tests + - **6 core tests** verifying bootstrap workflow: + - Output structure creation + - Header prepending + - YAML frontmatter validation + - Line count sanity checks + - Virtual environment installability + - Platform adaptor compatibility + - **Pytest markers**: @pytest.mark.e2e, @pytest.mark.venv, @pytest.mark.slow + - **Execution modes**: + - Fast tests: `pytest -k "not venv"` (~2-3 min) + - Full suite: `pytest -m "e2e"` (~5-10 min) + - **Test utilities**: Fixtures for project root, bootstrap runner, output directory + +- **📚 Comprehensive Documentation Overhaul** - Complete v2.7.0 documentation update + - **7 new documentation files** (~3,750 lines total): + - `docs/reference/API_REFERENCE.md` (750 lines) - Programmatic usage guide for Python developers + - `docs/features/BOOTSTRAP_SKILL.md` (450 lines) - Self-hosting capability documentation + - `docs/reference/CODE_QUALITY.md` (550 lines) - Code quality standards and ruff linting guide + - `docs/guides/TESTING_GUIDE.md` (750 lines) - Complete testing reference (1200+ test suite) + - `docs/QUICK_REFERENCE.md` (300 lines) - One-page cheat sheet for quick command lookup + - `docs/guides/MIGRATION_GUIDE.md` (400 lines) - Version upgrade guides (v1.0.0 → v2.7.0) + - `docs/FAQ.md` (550 lines) - Comprehensive Q&A for common user questions + - **10 existing files updated**: + - `README.md` - Updated test count badge (700+ → 1200+ tests), v2.7.0 callout + - `ROADMAP.md` - Added v2.7.0 completion section with task statuses + - `CONTRIBUTING.md` - Added link to CODE_QUALITY.md reference + - `docs/README.md` - Quick links by use case, recent updates section + - `docs/guides/MCP_SETUP.md` - Fixed server_fastmcp references (PR #252) + - `docs/QUICK_REFERENCE.md` - Updated MCP server reference (server.py → server_fastmcp.py) + - `CLAUDE_INTEGRATION.md` - Updated version references + - 3 other documentation files with v2.7.0 updates + - **Version consistency**: All version references standardized to v2.7.0 + - **Test counts**: Standardized to 1200+ tests (was inconsistent 700+ in some docs) + - **MCP tool counts**: Updated to 18 tools (from 17) + +- **📦 Git Submodules for Configuration Management** - Improved config organization and API deployment + - **Configs as git submodule** at `api/configs_repo/` for cleaner repository + - **Production configs**: Added official production-ready configuration presets + - **Duplicate removal**: Cleaned up all duplicate configs from main repository + - **Test filtering**: Filtered out test-example configs from API endpoints + - **CI/CD integration**: GitHub Actions now initializes submodules automatically + - **API deployment**: Updated render.yaml to use git submodule for configs_repo + - **Benefits**: Cleaner main repo, better config versioning, production/test separation + +- **🔠Config Discovery Enhancements** - Improved config listing + - **--all flag** for estimate command: `skill-seekers estimate --all` + - Lists all available preset configurations with descriptions + - Helps users discover supported frameworks before scraping + - Shows config names, frameworks, and documentation URLs + +### Changed + +- **GitHub Fetcher** - Integrated rate limit handler + - Modified `github_fetcher.py` to use `RateLimitHandler` + - Added upfront rate limit check before starting + - Check responses for rate limits on all API calls + - Automatic profile detection from config + - Raises `RateLimitError` when rate limit cannot be handled + - Constructor now accepts `interactive` and `profile_name` parameters + +- **GitHub Scraper** - Added rate limit support + - New `--non-interactive` flag for CI/CD mode + - New `--profile` flag to select GitHub profile + - Config now supports `interactive` and `github_profile` keys + - CLI argument passing for non-interactive and profile options + +- **Main CLI** - Enhanced with new commands + - Added `config` subcommand with options (--github, --api-keys, --show, --test) + - Added `resume` subcommand with options (--list, --clean) + - Updated GitHub subcommand with --non-interactive and --profile flags + - Updated command documentation strings + - Version bumped to 2.7.0 + +- **pyproject.toml** - New entry points and dependency restructuring + - Added `skill-seekers-config` entry point + - Added `skill-seekers-resume` entry point + - Added `skill-seekers-setup` entry point for setup wizard + - **MCP moved to optional dependencies** - Now requires `pip install skill-seekers[mcp]` + - Updated pytest markers: e2e, venv, bootstrap, slow + - Version updated to 2.7.0 + +- **install_skill.py** - Lazy MCP loading + - Try/except ImportError for MCP imports + - Graceful failure with helpful error message when MCP not installed + - Suggests alternatives: scrape + package workflow + - Maintains backward compatibility for existing MCP users + +### Fixed + +- **Code Quality Improvements** - Fixed all 21 ruff linting errors across codebase + - SIM102: Combined nested if statements using `and` operator (7 fixes) + - SIM117: Combined multiple `with` statements into single multi-context `with` (9 fixes) + - B904: Added `from e` to exception chaining for proper error context (1 fix) + - SIM113: Removed unused enumerate counter variable (1 fix) + - B007: Changed unused loop variable to `_` (1 fix) + - ARG002: Removed unused method argument in test fixture (1 fix) + - Files affected: config_extractor.py, config_validator.py, doc_scraper.py, pattern_recognizer.py (3), test_example_extractor.py (3), unified_skill_builder.py, pdf_scraper.py, and 6 test files + - Result: Zero linting errors, cleaner code, better maintainability + +- **Version Synchronization** - Fixed version mismatch across package (Issue #248) + - All `__init__.py` files now correctly show version 2.7.0 (was 2.5.2 in 4 files) + - Files updated: `src/skill_seekers/__init__.py`, `src/skill_seekers/cli/__init__.py`, `src/skill_seekers/mcp/__init__.py`, `src/skill_seekers/mcp/tools/__init__.py` + - Ensures `skill-seekers --version` shows accurate version number + - **Critical**: Prevents bug where PyPI shows wrong version (Issue #248) + +- **Case-Insensitive Regex in Install Workflow** - Fixed install workflow failures (Issue #236) + - Made regex patterns case-insensitive using `(?i)` flag + - Patterns now match both "Saved to:" and "saved to:" (and any case variation) + - Files: `src/skill_seekers/mcp/tools/packaging_tools.py` (lines 529, 668) + - Impact: install_skill workflow now works reliably regardless of output formatting + +- **Test Fixture Error** - Fixed pytest fixture error in bootstrap skill tests + - Removed unused `tmp_path` parameter causing fixture lookup errors + - File: `tests/test_bootstrap_skill.py:54` + - Result: All CI test runs now pass without fixture errors + +- **MCP Setup Modernization** - Updated MCP server configuration (PR #252, @MiaoDX) + - Fixed 41 instances of `server_fastmcp_fastmcp` → `server_fastmcp` typo in docs/guides/MCP_SETUP.md + - Updated all 12 files to use `skill_seekers.mcp.server_fastmcp` module + - Enhanced setup_mcp.sh with automatic venv detection (.venv, venv, $VIRTUAL_ENV) + - Updated tests to accept `-e ".[mcp]"` format and module references + - Files: .claude/mcp_config.example.json, CLAUDE.md, README.md, docs/guides/*.md, setup_mcp.sh, tests/test_setup_scripts.py + - Benefits: Eliminates "module not found" errors, clean dependency isolation, prepares for v3.0.0 + +- **Rate limit indefinite wait** - No more infinite waiting + - Configurable timeout per profile (default: 30 minutes) + - Clear error messages when timeout exceeded + - Graceful exit with helpful next steps + - Resume capability for interrupted jobs + +- **Token setup confusion** - Clear, guided setup process + - Interactive wizard with browser integration + - Token validation with helpful error messages + - Clear documentation of required scopes + - Test connection feature to verify tokens work + +- **CI/CD failures** - Non-interactive mode support + - `--non-interactive` flag fails fast instead of hanging + - No user prompts in non-interactive mode + - Clear error messages for automation logs + - Exit codes for pipeline integration + +- **AttributeError in codebase_scraper.py** - Fixed incorrect flag check (PR #249) + - Changed `if args.build_api_reference:` to `if not args.skip_api_reference:` + - Aligns with v2.5.2 opt-out flag strategy (--skip-* instead of --build-*) + - Fixed at line 1193 in codebase_scraper.py + +### Technical Details + +- **Architecture**: Strategy pattern for rate limit handling, singleton for config manager +- **Files Modified**: 6 (github_fetcher.py, github_scraper.py, main.py, pyproject.toml, install_skill.py, codebase_scraper.py) +- **New Files**: 6 (config_manager.py ~490 lines, config_command.py ~400 lines, rate_limit_handler.py ~450 lines, resume_command.py ~150 lines, setup_wizard.py ~95 lines, test_bootstrap_skill_e2e.py ~169 lines) +- **Bootstrap Scripts**: 2 (bootstrap_skill.sh enhanced, skill_header.md) +- **Tests**: 22 tests added, all passing (16 rate limit + 6 E2E bootstrap) +- **Dependencies**: MCP moved to optional, no new required dependencies +- **Backward Compatibility**: Fully backward compatible, MCP optionality via pip extras +- **Credits**: Bootstrap feature contributed by @MiaoDX (PR #249) + +### Migration Guide + +**Existing users** - No migration needed! Everything works as before. + +**MCP users** - If you use MCP integration features: +```bash +# Reinstall with MCP support +pip install -U skill-seekers[mcp] + +# Or install everything +pip install -U skill-seekers[all] +``` + +**New installation profiles**: +```bash +# CLI only (no MCP) +pip install skill-seekers + +# With MCP integration +pip install skill-seekers[mcp] + +# With multi-LLM support (Gemini, OpenAI) +pip install skill-seekers[all-llms] + +# Everything +pip install skill-seekers[all] + +# See all options +skill-seekers-setup +``` + +**To use new features**: +```bash +# Set up GitHub token (one-time) +skill-seekers config --github + +# Add multiple profiles +skill-seekers config +# → Select "1. GitHub Token Setup" +# → Select "1. Add New Profile" + +# Use specific profile +skill-seekers github --repo owner/repo --profile work + +# CI/CD mode +skill-seekers github --repo owner/repo --non-interactive + +# View configuration +skill-seekers config --show + +# Bootstrap skill-seekers as a Claude Code skill +./scripts/bootstrap_skill.sh +cp -r output/skill-seekers ~/.claude/skills/ +``` + +### Breaking Changes + +None - this release is fully backward compatible. + +--- + +## [2.6.0] - 2026-01-13 + +### 🚀 Codebase Analysis Enhancements & Documentation Reorganization + +This **minor feature release** completes the C3.x codebase analysis suite with standalone SKILL.md generation for codebase scraper, adds comprehensive documentation reorganization, and includes quality-of-life improvements for setup and testing. + +### Added +- **C3.8 Standalone Codebase Scraper SKILL.md Generation** - Complete skill structure for standalone codebase analysis + - Generates comprehensive SKILL.md (300+ lines) with all C3.x analysis integrated + - Sections: Description, When to Use, Quick Reference, Design Patterns, Architecture, Configuration, Available References + - Includes language statistics, analysis depth indicators, and feature checkboxes + - Creates references/ directory with organized outputs (API, dependencies, patterns, architecture, config) + - Integration points: + - CLI tool: `skill-seekers analyze --directory /path/to/code --output /path/to/output` + - Unified scraper: Automatic SKILL.md generation when using codebase analysis + - Format helpers for all C3.x sections (patterns, examples, API, architecture, config) + - Perfect for local codebase documentation without GitHub + - **Use Cases**: Private codebases, offline analysis, local project documentation, pre-commit hooks + - Documentation: Integrated into codebase scraper workflow + +- **Global Setup Script with FastMCP** - setup.sh for end-user global installation + - New `setup.sh` script for global PyPI installation (vs `setup_mcp.sh` for development) + - Installs `skill-seekers` globally: `pip3 install skill-seekers` + - Sets up MCP server configuration for Claude Code Desktop + - Creates MCP configuration in `~/.claude/mcp_settings.json` + - Uses global Python installation (no editable install) + - Perfect for end users who want to use Skill Seekers without development setup + - **Separate from development setup**: `setup_mcp.sh` remains for editable development installs + - Documentation: Root-level setup.sh with clear installation instructions + +- **Comprehensive Documentation Reorganization** - Complete overhaul of documentation structure + - Removed 7 temporary/analysis files from root directory + - Archived 14 historical documents to `docs/archive/` (historical, research, temp) + - Organized 29 documentation files into clear subdirectories: + - `docs/features/` (10 files) - Core features, AI enhancement, PDF tools + - `docs/integrations/` (3 files) - Multi-LLM platform support + - `docs/guides/` (6 files) - Setup, MCP, usage guides + - `docs/reference/` (8 files) - Architecture, standards, technical reference + - Created `docs/README.md` - Comprehensive navigation index with: + - Quick navigation by category + - "I want to..." user-focused navigation + - Clear entry points for all documentation + - Links to guides, features, integrations, and reference docs + - **Benefits**: 3x faster documentation discovery, user-focused navigation, scalable structure + - **Structure**: Before: 64 files scattered → After: 57 files organized with clear navigation + +- **Test Configuration** - AstroValley unified config for testing + - Added `configs/astrovalley_unified.json` for comprehensive testing + - Demonstrates GitHub + codebase analysis integration + - Verified AI enhancement works on both standalone and unified skills + - Tests context awareness: standalone (codebase-only) vs unified (GitHub+codebase) + - Quality metrics: 8.2x growth for standalone, 3.7x for unified enhancement + +- **Enhanced LOCAL Enhancement Modes** - Advanced enhancement execution options (moved from previous unreleased) + - **4 Execution Modes** for different use cases: + - **Headless** (default): Runs in foreground, waits for completion (perfect for CI/CD) + - **Background** (`--background`): Runs in background thread, returns immediately + - **Daemon** (`--daemon`): Fully detached process with `nohup`, survives parent exit + - **Terminal** (`--interactive-enhancement`): Opens new terminal window (macOS) + - **Force Mode (Default ON)**: Skip all confirmations by default for maximum automation + - **No flag needed** - force mode is ON by default + - Use `--no-force` to enable confirmation prompts if needed + - Perfect for CI/CD, batch processing, unattended execution + - "Dangerously skip mode" as requested - auto-yes to everything + - **Status Monitoring**: New `enhance-status` command for background/daemon processes + - Check status once: `skill-seekers enhance-status output/react/` + - Watch in real-time: `skill-seekers enhance-status output/react/ --watch` + - JSON output for scripts: `skill-seekers enhance-status output/react/ --json` + - **Status File**: `.enhancement_status.json` tracks progress (status, message, progress %, PID, timestamp, errors) + - **Daemon Logging**: `.enhancement_daemon.log` for daemon mode execution logs + - **Timeout Configuration**: Custom timeouts for different skill sizes (`--timeout` flag) + - **CLI Integration**: All modes accessible via `skill-seekers enhance` command + - **Documentation**: New `docs/ENHANCEMENT_MODES.md` guide with examples + - **Use Cases**: + - CI/CD pipelines: Force ON by default (no extra flags!) + - Long-running tasks: `--daemon` for tasks that survive logout + - Parallel processing: `--background` for batch enhancement + - Debugging: `--interactive-enhancement` to watch Claude Code work + +- **C3.1 Design Pattern Detection** - Detect 10 common design patterns in code + - Detects: Singleton, Factory, Observer, Strategy, Decorator, Builder, Adapter, Command, Template Method, Chain of Responsibility + - Supports 9 languages: Python, JavaScript, TypeScript, C++, C, C#, Go, Rust, Java (plus Ruby, PHP) + - Three detection levels: surface (fast), deep (balanced), full (thorough) + - Language-specific adaptations for better accuracy + - CLI tool: `skill-seekers-patterns --file src/db.py` + - Codebase scraper integration: `--detect-patterns` flag + - MCP tool: `detect_patterns` for Claude Code integration + - 24 comprehensive tests, 100% passing + - 87% precision, 80% recall (tested on 100 real-world projects) + - Documentation: `docs/PATTERN_DETECTION.md` + +- **C3.2 Test Example Extraction** - Extract real usage examples from test files + - Analyzes test files to extract real API usage patterns + - Categories: instantiation, method_call, config, setup, workflow + - Supports 9 languages: Python (AST-based deep analysis), JavaScript, TypeScript, Go, Rust, Java, C#, PHP, Ruby (regex-based) + - Quality filtering with confidence scoring (removes trivial patterns) + - CLI tool: `skill-seekers extract-test-examples tests/ --language python` + - Codebase scraper integration: `--extract-test-examples` flag + - MCP tool: `extract_test_examples` for Claude Code integration + - 19 comprehensive tests, 100% passing + - JSON and Markdown output formats + - Documentation: `docs/TEST_EXAMPLE_EXTRACTION.md` + +- **C3.3 How-To Guide Generation with Comprehensive AI Enhancement** - Transform test workflows into step-by-step educational guides with professional AI-powered improvements + - Automatically generates comprehensive markdown tutorials from workflow test examples + - **🆕 COMPREHENSIVE AI ENHANCEMENT** - 5 automatic improvements that transform basic guides (â­â­) into professional tutorials (â­â­â­â­â­): + 1. **Step Descriptions** - Natural language explanations for each step (not just syntax) + 2. **Troubleshooting Solutions** - Diagnostic flows + solutions for common errors + 3. **Prerequisites Explanations** - Why each prerequisite is needed + setup instructions + 4. **Next Steps Suggestions** - Related guides, variations, learning paths + 5. **Use Case Examples** - Real-world scenarios showing when to use guide + - **🆕 DUAL-MODE AI SUPPORT** - Choose how to enhance guides: + - **API Mode**: Uses Claude API directly (requires ANTHROPIC_API_KEY) + - Fast, efficient, perfect for automation/CI + - Cost: ~$0.15-$0.30 per guide + - **LOCAL Mode**: Uses Claude Code CLI (no API key needed) + - Uses your existing Claude Code Max plan (FREE!) + - Opens in terminal, takes 30-60 seconds + - Perfect for local development + - **AUTO Mode** (default): Automatically detects best available mode + - **🆕 QUALITY TRANSFORMATION**: Basic templates become comprehensive professional tutorials + - Before: 75-line template with just code (â­â­) + - After: 500+ line guide with explanations, troubleshooting, learning paths (â­â­â­â­â­) + - **CLI Integration**: Simple flags control AI enhancement + - `--ai-mode api` - Use Claude API (requires ANTHROPIC_API_KEY) + - `--ai-mode local` - Use Claude Code CLI (no API key needed) + - `--ai-mode auto` - Automatic detection (default) + - `--ai-mode none` - Disable AI enhancement + - **4 Intelligent Grouping Strategies**: + - AI Tutorial Group (default) - Uses C3.6 AI analysis for semantic grouping + - File Path - Groups by test file location + - Test Name - Groups by test name patterns + - Complexity - Groups by difficulty level (beginner/intermediate/advanced) + - **Python AST-based Step Extraction** - Precise step identification from test code + - **Rich Markdown Guides** with prerequisites, code examples, verification points, troubleshooting + - **Automatic Complexity Assessment** - Classifies guides by difficulty + - **Multi-Language Support** - Python (AST-based), JavaScript, TypeScript, Go, Rust, Java, C#, PHP, Ruby (heuristic) + - **Integration Points**: + - CLI tool: `skill-seekers-how-to-guides test_examples.json --group-by ai-tutorial-group --ai-mode auto` + - Codebase scraper: `--build-how-to-guides --ai-mode local` (default ON, `--skip-how-to-guides` to disable) + - MCP tool: `build_how_to_guides` for Claude Code integration + - **Components**: WorkflowAnalyzer, WorkflowGrouper, GuideGenerator, HowToGuideBuilder, **GuideEnhancer** (NEW!) + - **Output**: Comprehensive index + individual guides with complete examples + AI enhancements + - **56 comprehensive tests, 100% passing** (30 GuideEnhancer tests + 21 original + 5 integration tests) + - Performance: 2.8s to process 50 workflows + 30-60s AI enhancement per guide + - **Quality Metrics**: Enhanced guides have 95%+ user satisfaction, 50% reduction in support questions + - Documentation: `docs/HOW_TO_GUIDES.md` with AI enhancement guide + +- **C3.4 Configuration Pattern Extraction with AI Enhancement** - Analyze and document configuration files across your codebase with optional AI-powered insights + - **9 Supported Config Formats**: JSON, YAML, TOML, ENV, INI, Python modules, JavaScript/TypeScript configs, Dockerfile, Docker Compose + - **7 Common Pattern Detection**: + - Database configuration (host, port, credentials) + - API configuration (endpoints, keys, timeouts) + - Logging configuration (level, format, handlers) + - Cache configuration (backend, TTL, keys) + - Email configuration (SMTP, credentials) + - Authentication configuration (providers, secrets) + - Server configuration (host, port, workers) + - **🆕 COMPREHENSIVE AI ENHANCEMENT** (optional) - Similar to C3.3 dual-mode support: + - **API Mode**: Uses Claude API (requires ANTHROPIC_API_KEY) + - **LOCAL Mode**: Uses Claude Code CLI (FREE, no API key needed) + - **AUTO Mode**: Automatically detects best available mode + - **5 AI-Powered Insights**: + 1. **Explanations** - What each configuration setting does + 2. **Best Practices** - Suggested improvements (better structure, naming, organization) + 3. **Security Analysis** - Identifies hardcoded secrets, exposed credentials, security issues + 4. **Migration Suggestions** - Opportunities to consolidate or standardize configs + 5. **Context** - Explains detected patterns and when to use them + - **Comprehensive Extraction**: + - Extracts all configuration settings with type inference + - Detects environment variables and their usage + - Maps nested configuration structures + - Identifies required vs optional settings + - **Integration Points**: + - CLI tool: `skill-seekers-config-extractor --directory . --enhance-local` (with AI) + - Codebase scraper: `--extract-config-patterns --ai-mode local` (default ON, `--skip-config-patterns` to disable) + - MCP tool: `extract_config_patterns(directory=".", enhance_local=true)` for Claude Code integration + - **Output Formats**: JSON (machine-readable with AI insights) + Markdown (human-readable documentation) + - **Components**: ConfigFileDetector, ConfigParser, ConfigPatternDetector, ConfigExtractor, **ConfigEnhancer** (NEW!) + - **Performance**: Analyzes 100 config files in ~3 seconds (basic) + 30-60 seconds (AI enhancement) + - **Use Cases**: Documentation generation, configuration auditing, migration planning, security reviews, onboarding new developers + - **Test Coverage**: 28 comprehensive tests covering all formats and patterns + +- **C3.5 Architectural Overview & Skill Integrator** - Comprehensive integration of ALL C3.x codebase analysis into unified skills + - **ARCHITECTURE.md Generation** - Comprehensive architectural overview with 8 sections: + 1. **Overview** - Project description and purpose + 2. **Architectural Patterns** - Detected patterns (MVC, MVVM, etc.) from C3.7 analysis + 3. **Technology Stack** - Frameworks, libraries, and languages detected + 4. **Design Patterns** - Summary of C3.1 design patterns (Factory, Singleton, etc.) + 5. **Configuration Overview** - C3.4 config files with security warnings + 6. **Common Workflows** - C3.3 how-to guides summary + 7. **Usage Examples** - C3.2 test examples statistics + 8. **Entry Points & Directory Structure** - Main directories and file organization + - **Default ON Behavior** - C3.x codebase analysis now runs automatically when GitHub sources have `local_repo_path` + - **CLI Flag** - `--skip-codebase-analysis` to disable C3.x analysis if needed + - **Skill Directory Structure** - New `references/codebase_analysis/` with organized C3.x outputs: + - `ARCHITECTURE.md` - Master architectural overview (main deliverable) + - `patterns/` - C3.1 design pattern analysis + - `examples/` - C3.2 test examples + - `guides/` - C3.3 how-to tutorials + - `configuration/` - C3.4 config patterns + - `architecture_details/` - C3.7 architectural pattern details + - **Enhanced SKILL.md** - Architecture & Code Analysis summary section with: + - Primary architectural pattern with confidence + - Design patterns count and top 3 patterns + - Test examples statistics + - How-to guides count + - Configuration files count with security alerts + - Link to ARCHITECTURE.md for complete details + - **Config Properties**: + - `enable_codebase_analysis` (boolean, default: true) - Enable/disable C3.x analysis + - `ai_mode` (enum: auto/api/local/none, default: auto) - AI enhancement mode + - **Graceful Degradation** - Skills build successfully even if C3.x analysis fails + - **Integration Points**: + - Unified scraper: Automatic C3.x analysis when `local_repo_path` exists + - Skill builder: Automatic ARCHITECTURE.md + references generation + - Config validator: Validates new C3.x properties + - **Test Coverage**: 9 comprehensive integration tests + - **Updated Configs**: 5 unified configs updated (react, django, fastapi, godot, svelte-cli) + - **Use Cases**: Understanding codebase architecture, onboarding developers, code reviews, documentation generation, skill completeness + +- **C3.6 AI Enhancement** - AI-powered insights for patterns and test examples + - Enhances C3.1 (Pattern Detection) and C3.2 (Test Examples) with AI analysis + - **Pattern Enhancement**: Explains why patterns detected, suggests improvements, identifies issues + - **Test Example Enhancement**: Adds context, groups examples into tutorials, identifies best practices + - **API Mode** (for pattern/example enhancement): + - Uses Anthropic API with ANTHROPIC_API_KEY + - Batch processing (5 items per call) for efficiency + - Automatic activation when key is set + - Graceful degradation if no key (works offline) + - **LOCAL Mode** (for SKILL.md enhancement - existing feature): + - Uses `skill-seekers enhance output/skill/` command + - Opens Claude Code in new terminal (no API costs!) + - Uses your existing Claude Code Max plan + - Perfect for enhancing generated SKILL.md files + - Note: Pattern/example enhancement uses API mode only (batch processing hundreds of items) + +- **C3.7 Architectural Pattern Detection** - Detect high-level architectural patterns + - Detects MVC, MVVM, MVP, Repository, Service Layer, Layered, Clean Architecture + - Multi-file analysis (analyzes entire codebase structure) + - Framework detection: Django, Flask, Spring, ASP.NET, Rails, Laravel, Angular, React, Vue.js + - Directory structure analysis for pattern recognition + - Evidence-based detection with confidence scoring + - AI-enhanced insights for architectural recommendations + - Always enabled (provides high-level overview) + - Output: `output/codebase/architecture/architectural_patterns.json` + - Integration with C3.6 for AI-powered architectural insights + +### Changed +- **BREAKING: Analysis Features Now Default ON** - Improved UX for codebase analysis + - All analysis features (API reference, dependency graph, patterns, test examples) are now **enabled by default** + - Changed flag pattern from `--build-*` to `--skip-*` for better discoverability + - **Old flags (DEPRECATED)**: `--build-api-reference`, `--build-dependency-graph`, `--detect-patterns`, `--extract-test-examples` + - **New flags**: `--skip-api-reference`, `--skip-dependency-graph`, `--skip-patterns`, `--skip-test-examples` + - **Migration**: Remove old `--build-*` flags from your scripts (features are now ON by default) + - **Backward compatibility**: Deprecated flags show warnings but still work (will be removed in v3.0.0) + - **Rationale**: Users should get maximum value by default; explicitly opt-out if needed + - **Impact**: `codebase-scraper --directory .` now runs all analysis features automatically + +### Fixed +- **Codebase Scraper Language Stats** - Fixed dict format handling in `_get_language_stats()` + - **Issue**: `AttributeError: 'dict' object has no attribute 'suffix'` when generating SKILL.md + - **Cause**: Function expected Path objects but received dict objects from analysis results + - **Fix**: Extract language from dict instead of calling `detect_language()` on Path + - **Impact**: SKILL.md generation now works correctly for all codebases + - Location: `src/skill_seekers/cli/codebase_scraper.py:778` + +### Removed + +--- + +## [2.5.2] - 2025-12-31 + +### 🔧 Package Configuration Improvement + +This **patch release** improves the packaging configuration by switching from manual package listing to automatic package discovery, preventing similar issues in the future. + +### Changed + +- **Package Discovery**: Switched from manual package listing to automatic discovery in pyproject.toml ([#227](https://github.com/yusufkaraaslan/Skill_Seekers/pull/227)) + - **Before**: Manually listed 5 packages (error-prone when adding new modules) + - **After**: Automatic discovery using `[tool.setuptools.packages.find]` + - **Benefits**: Future-proof, prevents missing module bugs, follows Python packaging best practices + - **Impact**: No functional changes, same packages included + - **Credit**: Thanks to [@iamKhan79690](https://github.com/iamKhan79690) for the improvement! + +### Package Structure + +No changes to package contents - all modules from v2.5.1 are still included: +- ✅ `skill_seekers` (core) +- ✅ `skill_seekers.cli` (CLI tools) +- ✅ `skill_seekers.cli.adaptors` (platform adaptors) +- ✅ `skill_seekers.mcp` (MCP server) +- ✅ `skill_seekers.mcp.tools` (MCP tools) + +### Related Issues + +- Closes #226 - MCP server package_skill tool fails (already fixed in v2.5.1, improved by this release) +- Merges #227 - Update setuptools configuration to include adaptors module + +### Contributors + +- [@iamKhan79690](https://github.com/iamKhan79690) - Automatic package discovery implementation + +--- + +## [2.5.1] - 2025-12-30 + +### 🛠Critical Bug Fix - PyPI Package Broken + +This **patch release** fixes a critical packaging bug that made v2.5.0 completely unusable for PyPI users. + +### Fixed + +- **CRITICAL**: Added missing `skill_seekers.cli.adaptors` module to packages list in pyproject.toml ([#221](https://github.com/yusufkaraaslan/Skill_Seekers/pull/221)) + - **Issue**: v2.5.0 on PyPI throws `ModuleNotFoundError: No module named 'skill_seekers.cli.adaptors'` + - **Impact**: Broke 100% of multi-platform features (Claude, Gemini, OpenAI, Markdown) + - **Cause**: The adaptors module was missing from the explicit packages list + - **Fix**: Added `skill_seekers.cli.adaptors` to packages in pyproject.toml + - **Credit**: Thanks to [@MiaoDX](https://github.com/MiaoDX) for finding and fixing this issue! + +### Package Structure + +The `skill_seekers.cli.adaptors` module contains the platform adaptor architecture: +- `base.py` - Abstract base class for all adaptors +- `claude.py` - Claude AI platform implementation +- `gemini.py` - Google Gemini platform implementation +- `openai.py` - OpenAI ChatGPT platform implementation +- `markdown.py` - Generic markdown export + +**Note**: v2.5.0 is broken on PyPI. All users should upgrade to v2.5.1 immediately. + +--- + +## [2.5.0] - 2025-12-28 + +### 🚀 Multi-Platform Feature Parity - 4 LLM Platforms Supported + +This **major feature release** adds complete multi-platform support for Claude AI, Google Gemini, OpenAI ChatGPT, and Generic Markdown export. All features now work across all platforms with full feature parity. + +### 🎯 Major Features + +#### Multi-LLM Platform Support +- **4 platforms supported**: Claude AI, Google Gemini, OpenAI ChatGPT, Generic Markdown +- **Complete feature parity**: All skill modes work with all platforms +- **Platform adaptors**: Clean architecture with platform-specific implementations +- **Unified workflow**: Same scraping output works for all platforms +- **Smart enhancement**: Platform-specific AI models (Claude Sonnet 4, Gemini 2.0 Flash, GPT-4o) + +#### Platform-Specific Capabilities + +**Claude AI (Default):** +- Format: ZIP with YAML frontmatter + markdown +- Upload: Anthropic Skills API +- Enhancement: Claude Sonnet 4 (local or API) +- MCP integration: Full support + +**Google Gemini:** +- Format: tar.gz with plain markdown +- Upload: Google Files API + Grounding +- Enhancement: Gemini 2.0 Flash +- Long context: 1M tokens supported + +**OpenAI ChatGPT:** +- Format: ZIP with assistant instructions +- Upload: Assistants API + Vector Store +- Enhancement: GPT-4o +- File search: Semantic search enabled + +**Generic Markdown:** +- Format: ZIP with pure markdown +- Upload: Manual distribution +- Universal compatibility: Works with any LLM + +#### Complete Feature Parity + +**All skill modes work with all platforms:** +- Documentation scraping → All 4 platforms +- GitHub repository analysis → All 4 platforms +- PDF extraction → All 4 platforms +- Unified multi-source → All 4 platforms +- Local repository analysis → All 4 platforms + +**18 MCP tools with multi-platform support:** +- `package_skill` - Now accepts `target` parameter (claude, gemini, openai, markdown) +- `upload_skill` - Now accepts `target` parameter (claude, gemini, openai) +- `enhance_skill` - NEW standalone tool with `target` parameter +- `install_skill` - Full multi-platform workflow automation + +### Added + +#### Core Infrastructure +- **Platform Adaptors** (`src/skill_seekers/cli/adaptors/`) + - `base_adaptor.py` - Abstract base class for all adaptors + - `claude_adaptor.py` - Claude AI implementation + - `gemini_adaptor.py` - Google Gemini implementation + - `openai_adaptor.py` - OpenAI ChatGPT implementation + - `markdown_adaptor.py` - Generic Markdown export + - `__init__.py` - Factory function `get_adaptor(target)` + +#### CLI Tools +- **Multi-platform packaging**: `skill-seekers package output/skill/ --target gemini` +- **Multi-platform upload**: `skill-seekers upload skill.zip --target openai` +- **Multi-platform enhancement**: `skill-seekers enhance output/skill/ --target gemini --mode api` +- **Target parameter**: All packaging tools now accept `--target` flag + +#### MCP Tools +- **`enhance_skill`** (NEW) - Standalone AI enhancement tool + - Supports local mode (Claude Code Max, no API key) + - Supports API mode (platform-specific APIs) + - Works with Claude, Gemini, OpenAI + - Creates SKILL.md.backup before enhancement + +- **`package_skill`** (UPDATED) - Multi-platform packaging + - New `target` parameter (claude, gemini, openai, markdown) + - Creates ZIP for Claude/OpenAI/Markdown + - Creates tar.gz for Gemini + - Shows platform-specific output messages + +- **`upload_skill`** (UPDATED) - Multi-platform upload + - New `target` parameter (claude, gemini, openai) + - Platform-specific API key validation + - Returns skill ID and platform URL + - Graceful error for markdown (no upload) + +#### Documentation +- **`docs/FEATURE_MATRIX.md`** (NEW) - Comprehensive feature matrix + - Platform support comparison table + - Skill mode support across platforms + - CLI command support matrix + - MCP tool support matrix + - Platform-specific examples + - Verification checklist + +- **`docs/UPLOAD_GUIDE.md`** (REWRITTEN) - Multi-platform upload guide + - Complete guide for all 4 platforms + - Platform selection table + - API key setup instructions + - Platform comparison matrices + - Complete workflow examples + +- **`docs/ENHANCEMENT.md`** (UPDATED) + - Multi-platform enhancement section + - Platform-specific model information + - Cost comparison across platforms + +- **`docs/MCP_SETUP.md`** (UPDATED) + - Added enhance_skill to tool listings + - Multi-platform usage examples + - Updated tool count (10 → 18 tools) + +- **`src/skill_seekers/mcp/README.md`** (UPDATED) + - Corrected tool count (18 tools) + - Added enhance_skill documentation + - Updated package_skill with target parameter + - Updated upload_skill with target parameter + +#### Optional Dependencies +- **`[gemini]`** extra: `pip install skill-seekers[gemini]` + - google-generativeai>=0.8.3 + - Required for Gemini enhancement and upload + +- **`[openai]`** extra: `pip install skill-seekers[openai]` + - openai>=1.59.6 + - Required for OpenAI enhancement and upload + +- **`[all-llms]`** extra: `pip install skill-seekers[all-llms]` + - Includes both Gemini and OpenAI dependencies + +#### Tests +- **`tests/test_adaptors.py`** - Comprehensive adaptor tests +- **`tests/test_multi_llm_integration.py`** - E2E multi-platform tests +- **`tests/test_install_multiplatform.py`** - Multi-platform install_skill tests +- **700 total tests passing** (up from 427 in v2.4.0) + +### Changed + +#### CLI Architecture +- **Package command**: Now routes through platform adaptors +- **Upload command**: Now supports all 3 upload platforms +- **Enhancement command**: Now supports platform-specific models +- **Unified workflow**: All commands respect `--target` parameter + +#### MCP Architecture +- **Tool modularity**: Cleaner separation with adaptor pattern +- **Error handling**: Platform-specific error messages +- **API key validation**: Per-platform validation logic +- **TextContent fallback**: Graceful degradation when MCP not installed + +#### Documentation +- All platform documentation updated for multi-LLM support +- Consistent terminology across all docs +- Platform comparison tables added +- Examples updated to show all platforms + +### Fixed + +- **TextContent import error** in test environment (5 MCP tool files) + - Added fallback TextContent class when MCP not installed + - Prevents `TypeError: 'NoneType' object is not callable` + - Ensures tests pass without MCP library + +- **UTF-8 encoding** issues on Windows (continued from v2.4.0) + - All file operations use explicit UTF-8 encoding + - CHANGELOG encoding handling improved + +- **API key environment variables** - Clear documentation for all platforms + - ANTHROPIC_API_KEY for Claude + - GOOGLE_API_KEY for Gemini + - OPENAI_API_KEY for OpenAI + +### Other Improvements + +#### Smart Description Generation +- Automatically generates skill descriptions from documentation +- Analyzes reference files to suggest "When to Use" triggers +- Improves SKILL.md quality without manual editing + +#### Smart Summarization +- Large skills (500+ lines) automatically summarized +- Preserves key examples and patterns +- Maintains quality while reducing token usage + +### Deprecation Notice + +None - All changes are backward compatible. Existing v2.4.0 workflows continue to work with default `target='claude'`. + +### Migration Guide + +**For users upgrading from v2.4.0:** + +1. **No changes required** - Default behavior unchanged (targets Claude AI) + +2. **To use other platforms:** + ```bash + # Install platform dependencies + pip install skill-seekers[gemini] # For Gemini + pip install skill-seekers[openai] # For OpenAI + pip install skill-seekers[all-llms] # For all platforms + + # Set API keys + export GOOGLE_API_KEY=AIzaSy... # For Gemini + export OPENAI_API_KEY=sk-proj-... # For OpenAI + + # Use --target flag + skill-seekers package output/react/ --target gemini + skill-seekers upload react-gemini.tar.gz --target gemini + ``` + +3. **MCP users** - New tools available: + - `enhance_skill` - Standalone enhancement (was only in install_skill) + - All packaging tools now accept `target` parameter + +**See full documentation:** +- [Multi-Platform Guide](docs/UPLOAD_GUIDE.md) +- [Feature Matrix](docs/FEATURE_MATRIX.md) +- [Enhancement Guide](docs/ENHANCEMENT.md) + +### Contributors + +- @yusufkaraaslan - Multi-platform architecture, all platform adaptors, comprehensive testing + +### Stats + +- **16 commits** since v2.4.0 +- **700 tests** (up from 427, +273 new tests) +- **4 platforms** supported (was 1) +- **18 MCP tools** (up from 17) +- **5 documentation guides** updated/created +- **29 files changed**, 6,349 insertions(+), 253 deletions(-) + +--- + +## [2.4.0] - 2025-12-25 + +### 🚀 MCP 2025 Upgrade - Multi-Agent Support & HTTP Transport + +This **major release** upgrades the MCP infrastructure to the 2025 specification with support for 5 AI coding agents, dual transport modes (stdio + HTTP), and a complete FastMCP refactor. + +### 🎯 Major Features + +#### MCP SDK v1.25.0 Upgrade +- **Upgraded from v1.18.0 to v1.25.0** - Latest MCP protocol specification (November 2025) +- **FastMCP framework** - Decorator-based tool registration, 68% code reduction (2200 → 708 lines) +- **Enhanced reliability** - Better error handling, automatic schema generation from type hints +- **Backward compatible** - Existing v2.3.0 configurations continue to work + +#### Dual Transport Support +- **stdio transport** (default) - Standard input/output for Claude Code, VS Code + Cline +- **HTTP transport** (new) - Server-Sent Events for Cursor, Windsurf, IntelliJ IDEA +- **Health check endpoint** - `GET /health` for monitoring +- **SSE endpoint** - `GET /sse` for real-time communication +- **Configurable server** - `--http`, `--port`, `--host`, `--log-level` flags +- **uvicorn-powered** - Production-ready ASGI server + +#### Multi-Agent Auto-Configuration +- **5 AI agents supported**: + - Claude Code (stdio) + - Cursor (HTTP) + - Windsurf (HTTP) + - VS Code + Cline (stdio) + - IntelliJ IDEA (HTTP) +- **Automatic detection** - `agent_detector.py` scans for installed agents +- **One-command setup** - `./setup_mcp.sh` configures all detected agents +- **Smart config merging** - Preserves existing MCP servers, only adds skill-seeker +- **Automatic backups** - Timestamped backups before modifications +- **HTTP server management** - Auto-starts HTTP server for HTTP-based agents + +#### Expanded Tool Suite (17 Tools) +- **Config Tools (3)**: generate_config, list_configs, validate_config +- **Scraping Tools (4)**: estimate_pages, scrape_docs, scrape_github, scrape_pdf +- **Packaging Tools (3)**: package_skill, upload_skill, install_skill +- **Splitting Tools (2)**: split_config, generate_router +- **Source Tools (5)**: fetch_config, submit_config, add_config_source, list_config_sources, remove_config_source + +### Added + +#### Core Infrastructure +- **`server_fastmcp.py`** (708 lines) - New FastMCP-based MCP server + - Decorator-based tool registration (`@safe_tool_decorator`) + - Modular tool architecture (5 tool modules) + - HTTP transport with uvicorn + - stdio transport (default) + - Comprehensive error handling + +- **`agent_detector.py`** (333 lines) - Multi-agent detection and configuration + - Detects 5 AI coding agents across platforms (Linux, macOS, Windows) + - Generates agent-specific config formats (JSON, XML) + - Auto-selects transport type (stdio vs HTTP) + - Cross-platform path resolution + +- **Tool modules** (5 modules, 1,676 total lines): + - `tools/config_tools.py` (249 lines) - Configuration management + - `tools/scraping_tools.py` (423 lines) - Documentation scraping + - `tools/packaging_tools.py` (514 lines) - Skill packaging and upload + - `tools/splitting_tools.py` (195 lines) - Config splitting and routing + - `tools/source_tools.py` (295 lines) - Config source management + +#### Setup & Configuration +- **`setup_mcp.sh`** (rewritten, 661 lines) - Multi-agent auto-configuration + - Detects installed agents automatically + - Offers configure all or select individual agents + - Manages HTTP server startup + - Smart config merging with existing configurations + - Comprehensive validation and testing + +- **HTTP server** - Production-ready HTTP transport + - Health endpoint: `/health` + - SSE endpoint: `/sse` + - Messages endpoint: `/messages/` + - CORS middleware for cross-origin requests + - Configurable host and port + - Debug logging support + +#### Documentation +- **`docs/MCP_SETUP.md`** (completely rewritten) - Comprehensive MCP 2025 guide + - Migration guide from v2.3.0 + - Transport modes explained (stdio vs HTTP) + - Agent-specific configuration for all 5 agents + - Troubleshooting for both transports + - Advanced configuration (systemd, launchd services) + +- **`docs/HTTP_TRANSPORT.md`** (434 lines, new) - HTTP transport guide +- **`docs/MULTI_AGENT_SETUP.md`** (643 lines, new) - Multi-agent setup guide +- **`docs/SETUP_QUICK_REFERENCE.md`** (387 lines, new) - Quick reference card +- **`SUMMARY_HTTP_TRANSPORT.md`** (360 lines, new) - Technical implementation details +- **`SUMMARY_MULTI_AGENT_SETUP.md`** (556 lines, new) - Multi-agent technical summary + +#### Testing +- **`test_mcp_fastmcp.py`** (960 lines, 63 tests) - Comprehensive FastMCP server tests + - All 18 tools tested + - Error handling validation + - Type validation + - Integration workflows + +- **`test_server_fastmcp_http.py`** (165 lines, 6 tests) - HTTP transport tests + - Health check endpoint + - SSE endpoint + - CORS middleware + - Argument parsing + +- **All tests passing**: 602/609 tests (99.1% pass rate) + +### Changed + +#### MCP Server Architecture +- **Refactored to FastMCP** - Decorator-based, modular, maintainable +- **Code reduction** - 68% smaller (2200 → 708 lines) +- **Modular tools** - Separated into 5 category modules +- **Type safety** - Full type hints on all tool functions +- **Improved error handling** - Graceful degradation, clear error messages + +#### Server Compatibility +- **`server.py`** - Now a compatibility shim (delegates to `server_fastmcp.py`) +- **Deprecation warning** - Alerts users to migrate to `server_fastmcp` +- **Backward compatible** - Existing configurations continue to work +- **Migration path** - Clear upgrade instructions in docs + +#### Setup Experience +- **Multi-agent workflow** - One script configures all agents +- **Interactive prompts** - User-friendly with sensible defaults +- **Validation** - Config file validation before writing +- **Backup safety** - Automatic timestamped backups +- **Color-coded output** - Visual feedback (success/warning/error) + +#### Documentation +- **README.md** - Added comprehensive multi-agent section +- **MCP_SETUP.md** - Completely rewritten for v2.4.0 +- **CLAUDE.md** - Updated with new server details +- **Version badges** - Updated to v2.4.0 + +### Fixed +- Import issues in test files (updated to use new tool modules) +- CLI version test (updated to expect v2.3.0) +- Graceful MCP import handling (no sys.exit on import) +- Server compatibility for testing environments + +### Deprecated +- **`server.py`** - Use `server_fastmcp.py` instead + - Compatibility shim provided + - Will be removed in v3.0.0 (6+ months) + - Migration guide available + +### Infrastructure +- **Python 3.10+** - Recommended for best compatibility +- **MCP SDK**: v1.25.0 (pinned to v1.x) +- **uvicorn**: v0.40.0+ (for HTTP transport) +- **starlette**: v0.50.0+ (for HTTP transport) + +### Migration from v2.3.0 + +**Upgrade Steps:** +1. Update dependencies: `pip install -e ".[mcp]"` +2. Update MCP config to use `server_fastmcp`: + ```json + { + "mcpServers": { + "skill-seeker": { + "command": "python", + "args": ["-m", "skill_seekers.mcp.server_fastmcp"] + } + } + } + ``` +3. For HTTP agents, start HTTP server: `python -m skill_seekers.mcp.server_fastmcp --http` +4. Or use auto-configuration: `./setup_mcp.sh` + +**Breaking Changes:** None - fully backward compatible + +**New Capabilities:** +- Multi-agent support (5 agents) +- HTTP transport for web-based agents +- 8 new MCP tools +- Automatic agent detection and configuration + +### Contributors +- Implementation: Claude Sonnet 4.5 +- Testing & Review: @yusufkaraaslan + +--- + +## [2.3.0] - 2025-12-22 + +### 🤖 Multi-Agent Installation Support + +This release adds automatic skill installation to 10+ AI coding agents with a single command. + +### Added +- **Multi-agent installation support** (#210) + - New `install-agent` command to install skills to any AI coding agent + - Support for 10+ agents: Claude Code, Cursor, VS Code, Amp, Goose, OpenCode, Letta, Aide, Windsurf + - `--agent all` flag to install to all agents at once + - `--force` flag to overwrite existing installations + - `--dry-run` flag to preview installations + - Intelligent path resolution (global vs project-relative) + - Fuzzy matching for agent names with suggestions + - Comprehensive error handling and user feedback + +### Changed +- Skills are now compatible with the Agent Skills open standard (agentskills.io) +- Installation paths follow standard conventions for each agent +- CLI updated with install-agent subcommand + +### Documentation +- Added multi-agent installation guide to README.md +- Updated CLAUDE.md with install-agent examples +- Added agent compatibility table + +### Testing +- Added 32 comprehensive tests for install-agent functionality +- All tests passing (603 tests total, 86 skipped) +- No regressions in existing functionality + +--- + +## [2.2.0] - 2025-12-21 + +### 🚀 Private Config Repositories - Team Collaboration Unlocked + +This major release adds **git-based config sources**, enabling teams to fetch configs from private/team repositories in addition to the public API. This unlocks team collaboration, enterprise deployment, and custom config collections. + +### 🎯 Major Features + +#### Git-Based Config Sources (Issue [#211](https://github.com/yusufkaraaslan/Skill_Seekers/issues/211)) +- **Multi-source config management** - Fetch from API, git URL, or named sources +- **Private repository support** - GitHub, GitLab, Bitbucket, Gitea, and custom git servers +- **Team collaboration** - Share configs across 3-5 person teams with version control +- **Enterprise scale** - Support 500+ developers with priority-based resolution +- **Secure authentication** - Environment variable tokens only (GITHUB_TOKEN, GITLAB_TOKEN, etc.) +- **Intelligent caching** - Shallow clone (10-50x faster), auto-pull updates +- **Offline mode** - Works with cached repos when offline +- **Backward compatible** - Existing API-based configs work unchanged + +#### New MCP Tools +- **`add_config_source`** - Register git repositories as config sources + - Auto-detects source type (GitHub, GitLab, etc.) + - Auto-selects token environment variable + - Priority-based resolution for multiple sources + - SSH URL support (auto-converts to HTTPS + token) + +- **`list_config_sources`** - View all registered sources + - Shows git URL, branch, priority, token env + - Filter by enabled/disabled status + - Sorted by priority (lower = higher priority) + +- **`remove_config_source`** - Unregister sources + - Removes from registry (cache preserved for offline use) + - Helpful error messages with available sources + +- **Enhanced `fetch_config`** - Three modes + 1. **Named source mode** - `fetch_config(source="team", config_name="react-custom")` + 2. **Git URL mode** - `fetch_config(git_url="https://...", config_name="react-custom")` + 3. **API mode** - `fetch_config(config_name="react")` (unchanged) + +### Added + +#### Core Infrastructure +- **GitConfigRepo class** (`src/skill_seekers/mcp/git_repo.py`, 283 lines) + - `clone_or_pull()` - Shallow clone with auto-pull and force refresh + - `find_configs()` - Recursive *.json discovery (excludes .git) + - `get_config()` - Load config with case-insensitive matching + - `inject_token()` - Convert SSH to HTTPS with token authentication + - `validate_git_url()` - Support HTTPS, SSH, and file:// URLs + - Comprehensive error handling (auth failures, missing repos, corrupted caches) + +- **SourceManager class** (`src/skill_seekers/mcp/source_manager.py`, 260 lines) + - `add_source()` - Register/update sources with validation + - `get_source()` - Retrieve by name with helpful errors + - `list_sources()` - List all/enabled sources sorted by priority + - `remove_source()` - Unregister sources + - `update_source()` - Modify specific fields + - Atomic file I/O (write to temp, then rename) + - Auto-detect token env vars from source type + +#### Storage & Caching +- **Registry file**: `~/.skill-seekers/sources.json` + - Stores source metadata (URL, branch, priority, timestamps) + - Version-controlled schema (v1.0) + - Atomic writes prevent corruption + +- **Cache directory**: `$SKILL_SEEKERS_CACHE_DIR` (default: `~/.skill-seekers/cache/`) + - One subdirectory per source + - Shallow git clones (depth=1, single-branch) + - Configurable via environment variable + +#### Documentation +- **docs/GIT_CONFIG_SOURCES.md** (800+ lines) - Comprehensive guide + - Quick start, architecture, authentication + - MCP tools reference with examples + - Use cases (small teams, enterprise, open source) + - Best practices, troubleshooting, advanced topics + - Complete API reference + +- **configs/example-team/** - Example repository for testing + - `react-custom.json` - Custom React config with metadata + - `vue-internal.json` - Internal Vue config + - `company-api.json` - Company API config example + - `README.md` - Usage guide and best practices + - `test_e2e.py` - End-to-end test script (7 steps, 100% passing) + +- **README.md** - Updated with git source examples + - New "Private Config Repositories" section in Key Features + - Comprehensive usage examples (quick start, team collaboration, enterprise) + - Supported platforms and authentication + - Example workflows for different team sizes + +### Dependencies +- **GitPython>=3.1.40** - Git operations (clone, pull, branch switching) + - Replaces subprocess calls with high-level API + - Better error handling and cross-platform support + +### Testing +- **83 new tests** (100% passing) + - `tests/test_git_repo.py` (35 tests) - GitConfigRepo functionality + - Initialization, URL validation, token injection + - Clone/pull operations, config discovery, error handling + - `tests/test_source_manager.py` (48 tests) - SourceManager functionality + - Add/get/list/remove/update sources + - Registry persistence, atomic writes, default token env + - `tests/test_mcp_git_sources.py` (18 tests) - MCP integration + - All 3 fetch modes (API, Git URL, Named Source) + - Source management tools (add/list/remove) + - Complete workflow (add → fetch → remove) + - Error scenarios (auth failures, missing configs) + +### Improved +- **MCP server** - Now supports 12 tools (up from 9) + - Maintains backward compatibility + - Enhanced error messages with available sources + - Priority-based config resolution + +### Use Cases + +**Small Teams (3-5 people):** +```bash +# One-time setup +add_config_source(name="team", git_url="https://github.com/myteam/configs.git") + +# Daily usage +fetch_config(source="team", config_name="react-internal") +``` + +**Enterprise (500+ developers):** +```bash +# IT pre-configures sources +add_config_source(name="platform", ..., priority=1) +add_config_source(name="mobile", ..., priority=2) + +# Developers use transparently +fetch_config(config_name="platform-api") # Finds in platform source +``` + +**Example Repository:** +```bash +cd /path/to/Skill_Seekers +python3 configs/example-team/test_e2e.py # Test E2E workflow +``` + +### Backward Compatibility +- ✅ All existing configs work unchanged +- ✅ API mode still default (no registration needed) +- ✅ No breaking changes to MCP tools or CLI +- ✅ New parameters are optional (git_url, source, refresh) + +### Security +- ✅ Tokens via environment variables only (not in files) +- ✅ Shallow clones minimize attack surface +- ✅ No token storage in registry file +- ✅ Secure token injection (auto-converts SSH to HTTPS) + +### Performance +- ✅ Shallow clone: 10-50x faster than full clone +- ✅ Minimal disk space (no git history) +- ✅ Auto-pull: Only fetches changes (not full re-clone) +- ✅ Offline mode: Works with cached repos + +### Files Changed +- Modified (2): `pyproject.toml`, `src/skill_seekers/mcp/server.py` +- Added (6): 3 source files + 3 test files + 1 doc + 1 example repo +- Total lines added: ~2,600 + +### Migration Guide + +No migration needed! This is purely additive: + +```python +# Before v2.2.0 (still works) +fetch_config(config_name="react") + +# New in v2.2.0 (optional) +add_config_source(name="team", git_url="...") +fetch_config(source="team", config_name="react-custom") +``` + +### Known Limitations +- MCP async tests require pytest-asyncio (added to dev dependencies) +- Example repository uses 'master' branch (git init default) + +### See Also +- [GIT_CONFIG_SOURCES.md](docs/GIT_CONFIG_SOURCES.md) - Complete guide +- [configs/example-team/](configs/example-team/) - Example repository +- [Issue #211](https://github.com/yusufkaraaslan/Skill_Seekers/issues/211) - Original feature request + +--- + +## [2.1.1] - 2025-11-30 + +### Fixed +- **submit_config MCP tool** - Comprehensive validation and format support ([#11](https://github.com/yusufkaraaslan/Skill_Seekers/issues/11)) + - Now uses ConfigValidator for comprehensive validation (previously only checked 3 fields) + - Validates name format (alphanumeric, hyphens, underscores only) + - Validates URL formats (must start with http:// or https://) + - Validates selectors, patterns, rate limits, and max_pages + - **Supports both legacy and unified config formats** + - Provides detailed error messages with validation failures and examples + - Adds warnings for unlimited scraping configurations + - Enhanced category detection for multi-source configs + - 8 comprehensive test cases added to test_mcp_server.py + - Updated GitHub issue template with format type and validation warnings + +--- + +## [2.1.1] - 2025-11-30 + +### 🚀 GitHub Repository Analysis Enhancements + +This release significantly improves GitHub repository scraping with unlimited local analysis, configurable directory exclusions, and numerous bug fixes. + +### Added +- **Configurable directory exclusions** for local repository analysis ([#203](https://github.com/yusufkaraaslan/Skill_Seekers/issues/203)) + - `exclude_dirs_additional`: Extend default exclusions with custom directories + - `exclude_dirs`: Replace default exclusions entirely (advanced users) + - 19 comprehensive tests covering all scenarios + - Logging: INFO for extend mode, WARNING for replace mode +- **Unlimited local repository analysis** via `local_repo_path` configuration parameter +- **Auto-exclusion** of virtual environments, build artifacts, and cache directories +- **Support for analyzing repositories without GitHub API rate limits** (50 → unlimited files) +- **Skip llms.txt option** - Force HTML scraping even when llms.txt is detected ([#198](https://github.com/yusufkaraaslan/Skill_Seekers/pull/198)) + +### Fixed +- Fixed logger initialization error causing `AttributeError: 'NoneType' object has no attribute 'setLevel'` ([#190](https://github.com/yusufkaraaslan/Skill_Seekers/issues/190)) +- Fixed 3 NoneType subscriptable errors in release tag parsing +- Fixed relative import paths causing `ModuleNotFoundError` +- Fixed hardcoded 50-file analysis limit preventing comprehensive code analysis +- Fixed GitHub API file tree limitation (140 → 345 files discovered) +- Fixed AST parser "not iterable" errors eliminating 100% of parsing failures (95 → 0 errors) +- Fixed virtual environment file pollution reducing file tree noise by 95% +- Fixed `force_rescrape` flag not checked before interactive prompt causing EOFError in CI/CD environments + +### Improved +- Increased code analysis coverage from 14% to 93.6% (+79.6 percentage points) +- Improved file discovery from 140 to 345 files (+146%) +- Improved class extraction from 55 to 585 classes (+964%) +- Improved function extraction from 512 to 2,784 functions (+444%) +- Test suite expanded to 427 tests (up from 391) + +--- + +## [2.1.0] - 2025-11-12 + +### 🎉 Major Enhancement: Quality Assurance + Race Condition Fixes + +This release focuses on quality and reliability improvements, adding comprehensive quality checks and fixing critical race conditions in the enhancement workflow. + +### 🚀 Major Features + +#### Comprehensive Quality Checker +- **Automatic quality checks before packaging** - Validates skill quality before upload +- **Quality scoring system** - 0-100 score with A-F grades +- **Enhancement verification** - Checks for template text, code examples, sections +- **Structure validation** - Validates SKILL.md, references/ directory +- **Content quality checks** - YAML frontmatter, language tags, "When to Use" section +- **Link validation** - Validates internal markdown links +- **Detailed reporting** - Errors, warnings, and info messages with file locations +- **CLI tool** - `skill-seekers-quality-checker` with verbose and strict modes + +#### Headless Enhancement Mode (Default) +- **No terminal windows** - Runs enhancement in background by default +- **Proper waiting** - Main console waits for enhancement to complete +- **Timeout protection** - 10-minute default timeout (configurable) +- **Verification** - Checks that SKILL.md was actually updated +- **Progress messages** - Clear status updates during enhancement +- **Interactive mode available** - `--interactive-enhancement` flag for terminal mode + +### Added + +#### New CLI Tools +- **quality_checker.py** - Comprehensive skill quality validation + - Structure checks (SKILL.md, references/) + - Enhancement verification (code examples, sections) + - Content validation (frontmatter, language tags) + - Link validation (internal markdown links) + - Quality scoring (0-100 + A-F grade) + +#### New Features +- **Headless enhancement** - `skill-seekers-enhance` runs in background by default +- **Quality checks in packaging** - Automatic validation before creating .zip +- **MCP quality skip** - MCP server skips interactive checks +- **Enhanced error handling** - Better error messages and timeout handling + +#### Tests +- **+12 quality checker tests** - Comprehensive validation testing +- **391 total tests passing** - Up from 379 in v2.0.0 +- **0 test failures** - All tests green +- **CI improvements** - Fixed macOS terminal detection tests + +### Changed + +#### Enhancement Workflow +- **Default mode changed** - Headless mode is now default (was terminal mode) +- **Waiting behavior** - Main console waits for enhancement completion +- **No race conditions** - Fixed "Package your skill" message appearing too early +- **Better progress** - Clear status messages during enhancement + +#### Package Workflow +- **Quality checks added** - Automatic validation before packaging +- **User confirmation** - Ask to continue if warnings/errors found +- **Skip option** - `--skip-quality-check` flag to bypass checks +- **MCP context** - Automatically skips checks in non-interactive contexts + +#### CLI Arguments +- **doc_scraper.py:** + - Updated `--enhance-local` help text (mentions headless mode) + - Added `--interactive-enhancement` flag +- **enhance_skill_local.py:** + - Changed default to `headless=True` + - Added `--interactive-enhancement` flag + - Added `--timeout` flag (default: 600 seconds) +- **package_skill.py:** + - Added `--skip-quality-check` flag + +### Fixed + +#### Critical Bugs +- **Enhancement race condition** - Main console no longer exits before enhancement completes +- **MCP stdin errors** - MCP server now skips interactive prompts +- **Terminal detection tests** - Fixed for headless mode default + +#### Enhancement Issues +- **Process detachment** - subprocess.run() now waits properly instead of Popen() +- **Timeout handling** - Added timeout protection to prevent infinite hangs +- **Verification** - Checks file modification time and size to verify success +- **Error messages** - Better error handling and user-friendly messages + +#### Test Fixes +- **package_skill tests** - Added skip_quality_check=True to prevent stdin errors +- **Terminal detection tests** - Updated to use headless=False for interactive tests +- **MCP server tests** - Fixed to skip quality checks in non-interactive context + +### Technical Details + +#### New Modules +- `src/skill_seekers/cli/quality_checker.py` - Quality validation engine +- `tests/test_quality_checker.py` - 12 comprehensive tests + +#### Modified Modules +- `src/skill_seekers/cli/enhance_skill_local.py` - Added headless mode +- `src/skill_seekers/cli/doc_scraper.py` - Updated enhancement integration +- `src/skill_seekers/cli/package_skill.py` - Added quality checks +- `src/skill_seekers/mcp/server.py` - Skip quality checks in MCP context +- `tests/test_package_skill.py` - Updated for quality checker +- `tests/test_terminal_detection.py` - Updated for headless default + +#### Commits in This Release +- `e279ed6` - Phase 1: Enhancement race condition fix (headless mode) +- `3272f9c` - Phases 2 & 3: Quality checker implementation +- `2dd1027` - Phase 4: Tests (+12 quality checker tests) +- `befcb89` - CI Fix: Skip quality checks in MCP context +- `67ab627` - CI Fix: Update terminal tests for headless default + +### Upgrade Notes + +#### Breaking Changes +- **Headless mode default** - Enhancement now runs in background by default + - Use `--interactive-enhancement` if you want the old terminal mode + - Affects: `skill-seekers-enhance` and `skill-seekers scrape --enhance-local` + +#### New Behavior +- **Quality checks** - Packaging now runs quality checks by default + - May prompt for confirmation if warnings/errors found + - Use `--skip-quality-check` to bypass (not recommended) + +#### Recommendations +- **Try headless mode** - Faster and more reliable than terminal mode +- **Review quality reports** - Fix warnings before packaging +- **Update scripts** - Add `--skip-quality-check` to automated packaging scripts if needed + +### Migration Guide + +**If you want the old terminal mode behavior:** +```bash +# Old (v2.0.0): Default was terminal mode +skill-seekers-enhance output/react/ + +# New (v2.1.0): Use --interactive-enhancement +skill-seekers-enhance output/react/ --interactive-enhancement +``` + +**If you want to skip quality checks:** +```bash +# Add --skip-quality-check to package command +skill-seekers-package output/react/ --skip-quality-check +``` + +--- + +## [2.0.0] - 2025-11-11 + +### 🎉 Major Release: PyPI Publication + Modern Python Packaging + +**Skill Seekers is now available on PyPI!** Install with: `pip install skill-seekers` + +This is a major milestone release featuring complete restructuring for modern Python packaging, comprehensive testing improvements, and publication to the Python Package Index. + +### 🚀 Major Changes + +#### PyPI Publication +- **Published to PyPI** - https://pypi.org/project/skill-seekers/ +- **Installation:** `pip install skill-seekers` or `uv tool install skill-seekers` +- **No cloning required** - Install globally or in virtual environments +- **Automatic dependency management** - All dependencies handled by pip/uv + +#### Modern Python Packaging +- **pyproject.toml-based configuration** - Standard PEP 621 metadata +- **src/ layout structure** - Best practice package organization +- **Entry point scripts** - `skill-seekers` command available globally +- **Proper dependency groups** - Separate dev, test, and MCP dependencies +- **Build backend** - setuptools-based build with uv support + +#### Unified CLI Interface +- **Single `skill-seekers` command** - Git-style subcommands +- **Subcommands:** `scrape`, `github`, `pdf`, `unified`, `enhance`, `package`, `upload`, `estimate` +- **Consistent interface** - All tools accessible through one entry point +- **Help system** - Comprehensive `--help` for all commands + +### Added + +#### Testing Infrastructure +- **379 passing tests** (up from 299) - Comprehensive test coverage +- **0 test failures** - All tests passing successfully +- **Test suite improvements:** + - Fixed import paths for src/ layout + - Updated CLI tests for unified entry points + - Added package structure verification tests + - Fixed MCP server import tests + - Added pytest configuration in pyproject.toml + +#### Documentation +- **Updated README.md** - PyPI badges, reordered installation options +- **ROADMAP.md** - Comprehensive roadmap with task-based approach +- **Installation guides** - Simplified with PyPI as primary method +- **Testing documentation** - How to run full test suite + +### Changed + +#### Package Structure +- **Moved to src/ layout:** + - `src/skill_seekers/` - Main package + - `src/skill_seekers/cli/` - CLI tools + - `src/skill_seekers/mcp/` - MCP server +- **Import paths updated** - All imports use proper package structure +- **Entry points configured** - All CLI tools available as commands + +#### Import Fixes +- **Fixed `merge_sources.py`** - Corrected conflict_detector import (`.conflict_detector`) +- **Fixed MCP server tests** - Updated to use `skill_seekers.mcp.server` imports +- **Fixed test paths** - All tests updated for src/ layout + +### Fixed + +#### Critical Bugs +- **Import path errors** - Fixed relative imports in CLI modules +- **MCP test isolation** - Added proper MCP availability checks +- **Package installation** - Resolved entry point conflicts +- **Dependency resolution** - All dependencies properly specified + +#### Test Improvements +- **17 test fixes** - Updated for modern package structure +- **MCP test guards** - Proper skipif decorators for MCP tests +- **CLI test updates** - Accept both exit codes 0 and 2 for help +- **Path validation** - Tests verify correct package structure + +### Technical Details + +#### Build System +- **Build backend:** setuptools.build_meta +- **Build command:** `uv build` +- **Publish command:** `uv publish` +- **Distribution formats:** wheel + source tarball + +#### Dependencies +- **Core:** requests, beautifulsoup4, PyGithub, mcp, httpx +- **PDF:** PyMuPDF, Pillow, pytesseract +- **Dev:** pytest, pytest-cov, pytest-anyio, mypy +- **MCP:** mcp package for Claude Code integration + +### Migration Guide + +#### For Users +**Old way:** +```bash +git clone https://github.com/yusufkaraaslan/Skill_Seekers.git +cd Skill_Seekers +pip install -r requirements.txt +python3 cli/doc_scraper.py --config configs/react.json +``` + +**New way:** +```bash +pip install skill-seekers +skill-seekers scrape --config configs/react.json +``` + +#### For Developers +- Update imports: `from cli.* → from skill_seekers.cli.*` +- Use `pip install -e ".[dev]"` for development +- Run tests: `python -m pytest` +- Entry points instead of direct script execution + +### Breaking Changes +- **CLI interface changed** - Use `skill-seekers` command instead of `python3 cli/...` +- **Import paths changed** - Package now at `skill_seekers.*` instead of `cli.*` +- **Installation method changed** - PyPI recommended over git clone + +### Deprecations +- **Direct script execution** - Still works but deprecated (use `skill-seekers` command) +- **Old import patterns** - Legacy imports still work but will be removed in v3.0 + +### Compatibility +- **Python 3.10+** required +- **Backward compatible** - Old scripts still work with legacy CLI +- **Config files** - No changes required +- **Output format** - No changes to generated skills + +--- + +## [1.3.0] - 2025-10-26 + +### Added - Refactoring & Performance Improvements +- **Async/Await Support for Parallel Scraping** (2-3x performance boost) + - `--async` flag to enable async mode + - `async def scrape_page_async()` method using httpx.AsyncClient + - `async def scrape_all_async()` method with asyncio.gather() + - Connection pooling for better performance + - asyncio.Semaphore for concurrency control + - Comprehensive async testing (11 new tests) + - Full documentation in ASYNC_SUPPORT.md + - Performance: ~55 pages/sec vs ~18 pages/sec (sync) + - Memory: 40 MB vs 120 MB (66% reduction) +- **Python Package Structure** (Phase 0 Complete) + - `cli/__init__.py` - CLI tools package with clean imports + - `skill_seeker_mcp/__init__.py` - MCP server package (renamed from mcp/) + - `skill_seeker_mcp/tools/__init__.py` - MCP tools subpackage + - Proper package imports: `from cli import constants` +- **Centralized Configuration Module** + - `cli/constants.py` with 18 configuration constants + - `DEFAULT_ASYNC_MODE`, `DEFAULT_RATE_LIMIT`, `DEFAULT_MAX_PAGES` + - Enhancement limits, categorization scores, file limits + - All magic numbers now centralized and configurable +- **Code Quality Improvements** + - Converted 71 print() statements to proper logging calls + - Added type hints to all DocToSkillConverter methods + - Fixed all mypy type checking issues + - Installed types-requests for better type safety +- Multi-variant llms.txt detection: downloads all 3 variants (full, standard, small) +- Automatic .txt → .md file extension conversion +- No content truncation: preserves complete documentation +- `detect_all()` method for finding all llms.txt variants +- `get_proper_filename()` for correct .md naming + +### Changed +- `_try_llms_txt()` now downloads all available variants instead of just one +- Reference files now contain complete content (no 2500 char limit) +- Code samples now include full code (no 600 char limit) +- Test count increased from 207 to 299 (92 new tests) +- All print() statements replaced with logging (logger.info, logger.warning, logger.error) +- Better IDE support with proper package structure +- Code quality improved from 5.5/10 to 6.5/10 + +### Fixed +- File extension bug: llms.txt files now saved as .md +- Content loss: 0% truncation (was 36%) +- Test isolation issues in test_async_scraping.py (proper cleanup with try/finally) +- Import issues: no more sys.path.insert() hacks needed +- .gitignore: added test artifacts (.pytest_cache, .coverage, htmlcov, etc.) + +--- + +## [1.2.0] - 2025-10-23 + +### 🚀 PDF Advanced Features Release + +Major enhancement to PDF extraction capabilities with Priority 2 & 3 features. + +### Added + +#### Priority 2: Support More PDF Types +- **OCR Support for Scanned PDFs** + - Automatic text extraction from scanned documents using Tesseract OCR + - Fallback mechanism when page text < 50 characters + - Integration with pytesseract and Pillow + - Command: `--ocr` flag + - New dependencies: `Pillow==11.0.0`, `pytesseract==0.3.13` + +- **Password-Protected PDF Support** + - Handle encrypted PDFs with password authentication + - Clear error messages for missing/wrong passwords + - Secure password handling + - Command: `--password PASSWORD` flag + +- **Complex Table Extraction** + - Extract tables from PDFs using PyMuPDF's table detection + - Capture table data as 2D arrays with metadata (bbox, row/col count) + - Integration with skill references in markdown format + - Command: `--extract-tables` flag + +#### Priority 3: Performance Optimizations +- **Parallel Page Processing** + - 3x faster PDF extraction using ThreadPoolExecutor + - Auto-detect CPU count or custom worker specification + - Only activates for PDFs with > 5 pages + - Commands: `--parallel` and `--workers N` flags + - Benchmarks: 500-page PDF reduced from 4m 10s to 1m 15s + +- **Intelligent Caching** + - In-memory cache for expensive operations (text extraction, code detection, quality scoring) + - 50% faster on re-runs + - Command: `--no-cache` to disable (enabled by default) + +#### New Documentation +- **`docs/PDF_ADVANCED_FEATURES.md`** (580 lines) + - Complete usage guide for all advanced features + - Installation instructions + - Performance benchmarks showing 3x speedup + - Best practices and troubleshooting + - API reference with all parameters + +#### Testing +- **New test file:** `tests/test_pdf_advanced_features.py` (568 lines, 26 tests) + - TestOCRSupport (5 tests) + - TestPasswordProtection (4 tests) + - TestTableExtraction (5 tests) + - TestCaching (5 tests) + - TestParallelProcessing (4 tests) + - TestIntegration (3 tests) +- **Updated:** `tests/test_pdf_extractor.py` (23 tests fixed and passing) +- **Total PDF tests:** 49/49 PASSING ✅ (100% pass rate) + +### Changed +- Enhanced `cli/pdf_extractor_poc.py` with all advanced features +- Updated `requirements.txt` with new dependencies +- Updated `README.md` with PDF advanced features usage +- Updated `docs/TESTING.md` with new test counts (142 total tests) + +### Performance Improvements +- **3.3x faster** with parallel processing (8 workers) +- **1.7x faster** on re-runs with caching enabled +- Support for unlimited page PDFs (no more 500-page limit) + +### Dependencies +- Added `Pillow==11.0.0` for image processing +- Added `pytesseract==0.3.13` for OCR support +- Tesseract OCR engine (system package, optional) + +--- + +## [1.1.0] - 2025-10-22 + +### 🌠Documentation Scraping Enhancements + +Major improvements to documentation scraping with unlimited pages, parallel processing, and new configs. + +### Added + +#### Unlimited Scraping & Performance +- **Unlimited Page Scraping** - Removed 500-page limit, now supports unlimited pages +- **Parallel Scraping Mode** - Process multiple pages simultaneously for faster scraping +- **Dynamic Rate Limiting** - Smart rate limit control to avoid server blocks +- **CLI Utilities** - New helper scripts for common tasks + +#### New Configurations +- **Ansible Core 2.19** - Complete Ansible documentation config +- **Claude Code** - Documentation for this very tool! +- **Laravel 9.x** - PHP framework documentation + +#### Testing & Quality +- Comprehensive test coverage for CLI utilities +- Parallel scraping test suite +- Virtual environment setup documentation +- Thread-safety improvements + +### Fixed +- Thread-safety issues in parallel scraping +- CLI path references across all documentation +- Flaky upload_skill tests +- MCP server streaming subprocess implementation + +### Changed +- All CLI examples now use `cli/` directory prefix +- Updated documentation structure +- Enhanced error handling + +--- + +## [1.0.0] - 2025-10-19 + +### 🎉 First Production Release + +This is the first production-ready release of Skill Seekers with complete feature set, full test coverage, and comprehensive documentation. + +### Added + +#### Smart Auto-Upload Feature +- New `upload_skill.py` CLI tool for automatic API-based upload +- Enhanced `package_skill.py` with `--upload` flag +- Smart API key detection with graceful fallback +- Cross-platform folder opening in `utils.py` +- Helpful error messages instead of confusing errors + +#### MCP Integration Enhancements +- **9 MCP tools** (added `upload_skill` tool) +- `mcp__skill-seeker__upload_skill` - Upload .zip files to Claude automatically +- Enhanced `package_skill` tool with smart auto-upload parameter +- Updated all MCP documentation to reflect 9 tools + +#### Documentation Improvements +- Updated README with version badge (v1.0.0) +- Enhanced upload guide with 3 upload methods +- Updated MCP setup guide with all 9 tools +- Comprehensive test documentation (14/14 tests) +- All references to tool counts corrected + +### Fixed +- Missing `import os` in `mcp/server.py` +- `package_skill.py` exit code behavior (now exits 0 when API key missing) +- Improved UX with helpful messages instead of errors + +### Changed +- Test count badge updated (96 → 14 passing) +- All documentation references updated to 9 tools + +### Testing +- **CLI Tests:** 8/8 PASSED ✅ +- **MCP Tests:** 6/6 PASSED ✅ +- **Total:** 14/14 PASSED (100%) + +--- + +## [0.4.0] - 2025-10-18 + +### Added + +#### Large Documentation Support (40K+ Pages) +- Config splitting functionality for massive documentation sites +- Router/hub skill generation for intelligent query routing +- Checkpoint/resume feature for long scrapes +- Parallel scraping support for faster processing +- 4 split strategies: auto, category, router, size + +#### New CLI Tools +- `split_config.py` - Split large configs into focused sub-skills +- `generate_router.py` - Generate router/hub skills +- `package_multi.py` - Package multiple skills at once + +#### New MCP Tools +- `split_config` - Split large documentation via MCP +- `generate_router` - Generate router skills via MCP + +#### Documentation +- New `docs/LARGE_DOCUMENTATION.md` guide +- Example config: `godot-large-example.json` (40K pages) + +### Changed +- MCP tool count: 6 → 8 tools +- Updated documentation for large docs workflow + +--- + +## [0.3.0] - 2025-10-15 + +### Added + +#### MCP Server Integration +- Complete MCP server implementation (`mcp/server.py`) +- 6 MCP tools for Claude Code integration: + - `list_configs` + - `generate_config` + - `validate_config` + - `estimate_pages` + - `scrape_docs` + - `package_skill` + +#### Setup & Configuration +- Automated setup script (`setup_mcp.sh`) +- MCP configuration examples +- Comprehensive MCP setup guide (`docs/MCP_SETUP.md`) +- MCP testing guide (`docs/TEST_MCP_IN_CLAUDE_CODE.md`) + +#### Testing +- 31 comprehensive unit tests for MCP server +- Integration tests via Claude Code MCP protocol +- 100% test pass rate + +#### Documentation +- Complete MCP integration documentation +- Natural language usage examples +- Troubleshooting guides + +### Changed +- Restructured project as monorepo with CLI and MCP server +- Moved CLI tools to `cli/` directory +- Added MCP server to `mcp/` directory + +--- + +## [0.2.0] - 2025-10-10 + +### Added + +#### Testing & Quality +- Comprehensive test suite with 71 tests +- 100% test pass rate +- Test coverage for all major features +- Config validation tests + +#### Optimization +- Page count estimator (`estimate_pages.py`) +- Framework config optimizations with `start_urls` +- Better URL pattern coverage +- Improved scraping efficiency + +#### New Configs +- Kubernetes documentation config +- Tailwind CSS config +- Astro framework config + +### Changed +- Optimized all framework configs +- Improved categorization accuracy +- Enhanced error messages + +--- + +## [0.1.0] - 2025-10-05 + +### Added + +#### Initial Release +- Basic documentation scraper functionality +- Manual skill creation +- Framework configs (Godot, React, Vue, Django, FastAPI) +- Smart categorization system +- Code language detection +- Pattern extraction +- Local and API-based enhancement options +- Basic packaging functionality + +#### Core Features +- BFS traversal for documentation scraping +- CSS selector-based content extraction +- Smart categorization with scoring +- Code block detection and formatting +- Caching system for scraped data +- Interactive mode for config creation + +#### Documentation +- README with quick start guide +- Basic usage documentation +- Configuration file examples + +--- + +## Release Links + +- [v1.2.0](https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v1.2.0) - PDF Advanced Features +- [v1.1.0](https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v1.1.0) - Documentation Scraping Enhancements +- [v1.0.0](https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v1.0.0) - Production Release +- [v0.4.0](https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v0.4.0) - Large Documentation Support +- [v0.3.0](https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v0.3.0) - MCP Integration + +--- + +## Version History Summary + +| Version | Date | Highlights | +|---------|------|------------| +| **1.2.0** | 2025-10-23 | 📄 PDF advanced features: OCR, passwords, tables, 3x faster | +| **1.1.0** | 2025-10-22 | 🌠Unlimited scraping, parallel mode, new configs (Ansible, Laravel) | +| **1.0.0** | 2025-10-19 | 🚀 Production release, auto-upload, 9 MCP tools | +| **0.4.0** | 2025-10-18 | 📚 Large docs support (40K+ pages) | +| **0.3.0** | 2025-10-15 | 🔌 MCP integration with Claude Code | +| **0.2.0** | 2025-10-10 | 🧪 Testing & optimization | +| **0.1.0** | 2025-10-05 | 🎬 Initial release | + +--- + +[Unreleased]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v1.2.0...HEAD +[1.2.0]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v1.1.0...v1.2.0 +[1.1.0]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v1.0.0...v1.1.0 +[1.0.0]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v0.4.0...v1.0.0 +[0.4.0]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v0.3.0...v0.4.0 +[0.3.0]: https://github.com/yusufkaraaslan/Skill_Seekers/compare/v0.2.0...v0.3.0 +[0.2.0]: https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v0.2.0 +[0.1.0]: https://github.com/yusufkaraaslan/Skill_Seekers/releases/tag/v0.1.0 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..65b8714 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,285 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**Skill Seekers** converts documentation from 18 source types into production-ready formats for 21+ AI platforms (LLM platforms, RAG frameworks, vector databases, AI coding assistants). Published on PyPI as `skill-seekers`. + +**Version:** 3.7.0 | **Python:** 3.10+ | **Website:** https://skillseekersweb.com/ + +**Architecture:** See `docs/UML_ARCHITECTURE.md` for UML diagrams and module overview. StarUML project at `docs/UML/skill_seekers.mdj`. Refactor state/history: `docs/UNIFICATION_PLAN.md` (Grand Unification — all 5 phases done; remaining cosmetic items listed there). + +## Essential Commands + +```bash +# REQUIRED before running tests or CLI (src/ layout) +pip install -e . + +# Run all tests (NEVER skip - all must pass before commits) +pytest tests/ -v + +# Fast iteration (skip slow MCP tests ~20min) +pytest tests/ --ignore=tests/test_mcp_fastmcp.py --ignore=tests/test_mcp_server.py --ignore=tests/test_install_skill_e2e.py -q + +# Single test +pytest tests/test_scraper_features.py::test_detect_language -vv -s + +# Code quality (must pass before push - matches CI) +uvx ruff check src/ tests/ +uvx ruff format --check src/ tests/ +mypy src/skill_seekers # continue-on-error in CI + +# Auto-fix lint/format issues +uvx ruff check --fix --unsafe-fixes src/ tests/ +uvx ruff format src/ tests/ + +# Build & publish +uv build +uv publish +``` + +## CI Matrix + +Runs on push/PR to `main` or `development`. Lint job (Python 3.12, Ubuntu) + Test job (Ubuntu + macOS, Python 3.10/3.11/3.12, excludes macOS+3.10). Both must pass for merge. + +## Git Workflow + +- **Main branch:** `main` (requires tests + 1 review) +- **Development branch:** `development` (default PR target, requires tests) +- **Feature branches:** `feature/{task-id}-{description}` from `development` +- PRs always target `development`, never `main` directly + +## Architecture + +### CLI: Unified create command + +Entry point `src/skill_seekers/cli/main.py`. The `create` command is the **primary** entry point for skill creation — it auto-detects source type and routes to the appropriate `SkillConverter`. The `scan` command (added in #327) is a separate discovery step for projects with multiple frameworks; it emits one config file per detected framework and you then run `create` on each. + +``` +skill-seekers create # Auto-detect: URL, owner/repo, ./path, file.pdf, etc. +skill-seekers scan

# AI-driven discovery → emits one config per detected framework + -codebase.json +skill-seekers package # Package for platform (--target claude/gemini/openai/markdown/minimax/opencode/kimi/deepseek/qwen/openrouter/together/fireworks/langchain/llama-index/haystack/chroma/faiss/weaviate/qdrant/pinecone/ibm-bob) +``` + +### Scan command (issue #327) + +`skill-seekers scan ` is an AI-driven project knowledge-base bootstrapper. Pipeline in `src/skill_seekers/cli/scan_command.py`: + +1. `collect_signals()` in `signal_collectors.py` — deterministic, bounded gathering of manifests + README + Dockerfile/CI + sampled source files + git remote. **Per-kind byte budgets** (24 KB manifest / 6 KB README / 6 KB CI / 28 KB samples, total 64 KB) so a fat package.json can't crowd out other kinds. `_SOURCE_DIRS` covers ~14 layouts (Go `cmd/`, Rust `crates/`, JS monorepo `apps/packages/`, Maven `source/`, Django at root); also walks root one level deep for flat-layout Python. +2. `detect_with_ai(bundle, AgentClient)` — one LLM call, structured JSON output. **Source signals are first-2-KB of each file** (whole-file sampling, no regex parsing — added in WS4 because regex missed Go multi-line imports + Rust `mod`/`extern crate`). Canonical-slug prompt + the canonical-name resolver are coupled — change one, update the other. +3. `resolve_or_generate_with_status()` — for each detection: try `out_dir/.json` (cache from prior run), then `resolve_config_path` from `config_fetcher` with multiple canonical name candidates (`_canonical_name_candidates` handles `"Godot Engine"` → `"godot"`, plus CJK / European suffixes like `"Godot 引擎"`, `"React フレームワーク"`, `"Lodash Bibliothek"`), then `generate_config_with_ai` as the last resort. Always appends `.json` to lookup names so local-disk and user-dir resolution actually finds files. Always stamps `metadata.detected_version` (nested, not top-level — `metadata.version` already exists and means config-schema version). +4. `emit_codebase_config()` — always writes `-codebase.json` (a `type: local` source pointed at the project root). +5. `diff_against_existing()` — keyed by **filename slug** (not internal `data["name"]`) so re-scans don't churn when the AI returns a display name vs the registry canonical slug. +6. `_archive_removed()` — when a config disappears from detections, MOVE (not delete — user may have hand-edited) to `out_dir/.archived//`. Runs after diff, before fresh writes. +7. `maybe_publish()` — **native async** (WS11). Opt-in submission of freshly AI-generated configs to the community registry. Pre-checks `GITHUB_TOKEN`. Idempotency guard: `_find_existing_issue` queries GitHub Search API for an existing open issue with the same config name before submitting. Retries transient failures (rate limit, 5xx) with 0s/5s/15s backoff. `_prompt_async` wraps `input()` via `asyncio.to_thread` so the event loop isn't blocked. + +**CLI dispatch** uses the `COMMAND_CLASSES` table in `main.py` (added in WS1). `scan` and `doctor` are dispatched as `Cls(args).execute()` consuming the parsed argparse namespace directly — no `_reconstruct_argv` hack, no duplicate argparse. `ScanCommand.execute()` is the single `asyncio.run` boundary wrapping `run_scan` (sync) + `maybe_publish` (async). Remaining ~14 commands still use the legacy `COMMAND_MODULES` dispatch; they're flagged for migration. + +**Cost guardrails**: `--max-ai-generations N` (default 10) caps unbounded AI generation; `--dry-run` previews without writing or invoking AI; `--probe-urls` HEAD-checks AI-generated URLs with retry-on-404 and stamps `metadata._url_unverified` on confirmed-bad URLs. + +**Safety**: All writes use `_atomic_write_json` (`os.replace` after writing to `.tmp`) so a `KeyboardInterrupt` mid-write can't corrupt configs. `_safe_size` guards `stat()` so broken symlinks don't crash the scan. `ScanCommand.execute` calls `logging.basicConfig` so `logger.warning`/`error` is visible; exit code is non-zero when no configs and no codebase config were emitted. + +**Public constant**: `SourceDetector.CODE_PROJECT_MARKERS` (was `_CODE_PROJECT_MARKERS`) — shared between source_detector + signal_collectors. ~50 manifest types now (Pipfile, environment.yml, deno.json, flake.nix, Chart.yaml, deps.edn, dune-project, BUILD.bazel, …). Public so cross-module access doesn't reach into a private attribute. + +### SkillConverter Pattern (Template Method + Factory) + +All 18 source types implement the `SkillConverter` base class (`skill_converter.py`): + +```python +converter = get_converter("web", config) # Factory lookup +converter.run() # Template: extract() → build_skill() +``` + +Registry in `CONVERTER_REGISTRY` maps source type → (module, class). `create_command.py` builds config from `ExecutionContext`, calls `get_converter()`, then runs centralized enhancement. `get_converter("config", {...})` constructs `UnifiedScraper` from the same factory-shaped dict (no special cases in create_command/MCP). The base resolves `skill_dir` once (strips trailing separators) and derives `data_file` via `data_file_for()` — subclasses must not re-derive paths. + +### DocumentSkillBuilder (build side of 9 document scrapers) + +`cli/document_skill_builder.py:DocumentSkillBuilder` sits between `SkillConverter` and the 9 document scrapers (epub, word, pptx, html, pdf, jupyter, man, rss, chat). It owns `categorize_content`, reference-file writing (tables, truncation, image guard), `index.md` + `SKILL.md` generation, and `load_extracted_data`. Variation points are class attrs (`DOC_NOUN`, `SOURCE_LABEL`, `LOAD_TOTAL_KEY`, `PATTERN_KEYWORDS`, `RANGE_LABEL`, …) and small hook methods (`category_stem`, `_write_reference_section`, `_write_skill_md_metadata`). Output is pinned **byte-identical** by golden trees in `tests/golden/phase2/` — `UPDATE_GOLDENS=1` rewrites them, only do that deliberately. Surviving full-method overrides are domain-shaped and commented per scraper. + +### UnifiedScraper (multi-source configs) + +`unified_scraper.py` dispatches via the class-level `SOURCE_DISPATCH` table; `_scrape_with_converter()` is the shared engine for the 13 mechanical source types (`get_converter()` + public `converter.extract()` + cache copy + sub-skill build), so **new types registered in `CONVERTER_REGISTRY` work in unified configs automatically**. documentation/github/local stay bespoke (commented why). `run()` deliberately does NOT follow the base template (TestRunOrchestration pins that run() triggers workflows). + +### Data Flow (5 phases) + +1. **Scrape** - Source-specific scraper extracts content to `output/{name}_data/pages/*.json` +2. **Build** - `build_skill()` categorizes pages, extracts patterns, generates `output/{name}/SKILL.md` +3. **Enhance** (optional) - LLM rewrites SKILL.md (`--enhance-level 0-3`, auto-detects API vs LOCAL mode) +4. **Package** - Platform adaptor formats output (`.zip`, `.tar.gz`, JSON, vector index) +5. **Upload** (optional) - Platform API upload + +### Platform Adaptor Pattern (Strategy + Factory) + +Factory: `get_adaptor(platform, config)` in `adaptors/__init__.py` returns a `SkillAdaptor` instance. Base class `SkillAdaptor` + `SkillMetadata` in `adaptors/base.py`. + +``` +src/skill_seekers/cli/adaptors/ +├── __init__.py # Factory: get_adaptor(platform, config), ADAPTORS registry +├── base.py # Abstract base: SkillAdaptor, SkillMetadata +├── openai_compatible.py # Shared base for OpenAI-compatible platforms +├── claude.py # --target claude +├── gemini.py # --target gemini +├── openai.py # --target openai +├── markdown.py # --target markdown +├── minimax.py # --target minimax +├── opencode.py # --target opencode +├── kimi.py # --target kimi +├── deepseek.py # --target deepseek +├── qwen.py # --target qwen +├── openrouter.py # --target openrouter +├── together.py # --target together +├── fireworks.py # --target fireworks +├── langchain.py # --target langchain +├── llama_index.py # --target llama-index +├── haystack.py # --target haystack +├── chroma.py # --target chroma +├── faiss_helpers.py # --target faiss +├── qdrant.py # --target qdrant +├── weaviate.py # --target weaviate +├── pinecone_adaptor.py # --target pinecone +└── streaming_adaptor.py # --target streaming +``` + +All adaptors use `--target`. All adaptors are imported with `try/except ImportError` so missing optional deps don't break the registry. + +### 18 Source Type Converters + +Each in `src/skill_seekers/cli/{type}_scraper.py` as a `SkillConverter` subclass (no `main()`). The `create_command.py` uses `source_detector.py` to auto-detect, then calls `get_converter()`. Converters: web (doc_scraper), github, pdf, word, epub, video, local (codebase_scraper), jupyter, html, openapi, asciidoc, pptx, rss, manpage, confluence, notion, chat, config (unified_scraper). + +### CLI Argument System (single-definition parsers) + +``` +src/skill_seekers/cli/ +├── parsers/ # Central SubcommandParser classes — the ONLY definition of each command's flags +│ └── create_parser.py # Progressive help disclosure (--help-web, --help-github, etc.) +├── arguments/ # Argument definitions +│ ├── common.py # add_all_standard_arguments() - shared across all scrapers +│ └── create.py # UNIVERSAL_ARGUMENTS, WEB_ARGUMENTS, GITHUB_ARGUMENTS, etc. +├── exit_codes.py # EXIT_SUCCESS/ERROR/VALIDATION/INTERRUPT +└── source_detector.py # Auto-detect source type from input string +``` + +Command modules' standalone `main(args=None)` paths build their parser FROM the central `SubcommandParser` class — **add/change a flag in `parsers/*.py` only**. Drift guards (`tests/test_cli_parsers.py::TestCentralModuleParserSync` and `TestCentralParserSingleSource`) fail CI on any divergence of dests/defaults/option strings. + +`ExecutionContext.override()` is context-local (a `ContextVar` layered over the unchanged base singleton) — thread/async safe for the MCP server; propagate to worker threads via `copy_context`. + +### C3.x Codebase Analysis Pipeline + +Local codebase analysis features, all opt-out (`--skip-*` flags): +- C3.1 `pattern_recognizer.py` - Design pattern detection (10 GoF patterns, 9 languages) +- C3.2 `test_example_extractor.py` - Usage examples from tests +- C3.3 `how_to_guide_builder.py` - AI-enhanced educational guides +- C3.4 `config_extractor.py` - Configuration pattern extraction +- C3.5 `generate_router.py` - Architecture overview generation +- C3.10 `signal_flow_analyzer.py` - Godot signal flow analysis + +### MCP Server + +`src/skill_seekers/mcp/server_fastmcp.py` - 40 tools via FastMCP. Transport: stdio (Claude Code) or HTTP (Cursor/Windsurf). Optional dependency: `pip install -e ".[mcp]"` + +- **Tools run in-process** via `run_cli_main()` in `mcp/tools/_common.py`: same argv parsed by the command's REAL parser (sys.argv patch under a lock), stdout/stderr capture + contextvar log capture, identical `(stdout, stderr, returncode)` contract. No subprocess startup; old hard timeouts are advisory. +- **Exceptions BY DESIGN**: `enhance_skill` (LOCAL agent) and `install_skill`'s enhancement step stay subprocess — the agent must be a real child process for the fork-bomb-guard env semantics (`SKILL_SEEKER_ENHANCE_ACTIVE`). Never make these in-process. +- **Domain logic lives in `skill_seekers.services/`** (marketplace_manager, marketplace_publisher, config_publisher, source_manager, git_repo) — importable by CLI without the `[mcp]` extra; old `skill_seekers.mcp.*` paths are back-compat shims. No `sys.path` hacks anywhere in `mcp/`. + +### Enhancement (AgentClient is the single AI transport) + +Every text-based AI call goes through `AgentClient` (`src/skill_seekers/cli/agent_client.py`): central truncation gate, timeout policy, error classification. `API_PROVIDERS` (provider registry) and `AGENT_PRESETS` (local-agent command templates) live ONLY there. Adaptors declare provider/endpoint/model/prompt and route through `SkillAdaptor._enhance_skill_md_via_client` (atomic save with backup). `video_visual` frame classification is the documented multimodal exception (AgentClient is text-only). + +- **API mode** (if API key set): Anthropic, Google Gemini, OpenAI, Moonshot/Kimi — detected in registry order; `SKILL_SEEKER_PROVIDER` forces one. Models: `SKILL_SEEKER_MODEL` (global) or `ANTHROPIC_MODEL`/`GOOGLE_MODEL`/`OPENAI_MODEL`/`MOONSHOT_MODEL`; `ANTHROPIC_BASE_URL` for compatible endpoints. +- **LOCAL mode** (fallback): Claude Code, Kimi Code, Codex, Copilot, OpenCode, custom agents — command built by `build_local_agent_command()`. +- Control: `--enhance-level 0` (off) / `1` (SKILL.md only) / `2` (default, balanced) / `3` (full) +- Agent selection: `--agent claude|codex|copilot|opencode|kimi|custom` + +## Key Implementation Details + +### Smart Categorization (`doc_scraper.py:smart_categorize()`) + +Scores pages against category keywords: 3 points for URL match, 2 for title, 1 for content. Threshold of 2+ required. Falls back to "other". + +### Content Extraction (`doc_scraper.py`) + +`FALLBACK_MAIN_SELECTORS` constant + `_find_main_content()` helper handle CSS selector fallback. Links are extracted from the full page before early return (not just main content). `body` is deliberately excluded from fallbacks. + +### Three-Stream GitHub Architecture (`unified_codebase_analyzer.py`) + +Stream 1: Code Analysis (AST, patterns, tests, guides). Stream 2: Documentation (README, docs/, wiki). Stream 3: Community (issues, PRs, metadata). Depth control: `basic` (1-2 min) or `c3x` (20-60 min). + +## Testing + +### Test markers (pytest.ini) + +```bash +pytest tests/ -v # Default: fast tests only +pytest tests/ -v -m slow # Include slow tests (>5s) +pytest tests/ -v -m integration # External services required +pytest tests/ -v -m e2e # Resource-intensive +pytest tests/ -v -m "not slow and not integration" # Fastest subset +``` + +### Known legitimate skips (~11) + +- 2: chromadb incompatible with Python 3.14 (pydantic v1) +- 2: weaviate-client not installed +- 2: Qdrant not running (requires docker) +- 2: langchain/llama_index not installed +- 3: GITHUB_TOKEN not set + +### sys.modules gotcha + +`test_swift_detection.py` deletes `skill_seekers.cli` modules from `sys.modules`. It must save and restore both `sys.modules` entries AND parent package attributes (`setattr`). See the test file for the pattern. + +## Dependencies + +Core deps include `langchain`, `llama-index`, `anthropic`, `httpx`, `PyMuPDF`, `pydantic`. Platform-specific deps are optional: + +```bash +pip install -e ".[mcp]" # MCP server +pip install -e ".[gemini]" # Google Gemini +pip install -e ".[openai]" # OpenAI +pip install -e ".[docx]" # Word documents +pip install -e ".[epub]" # EPUB books +pip install -e ".[video]" # Video (lightweight) +pip install -e ".[video-full]"# Video (Whisper + visual) +pip install -e ".[jupyter]" # Jupyter notebooks +pip install -e ".[pptx]" # PowerPoint +pip install -e ".[rss]" # RSS/Atom feeds +pip install -e ".[confluence]"# Confluence wiki +pip install -e ".[notion]" # Notion pages +pip install -e ".[chroma]" # ChromaDB +pip install -e ".[all]" # Everything (except video-full) +``` + +Dev dependencies use PEP 735 `[dependency-groups]` in pyproject.toml. + +## Environment Variables + +```bash +ANTHROPIC_API_KEY=sk-ant-... # Claude AI (or compatible endpoint) +ANTHROPIC_BASE_URL=https://... # Optional: Claude-compatible API endpoint +GOOGLE_API_KEY=AIza... # Google Gemini (optional) +OPENAI_API_KEY=sk-... # OpenAI (optional) +GITHUB_TOKEN=ghp_... # Higher GitHub rate limits +``` + +## Adding New Features + +### New platform adaptor +1. Create `src/skill_seekers/cli/adaptors/{platform}.py` inheriting `SkillAdaptor` from `base.py` +2. Register in `adaptors/__init__.py` (add try/except import + add to `ADAPTORS` dict) +3. Add optional dep to `pyproject.toml` +4. Add tests in `tests/` + +### New source type converter +1. Create `src/skill_seekers/cli/{type}_scraper.py` — for document-shaped sources inherit `DocumentSkillBuilder` (categorization/references/index/SKILL.md come free; implement `extract()` + hooks), otherwise inherit `SkillConverter` and implement `extract()` and `build_skill()`. Set `SOURCE_TYPE`. +2. Register in `CONVERTER_REGISTRY` in `skill_converter.py` — this also makes the type work in unified configs automatically (UnifiedScraper engine) +3. Add source type config building in `create_command.py:_build_config()` +4. Add auto-detection in `source_detector.py` +5. Add optional dep if needed +6. Add tests + +### New CLI argument +- Subcommand flag: define ONLY in the central parser class (`parsers/{cmd}_parser.py`) — module `main()` builds from it; the drift-guard test fails otherwise +- Universal: `UNIVERSAL_ARGUMENTS` in `arguments/create.py` +- Source-specific: appropriate dict (`WEB_ARGUMENTS`, `GITHUB_ARGUMENTS`, etc.) +- Shared across scrapers: `add_all_standard_arguments()` in `arguments/common.py` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..03ee367 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,550 @@ +# Contributing to Skill Seeker + +First off, thank you for considering contributing to Skill Seeker! It's people like you that make Skill Seeker such a great tool. + +## Table of Contents + +- [Branch Workflow](#branch-workflow) +- [Code of Conduct](#code-of-conduct) +- [How Can I Contribute?](#how-can-i-contribute) +- [Development Setup](#development-setup) +- [Pull Request Process](#pull-request-process) +- [Coding Standards](#coding-standards) +- [Testing](#testing) +- [Documentation](#documentation) + +--- + +## Branch Workflow + +**âš ï¸ IMPORTANT:** Skill Seekers uses a two-branch workflow. + +### Branch Structure + +``` +main (production) + ↑ + │ (only maintainer merges) + │ +development (integration) ↠default branch for PRs + ↑ + │ (all contributor PRs go here) + │ +feature branches +``` + +### Branches + +- **`main`** - Production branch + - Always stable + - Only receives merges from `development` by maintainers + - Protected: requires tests + 1 review + +- **`development`** - Integration branch + - **Default branch for all PRs** + - Active development happens here + - Protected: requires tests to pass + - Gets merged to `main` by maintainers + +- **Feature branches** - Your work + - Created from `development` + - Named descriptively (e.g., `feature/123-add-github-scraping`) + - Merged back to `development` via PR + +### Workflow Example + +```bash +# 1. Fork and clone +git clone https://github.com/YOUR_USERNAME/Skill_Seekers.git +cd Skill_Seekers + +# 2. Add upstream +git remote add upstream https://github.com/yusufkaraaslan/Skill_Seekers.git + +# 3. Create feature branch from development +git checkout development +git pull upstream development +git checkout -b my-feature + +# 4. Make changes, commit, push +git add . +git commit -m "Add my feature" +git push origin my-feature + +# 5. Create PR targeting 'development' branch +``` + +--- + +## Related Repositories + +Skill Seekers spans multiple repositories. Make sure you're contributing to the right one: + +| What you want to work on | Repository | +|--------------------------|-----------| +| Core CLI, scrapers, MCP tools, adaptors | [Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers) (this repo) | +| Website, docs, UI/UX | [skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb) | +| Preset configs, community configs | [skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs) | +| GitHub Action integration | [skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action) | +| Claude Code plugin | [skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin) | +| Homebrew formula | [homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers) | + +--- + +## Code of Conduct + +This project and everyone participating in it is governed by our commitment to fostering an open and welcoming environment. Please be respectful and constructive in all interactions. + +--- + +## How Can I Contribute? + +### Reporting Bugs + +Before creating bug reports, please check the [existing issues](https://github.com/yusufkaraaslan/Skill_Seekers/issues) to avoid duplicates. + +When creating a bug report, include: +- **Clear title and description** +- **Steps to reproduce** the issue +- **Expected behavior** vs actual behavior +- **Screenshots** if applicable +- **Environment details** (OS, Python version, etc.) +- **Error messages** and stack traces + +**Example:** +```markdown +**Bug:** MCP tool fails when config has no categories + +**Steps to Reproduce:** +1. Create config with empty categories: `"categories": {}` +2. Run `skill-seekers create --config configs/test.json` +3. See error + +**Expected:** Should use auto-inferred categories +**Actual:** Crashes with KeyError + +**Environment:** +- OS: Ubuntu 22.04 +- Python: 3.10.5 +- Version: 1.0.0 +``` + +### Suggesting Enhancements + +Enhancement suggestions are tracked as [GitHub issues](https://github.com/yusufkaraaslan/Skill_Seekers/issues). + +Include: +- **Clear title** describing the enhancement +- **Detailed description** of the proposed functionality +- **Use cases** that would benefit from this enhancement +- **Examples** of how it would work +- **Alternatives considered** + +### Adding New Framework Configs + +We welcome new framework configurations! To add one: + +1. Create a config file in `configs/` +2. Test it thoroughly with different page counts +3. Submit a PR with: + - The config file + - Brief description of the framework + - Test results (number of pages scraped, categories found) + +**Example PR:** +```markdown +**Add Svelte Documentation Config** + +Adds configuration for Svelte documentation (https://svelte.dev/docs). + +- Config: `configs/svelte.json` +- Tested with max_pages: 100 +- Successfully categorized: getting_started, components, api, advanced +- Total pages available: ~150 +``` + +### Pull Requests + +We actively welcome your pull requests! + +**âš ï¸ IMPORTANT:** All PRs must target the `development` branch, not `main`. + +1. Fork the repo and create your branch from `development` +2. If you've added code, add tests +3. If you've changed APIs, update the documentation +4. Ensure the test suite passes +5. Make sure your code follows our coding standards +6. Issue that pull request to `development` branch! + +--- + +## Development Setup + +### Prerequisites + +- Python 3.10 or higher (required for MCP integration) +- Git + +### Setup Steps + +1. **Fork and clone the repository** + ```bash + git clone https://github.com/YOUR_USERNAME/Skill_Seekers.git + cd Skill_Seekers + ``` + +2. **Install dependencies** + ```bash + pip install -e . + pip install -e ".[dev]" + pip install -e ".[all]" + ``` + +3. **Create a feature branch from development** + ```bash + git checkout development + git pull upstream development + git checkout -b feature/my-awesome-feature + ``` + +4. **Make your changes** + ```bash + # Edit files... + ``` + +5. **Run tests** + ```bash + python -m pytest tests/ -v + ``` + +6. **Commit your changes** + ```bash + git add . + git commit -m "Add awesome feature" + ``` + +7. **Push to your fork** + ```bash + git push origin feature/my-awesome-feature + ``` + +8. **Create a Pull Request** + +--- + +## Pull Request Process + +### Before Submitting + +- [ ] Tests pass locally (`python -m pytest tests/ -v`) +- [ ] Code follows PEP 8 style guidelines +- [ ] Documentation is updated if needed +- [ ] CHANGELOG.md is updated (if applicable) +- [ ] Commit messages are clear and descriptive + +### PR Template + +```markdown +## Description +Brief description of what this PR does. + +## Type of Change +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Documentation update + +## How Has This Been Tested? +Describe the tests you ran to verify your changes. + +## Checklist +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +``` + +### Review Process + +1. A maintainer will review your PR within 3-5 business days +2. Address any feedback or requested changes +3. Once approved, a maintainer will merge your PR +4. Your contribution will be included in the next release! + +### Code Review Guidelines + +**Fix both, don't follow precedent.** When a reviewer flags an anti-pattern in +your PR, do not defend it by pointing at another file that does the same thing. +"`X.py` already does this" is not a justification — it's evidence that two +places need fixing, not that the smell is sanctioned. + +The correct response is one of: +- "Good catch — I'll fix both `new_file.py` and `existing_file.py` in this PR." +- "Out of scope here, but I'll file a follow-up to fix `existing_file.py`." + +The wrong response is: +- "But `existing_file.py` does the same thing, so this matches the convention." + +This rule cuts both ways: maintainers calling out an anti-pattern should be +willing to either accept the broader fix or open the follow-up issue +themselves. Bad-precedent-as-convention is how codebases ossify. + +--- + +## Coding Standards + +### Python Style Guide + +We follow [PEP 8](https://www.python.org/dev/peps/pep-0008/) with some modifications: + +- **Line length:** 100 characters (not 79) +- **Indentation:** 4 spaces +- **Quotes:** Double quotes for strings +- **Naming:** + - Functions/variables: `snake_case` + - Classes: `PascalCase` + - Constants: `UPPER_SNAKE_CASE` + +### Code Organization + +```python +# 1. Standard library imports +import os +import sys +from pathlib import Path + +# 2. Third-party imports +import requests +from bs4 import BeautifulSoup + +# 3. Local application imports +from cli.utils import open_folder + +# 4. Constants +MAX_PAGES = 1000 +DEFAULT_RATE_LIMIT = 0.5 + +# 5. Functions and classes +def my_function(): + """Docstring describing what this function does.""" + pass +``` + +### Documentation + +- All functions should have docstrings +- Use type hints where appropriate +- Add comments for complex logic + +```python +def scrape_page(url: str, selectors: dict) -> dict: + """ + Scrape a single page and extract content. + + Args: + url: The URL to scrape + selectors: Dictionary of CSS selectors + + Returns: + Dictionary containing extracted content + + Raises: + RequestException: If page cannot be fetched + """ + pass +``` + +### Code Quality Tools + +We use **Ruff** for linting and code formatting. Ruff is a fast Python linter that combines multiple tools (Flake8, isort, Black, etc.) into one. + +**Running Ruff:** + +```bash +# Check for linting errors +uvx ruff check src/ tests/ + +# Auto-fix issues +uvx ruff check --fix src/ tests/ + +# Format code +uvx ruff format src/ tests/ +``` + +**Common Ruff Rules:** +- **SIM102** - Simplify nested if statements (use `and` instead) +- **SIM117** - Combine multiple `with` statements +- **B904** - Use `from e` for proper exception chaining +- **SIM113** - Use enumerate instead of manual counters +- **B007** - Use `_` for unused loop variables +- **ARG002** - Remove unused function arguments + +**CI/CD Integration:** + +All pull requests automatically run: +1. `ruff check` - Linting validation +2. `ruff format --check` - Format validation +3. `pytest` - Test suite + +Make sure all checks pass before submitting your PR: + +```bash +# Run the same checks as CI +uvx ruff check src/ tests/ +uvx ruff format --check src/ tests/ +pytest tests/ -v +``` + +--- + +## Testing + +### Running Tests + +```bash +# Run all tests +python -m pytest tests/ -v + +# Run specific test file +python -m pytest tests/test_mcp_server.py -v + +# Run with coverage +python -m pytest tests/ --cov=src/skill_seekers --cov-report=term +``` + +### Writing Tests + +- Tests go in the `tests/` directory +- Test files should start with `test_` +- Use descriptive test names + +```python +def test_config_validation_with_missing_fields(): + """Test that config validation fails when required fields are missing.""" + config = {"name": "test"} # Missing base_url + result = validate_config(config) + assert result is False +``` + +### Test Coverage + +- Aim for >80% code coverage +- Critical paths should have 100% coverage +- Add tests for bug fixes to prevent regressions + +--- + +## Documentation + +### Where to Document + +- **README.md** - Overview, quick start, basic usage +- **docs/** - Detailed guides and tutorials +- **CHANGELOG.md** - All notable changes +- **Code comments** - Complex logic and non-obvious decisions + +### Documentation Style + +- Use clear, simple language +- Include code examples +- Add screenshots for UI-related features +- Keep it up to date with code changes + +--- + +## Project Structure + +``` +Skill_Seekers/ +├── src/skill_seekers/ # Main package (src/ layout) +│ ├── cli/ # CLI commands and entry points +│ │ ├── main.py # Unified CLI entry (COMMAND_MODULES dict) +│ │ ├── source_detector.py # Auto-detects source type +│ │ ├── create_command.py # Unified `create` command routing +│ │ ├── config_validator.py # VALID_SOURCE_TYPES set +│ │ ├── unified_scraper.py # Multi-source orchestrator +│ │ ├── unified_skill_builder.py # Pairwise synthesis + generic merge +│ │ ├── doc_scraper.py # Documentation (web) +│ │ ├── github_scraper.py # GitHub repos +│ │ ├── pdf_scraper.py # PDF files +│ │ ├── word_scraper.py # Word (.docx) +│ │ ├── epub_scraper.py # EPUB books +│ │ ├── video_scraper.py # Video (YouTube, Vimeo, local) +│ │ ├── codebase_scraper.py # Local codebases +│ │ ├── jupyter_scraper.py # Jupyter Notebooks +│ │ ├── html_scraper.py # Local HTML files +│ │ ├── openapi_scraper.py # OpenAPI/Swagger specs +│ │ ├── asciidoc_scraper.py # AsciiDoc files +│ │ ├── pptx_scraper.py # PowerPoint files +│ │ ├── rss_scraper.py # RSS/Atom feeds +│ │ ├── manpage_scraper.py # Man pages +│ │ ├── confluence_scraper.py # Confluence wikis +│ │ ├── notion_scraper.py # Notion pages +│ │ ├── chat_scraper.py # Slack/Discord exports +│ │ ├── adaptors/ # Platform adaptors (Strategy pattern) +│ │ ├── arguments/ # CLI argument definitions (one per source) +│ │ ├── parsers/ # Subcommand parsers (one per source) +│ │ └── storage/ # Cloud storage adaptors +│ ├── services/ # Shared domain logic (marketplace, config publishing, git sources) — used by CLI and MCP +│ ├── mcp/ # MCP server + tools (in-process; thin layer over cli/ + services/) +│ └── sync/ # Sync monitoring +├── configs/ # Preset JSON scraping configs +├── docs/ # Documentation +├── tests/ # 115+ test files (pytest) +└── .github/ # GitHub config + └── workflows/ # CI/CD workflows +``` + +**Scraper pattern (18 source types):** Each source type is a `SkillConverter` subclass in `cli/_scraper.py` (document-shaped sources subclass `DocumentSkillBuilder`, which provides the whole build side), reached via `skill-seekers create` auto-detection — there is no per-type `main()`. Register new types in: `CONVERTER_REGISTRY` in `skill_converter.py` (this also enables them in unified multi-source configs), `create_command.py:_build_config()`, `source_detector.py`, and `config_validator.py` VALID_SOURCE_TYPES. CLI flags are defined once in the central `parsers/*.py` classes (a drift-guard test enforces this). + +### UML Architecture + +Full UML class diagrams are maintained in StarUML and synced from source code: + +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - Overview with embedded PNG diagrams +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML project (open with [StarUML](https://staruml.io/)) +- **[docs/UML/exports/](docs/UML/exports/)** - 14 PNG exports (package overview + 13 class diagrams) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - HTML API reference + +**Key design patterns documented in UML:** +- Strategy + Factory in Adaptors (SkillAdaptor ABC + 20+ implementations) +- Strategy + Factory in Storage (BaseStorageAdaptor + S3/GCS/Azure) +- Template Method in Parsers (SubcommandParser + 28 subclasses) +- Template Method in Analysis (BasePatternDetector + 10 GoF detectors) +- Command pattern in CLI (CLIDispatcher + COMMAND_MODULES lazy dispatch) + +When adding new classes or modules, please update the corresponding UML diagram to keep architecture docs in sync. + +--- + +## Release Process + +Releases are managed by maintainers: + +1. Update version in relevant files +2. Update CHANGELOG.md +3. Create and push version tag +4. GitHub Actions will create the release +5. Announce on relevant channels + +--- + +## Questions? + +- 💬 [Open a discussion](https://github.com/yusufkaraaslan/Skill_Seekers/discussions) +- 🛠[Report a bug](https://github.com/yusufkaraaslan/Skill_Seekers/issues) +- 📧 Contact: yusufkaraaslan.yk@pm.me + +--- + +## Recognition + +Contributors will be recognized in: +- README.md contributors section +- CHANGELOG.md for each release +- GitHub contributors page + +Thank you for contributing to Skill Seeker! 🎉 diff --git a/DOCUMENTATION_AUDIT_REPORT_2026-05-30.md b/DOCUMENTATION_AUDIT_REPORT_2026-05-30.md new file mode 100644 index 0000000..8869401 --- /dev/null +++ b/DOCUMENTATION_AUDIT_REPORT_2026-05-30.md @@ -0,0 +1,531 @@ +# Skill Seekers Documentation Audit Report +**Date:** 2026-05-30 +**Project Version:** 3.6.0 (from `pyproject.toml`) +**Auditor:** Agent Swarm Analysis +**Scope:** All non-generated `.md` files (excludes `output/`, `.skillseeker-cache/`, virtualenvs) + +--- + +## Executive Summary + +The Skill Seekers project has **~163 non-generated markdown files** across the repository. While the codebase is actively maintained at **v3.6.0**, the documentation ecosystem suffers from **severe version drift**, **widespread stale CLI references**, **broken internal links**, **incomplete translations**, **near-duplicate files**, and **significant gaps between claimed and actual features**. + +### Severity Distribution +| Severity | Count | Description | +|----------|-------|-------------| +| **CRITICAL** | 45+ | Wrong commands, broken links, missing sections, incorrect versions | +| **WARNING** | 60+ | Stale counts, truncated content, minor inaccuracies, deprecated paths | +| **INFO** | 35+ | Missing features from docs, structural suggestions, cosmetic issues | + +### Key Finding +> **The English README.md itself is outdated (claims v3.5.0, shows 14 removed CLI subcommands, has 11 broken internal links), and ALL 11 translations lag even further behind (claiming v3.2.0). The documentation as a whole gives new users a systematically incorrect understanding of how to use the tool.** + +--- + +## 1. Version Consistency Crisis + +Version numbers are **completely inconsistent** across the documentation ecosystem: + +| Location | Claims | Actual | Status | +|----------|--------|--------|--------| +| `pyproject.toml` | — | **3.6.0** | ✅ Source of truth | +| `AGENTS.md` | 3.6.0 | 3.6.0 | ✅ Correct | +| `README.md` (English) | 3.5.0 | 3.6.0 | ⌠Stale | +| **All 11 README translations** | 3.2.0 | 3.6.0 | ⌠**Very stale** | +| `docs/README.md` | 3.2.0 | 3.6.0 | ⌠Stale | +| `docs/getting-started/*.md` | 3.1.0–3.2.0 | 3.6.0 | ⌠Stale | +| `docs/user-guide/*.md` | 3.1.0–3.2.0 | 3.6.0 | ⌠Stale | +| `docs/guides/MCP_SETUP.md` | 2.4.0 | 3.6.0 | ⌠Very stale | +| `docs/reference/MCP_REFERENCE.md` | 3.5.0 | 3.6.0 | ⌠Slightly stale | +| `docs/advanced/mcp-server.md` | 3.2.0 | 3.6.0 | ⌠Stale | +| `ROADMAP.md` | 3.2.0 | 3.6.0 | ⌠Stale | +| `QWEN.md` | 3.3.0 | 3.6.0 | ⌠Stale | +| `integrations/INTEGRATIONS.md` | 2.10.0+ | 3.6.0 | ⌠Very stale | +| `api/configs_repo/STATUS.md` | 2.11.0+ | 3.6.0 | ⌠Very stale | + +**Impact:** New users cannot determine which version of the tool they are reading documentation for. Features documented at v3.1.0 may have changed significantly by v3.6.0. + +--- + +## 2. README.md (English) — Deep Analysis + +### 2.1 CRITICAL Issues + +#### A. Broken / Outdated Internal Links (11 links) +| Link in README | Actual Location | Status | +|---|---|---| +| `ASYNC_SUPPORT.md` | **Does not exist anywhere** | ⌠Dead | +| `docs/ENHANCEMENT_MODES.md` | `docs/features/ENHANCEMENT_MODES.md` | ⌠Wrong path | +| `docs/FEATURE_MATRIX.md` | `docs/reference/FEATURE_MATRIX.md` | ⌠Wrong path | +| `docs/GIT_CONFIG_SOURCES.md` | `docs/reference/GIT_CONFIG_SOURCES.md` | ⌠Wrong path | +| `docs/HOW_TO_GUIDES.md#ai-enhancement-new` | `docs/features/HOW_TO_GUIDES.md` | ⌠Wrong path | +| `docs/IMPLEMENTATION_SUMMARY_THREE_STREAM.md` | `docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md` | ⌠Wrong path | +| `docs/LARGE_DOCUMENTATION.md` | `docs/reference/LARGE_DOCUMENTATION.md` | ⌠Wrong path | +| `docs/MCP_SETUP.md` | `docs/guides/MCP_SETUP.md` | ⌠Wrong path | +| `docs/QUICK_REFERENCE.md` | `docs/archive/legacy/QUICK_REFERENCE.md` | ⌠Wrong path | +| `docs/UNIFIED_SCRAPING.md` | `docs/features/UNIFIED_SCRAPING.md` | ⌠Wrong path | +| `QUICKSTART.md` | `docs/archive/legacy/QUICKSTART.md` | ⌠Wrong path | + +#### B. Non-Existent CLI Subcommands (14 removed commands still shown) +The README displays **legacy subcommands that were removed** in the unified CLI redesign: + +| Invalid Command Shown | Correct Modern Command | +|---|---| +| `skill-seekers scrape --config ...` | `skill-seekers create --config ...` | +| `skill-seekers scrape --url ...` | `skill-seekers create https://...` | +| `skill-seekers video --url ...` | `skill-seekers create ... --video-url ...` | +| `skill-seekers video --setup` | `skill-seekers create --setup` | +| `skill-seekers pdf --pdf ...` | `skill-seekers create ... --pdf ...` | +| `skill-seekers github --repo ...` | `skill-seekers create ...` (auto-detect) | +| `skill-seekers unified --config ...` | `skill-seekers create configs/..._unified.json` | +| `skill-seekers confluence --space ...` | `skill-seekers create ... --space-key ...` | +| `skill-seekers notion --database-id ...` | `skill-seekers create ... --database-id ...` | +| `skill-seekers chat --export-dir ...` | `skill-seekers create ... --chat-export-path ...` | +| `skill-seekers list-configs` | **Does not exist** | +| `skill-seekers analyze --directory ...` | **Does not exist** | + +#### C. Wrong CLI Flags in Examples +- `skill-seekers video --url ...` → should use `--video-url` +- `skill-seekers video --playlist ...` → should use `--video-playlist` +- `skill-seekers confluence --space TEAM` → should use `--space-key` +- `skill-seekers chat --export-dir ./slack-export` → should use `--chat-export-path` +- `skill-seekers package ... --format chroma/faiss/qdrant` → should use `--target` + +#### D. Inconsistent Test Counts +- Badge: `3194+ Passing` +- "Quality Assurance" prose: `2,540+ tests` +- Actual codebase: ~3,462 test functions +- **Three different numbers cited in different places** + +#### E. Missing Major Features +The README **omits** these significant v3.x features: +- `--preset` (`quick` / `standard` / `comprehensive`) +- `--dry-run`, `--fresh`, `--resume`, `--skip-scrape` +- `--chunk-for-rag`, `--chunk-tokens`, `--chunk-overlap-tokens` +- `--streaming`, `--marketplace`, `--marketplace-category` +- `skill-seekers doctor` (health check) +- `skill-seekers sync-config` (config drift detection) +- `skill-seekers stream` (streaming ingestion) +- `skill-seekers update` (incremental updater) +- `skill-seekers multilang` (multi-language support) +- `skill-seekers quality` (quality scoring) +- `skill-seekers extract-test-examples` + +### 2.2 WARNING Issues +- MCP tool count: README says 26, AGENTS.md says 40, actual is 40 +- LLM platform comparison table shows only 5 of ~21 supported platforms +- Install-agent names: README says `Kimi` but CLI uses `kimi-code` +- `--target claude` description misleadingly claims auto-copy for Cursor/Windsurf + +--- + +## 3. Translation Analysis (All 11 READMEs) + +### 3.1 Summary Table + +| Translation | Headings | Version | Test Badge | Architecture Section | Scan Section | IBM Bob | MiniMax | Status | +|-------------|----------|---------|------------|----------------------|--------------|---------|---------|--------| +| English | 210 | 3.5.0 | 3194+ | ✅ | ✅ | ✅ | ✅ | âš ï¸ Stale | +| **zh-CN** | 165 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **ja** | 165 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **ko** | 166 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **de** | 166 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **es** | 195 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **fr** | 196 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **pt-BR** | 195 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **ru** | 166 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **tr** | 195 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **ar** | 166 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | +| **hi** | 195 | **3.2.0** | **2540+** | ⌠Missing | ⌠Missing | ⌠Missing | ⌠Missing | 🔴 Very stale | + +### 3.2 Universal Translation Deficiencies +**Every single translation** is missing these major sections that exist in English: +- `## 📚 Documentation` (early quick-link table) +- `## Architecture` (module overview + UML links) +- `### ðŸ›°ï¸ AI-driven project scan (new)` +- `### 🤖 Agent-Agnostic Skill Generation` +- `### 📦 Marketplace Pipeline` +- `IBM Bob` support (agent count says 18 instead of 19) +- `MiniMax AI` platform comparison row and examples +- `pepy.tech` and `Trendshift` badges + +### 3.3 Per-Translation Nuances +- **zh-CN, ja, ko** (CJK): Most severely truncated. Installation table has 13 rows vs English 15. Performance table missing Video rows. Smart Rate Limit Management heavily truncated. +- **ko** is the *best* CJK translation: includes Security section at bottom, has correct 15-row install table, includes Video performance rows. +- **fr, tr** (European): Include the early Documentation table (most others don't). Otherwise similar gaps. +- **hi** (Devanagari): Most complete non-European translation. Has all 5 print statements in Three-Stream example. Bootstrap "What you get" bullets present. Good technical transliteration. +- **ar** (Arabic): Most truncated. Three-Stream example has only 2 print statements. Missing Rate Limit Strategies Explained. Some bidi rendering issues in code comments. +- **ru** (Cyrillic): Has some untranslated English fragments ("OpenAPI/Swagger", "README"). Uses Latin "API"/"LOCAL" inconsistently. + +--- + +## 4. Core Project Documentation + +### 4.1 AGENTS.md — ✅ MOSTLY ACCURATE +- Version 3.6.0 ✅ +- Source types count (17 + config) ✅ +- 40 MCP tools ✅ +- Minor: Claims "~14 legacy commands" but actual is 16 + +### 4.2 CLAUDE.md — ✅ ACCURATE +- Architecture descriptions match codebase +- File paths correct +- 24 adaptor files match actual +- Minor: Uses `uvx ruff` while AGENTS.md uses `ruff` + +### 4.3 CHANGELOG.md — ✅ ACCURATE +- Latest version [3.6.0] correctly listed +- `[Unreleased]` section holds post-3.6.0 changes appropriately +- Format consistent + +### 4.4 ROADMAP.md — 🔴 SEVERELY OUTDATED +- Claims `v3.2.0` is current (actual: 3.6.0) +- Lists `v2.7.0`, `v2.8.0`, `v2.9.0` as future releases +- **Completed tasks NOT checked off**: + - A1.3 `submit_config` MCP tool — EXISTS + - C3.3 "Build how-to guides" — `how_to_guide_builder.py` EXISTS + - C3.4 "Extract configuration patterns" — `config_extractor.py` EXISTS + - C3.5 "Create architectural overview" — `generate_router.py` EXISTS + - E1.1 `fetch_config` MCP tool — EXISTS +- Wrong metrics: "1,880+ tests" (actual: ~3,445), "24 preset configs" (actual: 12), "5 bundled workflows" (actual: 68 YAML files) + +### 4.5 TROUBLESHOOTING.md — 🔴 BROKEN PATHS +- Uses **pre-`src/` layout paths** that no longer exist: + - `cli/doc_scraper.py` (×3) + - `python3 mcp/server.py` (×2) + - `pip3 install -r mcp/requirements.txt` — file does not exist +- **Missing critical step**: Never mentions `pip install -e .` which `conftest.py` hard-requires + +### 4.6 CONTRIBUTING.md — 🔴 WRONG SETUP +- Tells contributors: `pip install requests beautifulsoup4` and `pip install -r mcp/requirements.txt` +- **Should say**: `pip install -e .` / `pip install -e ".[dev]"` (as AGENTS.md states) +- Coverage paths wrong: `--cov=cli --cov=mcp` should be `--cov=src/skill_seekers` +- **Contradicts AGENTS.md**: Describes pre-commit hook setup, but AGENTS.md says "**No pre-commit hooks, no Makefile**" +- Branch naming: uses `feature/my-awesome-feature` without task ID; AGENTS.md specifies `feature/{task-id}-{description}` + +### 4.7 QWEN.md — 🔴 REDUNDANT & OUTDATED +- Version says `v3.3.0` (actual: 3.6.0) +- Claims 26+ MCP tools (actual: 40) +- Shows `skill-seekers package --target langchain` — `langchain` is a `--format` value, not `--target` +- Shows `--target cursor` — not a valid standalone `--target` +- **Omits `scan` and `doctor` entirely** +- Stale numbers: 67 YAML presets (actual: 68), 123 test files (actual: 143) +- **Recommendation**: Update to 3.6.0 or remove (largely duplicates CLAUDE.md/AGENTS.md) + +--- + +## 5. docs/ Directory Analysis + +### 5.1 Structural Issues + +#### A. docs/README.md Omits ~40% of Actual Content +The docs hub README lists only a subset of directories. It **omits**: +- `guides/` (7 files) +- `integrations/` (15 files) +- `features/` (5 files) +- `archive/`, `blog/`, `case-studies/`, `plans/`, `roadmap/`, `strategy/`, `agents/`, `superpowers/` +- `zh-CN/` (entire translation tree) +- `UML/` + +#### B. Phantom Link +`docs/README.md` links to `advanced/mcp-tools.md` — **does not exist**. Only `advanced/mcp-server.md` exists. + +### 5.2 Near-Duplicate File Pairs + +**Pair 1:** `DOCKER_GUIDE.md` (575 lines) ↔ `DOCKER_DEPLOYMENT.md` (762 lines) +- Both cover Docker deployment, Compose, volumes, networking, monitoring, troubleshooting +- `DOCKER_DEPLOYMENT.md` is more detailed (adds embedding server, sync monitor, Prometheus/Grafana/Loki) +- `DOCKER_GUIDE.md` has broken link: `[Vector Database Integration](docs/strategy/WEEK2_COMPLETE.md)` — `WEEK2_COMPLETE.md` does not exist +- **Recommendation**: Merge into single file + +**Pair 2:** `KUBERNETES_GUIDE.md` (957 lines) ↔ `KUBERNETES_DEPLOYMENT.md` (933 lines) +- Both cover Helm charts, manual deployment, scaling, HA, monitoring, security +- `KUBERNETES_DEPLOYMENT.md` adds Velero backup/restore, cost optimization +- `KUBERNETES_GUIDE.md` uses `skillseekers` namespace; `KUBERNETES_DEPLOYMENT.md` uses `skill-seekers` +- **Recommendation**: Merge into single file + +### 5.3 Partial Duplication: Troubleshooting +- `user-guide/06-troubleshooting.md` (~200 lines, v3.1.0) +- Top-level `TROUBLESHOOTING.md` (1094 lines, no version stamp) +- **Significant overlap** in installation, configuration, scraping, enhancement sections +- **Recommendation**: Consolidate or clearly differentiate scope + +### 5.4 Stale MCP Documentation +Three different MCP docs claim three different tool counts: + +| File | Claims | Actual | +|------|--------|--------| +| `guides/MCP_SETUP.md` | 26 tools / v2.4.0 | 40 tools / v3.6.0 | +| `advanced/mcp-server.md` | 27 tools / v3.2.0 | 40 tools / v3.6.0 | +| `reference/MCP_REFERENCE.md` | 40 tools / v3.5.0 | 40 tools / v3.6.0 | + +`guides/MCP_SETUP.md` also claims MCP SDK v1.25.0 and miscounts tool categories (says 27 but lists 28). + +### 5.5 Stale Guide Content +- `guides/MIGRATION_GUIDE.md` header says `v3.1.0-dev` but discusses migrating **to v2.7.0** as "latest" +- `integrations/INTEGRATIONS.md` says "Skill Seekers Version: v2.10.0+" +- `integrations/LANGCHAIN.md` says "Skill Seekers Version: v2.9.0+" +- `features/BOOTSTRAP_SKILL.md` says version 2.7.0 in frontmatter example + +### 5.6 FEATURE_MATRIX Undercount +Lists only 12 platforms but CLI supports 21+ packaging targets. Missing: DeepSeek, Qwen, OpenRouter, Together, Fireworks, IBM Bob, OpenCode, Kimi, and others. + +--- + +## 6. docs/zh-CN/ Translation Quality — 🔴 CRITICAL FINDING + +### 6.1 The Shocking Truth +**The `docs/zh-CN/` directory does NOT contain Chinese translations.** + +Out of **21 files audited**: +- **0 files (0%)** are fully translated to Chinese +- **1 file (~15%)** has partial Chinese (`advanced/mcp-server.md` — just section headers and some tool descriptions) +- **20 files (95%)** are **English copies** with minor divergence + +### 6.2 Content Drift Pattern +The zh-CN files fall into three categories: + +| Category | Files | Description | +|----------|-------|-------------| +| **zh-CN LAGS** | README, CLI_REFERENCE, API_REFERENCE, packaging | English docs are newer (v3.5.0 vs v3.2.0) | +| **zh-CN LEADS** | ARCHITECTURE, core-concepts, scraping, CONFIG_FORMAT, workflows, MCP_REFERENCE, multi-source | zh-CN documents features not yet in English docs (17 sources, unified config, new platforms) | +| **Identical** | 03-your-first-skill, 06-troubleshooting, SKILL_ARCHITECTURE, custom-workflows | Perfect copies | + +### 6.3 Broken Link +- `zh-CN/getting-started/04-next-steps.md` links to `05-scan-a-project.md` — **does not exist in zh-CN/** (only in `docs/getting-started/`) + +### 6.4 Recommendation +If the goal is Chinese-language documentation: **entire directory needs professional translation**. +If the goal is parallel English documentation: **rename directory** (e.g., `docs/extended/`) to avoid misleading users. + +--- + +## 7. Archive, Plans, Strategy & Roadmap Relevance + +### 7.1 docs/archive/ — Mostly Appropriate + +**Historical (8 files):** All are completed verification reports. Correctly archived. Could compress further. +**Legacy (4 files + index):** Self-aware deprecated docs with redirects. Correctly archived. +**Plans (2 files):** Active skills design from Oct 2025. Status unclear — **verify if implemented**. +**Research (4 files):** PDF research from Oct 2025. Informed current implementation. Keep as historical record. + +### 7.2 docs/plans/video/ — 🔴 MISLEADING +All 8 files still say "Status: Planning" but **video support IS implemented** (`video_scraper.py`, `video_models.py`, `video_setup.py`, 60 tests). +**Action:** Update headers to "Implemented" and verify code alignment. Consider moving to `docs/features/`. + +### 7.3 docs/strategy/ — Mixed + +| File | Verdict | +|------|---------| +| `README.md` | Update — integration guides WERE created (18 files) but doc still says "to be created" | +| `ACTION_PLAN.md` | Archive — historical 4-week plan, partially executed | +| `ARBITRARY_LIMITS_AND_DEAD_CODE_PLAN.md` | Update — Stage 1 completed, Stages 2-3 status unknown | +| `INTEGRATION_STRATEGY.md` | Update — much executed, should reflect success | +| `KIMI_ANALYSIS_COMPARISON.md` | Archive — analysis complete, strategy adopted | +| `STAGE_1_*.md` (3 files) | Archive deeper — historical implementation records | +| `DEEPWIKI_ANALYSIS.md`, `INTEGRATION_TEMPLATES.md` | Keep — still valuable | + +### 7.4 docs/roadmap/ — ✅ APPROPRIATE (Future Design) +Intelligence System roadmap (4 files, Jan 2026). No `skill_seekers/intelligence/` package exists yet. These are **future design docs** — correctly kept as research/planning. + +### 7.5 docs/agents/ — Archive +EPUB implementation plans (Mar 2026). EPUB scraper EXISTS and is tested (107 tests). These are completed agent-driven development records — **archive deeper**. + +### 7.6 docs/superpowers/ — Verify +Scrape-count and SPA detection plan (Mar 2026). References `doc_scraper.py` line numbers. **Verify if implemented** and update status. + +--- + +## 8. Distribution & Examples + +### 8.1 distribution/ — 🔴 BROKEN EXAMPLES + +#### github-action/README.md +- Lists CLI commands: `scrape`, `github`, `pdf`, `video`, `analyze`, `unified` +- **None exist in v3.6.0** +- Users copying these workflow examples will get `error: argument command: invalid choice` + +#### claude-plugin/commands/install-skill.md +- Lists targets: `cursor`, `windsurf`, `continue`, `cline` +- **Not registered adaptors** — will fail + +#### claude-plugin/README.md & skills/skill-builder/SKILL.md +- Claims "35 MCP tools" — actual is **40** + +### 8.2 examples/ — 🔴 ALL EXAMPLES USE REMOVED COMMANDS + +**Every example README** (chroma, cline, continue-dev, cursor, haystack, langchain, llama-index, pinecone, weaviate, windsurf) references: +- `skill-seekers scrape --config ...` → should be `skill-seekers create --config ...` +- `skill-seekers github --repo ...` → should be `skill-seekers create ...` + +#### windsurf-fastapi-context/ +- References `--split-rules` and `--max-chars` flags on `skill-seekers package` +- **These flags do not exist** + +#### Other Example Issues +- Many reference `skill-seekers v2.10.0` — current is 3.6.0 +- `cursor-react-skill/README.md`: Uses `--target claude` for Cursor. Cursor uses `.cursorrules` (plain markdown); `--target markdown` would be more appropriate +- `continue-dev-universal/README.md`: References `~/.continue/config.json` for HTTP context providers. Continue.dev has shifted toward YAML config and MCP servers + +### 8.3 api/configs_repo/ — 🔴 SEVERELY STALE + +#### STATUS.md +- "Last Updated: 2024-12-21" +- "Total Configs: 90 unified format" +- "Format Version: Unified (v2.11.0+)" +- Actual: v3.6.0, submodule shows 22+ official categories + +#### Divergence Between Copies +- `api/configs_repo/README.md`: Claims **178 configs / 21 categories / v3.1.0+** +- `skill-seekers-configs/README.md` (root copy): Claims **24 configs / 7 categories** +- **These wildly diverge** + +#### CONTRIBUTING.md (configs_repo) +- References `skill-seekers scrape --config` — command removed + +### 8.4 skill-seekers-configs/ — 🔴 COUNTS DON'T ADD UP + +All TODO files claim `✅ COMPLETE` but counts are contradictory: + +| File | Claims | Actually Lists | +|------|--------|----------------| +| `TODO-ai-ml.md` | 40 configs | 34 items | +| `TODO-build-tools.md` | 9 configs | ~15 items | +| `TODO-cloud.md` | 10 configs | ~15 items | +| `TODO-databases.md` | 9 configs | ~20 items | +| `TODO-development-tools.md` | 6 configs | ~12 items | +| `TODO-devops.md` | 7 configs | ~12 items | +| `TODO-game-engines.md` | 7 configs | ~20 items | +| `TODO-testing.md` | 4 configs | ~10 items | +| `TODO-web-frameworks.md` | 12 configs | ~18 items | + +--- + +## 9. Tests, Scripts, Skills, src docs + +### 9.1 tests/mcp_integration_test.md — 🔴 BROKEN PATHS +- `python3 mcp/server.py` → should be `python -m skill_seekers.mcp.server_fastmcp` +- `pip3 install -r mcp/requirements.txt` → file doesn't exist +- `python3 cli/doc_scraper.py`, `python3 cli/package_skill.py` → pre-`src/` layout + +### 9.2 scripts/skill_header.md — 🔴 DEPRECATED FLAGS +- References `--depth surface/deep/full` → **deprecated** (use `--preset`) +- References `--ai-mode none/api/local` → **does not exist** in current CLI + +### 9.3 skills/skill-seekers/SKILL.md — âš ï¸ STALE COUNT +- Claims **35 MCP tools** — actual is **40** +- Otherwise well-structured + +### 9.4 src/skill_seekers/mcp/README.md — 🔴 INCONSISTENT & BROKEN LINKS +- Header says "34 tools", later says "40 tools" — inconsistent +- References `docs/MCP_SETUP.md`, `docs/USAGE.md`, `docs/TESTING.md` — **none exist** +- References `cli/doc_scraper.py`, `cli/estimate_pages.py`, `cli/package_skill.py` — pre-`src/` layout +- Claims "34 tests | Pass rate: 100%" and "25 tests" in different sections + +--- + +## 10. Missing Documentation + +These features exist in the codebase but are **under-documented or undocumented** in user-facing docs: + +| Feature | Code Evidence | Doc Status | +|---------|---------------|------------| +| `doctor` command | `doctor_command.py` | Not mentioned in README, getting-started, or user-guide | +| `--preset` flag | Major UX feature in `create` | Mentioned in CLI_REFERENCE but not in README or getting-started | +| `--dry-run`, `--fresh`, `--resume` | Lifecycle management | Undocumented in user guides | +| `--chunk-for-rag`, `--chunk-tokens` | RAG chunking on `package` | Undocumented in packaging guides | +| `--streaming` | Memory-efficient packaging | Undocumented | +| `--marketplace`, `--marketplace-category` | Marketplace publishing | Undocumented | +| `scan` command deep guide | `scan_command.py` | Brief mention only; no deep guide | +| `video` source type deep guide | 7 `video_*.py` files | Mentioned but not deeply documented | +| `epub` source type | `epub_scraper.py` (107 tests) | Unclear coverage in user guides | +| `browser` extra dependency | Playwright for SPA sites | Not in installation table | +| `embedding` extra | Embedding server support | Not in installation table | +| Cloud extras (`s3`, `gcs`, `azure`) | Cloud storage upload | Not in installation table | +| All 68 YAML workflow presets | `workflows/` directory | Only mentioned as "67" or "68" | + +--- + +## 11. Unneeded / Redundant Documentation + +| File(s) | Issue | Recommendation | +|---------|-------|----------------| +| `DOCKER_GUIDE.md` + `DOCKER_DEPLOYMENT.md` | Near-duplicates | Merge into one | +| `KUBERNETES_GUIDE.md` + `KUBERNETES_DEPLOYMENT.md` | Near-duplicates | Merge into one | +| `user-guide/06-troubleshooting.md` + `TROUBLESHOOTING.md` | Heavy overlap | Consolidate or differentiate scope | +| `QWEN.md` | Duplicates CLAUDE.md/AGENTS.md, less accurate | Update or remove | +| `docs/archive/historical/*` (8 files) | Historical artifacts | Compress or move to external wiki | +| `docs/strategy/STAGE_1_*.md` (3 files) | Implementation records | Merge into one summary | +| `docs/agents/*` (2 files) | Completed EPUB plans | Archive deeper | +| `skill-seekers-configs/README.md` (root copy) | Wildly diverges from submodule | Remove or sync with `api/configs_repo/` | + +--- + +## 12. Recommendations (Prioritized) + +### P0 — Critical (Fix Immediately) +1. **Update English README.md** to v3.6.0 and remove all 14 legacy CLI subcommand examples +2. **Fix all 11 broken internal links** in README.md +3. **Update or remove ALL 11 README translations** — they are 4 minor versions behind and missing major sections +4. **Update ALL example READMEs** to use `skill-seekers create` instead of removed `scrape`/`github`/`video`/`pdf`/`unified` commands +5. **Fix `distribution/github-action/README.md`** to use valid CLI commands +6. **Update `ROADMAP.md`** version header, check off completed tasks, remove obsolete v2.x release planning +7. **Rewrite `TROUBLESHOOTING.md`** for `src/` layout and modern CLI paths +8. **Fix `CONTRIBUTING.md`** setup instructions to match AGENTS.md (`pip install -e .`) + +### P1 — High (Fix Soon) +9. **Unify version stamps** to 3.6.0 across all docs (or automate via CI build step) +10. **Consolidate Docker and K8s duplicate files** +11. **Update MCP tool counts** to consistently say **40** across all docs +12. **Update `guides/MCP_SETUP.md`** to match current v3.6.0 reality +13. **Update `integrations/INTEGRATIONS.md`** from v2.10.0+ to v3.6.0 +14. **Fix `tests/mcp_integration_test.md`** paths to `server_fastmcp.py` +15. **Fix `src/skill_seekers/mcp/README.md`** broken links and inconsistent counts +16. **Update `FEATURE_MATRIX.md`** to include all 21+ packaging targets +17. **Update `scripts/skill_header.md`** to remove deprecated `--depth` and non-existent `--ai-mode` +18. **Sync or remove `skill-seekers-configs/README.md`** (root copy) + +### P2 — Medium (Quality Improvements) +19. **Update `docs/README.md`** to reflect actual directory structure (add missing directories) +20. **Update `docs/plans/video/*.md`** from "Planning" to "Implemented" +21. **Update `docs/strategy/README.md`** and `INTEGRATION_STRATEGY.md` to show executed deliverables +22. **Add missing features to README**: `--preset`, `--dry-run`, `doctor`, `sync-config`, `stream`, `update`, `multilang`, `quality` +23. **Add missing optional deps** to installation table: `browser`, `embedding`, `s3`, `gcs`, `azure`, `rag-upload` +24. **Add `scan` and `doctor` deep guides** to getting-started or user-guide +25. **Update `guides/MIGRATION_GUIDE.md`** to discuss actual v3.5→v3.6 migration + +### P3 — Low (Nice to Have) +26. **Automate version stamping** in CI to prevent future drift +27. **Archive completed agent plans** (EPUB, scrape-count) deeper or compress +28. **Add documentation update checklist** to `.github/PULL_REQUEST_TEMPLATE.md` +29. **Regenerate UML diagrams** to reflect scan feature and other recent changes +30. **Consider professional translation** of `docs/zh-CN/` or rename to `docs/extended/` if not actually Chinese + +--- + +## Appendix: Files Audited by Area + +| Area | Files Count | Key Finding | +|------|-------------|-------------| +| Root READMEs | 12 | All translations 4 versions behind | +| Core docs | 7 | ROADMAP, TROUBLESHOOTING, CONTRIBUTING severely outdated | +| docs/ main | ~86 | Version inconsistency, duplicate files, missing structure | +| docs/zh-CN/ | 21 | **0% actually translated to Chinese** | +| docs/archive/ | 18 | Appropriately archived, some could compress deeper | +| docs/plans/video/ | 8 | Misleadingly labeled "Planning" — already implemented | +| docs/strategy/ | 11 | Partially executed, needs update | +| docs/roadmap/ | 4 | Future design docs — appropriately kept | +| docs/integrations/ | 18 | Successfully created strategy deliverables | +| distribution/ | 6 | GitHub Action uses removed commands | +| examples/ | 13 | ALL use removed CLI commands | +| api/configs_repo/ | 6 | STATUS.md severely stale | +| skill-seekers-configs/ | 13 | Counts don't add up | +| .github/ | 5 | Templates functional but could reference `doctor` | +| tests/ | 1 | Broken paths to old MCP server | +| scripts/ | 1 | Deprecated flags | +| skills/ | 1 | Stale MCP tool count | +| src/ | 1 | Broken links, inconsistent counts | + +--- + +*End of Report* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2bd0aef --- /dev/null +++ b/Dockerfile @@ -0,0 +1,75 @@ +# Skill Seekers - Multi-stage Docker Build +# Optimized for production deployment with minimal image size + +# Stage 1: Builder - Install dependencies and build +FROM python:3.12-slim as builder + +WORKDIR /build + +# Install build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + g++ \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Copy dependency files +COPY pyproject.toml README.md ./ +COPY src/ src/ + +# Install dependencies and build package +RUN pip install --no-cache-dir --upgrade pip uv && \ + uv pip install --system --no-cache -e . && \ + uv pip install --system --no-cache ".[all-llms]" + +# Stage 2: Runtime - Minimal production image +FROM python:3.12-slim + +LABEL maintainer="Skill Seekers " +LABEL description="Skill Seekers - Convert documentation to AI skills" +LABEL version="2.9.0" + +# Install runtime dependencies only +RUN apt-get update && apt-get install -y --no-install-recommends \ + git \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN useradd -m -u 1000 -s /bin/bash skillseeker && \ + mkdir -p /app /data /configs /output && \ + chown -R skillseeker:skillseeker /app /data /configs /output + +WORKDIR /app + +# Copy Python packages from builder +COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages +COPY --from=builder /usr/local/bin/skill-seekers* /usr/local/bin/ + +# Copy application code +COPY --chown=skillseeker:skillseeker src/ src/ +COPY --chown=skillseeker:skillseeker configs/ configs/ +COPY --chown=skillseeker:skillseeker pyproject.toml README.md ./ + +# Switch to non-root user +USER skillseeker + +# Set environment variables +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + PATH="/home/skillseeker/.local/bin:$PATH" \ + SKILL_SEEKERS_HOME=/data \ + SKILL_SEEKERS_OUTPUT=/output + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ + CMD skill-seekers --version || exit 1 + +# Default volumes +VOLUME ["/data", "/configs", "/output"] + +# Expose MCP server port (HTTP mode) +EXPOSE 8765 + +# Default command - show help +CMD ["skill-seekers", "--help"] diff --git a/Dockerfile.mcp b/Dockerfile.mcp new file mode 100644 index 0000000..7baba55 --- /dev/null +++ b/Dockerfile.mcp @@ -0,0 +1,57 @@ +# Skill Seekers MCP Server - Docker Image +# Optimized for MCP server deployment (stdio + HTTP modes) + +FROM python:3.12-slim + +LABEL maintainer="Skill Seekers " +LABEL description="Skill Seekers MCP Server - 35 tools for AI skills generation" +LABEL version="3.3.0" + +WORKDIR /app + +# Install runtime dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + git \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN useradd -m -u 1000 -s /bin/bash mcp && \ + mkdir -p /app /data /configs /output && \ + chown -R mcp:mcp /app /data /configs /output + +# Copy application files +COPY --chown=mcp:mcp src/ src/ +COPY --chown=mcp:mcp configs/ configs/ +COPY --chown=mcp:mcp pyproject.toml README.md ./ + +# Install dependencies +RUN pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir -e ".[all-llms]" && \ + pip install --no-cache-dir mcp + +# Switch to non-root user +USER mcp + +# Environment variables +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + MCP_TRANSPORT=http \ + MCP_PORT=8765 \ + SKILL_SEEKERS_HOME=/data \ + SKILL_SEEKERS_OUTPUT=/output + +# Health check for HTTP mode +HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:${MCP_PORT}/health || exit 1 + +# Volumes +VOLUME ["/data", "/configs", "/output"] + +# Expose MCP server port (default 8765, overridden by $PORT on cloud platforms) +EXPOSE ${MCP_PORT:-8765} + +# Start MCP server in HTTP mode by default +# Uses shell form so $PORT/$MCP_PORT env vars are expanded at runtime +# Cloud platforms (Render, Railway, etc.) set $PORT automatically +CMD python -m skill_seekers.mcp.server_fastmcp --http --host 0.0.0.0 --port ${PORT:-${MCP_PORT:-8765}} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..563effa --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Yusuf Karaaslan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/QWEN.md b/QWEN.md new file mode 100644 index 0000000..0f38add --- /dev/null +++ b/QWEN.md @@ -0,0 +1,719 @@ +# QWEN.md - Skill Seekers + +Comprehensive context file for AI coding agents working with the Skill Seekers project. + +--- + +## Project Overview + +**Skill Seekers** (v3.6.0) is a Python CLI tool and MCP server that converts documentation sites, GitHub repositories, PDFs, videos, notebooks, wikis, and 17+ source types into structured AI-ready skills for 21+ LLM platforms and RAG pipelines. + +**Tagline:** "The data layer for AI systems" — sits between raw documentation and every AI system that consumes it (Claude, Gemini, LangChain, LlamaIndex, Cursor, etc.). + +### Key Capabilities + +- **18 source types:** documentation (web), GitHub, PDF, Word (.docx), EPUB, video, local codebase, Jupyter, HTML, OpenAPI, AsciiDoc, PowerPoint, RSS/Atom, man pages, Confluence, Notion, Slack/Discord chat +- **21+ export targets:** Claude, Gemini, OpenAI, DeepSeek, Qwen, Fireworks, Together, OpenRouter, IBM BoB, Kimi, MiniMax, OpenCode, LangChain, LlamaIndex, Haystack, Pinecone, Chroma, Weaviate, Qdrant, FAISS, Markdown, and more +- **Unified pipeline:** One scraping command → export to any platform without re-scraping +- **MCP server:** 40 tools for AI assistants to scrape, package, and manage skills +- **AI enhancement:** Optional Claude-powered enhancement for better skill quality + +### Project Links + +| Resource | Link | +|----------|------| +| Website | https://skillseekersweb.com/ | +| PyPI | https://pypi.org/project/skill-seekers/ | +| GitHub | https://github.com/yusufkaraaslan/Skill_Seekers | +| Configs | https://github.com/yusufkaraaslan/skill-seekers-configs | +| MCP | https://modelcontextprotocol.io | + +--- + +## Project Structure + +``` +Skill_Seekers/ +├── src/skill_seekers/ # Main package (src/ layout) +│ ├── cli/ # CLI commands (97 files) +│ │ ├── adaptors/ # Platform adaptors (Strategy pattern) +│ │ ├── arguments/ # CLI argument definitions +│ │ ├── parsers/ # Subcommand parsers +│ │ ├── storage/ # Cloud storage adaptors +│ │ ├── main.py # Unified CLI entry point +│ │ ├── source_detector.py # Auto-detects source type +│ │ ├── create_command.py # Unified `create` command +│ │ ├── config_validator.py # Config validation +│ │ ├── unified_scraper.py # Multi-source orchestrator +│ │ └── unified_skill_builder.py # Skill merging +│ ├── mcp/ # MCP server +│ │ ├── server.py # Main MCP server +│ │ ├── server_fastmcp.py # FastMCP implementation +│ │ └── tools/ # MCP tools (10 files) +│ ├── sync/ # Sync monitoring (Pydantic) +│ ├── benchmark/ # Benchmarking framework +│ ├── embedding/ # FastAPI embedding server +│ └── workflows/ # 68 YAML workflow presets +├── tests/ # ~143 test files (pytest) +├── configs/ # Preset JSON scraping configs +├── docs/ # Documentation +├── templates/ # GitHub Actions, etc. +├── scripts/ # Utility scripts +└── pyproject.toml # Project configuration +``` + +--- + +## Setup & Installation + +### Required: Install in Editable Mode + +```bash +# ALWAYS run this first — tests hard-exit if package not installed +pip install -e . + +# With dev tools (pytest, ruff, mypy, coverage) +pip install -e ".[dev]" + +# With all optional dependencies +pip install -e ".[all]" +``` + +**Note:** `tests/conftest.py` checks that `skill_seekers` is importable and calls `sys.exit(1)` if not. + +### Environment Variables + +Copy `.env.example` to `.env` and configure: + +```bash +# Required for AI enhancement +ANTHROPIC_API_KEY=sk-ant-... + +# Optional: LLM platforms +GOOGLE_API_KEY=... # Gemini +OPENAI_API_KEY=... # OpenAI/ChatGPT + +# Optional: GitHub (increases rate limits) +GITHUB_TOKEN=... + +# MCP Server config +MCP_TRANSPORT=http +MCP_PORT=8765 +``` + +--- + +## Build / Test / Lint Commands + +### Testing + +```bash +# Run ALL tests (required before commits) +pytest tests/ -v + +# Run single test file +pytest tests/test_scraper_features.py -v + +# Run single test function +pytest tests/test_scraper_features.py::test_detect_language -v + +# Run single test class method +pytest tests/test_adaptors/test_claude_adaptor.py::TestClaudeAdaptor::test_package -v + +# Skip slow/integration tests +pytest tests/ -v -m "not slow and not integration" + +# With coverage +pytest tests/ --cov=src/skill_seekers --cov-report=term +``` + +### Linting & Formatting + +```bash +# Lint (ruff) +ruff check src/ tests/ +ruff check src/ tests/ --fix + +# Format (ruff) +ruff format --check src/ tests/ +ruff format src/ tests/ + +# Type check (mypy) +mypy src/skill_seekers --show-error-codes --pretty +``` + +### Pytest Configuration + +From `pyproject.toml`: +- `addopts = "-v --tb=short --strict-markers"` +- `asyncio_mode = "auto"` +- `asyncio_default_fixture_loop_scope = "function"` + +**Test markers:** `slow`, `integration`, `e2e`, `venv`, `bootstrap`, `benchmark`, `asyncio` + +**Test count:** 123 test files (107 in `tests/`, 16 in `tests/test_adaptors/`) + +--- + +## CLI Usage + +### Core Commands + +```bash +# Unified create command (auto-detects source type) +skill-seekers create https://docs.react.dev/ +skill-seekers create facebook/react +skill-seekers create manual.pdf +skill-seekers create notebook.ipynb + +# Package for specific platform +skill-seekers package output/react --target claude # Claude AI (ZIP) +skill-seekers package output/react --target gemini # Gemini (tar.gz) +skill-seekers package output/react --target openai # OpenAI +skill-seekers package output/react --target cursor # .cursorrules + +# Multi-source unified scraping +skill-seekers create configs/react_unified.json +``` + +### All 20+ Commands + +| Command | Description | +|---------|-------------| +| `create` | Unified create (auto-detects source) | +| `scan` | AI-detect project tech stack and emit configs | +| `doctor` | Health check for dependencies and configuration | +| `scrape` | Scrape documentation website | +| `github` | Scrape GitHub repository | +| `pdf` | Extract from PDF | +| `word` | Extract from Word (.docx) | +| `epub` | Extract from EPUB | +| `video` | Extract from video | +| `jupyter` | Extract from Jupyter notebook | +| `html` | Extract from local HTML | +| `openapi` | Extract from OpenAPI spec | +| `asciidoc` | Extract from AsciiDoc | +| `pptx` | Extract from PowerPoint | +| `rss` | Extract from RSS/Atom feed | +| `manpage` | Extract from man pages | +| `confluence` | Extract from Confluence | +| `notion` | Extract from Notion | +| `chat` | Extract from Slack/Discord | +| `unified` | Multi-source scraping | +| `analyze` | Analyze local codebase | +| `enhance` | AI enhancement | +| `package` | Package skill | +| `upload` | Upload to platform | +| `install-agent` | Install to AI agent | + +--- + +## Code Style & Conventions + +### Formatting Rules (ruff) + +- **Line length:** 100 characters +- **Target Python:** 3.10+ +- **Enabled lint rules:** E, W, F, I, B, C4, UP, ARG, SIM +- **Ignored rules:** E501, F541, ARG002, B007, I001, SIM114 + +### Naming Conventions + +| Type | Convention | Example | +|------|------------|---------| +| Files | `snake_case.py` | `source_detector.py` | +| Classes | `PascalCase` | `SkillAdaptor`, `ClaudeAdaptor` | +| Functions | `snake_case` | `get_adaptor()`, `detect_language()` | +| Constants | `UPPER_CASE` | `ADAPTORS`, `DEFAULT_CHUNK_TOKENS` | +| Private | `_prefix` | `_read_existing_content()` | + +### Type Hints + +- Gradual typing with modern syntax +- Use `str | None` not `Optional[str]` +- Use `list[str]` not `List[str]` +- MyPy config: `disallow_untyped_defs = false`, `check_untyped_defs = true` + +### Docstrings + +- Module-level docstring on every file +- Google-style for public functions/classes +- Include `Args:`, `Returns:`, `Raises:` sections + +### Error Handling + +```python +# Use specific exceptions +raise ValueError("Invalid config: missing 'sources'") +raise RuntimeError("Scraping failed after 3 retries") + +# Chain exceptions +try: + ... +except Exception as e: + raise RuntimeError(f"Failed to process {source}") from e + +# Guard optional imports +try: + from .claude import ClaudeAdaptor +except ImportError: + ClaudeAdaptor = None +``` + +### Import Patterns + +```python +# Standard library → third-party → first-party +import os +import sys +from pathlib import Path + +import requests +from beautifulsoup4 import BeautifulSoup + +from skill_seekers.cli.adaptors import ClaudeAdaptor +from skill_seekers.cli.source_detector import SourceDetector + +# Guard optional imports +try: + from .gemini import GeminiAdaptor +except ImportError: + GeminiAdaptor = None + +# Re-exports (use noqa) +from .base import SkillAdaptor, SkillMetadata # noqa: F401 +``` + +--- + +## Key Architectural Patterns + +### 1. Adaptor (Strategy) Pattern + +All platform logic in `cli/adaptors/`. Each adaptor inherits `SkillAdaptor`: + +```python +from skill_seekers.cli.adaptors.base import SkillAdaptor, SkillMetadata + +class ClaudeAdaptor(SkillAdaptor): + PLATFORM = "claude" + PLATFORM_NAME = "Claude AI (Anthropic)" + + def format_skill_md(self, skill_dir: Path, metadata: SkillMetadata) -> str: + """Format SKILL.md with YAML frontmatter""" + ... + + def package(self, skill_dir: Path, output_path: Path, ...) -> Path: + """Package as ZIP with SKILL.md, references/, scripts/""" + ... + + def upload(self, package_path: Path, api_key: str) -> str: + """Upload to Claude API""" + ... +``` + +**Registered in:** `cli/adaptors/__init__.py` → `ADAPTORS` dict + +### 2. Scraper Pattern + +Each source type has 3 files: + +``` +cli/_scraper.py # Main scraper class + main() +arguments/.py # CLI argument definitions +parsers/_parser.py # ArgumentParser setup +``` + +**Example:** `pdf_scraper.py` → `PdfToSkillConverter` class + +**Registered in:** +- `parsers/__init__.py` → `PARSERS` list +- `main.py` → `COMMAND_MODULES` dict +- `config_validator.py` → `VALID_SOURCE_TYPES` set + +### 3. Unified Pipeline + +**`unified_scraper.py`** orchestrates multi-source scraping: + +```python +class UnifiedScraper: + def __init__(self, config_path: str, merge_mode: str = "rule-based"): + self.config = load_config(config_path) + self.scraped_data = { + "documentation": [], + "github": [], + "pdf": [], + # ... 18 source types + } + + def run(self) -> Path: + # 1. Scrape all sources + for source in self.config["sources"]: + self._scrape_source(source) + + # 2. Merge (pairwise synthesis or generic) + merged = self._merge_sources() + + # 3. Build unified skill + return self._build_skill(merged) +``` + +**`unified_skill_builder.py`** uses: +- **Pairwise synthesis** for docs+github+pdf combos +- **`_generic_merge()`** for other combinations + +### 4. Source Detection + +**`source_detector.py`** auto-detects from user input: + +```python +class SourceDetector: + @classmethod + def detect(cls, source: str) -> SourceInfo: + # Check file extensions + if source.endswith(".pdf"): + return cls._detect_pdf(source) + if source.endswith(".ipynb"): + return cls._detect_jupyter(source) + + # Check GitHub patterns + if cls.GITHUB_REPO_PATTERN.match(source): + return cls._detect_github(source) + + # Check URLs + parsed = urlparse(source) + if parsed.scheme in ("http", "https"): + return cls._detect_web(source) + + # Check local directories + if os.path.isdir(source): + return cls._detect_local(source) +``` + +### 5. MCP Tools + +**`mcp/tools/`** grouped by category: + +- `scrape_tools.py` — Scraping tools +- `package_tools.py` — Packaging tools +- `enhance_tools.py` — Enhancement tools +- `install_tools.py` — Installation tools +- `vector_db_tools.py` — Vector DB tools +- `workflow_tools.py` — Workflow tools + +**`scrape_generic_tool`** handles all new source types dynamically. + +--- + +## Configuration + +### Unified Config Format + +```json +{ + "name": "react-skill", + "description": "React documentation skill", + "sources": [ + { + "type": "documentation", + "url": "https://react.dev/", + "config": { + "max_pages": 100, + "include_patterns": ["**/*.md"], + "exclude_patterns": ["**/blog/**"] + } + }, + { + "type": "github", + "repo": "facebook/react", + "config": { + "include": ["src/", "packages/"], + "exclude": ["**/*.test.tsx"] + } + } + ], + "merge_mode": "rule-based", + "output": "output/react" +} +``` + +### Valid Source Types + +```python +VALID_SOURCE_TYPES = { + "documentation", "github", "pdf", "local", "word", + "video", "epub", "jupyter", "html", "openapi", + "asciidoc", "pptx", "confluence", "notion", "rss", + "manpage", "chat" +} +``` + +### Merge Modes + +- **`rule-based`** — Deterministic merging with conflict resolution rules +- **`claude-enhanced`** — AI-powered merging (requires `ANTHROPIC_API_KEY`) + +--- + +## Git Workflow + +### Branch Structure + +``` +main (production, protected) + ↑ + │ (maintainer merges only) + │ +development (integration, default PR target) + ↑ + │ (all contributor PRs) + │ +feature branches +``` + +### PR Process + +1. Fork and clone +2. Create feature branch from `development` +3. Make changes, commit, push +4. Create PR targeting **`development`** (NOT `main`) +5. Wait for tests + review + +```bash +git checkout development +git pull upstream development +git checkout -b my-feature +# ... make changes +git commit -m "Add feature X" +git push origin my-feature +# Create PR → development +``` + +--- + +## Testing Practices + +### Test Organization + +``` +tests/ +├── conftest.py # Fixtures, setup +├── test_adaptors/ # Adaptor tests (16 files) +├── test_scraper_features.py # Core scraper tests +├── test_source_detector.py # Source detection tests +├── test_config_validation.py # Config validation +├── test_mcp_*.py # MCP tests +├── test_*_e2e.py # End-to-end tests +└── fixtures/ # Test fixtures +``` + +### Test Patterns + +```python +import pytest +from skill_seekers.cli.source_detector import SourceDetector + +class TestSourceDetector: + """Test source detection""" + + def test_detect_pdf(self, tmp_path): + """Test PDF detection""" + pdf_file = tmp_path / "test.pdf" + pdf_file.touch() + + result = SourceDetector.detect(str(pdf_file)) + assert result.type == "pdf" + + @pytest.mark.asyncio + async def test_async_scraping(self): + """Test async scraping""" + # asyncio_mode = "auto" — decorator often implicit + ... + + @pytest.mark.slow + def test_slow_operation(self): + """Mark slow tests for optional skipping""" + ... + + @pytest.mark.integration + def test_external_api(self): + """Mark integration tests requiring external services""" + ... +``` + +### Fixtures + +```python +# tests/conftest.py +import pytest +from pathlib import Path + +@pytest.fixture +def sample_config(tmp_path): + """Create sample config file""" + config = { + "name": "test-skill", + "sources": [{"type": "documentation", "url": "https://example.com"}] + } + config_file = tmp_path / "config.json" + config_file.write_text(json.dumps(config)) + return str(config_file) + +@pytest.fixture +def mock_response(): + """Mock HTTP response""" + class MockResponse: + status_code = 200 + text = "Test" + return MockResponse() +``` + +--- + +## Development Guidelines + +### Before Commits + +```bash +# 1. Lint +ruff check src/ tests/ +ruff format --check src/ tests/ + +# 2. Type check +mypy src/skill_seekers + +# 3. Test (ALL must pass) +pytest tests/ -v +``` + +### Adding New Source Types + +1. Create scraper: `cli/_scraper.py` with `ToSkillConverter` class +2. Create arguments: `arguments/.py` +3. Create parser: `parsers/_parser.py` +4. Register in `parsers/__init__.py` → `PARSERS` +5. Register in `main.py` → `COMMAND_MODULES` +6. Add to `config_validator.py` → `VALID_SOURCE_TYPES` +7. Add detection to `source_detector.py` +8. Add to `unified_scraper.py` → `scraped_data` dict +9. Write tests in `tests/test__scraper.py` + +### Adding New Platform Adaptors + +1. Create adaptor: `cli/adaptors/.py` inheriting `SkillAdaptor` +2. Implement: `format_skill_md()`, `package()`, `upload()` +3. Register in `cli/adaptors/__init__.py` → `ADAPTORS` dict +4. Add to `package_skill.py` → target mapping +5. Write tests in `tests/test_adaptors/test_.py` + +### Adding New MCP Tools + +1. Create tool in `mcp/tools/_tools.py` +2. Use `@mcp.tool()` decorator +3. Register in `mcp/server.py` or `mcp/server_fastmcp.py` +4. Write tests in `tests/test_mcp_*.py` + +--- + +## Common Issues & Solutions + +### Tests Fail with Import Error + +**Problem:** `ModuleNotFoundError: No module named 'skill_seekers'` + +**Solution:** Install in editable mode first: +```bash +pip install -e . +``` + +### Optional Dependency Missing + +**Problem:** `ImportError: No module named 'mammoth'` + +**Solution:** Install optional dependency: +```bash +pip install "skill-seekers[docx]" +# or +pip install "skill-seekers[all]" +``` + +### Rate Limiting + +**Problem:** GitHub API rate limited (60/hour anonymous) + +**Solution:** Set `GITHUB_TOKEN` in `.env`: +```bash +GITHUB_TOKEN=ghp_... +``` + +### Async Scraping Issues + +**Problem:** Event loop errors in async tests + +**Solution:** Use `@pytest.mark.asyncio` decorator (auto mode enabled) + +--- + +## Key Files Reference + +| File | Purpose | +|------|---------| +| `pyproject.toml` | Project config, dependencies, tool settings | +| `src/skill_seekers/cli/main.py` | Unified CLI entry point | +| `src/skill_seekers/cli/source_detector.py` | Auto-detect source types | +| `src/skill_seekers/cli/config_validator.py` | Config validation | +| `src/skill_seekers/cli/unified_scraper.py` | Multi-source orchestrator | +| `src/skill_seekers/cli/adaptors/base.py` | Adaptor interface | +| `src/skill_seekers/cli/adaptors/__init__.py` | Adaptor registry | +| `src/skill_seekers/mcp/server.py` | MCP server | +| `tests/conftest.py` | Test fixtures | +| `AGENTS.md` | Quick reference for AI agents | + +--- + +## Version & Release + +- **Current version:** 3.3.0 (from `pyproject.toml`) +- **Version source:** `src/skill_seekers/_version.py` reads from `pyproject.toml` +- **Release process:** Tag → GitHub Actions → PyPI publish +- **Changelog:** `CHANGELOG.md` (Keep a Changelog format) + +--- + +## Related Repositories + +| Repository | Purpose | +|------------|---------| +| [Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers) | Core CLI & MCP (this repo) | +| [skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb) | Website & docs | +| [skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs) | Community configs | +| [skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action) | GitHub Action | +| [skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin) | Claude Code plugin | +| [homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers) | Homebrew tap | + +--- + +## Quick Commands Cheat Sheet + +```bash +# Setup +pip install -e ".[dev]" +cp .env.example .env +# Edit .env with API keys + +# Development +ruff check src/ tests/ --fix +ruff format src/ tests/ +mypy src/skill_seekers +pytest tests/ -v + +# Test subsets +pytest tests/test_adaptors/ -v +pytest tests/ -m "not slow and not integration" +pytest tests/ --cov=src/skill_seekers + +# Usage +skill-seekers create https://docs.python.org/ +skill-seekers package output/python --target claude +skill-seekers create configs/react_unified.json +``` diff --git a/README.ar.md b/README.ar.md new file mode 100644 index 0000000..483a107 --- /dev/null +++ b/README.ar.md @@ -0,0 +1,1374 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | العربية | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **إشعار الترجمة الآلية** +> +> تمت ترجمة هذا المستند تلقائيًا بواسطة الذكاء الاصطناعي. على الرغم من حرصنا على جودة الترجمة، قد تتضمن تعبيرات غير دقيقة. + +[![الإصدار](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![الرخصة: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![تكامل MCP](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![الاختبارات](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![لوحة المشروع](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![إصدار PyPI](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - التنزيلات](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - إصدار Python](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![الموقع الرسمي](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![متابعة على Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![نجوم GitHub](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 طبقة البيانات لأنظمة الذكاء الاصطناعي.** يحوّل Skill Seekers مواقع التوثيق ومستودعات GitHub ÙˆÙ…Ù„ÙØ§Øª PDF والÙيديوهات ÙˆØ¯ÙØ§ØªØ± Jupyter والويكي Ùˆ18 نوعًا من المصادر إلى أصول معرÙية منظمة — جاهزة لتشغيل مهارات الذكاء الاصطناعي (Claude ÙˆGemini ÙˆOpenAI) وخطوط أنابيب RAG (مثل LangChain ÙˆLlamaIndex ÙˆPinecone) ومساعدات البرمجة بالذكاء الاصطناعي (مثل Cursor ÙˆWindsurf ÙˆCline) ÙÙŠ دقائق بدلاً من ساعات. + +> 🌠**[زيارة SkillSeekersWeb.com](https://skillseekersweb.com/)** - ØªØµÙØ­ أكثر من 24 إعدادًا مسبقًا، وشارك إعداداتك، واطّلع على التوثيق الكامل! + +> 📋 **[عرض خارطة الطريق والمهام](https://github.com/users/yusufkaraaslan/projects/2)** - 134 مهمة عبر 10 ÙØ¦Ø§ØªØŒ اختر أيًا منها للمساهمة! + +## 🌠المنظومة + +Skill Seekers هو مشروع متعدد المستودعات. إليك أين يوجد كل شيء: + +| المستودع | الوص٠| الروابط | +|----------|-------|---------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | CLI الأساسي وخادم MCP (هذا المستودع) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | الموقع والتوثيق | [الموقع](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | مستودع إعدادات المجتمع | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action لـ CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Ø¥Ø¶Ø§ÙØ© Claude Code | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap لـ macOS | | + +> **تريد المساهمة؟** مستودعات الموقع والإعدادات هي نقاط بداية رائعة للمساهمين الجدد! + +## 🧠 طبقة البيانات لأنظمة الذكاء الاصطناعي + +**Skill Seekers هو طبقة المعالجة المسبقة العامة** التي تقع بين التوثيق الخام وجميع أنظمة الذكاء الاصطناعي التي تستهلكه. سواء كنت تبني مهارات Claude أو خط أنابيب RAG باستخدام LangChain أو مل٠`.cursorrules` لـ Cursor — ÙØ¥Ù† تحضير البيانات متطابق. تقوم بذلك مرة واحدة وتصدّر إلى جميع المنصات Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©. + +```bash +# أمر واحد → أصل معرÙÙŠ منظم +skill-seekers create https://docs.react.dev/ +# أو: skill-seekers create facebook/react +# أو: skill-seekers create ./my-project + +# التصدير إلى أي نظام ذكاء اصطناعي +skill-seekers package output/react --target claude # → مهارة Claude AI (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → مجلد مهارة IBM Bob +``` + +### المخرجات التي يتم بناؤها + +| المخرج | الهد٠| ما يشغّله | +|--------|-------|----------| +| **مهارة Claude** (ZIP + YAML) | `--target claude` | Claude Code ÙˆClaude API | +| **مهارة Gemini** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o والمساعدات المخصصة | +| **LangChain Documents** | `--target langchain` | سلاسل الأسئلة والأجوبة والوكلاء والمسترجعات | +| **LlamaIndex TextNodes** | `--target llama-index` | محركات الاستعلام ومحركات المحادثة | +| **Haystack Documents** | `--target haystack` | خطوط أنابيب RAG للمؤسسات | +| **Pinecone جاهز** (Markdown) | `--target markdown` | Ø±ÙØ¹ المتجهات | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | قواعد بيانات المتجهات المحلية | +| **مهارة IBM Bob** (مجلد) | `--target ibm-bob` | مهارات IBM Bob على مستوى المشروع/العام | +| **Cursor** `.cursorrules` | `--target markdown` → نسخ SKILL.md | مل٠`.cursorrules` ÙÙŠ Cursor IDE | +| **Windsurf / Cline / Continue** | `--target claude` → نسخ | VS Code ÙˆIntelliJ ÙˆVim | + +### لماذا هذا مهم + +- âš¡ **أسرع بنسبة 99%** — أيام من التحضير اليدوي → 15–45 دقيقة +- 🎯 **جودة مهارات الذكاء الاصطناعي** — Ù…Ù„ÙØ§Øª SKILL.md بأكثر من 500 سطر تتضمن أمثلة وأنماط وأدلة +- 📊 **تقسيم جاهز لـ RAG** — تقسيم ذكي ÙŠØ­Ø§ÙØ¸ على كتل الكود ويصون السياق +- 🎬 **الÙيديو** — استخراج الكود والنصوص ÙˆØ§Ù„Ù…Ø¹Ø±ÙØ© المنظمة من يوتيوب والÙيديوهات المحلية +- 🔄 **متعدد المصادر** — دمج 18 نوعًا من المصادر (توثيق ÙˆGitHub ÙˆPDF ÙˆÙيديو ÙˆØ¯ÙØ§ØªØ± Jupyter وويكي والمزيد) ÙÙŠ أصل معرÙÙŠ واحد +- 🌠**تحضير واحد لكل الأهداÙ** — تصدير Ù†ÙØ³ الأصل إلى 21 منصة دون إعادة الاستخراج +- ✅ **Ù…ÙØ®ØªØ¨Ø± بإحكام** — أكثر من 3,700 اختبارًا Ùˆ24 إعدادًا مسبقًا للأطر البرمجية، جاهز للإنتاج + +## 🚀 البدء السريع (3 أوامر) + +```bash +# 1. التثبيت +pip install skill-seekers + +# 2. إنشاء مهارة من أي مصدر +skill-seekers create https://docs.django.com/ + +# 3. التعبئة لمنصة الذكاء الاصطناعي الخاصة بك +skill-seekers package output/django --target claude +``` + +**هذا كل شيء!** أصبح لديك الآن `output/django-claude.zip` جاهزًا للاستخدام. + +```bash +# استخدام وكيل ذكاء اصطناعي مختل٠للتعزيز (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ Ù…Ø³Ø­ المشروع المدعوم بالذكاء الاصطناعي (جديد) + +وجّه أمر `scan` إلى أي مشروع وسيقرأ وكيل الذكاء الاصطناعي Ù…Ù„ÙØ§Øª التعري٠وREADME ÙˆDockerfile/CI وعينات من استيرادات الكود المصدري — ثم ÙŠÙØµØ¯Ø± إعدادًا واحدًا لكل إطار برمجي Ù…ÙƒØªØ´Ù Ø¨Ø§Ù„Ø¥Ø¶Ø§ÙØ© إلى `-codebase.json` لكودك الخاص. يثبّت الإصدار المكتش٠بحيث يبلّغ إعادة التشغيل عن ترقيات الإصدار: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# ثم ابن٠أيًا منها +skill-seekers create ./configs/scanned/react.json +``` + +إذا لم يكن للاكتشا٠إعداد مسبق موجود، يولّد الذكاء الاصطناعي إعدادًا جديدًا؛ وعند الخروج يمكنك اختياريًا نشره ÙÙŠ [سجل المجتمع](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### مصادر أخرى (18 نوعًا مدعومًا) + +```bash +# مستودع GitHub +skill-seekers create facebook/react + +# مشروع محلي +skill-seekers create ./my-project + +# مستند PDF +skill-seekers create manual.pdf + +# مستند Word +skill-seekers create report.docx + +# كتاب إلكتروني EPUB +skill-seekers create book.epub + +# Ø¯ÙØªØ± Jupyter +skill-seekers create notebook.ipynb + +# Ù…ÙˆØ§ØµÙØ§Øª OpenAPI +skill-seekers create openapi.yaml + +# عرض PowerPoint +skill-seekers create presentation.pptx + +# مستند AsciiDoc +skill-seekers create guide.adoc + +# مل٠HTML محلي (ÙŠÙكتش٠تلقائيًا حسب الامتداد) +skill-seekers create page.html + +# مجلد كامل من Ù…Ù„ÙØ§Øª HTML (ÙŠÙكتش٠تلقائيًا للمجلدات التي يغلب عليها HTML) +skill-seekers create ./mirror_output/site/ + +# ÙØ±Ø¶ وضع HTML على مجلد مختلط/مليء بالكود +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# خلاصة RSS/Atom +skill-seekers create feed.rss + +# ØµÙØ­Ø© Man +skill-seekers create curl.1 + +# الÙيديو (YouTube أو Vimeo أو مل٠محلي — يتطلب skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# أول مرة؟ تثبيت تلقائي للمكونات المرئية المتواÙقة مع GPU: +skill-seekers create --setup + +# ويكي Confluence +skill-seekers create --space-key TEAM --name wiki + +# ØµÙØ­Ø§Øª Notion +skill-seekers create --database-id ... --name docs + +# تصدير محادثات Slack/Discord +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### التصدير إلى كل مكان + +```bash +# التعبئة لعدة منصات +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## ما هو Skill SeekersØŸ + +Skill Seekers هو **طبقة البيانات لأنظمة الذكاء الاصطناعي** التي تحوّل 18 نوعًا من المصادر — مواقع التوثيق ومستودعات GitHub ÙˆÙ…Ù„ÙØ§Øª PDF والÙيديوهات ÙˆØ¯ÙØ§ØªØ± Jupyter ومستندات Word/EPUB/AsciiDoc ÙˆÙ…ÙˆØ§ØµÙØ§Øª OpenAPI وعروض PowerPoint وخلاصات RSS ÙˆØµÙØ­Ø§Øª Man وويكي Confluence ÙˆØµÙØ­Ø§Øª Notion ومحادثات Slack/Discord والمزيد — إلى أصول معرÙية منظمة لكل منصة ذكاء اصطناعي: + +| حالة الاستخدام | ما تحصل عليه | أمثلة | +|---------------|-------------|-------| +| **مهارات الذكاء الاصطناعي** | مل٠SKILL.md شامل + مراجع | Claude Code ÙˆGemini ÙˆGPT | +| **خطوط أنابيب RAG** | مستندات مقسمة مع بيانات وصÙية غنية | LangChain ÙˆLlamaIndex ÙˆHaystack | +| **قواعد بيانات المتجهات** | بيانات Ù…Ùنسقة مسبقًا جاهزة Ù„Ù„Ø±ÙØ¹ | Pinecone ÙˆChroma ÙˆWeaviate ÙˆFAISS | +| **مساعدات البرمجة بالذكاء الاصطناعي** | Ù…Ù„ÙØ§Øª سياق يقرأها الذكاء الاصطناعي ÙÙŠ بيئة التطوير تلقائيًا | Cursor ÙˆWindsurf ÙˆCline ÙˆContinue.dev | + +## 📚 التوثيق + +| أريد أن... | اقرأ هذا | +|--------------|-----------| +| **أبدأ بسرعة** | [البدء السريع](docs/getting-started/02-quick-start.md) - 3 أوامر لأول مهارة | +| **Ø£Ùهم Ø§Ù„Ù…ÙØ§Ù‡ÙŠÙ…** | [Ø§Ù„Ù…ÙØ§Ù‡ÙŠÙ… الأساسية](docs/user-guide/01-core-concepts.md) - كي٠يعمل | +| **أستخرج المصادر** | [دليل الاستخراج](docs/user-guide/02-scraping.md) - جميع أنواع المصادر | +| **أعزز المهارات** | [دليل التعزيز](docs/user-guide/03-enhancement.md) - التعزيز بالذكاء الاصطناعي | +| **أصدّر المهارات** | [دليل التعبئة](docs/user-guide/04-packaging.md) - التصدير للمنصات | +| **أبحث عن الأوامر** | [مرجع CLI](docs/reference/CLI_REFERENCE.md) - جميع الأوامر العشرين | +| **أقوم بالإعداد** | [تنسيق الإعداد](docs/reference/CONFIG_FORMAT.md) - Ù…ÙˆØ§ØµÙØ§Øª JSON | +| **أحل المشاكل** | [استكشا٠الأخطاء](docs/user-guide/06-troubleshooting.md) - المشاكل الشائعة | + +**التوثيق الكامل:** [docs/README.md](docs/README.md) + +بدلاً من قضاء أيام ÙÙŠ المعالجة اليدوية المسبقة، يقوم Skill Seekers بـ: + +1. **الاستيعاب** — التوثيق ومستودعات GitHub وقواعد الكود المحلية ÙˆÙ…Ù„ÙØ§Øª PDF والÙيديوهات ÙˆØ¯ÙØ§ØªØ± Jupyter والويكي وأكثر من 10 أنواع أخرى من المصادر +2. **التحليل** — تحليل AST العميق واكتشا٠الأنماط واستخراج واجهات API +3. **الهيكلة** — Ù…Ù„ÙØ§Øª مرجعية Ù…ÙØµÙ†ÙØ© مع بيانات وصÙية +4. **التعزيز** — توليد SKILL.md مدعوم بالذكاء الاصطناعي (Claude أو Gemini أو محلي) +5. **التصدير** — 16 تنسيقًا خاصًا بكل منصة من أصل واحد + +## لماذا تستخدم Skill SeekersØŸ + +### لبنّائي مهارات الذكاء الاصطناعي (Claude ÙˆGemini ÙˆOpenAI) + +- 🎯 **مهارات بجودة إنتاجية** — Ù…Ù„ÙØ§Øª SKILL.md بأكثر من 500 سطر تتضمن أمثلة كود وأنماط وأدلة +- 🔄 **سير عمل التعزيز** — تطبيق `security-focus` أو `architecture-comprehensive` أو إعدادات YAML مخصصة +- 🎮 **أي مجال** — محركات الألعاب (Godot ÙˆUnity) والأطر البرمجية (React ÙˆDjango) والأدوات الداخلية +- 🔧 **Ø§Ù„ÙØ±Ù‚** — دمج التوثيق الداخلي + الكود ÙÙŠ مصدر حقيقة واحد +- 📚 **جودة عالية** — معززة بالذكاء الاصطناعي مع أمثلة ومرجع سريع ودليل تنقل + +### لبنّائي RAG ومهندسي الذكاء الاصطناعي + +- 🤖 **بيانات جاهزة لـ RAG** — مستندات LangChain `Documents` Ù…Ùقسمة مسبقًا ÙˆLlamaIndex `TextNodes` ÙˆHaystack `Documents` +- 🚀 **أسرع بنسبة 99%** — أيام من المعالجة المسبقة → 15–45 دقيقة +- 📊 **بيانات وصÙية ذكية** — ÙØ¦Ø§Øª ومصادر وأنواع → دقة استرجاع أعلى +- 🔄 **متعدد المصادر** — دمج التوثيق + GitHub + PDF + الÙيديو ÙÙŠ خط أنابيب واحد +- 🌠**مستقل عن المنصة** — التصدير إلى أي قاعدة بيانات متجهات أو إطار عمل دون إعادة الاستخراج + +### لمستخدمي مساعدات البرمجة بالذكاء الاصطناعي + +- 💻 **Cursor / Windsurf / Cline** — توليد `.cursorrules` / `.windsurfrules` / `.clinerules` تلقائيًا +- 🎯 **سياق دائم** — الذكاء الاصطناعي "يعرÙ" أطرك البرمجية دون تكرار التوجيهات +- 📚 **محدّث دائمًا** — تحديث السياق ÙÙŠ دقائق عند تغير التوثيق + +## الميزات الرئيسية + +### 🌠استخراج التوثيق +- ✅ **اكتشا٠ذكي لمواقع SPA** - اكتشا٠ثلاثي الطبقات لمواقع JavaScript SPA (sitemap.xml → llms.txt → عرض Ø§Ù„Ù…ØªØµÙØ­ بدون واجهة) +- ✅ **دعم llms.txt** - اكتشا٠واستخدام Ù…Ù„ÙØ§Øª التوثيق الجاهزة لنماذج اللغة تلقائيًا (أسرع 10 مرات) +- ✅ **Ù…ÙØ³ØªØ®Ø±Ø¬ عام** - يعمل مع أي موقع توثيق +- ✅ **تصني٠ذكي** - تنظيم المحتوى حسب الموضوع تلقائيًا +- ✅ **اكتشا٠لغة الكود** - التعر٠على Python ÙˆJavaScript ÙˆC++ ÙˆGDScript وغيرها +- ✅ **أكثر من 24 إعدادًا مسبقًا جاهزًا** - Godot ÙˆReact ÙˆVue ÙˆDjango ÙˆFastAPI والمزيد + +### 📄 دعم PDF +- ✅ **استخراج PDF الأساسي** - استخراج النصوص والكود والصور من Ù…Ù„ÙØ§Øª PDF +- ✅ **OCR للمستندات الممسوحة** - استخراج النص من المستندات الممسوحة ضوئيًا +- ✅ **Ù…Ù„ÙØ§Øª PDF المحمية بكلمة مرور** - التعامل مع Ù…Ù„ÙØ§Øª PDF Ø§Ù„Ù…Ø´ÙØ±Ø© +- ✅ **استخراج الجداول** - استخراج الجداول المعقدة +- ✅ **المعالجة المتوازية** - أسرع 3 مرات Ù„Ù…Ù„ÙØ§Øª PDF الكبيرة +- ✅ **التخزين المؤقت الذكي** - أسرع 50% عند إعادة التشغيل + +### 🎬 استخراج الÙيديو +- ✅ **YouTube والÙيديوهات المحلية** - استخراج النصوص والكود ÙˆØ§Ù„Ù…Ø¹Ø±ÙØ© المنظمة من الÙيديوهات +- ✅ **تحليل الإطارات المرئية** - استخراج OCR من محررات الكود والطرÙيات والشرائح والمخططات +- ✅ **اكتشا٠GPU تلقائي** - تثبيت إصدار PyTorch الصحيح تلقائيًا (CUDA/ROCm/MPS/CPU) +- ✅ **تعزيز بالذكاء الاصطناعي** - مرحلتان: تنظي٠مخرجات OCR + توليد SKILL.md مصقول +- ✅ **قص زمني** - استخراج أقسام محددة باستخدام `--start-time` Ùˆ`--end-time` +- ✅ **دعم قوائم التشغيل** - معالجة جميع Ùيديوهات قائمة تشغيل YouTube Ø¯ÙØ¹Ø© واحدة +- ✅ **احتياطي Vision API** - استخدام Claude Vision لإطارات OCR Ù…Ù†Ø®ÙØ¶Ø© الثقة + +### 🙠تحليل مستودعات GitHub +- ✅ **تحليل كود عميق** - تحليل AST لـ Python ÙˆJavaScript ÙˆTypeScript ÙˆJava ÙˆC++ ÙˆGo +- ✅ **استخراج واجهات API** - الدوال والأصنا٠والتوابع مع المعاملات والأنواع +- ✅ **بيانات المستودع الوصÙية** - README وشجرة Ø§Ù„Ù…Ù„ÙØ§Øª وتوزيع اللغات والنجوم/Ø§Ù„ØªÙØ±ÙŠØ¹Ø§Øª +- ✅ **GitHub Issues ÙˆPR** - جلب المشكلات Ø§Ù„Ù…ÙØªÙˆØ­Ø©/المغلقة مع Ø§Ù„ØªØµÙ†ÙŠÙØ§Øª والمراحل +- ✅ **CHANGELOG والإصدارات** - استخراج سجل الإصدارات تلقائيًا +- ✅ **اكتشا٠التعارضات** - مقارنة واجهات API الموثقة مع التنÙيذ Ø§Ù„ÙØ¹Ù„ÙŠ للكود +- ✅ **تكامل MCP** - لغة طبيعية: "استخرج مستودع GitHub facebook/react" + +### 🔄 الاستخراج الموحد متعدد المصادر +- ✅ **دمج مصادر متعددة** - خلط التوثيق + GitHub + PDF ÙÙŠ مهارة واحدة +- ✅ **اكتشا٠التعارضات** - اكتشا٠التناقضات بين التوثيق والكود تلقائيًا +- ✅ **دمج ذكي** - حل التعارضات قائم على القواعد أو مدعوم بالذكاء الاصطناعي +- ✅ **تقارير Ø´ÙØ§ÙØ©** - مقارنة جنبًا إلى جنب مع تحذيرات âš ï¸ +- ✅ **تحليل ÙØ¬ÙˆØ§Øª التوثيق** - تحديد التوثيق القديم والميزات غير الموثقة +- ✅ **مصدر حقيقة واحد** - مهارة واحدة تعرض كلاً من النية (التوثيق) والواقع (الكود) +- ✅ **التواÙÙ‚ مع الإصدارات السابقة** - إعدادات المصدر الواحد القديمة تعمل بشكل طبيعي + +### 🤖 دعم منصات LLM المتعددة +- ✅ **12 منصة LLM** - Claude AI ÙˆGoogle Gemini ÙˆOpenAI ChatGPT ÙˆMiniMax AI ÙˆMarkdown العام ÙˆOpenCode ÙˆKimi (Moonshot AI) ÙˆDeepSeek AI ÙˆQwen (Alibaba) ÙˆOpenRouter ÙˆTogether AI ÙˆFireworks AI +- ✅ **استخراج عام** - Ù†ÙØ³ التوثيق يعمل لجميع المنصات +- ✅ **تعبئة خاصة بكل منصة** - تنسيقات محسّنة لكل نموذج لغوي +- ✅ **تصدير بأمر واحد** - علامة `--target` لاختيار المنصة +- ✅ **تبعيات اختيارية** - تثبيت ما تحتاجه Ùقط +- ✅ **تواÙÙ‚ 100% مع الإصدارات السابقة** - سير عمل Claude الحالي لا يتغير + +| المنصة | التنسيق | Ø§Ù„Ø±ÙØ¹ | التعزيز | API Key | نقطة نهاية مخصصة | +|--------|---------|-------|---------|---------|-----------------| +| **Claude AI** | ZIP + YAML | ✅ تلقائي | ✅ نعم | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ تلقائي | ✅ نعم | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ تلقائي | ✅ نعم | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ تلقائي | ✅ نعم | MINIMAX_API_KEY | - | +| **Markdown العام** | ZIP | ⌠يدوي | ⌠لا | - | - | + +```bash +# Claude (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ - لا حاجة لتغييرات!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Markdown العام (تصدير عام) +skill-seekers package output/react/ --target markdown +# استخدم Ù…Ù„ÙØ§Øª Markdown مباشرة ÙÙŠ أي نموذج لغوي +``` + +
+🔧 استخدم مزوّد الذكاء الاصطناعي الخاص بك (نقاط نهاية متواÙقة مع OpenAI + اشتراكات، بدون رصيد Anthropic) + +خطوة **التعزيز** الاختيارية بالذكاء الاصطناعي (المستخدمة ÙÙŠ `create` Ùˆ`scan` Ùˆ`enhance`) **لا** تتطلب Ù…ÙØªØ§Ø­ Anthropic. لديك ثلاث طرق لتشغيلها: + +**1. استخدم اشتراكًا ØªØ¯ÙØ¹ ثمنه Ø¨Ø§Ù„ÙØ¹Ù„ — بدون رصيد API على الإطلاق (وضع الوكيل المحلي LOCAL)** + +يمكن لـ Skill Seekers استدعاء واجهة سطر أوامر لوكيل برمجة سجّلت الدخول إليه Ø¨Ø§Ù„ÙØ¹Ù„ØŒ بحيث يعمل التعزيز على خطتك الحالية بدلاً من رموز API المدÙوعة حسب الاستخدام: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → اشتراكك ÙÙŠ ChatGPT Plus +skill-seekers create --agent claude # Claude Code → اشتراكك ÙÙŠ Claude Pro/Max +``` + +الوكلاء المدعومون: `claude` Ùˆ`codex` Ùˆ`copilot` Ùˆ`opencode` Ùˆ`kimi` Ùˆ`custom` +(اجمع بين `--agent custom` Ùˆ`--agent-cmd " ..."` لتشغيل أي أداة أخرى). + +**2. أي مزوّد متواÙÙ‚ مع OpenAI (OpenRouter ÙˆGroq ÙˆCerebras ÙˆMistral ÙˆNVIDIA NIM وغيرها)** + +كل هؤلاء ÙŠÙˆÙØ±ÙˆÙ† نقطة نهاية `/v1` متواÙقة مع OpenAI. وجّه Skill Seekers إلى أحدها بثلاثة متغيرات بيئة — Ùهو يكتش٠`OPENAI_API_KEY`ØŒ وتحترم مكتبة OpenAI SDK متغير `OPENAI_BASE_URL` تلقائيًا: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # نقطة نهاية المزوّد (انظر الجدول) +export OPENAI_MODEL="" # مطلوب — النموذج Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ gpt-4o غير موجود لدى المزوّدين الآخرين +skill-seekers create +``` + +| المزوّد | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> يختار اكتشا٠المزوّد **أول** متغير بيئة Ù„Ù…ÙØªØ§Ø­ API يجده (`ANTHROPIC_API_KEY` ↠`GOOGLE_API_KEY` ↠`OPENAI_API_KEY` ↠`MOONSHOT_API_KEY`). عيّن `SKILL_SEEKER_PROVIDER` Ù„ÙØ±Ø¶ مزوّد محدد، أو تأكد من أن Ø§Ù„Ù…ÙØ§ØªÙŠØ­ ذات الأولوية الأعلى غير معيّنة. + +**3. نقاط النهاية المتواÙقة مع Claude (مثل GLM والوسطاء)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +كما ÙŠØªÙˆÙØ± دعم أصلي لـ Google Gemini (`GOOGLE_API_KEY`) ÙˆKimi/Moonshot (`MOONSHOT_API_KEY`). انظر **[مرجع متغيرات البيئة](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** للقائمة الكاملة، بما ÙÙŠ ذلك تجاوزات النماذج لكل مزوّد. + +
+ +**التثبيت:** +```bash +# تثبيت دعم Gemini +pip install skill-seekers[gemini] + +# تثبيت دعم OpenAI +pip install skill-seekers[openai] + +# تثبيت دعم MiniMax +pip install skill-seekers[minimax] + +# تثبيت جميع منصات LLM +pip install skill-seekers[all-llms] +``` + +### 🔗 تكامل أطر RAG + +- ✅ **LangChain Documents** - تصدير مباشر بتنسيق `Document` مع `page_content` + بيانات وصÙية + - مناسب لـ: سلاسل الأسئلة والأجوبة والمسترجعات ومخازن المتجهات والوكلاء + - مثال: [خط أنابيب LangChain RAG](examples/langchain-rag-pipeline/) + - دليل: [تكامل LangChain](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - تصدير بتنسيق `TextNode` مع Ù…Ø¹Ø±Ù‘ÙØ§Øª ÙØ±ÙŠØ¯Ø© + تضمينات + - مناسب لـ: محركات الاستعلام ومحركات المحادثة وسياق التخزين + - مثال: [محرك استعلام LlamaIndex](examples/llama-index-query-engine/) + - دليل: [تكامل LlamaIndex](docs/integrations/LLAMA_INDEX.md) + +- ✅ **تنسيق Pinecone الجاهز** - محسّن Ù„Ø±ÙØ¹ البيانات إلى قواعد بيانات المتجهات + - مناسب لـ: البحث المتجهي الإنتاجي والبحث الدلالي والبحث الهجين + - مثال: [Ø±ÙØ¹ Pinecone](examples/pinecone-upsert/) + - دليل: [تكامل Pinecone](docs/integrations/PINECONE.md) + +**تصدير سريع:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (عام) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**دليل خط أنابيب RAG الكامل:** [توثيق خطوط أنابيب RAG](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 تكامل مساعدات البرمجة بالذكاء الاصطناعي + +تحويل توثيق أي إطار برمجي إلى سياق برمجي خبير لأكثر من 4 مساعدات ذكاء اصطناعي: + +- ✅ **Cursor IDE** - توليد `.cursorrules` لاقتراحات الكود المدعومة بالذكاء الاصطناعي + - مناسب لـ: توليد كود خاص بالإطار البرمجي وأنماط متسقة + - يعمل مع: Cursor IDE (نسخة معدلة من VS Code) + - دليل: [تكامل Cursor](docs/integrations/CURSOR.md) + - مثال: [مهارة Cursor React](examples/cursor-react-skill/) + +- ✅ **Windsurf** - تخصيص سياق مساعد Windsurf AI باستخدام `.windsurfrules` + - مناسب لـ: مساعدة الذكاء الاصطناعي المدمجة ÙÙŠ بيئة التطوير والبرمجة التدÙقية + - يعمل مع: Windsurf IDE من Codeium + - دليل: [تكامل Windsurf](docs/integrations/WINDSURF.md) + - مثال: [سياق Windsurf FastAPI](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - موجهات النظام + MCP لوكيل VS Code + - مناسب لـ: توليد الكود الوكيلي ÙÙŠ VS Code + - يعمل مع: Ø¥Ø¶Ø§ÙØ© Cline لـ VS Code + - دليل: [تكامل Cline](docs/integrations/CLINE.md) + - مثال: [مساعد Cline Django](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - خوادم سياق مستقلة عن بيئة التطوير + - مناسب لـ: بيئات تطوير متعددة (VS Code ÙˆJetBrains ÙˆVim) ومزودي LLM مخصصين + - يعمل مع: أي بيئة تطوير تحتوي على Ø¥Ø¶Ø§ÙØ© Continue.dev + - دليل: [تكامل Continue](docs/integrations/CONTINUE_DEV.md) + - مثال: [سياق Continue العام](examples/continue-dev-universal/) + +**تصدير سريع (لأدوات البرمجة بالذكاء الاصطناعي):** +```bash +# لأي مساعد برمجة بالذكاء الاصطناعي (Cursor ÙˆWindsurf ÙˆCline ÙˆContinue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # أو --target markdown + +# نسخ إلى مشروعك (مثال لـ Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# أو لـ Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# أو لـ Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# أو لـ Continue.dev (خادم HTTP) +python examples/continue-dev-universal/context_server.py +# قم بالإعداد ÙÙŠ ~/.continue/config.json +``` + +**مركز التكامل:** [جميع تكاملات أنظمة الذكاء الاصطناعي](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 بنية GitHub ثلاثية التدÙقات +- ✅ **تحليل ثلاثي التدÙقات** - تقسيم مستودعات GitHub إلى تدÙقات الكود والتوثيق والرؤى +- ✅ **محلل قاعدة كود موحد** - يعمل مع عناوين URL الخاصة بـ GitHub والمسارات المحلية +- ✅ **C3.x كعمق تحليل** - اختر 'basic' (1–2 دقيقة) أو 'c3x' (20–60 دقيقة) +- ✅ **توليد موجّه Ù…ÙØ­Ø³Ù‘Ù†** - بيانات GitHub الوصÙية وبداية سريعة من README والمشاكل الشائعة +- ✅ **تكامل المشكلات** - المشاكل والحلول الأكثر شيوعًا من GitHub Issues +- ✅ **كلمات Ù…ÙØªØ§Ø­ÙŠØ© ذكية للتوجيه** - أوزان ØªØµÙ†ÙŠÙØ§Øª GitHub Ù…Ø¶Ø§Ø¹ÙØ© Ù„Ø§ÙƒØªØ´Ø§Ù Ø£ÙØ¶Ù„ للمواضيع + +**شرح التدÙقات الثلاثة:** +- **التدÙÙ‚ 1: الكود** - تحليل C3.x العميق (أنماط وأمثلة وأدلة وإعدادات وبنية معمارية) +- **التدÙÙ‚ 2: التوثيق** - توثيق المستودع (README ÙˆCONTRIBUTING Ùˆdocs/*.md) +- **التدÙÙ‚ 3: الرؤى** - Ø§Ù„Ù…Ø¹Ø±ÙØ© المجتمعية (المشكلات ÙˆØ§Ù„ØªØµÙ†ÙŠÙØ§Øª والنجوم ÙˆØ§Ù„ØªÙØ±ÙŠØ¹Ø§Øª) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# تحليل مستودع GitHub بالتدÙقات الثلاثة +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # أو "basic" للتحليل السريع + fetch_github_metadata=True +) + +# الوصول إلى تدÙÙ‚ الكود (تحليل C3.x) +print(f"أنماط التصميم: {len(result.code_analysis['c3_1_patterns'])}") +print(f"أمثلة الاختبارات: {result.code_analysis['c3_2_examples_count']}") + +# الوصول إلى تدÙÙ‚ التوثيق (توثيق المستودع) +print(f"README: {result.github_docs['readme'][:100]}") + +# الوصول إلى تدÙÙ‚ الرؤى (بيانات GitHub الوصÙية) +print(f"النجوم: {result.github_insights['metadata']['stars']}") +print(f"المشاكل الشائعة: {len(result.github_insights['common_problems'])}") +``` + +**التوثيق الكامل**: [ملخص تنÙيذ التدÙقات الثلاثة](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠إدارة حدود المعدل الذكية والإعدادات +- ✅ **نظام إعداد متعدد الرموز** - إدارة حسابات GitHub متعددة (شخصي وعمل ÙˆÙ…ÙØªÙˆØ­ المصدر) + - تخزين آمن للإعدادات ÙÙŠ `~/.config/skill-seekers/config.json` (صلاحيات 600) + - استراتيجيات حد المعدل لكل مل٠تعريÙ: `prompt` Ùˆ`wait` Ùˆ`switch` Ùˆ`fail` + - مهلة قابلة للتخصيص لكل مل٠تعري٠(Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ: 30 دقيقة، تمنع الانتظار غير المحدود) + - سلسلة احتياطية ذكية: معامل CLI → متغير بيئة → مل٠إعداد → موجه + - إدارة Ù…ÙØ§ØªÙŠØ­ API لـ Claude ÙˆGemini ÙˆOpenAI +- ✅ **معالج إعداد ØªÙØ§Ø¹Ù„ÙŠ** - واجهة طرÙية جميلة للإعداد السهل + - تكامل Ø§Ù„Ù…ØªØµÙØ­ لإنشاء الرموز (ÙŠÙØªØ­ GitHub وغيره تلقائيًا) + - التحقق من صحة الرموز واختبار الاتصال + - عرض مرئي للحالة مع ترميز لوني +- ✅ **معالج حدود المعدل الذكي** - لا مزيد من الانتظار غير المحدود! + - تحذير مسبق بشأن حدود المعدل (60/ساعة مقابل 5000/ساعة) + - اكتشا٠Ùوري من استجابات GitHub API + - مؤقتات عد تنازلي مباشرة مع التقدم + - تبديل تلقائي Ù„Ù„Ù…Ù„ÙØ§Øª التعريÙية عند بلوغ حد المعدل + - أربع استراتيجيات: prompt (Ø§Ø³ØªÙØ³Ø§Ø±) Ùˆwait (عد تنازلي) Ùˆswitch (تبديل) Ùˆfail (إيقاÙ) +- ✅ **الاستئناÙ** - متابعة المهام Ø§Ù„Ù…ØªÙˆÙ‚ÙØ© + - Ø­ÙØ¸ تلقائي للتقدم بÙواصل قابلة للتخصيص (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ: 60 ثانية) + - عرض جميع المهام القابلة للاستئنا٠مع ØªÙØ§ØµÙŠÙ„ التقدم + - تنظي٠تلقائي للمهام القديمة (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ: 7 أيام) +- ✅ **دعم CI/CD** - وضع غير ØªÙØ§Ø¹Ù„ÙŠ للأتمتة + - علامة `--non-interactive` Ù„Ù„ÙØ´Ù„ السريع بدون موجهات + - علامة `--profile` لاختيار حساب GitHub محدد + - رسائل خطأ واضحة لسجلات خطوط الأنابيب + +**إعداد سريع:** +```bash +# إعداد لمرة واحدة (5 دقائق) +skill-seekers config --github + +# استخدام مل٠تعري٠محدد للمستودعات الخاصة +skill-seekers create mycompany/private-repo --profile work + +# وضع CI/CD (ÙØ´Ù„ سريع، بدون موجهات) +skill-seekers create owner/repo --non-interactive + +# استئنا٠مهمة Ù…ØªÙˆÙ‚ÙØ© +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**شرح استراتيجيات حد المعدل:** +- **prompt** (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ) - السؤال عما يجب ÙØ¹Ù„Ù‡ عند بلوغ حد المعدل (انتظار أو تبديل أو إعداد رمز أو إلغاء) +- **wait** - انتظار تلقائي مع عد تنازلي (يحترم المهلة) +- **switch** - تجربة المل٠التعريÙÙŠ المتاح التالي تلقائيًا (لإعدادات الحسابات المتعددة) +- **fail** - ÙØ´Ù„ Ùوري مع خطأ واضح (مثالي لـ CI/CD) + +### 🎯 مهارة Bootstrap - Ø§Ù„Ø§Ø³ØªØ¶Ø§ÙØ© الذاتية + +توليد skill-seekers Ù†ÙØ³Ù‡ كمهارة لاستخدامها داخل وكيل الذكاء الاصطناعي الخاص بك (Claude Code ÙˆKimi ÙˆCodex وغيرها): + +```bash +# توليد المهارة +./scripts/bootstrap_skill.sh + +# التثبيت ÙÙŠ Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**ما تحصل عليه:** +- ✅ **توثيق كامل للمهارة** - جميع أوامر CLI وأنماط الاستخدام +- ✅ **مرجع أوامر CLI** - كل أداة وخياراتها موثقة +- ✅ **أمثلة البدء السريع** - سير العمل الشائعة ÙˆØ£ÙØ¶Ù„ الممارسات +- ✅ **توثيق API مولّد تلقائيًا** - تحليل الكود والأنماط والأمثلة + +### 🔠مستودعات الإعدادات الخاصة +- ✅ **مصادر إعداد مبنية على Git** - جلب الإعدادات من مستودعات Git خاصة/ÙØ±Ù‚ية +- ✅ **إدارة متعددة المصادر** - تسجيل عدد غير محدود من مستودعات GitHub ÙˆGitLab ÙˆBitbucket +- ✅ **تعاون Ø§Ù„ÙØ±Ù‚** - مشاركة الإعدادات المخصصة بين ÙØ±Ù‚ من 3–5 أشخاص +- ✅ **دعم المؤسسات** - التوسع إلى أكثر من 500 مطور مع حل قائم على الأولوية +- ✅ **مصادقة آمنة** - رموز متغيرات البيئة (GITHUB_TOKEN ÙˆGITLAB_TOKEN) +- ✅ **تخزين مؤقت ذكي** - استنساخ مرة واحدة وسحب التحديثات تلقائيًا +- ✅ **وضع عدم الاتصال** - العمل بالإعدادات المخزنة مؤقتًا دون اتصال + +### 🤖 تحليل قاعدة الكود (C3.x) + +**C3.4: استخراج أنماط الإعداد (مع تعزيز الذكاء الاصطناعي)** +- ✅ **9 تنسيقات إعداد** - JSON ÙˆYAML ÙˆTOML ÙˆENV ÙˆINI ÙˆPython ÙˆJavaScript ÙˆDockerfile ÙˆDocker Compose +- ✅ **7 أنواع أنماط** - قاعدة بيانات ÙˆAPI وتسجيل وذاكرة مؤقتة وبريد إلكتروني ومصادقة وإعدادات الخادم +- ✅ **تعزيز بالذكاء الاصطناعي** - تحليل ذكاء اصطناعي اختياري بوضعين (API + LOCAL) + - يشرح ما ÙŠÙØ¹Ù„Ù‡ كل إعداد + - يقترح Ø£ÙØ¶Ù„ الممارسات والتحسينات + - **تحليل أمني** - Ø§ÙƒØªØ´Ø§Ù Ø§Ù„Ù…ÙØ§ØªÙŠØ­ المضمنة ÙÙŠ الكود وبيانات الاعتماد Ø§Ù„Ù…ÙƒØ´ÙˆÙØ© +- ✅ **توثيق تلقائي** - توليد توثيق JSON + Markdown لجميع الإعدادات +- ✅ **تكامل MCP** - أداة `extract_config_patterns` مع دعم التعزيز + +**C3.3: أدلة إرشادية معززة بالذكاء الاصطناعي** +- ✅ **تعزيز شامل بالذكاء الاصطناعي** - تحويل الأدلة الأساسية إلى دروس احتراÙية +- ✅ **5 تحسينات تلقائية** - وص٠الخطوات واستكشا٠الأخطاء والمتطلبات المسبقة والخطوات التالية وحالات الاستخدام +- ✅ **دعم الوضعين** - وضع API (واجهة Claude) أو وضع LOCAL (Claude Code CLI) +- ✅ **بدون ØªÙƒÙ„ÙØ© ÙÙŠ الوضع المحلي** - تعزيز مجاني باستخدام خطة Claude Code Max +- ✅ **تحول ÙÙŠ الجودة** - قوالب من 75 سطرًا → أدلة شاملة بأكثر من 500 سطر + +**الاستخدام:** +```bash +# تحليل سريع (1–2 دقيقة، الميزات الأساسية Ùقط) +skill-seekers scan tests/ --quick + +# تحليل شامل (مع الذكاء الاصطناعي، 20–60 دقيقة) +skill-seekers scan tests/ --comprehensive + +# مع تعزيز الذكاء الاصطناعي +skill-seekers scan tests/ --enhance +``` + +**التوثيق الكامل:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 إعدادات سير عمل التعزيز المسبقة + +خطوط أنابيب تعزيز قابلة لإعادة الاستخدام Ù…ÙØ¹Ø±Ù‘ÙØ© بـ YAML تتحكم ÙÙŠ كيÙية تحويل الذكاء الاصطناعي لتوثيقك الخام إلى مهارة مصقولة. + +- ✅ **5 إعدادات مسبقة Ù…ÙØ¶Ù…ّنة** — `default` Ùˆ`minimal` Ùˆ`security-focus` Ùˆ`architecture-comprehensive` Ùˆ`api-documentation` +- ✅ **إعدادات مخصصة** — Ø¥Ø¶Ø§ÙØ© سير عمل مخصص إلى `~/.config/skill-seekers/workflows/` +- ✅ **سلسلة سير عمل متعددة** — ربط اثنين أو أكثر من سير العمل ÙÙŠ أمر واحد +- ✅ **إدارة كاملة عبر CLI** — عرض ونسخ ÙˆØ¥Ø¶Ø§ÙØ© وحذ٠والتحقق من سير العمل + +```bash +# تطبيق سير عمل واحد +skill-seekers create ./my-project --enhance-workflow security-focus + +# ربط عدة أسلوب عمل (ØªÙØ·Ø¨Ù‚ بالترتيب) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# إدارة الإعدادات المسبقة +skill-seekers workflows list # عرض الكل (Ù…ÙØ¶Ù…ّنة + مخصصة) +skill-seekers workflows show security-focus # عرض محتوى YAML +skill-seekers workflows copy security-focus # نسخ إلى مجلد المستخدم للتعديل +skill-seekers workflows add ./my-workflow.yaml # تثبيت إعداد مخصص +skill-seekers workflows remove my-workflow # حذ٠إعداد مخصص +skill-seekers workflows validate security-focus # التحقق من بنية الإعداد + +# نسخ عدة إعدادات Ø¯ÙØ¹Ø© واحدة +skill-seekers workflows copy security-focus minimal api-documentation + +# Ø¥Ø¶Ø§ÙØ© عدة Ù…Ù„ÙØ§Øª Ø¯ÙØ¹Ø© واحدة +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# حذ٠عدة إعدادات Ø¯ÙØ¹Ø© واحدة +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**تنسيق إعداد YAML المسبق:** +```yaml +name: security-focus +description: "مراجعة أمنية: الثغرات والمصادقة ومعالجة البيانات" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "مراجعة OWASP Top 10 والثغرات الأمنية الشائعة..." + - name: auth-review + type: custom + prompt: "ÙØ­Øµ أنماط المصادقة والتÙويض..." + uses_history: true +``` + +### âš¡ الأداء والتوسع +- ✅ **الوضع غير المتزامن** - استخراج أسرع 2–3 مرات مع async/await (استخدم علامة `--async`) +- ✅ **دعم التوثيق الكبير** - معالجة أكثر من 10 آلاÙ–40 Ø£Ù„Ù ØµÙØ­Ø© بالتقسيم الذكي +- ✅ **مهارات الموجّه/المحور** - توجيه ذكي إلى مهارات ÙØ±Ø¹ÙŠØ© متخصصة +- ✅ **استخراج متوازÙ** - معالجة عدة مهارات ÙÙŠ وقت واحد +- ✅ **نقاط Ø§Ù„ØªÙØªÙŠØ´/الاستئناÙ** - لا Ùقدان للتقدم ÙÙŠ عمليات الاستخراج الطويلة +- ✅ **نظام التخزين المؤقت** - استخراج مرة واحدة وإعادة البناء Ùورًا + +### 🤖 إنشاء المهارات المستقلة عن الوكيل +- ✅ **دعم وكلاء متعددين** - توليد مهارات لـ Claude ÙˆKimi ÙˆCodex ÙˆCopilot ÙˆOpenCode أو أي وكيل مخصص عبر علامة `--agent` +- ✅ **أوامر وكيل مخصصة** - استخدم `--agent-cmd` لتحديد أمر CLI لوكيل مخصص للتعزيز +- ✅ **علامات عامة** - `--agent` Ùˆ`--agent-cmd` متاحتان ÙÙŠ جميع الأوامر (create Ùˆscrape Ùˆgithub Ùˆpdf وغيرها) + +### 📦 خط أنابيب السوق +- ✅ **النشر ÙÙŠ السوق** - نشر المهارات ÙÙŠ مستودعات سوق Ø¥Ø¶Ø§ÙØ§Øª Claude Code +- ✅ **خط أنابيب شامل** - من مصدر التوثيق إلى إدخال منشور ÙÙŠ السوق + +### ✅ ضمان الجودة +- ✅ **اختبار كامل** - أكثر من 3,700 اختبارًا بتغطية شاملة + +--- + +## 📦 التثبيت + +```bash +# التثبيت الأساسي (استخراج التوثيق وتحليل GitHub ÙˆPDF والتعبئة) +pip install skill-seekers + +# مع دعم جميع منصات LLM +pip install skill-seekers[all-llms] + +# مع خادم MCP +pip install skill-seekers[mcp] + +# كل شيء +pip install skill-seekers[all] +``` + +**تحتاج مساعدة ÙÙŠ الاختيار؟** شغّل معالج الإعداد: +```bash +skill-seekers-setup +``` + +### خيارات التثبيت + +| أمر التثبيت | الميزات | +|------------|---------| +| `pip install skill-seekers` | الاستخراج وتحليل GitHub ÙˆPDF وجميع المنصات | +| `pip install skill-seekers[gemini]` | + دعم Google Gemini | +| `pip install skill-seekers[openai]` | + دعم OpenAI ChatGPT | +| `pip install skill-seekers[all-llms]` | + جميع منصات LLM | +| `pip install skill-seekers[mcp]` | + خادم MCP لـ Claude Code ÙˆCursor وغيرهما | +| `pip install skill-seekers[video]` | + استخراج نصوص وبيانات YouTube/Vimeo | +| `pip install skill-seekers[video-full]` | + نسخ Whisper + استخراج الإطارات المرئية | +| `pip install skill-seekers[jupyter]` | + دعم Ø¯ÙØ§ØªØ± Jupyter | +| `pip install skill-seekers[pptx]` | + دعم PowerPoint | +| `pip install skill-seekers[confluence]` | + دعم ويكي Confluence | +| `pip install skill-seekers[notion]` | + دعم ØµÙØ­Ø§Øª Notion | +| `pip install skill-seekers[rss]` | + دعم خلاصات RSS/Atom | +| `pip install skill-seekers[chat]` | + دعم تصدير محادثات Slack/Discord | +| `pip install skill-seekers[asciidoc]` | + دعم مستندات AsciiDoc | +| `pip install skill-seekers[all]` | ØªÙØ¹ÙŠÙ„ كل شيء | + +> **المكونات المرئية للÙيديو (مدركة لـ GPU):** بعد تثبيت `skill-seekers[video-full]`ØŒ شغّل +> `skill-seekers create --setup` لاكتشا٠GPU تلقائيًا وتثبيت إصدار PyTorch +> الصحيح + easyocr. هذه هي الطريقة الموصى بها لتثبيت مكونات الاستخراج المرئي. + +--- + +## 🚀 سير عمل التثبيت بأمر واحد + +**أسرع طريقة من الإعداد إلى المهارة المرÙوعة — أتمتة كاملة:** + +```bash +# تثبيت مهارة React من الإعدادات الرسمية (Ø±ÙØ¹ تلقائي إلى Claude) +skill-seekers install --config react + +# التثبيت من مل٠إعداد محلي +skill-seekers install --config configs/custom.json + +# التثبيت بدون Ø±ÙØ¹ (تعبئة Ùقط) +skill-seekers install --config django --no-upload + +# معاينة سير العمل بدون تنÙيذ +skill-seekers install --config react --dry-run +``` + +**الوقت:** 20–45 دقيقة إجمالاً | **الجودة:** جاهز للإنتاج (9/10) | **Ø§Ù„ØªÙƒÙ„ÙØ©:** مجاني + +**المراحل Ø§Ù„Ù…Ù†ÙØ°Ø©:** +``` +📥 المرحلة 1: جلب الإعداد (إذا تم توÙير اسم إعداد) +📖 المرحلة 2: استخراج التوثيق +✨ المرحلة 3: تعزيز بالذكاء الاصطناعي (إلزامي - لا يمكن تخطيه) +📦 المرحلة 4: تعبئة المهارة +â˜ï¸ المرحلة 5: Ø§Ù„Ø±ÙØ¹ إلى Claude (اختياري، يتطلب API Key) +``` + +**المتطلبات:** +- متغير البيئة ANTHROPIC_API_KEY (Ù„Ù„Ø±ÙØ¹ التلقائي) +- خطة Claude Code Max (للتعزيز المحلي بالذكاء الاصطناعي)ØŒ أو استخدم `--agent` لاختيار وكيل ذكاء اصطناعي مختل٠+ +--- + +## 📊 مصÙÙˆÙØ© الميزات + +يدعم Skill Seekers **12 منصة LLM** Ùˆ**8 أهدا٠RAG/متجهات** Ùˆ**18 نوعًا من المصادر** مع ØªÙƒØ§ÙØ¤ كامل ÙÙŠ الميزات عبر جميع الأهداÙ. + +**المنصات:** Claude AI ÙˆGoogle Gemini ÙˆOpenAI ChatGPT ÙˆMiniMax AI ÙˆMarkdown العام ÙˆOpenCode ÙˆKimi (Moonshot AI) ÙˆDeepSeek AI ÙˆQwen (Alibaba) ÙˆOpenRouter ÙˆTogether AI ÙˆFireworks AI +**أنواع المصادر:** مواقع التوثيق ومستودعات GitHub ÙˆPDF ÙˆWord (.docx) ÙˆEPUB والÙيديو وقواعد الكود المحلية ÙˆØ¯ÙØ§ØªØ± Jupyter ÙˆHTML المحلي ÙˆOpenAPI/Swagger ÙˆAsciiDoc ÙˆPowerPoint (.pptx) وخلاصات RSS/Atom ÙˆØµÙØ­Ø§Øª Man وويكي Confluence ÙˆØµÙØ­Ø§Øª Notion ومحادثات Slack/Discord + +انظر [مصÙÙˆÙØ© الميزات الكاملة](docs/reference/FEATURE_MATRIX.md) لدعم المنصات والميزات Ø¨Ø§Ù„ØªÙØµÙŠÙ„. + +### مقارنة سريعة بين المنصات + +| الميزة | Claude | Gemini | OpenAI | MiniMax | Markdown | +|--------|--------|--------|--------|---------|----------| +| التنسيق | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Ø§Ù„Ø±ÙØ¹ | ✅ API | ✅ API | ✅ API | ✅ API | ⌠يدوي | +| التعزيز | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠لا يوجد | +| جميع أوضاع المهارات | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## أمثلة الاستخدام + +### استخراج التوثيق + +```bash +# استخراج موقع توثيق +skill-seekers create --config configs/react.json + +# استخراج سريع (بدون إعداد) +skill-seekers create https://react.dev --name react + +# الوضع غير المتزامن (أسرع 3 مرات) +skill-seekers create --config configs/godot.json --async --workers 8 + +# استخدام وكيل ذكاء اصطناعي محدد للتعزيز +skill-seekers create --config configs/react.json --agent kimi +``` + +### استخراج PDF + +```bash +# استخراج PDF أساسي +skill-seekers create --pdf docs/manual.pdf --name myskill + +# ميزات متقدمة +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # استخراج الجداول + --parallel \ # معالجة متوازية سريعة + --workers 8 # استخدام 8 أنوية CPU + +# Ù…Ù„ÙØ§Øª PDF الممسوحة ضوئيًا (يتطلب: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### استخراج الÙيديو + +```bash +# تثبيت دعم الÙيديو +pip install skill-seekers[video] # النصوص + البيانات الوصÙية +pip install skill-seekers[video-full] # + نسخ Whisper + استخراج الإطارات المرئية + +# اكتشا٠GPU تلقائي وتثبيت المكونات المرئية (PyTorch + easyocr) +skill-seekers create --setup + +# الاستخراج من Ùيديو YouTube +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# الاستخراج من قائمة تشغيل YouTube +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# الاستخراج من مل٠Ùيديو محلي +skill-seekers create --video-file recording.mp4 --name myrecording + +# الاستخراج مع تحليل الإطارات المرئية (يتطلب مكونات video-full) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# مع تعزيز الذكاء الاصطناعي (تنظي٠OCR + توليد SKILL.md مصقول) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# قص مقطع محدد من الÙيديو (يدعم الثواني ÙˆMM:SS ÙˆHH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# استخدام Vision API لإطارات OCR Ù…Ù†Ø®ÙØ¶Ø© الثقة (يتطلب ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# إعادة بناء المهارة من بيانات مستخرجة سابقًا (تخطي التنزيل) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **الدليل الكامل:** انظر [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) لمرجع CLI الكامل +> ÙˆØªÙØ§ØµÙŠÙ„ خط الأنابيب المرئي وخيارات تعزيز الذكاء الاصطناعي واستكشا٠الأخطاء. + +### تحليل مستودعات GitHub + +```bash +# استخراج المستودع الأساسي +skill-seekers create facebook/react + +# مع المصادقة (حدود معدل أعلى) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# تخصيص ما يتم تضمينه +skill-seekers create django/django \ + --include-issues \ # استخراج GitHub Issues + --max-issues 100 \ # تحديد عدد المشكلات + --include-changelog # استخراج CHANGELOG.md +``` + +### الاستخراج الموحد متعدد المصادر + +**دمج التوثيق + GitHub + PDF ÙÙŠ مهارة موحدة واحدة مع اكتشا٠التعارضات:** + +```bash +# استخدام الإعدادات الموحدة الموجودة +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# أو إنشاء إعداد موحد +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**اكتشا٠التعارضات يجد تلقائيًا:** +- 🔴 **Ù…Ùقود ÙÙŠ الكود** (عالي): موثق ولكن غير منÙّذ +- 🟡 **Ù…Ùقود ÙÙŠ التوثيق** (متوسط): منÙّذ ولكن غير موثق +- âš ï¸ **عدم تطابق التوقيع**: معاملات/أنواع Ù…Ø®ØªÙ„ÙØ© +- â„¹ï¸ **عدم تطابق الوصÙ**: شروحات Ù…Ø®ØªÙ„ÙØ© + +**الدليل الكامل:** انظر [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md). + +### مستودعات الإعدادات الخاصة + +**مشاركة الإعدادات المخصصة عبر Ø§Ù„ÙØ±Ù‚ باستخدام مستودعات Git خاصة:** + +```bash +# الخيار 1: استخدام أدوات MCP (موصى به) +# تسجيل مستودع Ø§Ù„ÙØ±ÙŠÙ‚ الخاص +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# جلب الإعداد من مستودع Ø§Ù„ÙØ±ÙŠÙ‚ +fetch_config(source="team", config_name="internal-api") +``` + +**المنصات المدعومة:** +- GitHub (`GITHUB_TOKEN`) ÙˆGitLab (`GITLAB_TOKEN`) ÙˆGitea (`GITEA_TOKEN`) ÙˆBitbucket (`BITBUCKET_TOKEN`) + +**الدليل الكامل:** انظر [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md). + +## كي٠يعمل + +```mermaid +graph LR + A[موقع التوثيق] --> B[Skill Seekers] + B --> C[Ø§Ù„Ù…ÙØ³ØªØ®Ø±Ø¬] + B --> D[تعزيز الذكاء الاصطناعي] + B --> E[Ø§Ù„Ù…ÙØ¹Ø¨Ø¦] + C --> F[مراجع منظمة] + D --> F + F --> E + E --> G[مهارة ذكاء اصطناعي .zip] + G --> H[Ø§Ù„Ø±ÙØ¹ إلى منصة الذكاء الاصطناعي] +``` + +0. **اكتشا٠llms.txt** - التحقق أولاً من llms-full.txt Ùˆllms.txt Ùˆllms-small.txt (جزء من الاكتشا٠الذكي لمواقع SPA) +1. **الاستخراج**: سحب جميع Ø§Ù„ØµÙØ­Ø§Øª من التوثيق +2. **التصنيÙ**: تنظيم المحتوى حسب المواضيع (API وأدلة ودروس وغيرها) +3. **التعزيز**: يحلل الذكاء الاصطناعي التوثيق وينشئ SKILL.md شاملاً مع أمثلة (يدعم وكلاء متعددين عبر `--agent`) +4. **التعبئة**: تجميع كل شيء ÙÙŠ مل٠`.zip` جاهز للمنصة + +## البنية المعمارية + +يتكون النظام من **8 وحدات أساسية** Ùˆ**5 وحدات مساعدة** (حوالي 200 صن٠إجمالاً): + +![نظرة عامة على الحزم](docs/UML/exports/00_package_overview.png) + +| الوحدة | الغرض | الأصنا٠الرئيسية | +|--------|-------|-----------------| +| **CLICore** | Ù…Ùوزّع أوامر بأسلوب Git | `CLIDispatcher` Ùˆ`SourceDetector` Ùˆ`CreateCommand` | +| **Scrapers** | مستخرجات 18 نوعًا من المصادر | `DocToSkillConverter` Ùˆ`DocumentSkillBuilder` (طبقة بناء مشتركة) Ùˆ`UnifiedScraper` | +| **Adaptors** | أكثر من 20 تنسيق منصة إخراج | `SkillAdaptor` (ABC) Ùˆ`ClaudeAdaptor` Ùˆ`LangChainAdaptor` | +| **Analysis** | خط أنابيب تحليل قاعدة الكود C3.x | `UnifiedCodebaseAnalyzer` Ùˆ`PatternRecognizer` Ùˆ10 ÙƒØ§Ø´ÙØ§Øª GoF | +| **Enhancement** | تحسين المهارات بالذكاء الاصطناعي عبر `AgentClient` | `AgentClient` Ùˆ`AIEnhancer` Ùˆ`UnifiedEnhancer` Ùˆ`WorkflowEngine` | +| **Packaging** | تعبئة المهارات ÙˆØ±ÙØ¹Ù‡Ø§ وتثبيتها | `PackageSkill` Ùˆ`InstallAgent` | +| **MCP** | خادم FastMCP (40 أداة) | `SkillSeekerMCPServer` Ùˆ10 وحدات أدوات | +| **Sync** | اكتشا٠تغييرات التوثيق | `ChangeDetector` Ùˆ`SyncMonitor` Ùˆ`Notifier` | + +الوحدات المساعدة: **Parsers** (28 Ù…ÙØ­Ù„Ù„ CLI) Ùˆ**Storage** (S3/GCS/Azure) Ùˆ**Embedding** (متجهات متعددة المزودين) Ùˆ**Benchmark** (الأداء) Ùˆ**Utilities** (16 مساعدًا مشتركًا). + +مخططات UML الكاملة: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | مشروع StarUML: `docs/UML/skill_seekers.mdj` | مرجع HTML API: `docs/UML/html/` + +## 📋 المتطلبات المسبقة + +**قبل البدء، تأكد من ØªÙˆÙØ±:** + +1. **Python 3.10 أو أحدث** - [تنزيل](https://www.python.org/downloads/) | التحقق: `python3 --version` +2. **Git** - [تنزيل](https://git-scm.com/) | التحقق: `git --version` +3. **15–30 دقيقة** للإعداد الأولي + +**مستخدم جديد؟** → **[ابدأ من هنا: دليل البدء السريع Ø§Ù„Ù…ÙØ­ÙƒÙ…](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Ø±ÙØ¹ المهارات إلى Claude + +بعد تعبئة المهارة، تحتاج إلى Ø±ÙØ¹Ù‡Ø§ إلى Claude: + +### الخيار 1: Ø§Ù„Ø±ÙØ¹ التلقائي (عبر API) + +```bash +# تعيين API Key (مرة واحدة) +export ANTHROPIC_API_KEY=sk-ant-... + +# التعبئة ÙˆØ§Ù„Ø±ÙØ¹ تلقائيًا +skill-seekers package output/react/ --upload + +# أو Ø±ÙØ¹ مل٠.zip موجود +skill-seekers upload output/react.zip +``` + +### الخيار 2: Ø§Ù„Ø±ÙØ¹ اليدوي (بدون API Key) + +```bash +# تعبئة المهارة +skill-seekers package output/react/ +# → ينشئ output/react.zip + +# ثم Ø§Ø±ÙØ¹ يدويًا: +# - اذهب إلى https://claude.ai/skills +# - انقر "Ø±ÙØ¹ المهارة" +# - اختر output/react.zip +``` + +### الخيار 3: MCP (Claude Code) + +``` +ÙÙŠ Claude CodeØŒ اطلب ببساطة: +"عبّئ ÙˆØ§Ø±ÙØ¹ مهارة React" +``` + +--- + +## 🤖 التثبيت ÙÙŠ وكلاء الذكاء الاصطناعي + +يمكن لـ Skill Seekers تثبيت المهارات تلقائيًا ÙÙŠ 19 وكيل برمجة بالذكاء الاصطناعي. + +```bash +# التثبيت ÙÙŠ وكيل محدد +skill-seekers install-agent output/react/ --agent cursor + +# التثبيت ÙÙŠ IBM Bob (محلي على مستوى المشروع .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# التثبيت ÙÙŠ جميع الوكلاء Ø¯ÙØ¹Ø© واحدة +skill-seekers install-agent output/react/ --agent all + +# المعاينة بدون تثبيت +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### الوكلاء المدعومون + +| الوكيل | المسار | النوع | +|--------|--------|-------| +| **Claude Code** | `~/.claude/skills/` | عام | +| **Cursor** | `.cursor/skills/` | مشروع | +| **VS Code / Copilot** | `.github/skills/` | مشروع | +| **Amp** | `~/.amp/skills/` | عام | +| **Goose** | `~/.config/goose/skills/` | عام | +| **OpenCode** | `~/.opencode/skills/` | عام | +| **Windsurf** | `~/.windsurf/skills/` | عام | +| **Roo Code** | `.roo/skills/` | مشروع | +| **Cline** | `.cline/skills/` | مشروع | +| **Aider** | `~/.aider/skills/` | عام | +| **Bolt** | `.bolt/skills/` | مشروع | +| **Kilo Code** | `.kilo/skills/` | مشروع | +| **Continue** | `~/.continue/skills/` | عام | +| **Kimi Code** | `~/.kimi/skills/` | عام | +| **IBM Bob** | `.bob/skills/` | مشروع | + +--- + +## 🔌 تكامل MCP (40 أداة) + +يأتي Skill Seekers مع خادم MCP للاستخدام من Claude Code ÙˆCursor ÙˆWindsurf ÙˆVS Code + Cline أو IntelliJ IDEA. + +```bash +# وضع stdio (Claude Code ÙˆVS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# وضع HTTP (Cursor ÙˆWindsurf ÙˆIntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# إعداد تلقائي لجميع الوكلاء Ø¯ÙØ¹Ø© واحدة +./setup_mcp.sh +``` + +**جميع الأدوات الأربعين المتاحة:** +- **أساسية (9):** `list_configs` Ùˆ`generate_config` Ùˆ`validate_config` Ùˆ`estimate_pages` Ùˆ`scrape_docs` Ùˆ`package_skill` Ùˆ`upload_skill` Ùˆ`enhance_skill` Ùˆ`install_skill` +- **موسعة (10):** `scrape_github` Ùˆ`scrape_pdf` Ùˆ`unified_scrape` Ùˆ`merge_sources` Ùˆ`detect_conflicts` Ùˆ`add_config_source` Ùˆ`fetch_config` Ùˆ`list_config_sources` Ùˆ`remove_config_source` Ùˆ`split_config` +- **قواعد بيانات المتجهات (4):** `export_to_chroma` Ùˆ`export_to_weaviate` Ùˆ`export_to_faiss` Ùˆ`export_to_qdrant` +- **السحابة (3):** `cloud_upload` Ùˆ`cloud_download` Ùˆ`cloud_list` + +**الدليل الكامل:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Ø§Ù„Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª + +### الإعدادات المسبقة المتاحة (أكثر من 24) + +```bash +# عرض جميع الإعدادات المسبقة +# skill-seekers list-configs # غير متاح ÙÙŠ v3.7.0 +``` + +| Ø§Ù„ÙØ¦Ø© | الإعدادات المسبقة | +|-------|-----------------| +| **أطر الويب** | `react` Ùˆ`vue` Ùˆ`angular` Ùˆ`svelte` Ùˆ`nextjs` | +| **Python** | `django` Ùˆ`flask` Ùˆ`fastapi` Ùˆ`sqlalchemy` Ùˆ`pytest` | +| **تطوير الألعاب** | `godot` Ùˆ`pygame` Ùˆ`unity` | +| **الأدوات ÙˆDevOps** | `docker` Ùˆ`kubernetes` Ùˆ`terraform` Ùˆ`ansible` | +| **موحدة (توثيق + GitHub)** | `react-unified` Ùˆ`vue-unified` Ùˆ`nextjs-unified` والمزيد | + +### إنشاء إعدادك الخاص + +```bash +# الخيار 1: ØªÙØ§Ø¹Ù„ÙŠ +skill-seekers create --interactive + +# الخيار 2: نسخ وتعديل إعداد مسبق +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### بنية مل٠الإعداد + +```json +{ + "name": "myframework", + "description": "متى تستخدم هذه المهارة", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### مكان تخزين الإعدادات + +تبحث الأداة بالترتيب التالي: +1. المسار الدقيق المÙقدّم +2. `./configs/` (المجلد الحالي) +3. `~/.config/skill-seekers/configs/` (مجلد إعدادات المستخدم) +4. واجهة SkillSeekersWeb.com (الإعدادات المسبقة) + +--- + +## 📊 ما يتم إنشاؤه + +``` +output/ +├── godot_data/ # البيانات الخام المستخرجة +│ ├── pages/ # Ù…Ù„ÙØ§Øª JSON (واحد لكل ØµÙØ­Ø©) +│ └── summary.json # نظرة عامة +│ +└── godot/ # المهارة + ├── SKILL.md # معزز بأمثلة حقيقية + ├── references/ # توثيق Ù…ÙØµÙ†Ù‘Ù + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # ÙØ§Ø±Øº (أض٠نصوصك البرمجية) + └── assets/ # ÙØ§Ø±Øº (أض٠مواردك) +``` + +--- + +## 🛠استكشا٠الأخطاء وإصلاحها + +### لم يتم استخراج أي محتوى؟ +- تحقق من Ù…ÙØ­Ø¯Ø¯ `main_content` +- جرّب: `article` أو `main` أو `div[role="main"]` + +### البيانات موجودة لكن لا ØªÙØ³ØªØ®Ø¯Ù…ØŸ +```bash +# ÙØ±Ø¶ إعادة الاستخراج +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Ø§Ù„ØªØµÙ†ÙŠÙØ§Øª غير جيدة؟ +عدّل قسم `categories` ÙÙŠ الإعداد بكلمات Ù…ÙØªØ§Ø­ÙŠØ© Ø£ÙØ¶Ù„. + +### تريد تحديث التوثيق؟ +```bash +# حذ٠البيانات القديمة وإعادة الاستخراج +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### التعزيز لا يعمل؟ +```bash +# التحقق من تعيين API Key +echo $ANTHROPIC_API_KEY + +# جرّب الوضع المحلي (يستخدم Claude Code MaxØŒ لا يحتاج API Key) +skill-seekers enhance output/react/ --mode LOCAL + +# مراقبة حالة التعزيز ÙÙŠ الخلÙية +skill-seekers enhance-status output/react/ --watch +``` + +### مشاكل حدود معدل GitHubØŸ +```bash +# تعيين GitHub Token (5000 طلب/ساعة مقابل 60 طلب/ساعة بدون مصادقة) +export GITHUB_TOKEN=ghp_your_token_here + +# أو إعداد Ù…Ù„ÙØ§Øª تعري٠متعددة +skill-seekers config --github +``` + +--- + +## 📈 الأداء + +| المهمة | الوقت | ملاحظات | +|--------|-------|---------| +| الاستخراج (متزامن) | 15–45 دقيقة | المرة الأولى Ùقط، قائم على الخيوط | +| الاستخراج (غير متزامن) | 5–15 دقيقة | أسرع 2–3 مرات مع علامة `--async` | +| البناء | 1–3 دقائق | إعادة بناء سريعة من التخزين المؤقت | +| إعادة البناء | أقل من دقيقة | مع `--skip-scrape` | +| التعزيز (محلي) | 30–60 ثانية | يستخدم Claude Code Max | +| التعزيز (API) | 20–40 ثانية | يتطلب API Key | +| الÙيديو (النصوص) | 1–3 دقائق | YouTube/محلي، النصوص Ùقط | +| الÙيديو (مرئي) | 5–15 دقيقة | + استخراج إطارات OCR | +| التعبئة | 5–10 ثوان٠| إنشاء مل٠.zip النهائي | + +--- + +## 🆕 الجديد ÙÙŠ v3.6.0 + +### الإعدادات المسبقة لسير العمل +تحكم ÙÙŠ عمق التحليل باستخدام `--preset`: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # سريع، سطحي +skill-seekers create https://docs.react.dev/ --preset standard # متوازن (Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ) +skill-seekers create https://docs.react.dev/ --preset comprehensive # عميق وشامل +``` + +### أعلام دورة الحياة +```bash +skill-seekers create https://docs.react.dev/ --dry-run # معاينة بدون استخراج +skill-seekers create https://docs.react.dev/ --fresh # تجاهل ذاكرة التخزين المؤقت، إعادة استخراج كاملة +skill-seekers create https://docs.react.dev/ --resume # استئنا٠المهمة المقاطعة +skill-seekers create https://docs.react.dev/ --skip-scrape # إعادة تعبئة الناتج الموجود +``` + +### ÙØ­Øµ الصحة والأدوات المساعدة +```bash +skill-seekers doctor # تشخيص التثبيت والبيئة +skill-seekers sync-config # كش٠انحرا٠التكوين +skill-seekers stream # الاستهلاك المتدÙÙ‚ للمستندات الكبيرة +skill-seekers update output/react/ # التحديث التزايدي +skill-seekers multilang # إنشاء مهارات متعددة اللغات +skill-seekers quality output/react/ # تقرير الجودة (أض٠--threshold 7 Ù„ÙØ±Ø¶ حد أدنى: رمز خروج غير ØµÙØ±ÙŠ Ø¹Ù†Ø¯ أقل من 7/10) +``` + +### خيارات تقسيم RAG (التعبئة) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### النشر ÙÙŠ السوق +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### تبعيات اختيارية إضاÙية +| Ø§Ù„Ø¥Ø¶Ø§ÙØ© | التثبيت | الغرض | +|---------|---------|-------| +| `browser` | `pip install "skill-seekers[browser]"` | Playwright بدون واجهة لمواقع SPA | +| `embedding` | `pip install "skill-seekers[embedding]"` | دعم خادم التضمينات | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` وغيرها | Ø§Ù„Ø±ÙØ¹ إلى التخزين السحابي | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | تبعيات Ø§Ù„Ø±ÙØ¹ المجمعة لقواعد بيانات المتجهات | + +--- + +## 📚 التوثيق + +### أدلة البدء +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **ابدأ من هنا إذا كنت جديدًا!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - بدء سريع للمستخدمين ذوي الخبرة +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - المشاكل الشائعة وحلولها +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - ورقة مرجعية سريعة + +### البنية المعمارية +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - نظرة عامة على بنية UML مع 14 مخططًا +- **[docs/UML/exports/](docs/UML/exports/)** - تصديرات مخططات PNG (نظرة عامة على الحزم + 13 مخطط أصناÙ) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - مرجع HTML API كامل (جميع الأصنا٠والعمليات والسمات) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - مل٠مشروع StarUML (Ø§ÙØªØ­Ù‡ باستخدام [StarUML](https://staruml.io/)) + +### الأدلة +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - معالجة أكثر من 10 آلاÙ–40 Ø£Ù„Ù ØµÙØ­Ø© +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - دليل أوضاع التعزيز بالذكاء الاصطناعي +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - إعداد تكامل MCP +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - الاستخراج متعدد المصادر +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - الدليل الكامل لاستخراج الÙيديو + +### أدلة التكامل +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - جميع خطوط أنابيب RAG + +--- + +## 📠الرخصة + +رخصة MIT - انظر مل٠[LICENSE](LICENSE) Ù„Ù„ØªÙØ§ØµÙŠÙ„ + +--- + +بناء مهارات سعيد! 🚀 + +--- + +## 🔒 الأمان + +[![شارة تقييم أمان MseeP.ai](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 الرعاة + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — منصة استدلال ذكاء اصطناعي كاملة الوسائط ومتواÙقة مع OpenAI. يدعمها Skill Seekers كهد٠للتعبئة/التعزيز عبر `--target atlas` مع `ATLAS_API_KEY`. diff --git a/README.de.md b/README.de.md new file mode 100644 index 0000000..045a867 --- /dev/null +++ b/README.de.md @@ -0,0 +1,1341 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | Deutsch | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **Hinweis zur maschinellen Übersetzung** +> +> Dieses Dokument wurde automatisch durch KI übersetzt. Trotz Bemühungen um Qualität können ungenaue Ausdrücke vorkommen. +> +> Gerne können Sie über [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) zur Verbesserung der Übersetzung beitragen! Ihr Feedback ist uns sehr wertvoll. + +[![Version](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![Lizenz: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP-Integration](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Getestet](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Projektboard](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI-Version](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Downloads](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python-Version](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Website](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter Follow](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Repo Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**Die Datenschicht für KI-Systeme.** Skill Seekers verwandelt Dokumentationswebsites, GitHub-Repositories, PDFs, Videos, Jupyter-Notebooks, Wikis und über 10 weitere Quelltypen in strukturierte Wissensressourcen — bereit für KI-Skills (Claude, Gemini, OpenAI), RAG-Pipelines (LangChain, LlamaIndex, Pinecone) und KI-Programmierassistenten (Cursor, Windsurf, Cline) in Minuten statt Stunden. + +> **[Besuchen Sie SkillSeekersWeb.com](https://skillseekersweb.com/)** - Durchsuchen Sie über 24 vorgefertigte Konfigurationen, teilen Sie Ihre Konfigurationen und greifen Sie auf die vollständige Dokumentation zu! + +> **[Entwicklungsroadmap und Aufgaben ansehen](https://github.com/users/yusufkaraaslan/projects/2)** - 134 Aufgaben in 10 Kategorien — wählen Sie eine beliebige zum Mitwirken! + +## 🌠Ökosystem + +Skill Seekers ist ein Multi-Repository-Projekt. Hier finden Sie alles: + +| Repository | Beschreibung | Links | +|-----------|-------------|-------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | Kern-CLI & MCP-Server (dieses Repo) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Website & Dokumentation | [Web](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Community-Konfigurationsrepository | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action für CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code Plugin | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew Tap für macOS | | + +> **Möchten Sie beitragen?** Die Website- und Konfigurations-Repos sind ideale Einstiegspunkte für neue Mitwirkende! + +## Die Datenschicht für KI-Systeme + +**Skill Seekers ist die universelle Vorverarbeitungsschicht**, die zwischen Rohdokumentation und jedem KI-System steht, das diese konsumiert. Ob Sie Claude-Skills, eine LangChain-RAG-Pipeline oder eine Cursor-`.cursorrules`-Datei erstellen — die Datenaufbereitung ist identisch. Sie führen sie einmal durch und exportieren für alle Zielplattformen. + +```bash +# Ein Befehl → strukturierte Wissensressource +skill-seekers create https://docs.react.dev/ +# oder: skill-seekers create facebook/react +# oder: skill-seekers create ./my-project + +# Export in jedes KI-System +skill-seekers package output/react --target claude # → Claude AI Skill (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob Skill-Verzeichnis +``` + +### Was erstellt wird + +| Ausgabe | Ziel | Einsatzbereich | +|---------|------|---------------| +| **Claude Skill** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini Skill** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, benutzerdefinierte Assistenten | +| **LangChain Documents** | `--target langchain` | QA-Chains, Agenten, Retriever | +| **LlamaIndex TextNodes** | `--target llama-index` | Query Engines, Chat Engines | +| **Haystack Documents** | `--target haystack` | Enterprise-RAG-Pipelines | +| **Pinecone-ready** (Markdown) | `--target markdown` | Vektor-Upsert | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Lokale Vektordatenbanken | +| **IBM Bob Skill** (Verzeichnis) | `--target ibm-bob` | IBM Bob Projekt-/globale Skills | +| **Cursor** `.cursorrules` | `--target markdown` → SKILL.md kopieren | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → kopieren | VS Code, IntelliJ, Vim | + +### Warum Skill Seekers + +- **99 % schneller** — Tage manueller Datenaufbereitung → 15–45 Minuten +- **KI-Skill-Qualität** — Über 500 Zeilen SKILL.md-Dateien mit Beispielen, Mustern und Anleitungen +- **RAG-fertige Chunks** — Intelligentes Chunking bewahrt Codeblöcke und Kontext +- **18 Quelltypen** — Dokumentation + GitHub + PDF + Videos + Notebooks + Wikis u. v. m. zu einer Wissensressource vereinen +- **Einmal aufbereiten, überall exportieren** — Export auf 21 Plattformen ohne erneutes Scrapen +- **Videos** — Code, Transkripte und strukturiertes Wissen aus YouTube- und lokalen Videos extrahieren +- **Kampferprobt** — Über 3.700 Tests, 24+ Framework-Presets, produktionsreif + +## Schnellstart (3 Befehle) + +```bash +# 1. Installieren +pip install skill-seekers + +# 2. Skill aus beliebiger Quelle erstellen +skill-seekers create https://docs.django.com/ + +# 3. Für Ihre KI-Plattform paketieren +skill-seekers package output/django --target claude +``` + +**Das war's!** Sie haben nun `output/django-claude.zip` einsatzbereit. + +```bash +# Einen anderen KI-Agenten für die Verbesserung verwenden (Standard: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### KI-gestützter Projekt-Scan (neu) + +Richten Sie `scan` auf ein beliebiges Projekt: Ein KI-Agent liest dessen Manifeste, README, +Dockerfile/CI und gesampelte Quellcode-Imports — und erstellt dann eine Konfiguration pro +erkanntem Framework sowie eine `-codebase.json` für Ihren eigenen Code. Die erkannte +Version wird festgehalten, sodass ein erneuter Lauf Versionssprünge meldet: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Anschließend beliebige davon erstellen +skill-seekers create ./configs/scanned/react.json +``` + +Gibt es für eine Erkennung kein vorhandenes Preset, generiert die KI eine neue Konfiguration; +beim Beenden können Sie diese optional in die [Community-Registry](https://github.com/yusufkaraaslan/skill-seekers-configs) zurückveröffentlichen. + +### Weitere Quellen (18 unterstützt) + +```bash +# GitHub-Repository +skill-seekers create facebook/react + +# Lokales Projekt +skill-seekers create ./my-project + +# PDF-Dokument +skill-seekers create manual.pdf + +# Word-Dokument +skill-seekers create report.docx + +# EPUB-E-Book +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# OpenAPI-Spezifikation +skill-seekers create openapi.yaml + +# PowerPoint-Präsentation +skill-seekers create presentation.pptx + +# AsciiDoc-Dokument +skill-seekers create guide.adoc + +# Lokale HTML-Datei (automatisch anhand der Erweiterung erkannt) +skill-seekers create page.html + +# Ganzes Verzeichnis mit HTML-Dateien (automatisch erkannt bei HTML-dominanten Verzeichnissen) +skill-seekers create ./mirror_output/site/ + +# HTML-Modus für gemischte/code-lastige Verzeichnisse erzwingen +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS-/Atom-Feed +skill-seekers create feed.rss + +# Man-Page +skill-seekers create curl.1 + +# Video (YouTube, Vimeo oder lokale Datei — erfordert skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# Erstmalig? Automatische Installation GPU-bewusster visueller Abhängigkeiten: +skill-seekers create --setup + +# Confluence-Wiki +skill-seekers create --space-key TEAM --name wiki + +# Notion-Seiten +skill-seekers create --database-id ... --name docs + +# Slack-/Discord-Chatexport +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Überallhin exportieren + +```bash +# Für mehrere Plattformen paketieren +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Was ist Skill Seekers? + +Skill Seekers ist die **Datenschicht für KI-Systeme** und transformiert 18 Quelltypen — Dokumentationswebsites, GitHub-Repositories, PDFs, Videos, Jupyter-Notebooks, Word-/EPUB-/AsciiDoc-Dokumente, OpenAPI/Swagger-Spezifikationen, PowerPoint-Präsentationen, RSS/Atom-Feeds, Man-Pages, Confluence-Wikis, Notion-Seiten, Slack-/Discord-Chatexporte und mehr — in strukturierte Wissensressourcen für jedes KI-Ziel: + +| Anwendungsfall | Ergebnis | Beispiele | +|----------------|----------|-----------| +| **KI-Skills** | Umfassende SKILL.md + Referenzdateien | Claude Code, Gemini, GPT | +| **RAG-Pipelines** | Dokumenten-Chunks mit reichhaltigen Metadaten | LangChain, LlamaIndex, Haystack | +| **Vektordatenbanken** | Vorformatierte, upload-bereite Daten | Pinecone, Chroma, Weaviate, FAISS | +| **KI-Programmierassistenten** | Kontextdateien, die Ihre IDE-KI automatisch liest | Cursor, Windsurf, Cline, Continue.dev | + +## Dokumentation + +| Ich möchte... | Lesen Sie dies | +|---------------|----------------| +| **Schnell loslegen** | [Schnellstart](docs/getting-started/02-quick-start.md) - 3 Befehle bis zum ersten Skill | +| **Konzepte verstehen** | [Kernkonzepte](docs/user-guide/01-core-concepts.md) - So funktioniert es | +| **Quellen scrapen** | [Scraping-Anleitung](docs/user-guide/02-scraping.md) - Alle Quelltypen | +| **Skills verbessern** | [Verbesserungs-Anleitung](docs/user-guide/03-enhancement.md) - KI-Verbesserung | +| **Skills exportieren** | [Paketierungs-Anleitung](docs/user-guide/04-packaging.md) - Plattform-Export | +| **Befehle nachschlagen** | [CLI-Referenz](docs/reference/CLI_REFERENCE.md) - Alle 20 Befehle | +| **Konfigurieren** | [Konfigurationsformat](docs/reference/CONFIG_FORMAT.md) - JSON-Spezifikation | +| **Probleme beheben** | [Fehlerbehebung](docs/user-guide/06-troubleshooting.md) - Häufige Probleme | + +**Vollständige Dokumentation:** [docs/README.md](docs/README.md) + +Anstatt tagelange manuelle Vorverarbeitung durchzuführen, erledigt Skill Seekers dies: + +1. **Erfassen** — Dokumentation, GitHub-Repos, lokale Codebasen, PDFs, Videos, Jupyter-Notebooks, Wikis und über 10 weitere Quelltypen +2. **Analysieren** — Tiefgreifendes AST-Parsing, Mustererkennung, API-Extraktion +3. **Strukturieren** — Kategorisierte Referenzdateien mit Metadaten +4. **Verbessern** — KI-gestützte SKILL.md-Generierung (Claude, Gemini oder lokal) +5. **Exportieren** — 16 plattformspezifische Formate aus einer Ressource + +## Warum Skill Seekers nutzen? + +### Für KI-Skill-Ersteller (Claude, Gemini, OpenAI) + +- **Produktionsreife Skills** — Über 500 Zeilen SKILL.md-Dateien mit Codebeispielen, Mustern und Anleitungen +- **Verbesserungsworkflows** — `security-focus`, `architecture-comprehensive` oder eigene YAML-Presets anwenden +- **Jede Domäne** — Game-Engines (Godot, Unity), Frameworks (React, Django), interne Tools +- **Teamarbeit** — Interne Dokumentation + Code zu einer einzigen Wissensquelle vereinen +- **Hohe Qualität** — KI-verbessert mit Beispielen, Kurzreferenz und Navigationshinweisen + +### Für RAG-Entwickler und KI-Ingenieure + +- **RAG-fertige Daten** — Vorgesplittete LangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- **99 % schneller** — Tage der Vorverarbeitung → 15–45 Minuten +- **Intelligente Metadaten** — Kategorien, Quellen, Typen → höhere Abrufgenauigkeit +- **Multi-Source** — Dokumentation + GitHub + PDFs in einer Pipeline kombinieren +- **Plattformunabhängig** — Export in jede Vektordatenbank oder jedes Framework ohne erneutes Scrapen + +### Für KI-Programmierassistenten-Nutzer + +- **Cursor / Windsurf / Cline** — `.cursorrules` / `.windsurfrules` / `.clinerules` automatisch generieren +- **Dauerhafter Kontext** — Die KI „kennt" Ihre Frameworks ohne wiederholtes Prompting +- **Immer aktuell** — Kontext in Minuten aktualisieren, wenn sich die Dokumentation ändert + +## Kernfunktionen + +### Dokumentations-Scraping +- **Intelligente SPA-Erkennung** - Dreischichtige Erkennung für JavaScript-SPA-Websites (sitemap.xml → llms.txt → Headless-Browser-Rendering) +- **llms.txt-Unterstützung** - Erkennt und nutzt automatisch LLM-bereite Dokumentationsdateien (10x schneller) +- **Universal-Scraper** - Funktioniert mit JEDER Dokumentationswebsite +- **Intelligente Kategorisierung** - Organisiert Inhalte automatisch nach Themen +- **Code-Spracherkennung** - Erkennt Python, JavaScript, C++, GDScript usw. +- **Über 24 fertige Presets** - Godot, React, Vue, Django, FastAPI und mehr + +### PDF-Unterstützung +- **Grundlegende PDF-Extraktion** - Text, Code und Bilder aus PDFs extrahieren +- **OCR für gescannte PDFs** - Text aus gescannten Dokumenten extrahieren +- **Passwortgeschützte PDFs** - Verschlüsselte PDFs verarbeiten +- **Tabellenextraktion** - Komplexe Tabellen aus PDFs extrahieren +- **Parallelverarbeitung** - 3x schneller bei großen PDFs +- **Intelligentes Caching** - 50 % schneller bei Wiederholungen + +### Videoextraktion +- **YouTube und lokale Videos** - Transkripte, Bildschirmcode und strukturiertes Wissen aus Videos extrahieren +- **Visuelle Frameanalyse** - OCR-Extraktion aus Code-Editoren, Terminals, Folien und Diagrammen +- **GPU-Autoerkennung** - Installiert automatisch den richtigen PyTorch-Build (CUDA/ROCm/MPS/CPU) +- **KI-Verbesserung** - Zwei Durchläufe: OCR-Artefakte bereinigen + ausgefeilte SKILL.md generieren +- **Zeitausschnitte** - Bestimmte Abschnitte mit `--start-time` und `--end-time` extrahieren +- **Playlist-Unterstützung** - Alle Videos einer YouTube-Playlist stapelweise verarbeiten +- **Vision-API-Fallback** - Claude Vision für OCR-Frames mit niedriger Konfidenz verwenden + +### GitHub-Repository-Analyse +- **Tiefgreifende Codeanalyse** - AST-Parsing für Python, JavaScript, TypeScript, Java, C++, Go +- **API-Extraktion** - Funktionen, Klassen, Methoden mit Parametern und Typen +- **Repository-Metadaten** - README, Dateibaum, Sprachverteilung, Stars/Forks +- **GitHub Issues und PRs** - Offene/geschlossene Issues mit Labels und Meilensteinen abrufen +- **CHANGELOG und Releases** - Versionshistorie automatisch extrahieren +- **Konflikterkennung** - Dokumentierte APIs mit tatsächlicher Code-Implementierung vergleichen +- **MCP-Integration** - Natürliche Sprache: „Scrape GitHub Repo facebook/react" + +### Vereinheitlichtes Multi-Source-Scraping +- **Mehrere Quellen kombinieren** - Dokumentation + GitHub + PDF in einem Skill vereinen +- **Konflikterkennung** - Automatische Erkennung von Abweichungen zwischen Dokumentation und Code +- **Intelligentes Zusammenführen** - Regelbasierte oder KI-gesteuerte Konfliktlösung +- **Transparente Berichte** - Nebeneinander-Vergleich mit Warnhinweisen +- **Dokumentationslückenanalyse** - Erkennt veraltete Dokumentation und undokumentierte Funktionen +- **Einzelne Wahrheitsquelle** - Ein Skill zeigt sowohl Absicht (Dokumentation) als auch Realität (Code) +- **Abwärtskompatibel** - Bestehende Einzelquellen-Konfigurationen funktionieren weiterhin + +### Multi-LLM-Plattformunterstützung +- **12 LLM-Plattformen** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Generisches Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- **Universelles Scraping** - Dieselbe Dokumentation funktioniert für alle Plattformen +- **Plattformspezifische Paketierung** - Optimierte Formate für jedes LLM +- **Ein-Befehl-Export** - `--target`-Flag wählt die Plattform +- **Optionale Abhängigkeiten** - Nur installieren, was Sie benötigen +- **100 % abwärtskompatibel** - Bestehende Claude-Workflows bleiben unverändert + +| Plattform | Format | Upload | Verbesserung | API Key | Benutzerdefinierter Endpunkt | +|-----------|--------|--------|-------------|---------|------------------------------| +| **Claude AI** | ZIP + YAML | Auto | Ja | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | Auto | Ja | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | Auto | Ja | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | Auto | Ja | MINIMAX_API_KEY | - | +| **Generisches Markdown** | ZIP | Manuell | Nein | - | - | + +```bash +# Claude (Standard - keine Änderungen nötig!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Generisches Markdown (universeller Export) +skill-seekers package output/react/ --target markdown +# Die Markdown-Dateien direkt in jedem LLM verwenden +``` + +
+Eigenen KI-Anbieter verwenden (OpenAI-kompatible Endpunkte + Abonnements, keine Anthropic-Credits nötig) + +Der optionale KI-**Verbesserungsschritt** (verwendet von `create`, `scan` und `enhance`) erfordert **keinen** Anthropic-Key. Sie haben drei Möglichkeiten, ihn zu betreiben: + +**1. Ein Abonnement nutzen, das Sie bereits bezahlen — ganz ohne API-Credits (LOCAL-Agentenmodus)** + +Skill Seekers kann eine Coding-Agent-CLI aufrufen, bei der Sie bereits angemeldet sind, sodass die Verbesserung über Ihren bestehenden Tarif läuft statt über abgerechnete API-Tokens: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → Ihr ChatGPT Plus +skill-seekers create --agent claude # Claude Code → Ihr Claude Pro/Max +``` + +Unterstützte Agenten: `claude`, `codex`, `copilot`, `opencode`, `kimi` und `custom` +(kombinieren Sie `--agent custom` mit `--agent-cmd " ..."`, um jedes andere Tool anzusteuern). + +**2. Jeder OpenAI-kompatible Anbieter (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Alle diese Anbieter stellen einen OpenAI-kompatiblen `/v1`-Endpunkt bereit. Richten Sie Skill Seekers mit drei Umgebungsvariablen darauf aus — es erkennt `OPENAI_API_KEY`, und das OpenAI SDK berücksichtigt `OPENAI_BASE_URL` automatisch: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # Anbieter-Endpunkt (siehe Tabelle) +export OPENAI_MODEL="" # erforderlich — der Standard gpt-4o existiert anderswo nicht +skill-seekers create +``` + +| Anbieter | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> Die Anbieter-Erkennung wählt die **erste** gefundene API-Key-Umgebungsvariable (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Setzen Sie `SKILL_SEEKER_PROVIDER`, um einen bestimmten Anbieter zu erzwingen, oder stellen Sie sicher, dass die höher priorisierten Keys nicht gesetzt sind. + +**3. Claude-kompatible Endpunkte (z. B. GLM, Proxys)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) und Kimi/Moonshot (`MOONSHOT_API_KEY`) werden ebenfalls nativ unterstützt. Die vollständige Liste — einschließlich anbieterspezifischer Modell-Overrides — finden Sie in der **[Umgebungsvariablen-Referenz](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)**. + +
+ +**Installation:** +```bash +# Mit Gemini-Unterstützung installieren +pip install skill-seekers[gemini] + +# Mit OpenAI-Unterstützung installieren +pip install skill-seekers[openai] + +# Mit MiniMax-Unterstützung installieren +pip install skill-seekers[minimax] + +# Mit allen LLM-Plattformen installieren +pip install skill-seekers[all-llms] +``` + +### RAG-Framework-Integrationen + +- **LangChain Documents** - Direkter Export ins `Document`-Format mit `page_content` + Metadaten + - Geeignet für: QA-Chains, Retriever, Vektorspeicher, Agenten + - Beispiel: [LangChain RAG-Pipeline](examples/langchain-rag-pipeline/) + - Anleitung: [LangChain-Integration](docs/integrations/LANGCHAIN.md) + +- **LlamaIndex TextNodes** - Export ins `TextNode`-Format mit eindeutigen IDs + Embeddings + - Geeignet für: Query Engines, Chat Engines, Storage Context + - Beispiel: [LlamaIndex Query Engine](examples/llama-index-query-engine/) + - Anleitung: [LlamaIndex-Integration](docs/integrations/LLAMA_INDEX.md) + +- **Pinecone-fertiges Format** - Optimiert für Vektordatenbank-Upsert + - Geeignet für: Produktions-Vektorsuche, semantische Suche, Hybridsuche + - Beispiel: [Pinecone Upsert](examples/pinecone-upsert/) + - Anleitung: [Pinecone-Integration](docs/integrations/PINECONE.md) + +**Schnellexport:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (Universal) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Vollständige RAG-Pipeline-Anleitung:** [RAG-Pipelines-Dokumentation](docs/integrations/RAG_PIPELINES.md) + +--- + +### KI-Programmierassistenten-Integrationen + +Verwandeln Sie beliebige Framework-Dokumentation in Experten-Programmierkontext für über 4 KI-Assistenten: + +- **Cursor IDE** - `.cursorrules` für KI-gestützte Codevorschläge generieren + - Geeignet für: Framework-spezifische Codegenerierung, konsistente Muster + - Anleitung: [Cursor-Integration](docs/integrations/CURSOR.md) + - Beispiel: [Cursor React Skill](examples/cursor-react-skill/) + +- **Windsurf** - Windsurf-KI-Assistentenkontext mit `.windsurfrules` anpassen + - Geeignet für: IDE-native KI-Unterstützung, Flow-basiertes Programmieren + - Anleitung: [Windsurf-Integration](docs/integrations/WINDSURF.md) + - Beispiel: [Windsurf FastAPI Kontext](examples/windsurf-fastapi-context/) + +- **Cline (VS Code)** - System-Prompts + MCP für VS Code Agenten + - Geeignet für: Agentische Codegenerierung in VS Code + - Anleitung: [Cline-Integration](docs/integrations/CLINE.md) + - Beispiel: [Cline Django Assistent](examples/cline-django-assistant/) + +- **Continue.dev** - Kontextserver für IDE-unabhängige KI + - Geeignet für: Multi-IDE-Umgebungen (VS Code, JetBrains, Vim), benutzerdefinierte LLM-Anbieter + - Anleitung: [Continue-Integration](docs/integrations/CONTINUE_DEV.md) + - Beispiel: [Continue Universal Kontext](examples/continue-dev-universal/) + +**Schnellexport (für KI-Programmiertools):** +```bash +# Für jeden KI-Programmierassistenten (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude + +# In Ihr Projekt kopieren (Beispiel für Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Oder für Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Oder für Cline +cp output/django-claude/SKILL.md my-project/.clinerules +``` + +**Integrations-Hub:** [Alle KI-System-Integrationen](docs/integrations/INTEGRATIONS.md) + +--- + +### Drei-Stream-GitHub-Architektur +- **Triple-Stream-Analyse** - GitHub-Repos in Code-, Dokumentations- und Insights-Streams aufteilen +- **Vereinheitlichter Codebase-Analyzer** - Funktioniert mit GitHub-URLs UND lokalen Pfaden +- **C3.x als Analysetiefe** - „basic" (1–2 Min.) oder „c3x" (20–60 Min.) Analyse wählen +- **Erweiterte Router-Generierung** - GitHub-Metadaten, README-Schnellstart, häufige Probleme +- **Issue-Integration** - Häufigste Probleme und Lösungen aus GitHub Issues +- **Intelligente Routing-Schlüsselwörter** - GitHub-Labels 2x gewichtet für bessere Themenerkennung + +**Drei Streams erklärt:** +- **Stream 1: Code** - Tiefgreifende C3.x-Analyse (Muster, Beispiele, Anleitungen, Konfigurationen, Architektur) +- **Stream 2: Dokumentation** - Repository-Dokumentation (README, CONTRIBUTING, docs/*.md) +- **Stream 3: Insights** - Community-Wissen (Issues, Labels, Stars, Forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# GitHub-Repo mit allen drei Streams analysieren +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # oder "basic" für schnelle Analyse + fetch_github_metadata=True +) + +print(f"Design patterns: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Stars: {result.github_insights['metadata']['stars']}") +``` + +**Vollständige Dokumentation**: [Drei-Stream-Implementierungszusammenfassung](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### Intelligentes Rate-Limit-Management und Konfiguration +- **Multi-Token-Konfigurationssystem** - Mehrere GitHub-Konten verwalten (Privat, Arbeit, Open Source) + - Sichere Konfigurationsspeicherung unter `~/.config/skill-seekers/config.json` (Berechtigung 600) + - Rate-Limit-Strategien pro Profil: `prompt`, `wait`, `switch`, `fail` + - Intelligente Fallback-Kette: CLI-Argument → Umgebungsvariable → Konfigurationsdatei → Abfrage +- **Interaktiver Konfigurationsassistent** - Ansprechende Terminal-UI für einfache Einrichtung +- **Intelligenter Rate-Limit-Handler** - Kein endloses Warten mehr! + - Echtzeit-Countdown, automatischer Profilwechsel + - Vier Strategien: prompt (fragen), wait (Countdown), switch (wechseln), fail (abbrechen) +- **Wiederaufnahme-Funktion** - Unterbrochene Aufgaben fortsetzen +- **CI/CD-Unterstützung** - `--non-interactive`-Flag für Automatisierung + +**Schnelleinrichtung:** +```bash +# Einmalige Konfiguration (5 Minuten) +skill-seekers config --github + +# Spezifisches Profil für private Repositories verwenden +skill-seekers create mycompany/private-repo --profile work + +# CI/CD-Modus (schnelles Abbrechen, keine Abfragen) +skill-seekers create owner/repo --non-interactive + +# Unterbrochenen Job fortsetzen +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Rate-Limit-Strategien erklärt:** +- **prompt** (Standard) - Fragt bei Erreichen des Limits, was zu tun ist (warten, wechseln, Token einrichten, abbrechen) +- **wait** - Wartet automatisch mit Countdown (respektiert das Timeout) +- **switch** - Versucht automatisch das nächste verfügbare Profil (für Multi-Konto-Setups) +- **fail** - Bricht sofort mit klarer Fehlermeldung ab (ideal für CI/CD) + +### Bootstrap-Skill - Selbst-Hosting + +Skill Seekers selbst als Skill generieren, um es innerhalb Ihres KI-Agenten zu verwenden (Claude Code, Kimi, Codex usw.): + +```bash +# Skill generieren +./scripts/bootstrap_skill.sh + +# In Claude Code installieren +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**Was Sie erhalten:** +- **Vollständige Skill-Dokumentation** - Alle CLI-Befehle und Nutzungsmuster +- **CLI-Befehlsreferenz** - Jedes Tool und seine Optionen dokumentiert +- **Schnellstart-Beispiele** - Gängige Workflows und Best Practices +- **Auto-generierte API-Dokumentation** - Codeanalyse, Muster und Beispiele + +### Private Konfigurations-Repositories +- **Git-basierte Konfigurationsquellen** - Konfigurationen aus privaten/Team-Git-Repositories abrufen +- **Multi-Source-Verwaltung** - Unbegrenzte GitHub-, GitLab-, Bitbucket-Repositories registrieren +- **Team-Zusammenarbeit** - Benutzerdefinierte Konfigurationen in 3–5-Personen-Teams teilen +- **Enterprise-Unterstützung** - Skalierung auf 500+ Entwickler +- **Sichere Authentifizierung** - Umgebungsvariablen-Tokens (GITHUB_TOKEN, GITLAB_TOKEN) + +### Codebase-Analyse (C3.x) + +**C3.4: Konfigurationsmuster-Extraktion (mit KI-Verbesserung)** +- **9 Konfigurationsformate** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- **7 Mustertypen** - Datenbank-, API-, Logging-, Cache-, E-Mail-, Auth-, Server-Konfigurationen +- **KI-Verbesserung** - Optionale Dual-Modus-KI-Analyse (API + LOCAL) +- **Sicherheitsanalyse** - Hartcodierte Geheimnisse und offengelegte Anmeldedaten finden + +**C3.3: KI-verbesserte Anleitungen** +- **Umfassende KI-Verbesserung** - Grundanleitungen in professionelle Tutorials verwandeln +- **5 automatische Verbesserungen** - Schrittbeschreibungen, Fehlerbehebung, Voraussetzungen, nächste Schritte, Anwendungsfälle +- **Dual-Modus-Unterstützung** - API-Modus (Claude API) oder LOCAL-Modus (Claude Code CLI) +- **LOCAL-Modus kostenlos** - Kostenlose Verbesserung mit Ihrem Claude Code Max Plan + +**Verwendung:** +```bash +# Schnellanalyse (1–2 Minuten, nur Grundfunktionen) +skill-seekers scan tests/ --quick + +# Umfassende Analyse (mit KI, 20–60 Minuten) +skill-seekers scan tests/ --comprehensive + +# Mit KI-Verbesserung +skill-seekers scan tests/ --enhance +``` + +**Vollständige Dokumentation:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### Verbesserungs-Workflow-Presets + +Wiederverwendbare YAML-definierte Verbesserungspipelines, die steuern, wie KI Ihre Rohdokumentation in einen ausgefeilten Skill transformiert. + +- **5 mitgelieferte Presets** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- **Benutzerdefinierte Presets** — Eigene Workflows unter `~/.config/skill-seekers/workflows/` hinzufügen +- **Mehrere Workflows** — Zwei oder mehr Workflows in einem Befehl verketten +- **Vollständige CLI-Verwaltung** — Workflows auflisten, anzeigen, kopieren, hinzufügen, entfernen und validieren + +```bash +# Einzelnen Workflow anwenden +skill-seekers create ./my-project --enhance-workflow security-focus + +# Mehrere Workflows verketten (werden der Reihe nach angewendet) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Presets verwalten +skill-seekers workflows list # Alle auflisten (mitgeliefert + benutzerdefiniert) +skill-seekers workflows show security-focus # YAML-Inhalt anzeigen +skill-seekers workflows copy security-focus # Zum Benutzerverzeichnis kopieren (zum Bearbeiten) +skill-seekers workflows add ./my-workflow.yaml # Benutzerdefiniertes Preset installieren +skill-seekers workflows remove my-workflow # Benutzerdefiniertes Preset entfernen +skill-seekers workflows validate security-focus # Preset-Struktur validieren + +# Mehrere gleichzeitig kopieren +skill-seekers workflows copy security-focus minimal api-documentation + +# Mehrere Dateien gleichzeitig hinzufügen +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Mehrere gleichzeitig entfernen +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML-Preset-Format:** +```yaml +name: security-focus +description: "Security-focused review: vulnerabilities, auth, data handling" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Review for OWASP top 10 and common security vulnerabilities..." + - name: auth-review + type: custom + prompt: "Examine authentication and authorisation patterns..." + uses_history: true +``` + +### Leistung und Skalierung +- **Async-Modus** - 2–3x schnelleres Scraping mit async/await (Flag `--async` verwenden) +- **Unterstützung großer Dokumentationen** - 10K–40K+ Seiten mit intelligentem Aufteilen verarbeiten +- **Router-/Hub-Skills** - Intelligentes Routing zu spezialisierten Sub-Skills +- **Paralleles Scraping** - Mehrere Skills gleichzeitig verarbeiten +- **Checkpoint/Wiederaufnahme** - Bei langen Scraping-Vorgängen nie den Fortschritt verlieren +- **Caching-System** - Einmal scrapen, sofort neu erstellen + +### Agenten-agnostische Skill-Generierung +- **Multi-Agenten-Unterstützung** - Skills für Claude, Kimi, Codex, Copilot, OpenCode oder beliebige eigene Agenten per `--agent`-Flag generieren +- **Eigene Agentenbefehle** - Mit `--agent-cmd` einen benutzerdefinierten Agenten-CLI-Befehl für die Verbesserung angeben +- **Universelle Flags** - `--agent` und `--agent-cmd` sind in allen Befehlen verfügbar (create, scrape, github, pdf usw.) + +### Marketplace-Pipeline +- **Auf dem Marketplace veröffentlichen** - Skills in Claude Code Plugin-Marketplace-Repos veröffentlichen +- **End-to-End-Pipeline** - Von der Dokumentationsquelle bis zum veröffentlichten Marketplace-Eintrag + +### Qualitätssicherung +- **Vollständig getestet** - Über 3.700 Tests mit umfassender Abdeckung + +--- + +## Installation + +```bash +# Basisinstallation (Dokumentations-Scraping, GitHub-Analyse, PDF, Paketierung) +pip install skill-seekers + +# Mit Unterstützung aller LLM-Plattformen +pip install skill-seekers[all-llms] + +# Mit MCP-Server +pip install skill-seekers[mcp] + +# Alles +pip install skill-seekers[all] +``` + +**Hilfe bei der Auswahl nötig?** Starten Sie den Einrichtungsassistenten: +```bash +skill-seekers-setup +``` + +### Installationsoptionen + +| Installation | Funktionen | +|-------------|-----------| +| `pip install skill-seekers` | Scraping, GitHub-Analyse, PDF, alle Plattformen | +| `pip install skill-seekers[gemini]` | + Google Gemini-Unterstützung | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT-Unterstützung | +| `pip install skill-seekers[all-llms]` | + Alle LLM-Plattformen | +| `pip install skill-seekers[mcp]` | + MCP-Server | +| `pip install skill-seekers[video]` | + YouTube-/Vimeo-Transkript- und Metadatenextraktion | +| `pip install skill-seekers[video-full]` | + Whisper-Transkription und visuelle Frameextraktion | +| `pip install skill-seekers[jupyter]` | + Jupyter-Notebook-Unterstützung | +| `pip install skill-seekers[pptx]` | + PowerPoint-Unterstützung | +| `pip install skill-seekers[confluence]` | + Confluence-Wiki-Unterstützung | +| `pip install skill-seekers[notion]` | + Notion-Seitenunterstützung | +| `pip install skill-seekers[rss]` | + RSS-/Atom-Feed-Unterstützung | +| `pip install skill-seekers[chat]` | + Slack-/Discord-Chatexport-Unterstützung | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc-Dokumentunterstützung | +| `pip install skill-seekers[all]` | Alles aktiviert | + +> **Visuelle Video-Abhängigkeiten (GPU-bewusst):** Nach der Installation von `skill-seekers[video-full]` führen Sie +> `skill-seekers create --setup` aus, um Ihre GPU automatisch zu erkennen und die richtige PyTorch- +> Variante + easyocr zu installieren. Dies ist der empfohlene Weg zur Installation visueller Extraktionsabhängigkeiten. + +--- + +## Ein-Befehl-Installations-Workflow + +**Der schnellste Weg von der Konfiguration zum hochgeladenen Skill — vollständig automatisiert:** + +```bash +# React-Skill aus offiziellen Konfigurationen installieren (automatischer Upload zu Claude) +skill-seekers install --config react + +# Aus lokaler Konfigurationsdatei installieren +skill-seekers install --config configs/custom.json + +# Ohne Upload installieren (nur Paketierung) +skill-seekers install --config django --no-upload + +# Workflow ohne Ausführung in der Vorschau anzeigen +skill-seekers install --config react --dry-run +``` + +**Dauer:** 20–45 Minuten insgesamt | **Qualität:** Produktionsreif (9/10) | **Kosten:** Kostenlos + +**Ausgeführte Phasen:** +``` +Phase 1: Konfiguration abrufen (falls Konfigurationsname angegeben) +Phase 2: Dokumentation scrapen +Phase 3: KI-Verbesserung (OBLIGATORISCH - kein Überspringen möglich) +Phase 4: Skill paketieren +Phase 5: Zu Claude hochladen (optional, erfordert API Key) +``` + +**Voraussetzungen:** +- Umgebungsvariable ANTHROPIC_API_KEY (für automatischen Upload) +- Claude Code Max Plan (für lokale KI-Verbesserung), oder mit `--agent` einen anderen KI-Agenten auswählen + +--- + +## Funktionsmatrix + +Skill Seekers unterstützt **12 LLM-Plattformen**, **8 RAG-/Vektor-Ziele**, **18 Quelltypen** und vollständige Funktionsparität für alle Ziele. + +**Plattformen:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Generisches Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Quelltypen:** Dokumentationswebsites, GitHub-Repos, PDFs, Word (.docx), EPUB, Video, lokale Codebasen, Jupyter-Notebooks, lokales HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS-/Atom-Feeds, Man-Pages, Confluence-Wikis, Notion-Seiten, Slack-/Discord-Chatexporte + +Vollständige Informationen finden Sie in der [vollständigen Funktionsmatrix](docs/reference/FEATURE_MATRIX.md). + +### Schneller Plattformvergleich + +| Funktion | Claude | Gemini | OpenAI | MiniMax | Markdown | +|----------|--------|--------|--------|---------|----------| +| Format | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Upload | API | API | API | API | Manuell | +| Verbesserung | Sonnet 4 | 2.0 Flash | GPT-4o | M3 | Keine | +| Alle Skill-Modi | Ja | Ja | Ja | Ja | Ja | + +--- + +## Verwendungsbeispiele + +### Dokumentations-Scraping + +```bash +# Dokumentationswebsite scrapen +skill-seekers create --config configs/react.json + +# Schnelles Scraping (ohne Konfiguration) +skill-seekers create https://react.dev --name react + +# Mit Async-Modus (3x schneller) +skill-seekers create --config configs/godot.json --async --workers 8 + +# Einen bestimmten KI-Agenten für die Verbesserung verwenden +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF-Extraktion + +```bash +# Grundlegende PDF-Extraktion +skill-seekers create --pdf docs/manual.pdf --name myskill + +# Erweiterte Funktionen +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Tabellen extrahieren + --parallel \ # Schnelle Parallelverarbeitung + --workers 8 # 8 CPU-Kerne verwenden + +# Gescannte PDFs (erfordert: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Videoextraktion + +```bash +# Video-Unterstützung installieren +pip install skill-seekers[video] # Transkripte + Metadaten +pip install skill-seekers[video-full] # + Whisper-Transkription + visuelle Frameextraktion + +# GPU automatisch erkennen und visuelle Abhängigkeiten installieren (PyTorch + easyocr) +skill-seekers create --setup + +# Aus YouTube-Video extrahieren +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Aus einer YouTube-Playlist extrahieren +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Aus einer lokalen Videodatei extrahieren +skill-seekers create --video-file recording.mp4 --name myrecording + +# Mit visueller Frameanalyse extrahieren (erfordert video-full-Abhängigkeiten) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# Mit KI-Verbesserung (OCR bereinigen + ausgefeilte SKILL.md generieren) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Bestimmten Abschnitt eines Videos ausschneiden (unterstützt Sekunden, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Vision API für OCR-Frames mit niedriger Konfidenz verwenden (erfordert ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Skill aus zuvor extrahierten Daten neu erstellen (Download überspringen) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Vollständige Anleitung:** Siehe [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) für die vollständige CLI-Referenz, +> Details zur visuellen Pipeline, KI-Verbesserungsoptionen und Fehlerbehebung. + +### GitHub-Repository-Analyse + +```bash +# Grundlegendes Repository-Scraping +skill-seekers create facebook/react + +# Mit Authentifizierung (höhere Rate-Limits) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Inhalte anpassen +skill-seekers create django/django \ + --include-issues \ # GitHub Issues extrahieren + --max-issues 100 \ # Issue-Anzahl begrenzen + --include-changelog # CHANGELOG.md extrahieren +``` + +### Vereinheitlichtes Multi-Source-Scraping + +**Dokumentation + GitHub + PDF zu einem vereinheitlichten Skill mit Konflikterkennung kombinieren:** + +```bash +# Vorhandene vereinheitlichte Konfigurationen verwenden +skill-seekers create --config configs/react_unified.json + +# Oder vereinheitlichte Konfiguration erstellen +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**Die Konflikterkennung findet automatisch:** +- **Im Code fehlend** (hoch): Dokumentiert, aber nicht implementiert +- **In der Dokumentation fehlend** (mittel): Implementiert, aber nicht dokumentiert +- **Signatur-Abweichung**: Unterschiedliche Parameter/Typen +- **Beschreibungs-Abweichung**: Unterschiedliche Erklärungen + +**Vollständige Anleitung:** Siehe [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md). + +### Private Konfigurations-Repositories + +**Benutzerdefinierte Konfigurationen über private Git-Repositories im Team teilen:** + +```bash +# MCP-Tools verwenden, um das private Team-Repository zu registrieren +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Konfiguration aus dem Team-Repository abrufen +fetch_config(source="team", config_name="internal-api") +``` + +**Unterstützte Plattformen:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Vollständige Anleitung:** Siehe [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md). + +## Funktionsweise + +```mermaid +graph LR + A[Dokumentationswebsite] --> B[Skill Seekers] + B --> C[Scraper] + B --> D[KI-Verbesserung] + B --> E[Paketierer] + C --> F[Geordnete Referenzdateien] + D --> F + F --> E + E --> G[KI-Skill .zip] + G --> H[Upload zur KI-Plattform] +``` + +0. **llms.txt erkennen** - Prüft zuerst auf llms-full.txt, llms.txt, llms-small.txt (Teil der intelligenten SPA-Erkennung) +1. **Scrapen**: Alle Seiten aus der Dokumentation extrahieren +2. **Kategorisieren**: Inhalte nach Themen organisieren (API, Anleitungen, Tutorials usw.) +3. **Verbessern**: KI analysiert Dokumente und erstellt umfassende SKILL.md mit Beispielen (unterstützt mehrere Agenten via `--agent`) +4. **Paketieren**: Alles in eine plattformfertige `.zip`-Datei bündeln + +## Architektur + +Das System ist in **8 Kernmodule** und **5 Hilfsmodule** organisiert (~200 Klassen insgesamt): + +![Paketübersicht](docs/UML/exports/00_package_overview.png) + +| Modul | Zweck | Wichtige Klassen | +|-------|-------|------------------| +| **CLICore** | Git-artiger Befehls-Dispatcher | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 Quelltyp-Extraktoren | `DocToSkillConverter`, `DocumentSkillBuilder` (gemeinsame Build-Schicht), `UnifiedScraper` | +| **Adaptors** | 20+ Ausgabeplattform-Formate | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | C3.x-Codebase-Analysepipeline | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 GoF-Detektoren | +| **Enhancement** | KI-gestützte Skill-Verbesserung via `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Skills paketieren, hochladen, installieren | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP-Server (40 Tools) | `SkillSeekerMCPServer`, 10 Tool-Module | +| **Sync** | Erkennung von Dokumentationsänderungen | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Hilfsmodule: **Parsers** (28 CLI-Parser), **Storage** (S3/GCS/Azure), **Embedding** (Multi-Provider-Vektoren), **Benchmark** (Performance), **Utilities** (16 gemeinsame Helfer). + +Vollständige UML-Diagramme: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML-Projekt: `docs/UML/skill_seekers.mdj` | HTML-API-Referenz: `docs/UML/html/` + +## Voraussetzungen + +**Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:** + +1. **Python 3.10 oder höher** - [Herunterladen](https://www.python.org/downloads/) | Prüfen: `python3 --version` +2. **Git** - [Herunterladen](https://git-scm.com/) | Prüfen: `git --version` +3. **15–30 Minuten** für die erstmalige Einrichtung + +**Erstmalig hier?** → **[Starten Sie hier: Narrensichere Schnellstartanleitung](BULLETPROOF_QUICKSTART.md)** + +--- + +## Skills zu Claude hochladen + +Sobald Ihr Skill paketiert ist, müssen Sie ihn zu Claude hochladen: + +### Option 1: Automatischer Upload (API-basiert) + +```bash +# API Key setzen (einmalig) +export ANTHROPIC_API_KEY=sk-ant-... + +# Paketieren und automatisch hochladen +skill-seekers package output/react/ --upload + +# ODER vorhandene .zip hochladen +skill-seekers upload output/react.zip +``` + +### Option 2: Manueller Upload (ohne API Key) + +```bash +# Skill paketieren +skill-seekers package output/react/ +# → Erstellt output/react.zip + +# Dann manuell hochladen: +# - Gehen Sie zu https://claude.ai/skills +# - Klicken Sie auf „Skill hochladen" +# - Wählen Sie output/react.zip +``` + +### Option 3: MCP (Claude Code) + +``` +In Claude Code einfach fragen: +"Paketiere und lade den React-Skill hoch" +``` + +--- + +## Installation für KI-Agenten + +Skill Seekers kann Skills automatisch für 19 KI-Programmieragenten installieren. + +```bash +# Für einen bestimmten Agenten installieren +skill-seekers install-agent output/react/ --agent cursor + +# Für IBM Bob installieren (projektlokal: .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Für alle Agenten gleichzeitig installieren +skill-seekers install-agent output/react/ --agent all + +# Vorschau ohne Installation +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Unterstützte Agenten + +| Agent | Pfad | Typ | +|-------|------|-----| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Projekt | +| **VS Code / Copilot** | `.github/skills/` | Projekt | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Projekt | +| **Cline** | `.cline/skills/` | Projekt | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Projekt | +| **Kilo Code** | `.kilo/skills/` | Projekt | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Projekt | + +--- + +## MCP-Integration (40 Tools) + +Skill Seekers liefert einen MCP-Server für die Verwendung mit Claude Code, Cursor, Windsurf, VS Code + Cline oder IntelliJ IDEA. + +```bash +# stdio-Modus (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP-Modus (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Alle Agenten automatisch konfigurieren +./setup_mcp.sh +``` + +**Alle 40 verfügbaren Tools:** +- **Kern (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **Erweitert (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Vektordatenbank (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Cloud (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Vollständige Anleitung:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## Konfiguration + +### Verfügbare Presets (24+) + +```bash +# Alle Presets auflisten +# skill-seekers list-configs # In v3.7.0 nicht verfügbar +``` + +| Kategorie | Presets | +|-----------|---------| +| **Web-Frameworks** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Spieleentwicklung** | `godot`, `pygame`, `unity` | +| **Tools und DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Vereinheitlicht (Doku + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` u. a. | + +### Eigene Konfiguration erstellen + +```bash +# Option 1: Interaktiv +skill-seekers create --interactive + +# Option 2: Preset kopieren und bearbeiten +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Konfigurationsdatei-Struktur + +```json +{ + "name": "myframework", + "description": "When to use this skill", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Speicherorte für Konfigurationen + +Das Tool sucht in dieser Reihenfolge: +1. Exakter Pfad wie angegeben +2. `./configs/` (aktuelles Verzeichnis) +3. `~/.config/skill-seekers/configs/` (Benutzerkonfigurationsverzeichnis) +4. SkillSeekersWeb.com API (Preset-Konfigurationen) + +--- + +## Was wird erstellt + +``` +output/ +├── godot_data/ # Gescrapte Rohdaten +│ ├── pages/ # JSON-Dateien (eine pro Seite) +│ └── summary.json # Übersicht +│ +└── godot/ # Der Skill + ├── SKILL.md # Verbessert mit echten Beispielen + ├── references/ # Kategorisierte Dokumentation + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # Leer (eigene hinzufügen) + └── assets/ # Leer (eigene hinzufügen) +``` + +--- + +## Fehlerbehebung + +### Kein Inhalt extrahiert? +- Überprüfen Sie Ihren `main_content`-Selektor +- Versuchen Sie: `article`, `main`, `div[role="main"]` + +### Daten vorhanden, aber werden nicht verwendet? +```bash +# Erneutes Scraping erzwingen +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Kategorien nicht gut? +Bearbeiten Sie den `categories`-Abschnitt in der Konfiguration mit besseren Schlüsselwörtern. + +### Dokumentation aktualisieren? +```bash +# Alte Daten löschen und erneut scrapen +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### Verbesserung funktioniert nicht? +```bash +# Prüfen, ob API Key gesetzt ist +echo $ANTHROPIC_API_KEY + +# LOCAL-Modus versuchen (nutzt Claude Code Max, kein API Key nötig) +skill-seekers enhance output/react/ --mode LOCAL + +# Hintergrund-Verbesserungsstatus überwachen +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub-Rate-Limit-Probleme? +```bash +# GitHub Token setzen (5000 Anfragen/Stunde vs. 60/Stunde anonym) +export GITHUB_TOKEN=ghp_your_token_here + +# Oder mehrere Profile konfigurieren +skill-seekers config --github +``` + +--- + +## Leistung + +| Aufgabe | Dauer | Hinweise | +|---------|-------|----------| +| Scraping (synchron) | 15–45 Min. | Nur beim ersten Mal, thread-basiert | +| Scraping (asynchron) | 5–15 Min. | 2–3x schneller mit `--async`-Flag | +| Erstellen | 1–3 Min. | Schneller Neuaufbau aus Cache | +| Neuerstellen | <1 Min. | Mit `--skip-scrape` | +| Verbesserung (LOCAL) | 30–60 Sek. | Nutzt Claude Code Max | +| Verbesserung (API) | 20–40 Sek. | Erfordert API Key | +| Video (Transkript) | 1–3 Min. | YouTube/lokal, nur Transkript | +| Video (visuell) | 5–15 Min. | + OCR-Frameextraktion | +| Paketierung | 5–10 Sek. | Finale .zip-Erstellung | + +--- + +## Neu in v3.6.0 + +### Workflow-Presets +Analysetiefe mit `--preset` steuern: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Schnell, oberflächlich +skill-seekers create https://docs.react.dev/ --preset standard # Ausgewogen (Standard) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Tiefgehend, erschöpfend +``` + +### Lifecycle-Flags +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Vorschau ohne Scraping +skill-seekers create https://docs.react.dev/ --fresh # Cache ignorieren, vollständiges Re-Scraping +skill-seekers create https://docs.react.dev/ --resume # Unterbrochenen Job fortsetzen +skill-seekers create https://docs.react.dev/ --skip-scrape # Bestehende Ausgabe neu paketieren +``` + +### Health Check & Utilities +```bash +skill-seekers doctor # Installation & Umgebung diagnostizieren +skill-seekers sync-config # Konfigurationsabweichung erkennen +skill-seekers stream # Streaming-Ingestion für große Dokumentationen +skill-seekers update output/react/ # Inkrementelles Update +skill-seekers multilang # Mehrsprachige Skill-Generierung +skill-seekers quality output/react/ # Qualitätsbericht (mit --threshold 7 als Gate: Exit-Code ungleich null unter 7/10) +``` + +### RAG-Chunking-Optionen (package) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Marketplace-Veröffentlichung +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Weitere optionale Abhängigkeiten +| Extra | Installation | Zweck | +|-------|--------------|-------| +| `browser` | `pip install "skill-seekers[browser]"` | Headless Playwright für SPA-Websites | +| `embedding` | `pip install "skill-seekers[embedding]"` | Embedding-Server-Unterstützung | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` usw. | Cloud-Storage-Upload | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Kombinierte Vektordatenbank-Upload-Abhängigkeiten | + +--- + +## Dokumentation + +### Erste Schritte +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - **Neue Nutzer starten hier!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Schnellstart für erfahrene Nutzer +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Häufige Probleme und Lösungen +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - Einseiter-Kurzreferenz + +### Architektur +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - UML-Architekturübersicht mit 14 Diagrammen +- **[docs/UML/exports/](docs/UML/exports/)** - PNG-Diagramm-Exporte (Paketübersicht + 13 Klassendiagramme) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Vollständige HTML-API-Referenz (alle Klassen, Operationen, Attribute) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML-Projektdatei (mit [StarUML](https://staruml.io/) öffnen) + +### Anleitungen +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - 10K–40K+ Seiten verarbeiten +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - KI-Verbesserungsmodi-Anleitung +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP-Integrations-Einrichtung +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Multi-Source-Scraping +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Vollständige Videoextraktions-Anleitung + +### Integrationsanleitungen +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - Alle RAG-Pipelines + +--- + +## Lizenz + +MIT-Lizenz - siehe [LICENSE](LICENSE)-Datei für Details + +--- + +Viel Erfolg beim Erstellen von Skills! + +--- + +## Sicherheit + +[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## Sponsoren + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — eine vollmodale, OpenAI-kompatible KI-Inferenzplattform. Skill Seekers unterstützt sie als Paketierungs-/Verbesserungsziel via `--target atlas` mit `ATLAS_API_KEY`. diff --git a/README.es.md b/README.es.md new file mode 100644 index 0000000..b9a0ec0 --- /dev/null +++ b/README.es.md @@ -0,0 +1,1380 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | Español | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **Aviso de traducción automática** +> +> Este documento ha sido traducido automáticamente por IA. Aunque nos esforzamos por garantizar la calidad, pueden existir expresiones inexactas. +> +> ¡Ayúdanos a mejorar la traducción a través de [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260)! Tu retroalimentación es muy valiosa para nosotros. + +[![Versión](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![Licencia: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![Integración MCP](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Tests aprobados](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Tablero del proyecto](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![Versión PyPI](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Descargas](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Versión de Python](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Sitio web](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Seguir en Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![Estrellas en GitHub](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 La capa de datos para sistemas de IA.** Skill Seekers convierte sitios de documentación, repositorios de GitHub, PDFs, videos, notebooks, wikis y más de 10 tipos de fuentes adicionales en activos de conocimiento estructurado, listos para potenciar AI Skills (Claude, Gemini, OpenAI), pipelines RAG (LangChain, LlamaIndex, Pinecone) y asistentes de programación con IA (Cursor, Windsurf, Cline) en minutos, no en horas. + +> 🌠**[Visita SkillSeekersWeb.com](https://skillseekersweb.com/)** - ¡Explora más de 24 configuraciones predefinidas, comparte tus configuraciones y accede a la documentación completa! + +> 📋 **[Ver hoja de ruta y tareas de desarrollo](https://github.com/users/yusufkaraaslan/projects/2)** - ¡134 tareas en 10 categorías, elige cualquiera para contribuir! + +## 🌠Ecosistema + +Skill Seekers es un proyecto multi-repositorio. Aquí es donde vive todo: + +| Repositorio | Descripción | Enlaces | +|------------|-------------|---------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | CLI principal y servidor MCP (este repo) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Sitio web y documentación | [Web](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Repositorio de configuraciones comunitarias | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action para CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Plugin para Claude Code | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap para macOS | | + +> **¿Quieres contribuir?** ¡Los repos del sitio web y configuraciones son excelentes puntos de partida para nuevos colaboradores! + +## 🧠 La capa de datos para sistemas de IA + +**Skill Seekers es la capa universal de preprocesamiento** que se ubica entre la documentación sin procesar y cada sistema de IA que la consume. Ya sea que estés construyendo Claude Skills, un pipeline RAG con LangChain o un archivo `.cursorrules` para Cursor, la preparación de datos es idéntica. Lo haces una vez y exportas a todos los destinos. + +```bash +# Un comando → activo de conocimiento estructurado +skill-seekers create https://docs.react.dev/ +# o: skill-seekers create facebook/react +# o: skill-seekers create ./my-project + +# Exportar a cualquier sistema de IA +skill-seekers package output/react --target claude # → Claude AI Skill (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → Directorio de skill IBM Bob +``` + +### Lo que se genera + +| Salida | Destino | Para qué sirve | +|--------|---------|-----------------| +| **Claude Skill** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini Skill** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, asistentes personalizados | +| **LangChain Documents** | `--target langchain` | Cadenas QA, agentes, recuperadores | +| **LlamaIndex TextNodes** | `--target llama-index` | Motores de consulta, motores de chat | +| **Haystack Documents** | `--target haystack` | Pipelines RAG empresariales | +| **Pinecone-ready** (Markdown) | `--target markdown` | Carga de vectores | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Bases de datos vectoriales locales | +| **IBM Bob Skill** (directorio) | `--target ibm-bob` | Skills de proyecto/globales de IBM Bob | +| **Cursor** `.cursorrules` | `--target markdown` → copiar SKILL.md | `.cursorrules` del IDE Cursor | +| **Windsurf / Cline / Continue** | `--target claude` → copiar | VS Code, IntelliJ, Vim | + +### Por qué es importante + +- âš¡ **99% más rápido** — Días de preparación manual → 15–45 minutos +- 🎯 **Calidad de AI Skill** — Archivos SKILL.md de más de 500 líneas con ejemplos, patrones y guías +- 📊 **Fragmentos listos para RAG** — Fragmentación inteligente que preserva bloques de código y mantiene el contexto +- 🎬 **Videos** — Extrae código, transcripciones y conocimiento estructurado de YouTube y videos locales +- 🔄 **Multi-fuente** — Combina 18 tipos de fuentes (docs, GitHub, PDFs, videos, notebooks, wikis y más) en un solo activo de conocimiento +- 🌠**Una preparación, todos los destinos** — Exporta el mismo activo a 21 plataformas sin volver a extraer +- ✅ **Probado en producción** — Más de 3.700 tests, más de 24 presets de frameworks, listo para producción + +## 🚀 Inicio rápido (3 comandos) + +```bash +# 1. Instalar +pip install skill-seekers + +# 2. Crear skill desde cualquier fuente +skill-seekers create https://docs.django.com/ + +# 3. Empaquetar para tu plataforma de IA +skill-seekers package output/django --target claude +``` + +**¡Eso es todo!** Ahora tienes `output/django-claude.zip` listo para usar. + +```bash +# Usar un agente de IA diferente para la mejora (predeterminado: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ Escaneo de proyecto con IA (nuevo) + +Apunta `scan` a cualquier proyecto y un agente de IA lee sus manifiestos, README, +Dockerfile/CI e imports muestreados del código fuente — luego genera una configuración +por framework detectado más un `-codebase.json` para tu propio código. Fija la +versión detectada, de modo que volver a ejecutarlo reporta los cambios de versión: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Luego construye cualquiera de ellas +skill-seekers create ./configs/scanned/react.json +``` + +Si una detección no tiene un preset existente, la IA genera una configuración nueva; +al salir puedes publicarla opcionalmente en el [registro comunitario](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### Otras fuentes (18 soportadas) + +```bash +# Repositorio de GitHub +skill-seekers create facebook/react + +# Proyecto local +skill-seekers create ./my-project + +# Documento PDF +skill-seekers create manual.pdf + +# Documento Word +skill-seekers create report.docx + +# Libro electrónico EPUB +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# Especificación OpenAPI +skill-seekers create openapi.yaml + +# Presentación PowerPoint +skill-seekers create presentation.pptx + +# Documento AsciiDoc +skill-seekers create guide.adoc + +# Archivo HTML local (auto-detectado por la extensión) +skill-seekers create page.html + +# Directorio completo de archivos HTML (auto-detectado para directorios predominantemente HTML) +skill-seekers create ./mirror_output/site/ + +# Forzar modo HTML en un directorio mixto/con mucho código +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# Feed RSS/Atom +skill-seekers create feed.rss + +# Página de manual +skill-seekers create curl.1 + +# Video (YouTube, Vimeo o archivo local — requiere skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# ¿Primera vez? Instala automáticamente las dependencias visuales con detección de GPU: +skill-seekers create --setup + +# Wiki de Confluence +skill-seekers create --space-key TEAM --name wiki + +# Páginas de Notion +skill-seekers create --database-id ... --name docs + +# Exportación de chat de Slack/Discord +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Exportar a todas partes + +```bash +# Empaquetar para múltiples plataformas +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## ¿Qué es Skill Seekers? + +Skill Seekers es la **capa de datos para sistemas de IA**. Transforma 18 tipos de fuentes —sitios web de documentación, repositorios de GitHub, PDFs, videos, Jupyter Notebooks, documentos Word/EPUB/AsciiDoc, especificaciones OpenAPI, presentaciones PowerPoint, feeds RSS, páginas de manual, wikis de Confluence, páginas de Notion, exportaciones de Slack/Discord y más— en activos de conocimiento estructurado para cualquier destino de IA: + +| Caso de uso | Lo que obtienes | Ejemplos | +|-------------|-----------------|----------| +| **AI Skills** | SKILL.md completo + referencias | Claude Code, Gemini, GPT | +| **Pipelines RAG** | Documentos fragmentados con metadatos enriquecidos | LangChain, LlamaIndex, Haystack | +| **Bases de datos vectoriales** | Datos pre-formateados listos para carga | Pinecone, Chroma, Weaviate, FAISS | +| **Asistentes de programación con IA** | Archivos de contexto que tu IDE IA lee automáticamente | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 Documentación + +| Quiero... | Lee esto | +|-----------|----------| +| **Empezar rápidamente** | [Inicio rápido](docs/getting-started/02-quick-start.md) - 3 comandos hasta tu primer skill | +| **Entender los conceptos** | [Conceptos fundamentales](docs/user-guide/01-core-concepts.md) - Cómo funciona | +| **Extraer fuentes** | [Guía de extracción](docs/user-guide/02-scraping.md) - Todos los tipos de fuentes | +| **Mejorar skills** | [Guía de mejora](docs/user-guide/03-enhancement.md) - Mejora con IA | +| **Exportar skills** | [Guía de empaquetado](docs/user-guide/04-packaging.md) - Exportación a plataformas | +| **Consultar comandos** | [Referencia CLI](docs/reference/CLI_REFERENCE.md) - Los 20 comandos | +| **Configurar** | [Formato de configuración](docs/reference/CONFIG_FORMAT.md) - Especificación JSON | +| **Resolver problemas** | [Solución de problemas](docs/user-guide/06-troubleshooting.md) - Problemas comunes | + +**Documentación completa:** [docs/README.md](docs/README.md) + +En lugar de pasar días en preprocesamiento manual, Skill Seekers: + +1. **Ingesta** — documentación, repositorios de GitHub, bases de código locales, PDFs, videos, notebooks, wikis y más de 10 tipos de fuentes adicionales +2. **Analiza** — análisis profundo AST, detección de patrones, extracción de APIs +3. **Estructura** — archivos de referencia categorizados con metadatos +4. **Mejora** — generación de SKILL.md potenciada por IA (Claude, Gemini o local) +5. **Exporta** — 16 formatos específicos por plataforma desde un solo activo + +## ¿Por qué usar Skill Seekers? + +### Para constructores de AI Skills (Claude, Gemini, OpenAI) + +- 🎯 **Skills de nivel producción** — Archivos SKILL.md de más de 500 líneas con ejemplos de código, patrones y guías +- 🔄 **Flujos de mejora** — Aplica presets como `security-focus`, `architecture-comprehensive` o YAML personalizados +- 🎮 **Cualquier dominio** — Motores de juegos (Godot, Unity), frameworks (React, Django), herramientas internas +- 🔧 **Equipos** — Combina documentación interna + código en una única fuente de verdad +- 📚 **Calidad** — Mejorado con IA, incluye ejemplos, referencia rápida y guía de navegación + +### Para constructores de RAG e ingenieros de IA + +- 🤖 **Datos listos para RAG** — `Documents` de LangChain, `TextNodes` de LlamaIndex y `Documents` de Haystack pre-fragmentados +- 🚀 **99% más rápido** — Días de preprocesamiento → 15–45 minutos +- 📊 **Metadatos inteligentes** — Categorías, fuentes, tipos → mayor precisión en la recuperación +- 🔄 **Multi-fuente** — Combina docs + GitHub + PDFs + videos en un solo pipeline +- 🌠**Agnóstico de plataforma** — Exporta a cualquier base de datos vectorial o framework sin volver a extraer + +### Para usuarios de asistentes de programación con IA + +- 💻 **Cursor / Windsurf / Cline** — Genera `.cursorrules` / `.windsurfrules` / `.clinerules` automáticamente +- 🎯 **Contexto persistente** — La IA "conoce" tus frameworks sin necesidad de repetir prompts +- 📚 **Siempre actualizado** — Actualiza el contexto en minutos cuando cambia la documentación + +## Funcionalidades clave + +### 🌠Extracción de documentación +- ✅ **Descubrimiento SPA inteligente** - Descubrimiento en tres capas para sitios SPA con JavaScript (sitemap.xml → llms.txt → renderizado con navegador headless) +- ✅ **Soporte para llms.txt** - Detecta y usa automáticamente archivos de documentación optimizados para LLM (10 veces más rápido) +- ✅ **Scraper universal** - Funciona con CUALQUIER sitio web de documentación +- ✅ **Categorización inteligente** - Organiza automáticamente el contenido por tema +- ✅ **Detección de lenguajes de código** - Reconoce Python, JavaScript, C++, GDScript, etc. +- ✅ **Más de 24 presets listos para usar** - Godot, React, Vue, Django, FastAPI y más + +### 📄 Soporte para PDF +- ✅ **Extracción básica de PDF** - Extrae texto, código e imágenes de archivos PDF +- ✅ **OCR para PDFs escaneados** - Extrae texto de documentos escaneados +- ✅ **PDFs protegidos con contraseña** - Maneja PDFs cifrados +- ✅ **Extracción de tablas** - Extrae tablas complejas de PDFs +- ✅ **Procesamiento en paralelo** - 3 veces más rápido para PDFs grandes +- ✅ **Caché inteligente** - 50% más rápido en ejecuciones posteriores + +### 🎬 Extracción de video +- ✅ **YouTube y videos locales** - Extrae transcripciones, código en pantalla y conocimiento estructurado de videos +- ✅ **Análisis visual de fotogramas** - Extracción OCR de editores de código, terminales, diapositivas y diagramas +- ✅ **Detección automática de GPU** - Instala automáticamente la compilación correcta de PyTorch (CUDA/ROCm/MPS/CPU) +- ✅ **Mejora con IA** - Dos pasadas: limpieza de artefactos OCR + generación de SKILL.md pulido +- ✅ **Recorte temporal** - Extrae secciones específicas con `--start-time` y `--end-time` +- ✅ **Soporte para listas de reproducción** - Procesa por lotes todos los videos de una lista de reproducción de YouTube +- ✅ **Respaldo con Vision API** - Usa Claude Vision para fotogramas OCR de baja confianza + +### 🙠Análisis de repositorios de GitHub +- ✅ **Análisis profundo de código** - Análisis AST para Python, JavaScript, TypeScript, Java, C++, Go +- ✅ **Extracción de APIs** - Funciones, clases, métodos con parámetros y tipos +- ✅ **Metadatos del repositorio** - README, árbol de archivos, desglose de lenguajes, estrellas/forks +- ✅ **GitHub Issues y PRs** - Obtiene issues abiertos/cerrados con etiquetas e hitos +- ✅ **CHANGELOG y releases** - Extrae automáticamente el historial de versiones +- ✅ **Detección de conflictos** - Compara APIs documentadas vs. implementación real del código +- ✅ **Integración MCP** - Lenguaje natural: "Extrae el repositorio de GitHub facebook/react" + +### 🔄 Extracción unificada multi-fuente +- ✅ **Combina múltiples fuentes** - Mezcla documentación + GitHub + PDF en un solo skill +- ✅ **Detección de conflictos** - Encuentra automáticamente discrepancias entre docs y código +- ✅ **Fusión inteligente** - Resolución de conflictos basada en reglas o potenciada por IA +- ✅ **Informes transparentes** - Comparación lado a lado con advertencias âš ï¸ +- ✅ **Análisis de brechas en documentación** - Identifica docs obsoletos y funcionalidades no documentadas +- ✅ **Fuente única de verdad** - Un solo skill que muestra tanto la intención (docs) como la realidad (código) +- ✅ **Compatible con versiones anteriores** - Las configuraciones de fuente única legacy siguen funcionando + +### 🤖 Soporte para múltiples plataformas LLM +- ✅ **12 plataformas LLM** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown genérico, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **Extracción universal** - La misma documentación funciona para todas las plataformas +- ✅ **Empaquetado específico por plataforma** - Formatos optimizados para cada LLM +- ✅ **Exportación con un solo comando** - El flag `--target` selecciona la plataforma +- ✅ **Dependencias opcionales** - Instala solo lo que necesitas +- ✅ **100% compatible con versiones anteriores** - Los flujos de trabajo existentes de Claude no cambian + +| Plataforma | Formato | Carga | Mejora | API Key | Endpoint personalizado | +|------------|---------|-------|--------|---------|------------------------| +| **Claude AI** | ZIP + YAML | ✅ Automática | ✅ Sí | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Automática | ✅ Sí | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Automática | ✅ Sí | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Automática | ✅ Sí | MINIMAX_API_KEY | - | +| **Markdown genérico** | ZIP | ⌠Manual | ⌠No | - | - | + +```bash +# Claude (predeterminado - ¡sin cambios necesarios!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Markdown genérico (exportación universal) +skill-seekers package output/react/ --target markdown +# Usa los archivos markdown directamente en cualquier LLM +``` + +
+🔧 Usa tu propio proveedor de IA (endpoints compatibles con OpenAI + suscripciones, sin necesidad de créditos de Anthropic) + +El paso opcional de **mejora** con IA (usado por `create`, `scan` y `enhance`) **no** requiere una clave de Anthropic. Tienes tres formas de alimentarlo: + +**1. Usa una suscripción que ya pagas — sin créditos de API (modo agente LOCAL)** + +Skill Seekers puede delegar en una CLI de agente de programación en la que ya tienes sesión iniciada, de modo que la mejora se ejecuta con tu plan existente en lugar de tokens de API medidos: + +```bash +skill-seekers create --agent codex # CLI de OpenAI Codex → tu ChatGPT Plus +skill-seekers create --agent claude # Claude Code → tu Claude Pro/Max +``` + +Agentes soportados: `claude`, `codex`, `copilot`, `opencode`, `kimi` y `custom` +(combina `--agent custom` con `--agent-cmd " ..."` para usar cualquier otra herramienta). + +**2. Cualquier proveedor compatible con OpenAI (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Todos ellos exponen un endpoint `/v1` compatible con OpenAI. Apunta Skill Seekers a uno de ellos con tres variables de entorno — detecta `OPENAI_API_KEY`, y el SDK de OpenAI respeta `OPENAI_BASE_URL` automáticamente: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # endpoint del proveedor (ver tabla) +export OPENAI_MODEL="" # requerido — el predeterminado gpt-4o no existirá en otros proveedores +skill-seekers create +``` + +| Proveedor | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> La detección de proveedor elige la **primera** variable de entorno de API key que encuentra (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Configura `SKILL_SEEKER_PROVIDER` para forzar un proveedor específico, o asegúrate de que las claves de mayor prioridad no estén definidas. + +**3. Endpoints compatibles con Claude (ej. GLM, proxies)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) y Kimi/Moonshot (`MOONSHOT_API_KEY`) también están soportados de forma nativa. Consulta la **[Referencia de variables de entorno](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** para la lista completa, incluidas las sobrescrituras de modelo por proveedor. + +
+ +**Instalación:** +```bash +# Instalar con soporte para Gemini +pip install skill-seekers[gemini] + +# Instalar con soporte para OpenAI +pip install skill-seekers[openai] + +# Instalar con soporte para MiniMax +pip install skill-seekers[minimax] + +# Instalar con todas las plataformas LLM +pip install skill-seekers[all-llms] +``` + +### 🔗 Integraciones con frameworks RAG + +- ✅ **LangChain Documents** - Exportación directa al formato `Document` con `page_content` + metadatos + - Ideal para: cadenas QA, recuperadores, almacenes de vectores, agentes + - Ejemplo: [Pipeline RAG con LangChain](examples/langchain-rag-pipeline/) + - Guía: [Integración con LangChain](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - Exportación al formato `TextNode` con IDs únicos + embeddings + - Ideal para: motores de consulta, motores de chat, contexto de almacenamiento + - Ejemplo: [Motor de consulta LlamaIndex](examples/llama-index-query-engine/) + - Guía: [Integración con LlamaIndex](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Formato listo para Pinecone** - Optimizado para carga en bases de datos vectoriales + - Ideal para: búsqueda vectorial en producción, búsqueda semántica, búsqueda híbrida + - Ejemplo: [Carga en Pinecone](examples/pinecone-upsert/) + - Guía: [Integración con Pinecone](docs/integrations/PINECONE.md) + +**Exportación rápida:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (universal) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Guía completa de pipelines RAG:** [Documentación de pipelines RAG](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 Integraciones con asistentes de programación con IA + +Transforma cualquier documentación de framework en contexto experto de programación para más de 4 asistentes de IA: + +- ✅ **Cursor IDE** - Genera `.cursorrules` para sugerencias de código potenciadas por IA + - Ideal para: generación de código específica por framework, patrones consistentes + - Funciona con: Cursor IDE (fork de VS Code) + - Guía: [Integración con Cursor](docs/integrations/CURSOR.md) + - Ejemplo: [Skill de React para Cursor](examples/cursor-react-skill/) + +- ✅ **Windsurf** - Personaliza el contexto del asistente IA de Windsurf con `.windsurfrules` + - Ideal para: asistencia IA nativa del IDE, programación basada en flujos + - Funciona con: Windsurf IDE de Codeium + - Guía: [Integración con Windsurf](docs/integrations/WINDSURF.md) + - Ejemplo: [Contexto FastAPI para Windsurf](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - Prompts de sistema + MCP para el agente de VS Code + - Ideal para: generación de código agéntica en VS Code + - Funciona con: extensión Cline para VS Code + - Guía: [Integración con Cline](docs/integrations/CLINE.md) + - Ejemplo: [Asistente Django para Cline](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - Servidores de contexto para IA independiente del IDE + - Ideal para: entornos multi-IDE (VS Code, JetBrains, Vim), proveedores LLM personalizados + - Funciona con: cualquier IDE con el plugin Continue.dev + - Guía: [Integración con Continue](docs/integrations/CONTINUE_DEV.md) + - Ejemplo: [Contexto universal de Continue](examples/continue-dev-universal/) + +**Exportación rápida para herramientas de programación con IA:** +```bash +# Para cualquier asistente de programación con IA (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # o --target markdown + +# Copiar a tu proyecto (ejemplo para Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# O para Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# O para Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# O para Continue.dev (servidor HTTP) +python examples/continue-dev-universal/context_server.py +# Configurar en ~/.continue/config.json +``` + +**Centro de integraciones:** [Todas las integraciones con sistemas de IA](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Arquitectura de tres flujos para GitHub +- ✅ **Análisis de triple flujo** - Divide los repos de GitHub en flujos de Código, Documentación e Insights +- ✅ **Analizador de código unificado** - Funciona con URLs de GitHub Y rutas locales +- ✅ **C3.x como profundidad de análisis** - Elige entre 'basic' (1–2 min) o 'c3x' (20–60 min) +- ✅ **Generación mejorada del router** - Metadatos de GitHub, inicio rápido del README, problemas comunes +- ✅ **Integración de issues** - Problemas principales y soluciones desde GitHub Issues +- ✅ **Palabras clave de enrutamiento inteligente** - Etiquetas de GitHub con peso 2x para mejor detección de temas + +**Los tres flujos explicados:** +- **Flujo 1: Código** - Análisis profundo C3.x (patrones, ejemplos, guías, configuraciones, arquitectura) +- **Flujo 2: Documentación** - Documentación del repositorio (README, CONTRIBUTING, docs/*.md) +- **Flujo 3: Insights** - Conocimiento de la comunidad (issues, etiquetas, estrellas, forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# Analizar repositorio de GitHub con los tres flujos +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # o "basic" para análisis rápido + fetch_github_metadata=True +) + +# Acceder al flujo de código (análisis C3.x) +print(f"Design patterns: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Test examples: {result.code_analysis['c3_2_examples_count']}") + +# Acceder al flujo de documentación (docs del repositorio) +print(f"README: {result.github_docs['readme'][:100]}") + +# Acceder al flujo de insights (metadatos de GitHub) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"Common issues: {len(result.github_insights['common_problems'])}") +``` + +**Documentación completa**: [Resumen de implementación de tres flujos](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Gestión inteligente de límites de tasa y configuración +- ✅ **Sistema de configuración multi-token** - Gestiona múltiples cuentas de GitHub (personal, trabajo, OSS) + - Almacenamiento seguro de configuración en `~/.config/skill-seekers/config.json` (permisos 600) + - Estrategias de límite de tasa por perfil: `prompt`, `wait`, `switch`, `fail` + - Timeout configurable por perfil (predeterminado: 30 min, evita esperas indefinidas) + - Cadena inteligente de respaldo: argumento CLI → variable de entorno → archivo de configuración → prompt + - Gestión de API keys para Claude, Gemini, OpenAI +- ✅ **Asistente de configuración interactivo** - Interfaz de terminal atractiva para fácil configuración + - Integración con navegador para creación de tokens (abre automáticamente GitHub, etc.) + - Validación de tokens y pruebas de conexión + - Visualización de estado con códigos de color +- ✅ **Manejador inteligente de límites de tasa** - ¡No más esperas indefinidas! + - Advertencia anticipada sobre límites de tasa (60/hora vs 5000/hora) + - Detección en tiempo real desde las respuestas de la API de GitHub + - Temporizadores de cuenta regresiva en vivo con progreso + - Cambio automático de perfil cuando se alcanza el límite + - Cuatro estrategias: prompt (preguntar), wait (cuenta regresiva), switch (cambiar a otro), fail (abortar) +- ✅ **Capacidad de reanudación** - Continúa trabajos interrumpidos + - Auto-guardado de progreso en intervalos configurables (predeterminado: 60 seg) + - Lista todos los trabajos reanudables con detalles de progreso + - Limpieza automática de trabajos antiguos (predeterminado: 7 días) +- ✅ **Soporte CI/CD** - Modo no interactivo para automatización + - Flag `--non-interactive` que falla rápidamente sin prompts + - Flag `--profile` para seleccionar una cuenta de GitHub específica + - Mensajes de error claros para logs de pipelines + +**Configuración rápida:** +```bash +# Configuración única (5 minutos) +skill-seekers config --github + +# Usar perfil específico para repos privados +skill-seekers create mycompany/private-repo --profile work + +# Modo CI/CD (fallo rápido, sin prompts) +skill-seekers create owner/repo --non-interactive + +# Reanudar trabajo interrumpido +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Estrategias de límite de tasa explicadas:** +- **prompt** (predeterminado) - Pregunta qué hacer cuando se alcanza el límite (esperar, cambiar, configurar token, cancelar) +- **wait** - Espera automáticamente con temporizador de cuenta regresiva (respeta el timeout) +- **switch** - Intenta automáticamente el siguiente perfil disponible (para configuraciones multi-cuenta) +- **fail** - Falla inmediatamente con error claro (perfecto para CI/CD) + +### 🎯 Skill Bootstrap - Auto-alojamiento + +Genera skill-seekers como un skill para usarlo dentro de tu agente de IA (Claude Code, Kimi, Codex, etc.): + +```bash +# Generar el skill +./scripts/bootstrap_skill.sh + +# Instalar en Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**Lo que obtienes:** +- ✅ **Documentación completa del skill** - Todos los comandos CLI y patrones de uso +- ✅ **Referencia de comandos CLI** - Cada herramienta y sus opciones documentadas +- ✅ **Ejemplos de inicio rápido** - Flujos de trabajo comunes y mejores prácticas +- ✅ **Documentación de API auto-generada** - Análisis de código, patrones y ejemplos + +### 🔠Repositorios de configuración privados +- ✅ **Fuentes de configuración basadas en Git** - Obtén configuraciones desde repositorios git privados/de equipo +- ✅ **Gestión multi-fuente** - Registra repositorios ilimitados de GitHub, GitLab, Bitbucket +- ✅ **Colaboración en equipo** - Comparte configuraciones personalizadas entre equipos de 3–5 personas +- ✅ **Soporte empresarial** - Escala a más de 500 desarrolladores con resolución basada en prioridad +- ✅ **Autenticación segura** - Tokens como variables de entorno (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Caché inteligente** - Clona una vez, obtiene actualizaciones automáticamente +- ✅ **Modo offline** - Trabaja con configuraciones en caché cuando no hay conexión + +### 🤖 Análisis de código (C3.x) + +**C3.4: Extracción de patrones de configuración con mejora por IA** +- ✅ **9 formatos de configuración** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 tipos de patrones** - Configuraciones de base de datos, API, logging, caché, correo, autenticación, servidor +- ✅ **Mejora con IA** - Análisis IA opcional en modo dual (API + LOCAL) + - Explica qué hace cada configuración + - Sugiere mejores prácticas y mejoras + - **Análisis de seguridad** - Encuentra secretos codificados y credenciales expuestas +- ✅ **Auto-documentación** - Genera documentación JSON + Markdown de todas las configuraciones +- ✅ **Integración MCP** - Herramienta `extract_config_patterns` con soporte de mejora + +**C3.3: Guías prácticas mejoradas con IA** +- ✅ **Mejora integral con IA** - Transforma guías básicas en tutoriales profesionales +- ✅ **5 mejoras automáticas** - Descripciones de pasos, solución de problemas, prerrequisitos, siguientes pasos, casos de uso +- ✅ **Soporte de modo dual** - Modo API (Claude API) o modo LOCAL (Claude Code CLI) +- ✅ **Sin costos con modo LOCAL** - Mejora GRATUITA usando tu plan Claude Code Max +- ✅ **Transformación de calidad** - Plantillas de 75 líneas → guías completas de más de 500 líneas + +**Uso:** +```bash +# Análisis rápido (1–2 min, solo funciones básicas) +skill-seekers scan tests/ --quick + +# Análisis completo con IA (20–60 min, todas las funciones) +skill-seekers scan tests/ --comprehensive + +# Con mejora por IA +skill-seekers scan tests/ --enhance +``` + +**Documentación completa:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 Presets de flujo de trabajo de mejora + +Pipelines de mejora reutilizables definidos en YAML que controlan cómo la IA transforma tu documentación sin procesar en un skill pulido. + +- ✅ **5 presets incluidos** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **Presets definidos por el usuario** — añade flujos personalizados a `~/.config/skill-seekers/workflows/` +- ✅ **Múltiples flujos de trabajo** — encadena dos o más flujos en un solo comando +- ✅ **CLI completamente gestionado** — lista, inspecciona, copia, añade, elimina y valida flujos de trabajo + +```bash +# Aplicar un solo flujo de trabajo +skill-seekers create ./my-project --enhance-workflow security-focus + +# Encadenar múltiples flujos de trabajo (se aplican en orden) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Gestionar presets +skill-seekers workflows list # Listar todos (incluidos + usuario) +skill-seekers workflows show security-focus # Mostrar contenido YAML +skill-seekers workflows copy security-focus # Copiar al directorio de usuario para editar +skill-seekers workflows add ./my-workflow.yaml # Instalar un preset personalizado +skill-seekers workflows remove my-workflow # Eliminar un preset de usuario +skill-seekers workflows validate security-focus # Validar estructura del preset + +# Copiar varios a la vez +skill-seekers workflows copy security-focus minimal api-documentation + +# Añadir varios archivos a la vez +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Eliminar varios a la vez +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**Formato de preset YAML:** +```yaml +name: security-focus +description: "Security-focused review: vulnerabilities, auth, data handling" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Review for OWASP top 10 and common security vulnerabilities..." + - name: auth-review + type: custom + prompt: "Examine authentication and authorisation patterns..." + uses_history: true +``` + +### âš¡ Rendimiento y escalabilidad +- ✅ **Modo asíncrono** - Extracción 2–3x más rápida con async/await (usa el flag `--async`) +- ✅ **Soporte para documentación grande** - Maneja documentos de 10K–40K+ páginas con división inteligente +- ✅ **Skills Router/Hub** - Enrutamiento inteligente hacia sub-skills especializados +- ✅ **Extracción en paralelo** - Procesa múltiples skills simultáneamente +- ✅ **Checkpoint/Reanudación** - Nunca pierdas progreso en extracciones largas +- ✅ **Sistema de caché** - Extrae una vez, reconstruye instantáneamente + +### 🤖 Generación de skills agnóstica al agente +- ✅ **Soporte multi-agente** - Genera skills para Claude, Kimi, Codex, Copilot, OpenCode o cualquier agente personalizado mediante el flag `--agent` +- ✅ **Comandos de agente personalizados** - Usa `--agent-cmd` para especificar un comando CLI de agente personalizado para la mejora +- ✅ **Flags universales** - `--agent` y `--agent-cmd` disponibles en todos los comandos (create, scrape, github, pdf, etc.) + +### 📦 Pipeline de Marketplace +- ✅ **Publicar en el marketplace** - Publica skills en repositorios del marketplace de plugins de Claude Code +- ✅ **Pipeline de extremo a extremo** - Desde la fuente de documentación hasta la entrada publicada en el marketplace + +### ✅ Garantía de calidad +- ✅ **Completamente probado** - Más de 3.700 tests con cobertura completa + +--- + +## 📦 Instalación + +```bash +# Instalación básica (extracción de documentación, análisis de GitHub, PDF, empaquetado) +pip install skill-seekers + +# Con soporte para todas las plataformas LLM +pip install skill-seekers[all-llms] + +# Con servidor MCP +pip install skill-seekers[mcp] + +# Todo incluido +pip install skill-seekers[all] +``` + +**¿Necesitas ayuda para elegir?** Ejecuta el asistente de configuración: +```bash +skill-seekers-setup +``` + +### Opciones de instalación + +| Instalación | Funcionalidades | +|-------------|-----------------| +| `pip install skill-seekers` | Extracción, análisis de GitHub, PDF, todas las plataformas | +| `pip install skill-seekers[gemini]` | + Soporte para Google Gemini | +| `pip install skill-seekers[openai]` | + Soporte para OpenAI ChatGPT | +| `pip install skill-seekers[all-llms]` | + Todas las plataformas LLM | +| `pip install skill-seekers[mcp]` | + Servidor MCP para Claude Code, Cursor, etc. | +| `pip install skill-seekers[video]` | + Extracción de transcripciones y metadatos de YouTube/Vimeo | +| `pip install skill-seekers[video-full]` | + Transcripción Whisper y extracción visual de fotogramas | +| `pip install skill-seekers[jupyter]` | + Soporte para Jupyter Notebook | +| `pip install skill-seekers[pptx]` | + Soporte para PowerPoint | +| `pip install skill-seekers[confluence]` | + Soporte para wiki de Confluence | +| `pip install skill-seekers[notion]` | + Soporte para páginas de Notion | +| `pip install skill-seekers[rss]` | + Soporte para feeds RSS/Atom | +| `pip install skill-seekers[chat]` | + Soporte para exportación de chat de Slack/Discord | +| `pip install skill-seekers[asciidoc]` | + Soporte para documentos AsciiDoc | +| `pip install skill-seekers[all]` | Todo habilitado | + +> **Dependencias visuales para video (detección de GPU):** Después de instalar `skill-seekers[video-full]`, ejecuta +> `skill-seekers create --setup` para detectar automáticamente tu GPU e instalar la variante correcta de PyTorch +> + easyocr. Esta es la forma recomendada de instalar las dependencias de extracción visual. + +--- + +## 🚀 Flujo de trabajo de instalación con un solo comando + +**La forma más rápida de ir desde la configuración hasta el skill subido - automatización completa:** + +```bash +# Instalar skill de React desde las configuraciones oficiales (se sube automáticamente a Claude) +skill-seekers install --config react + +# Instalar desde archivo de configuración local +skill-seekers install --config configs/custom.json + +# Instalar sin subir (solo empaquetar) +skill-seekers install --config django --no-upload + +# Previsualizar flujo de trabajo sin ejecutar +skill-seekers install --config react --dry-run +``` + +**Tiempo:** 20–45 minutos en total | **Calidad:** Listo para producción (9/10) | **Costo:** Gratis + +**Fases ejecutadas:** +``` +📥 FASE 1: Obtener configuración (si se proporciona nombre de configuración) +📖 FASE 2: Extraer documentación +✨ FASE 3: Mejora con IA (OBLIGATORIA - sin opción de omitir) +📦 FASE 4: Empaquetar skill +â˜ï¸ FASE 5: Subir a Claude (opcional, requiere API key) +``` + +**Requisitos:** +- Variable de entorno ANTHROPIC_API_KEY (para subida automática) +- Plan Claude Code Max (para mejora local con IA), o usa `--agent` para seleccionar un agente de IA diferente + +--- + +## 📊 Matriz de funcionalidades + +Skill Seekers soporta **12 plataformas LLM**, **8 destinos RAG/vectoriales**, **18 tipos de fuentes** y paridad total de funcionalidades en todos los destinos. + +**Plataformas:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown genérico, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Tipos de fuentes:** Sitios web de documentación, repos de GitHub, PDFs, Word (.docx), EPUB, Video, Bases de código locales, Jupyter Notebooks, HTML local, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), feeds RSS/Atom, páginas de manual, wikis de Confluence, páginas de Notion, exportaciones de chat de Slack/Discord + +Consulta la [Matriz completa de funcionalidades](docs/reference/FEATURE_MATRIX.md) para información detallada de soporte por plataforma y funcionalidad. + +### Comparación rápida de plataformas + +| Funcionalidad | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------------|--------|--------|--------|---------|----------| +| Formato | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Carga | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Manual | +| Mejora | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠Ninguna | +| Todos los modos de skill | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Ejemplos de uso + +### Extracción de documentación + +```bash +# Extraer sitio web de documentación +skill-seekers create --config configs/react.json + +# Extracción rápida sin configuración +skill-seekers create https://react.dev --name react + +# Con modo asíncrono (3x más rápido) +skill-seekers create --config configs/godot.json --async --workers 8 + +# Usar un agente de IA específico para la mejora +skill-seekers create --config configs/react.json --agent kimi +``` + +### Extracción de PDF + +```bash +# Extracción básica de PDF +skill-seekers create --pdf docs/manual.pdf --name myskill + +# Funciones avanzadas +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Extraer tablas + --parallel \ # Procesamiento paralelo rápido + --workers 8 # Usar 8 núcleos de CPU + +# PDFs escaneados (requiere: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Extracción de video + +```bash +# Instalar soporte para video +pip install skill-seekers[video] # Transcripciones + metadatos +pip install skill-seekers[video-full] # + Whisper + extracción visual de fotogramas + +# Detectar GPU automáticamente e instalar dependencias visuales (PyTorch + easyocr) +skill-seekers create --setup + +# Extraer de video de YouTube +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Extraer de una lista de reproducción de YouTube +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Extraer de un archivo de video local +skill-seekers create --video-file recording.mp4 --name myrecording + +# Extraer con análisis visual de fotogramas (requiere dependencias video-full) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# Con mejora por IA (limpia OCR + genera SKILL.md pulido) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Recortar una sección específica de un video (soporta segundos, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Usar Vision API para fotogramas OCR de baja confianza (requiere ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Reconstruir skill desde datos previamente extraídos (saltar descarga) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Guía completa:** Consulta [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) para la referencia CLI completa, +> detalles del pipeline visual, opciones de mejora con IA y solución de problemas. + +### Análisis de repositorios de GitHub + +```bash +# Extracción básica de repositorio +skill-seekers create facebook/react + +# Con autenticación (límites de tasa más altos) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Personalizar qué incluir +skill-seekers create django/django \ + --include-issues \ # Extraer GitHub Issues + --max-issues 100 \ # Limitar cantidad de issues + --include-changelog # Extraer CHANGELOG.md +``` + +### Extracción unificada multi-fuente + +**Combina documentación + GitHub + PDF en un solo skill unificado con detección de conflictos:** + +```bash +# Usar configuraciones unificadas existentes +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# O crear configuración unificada +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**La detección de conflictos encuentra automáticamente:** +- 🔴 **Falta en el código** (alto): Documentado pero no implementado +- 🟡 **Falta en la documentación** (medio): Implementado pero no documentado +- âš ï¸ **Discrepancia de firma**: Parámetros/tipos diferentes +- â„¹ï¸ **Discrepancia de descripción**: Explicaciones diferentes + +**Guía completa:** Consulta [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) para documentación completa. + +### Repositorios de configuración privados + +**Comparte configuraciones personalizadas entre equipos usando repositorios git privados:** + +```bash +# Opción 1: Usando herramientas MCP (recomendado) +# Registrar el repo privado de tu equipo +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Obtener configuración del repo del equipo +fetch_config(source="team", config_name="internal-api") +``` + +**Plataformas soportadas:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Guía completa:** Consulta [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) para documentación completa. + +## Cómo funciona + +```mermaid +graph LR + A[Sitio web de documentación] --> B[Skill Seekers] + B --> C[Scraper] + B --> D[Mejora con IA] + B --> E[Empaquetador] + C --> F[Referencias organizadas] + D --> F + F --> E + E --> G[AI Skill .zip] + G --> H[Subir a la plataforma de IA] +``` + +0. **Detectar llms.txt** - Primero verifica llms-full.txt, llms.txt, llms-small.txt (parte del descubrimiento SPA inteligente) +1. **Extraer**: Extrae todas las páginas de la documentación +2. **Categorizar**: Organiza el contenido en temas (API, guías, tutoriales, etc.) +3. **Mejorar**: La IA analiza los docs y crea un SKILL.md completo con ejemplos (soporta múltiples agentes mediante `--agent`) +4. **Empaquetar**: Agrupa todo en un archivo `.zip` listo para la plataforma + +## Arquitectura + +El sistema está organizado en **8 módulos principales** y **5 módulos de utilidades** (~200 clases en total): + +![Vista general de paquetes](docs/UML/exports/00_package_overview.png) + +| Módulo | Propósito | Clases clave | +|--------|-----------|--------------| +| **CLICore** | Despachador de comandos al estilo Git | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 extractores por tipo de fuente | `DocToSkillConverter`, `DocumentSkillBuilder` (capa de construcción compartida), `UnifiedScraper` | +| **Adaptors** | 20+ formatos de plataformas de salida | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | Pipeline de análisis de código C3.x | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 detectores GoF | +| **Enhancement** | Mejora de skills con IA mediante `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Empaquetar, subir e instalar skills | `PackageSkill`, `InstallAgent` | +| **MCP** | Servidor FastMCP (40 herramientas) | `SkillSeekerMCPServer`, 10 módulos de herramientas | +| **Sync** | Detección de cambios en la documentación | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Módulos de utilidades: **Parsers** (28 parsers CLI), **Storage** (S3/GCS/Azure), **Embedding** (vectores multi-proveedor), **Benchmark** (rendimiento), **Utilities** (16 helpers compartidos). + +Diagramas UML completos: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | Proyecto StarUML: `docs/UML/skill_seekers.mdj` | Referencia API en HTML: `docs/UML/html/` + +## 📋 Prerrequisitos + +**Antes de empezar, asegúrate de tener:** + +1. **Python 3.10 o superior** - [Descargar](https://www.python.org/downloads/) | Verificar: `python3 --version` +2. **Git** - [Descargar](https://git-scm.com/) | Verificar: `git --version` +3. **15–30 minutos** para la configuración inicial + +**¿Primera vez?** → **[Empieza aquí: Guía de inicio rápido a prueba de fallos](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Subir skills a Claude + +Una vez empaquetado tu skill, necesitas subirlo a Claude: + +### Opción 1: Subida automática (basada en API) + +```bash +# Configurar tu API key (una sola vez) +export ANTHROPIC_API_KEY=sk-ant-... + +# Empaquetar y subir automáticamente +skill-seekers package output/react/ --upload + +# O subir un .zip existente +skill-seekers upload output/react.zip +``` + +### Opción 2: Subida manual (sin API Key) + +```bash +# Empaquetar skill +skill-seekers package output/react/ +# → Crea output/react.zip + +# Luego subir manualmente: +# - Ve a https://claude.ai/skills +# - Haz clic en "Upload Skill" +# - Selecciona output/react.zip +``` + +### Opción 3: MCP (Claude Code) + +``` +En Claude Code, simplemente pide: +"Empaqueta y sube el skill de React" +``` + +--- + +## 🤖 Instalación en agentes de IA + +Skill Seekers puede instalar automáticamente skills en 19 agentes de programación con IA. + +```bash +# Instalar en un agente específico +skill-seekers install-agent output/react/ --agent cursor + +# Instalar en IBM Bob (local al proyecto: .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Instalar en todos los agentes a la vez +skill-seekers install-agent output/react/ --agent all + +# Previsualizar sin instalar +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Agentes soportados + +| Agente | Ruta | Tipo | +|--------|------|------| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Proyecto | +| **VS Code / Copilot** | `.github/skills/` | Proyecto | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Proyecto | +| **Cline** | `.cline/skills/` | Proyecto | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Proyecto | +| **Kilo Code** | `.kilo/skills/` | Proyecto | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Proyecto | + +--- + +## 🔌 Integración MCP (40 herramientas) + +Skill Seekers incluye un servidor MCP para usar desde Claude Code, Cursor, Windsurf, VS Code + Cline o IntelliJ IDEA. + +```bash +# Modo stdio (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# Modo HTTP (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Auto-configurar todos los agentes a la vez +./setup_mcp.sh +``` + +**Las 40 herramientas disponibles:** +- **Core (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **Extendidas (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Bases de datos vectoriales (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Nube (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Guía completa:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Configuración + +### Presets disponibles (más de 24) + +```bash +# Listar todos los presets +# skill-seekers list-configs # No disponible en v3.7.0 +``` + +| Categoría | Presets | +|-----------|---------| +| **Frameworks Web** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Desarrollo de juegos** | `godot`, `pygame`, `unity` | +| **Herramientas y DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Unificados (Docs + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` y más | + +### Crear tu propia configuración + +```bash +# Opción 1: Interactivo +skill-seekers create --interactive + +# Opción 2: Copiar y editar un preset +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Estructura del archivo de configuración + +```json +{ + "name": "myframework", + "description": "When to use this skill", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Dónde almacenar las configuraciones + +La herramienta busca en este orden: +1. Ruta exacta proporcionada +2. `./configs/` (directorio actual) +3. `~/.config/skill-seekers/configs/` (directorio de configuración del usuario) +4. API de SkillSeekersWeb.com (configuraciones predefinidas) + +--- + +## 📊 Lo que se crea + +``` +output/ +├── godot_data/ # Datos sin procesar extraídos +│ ├── pages/ # Archivos JSON (uno por página) +│ └── summary.json # Resumen general +│ +└── godot/ # El skill + ├── SKILL.md # Mejorado con ejemplos reales + ├── references/ # Docs categorizados + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # Vacío (añade los tuyos) + └── assets/ # Vacío (añade los tuyos) +``` + +--- + +## 🛠Solución de problemas + +### ¿No se extrajo contenido? +- Verifica tu selector `main_content` +- Prueba con: `article`, `main`, `div[role="main"]` + +### ¿Los datos existen pero no se usan? +```bash +# Forzar re-extracción +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### ¿Categorías incorrectas? +Edita la sección `categories` de la configuración con mejores palabras clave. + +### ¿Quieres actualizar la documentación? +```bash +# Eliminar datos antiguos y volver a extraer +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### ¿La mejora no funciona? +```bash +# Verificar si la API key está configurada +echo $ANTHROPIC_API_KEY + +# Probar modo LOCAL (usa Claude Code Max, no requiere API key) +skill-seekers enhance output/react/ --mode LOCAL + +# Monitorear el estado de mejora en segundo plano +skill-seekers enhance-status output/react/ --watch +``` + +### ¿Problemas con límite de tasa de GitHub? +```bash +# Configurar un token de GitHub (5000 req/hora vs 60/hora anónimo) +export GITHUB_TOKEN=ghp_your_token_here + +# O configurar múltiples perfiles +skill-seekers config --github +``` + +--- + +## 📈 Rendimiento + +| Tarea | Tiempo | Notas | +|-------|--------|-------| +| Extracción (síncrona) | 15–45 min | Solo la primera vez, basado en hilos | +| Extracción (asíncrona) | 5–15 min | 2–3x más rápido con el flag `--async` | +| Construcción | 1–3 min | Reconstrucción rápida desde caché | +| Reconstrucción | <1 min | Con `--skip-scrape` | +| Mejora (LOCAL) | 30–60 seg | Usa Claude Code Max | +| Mejora (API) | 20–40 seg | Requiere API key | +| Video (transcripción) | 1–3 min | YouTube/local, solo transcripción | +| Video (visual) | 5–15 min | + Extracción de fotogramas OCR | +| Empaquetado | 5–10 seg | Creación del .zip final | + +--- + +## 🆕 Novedades en v3.6.0 + +### Presets de flujo de trabajo +Controla la profundidad del análisis con `--preset`: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Rápido, superficial +skill-seekers create https://docs.react.dev/ --preset standard # Equilibrado (predeterminado) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Profundo, exhaustivo +``` + +### Banderas de ciclo de vida +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Vista previa sin extracción +skill-seekers create https://docs.react.dev/ --fresh # Ignorar caché, re-extracción completa +skill-seekers create https://docs.react.dev/ --resume # Reanudar trabajo interrumpido +skill-seekers create https://docs.react.dev/ --skip-scrape # Reempaquetar salida existente +``` + +### Health Check y utilidades +```bash +skill-seekers doctor # Diagnosticar instalación y entorno +skill-seekers sync-config # Detectar desviación de configuración +skill-seekers stream # Ingesta por streaming para documentación grande +skill-seekers update output/react/ # Actualización incremental +skill-seekers multilang # Generación de skills multilingüe +skill-seekers quality output/react/ # Informe de calidad (añade --threshold 7 para bloquear: salida distinta de cero por debajo de 7/10) +``` + +### Opciones de RAG Chunking (package) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Publicación en el marketplace +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Dependencias opcionales adicionales +| Extra | Instalación | Propósito | +|-------|-------------|-----------| +| `browser` | `pip install "skill-seekers[browser]"` | Playwright headless para sitios SPA | +| `embedding` | `pip install "skill-seekers[embedding]"` | Soporte de servidor de embeddings | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` etc. | Subida a almacenamiento en la nube | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Dependencias combinadas de subida a bases de datos vectoriales | + +--- + +## 📚 Documentación + +### Primeros pasos +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **¡EMPIEZA AQUà si eres nuevo!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Inicio rápido para usuarios experimentados +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Problemas comunes y soluciones +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - Hoja de referencia rápida + +### Arquitectura +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - Vista general de la arquitectura UML con 14 diagramas +- **[docs/UML/exports/](docs/UML/exports/)** - Exportaciones de diagramas en PNG (vista general de paquetes + 13 diagramas de clases) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Referencia API completa en HTML (todas las clases, operaciones, atributos) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - Archivo de proyecto StarUML (abrir con [StarUML](https://staruml.io/)) + +### Guías +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - Manejar documentos de 10K–40K+ páginas +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - Guía de modos de mejora con IA +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - Configuración de integración MCP +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Extracción multi-fuente +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Guía de extracción de video + +### Guías de integración +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - Todos los pipelines RAG + +--- + +## 📠Licencia + +Licencia MIT - consulta el archivo [LICENSE](LICENSE) para más detalles + +--- + +¡Feliz construcción de skills! 🚀 + +--- + +## 🔒 Seguridad + +[![Insignia de evaluación de seguridad MseeP.ai](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 Patrocinadores + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — una plataforma de inferencia de IA full-modal compatible con OpenAI. Skill Seekers la soporta como destino de empaquetado/mejora mediante `--target atlas` con `ATLAS_API_KEY`. diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..a484073 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,1380 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | Français | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **Avis de traduction automatique** +> +> Ce document a été traduit automatiquement par IA. Bien que nous nous efforcions de garantir la qualité, des expressions inexactes peuvent subsister. +> +> N'hésitez pas à contribuer à l'amélioration de la traduction via [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) ! Vos retours nous sont précieux. + +[![Version](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![Licence : MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![Intégration MCP](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Tests réussis](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Tableau de projet](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![Version PyPI](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Téléchargements](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Version Python](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Site web](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Suivre sur Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![Étoiles GitHub](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 La couche de données pour les systèmes d'IA.** Skill Seekers transforme les sites de documentation, dépôts GitHub, PDF, vidéos, notebooks Jupyter, wikis et plus de 10 autres types de sources en ressources de connaissances structurées — prêtes à alimenter les compétences IA (Claude, Gemini, OpenAI), les pipelines RAG (LangChain, LlamaIndex, Pinecone) et les assistants de codage IA (Cursor, Windsurf, Cline) en quelques minutes, pas en heures. + +> 🌠**[Visitez SkillSeekersWeb.com](https://skillseekersweb.com/)** - Parcourez plus de 24 configurations prédéfinies, partagez vos configurations et accédez à la documentation complète ! + +> 📋 **[Consultez la feuille de route et les tâches](https://github.com/users/yusufkaraaslan/projects/2)** - 134 tâches réparties en 10 catégories, choisissez-en une pour contribuer ! + +## 🌠Écosystème + +Skill Seekers est un projet multi-dépôts. Voici où se trouve chaque partie : + +| Dépôt | Description | Liens | +|-------|-------------|-------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | CLI principal et serveur MCP (ce dépôt) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Site web et documentation | [Site](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Dépôt de configurations communautaires | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action pour CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Plugin Claude Code | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap pour macOS | | + +> **Vous voulez contribuer ?** Les dépôts du site web et des configurations sont d'excellents points de départ pour les nouveaux contributeurs ! + +## 🧠 La couche de données pour les systèmes d'IA + +**Skill Seekers est la couche de prétraitement universelle** qui se situe entre la documentation brute et tous les systèmes d'IA qui la consomment. Que vous construisiez des compétences Claude, un pipeline RAG LangChain ou un fichier `.cursorrules` pour Cursor — la préparation des données est identique. Vous le faites une seule fois, et exportez vers toutes les cibles. + +```bash +# Une commande → ressource de connaissances structurée +skill-seekers create https://docs.react.dev/ +# ou : skill-seekers create facebook/react +# ou : skill-seekers create ./my-project + +# Exporter vers n'importe quel système d'IA +skill-seekers package output/react --target claude # → Compétence Claude AI (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → Répertoire de compétence IBM Bob +``` + +### Ce qui est généré + +| Sortie | Cible | Utilisation | +|--------|-------|-------------| +| **Compétence Claude** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Compétence Gemini** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, assistants personnalisés | +| **LangChain Documents** | `--target langchain` | Chaînes QA, agents, récupérateurs | +| **LlamaIndex TextNodes** | `--target llama-index` | Moteurs de requêtes, moteurs de chat | +| **Haystack Documents** | `--target haystack` | Pipelines RAG d'entreprise | +| **Prêt pour Pinecone** (Markdown) | `--target markdown` | Insertion vectorielle | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Bases vectorielles locales | +| **Compétence IBM Bob** (répertoire) | `--target ibm-bob` | Compétences projet/globales IBM Bob | +| **Cursor** `.cursorrules` | `--target markdown` → copier SKILL.md | `.cursorrules` de l'IDE Cursor | +| **Windsurf / Cline / Continue** | `--target claude` → copier | VS Code, IntelliJ, Vim | + +### Pourquoi c'est important + +- âš¡ **99 % plus rapide** — Des jours de préparation manuelle → 15–45 minutes +- 🎯 **Qualité des compétences IA** — Fichiers SKILL.md de 500+ lignes avec exemples, patterns et guides +- 📊 **Fragments prêts pour le RAG** — Découpage intelligent préservant les blocs de code et le contexte +- 🎬 **Vidéos** — Extraction de code, transcriptions et connaissances structurées depuis YouTube et vidéos locales +- 🔄 **Multi-sources** — Combinez 18 types de sources (docs, GitHub, PDF, vidéos, notebooks, wikis, etc.) en une seule ressource +- 🌠**Une préparation, toutes les cibles** — Exportez la même ressource vers 21 plateformes sans re-scraping +- ✅ **Éprouvé en production** — 3 700+ tests, 24+ préréglages de frameworks, prêt pour la production + +## 🚀 Démarrage rapide (3 commandes) + +```bash +# 1. Installer +pip install skill-seekers + +# 2. Créer une compétence depuis n'importe quelle source +skill-seekers create https://docs.django.com/ + +# 3. Empaqueter pour votre plateforme IA +skill-seekers package output/django --target claude +``` + +**C'est tout !** Vous avez maintenant `output/django-claude.zip` prêt à l'emploi. + +```bash +# Utiliser un autre agent IA pour l'amélioration (par défaut : claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ Scan de projet piloté par IA (nouveau) + +Pointez `scan` vers n'importe quel projet : un agent IA lit ses manifestes, son README, +son Dockerfile/CI et un échantillon d'imports du code source — puis émet une configuration +par framework détecté plus un `-codebase.json` pour votre propre code. La version +détectée est épinglée, de sorte qu'une ré-exécution signale les montées de version : + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Puis construisez n'importe laquelle d'entre elles +skill-seekers create ./configs/scanned/react.json +``` + +Si une détection n'a pas de préréglage existant, l'IA génère une configuration fraîche ; +à la fin, vous pouvez éventuellement la publier dans le [registre communautaire](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### Autres sources (18 prises en charge) + +```bash +# Dépôt GitHub +skill-seekers create facebook/react + +# Projet local +skill-seekers create ./my-project + +# Document PDF +skill-seekers create manual.pdf + +# Document Word +skill-seekers create report.docx + +# Livre numérique EPUB +skill-seekers create book.epub + +# Notebook Jupyter +skill-seekers create notebook.ipynb + +# Spécification OpenAPI +skill-seekers create openapi.yaml + +# Présentation PowerPoint +skill-seekers create presentation.pptx + +# Document AsciiDoc +skill-seekers create guide.adoc + +# Fichier HTML local (auto-détecté par l'extension) +skill-seekers create page.html + +# Répertoire entier de fichiers HTML (auto-détecté pour les répertoires à dominante HTML) +skill-seekers create ./mirror_output/site/ + +# Forcer le mode HTML sur un répertoire mixte/riche en code +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# Flux RSS/Atom +skill-seekers create feed.rss + +# Page de manuel +skill-seekers create curl.1 + +# Vidéo (YouTube, Vimeo ou fichier local — nécessite skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# Première utilisation ? Installation automatique des dépendances visuelles GPU : +skill-seekers create --setup + +# Wiki Confluence +skill-seekers create --space-key TEAM --name wiki + +# Pages Notion +skill-seekers create --database-id ... --name docs + +# Export chat Slack/Discord +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Exporter partout + +```bash +# Empaqueter pour plusieurs plateformes +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Qu'est-ce que Skill Seekers ? + +Skill Seekers est la **couche de données pour les systèmes d'IA**. Il transforme 18 types de sources — sites de documentation, dépôts GitHub, PDF, vidéos, notebooks Jupyter, documents Word/EPUB/AsciiDoc, spécifications OpenAPI, présentations PowerPoint, flux RSS, pages de manuel, wikis Confluence, pages Notion, exports Slack/Discord, et plus encore — en ressources de connaissances structurées pour toutes les cibles IA : + +| Cas d'usage | Ce que vous obtenez | Exemples | +|-------------|---------------------|----------| +| **Compétences IA** | SKILL.md complet + références | Claude Code, Gemini, GPT | +| **Pipelines RAG** | Documents découpés avec métadonnées riches | LangChain, LlamaIndex, Haystack | +| **Bases vectorielles** | Données pré-formatées prêtes à l'insertion | Pinecone, Chroma, Weaviate, FAISS | +| **Assistants de codage IA** | Fichiers de contexte lus automatiquement par l'IA de votre IDE | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 Documentation + +| Je veux... | Lire ceci | +|------------|-----------| +| **Démarrer rapidement** | [Démarrage rapide](docs/getting-started/02-quick-start.md) - 3 commandes pour une première compétence | +| **Comprendre les concepts** | [Concepts fondamentaux](docs/user-guide/01-core-concepts.md) - Comment ça marche | +| **Scraper des sources** | [Guide de scraping](docs/user-guide/02-scraping.md) - Tous les types de sources | +| **Améliorer les compétences** | [Guide d'amélioration](docs/user-guide/03-enhancement.md) - Amélioration par IA | +| **Exporter les compétences** | [Guide d'empaquetage](docs/user-guide/04-packaging.md) - Export vers les plateformes | +| **Consulter les commandes** | [Référence CLI](docs/reference/CLI_REFERENCE.md) - Les 20 commandes | +| **Configurer** | [Format de configuration](docs/reference/CONFIG_FORMAT.md) - Spécification JSON | +| **Résoudre des problèmes** | [Dépannage](docs/user-guide/06-troubleshooting.md) - Problèmes courants | + +**Documentation complète :** [docs/README.md](docs/README.md) + +Au lieu de passer des jours en prétraitement manuel, Skill Seekers : + +1. **Ingère** — docs, dépôts GitHub, bases de code locales, PDF, vidéos, notebooks, wikis et plus de 10 autres types de sources +2. **Analyse** — analyse AST approfondie, détection de patterns, extraction d'API +3. **Structure** — fichiers de référence catégorisés avec métadonnées +4. **Améliore** — génération de SKILL.md par IA (Claude, Gemini ou local) +5. **Exporte** — 16 formats spécifiques à chaque plateforme depuis une seule ressource + +## Pourquoi l'utiliser ? + +### Pour les créateurs de compétences IA (Claude, Gemini, OpenAI) + +- 🎯 **Compétences de qualité production** — Fichiers SKILL.md de 500+ lignes avec exemples de code, patterns et guides +- 🔄 **Workflows d'amélioration** — Appliquez `security-focus`, `architecture-comprehensive` ou des préréglages YAML personnalisés +- 🎮 **N'importe quel domaine** — Moteurs de jeux (Godot, Unity), frameworks (React, Django), outils internes +- 🔧 **Équipes** — Combinez documentation interne + code en une source de vérité unique +- 📚 **Qualité** — Amélioré par IA avec exemples, référence rapide et guide de navigation + +### Pour les développeurs RAG et ingénieurs IA + +- 🤖 **Données prêtes pour le RAG** — `Documents` LangChain, `TextNodes` LlamaIndex, `Documents` Haystack pré-découpés +- 🚀 **99 % plus rapide** — Des jours de prétraitement → 15–45 minutes +- 📊 **Métadonnées intelligentes** — Catégories, sources, types → meilleure précision de récupération +- 🔄 **Multi-sources** — Combinez docs + GitHub + PDF + vidéos dans un seul pipeline +- 🌠**Indépendant de la plateforme** — Exportez vers n'importe quelle base vectorielle ou framework sans re-scraping + +### Pour les utilisateurs d'assistants de codage IA + +- 💻 **Cursor / Windsurf / Cline** — Générez automatiquement `.cursorrules` / `.windsurfrules` / `.clinerules` +- 🎯 **Contexte persistant** — L'IA « connaît » vos frameworks sans prompts répétitifs +- 📚 **Toujours à jour** — Mettez à jour le contexte en quelques minutes quand la documentation change + +## Fonctionnalités clés + +### 🌠Scraping de documentation +- ✅ **Découverte SPA intelligente** - Découverte en trois couches pour les sites SPA JavaScript (sitemap.xml → llms.txt → rendu par navigateur headless) +- ✅ **Support llms.txt** - Détecte et utilise automatiquement les fichiers de documentation prêts pour les LLM (10x plus rapide) +- ✅ **Scraper universel** - Fonctionne avec N'IMPORTE QUEL site de documentation +- ✅ **Catégorisation intelligente** - Organise automatiquement le contenu par sujet +- ✅ **Détection du langage de code** - Reconnaît Python, JavaScript, C++, GDScript, etc. +- ✅ **24+ préréglages prêts à l'emploi** - Godot, React, Vue, Django, FastAPI, et plus + +### 📄 Support PDF +- ✅ **Extraction PDF basique** - Extraction de texte, code et images depuis les fichiers PDF +- ✅ **OCR pour PDF scannés** - Extraction de texte depuis les documents numérisés +- ✅ **PDF protégés par mot de passe** - Gestion des PDF chiffrés +- ✅ **Extraction de tableaux** - Extraction de tableaux complexes depuis les PDF +- ✅ **Traitement parallèle** - 3x plus rapide pour les gros PDF +- ✅ **Cache intelligent** - 50 % plus rapide lors des ré-exécutions + +### 🎬 Extraction vidéo +- ✅ **YouTube et vidéos locales** - Extraction de transcriptions, code à l'écran et connaissances structurées depuis les vidéos +- ✅ **Analyse visuelle des images** - Extraction OCR depuis éditeurs de code, terminaux, diapositives et diagrammes +- ✅ **Détection automatique du GPU** - Installation automatique de la bonne version de PyTorch (CUDA/ROCm/MPS/CPU) +- ✅ **Amélioration par IA** - Deux passes : nettoyage OCR + génération d'un SKILL.md soigné +- ✅ **Découpage temporel** - Extraction de sections spécifiques avec `--start-time` et `--end-time` +- ✅ **Support des playlists** - Traitement par lots de toutes les vidéos d'une playlist YouTube +- ✅ **Fallback Vision API** - Utilisation de Claude Vision pour les images OCR à faible confiance + +### 🙠Analyse de dépôts GitHub +- ✅ **Analyse approfondie du code** - Analyse AST pour Python, JavaScript, TypeScript, Java, C++, Go +- ✅ **Extraction d'API** - Fonctions, classes, méthodes avec paramètres et types +- ✅ **Métadonnées du dépôt** - README, arborescence, répartition des langages, étoiles/forks +- ✅ **Issues et PR GitHub** - Récupération des issues ouvertes/fermées avec labels et jalons +- ✅ **CHANGELOG et versions** - Extraction automatique de l'historique des versions +- ✅ **Détection de conflits** - Comparaison entre les API documentées et l'implémentation réelle +- ✅ **Intégration MCP** - En langage naturel : « Scraper le dépôt GitHub facebook/react » + +### 🔄 Scraping multi-sources unifié +- ✅ **Combinaison de sources multiples** - Mélangez documentation + GitHub + PDF dans une seule compétence +- ✅ **Détection de conflits** - Détection automatique des divergences entre docs et code +- ✅ **Fusion intelligente** - Résolution de conflits par règles ou par IA +- ✅ **Rapports transparents** - Comparaison côte à côte avec avertissements âš ï¸ +- ✅ **Analyse des lacunes documentaires** - Identification des docs obsolètes et fonctionnalités non documentées +- ✅ **Source de vérité unique** - Une seule compétence montrant à la fois l'intention (docs) et la réalité (code) +- ✅ **Rétrocompatibilité** - Les configurations à source unique héritées fonctionnent toujours + +### 🤖 Support multi-plateformes LLM +- ✅ **12 plateformes LLM** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown générique, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **Scraping universel** - La même documentation fonctionne pour toutes les plateformes +- ✅ **Empaquetage spécifique** - Formats optimisés pour chaque LLM +- ✅ **Export en une commande** - Le flag `--target` sélectionne la plateforme +- ✅ **Dépendances optionnelles** - Installez seulement ce dont vous avez besoin +- ✅ **100 % rétrocompatible** - Les workflows Claude existants restent inchangés + +| Plateforme | Format | Upload | Amélioration | API Key | Endpoint personnalisé | +|------------|--------|--------|--------------|---------|----------------------| +| **Claude AI** | ZIP + YAML | ✅ Auto | ✅ Oui | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Auto | ✅ Oui | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Auto | ✅ Oui | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Auto | ✅ Oui | MINIMAX_API_KEY | - | +| **Markdown générique** | ZIP | ⌠Manuel | ⌠Non | - | - | + +```bash +# Claude (par défaut - aucune modification nécessaire !) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Markdown générique (export universel) +skill-seekers package output/react/ --target markdown +# Utilisez les fichiers markdown directement dans n'importe quel LLM +``` + +
+🔧 Utilisez votre propre fournisseur d'IA (endpoints compatibles OpenAI + abonnements, aucun crédit Anthropic nécessaire) + +L'étape optionnelle d'**amélioration** par IA (utilisée par `create`, `scan` et `enhance`) ne nécessite **pas** de clé Anthropic. Vous avez trois façons de l'alimenter : + +**1. Utilisez un abonnement que vous payez déjà — aucun crédit API (mode agent LOCAL)** + +Skill Seekers peut déléguer à une CLI d'agent de codage à laquelle vous êtes déjà connecté, de sorte que l'amélioration s'exécute sur votre forfait existant plutôt qu'avec des tokens API facturés : + +```bash +skill-seekers create --agent codex # CLI OpenAI Codex → votre ChatGPT Plus +skill-seekers create --agent claude # Claude Code → votre Claude Pro/Max +``` + +Agents supportés : `claude`, `codex`, `copilot`, `opencode`, `kimi` et `custom` +(associez `--agent custom` à `--agent-cmd " ..."` pour piloter n'importe quel autre outil). + +**2. N'importe quel fournisseur compatible OpenAI (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Tous ces fournisseurs exposent un endpoint `/v1` compatible OpenAI. Pointez Skill Seekers vers l'un d'eux avec trois variables d'environnement — il détecte `OPENAI_API_KEY`, et le SDK OpenAI honore automatiquement `OPENAI_BASE_URL` : + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # endpoint du fournisseur (voir tableau) +export OPENAI_MODEL="" # requis — le défaut gpt-4o n'existera pas ailleurs +skill-seekers create +``` + +| Fournisseur | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> La détection du fournisseur retient la **première** variable d'environnement de clé API trouvée (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Définissez `SKILL_SEEKER_PROVIDER` pour forcer un fournisseur spécifique, ou assurez-vous que les clés de priorité supérieure ne sont pas définies. + +**3. Endpoints compatibles Claude (ex. GLM, proxys)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) et Kimi/Moonshot (`MOONSHOT_API_KEY`) sont également supportés nativement. Consultez la **[référence des variables d'environnement](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** pour la liste complète, y compris les surcharges de modèle par fournisseur. + +
+ +**Installation :** +```bash +# Installer le support Gemini +pip install skill-seekers[gemini] + +# Installer le support OpenAI +pip install skill-seekers[openai] + +# Installer le support MiniMax +pip install skill-seekers[minimax] + +# Installer toutes les plateformes LLM +pip install skill-seekers[all-llms] +``` + +### 🔗 Intégrations de frameworks RAG + +- ✅ **LangChain Documents** - Export direct au format `Document` avec `page_content` + métadonnées + - Idéal pour : chaînes QA, récupérateurs, stores vectoriels, agents + - Exemple : [Pipeline RAG LangChain](examples/langchain-rag-pipeline/) + - Guide : [Intégration LangChain](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - Export au format `TextNode` avec IDs uniques + embeddings + - Idéal pour : moteurs de requêtes, moteurs de chat, contexte de stockage + - Exemple : [Moteur de requêtes LlamaIndex](examples/llama-index-query-engine/) + - Guide : [Intégration LlamaIndex](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Format prêt pour Pinecone** - Optimisé pour l'insertion dans les bases vectorielles + - Idéal pour : recherche vectorielle en production, recherche sémantique, recherche hybride + - Exemple : [Insertion Pinecone](examples/pinecone-upsert/) + - Guide : [Intégration Pinecone](docs/integrations/PINECONE.md) + +**Export rapide :** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (universel) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Guide complet des pipelines RAG :** [Documentation des pipelines RAG](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 Intégrations d'assistants de codage IA + +Transformez n'importe quelle documentation de framework en contexte de codage expert pour plus de 4 assistants IA : + +- ✅ **Cursor IDE** - Génération de `.cursorrules` pour des suggestions de code alimentées par l'IA + - Idéal pour : génération de code spécifique au framework, patterns cohérents + - Fonctionne avec : Cursor IDE (fork de VS Code) + - Guide : [Intégration Cursor](docs/integrations/CURSOR.md) + - Exemple : [Compétence Cursor React](examples/cursor-react-skill/) + +- ✅ **Windsurf** - Personnalisation du contexte de l'assistant IA Windsurf avec `.windsurfrules` + - Idéal pour : assistance IA native dans l'IDE, codage en flux + - Fonctionne avec : Windsurf IDE par Codeium + - Guide : [Intégration Windsurf](docs/integrations/WINDSURF.md) + - Exemple : [Contexte FastAPI Windsurf](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - Prompts système + MCP pour l'agent VS Code + - Idéal pour : génération de code agentique dans VS Code + - Fonctionne avec : extension Cline pour VS Code + - Guide : [Intégration Cline](docs/integrations/CLINE.md) + - Exemple : [Assistant Django Cline](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - Serveurs de contexte pour une IA indépendante de l'IDE + - Idéal pour : environnements multi-IDE (VS Code, JetBrains, Vim), fournisseurs LLM personnalisés + - Fonctionne avec : tout IDE disposant du plugin Continue.dev + - Guide : [Intégration Continue](docs/integrations/CONTINUE_DEV.md) + - Exemple : [Contexte universel Continue](examples/continue-dev-universal/) + +**Export rapide pour les outils de codage IA :** +```bash +# Pour n'importe quel assistant de codage IA (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # ou --target markdown + +# Copier dans votre projet (exemple pour Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Ou pour Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Ou pour Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# Ou pour Continue.dev (serveur HTTP) +python examples/continue-dev-universal/context_server.py +# Configurer dans ~/.continue/config.json +``` + +**Hub d'intégrations :** [Toutes les intégrations de systèmes IA](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Architecture GitHub à trois flux +- ✅ **Analyse à triple flux** - Division des dépôts GitHub en flux Code, Docs et Insights +- ✅ **Analyseur de base de code unifié** - Fonctionne avec les URL GitHub ET les chemins locaux +- ✅ **C3.x comme profondeur d'analyse** - Choisissez 'basic' (1–2 min) ou 'c3x' (20–60 min) +- ✅ **Génération de routeur améliorée** - Métadonnées GitHub, démarrage rapide README, problèmes courants +- ✅ **Intégration des Issues** - Principaux problèmes et solutions depuis les issues GitHub +- ✅ **Mots-clés de routage intelligents** - Labels GitHub pondérés 2x pour une meilleure détection des sujets + +**Les trois flux expliqués :** +- **Flux 1 : Code** - Analyse approfondie C3.x (patterns, exemples, guides, configurations, architecture) +- **Flux 2 : Docs** - Documentation du dépôt (README, CONTRIBUTING, docs/*.md) +- **Flux 3 : Insights** - Connaissances communautaires (issues, labels, étoiles, forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# Analyser un dépôt GitHub avec les trois flux +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # ou "basic" pour une analyse rapide + fetch_github_metadata=True +) + +# Accéder au flux code (analyse C3.x) +print(f"Design patterns: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Test examples: {result.code_analysis['c3_2_examples_count']}") + +# Accéder au flux docs (documentation du dépôt) +print(f"README: {result.github_docs['readme'][:100]}") + +# Accéder au flux insights (métadonnées GitHub) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"Common issues: {len(result.github_insights['common_problems'])}") +``` + +**Documentation complète** : [Résumé de l'implémentation à trois flux](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Gestion intelligente des limites de débit et configuration +- ✅ **Système de configuration multi-tokens** - Gérez plusieurs comptes GitHub (personnel, professionnel, OSS) + - Stockage sécurisé de la configuration dans `~/.config/skill-seekers/config.json` (permissions 600) + - Stratégies de limite de débit par profil : `prompt`, `wait`, `switch`, `fail` + - Délai d'expiration configurable par profil (défaut : 30 min, évite les attentes indéfinies) + - Chaîne de repli intelligente : argument CLI → variable d'env → fichier de config → prompt + - Gestion des clés API pour Claude, Gemini, OpenAI +- ✅ **Assistant de configuration interactif** - Interface terminal élégante pour une configuration facile + - Intégration navigateur pour la création de tokens (ouverture automatique de GitHub, etc.) + - Validation des tokens et test de connexion + - Affichage visuel du statut avec code couleur +- ✅ **Gestionnaire intelligent de limites de débit** - Plus d'attentes indéfinies ! + - Avertissement préalable sur les limites de débit (60/heure vs 5000/heure) + - Détection en temps réel depuis les réponses de l'API GitHub + - Compteurs à rebours en direct avec progression + - Basculement automatique de profil en cas de limite atteinte + - Quatre stratégies : prompt (demander), wait (compte à rebours), switch (essayer un autre), fail (abandonner) +- ✅ **Capacité de reprise** - Continuez les tâches interrompues + - Sauvegarde automatique à intervalles configurables (défaut : 60 sec) + - Liste de toutes les tâches reprises avec détails de progression + - Nettoyage automatique des anciennes tâches (défaut : 7 jours) +- ✅ **Support CI/CD** - Mode non-interactif pour l'automatisation + - Flag `--non-interactive` pour un échec rapide sans prompts + - Flag `--profile` pour sélectionner un compte GitHub spécifique + - Messages d'erreur clairs pour les logs de pipeline + +**Configuration rapide :** +```bash +# Configuration unique (5 minutes) +skill-seekers config --github + +# Utiliser un profil spécifique pour les dépôts privés +skill-seekers create mycompany/private-repo --profile work + +# Mode CI/CD (échec rapide, sans prompts) +skill-seekers create owner/repo --non-interactive + +# Reprendre une tâche interrompue +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Stratégies de limite de débit :** +- **prompt** (par défaut) - Demande quoi faire en cas de limite (attendre, basculer, configurer un token, annuler) +- **wait** - Attend automatiquement avec un compte à rebours (respecte le délai d'expiration) +- **switch** - Essaie automatiquement le profil disponible suivant (pour les configurations multi-comptes) +- **fail** - Échoue immédiatement avec un message d'erreur clair (parfait pour le CI/CD) + +### 🎯 Compétence Bootstrap - Auto-hébergement + +Générez skill-seekers lui-même en tant que compétence à utiliser dans votre agent IA (Claude Code, Kimi, Codex, etc.) : + +```bash +# Générer la compétence +./scripts/bootstrap_skill.sh + +# Installer dans Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**Ce que vous obtenez :** +- ✅ **Documentation complète de la compétence** - Toutes les commandes CLI et patterns d'utilisation +- ✅ **Référence des commandes CLI** - Chaque outil et ses options documentés +- ✅ **Exemples de démarrage rapide** - Workflows courants et bonnes pratiques +- ✅ **Documentation API auto-générée** - Analyse de code, patterns et exemples + +### 🔠Dépôts de configuration privés +- ✅ **Sources de configuration basées sur Git** - Récupérez les configurations depuis des dépôts Git privés/d'équipe +- ✅ **Gestion multi-sources** - Enregistrez un nombre illimité de dépôts GitHub, GitLab, Bitbucket +- ✅ **Collaboration d'équipe** - Partagez des configurations personnalisées au sein d'équipes de 3 à 5 personnes +- ✅ **Support entreprise** - Montée en charge jusqu'à 500+ développeurs avec résolution par priorité +- ✅ **Authentification sécurisée** - Tokens via variables d'environnement (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Cache intelligent** - Clonage unique, mises à jour automatiques par pull +- ✅ **Mode hors ligne** - Travaillez avec les configurations en cache en l'absence de connexion + +### 🤖 Analyse de base de code (C3.x) + +**C3.4 : Extraction de patterns de configuration avec amélioration IA** +- ✅ **9 formats de configuration** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 types de patterns** - Configurations de base de données, API, journalisation, cache, e-mail, authentification, serveur +- ✅ **Amélioration par IA** - Analyse IA optionnelle en mode double (API + LOCAL) + - Explique ce que fait chaque configuration + - Suggère des bonnes pratiques et améliorations + - **Analyse de sécurité** - Détecte les secrets codés en dur, les identifiants exposés +- ✅ **Documentation automatique** - Génère une documentation JSON + Markdown de toutes les configurations +- ✅ **Intégration MCP** - Outil `extract_config_patterns` avec support d'amélioration + +**C3.3 : Guides pratiques améliorés par IA** +- ✅ **Amélioration IA complète** - Transforme les guides basiques en tutoriels professionnels +- ✅ **5 améliorations automatiques** - Descriptions d'étapes, dépannage, prérequis, étapes suivantes, cas d'usage +- ✅ **Support en mode double** - Mode API (Claude API) ou mode LOCAL (CLI Claude Code) +- ✅ **Aucun coût en mode LOCAL** - Amélioration GRATUITE avec votre abonnement Claude Code Max +- ✅ **Transformation qualitative** - Templates de 75 lignes → guides complets de 500+ lignes + +**Utilisation :** +```bash +# Analyse rapide (1–2 min, fonctionnalités basiques uniquement) +skill-seekers scan tests/ --quick + +# Analyse complète avec IA (20–60 min, toutes les fonctionnalités) +skill-seekers scan tests/ --comprehensive + +# Avec amélioration par IA +skill-seekers scan tests/ --enhance +``` + +**Documentation complète :** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 Préréglages de workflow d'amélioration + +Pipelines d'amélioration réutilisables définis en YAML qui contrôlent comment l'IA transforme votre documentation brute en une compétence soignée. + +- ✅ **5 préréglages intégrés** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **Préréglages définis par l'utilisateur** — Ajoutez des workflows personnalisés dans `~/.config/skill-seekers/workflows/` +- ✅ **Chaînage de workflows** — Chaînez deux workflows ou plus dans une seule commande +- ✅ **CLI complet** — Lister, inspecter, copier, ajouter, supprimer et valider les workflows + +```bash +# Appliquer un workflow unique +skill-seekers create ./my-project --enhance-workflow security-focus + +# Chaîner plusieurs workflows (appliqués dans l'ordre) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Gérer les préréglages +skill-seekers workflows list # Lister tous (intégrés + utilisateur) +skill-seekers workflows show security-focus # Afficher le contenu YAML +skill-seekers workflows copy security-focus # Copier dans le répertoire utilisateur pour édition +skill-seekers workflows add ./my-workflow.yaml # Installer un préréglage personnalisé +skill-seekers workflows remove my-workflow # Supprimer un préréglage utilisateur +skill-seekers workflows validate security-focus # Valider la structure du préréglage + +# Copier plusieurs à la fois +skill-seekers workflows copy security-focus minimal api-documentation + +# Ajouter plusieurs fichiers à la fois +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Supprimer plusieurs à la fois +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**Format YAML des préréglages :** +```yaml +name: security-focus +description: "Security-focused review: vulnerabilities, auth, data handling" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Review for OWASP top 10 and common security vulnerabilities..." + - name: auth-review + type: custom + prompt: "Examine authentication and authorisation patterns..." + uses_history: true +``` + +### âš¡ Performance et montée en charge +- ✅ **Mode asynchrone** - Scraping 2–3x plus rapide avec async/await (flag `--async`) +- ✅ **Support des grandes documentations** - Gestion de documents de 10K–40K+ pages avec découpage intelligent +- ✅ **Compétences Router/Hub** - Routage intelligent vers des sous-compétences spécialisées +- ✅ **Scraping parallèle** - Traitement simultané de plusieurs compétences +- ✅ **Points de contrôle/Reprise** - Ne perdez jamais la progression lors de longs scrapings +- ✅ **Système de cache** - Scrapez une fois, reconstruisez instantanément + +### 🤖 Génération de compétences indépendante de l'agent +- ✅ **Support multi-agents** - Générez des compétences pour Claude, Kimi, Codex, Copilot, OpenCode ou tout agent personnalisé via le flag `--agent` +- ✅ **Commandes d'agent personnalisées** - Utilisez `--agent-cmd` pour spécifier une commande CLI d'agent personnalisée pour l'amélioration +- ✅ **Flags universels** - `--agent` et `--agent-cmd` disponibles sur toutes les commandes (create, scrape, github, pdf, etc.) + +### 📦 Pipeline Marketplace +- ✅ **Publication sur le marketplace** - Publiez des compétences dans les dépôts du marketplace de plugins Claude Code +- ✅ **Pipeline de bout en bout** - De la source de documentation à l'entrée publiée sur le marketplace + +### ✅ Assurance qualité +- ✅ **Entièrement testé** - 3 700+ tests avec couverture complète + +--- + +## 📦 Installation + +```bash +# Installation basique (scraping de documentation, analyse GitHub, PDF, empaquetage) +pip install skill-seekers + +# Avec support de toutes les plateformes LLM +pip install skill-seekers[all-llms] + +# Avec serveur MCP +pip install skill-seekers[mcp] + +# Tout inclus +pip install skill-seekers[all] +``` + +**Besoin d'aide pour choisir ?** Lancez l'assistant de configuration : +```bash +skill-seekers-setup +``` + +### Options d'installation + +| Installation | Fonctionnalités | +|-------------|-----------------| +| `pip install skill-seekers` | Scraping, analyse GitHub, PDF, toutes les plateformes | +| `pip install skill-seekers[gemini]` | + Support Google Gemini | +| `pip install skill-seekers[openai]` | + Support OpenAI ChatGPT | +| `pip install skill-seekers[all-llms]` | + Toutes les plateformes LLM | +| `pip install skill-seekers[mcp]` | + Serveur MCP pour Claude Code, Cursor, etc. | +| `pip install skill-seekers[video]` | + Extraction de transcriptions et métadonnées YouTube/Vimeo | +| `pip install skill-seekers[video-full]` | + Transcription Whisper et extraction visuelle d'images | +| `pip install skill-seekers[jupyter]` | + Support des notebooks Jupyter | +| `pip install skill-seekers[pptx]` | + Support PowerPoint | +| `pip install skill-seekers[confluence]` | + Support wiki Confluence | +| `pip install skill-seekers[notion]` | + Support des pages Notion | +| `pip install skill-seekers[rss]` | + Support des flux RSS/Atom | +| `pip install skill-seekers[chat]` | + Support des exports chat Slack/Discord | +| `pip install skill-seekers[asciidoc]` | + Support des documents AsciiDoc | +| `pip install skill-seekers[all]` | Tout activé | + +> **Dépendances visuelles vidéo (compatibles GPU) :** Après avoir installé `skill-seekers[video-full]`, exécutez +> `skill-seekers create --setup` pour détecter automatiquement votre GPU et installer la bonne variante +> de PyTorch + easyocr. C'est la méthode recommandée pour installer les dépendances d'extraction visuelle. + +--- + +## 🚀 Workflow d'installation en une commande + +**Le moyen le plus rapide d'aller de la configuration à la compétence uploadée — automatisation complète :** + +```bash +# Installer la compétence React depuis les configurations officielles (upload automatique vers Claude) +skill-seekers install --config react + +# Installer depuis un fichier de configuration local +skill-seekers install --config configs/custom.json + +# Installer sans uploader (empaquetage uniquement) +skill-seekers install --config django --no-upload + +# Prévisualiser le workflow sans l'exécuter +skill-seekers install --config react --dry-run +``` + +**Durée :** 20–45 minutes au total | **Qualité :** Prêt pour la production (9/10) | **Coût :** Gratuit + +**Phases exécutées :** +``` +📥 PHASE 1 : Récupération de la configuration (si un nom de config est fourni) +📖 PHASE 2 : Scraping de la documentation +✨ PHASE 3 : Amélioration par IA (OBLIGATOIRE — pas d'option pour passer) +📦 PHASE 4 : Empaquetage de la compétence +â˜ï¸ PHASE 5 : Upload vers Claude (optionnel, nécessite une clé API) +``` + +**Prérequis :** +- Variable d'environnement ANTHROPIC_API_KEY (pour l'upload automatique) +- Abonnement Claude Code Max (pour l'amélioration IA locale), ou utilisez `--agent` pour sélectionner un autre agent IA + +--- + +## 📊 Matrice de fonctionnalités + +Skill Seekers prend en charge **12 plateformes LLM**, **8 cibles RAG/vectorielles**, **18 types de sources** et une parité fonctionnelle complète sur toutes les cibles. + +**Plateformes :** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown générique, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Types de sources :** Sites de documentation, dépôts GitHub, PDF, Word (.docx), EPUB, Vidéo, Bases de code locales, Notebooks Jupyter, HTML local, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), Flux RSS/Atom, Pages de manuel, Wikis Confluence, Pages Notion, Exports chat Slack/Discord + +Consultez la [matrice complète des fonctionnalités](docs/reference/FEATURE_MATRIX.md) pour le support détaillé par plateforme et fonctionnalité. + +### Comparaison rapide des plateformes + +| Fonctionnalité | Claude | Gemini | OpenAI | MiniMax | Markdown | +|----------------|--------|--------|--------|---------|----------| +| Format | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Upload | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Manuel | +| Amélioration | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠Aucune | +| Tous les modes de compétence | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Exemples d'utilisation + +### Scraping de documentation + +```bash +# Scraper un site de documentation +skill-seekers create --config configs/react.json + +# Scraping rapide sans configuration +skill-seekers create https://react.dev --name react + +# En mode asynchrone (3x plus rapide) +skill-seekers create --config configs/godot.json --async --workers 8 + +# Utiliser un agent IA spécifique pour l'amélioration +skill-seekers create --config configs/react.json --agent kimi +``` + +### Extraction PDF + +```bash +# Extraction PDF basique +skill-seekers create --pdf docs/manual.pdf --name myskill + +# Fonctionnalités avancées +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Extraire les tableaux + --parallel \ # Traitement parallèle rapide + --workers 8 # Utiliser 8 cÅ“urs CPU + +# PDF scannés (nécessite : pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Extraction vidéo + +```bash +# Installer le support vidéo +pip install skill-seekers[video] # Transcriptions + métadonnées +pip install skill-seekers[video-full] # + Transcription Whisper + extraction visuelle + +# Détecter automatiquement le GPU et installer les dépendances visuelles (PyTorch + easyocr) +skill-seekers create --setup + +# Extraire depuis une vidéo YouTube +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Extraire depuis une playlist YouTube +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Extraire depuis un fichier vidéo local +skill-seekers create --video-file recording.mp4 --name myrecording + +# Extraire avec analyse visuelle des images (nécessite les dépendances video-full) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# Avec amélioration IA (nettoyage OCR + génération d'un SKILL.md soigné) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Découper une section spécifique d'une vidéo (supporte les secondes, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Utiliser Vision API pour les images OCR à faible confiance (nécessite ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Reconstruire la compétence depuis des données extraites précédemment (sans téléchargement) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Guide complet :** Consultez [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) pour la référence CLI complète, +> les détails du pipeline visuel, les options d'amélioration IA et le dépannage. + +### Analyse de dépôts GitHub + +```bash +# Scraping basique de dépôt +skill-seekers create facebook/react + +# Avec authentification (limites de débit plus élevées) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Personnaliser le contenu inclus +skill-seekers create django/django \ + --include-issues \ # Extraire les issues GitHub + --max-issues 100 \ # Limiter le nombre d'issues + --include-changelog # Extraire CHANGELOG.md +``` + +### Scraping multi-sources unifié + +**Combinez documentation + GitHub + PDF en une compétence unifiée avec détection de conflits :** + +```bash +# Utiliser les configurations unifiées existantes +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# Ou créer une configuration unifiée +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**La détection de conflits trouve automatiquement :** +- 🔴 **Absent du code** (élevé) : Documenté mais non implémenté +- 🟡 **Absent de la documentation** (moyen) : Implémenté mais non documenté +- âš ï¸ **Incompatibilité de signature** : Paramètres/types différents +- â„¹ï¸ **Incompatibilité de description** : Explications différentes + +**Guide complet :** Consultez [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) pour la documentation complète. + +### Dépôts de configuration privés + +**Partagez des configurations personnalisées entre équipes via des dépôts Git privés :** + +```bash +# Option 1 : Utilisation des outils MCP (recommandé) +# Enregistrer le dépôt privé de votre équipe +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Récupérer la configuration depuis le dépôt d'équipe +fetch_config(source="team", config_name="internal-api") +``` + +**Plateformes supportées :** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Guide complet :** Consultez [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) pour la documentation complète. + +## Comment ça marche + +```mermaid +graph LR + A[Site de documentation] --> B[Skill Seekers] + B --> C[Scraper] + B --> D[Amélioration IA] + B --> E[Empaqueteur] + C --> F[Références organisées] + D --> F + F --> E + E --> G[Compétence IA .zip] + G --> H[Upload vers la plateforme IA] +``` + +0. **Détection de llms.txt** - Vérifie d'abord llms-full.txt, llms.txt, llms-small.txt (fait partie de la découverte SPA intelligente) +1. **Scraping** : Extraction de toutes les pages de la documentation +2. **Catégorisation** : Organisation du contenu par thèmes (API, guides, tutoriels, etc.) +3. **Amélioration** : L'IA analyse la documentation et crée un SKILL.md complet avec des exemples (supporte plusieurs agents via `--agent`) +4. **Empaquetage** : Regroupement de tout dans un fichier `.zip` prêt pour la plateforme + +## Architecture + +Le système est organisé en **8 modules principaux** et **5 modules utilitaires** (~200 classes au total) : + +![Vue d'ensemble des packages](docs/UML/exports/00_package_overview.png) + +| Module | Objectif | Classes clés | +|--------|----------|--------------| +| **CLICore** | Répartiteur de commandes façon Git | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 extracteurs par type de source | `DocToSkillConverter`, `DocumentSkillBuilder` (couche de construction partagée), `UnifiedScraper` | +| **Adaptors** | 20+ formats de plateformes de sortie | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | Pipeline d'analyse de code C3.x | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 détecteurs GoF | +| **Enhancement** | Amélioration de compétences par IA via `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Empaqueter, uploader, installer les compétences | `PackageSkill`, `InstallAgent` | +| **MCP** | Serveur FastMCP (40 outils) | `SkillSeekerMCPServer`, 10 modules d'outils | +| **Sync** | Détection des changements de documentation | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Modules utilitaires : **Parsers** (28 parsers CLI), **Storage** (S3/GCS/Azure), **Embedding** (vecteurs multi-fournisseurs), **Benchmark** (performance), **Utilities** (16 helpers partagés). + +Diagrammes UML complets : **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | Projet StarUML : `docs/UML/skill_seekers.mdj` | Référence API HTML : `docs/UML/html/` + +## 📋 Prérequis + +**Avant de commencer, assurez-vous d'avoir :** + +1. **Python 3.10 ou supérieur** - [Télécharger](https://www.python.org/downloads/) | Vérifier : `python3 --version` +2. **Git** - [Télécharger](https://git-scm.com/) | Vérifier : `git --version` +3. **15 à 30 minutes** pour la première installation + +**Première utilisation ?** → **[Commencez ici : Guide de démarrage rapide infaillible](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Uploader des compétences vers Claude + +Une fois votre compétence empaquetée, vous devez l'uploader vers Claude : + +### Option 1 : Upload automatique (via API) + +```bash +# Définir votre clé API (une seule fois) +export ANTHROPIC_API_KEY=sk-ant-... + +# Empaqueter et uploader automatiquement +skill-seekers package output/react/ --upload + +# OU uploader un .zip existant +skill-seekers upload output/react.zip +``` + +### Option 2 : Upload manuel (sans clé API) + +```bash +# Empaqueter la compétence +skill-seekers package output/react/ +# → Crée output/react.zip + +# Puis uploader manuellement : +# - Rendez-vous sur https://claude.ai/skills +# - Cliquez sur « Upload Skill » +# - Sélectionnez output/react.zip +``` + +### Option 3 : MCP (Claude Code) + +``` +Dans Claude Code, demandez simplement : +« Empaqueter et uploader la compétence React » +``` + +--- + +## 🤖 Installation dans les agents IA + +Skill Seekers peut installer automatiquement des compétences dans 19 agents de codage IA. + +```bash +# Installer dans un agent spécifique +skill-seekers install-agent output/react/ --agent cursor + +# Installer dans IBM Bob (local au projet : .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Installer dans tous les agents à la fois +skill-seekers install-agent output/react/ --agent all + +# Prévisualiser sans installer +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Agents supportés + +| Agent | Chemin | Type | +|-------|--------|------| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Projet | +| **VS Code / Copilot** | `.github/skills/` | Projet | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Projet | +| **Cline** | `.cline/skills/` | Projet | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Projet | +| **Kilo Code** | `.kilo/skills/` | Projet | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Projet | + +--- + +## 🔌 Intégration MCP (40 outils) + +Skill Seekers inclut un serveur MCP utilisable depuis Claude Code, Cursor, Windsurf, VS Code + Cline ou IntelliJ IDEA. + +```bash +# Mode stdio (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# Mode HTTP (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Configuration automatique de tous les agents en une fois +./setup_mcp.sh +``` + +**Les 40 outils disponibles :** +- **Noyau (9) :** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **Étendu (10) :** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Bases vectorielles (4) :** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Cloud (3) :** `cloud_upload`, `cloud_download`, `cloud_list` + +**Guide complet :** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Configuration + +### Préréglages disponibles (24+) + +```bash +# Lister tous les préréglages +# skill-seekers list-configs # Non disponible dans la v3.7.0 +``` + +| Catégorie | Préréglages | +|-----------|-------------| +| **Frameworks Web** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Développement de jeux** | `godot`, `pygame`, `unity` | +| **Outils et DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Unifié (Docs + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified`, et plus | + +### Créer votre propre configuration + +```bash +# Option 1 : Interactif +skill-seekers create --interactive + +# Option 2 : Copier et modifier un préréglage +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Structure du fichier de configuration + +```json +{ + "name": "myframework", + "description": "When to use this skill", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Où stocker les configurations + +L'outil cherche dans cet ordre : +1. Chemin exact tel que fourni +2. `./configs/` (répertoire courant) +3. `~/.config/skill-seekers/configs/` (répertoire de configuration utilisateur) +4. API SkillSeekersWeb.com (configurations prédéfinies) + +--- + +## 📊 Ce qui est généré + +``` +output/ +├── godot_data/ # Données brutes scrapées +│ ├── pages/ # Fichiers JSON (un par page) +│ └── summary.json # Vue d'ensemble +│ +└── godot/ # La compétence + ├── SKILL.md # Amélioré avec de vrais exemples + ├── references/ # Documentation catégorisée + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # Vide (ajoutez les vôtres) + └── assets/ # Vide (ajoutez les vôtres) +``` + +--- + +## 🛠Dépannage + +### Aucun contenu extrait ? +- Vérifiez votre sélecteur `main_content` +- Essayez : `article`, `main`, `div[role="main"]` + +### Les données existent mais ne sont pas utilisées ? +```bash +# Forcer un nouveau scraping +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Catégorisation insatisfaisante ? +Modifiez la section `categories` de la configuration avec de meilleurs mots-clés. + +### Vous voulez mettre à jour la documentation ? +```bash +# Supprimer les anciennes données et re-scraper +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### L'amélioration ne fonctionne pas ? +```bash +# Vérifier si la clé API est définie +echo $ANTHROPIC_API_KEY + +# Essayer le mode LOCAL à la place (utilise Claude Code Max, pas besoin de clé API) +skill-seekers enhance output/react/ --mode LOCAL + +# Surveiller l'état de l'amélioration en arrière-plan +skill-seekers enhance-status output/react/ --watch +``` + +### Problèmes de limite de débit GitHub ? +```bash +# Définir un token GitHub (5000 req/heure vs 60/heure en anonyme) +export GITHUB_TOKEN=ghp_your_token_here + +# Ou configurer plusieurs profils +skill-seekers config --github +``` + +--- + +## 📈 Performance + +| Tâche | Durée | Notes | +|-------|-------|-------| +| Scraping (synchrone) | 15–45 min | Première fois uniquement, basé sur les threads | +| Scraping (asynchrone) | 5–15 min | 2–3x plus rapide avec le flag `--async` | +| Construction | 1–3 min | Reconstruction rapide depuis le cache | +| Reconstruction | <1 min | Avec `--skip-scrape` | +| Amélioration (LOCAL) | 30–60 sec | Utilise Claude Code Max | +| Amélioration (API) | 20–40 sec | Nécessite une clé API | +| Vidéo (transcription) | 1–3 min | YouTube/local, transcription uniquement | +| Vidéo (visuel) | 5–15 min | + Extraction OCR d'images | +| Empaquetage | 5–10 sec | Création finale du .zip | + +--- + +## 🆕 Nouveautés de la v3.6.0 + +### Préréglages de workflow +Contrôlez la profondeur d'analyse avec `--preset` : + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Rapide, en surface +skill-seekers create https://docs.react.dev/ --preset standard # Équilibré (par défaut) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Approfondi, exhaustif +``` + +### Flags de cycle de vie +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Aperçu sans scraping +skill-seekers create https://docs.react.dev/ --fresh # Ignorer le cache, re-scraping complet +skill-seekers create https://docs.react.dev/ --resume # Reprendre une tâche interrompue +skill-seekers create https://docs.react.dev/ --skip-scrape # Ré-empaqueter la sortie existante +``` + +### Health Check et utilitaires +```bash +skill-seekers doctor # Diagnostiquer l'installation et l'environnement +skill-seekers sync-config # Détecter la dérive de configuration +skill-seekers stream # Ingestion en streaming pour les grandes documentations +skill-seekers update output/react/ # Mise à jour incrémentale +skill-seekers multilang # Génération de compétences multilingues +skill-seekers quality output/react/ # Rapport de qualité (ajoutez --threshold 7 pour bloquer : code de sortie non nul en dessous de 7/10) +``` + +### Options de chunking RAG (package) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Publication sur le marketplace +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Dépendances optionnelles supplémentaires +| Extra | Installation | Objectif | +|-------|--------------|----------| +| `browser` | `pip install "skill-seekers[browser]"` | Playwright headless pour les sites SPA | +| `embedding` | `pip install "skill-seekers[embedding]"` | Support du serveur d'embeddings | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` etc. | Upload vers le stockage cloud | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Dépendances combinées d'upload vers bases vectorielles | + +--- + +## 📚 Documentation + +### Premiers pas +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **COMMENCEZ ICI** si vous êtes nouveau ! +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Démarrage rapide pour utilisateurs expérimentés +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Problèmes courants et solutions +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - Aide-mémoire sur une page + +### Architecture +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - Vue d'ensemble de l'architecture UML avec 14 diagrammes +- **[docs/UML/exports/](docs/UML/exports/)** - Exports PNG des diagrammes (vue d'ensemble des packages + 13 diagrammes de classes) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Référence API HTML complète (toutes les classes, opérations, attributs) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - Fichier projet StarUML (à ouvrir avec [StarUML](https://staruml.io/)) + +### Guides +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - Gérer les documentations de 10K–40K+ pages +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - Guide des modes d'amélioration IA +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - Configuration de l'intégration MCP +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Scraping multi-sources +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Guide d'extraction vidéo + +### Guides d'intégration +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - RAG LangChain +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - IDE Cursor +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - IDE Windsurf +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - Tous les pipelines RAG + +--- + +## 📠Licence + +Licence MIT - voir le fichier [LICENSE](LICENSE) pour plus de détails + +--- + +Bonne création de compétences ! 🚀 + +--- + +## 🔒 Sécurité + +[![Badge d'évaluation de sécurité MseeP.ai](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 Sponsors + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — une plateforme d'inférence IA full-modal compatible OpenAI. Skill Seekers la prend en charge comme cible d'empaquetage/amélioration via `--target atlas` avec `ATLAS_API_KEY`. diff --git a/README.hi.md b/README.hi.md new file mode 100644 index 0000000..7c300d9 --- /dev/null +++ b/README.hi.md @@ -0,0 +1,1377 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | हिनà¥à¤¦à¥€ | [РуÑÑкий](README.ru.md) + +> âš ï¸ **मशीन अनà¥à¤µà¤¾à¤¦ सूचना** +> +> यह दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ AI दà¥à¤µà¤¾à¤°à¤¾ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से अनà¥à¤µà¤¾à¤¦à¤¿à¤¤ किया गया है। हम गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने का पà¥à¤°à¤¯à¤¾à¤¸ करते हैं, लेकिन अशà¥à¤¦à¥à¤§ अभिवà¥à¤¯à¤•à¥à¤¤à¤¿à¤¯à¤¾à¤ हो सकती हैं। +> +> अनà¥à¤µà¤¾à¤¦ सà¥à¤§à¤¾à¤°à¤¨à¥‡ में मदद करने के लिठ[GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) पर समà¥à¤ªà¤°à¥à¤• करें! आपकी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ हमारे लिठबहà¥à¤¤ मूलà¥à¤¯à¤µà¤¾à¤¨ है। + +[![संसà¥à¤•रण](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![लाइसेंस: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP à¤à¤•ीकरण](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![परीकà¥à¤·à¤£ पास](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![परियोजना बोरà¥à¤¡](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI संसà¥à¤•रण](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - डाउनलोड](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python संसà¥à¤•रण](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![वेबसाइट](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter Follow](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 AI सिसà¥à¤Ÿà¤® के लिठडेटा लेयर।** Skill Seekers डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइटों, GitHub रिपॉज़िटरी, PDF, वीडियो, Jupyter नोटबà¥à¤•, विकी और 10+ अनà¥à¤¯ सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ारों को संरचित जà¥à¤žà¤¾à¤¨ संपतà¥à¤¤à¤¿ में बदलता है—जो मिनटों में AI कौशल (Claude, Gemini, OpenAI), RAG पाइपलाइन (LangChain, LlamaIndex, Pinecone) और AI कोडिंग सहायकों (Cursor, Windsurf, Cline) को शकà¥à¤¤à¤¿ पà¥à¤°à¤¦à¤¾à¤¨ कर सकती हैं। + +> 🌠**[SkillSeekersWeb.com पर जाà¤à¤](https://skillseekersweb.com/)** - 24+ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ कॉनà¥à¤«à¤¼à¤¿à¤—रेशन बà¥à¤°à¤¾à¤‰à¤œà¤¼ करें, अपने कॉनà¥à¤«à¤¼à¤¿à¤— साà¤à¤¾ करें और पूरà¥à¤£ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ देखें! + +> 📋 **[विकास रोडमैप और कारà¥à¤¯ देखें](https://github.com/users/yusufkaraaslan/projects/2)** - 10 शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ में 134 कारà¥à¤¯, किसी भी में योगदान करें! + +## 🌠इकोसिसà¥à¤Ÿà¤® + +Skill Seekers à¤à¤• मलà¥à¤Ÿà¥€-रिपॉजिटरी पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ है। यहां सब कà¥à¤› मौजूद है: + +| रिपॉजिटरी | विवरण | लिंक | +|-----------|--------|------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | कोर CLI और MCP सरà¥à¤µà¤° (यह रिपो) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | वेबसाइट और डॉकà¥à¤¯à¥‚मेंटेशन | [साइट](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | सामà¥à¤¦à¤¾à¤¯à¤¿à¤• कॉनà¥à¤«à¤¿à¤— रिपॉजिटरी | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code पà¥à¤²à¤—इन | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | macOS के लिठHomebrew tap | | + +> **योगदान करना चाहते हैं?** वेबसाइट और कॉनà¥à¤«à¤¿à¤— रिपॉजिटरी नठयोगदानकरà¥à¤¤à¤¾à¤“ं के लिठबेहतरीन शà¥à¤°à¥à¤†à¤¤à¥€ बिंदॠहैं! + +## 🧠 AI सिसà¥à¤Ÿà¤® के लिठडेटा लेयर + +**Skill Seekers à¤à¤• सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• पà¥à¤°à¥€à¤ªà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग लेयर है** जो कचà¥à¤šà¥‡ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥‹à¤‚ और उनका उपयोग करने वाले सभी AI सिसà¥à¤Ÿà¤® के बीच सà¥à¤¥à¤¿à¤¤ है। चाहे आप Claude कौशल, LangChain RAG पाइपलाइन, या Cursor `.cursorrules` फ़ाइल बना रहे हों—डेटा तैयारी पूरी तरह समान है। बस à¤à¤• बार करें, और सभी लकà¥à¤·à¥à¤¯à¥‹à¤‚ पर निरà¥à¤¯à¤¾à¤¤ करें। + +```bash +# à¤à¤• कमांड → संरचित जà¥à¤žà¤¾à¤¨ संपतà¥à¤¤à¤¿ +skill-seekers create https://docs.react.dev/ +# या: skill-seekers create facebook/react +# या: skill-seekers create ./my-project + +# किसी भी AI सिसà¥à¤Ÿà¤® पर निरà¥à¤¯à¤¾à¤¤ करें +skill-seekers package output/react --target claude # → Claude AI कौशल (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob कौशल डायरेकà¥à¤Ÿà¤°à¥€ +``` + +### निरà¥à¤®à¤¿à¤¤ आउटपà¥à¤Ÿ + +| आउटपà¥à¤Ÿ | लकà¥à¤·à¥à¤¯ | उपयोग | +|---------|--------|-------| +| **Claude कौशल** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini कौशल** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, कसà¥à¤Ÿà¤® सहायक | +| **LangChain Documents** | `--target langchain` | QA चेन, à¤à¤œà¥‡à¤‚ट, रिटà¥à¤°à¥€à¤µà¤° | +| **LlamaIndex TextNodes** | `--target llama-index` | कà¥à¤µà¥‡à¤°à¥€ इंजन, चैट इंजन | +| **Haystack Documents** | `--target haystack` | à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œà¤¼ RAG पाइपलाइन | +| **Pinecone-तैयार** (Markdown) | `--target markdown` | वेकà¥à¤Ÿà¤° अपसरà¥à¤Ÿ | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | सà¥à¤¥à¤¾à¤¨à¥€à¤¯ वेकà¥à¤Ÿà¤° DB | +| **IBM Bob कौशल** (डायरेकà¥à¤Ÿà¤°à¥€) | `--target ibm-bob` | IBM Bob पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ/वैशà¥à¤µà¤¿à¤• कौशल | +| **Cursor** `.cursorrules` | `--target markdown` → SKILL.md कॉपी करें | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → कॉपी | VS Code, IntelliJ, Vim | + +### यह कà¥à¤¯à¥‹à¤‚ महतà¥à¤µà¤ªà¥‚रà¥à¤£ है + +- âš¡ **99% तेज़** — दिनों की मैनà¥à¤¯à¥à¤…ल डेटा तैयारी → 15–45 मिनट +- 🎯 **AI कौशल गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾** — 500+ पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ की SKILL.md फ़ाइलें जिसमें उदाहरण, पैटरà¥à¤¨ और मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤ हैं +- 📊 **RAG-तैयार चंक** — सà¥à¤®à¤¾à¤°à¥à¤Ÿ चंकिंग जो कोड बà¥à¤²à¥‰à¤• को सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखती है और संदरà¥à¤­ बनाठरखती है +- 🎬 **वीडियो** — YouTube और सà¥à¤¥à¤¾à¤¨à¥€à¤¯ वीडियो से कोड, टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ और संरचित जà¥à¤žà¤¾à¤¨ निकालें +- 🔄 **बहà¥-सà¥à¤°à¥‹à¤¤** — 18 सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ारों (डॉकà¥à¤¸, GitHub, PDF, वीडियो, नोटबà¥à¤•, विकी आदि) को à¤à¤• जà¥à¤žà¤¾à¤¨ संपतà¥à¤¤à¤¿ में मिलाà¤à¤ +- 🌠**à¤à¤• बार तैयारी, हर लकà¥à¤·à¥à¤¯** — बिना दोबारा सà¥à¤•à¥à¤°à¥ˆà¤ª किठ21 पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® पर निरà¥à¤¯à¤¾à¤¤ करें +- ✅ **यà¥à¤¦à¥à¤§-परीकà¥à¤·à¤¿à¤¤** — 3,700+ परीकà¥à¤·à¤£, 24+ फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ, पà¥à¤°à¥‹à¤¡à¤•à¥à¤¶à¤¨-तैयार + +## 🚀 तà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤ (3 कमांड) + +```bash +# 1. इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers + +# 2. किसी भी सà¥à¤°à¥‹à¤¤ से कौशल बनाà¤à¤ +skill-seekers create https://docs.django.com/ + +# 3. अपने AI पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® के लिठपैकेज करें +skill-seekers package output/django --target claude +``` + +**बस इतना ही!** अब आपके पास `output/django-claude.zip` उपयोग के लिठतैयार है। + +```bash +# à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के लिठà¤à¤• अलग AI à¤à¤œà¥‡à¤‚ट का उपयोग करें (डिफ़ॉलà¥à¤Ÿ: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI-संचालित पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ सà¥à¤•ैन (नया) + +`scan` को किसी भी पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ पर चलाà¤à¤ — à¤à¤• AI à¤à¤œà¥‡à¤‚ट उसके मैनिफ़ेसà¥à¤Ÿ, README, +Dockerfile/CI और सैंपल किठगठसà¥à¤°à¥‹à¤¤ इमà¥à¤ªà¥‹à¤°à¥à¤Ÿ पढ़ता है — फिर पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• पहचाने गठ+फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• के लिठà¤à¤• कॉनà¥à¤«à¤¼à¤¿à¤— और आपके अपने कोड के लिठà¤à¤• `-codebase.json` +जनरेट करता है। पहचाना गया संसà¥à¤•रण पिन किया जाता है ताकि दोबारा चलाने पर +संसà¥à¤•रण परिवरà¥à¤¤à¤¨ रिपोरà¥à¤Ÿ हों: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# फिर इनमें से कोई भी बनाà¤à¤ +skill-seekers create ./configs/scanned/react.json +``` + +यदि किसी पहचान के लिठकोई मौजूदा पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ नहीं है, तो AI à¤à¤• नया कॉनà¥à¤«à¤¼à¤¿à¤— जनरेट +करता है; समापà¥à¤¤à¤¿ पर आप इसे वैकलà¥à¤ªà¤¿à¤• रूप से [सामà¥à¤¦à¤¾à¤¯à¤¿à¤• रजिसà¥à¤Ÿà¥à¤°à¥€](https://github.com/yusufkaraaslan/skill-seekers-configs) में पà¥à¤°à¤•ाशित कर सकते हैं। + +### अनà¥à¤¯ सà¥à¤°à¥‹à¤¤ (18 समरà¥à¤¥à¤¿à¤¤) + +```bash +# GitHub रिपॉज़िटरी +skill-seekers create facebook/react + +# सà¥à¤¥à¤¾à¤¨à¥€à¤¯ पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ +skill-seekers create ./my-project + +# PDF दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ +skill-seekers create manual.pdf + +# Word दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ +skill-seekers create report.docx + +# EPUB ई-बà¥à¤• +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# OpenAPI spec +skill-seekers create openapi.yaml + +# PowerPoint पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ +skill-seekers create presentation.pptx + +# AsciiDoc दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ +skill-seekers create guide.adoc + +# सà¥à¤¥à¤¾à¤¨à¥€à¤¯ HTML फ़ाइल (à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शन से सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पहचान) +skill-seekers create page.html + +# HTML फ़ाइलों की पूरी डायरेकà¥à¤Ÿà¤°à¥€ (HTML-पà¥à¤°à¤§à¤¾à¤¨ डायरेकà¥à¤Ÿà¤°à¥€ के लिठसà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पहचान) +skill-seekers create ./mirror_output/site/ + +# मिशà¥à¤°à¤¿à¤¤/कोड-पà¥à¤°à¤§à¤¾à¤¨ डायरेकà¥à¤Ÿà¤°à¥€ पर HTML मोड बाधà¥à¤¯ करें +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom फ़ीड +skill-seekers create feed.rss + +# Man पेज +skill-seekers create curl.1 + +# वीडियो (YouTube, Vimeo, या सà¥à¤¥à¤¾à¤¨à¥€à¤¯ फ़ाइल — skill-seekers[video] आवशà¥à¤¯à¤•) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# पहली बार? GPU-सकà¥à¤·à¤® विज़à¥à¤…ल डिपेंडेंसी सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से इंसà¥à¤Ÿà¥‰à¤² करें: +skill-seekers create --setup + +# Confluence विकी +skill-seekers create --space-key TEAM --name wiki + +# Notion पेज +skill-seekers create --database-id ... --name docs + +# Slack/Discord चैट à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### हर जगह निरà¥à¤¯à¤¾à¤¤ करें + +```bash +# à¤à¤•ाधिक पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® के लिठपैकेज करें +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Skill Seekers कà¥à¤¯à¤¾ है? + +Skill Seekers **AI सिसà¥à¤Ÿà¤® के लिठडेटा लेयर** है। यह 18 सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ारों—डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइट, GitHub रिपॉज़िटरी, PDF, वीडियो, Jupyter Notebook, Word/EPUB/AsciiDoc दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼, OpenAPI/Swagger सà¥à¤ªà¥‡à¤•, PowerPoint पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿à¤¯à¤¾à¤, RSS/Atom फ़ीड, Man पेज, Confluence विकी, Notion पेज, Slack/Discord à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ आदि—को हर AI लकà¥à¤·à¥à¤¯ के लिठसंरचित जà¥à¤žà¤¾à¤¨ संपतà¥à¤¤à¤¿ में बदलता है: + +| उपयोग | आप कà¥à¤¯à¤¾ पà¥à¤°à¤¾à¤ªà¥à¤¤ करते हैं | उदाहरण | +|-------|------------------------|--------| +| **AI कौशल** | वà¥à¤¯à¤¾à¤ªà¤• SKILL.md + संदरà¥à¤­ | Claude Code, Gemini, GPT | +| **RAG पाइपलाइन** | समृदà¥à¤§ मेटाडेटा के साथ चंक किठगठदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ | LangChain, LlamaIndex, Haystack | +| **वेकà¥à¤Ÿà¤° डेटाबेस** | अपसरà¥à¤Ÿ के लिठतैयार पà¥à¤°à¥€-फ़ॉरà¥à¤®à¥‡à¤Ÿà¥‡à¤¡ डेटा | Pinecone, Chroma, Weaviate, FAISS | +| **AI कोडिंग सहायक** | संदरà¥à¤­ फ़ाइलें जो आपका IDE AI सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से पढ़ता है | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण + +| मैं चाहता/चाहती हूà¤... | यह पढ़ें | +|------------------------|---------| +| **जलà¥à¤¦à¥€ शà¥à¤°à¥‚ करना** | [तà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤](docs/getting-started/02-quick-start.md) - पहले कौशल तक 3 कमांड | +| **अवधारणाà¤à¤ समà¤à¤¨à¤¾** | [मूल अवधारणाà¤à¤](docs/user-guide/01-core-concepts.md) - यह कैसे काम करता है | +| **सà¥à¤°à¥‹à¤¤ सà¥à¤•à¥à¤°à¥ˆà¤ª करना** | [सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग गाइड](docs/user-guide/02-scraping.md) - सभी सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ार | +| **कौशल बढ़ाना** | [à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट गाइड](docs/user-guide/03-enhancement.md) - AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट | +| **कौशल निरà¥à¤¯à¤¾à¤¤ करना** | [पैकेजिंग गाइड](docs/user-guide/04-packaging.md) - पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® निरà¥à¤¯à¤¾à¤¤ | +| **कमांड देखना** | [CLI संदरà¥à¤­](docs/reference/CLI_REFERENCE.md) - सभी 20 कमांड | +| **कॉनà¥à¤«à¤¼à¤¿à¤—र करना** | [कॉनà¥à¤«à¤¼à¤¿à¤— पà¥à¤°à¤¾à¤°à¥‚प](docs/reference/CONFIG_FORMAT.md) - JSON विनिरà¥à¤¦à¥‡à¤¶ | +| **समसà¥à¤¯à¤¾ हल करना** | [समसà¥à¤¯à¤¾ निवारण](docs/user-guide/06-troubleshooting.md) - सामानà¥à¤¯ समसà¥à¤¯à¤¾à¤à¤ | + +**पूरà¥à¤£ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण:** [docs/README.md](docs/README.md) + +दिनों की मैनà¥à¤¯à¥à¤…ल पà¥à¤°à¥€à¤ªà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग के बजाय, Skill Seekers: + +1. **संगà¥à¤°à¤¹ करता है** — डॉकà¥à¤¸, GitHub रिपो, सà¥à¤¥à¤¾à¤¨à¥€à¤¯ कोडबेस, PDF, वीडियो, नोटबà¥à¤•, विकी और 10+ अनà¥à¤¯ सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ार +2. **विशà¥à¤²à¥‡à¤·à¤£ करता है** — गहन AST पारà¥à¤¸à¤¿à¤‚ग, पैटरà¥à¤¨ पहचान, API निषà¥à¤•रà¥à¤·à¤£ +3. **संरचित करता है** — मेटाडेटा के साथ वरà¥à¤—ीकृत संदरà¥à¤­ फ़ाइलें +4. **बढ़ाता है** — AI-संचालित SKILL.md निरà¥à¤®à¤¾à¤£ (Claude, Gemini, या सà¥à¤¥à¤¾à¤¨à¥€à¤¯) +5. **निरà¥à¤¯à¤¾à¤¤ करता है** — à¤à¤• संपतà¥à¤¤à¤¿ से 16 पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®-विशिषà¥à¤Ÿ पà¥à¤°à¤¾à¤°à¥‚प + +## Skill Seekers का उपयोग कà¥à¤¯à¥‹à¤‚ करें? + +### AI कौशल निरà¥à¤®à¤¾à¤¤à¤¾à¤“ं के लिठ(Claude, Gemini, OpenAI) + +- 🎯 **पà¥à¤°à¥‹à¤¡à¤•à¥à¤¶à¤¨-गà¥à¤°à¥‡à¤¡ कौशल** — 500+ पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ की SKILL.md फ़ाइलें जिनमें कोड उदाहरण, पैटरà¥à¤¨ और मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤ हैं +- 🔄 **à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट वरà¥à¤•फ़à¥à¤²à¥‹** — `security-focus`, `architecture-comprehensive`, या कसà¥à¤Ÿà¤® YAML पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ लागू करें +- 🎮 **कोई भी डोमेन** — गेम इंजन (Godot, Unity), फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• (React, Django), आंतरिक उपकरण +- 🔧 **टीमें** — आंतरिक डॉकà¥à¤¸ + कोड को à¤à¤•ल सतà¥à¤¯ सà¥à¤°à¥‹à¤¤ में मिलाà¤à¤ +- 📚 **गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾** — उदाहरण, तà¥à¤µà¤°à¤¿à¤¤ संदरà¥à¤­ और नेविगेशन मारà¥à¤—दरà¥à¤¶à¤¨ के साथ AI-संवरà¥à¤§à¤¿à¤¤ + +### RAG निरà¥à¤®à¤¾à¤¤à¤¾à¤“ं और AI इंजीनियरों के लिठ+ +- 🤖 **RAG-तैयार डेटा** — पà¥à¤°à¥€-चंक किठगठLangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- 🚀 **99% तेज़** — दिनों की पà¥à¤°à¥€à¤ªà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग → 15–45 मिनट +- 📊 **सà¥à¤®à¤¾à¤°à¥à¤Ÿ मेटाडेटा** — शà¥à¤°à¥‡à¤£à¤¿à¤¯à¤¾à¤, सà¥à¤°à¥‹à¤¤, पà¥à¤°à¤•ार → बेहतर पà¥à¤¨à¤°à¥à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿ सटीकता +- 🔄 **बहà¥-सà¥à¤°à¥‹à¤¤** — à¤à¤• पाइपलाइन में डॉकà¥à¤¸ + GitHub + PDF + वीडियो मिलाà¤à¤ +- 🌠**पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®-अजà¥à¤žà¥‡à¤¯à¤µà¤¾à¤¦à¥€** — बिना दोबारा सà¥à¤•à¥à¤°à¥ˆà¤ª किठकिसी भी वेकà¥à¤Ÿà¤° DB या फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• में निरà¥à¤¯à¤¾à¤¤ करें + +### AI कोडिंग सहायक उपयोगकरà¥à¤¤à¤¾à¤“ं के लिठ+ +- 💻 **Cursor / Windsurf / Cline** — सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से `.cursorrules` / `.windsurfrules` / `.clinerules` जनरेट करें +- 🎯 **सà¥à¤¥à¤¾à¤¯à¥€ संदरà¥à¤­** — AI आपके फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• को "जानता" है, बार-बार पà¥à¤°à¥‰à¤®à¥à¤ªà¥à¤Ÿ देने की आवशà¥à¤¯à¤•ता नहीं +- 📚 **हमेशा अदà¥à¤¯à¤¤à¤¿à¤¤** — डॉकà¥à¤¸ बदलने पर मिनटों में संदरà¥à¤­ अपडेट करें + +## मà¥à¤–à¥à¤¯ विशेषताà¤à¤ + +### 🌠डॉकà¥à¤¯à¥‚मेंटेशन सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग +- ✅ **सà¥à¤®à¤¾à¤°à¥à¤Ÿ SPA खोज** - JavaScript SPA साइटों के लिठतीन-परत खोज (sitemap.xml → llms.txt → हेडलेस बà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° रेंडरिंग) +- ✅ **llms.txt समरà¥à¤¥à¤¨** - LLM-तैयार दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ फ़ाइलों को सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से पहचानता और उपयोग करता है (10 गà¥à¤¨à¤¾ तेज़) +- ✅ **सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• सà¥à¤•à¥à¤°à¥ˆà¤ªà¤°** - किसी भी डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइट के साथ काम करता है +- ✅ **सà¥à¤®à¤¾à¤°à¥à¤Ÿ वरà¥à¤—ीकरण** - सामगà¥à¤°à¥€ को विषय के अनà¥à¤¸à¤¾à¤° सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ करता है +- ✅ **कोड भाषा पहचान** - Python, JavaScript, C++, GDScript आदि को पहचानता है +- ✅ **24+ तैयार पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ** - Godot, React, Vue, Django, FastAPI और अधिक + +### 📄 PDF समरà¥à¤¥à¤¨ +- ✅ **बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ PDF निषà¥à¤•रà¥à¤·à¤£** - PDF फ़ाइलों से टेकà¥à¤¸à¥à¤Ÿ, कोड और छवियाठनिकालें +- ✅ **सà¥à¤•ैन किठगठPDF के लिठOCR** - सà¥à¤•ैन किठगठदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥‹à¤‚ से टेकà¥à¤¸à¥à¤Ÿ निकालें +- ✅ **पासवरà¥à¤¡-सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ PDF** - à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ PDF को संभालें +- ✅ **तालिका निषà¥à¤•रà¥à¤·à¤£** - PDF से जटिल तालिकाà¤à¤ निकालें +- ✅ **समानांतर पà¥à¤°à¤¸à¤‚सà¥à¤•रण** - बड़ी PDF के लिठ3 गà¥à¤¨à¤¾ तेज़ +- ✅ **बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ कैशिंग** - दोबारा चलाने पर 50% तेज़ + +### 🎬 वीडियो निषà¥à¤•रà¥à¤·à¤£ +- ✅ **YouTube और सà¥à¤¥à¤¾à¤¨à¥€à¤¯ वीडियो** - वीडियो से टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ, ऑन-सà¥à¤•à¥à¤°à¥€à¤¨ कोड और संरचित जà¥à¤žà¤¾à¤¨ निकालें +- ✅ **विज़à¥à¤…ल फ़à¥à¤°à¥‡à¤® विशà¥à¤²à¥‡à¤·à¤£** - कोड à¤à¤¡à¤¿à¤Ÿà¤°, टरà¥à¤®à¤¿à¤¨à¤², सà¥à¤²à¤¾à¤‡à¤¡ और आरेखों से OCR निषà¥à¤•रà¥à¤·à¤£ +- ✅ **GPU सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पहचान** - सही PyTorch बिलà¥à¤¡ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से इंसà¥à¤Ÿà¥‰à¤² करता है (CUDA/ROCm/MPS/CPU) +- ✅ **AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट** - दो-चरण: OCR आरà¥à¤Ÿà¤¿à¤«à¤¼à¥ˆà¤•à¥à¤Ÿ साफ़ करें + पॉलिश SKILL.md जनरेट करें +- ✅ **समय कà¥à¤²à¤¿à¤ªà¤¿à¤‚ग** - `--start-time` और `--end-time` के साथ विशिषà¥à¤Ÿ खंड निकालें +- ✅ **पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ समरà¥à¤¥à¤¨** - YouTube पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ में सभी वीडियो को बैच में पà¥à¤°à¥‹à¤¸à¥‡à¤¸ करें +- ✅ **Vision API फ़ॉलबैक** - कम-विशà¥à¤µà¤¸à¤¨à¥€à¤¯ OCR फ़à¥à¤°à¥‡à¤® के लिठClaude Vision का उपयोग करें + +### 🙠GitHub रिपॉज़िटरी विशà¥à¤²à¥‡à¤·à¤£ +- ✅ **गहन कोड विशà¥à¤²à¥‡à¤·à¤£** - Python, JavaScript, TypeScript, Java, C++, Go के लिठAST पारà¥à¤¸à¤¿à¤‚ग +- ✅ **API निषà¥à¤•रà¥à¤·à¤£** - फ़ंकà¥à¤¶à¤¨, कà¥à¤²à¤¾à¤¸à¥‡à¤¸, मेथडà¥à¤¸ जिनमें पैरामीटर और टाइप शामिल हैं +- ✅ **रिपॉज़िटरी मेटाडेटा** - README, फ़ाइल टà¥à¤°à¥€, भाषा बà¥à¤°à¥‡à¤•डाउन, सà¥à¤Ÿà¤¾à¤°à¥à¤¸/फ़ोरà¥à¤•à¥à¤¸ +- ✅ **GitHub Issues और PR** - लेबल और माइलसà¥à¤Ÿà¥‹à¤¨ के साथ खà¥à¤²à¥‡/बंद issues पà¥à¤°à¤¾à¤ªà¥à¤¤ करें +- ✅ **CHANGELOG और रिलीज़** - संसà¥à¤•रण इतिहास सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से निकालें +- ✅ **विरोध पहचान** - दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•ृत API बनाम वासà¥à¤¤à¤µà¤¿à¤• कोड कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¯à¤¨ की तà¥à¤²à¤¨à¤¾ करें +- ✅ **MCP à¤à¤•ीकरण** - पà¥à¤°à¤¾à¤•ृतिक भाषा: "GitHub रिपो facebook/react सà¥à¤•à¥à¤°à¥ˆà¤ª करें" + +### 🔄 à¤à¤•ीकृत बहà¥-सà¥à¤°à¥‹à¤¤ सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग +- ✅ **à¤à¤•ाधिक सà¥à¤°à¥‹à¤¤ मिलाà¤à¤** - à¤à¤• कौशल में डॉकà¥à¤¯à¥‚मेंटेशन + GitHub + PDF मिशà¥à¤°à¤¿à¤¤ करें +- ✅ **विरोध पहचान** - डॉकà¥à¤¸ और कोड के बीच विसंगतियों को सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से खोजें +- ✅ **बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ विलय** - नियम-आधारित या AI-संचालित विरोध समाधान +- ✅ **पारदरà¥à¤¶à¥€ रिपोरà¥à¤Ÿà¤¿à¤‚ग** - âš ï¸ à¤šà¥‡à¤¤à¤¾à¤µà¤¨à¤¿à¤¯à¥‹à¤‚ के साथ साथ-साथ तà¥à¤²à¤¨à¤¾ +- ✅ **दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ अंतराल विशà¥à¤²à¥‡à¤·à¤£** - पà¥à¤°à¤¾à¤¨à¥‡ डॉकà¥à¤¸ और अनदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•ृत सà¥à¤µà¤¿à¤§à¤¾à¤“ं की पहचान +- ✅ **à¤à¤•ल सतà¥à¤¯ सà¥à¤°à¥‹à¤¤** - à¤à¤• कौशल जो इरादा (डॉकà¥à¤¸) और वासà¥à¤¤à¤µà¤¿à¤•ता (कोड) दोनों दिखाता है +- ✅ **पशà¥à¤šà¤—ामी संगत** - पà¥à¤°à¤¾à¤¨à¥‡ à¤à¤•ल-सà¥à¤°à¥‹à¤¤ कॉनà¥à¤«à¤¼à¤¿à¤— अभी भी काम करते हैं + +### 🤖 बहà¥-LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® समरà¥à¤¥à¤¨ +- ✅ **12 LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, जेनेरिक Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग** - समान दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ सभी पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® के लिठकाम करते हैं +- ✅ **पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®-विशिषà¥à¤Ÿ पैकेजिंग** - पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• LLM के लिठअनà¥à¤•ूलित पà¥à¤°à¤¾à¤°à¥‚प +- ✅ **à¤à¤•-कमांड निरà¥à¤¯à¤¾à¤¤** - `--target` फ़à¥à¤²à¥ˆà¤— पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® चà¥à¤¨à¤¤à¤¾ है +- ✅ **वैकलà¥à¤ªà¤¿à¤• डिपेंडेंसी** - केवल वही इंसà¥à¤Ÿà¥‰à¤² करें जो आपको चाहिठ+- ✅ **100% पशà¥à¤šà¤—ामी संगत** - मौजूदा Claude वरà¥à¤•फ़à¥à¤²à¥‹ अपरिवरà¥à¤¤à¤¿à¤¤ + +| पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® | पà¥à¤°à¤¾à¤°à¥‚प | अपलोड | à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट | API Key | कसà¥à¤Ÿà¤® à¤à¤‚डपॉइंट | +|------------|---------|-------|-------------|---------|----------------| +| **Claude AI** | ZIP + YAML | ✅ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ | ✅ हाठ| ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ | ✅ हाठ| GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ | ✅ हाठ| OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ | ✅ हाठ| MINIMAX_API_KEY | - | +| **जेनेरिक Markdown** | ZIP | ⌠मैनà¥à¤¯à¥à¤…ल | ⌠नहीं | - | - | + +```bash +# Claude (डिफ़ॉलà¥à¤Ÿ - कोई बदलाव आवशà¥à¤¯à¤• नहीं!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# जेनेरिक Markdown (सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• निरà¥à¤¯à¤¾à¤¤) +skill-seekers package output/react/ --target markdown +# Markdown फ़ाइलों का किसी भी LLM में सीधे उपयोग करें +``` + +
+🔧 अपने सà¥à¤µà¤¯à¤‚ के AI पà¥à¤°à¤¦à¤¾à¤¤à¤¾ का उपयोग करें (OpenAI-संगत à¤à¤‚डपॉइंट + सबà¥à¤¸à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨, Anthropic कà¥à¤°à¥‡à¤¡à¤¿à¤Ÿ आवशà¥à¤¯à¤• नहीं) + +वैकलà¥à¤ªà¤¿à¤• AI **à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट** चरण (`create`, `scan` और `enhance` दà¥à¤µà¤¾à¤°à¤¾ उपयोग किया जाता है) के लिठAnthropic key **आवशà¥à¤¯à¤• नहीं** है। इसे चलाने के तीन तरीके हैं: + +**1. वह सबà¥à¤¸à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ उपयोग करें जिसके लिठआप पहले से भà¥à¤—तान करते हैं — कोई API कà¥à¤°à¥‡à¤¡à¤¿à¤Ÿ नहीं (LOCAL à¤à¤œà¥‡à¤‚ट मोड)** + +Skill Seekers उस कोडिंग-à¤à¤œà¥‡à¤‚ट CLI को कॉल कर सकता है जिसमें आप पहले से लॉग इन हैं, ताकि à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट मीटरà¥à¤¡ API टोकन के बजाय आपके मौजूदा पà¥à¤²à¤¾à¤¨ पर चले: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → आपका ChatGPT Plus +skill-seekers create --agent claude # Claude Code → आपका Claude Pro/Max +``` + +समरà¥à¤¥à¤¿à¤¤ à¤à¤œà¥‡à¤‚ट: `claude`, `codex`, `copilot`, `opencode`, `kimi` और `custom` +(किसी अनà¥à¤¯ टूल को चलाने के लिठ`--agent custom` को `--agent-cmd " ..."` के साथ जोड़ें)। + +**2. कोई भी OpenAI-संगत पà¥à¤°à¤¦à¤¾à¤¤à¤¾ (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +ये सभी à¤à¤• OpenAI-संगत `/v1` à¤à¤‚डपॉइंट पà¥à¤°à¤¦à¤¾à¤¨ करते हैं। तीन परà¥à¤¯à¤¾à¤µà¤°à¤£ चर के साथ Skill Seekers को किसी à¤à¤• पर पॉइंट करें — यह `OPENAI_API_KEY` का पता लगाता है, और OpenAI SDK सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से `OPENAI_BASE_URL` का समà¥à¤®à¤¾à¤¨ करता है: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # पà¥à¤°à¤¦à¤¾à¤¤à¤¾ à¤à¤‚डपॉइंट (तालिका देखें) +export OPENAI_MODEL="" # आवशà¥à¤¯à¤• — डिफ़ॉलà¥à¤Ÿ gpt-4o अनà¥à¤¯ जगह मौजूद नहीं होगा +skill-seekers create +``` + +| पà¥à¤°à¤¦à¤¾à¤¤à¤¾ | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> पà¥à¤°à¤¦à¤¾à¤¤à¤¾ पहचान **पहले** मिलने वाले API-key परà¥à¤¯à¤¾à¤µà¤°à¤£ चर को चà¥à¤¨à¤¤à¥€ है (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`)। किसी विशिषà¥à¤Ÿ पà¥à¤°à¤¦à¤¾à¤¤à¤¾ को बाधà¥à¤¯ करने के लिठ`SKILL_SEEKER_PROVIDER` सेट करें, या सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि उचà¥à¤š-पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ता वाली keys अनसेट हैं। + +**3. Claude-संगत à¤à¤‚डपॉइंट (जैसे GLM, पà¥à¤°à¥‰à¤•à¥à¤¸à¥€)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) और Kimi/Moonshot (`MOONSHOT_API_KEY`) भी नेटिव रूप से समरà¥à¤¥à¤¿à¤¤ हैं। पà¥à¤°à¤¤à¤¿-पà¥à¤°à¤¦à¤¾à¤¤à¤¾ मॉडल ओवरराइड सहित पूरी सूची के लिठ**[परà¥à¤¯à¤¾à¤µà¤°à¤£ चर संदरà¥à¤­](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** देखें। + +
+ +**इंसà¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨:** +```bash +# Gemini समरà¥à¤¥à¤¨ के साथ इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers[gemini] + +# OpenAI समरà¥à¤¥à¤¨ के साथ इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers[openai] + +# MiniMax समरà¥à¤¥à¤¨ के साथ इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers[minimax] + +# सभी LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® के साथ इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• à¤à¤•ीकरण + +- ✅ **LangChain Documents** - `page_content` + मेटाडेटा के साथ सीधे `Document` पà¥à¤°à¤¾à¤°à¥‚प में निरà¥à¤¯à¤¾à¤¤ + - इसके लिठउपयà¥à¤•à¥à¤¤: QA चेन, रिटà¥à¤°à¥€à¤µà¤°, वेकà¥à¤Ÿà¤° सà¥à¤Ÿà¥‹à¤°, à¤à¤œà¥‡à¤‚ट + - उदाहरण: [LangChain RAG पाइपलाइन](examples/langchain-rag-pipeline/) + - गाइड: [LangChain à¤à¤•ीकरण](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - अदà¥à¤µà¤¿à¤¤à¥€à¤¯ ID + à¤à¤®à¥à¤¬à¥‡à¤¡à¤¿à¤‚ग के साथ `TextNode` पà¥à¤°à¤¾à¤°à¥‚प में निरà¥à¤¯à¤¾à¤¤ + - इसके लिठउपयà¥à¤•à¥à¤¤: कà¥à¤µà¥‡à¤°à¥€ इंजन, चैट इंजन, सà¥à¤Ÿà¥‹à¤°à¥‡à¤œ संदरà¥à¤­ + - उदाहरण: [LlamaIndex कà¥à¤µà¥‡à¤°à¥€ इंजन](examples/llama-index-query-engine/) + - गाइड: [LlamaIndex à¤à¤•ीकरण](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone-तैयार पà¥à¤°à¤¾à¤°à¥‚प** - वेकà¥à¤Ÿà¤° डेटाबेस अपसरà¥à¤Ÿ के लिठअनà¥à¤•ूलित + - इसके लिठउपयà¥à¤•à¥à¤¤: पà¥à¤°à¥‹à¤¡à¤•à¥à¤¶à¤¨ वेकà¥à¤Ÿà¤° सरà¥à¤š, सिमेंटिक सरà¥à¤š, हाइबà¥à¤°à¤¿à¤¡ सरà¥à¤š + - उदाहरण: [Pinecone अपसरà¥à¤Ÿ](examples/pinecone-upsert/) + - गाइड: [Pinecone à¤à¤•ीकरण](docs/integrations/PINECONE.md) + +**तà¥à¤µà¤°à¤¿à¤¤ निरà¥à¤¯à¤¾à¤¤:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤•) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**पूरà¥à¤£ RAG पाइपलाइन गाइड:** [RAG पाइपलाइन दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI कोडिंग सहायक à¤à¤•ीकरण + +किसी भी फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ को 4+ AI सहायकों के लिठविशेषजà¥à¤ž कोडिंग संदरà¥à¤­ में बदलें: + +- ✅ **Cursor IDE** - AI-संचालित कोड सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठ`.cursorrules` जनरेट करें + - इसके लिठउपयà¥à¤•à¥à¤¤: फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤•-विशिषà¥à¤Ÿ कोड जनरेशन, सà¥à¤¸à¤‚गत पैटरà¥à¤¨ + - गाइड: [Cursor à¤à¤•ीकरण](docs/integrations/CURSOR.md) + - उदाहरण: [Cursor React कौशल](examples/cursor-react-skill/) + +- ✅ **Windsurf** - `.windsurfrules` के साथ Windsurf AI सहायक संदरà¥à¤­ कसà¥à¤Ÿà¤®à¤¾à¤‡à¤œà¤¼ करें + - इसके लिठउपयà¥à¤•à¥à¤¤: IDE-नेटिव AI सहायता, फ़à¥à¤²à¥‹-आधारित कोडिंग + - गाइड: [Windsurf à¤à¤•ीकरण](docs/integrations/WINDSURF.md) + - उदाहरण: [Windsurf FastAPI संदरà¥à¤­](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - VS Code à¤à¤œà¥‡à¤‚ट के लिठसिसà¥à¤Ÿà¤® पà¥à¤°à¥‰à¤®à¥à¤ªà¥à¤Ÿ + MCP + - इसके लिठउपयà¥à¤•à¥à¤¤: VS Code में à¤à¤œà¥‡à¤‚टिक कोड जनरेशन + - गाइड: [Cline à¤à¤•ीकरण](docs/integrations/CLINE.md) + - उदाहरण: [Cline Django सहायक](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - IDE-अजà¥à¤žà¥‡à¤¯à¤µà¤¾à¤¦à¥€ AI के लिठसंदरà¥à¤­ सरà¥à¤µà¤° + - इसके लिठउपयà¥à¤•à¥à¤¤: बहà¥-IDE वातावरण (VS Code, JetBrains, Vim), कसà¥à¤Ÿà¤® LLM पà¥à¤°à¤¦à¤¾à¤¤à¤¾ + - गाइड: [Continue à¤à¤•ीकरण](docs/integrations/CONTINUE_DEV.md) + - उदाहरण: [Continue सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• संदरà¥à¤­](examples/continue-dev-universal/) + +**AI कोडिंग टूल के लिठतà¥à¤µà¤°à¤¿à¤¤ निरà¥à¤¯à¤¾à¤¤:** +```bash +# किसी भी AI कोडिंग सहायक के लिठ(Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # या --target markdown + +# अपने पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ में कॉपी करें (Cursor के लिठउदाहरण) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# या Windsurf के लिठ+cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# या Cline के लिठ+cp output/django-claude/SKILL.md my-project/.clinerules + +# या Continue.dev के लिठ(HTTP सरà¥à¤µà¤°) +python examples/continue-dev-universal/context_server.py +# ~/.continue/config.json में कॉनà¥à¤«à¤¼à¤¿à¤—र करें +``` + +**à¤à¤•ीकरण हब:** [सभी AI सिसà¥à¤Ÿà¤® à¤à¤•ीकरण](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 तीन-धारा GitHub आरà¥à¤•िटेकà¥à¤šà¤° +- ✅ **तीन-धारा विशà¥à¤²à¥‡à¤·à¤£** - GitHub रिपो को कोड, डॉकà¥à¤¸ और अंतरà¥à¤¦à¥ƒà¤·à¥à¤Ÿà¤¿ धाराओं में विभाजित करें +- ✅ **à¤à¤•ीकृत कोडबेस विशà¥à¤²à¥‡à¤·à¤•** - GitHub URL और सà¥à¤¥à¤¾à¤¨à¥€à¤¯ पथ दोनों के साथ काम करता है +- ✅ **C3.x विशà¥à¤²à¥‡à¤·à¤£ गहराई** - 'basic' (1-2 मिनट) या 'c3x' (20-60 मिनट) विशà¥à¤²à¥‡à¤·à¤£ चà¥à¤¨à¥‡à¤‚ +- ✅ **संवरà¥à¤§à¤¿à¤¤ राउटर जनरेशन** - GitHub मेटाडेटा, README तà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤, सामानà¥à¤¯ समसà¥à¤¯à¤¾à¤à¤ +- ✅ **Issue à¤à¤•ीकरण** - GitHub issues से शीरà¥à¤· समसà¥à¤¯à¤¾à¤à¤ और समाधान +- ✅ **सà¥à¤®à¤¾à¤°à¥à¤Ÿ राउटिंग कीवरà¥à¤¡** - बेहतर विषय पहचान के लिठGitHub लेबल 2x भारित + +**तीन धाराà¤à¤ विसà¥à¤¤à¤¾à¤° से:** +- **धारा 1: कोड** - गहन C3.x विशà¥à¤²à¥‡à¤·à¤£ (पैटरà¥à¤¨, उदाहरण, गाइड, कॉनà¥à¤«à¤¼à¤¿à¤—, आरà¥à¤•िटेकà¥à¤šà¤°) +- **धारा 2: डॉकà¥à¤¸** - रिपॉज़िटरी दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण (README, CONTRIBUTING, docs/*.md) +- **धारा 3: अंतरà¥à¤¦à¥ƒà¤·à¥à¤Ÿà¤¿** - सामà¥à¤¦à¤¾à¤¯à¤¿à¤• जà¥à¤žà¤¾à¤¨ (issues, लेबल, stars, forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# तीनों धाराओं के साथ GitHub रिपो का विशà¥à¤²à¥‡à¤·à¤£ करें +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # या "basic" तà¥à¤µà¤°à¤¿à¤¤ विशà¥à¤²à¥‡à¤·à¤£ के लिठ+ fetch_github_metadata=True +) + +# कोड धारा (C3.x विशà¥à¤²à¥‡à¤·à¤£) तक पहà¥à¤à¤šà¥‡à¤‚ +print(f"डिज़ाइन पैटरà¥à¤¨: {len(result.code_analysis['c3_1_patterns'])}") +print(f"टेसà¥à¤Ÿ उदाहरण: {result.code_analysis['c3_2_examples_count']}") + +# डॉकà¥à¤¸ धारा (रिपॉज़िटरी डॉकà¥à¤¸) तक पहà¥à¤à¤šà¥‡à¤‚ +print(f"README: {result.github_docs['readme'][:100]}") + +# अंतरà¥à¤¦à¥ƒà¤·à¥à¤Ÿà¤¿ धारा (GitHub मेटाडेटा) तक पहà¥à¤à¤šà¥‡à¤‚ +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"सामानà¥à¤¯ समसà¥à¤¯à¤¾à¤à¤: {len(result.github_insights['common_problems'])}") +``` + +**पूरà¥à¤£ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण**: [तीन-धारा कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¯à¤¨ सारांश](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠सà¥à¤®à¤¾à¤°à¥à¤Ÿ दर सीमा पà¥à¤°à¤¬à¤‚धन और कॉनà¥à¤«à¤¼à¤¿à¤—रेशन +- ✅ **बहà¥-टोकन कॉनà¥à¤«à¤¼à¤¿à¤—रेशन सिसà¥à¤Ÿà¤®** - à¤à¤•ाधिक GitHub खातों का पà¥à¤°à¤¬à¤‚धन (वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त, कारà¥à¤¯, OSS) + - `~/.config/skill-seekers/config.json` पर सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ कॉनà¥à¤«à¤¼à¤¿à¤— भंडारण (600 अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤) + - पà¥à¤°à¤¤à¤¿-पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² दर सीमा रणनीतियाà¤: `prompt`, `wait`, `switch`, `fail` + - पà¥à¤°à¤¤à¤¿ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² कॉनà¥à¤«à¤¼à¤¿à¤—र करने योगà¥à¤¯ टाइमआउट (डिफ़ॉलà¥à¤Ÿ: 30 मिनट, अनिशà¥à¤šà¤¿à¤¤ पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ रोकता है) + - सà¥à¤®à¤¾à¤°à¥à¤Ÿ फ़ॉलबैक शà¥à¤°à¥ƒà¤‚खला: CLI तरà¥à¤• → परà¥à¤¯à¤¾à¤µà¤°à¤£ चर → कॉनà¥à¤«à¤¼à¤¿à¤— फ़ाइल → पà¥à¤°à¥‰à¤®à¥à¤ªà¥à¤Ÿ + - Claude, Gemini, OpenAI के लिठAPI key पà¥à¤°à¤¬à¤‚धन +- ✅ **इंटरैकà¥à¤Ÿà¤¿à¤µ कॉनà¥à¤«à¤¼à¤¿à¤—रेशन विज़ारà¥à¤¡** - आसान सेटअप के लिठसà¥à¤‚दर टरà¥à¤®à¤¿à¤¨à¤² UI + - टोकन निरà¥à¤®à¤¾à¤£ के लिठबà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° à¤à¤•ीकरण (GitHub आदि सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ खोलता है) + - टोकन मानà¥à¤¯à¤•रण और कनेकà¥à¤¶à¤¨ परीकà¥à¤·à¤£ + - रंग कोडिंग के साथ विज़à¥à¤…ल सà¥à¤Ÿà¥‡à¤Ÿà¤¸ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨ +- ✅ **बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ दर सीमा हैंडलर** - अब अनिशà¥à¤šà¤¿à¤¤ पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ नहीं! + - दर सीमाओं के बारे में पूरà¥à¤µ चेतावनी (60/घंटा बनाम 5000/घंटा) + - GitHub API पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾à¤“ं से रीयल-टाइम पहचान + - पà¥à¤°à¤—ति के साथ लाइव उलटी गिनती टाइमर + - दर सीमित होने पर सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² सà¥à¤µà¤¿à¤šà¤¿à¤‚ग + - चार रणनीतियाà¤: prompt (पूछें), wait (उलटी गिनती), switch (दूसरा पà¥à¤°à¤¯à¤¾à¤¸), fail (रदà¥à¤¦) +- ✅ **पà¥à¤¨à¤ƒ शà¥à¤°à¥‚ करने की कà¥à¤·à¤®à¤¤à¤¾** - बाधित कारà¥à¤¯à¥‹à¤‚ को जारी रखें + - कॉनà¥à¤«à¤¼à¤¿à¤—र करने योगà¥à¤¯ अंतराल पर पà¥à¤°à¤—ति सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सहेजें (डिफ़ॉलà¥à¤Ÿ: 60 सेकंड) + - पà¥à¤°à¤—ति विवरण के साथ सभी पà¥à¤¨à¤ƒ शà¥à¤°à¥‚ करने योगà¥à¤¯ कारà¥à¤¯à¥‹à¤‚ की सूची + - पà¥à¤°à¤¾à¤¨à¥‡ कारà¥à¤¯à¥‹à¤‚ की सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सफ़ाई (डिफ़ॉलà¥à¤Ÿ: 7 दिन) +- ✅ **CI/CD समरà¥à¤¥à¤¨** - ऑटोमेशन के लिठनॉन-इंटरैकà¥à¤Ÿà¤¿à¤µ मोड + - `--non-interactive` फ़à¥à¤²à¥ˆà¤— पà¥à¤°à¥‰à¤®à¥à¤ªà¥à¤Ÿ के बिना तेज़ विफलता + - `--profile` फ़à¥à¤²à¥ˆà¤— विशिषà¥à¤Ÿ GitHub खाता चà¥à¤¨à¤¨à¥‡ के लिठ+ - पाइपलाइन लॉग के लिठसà¥à¤ªà¤·à¥à¤Ÿ तà¥à¤°à¥à¤Ÿà¤¿ संदेश + +**तà¥à¤µà¤°à¤¿à¤¤ सेटअप:** +```bash +# à¤à¤• बार का कॉनà¥à¤«à¤¼à¤¿à¤—रेशन (5 मिनट) +skill-seekers config --github + +# निजी रिपो के लिठविशिषà¥à¤Ÿ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² उपयोग करें +skill-seekers create mycompany/private-repo --profile work + +# CI/CD मोड (तेज़ विफलता, कोई पà¥à¤°à¥‰à¤®à¥à¤ªà¥à¤Ÿ नहीं) +skill-seekers create owner/repo --non-interactive + +# बाधित कारà¥à¤¯ पà¥à¤¨à¤ƒ शà¥à¤°à¥‚ करें +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**दर सीमा रणनीतियाठविसà¥à¤¤à¤¾à¤° से:** +- **prompt** (डिफ़ॉलà¥à¤Ÿ) - दर सीमित होने पर पूछें कि कà¥à¤¯à¤¾ करना है (पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾, सà¥à¤µà¤¿à¤š, टोकन सेटअप, रदà¥à¤¦) +- **wait** - उलटी गिनती टाइमर के साथ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ (टाइमआउट का समà¥à¤®à¤¾à¤¨ करता है) +- **switch** - सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से अगला उपलबà¥à¤§ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² आज़माà¤à¤ (बहà¥-खाता सेटअप के लिà¤) +- **fail** - सà¥à¤ªà¤·à¥à¤Ÿ तà¥à¤°à¥à¤Ÿà¤¿ के साथ तà¥à¤°à¤‚त विफल (CI/CD के लिठबिलà¥à¤•à¥à¤² सही) + +### 🎯 Bootstrap कौशल - सà¥à¤µ-होसà¥à¤Ÿà¤¿à¤‚ग + +Skill Seekers को अपने AI à¤à¤œà¥‡à¤‚ट (Claude Code, Kimi, Codex आदि) में उपयोग के लिठà¤à¤• कौशल के रूप में जनरेट करें: + +```bash +# कौशल जनरेट करें +./scripts/bootstrap_skill.sh + +# Claude Code में इंसà¥à¤Ÿà¥‰à¤² करें +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**आपको कà¥à¤¯à¤¾ मिलता है:** +- ✅ **पूरà¥à¤£ कौशल दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण** - सभी CLI कमांड और उपयोग पैटरà¥à¤¨ +- ✅ **CLI कमांड संदरà¥à¤­** - पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• टूल और उसके विकलà¥à¤ª दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•ृत +- ✅ **तà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤ उदाहरण** - सामानà¥à¤¯ वरà¥à¤•फ़à¥à¤²à¥‹ और सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® अभà¥à¤¯à¤¾à¤¸ +- ✅ **सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤-जनरेटेड API डॉकà¥à¤¸** - कोड विशà¥à¤²à¥‡à¤·à¤£, पैटरà¥à¤¨ और उदाहरण + +### 🔠निजी कॉनà¥à¤«à¤¼à¤¿à¤— रिपॉज़िटरी +- ✅ **Git-आधारित कॉनà¥à¤«à¤¼à¤¿à¤— सà¥à¤°à¥‹à¤¤** - निजी/टीम Git रिपॉज़िटरी से कॉनà¥à¤«à¤¼à¤¿à¤— पà¥à¤°à¤¾à¤ªà¥à¤¤ करें +- ✅ **बहà¥-सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤¬à¤‚धन** - असीमित GitHub, GitLab, Bitbucket रिपो पंजीकृत करें +- ✅ **टीम सहयोग** - 3-5 वà¥à¤¯à¤•à¥à¤¤à¤¿ टीमों में कसà¥à¤Ÿà¤® कॉनà¥à¤«à¤¼à¤¿à¤— साà¤à¤¾ करें +- ✅ **à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œà¤¼ समरà¥à¤¥à¤¨** - पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ता-आधारित समाधान के साथ 500+ डेवलपर तक सà¥à¤•ेल करें +- ✅ **सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण** - परà¥à¤¯à¤¾à¤µà¤°à¤£ चर टोकन (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ कैशिंग** - à¤à¤• बार कà¥à¤²à¥‹à¤¨ करें, अपडेट सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से पà¥à¤°à¤¾à¤ªà¥à¤¤ करें +- ✅ **ऑफ़लाइन मोड** - ऑफ़लाइन होने पर कैश किठगठकॉनà¥à¤«à¤¼à¤¿à¤— के साथ काम करें + +### 🤖 कोडबेस विशà¥à¤²à¥‡à¤·à¤£ (C3.x) + +**C3.4: AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के साथ कॉनà¥à¤«à¤¼à¤¿à¤—रेशन पैटरà¥à¤¨ निषà¥à¤•रà¥à¤·à¤£** +- ✅ **9 कॉनà¥à¤«à¤¼à¤¿à¤— पà¥à¤°à¤¾à¤°à¥‚प** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 पैटरà¥à¤¨ पà¥à¤°à¤•ार** - डेटाबेस, API, लॉगिंग, कैश, ईमेल, पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण, सरà¥à¤µà¤° कॉनà¥à¤«à¤¼à¤¿à¤—रेशन +- ✅ **AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट** - वैकलà¥à¤ªà¤¿à¤• दोहरे-मोड AI विशà¥à¤²à¥‡à¤·à¤£ (API + LOCAL) + - पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• कॉनà¥à¤«à¤¼à¤¿à¤— कà¥à¤¯à¤¾ करता है समà¤à¤¾à¤¤à¤¾ है + - सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® अभà¥à¤¯à¤¾à¤¸ और सà¥à¤§à¤¾à¤° सà¥à¤à¤¾à¤¤à¤¾ है + - **सà¥à¤°à¤•à¥à¤·à¤¾ विशà¥à¤²à¥‡à¤·à¤£** - हारà¥à¤¡à¤•ोडेड रहसà¥à¤¯, उजागर कà¥à¤°à¥‡à¤¡à¥‡à¤‚शियल खोजता है +- ✅ **सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण** - सभी कॉनà¥à¤«à¤¼à¤¿à¤— का JSON + Markdown दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण जनरेट करता है +- ✅ **MCP à¤à¤•ीकरण** - à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट समरà¥à¤¥à¤¨ के साथ `extract_config_patterns` टूल + +**C3.3: AI-संवरà¥à¤§à¤¿à¤¤ कैसे-करें मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤** +- ✅ **वà¥à¤¯à¤¾à¤ªà¤• AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट** - बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ गाइड को पेशेवर टà¥à¤¯à¥‚टोरियल में बदलता है +- ✅ **5 सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सà¥à¤§à¤¾à¤°** - चरण विवरण, समसà¥à¤¯à¤¾ निवारण, पूरà¥à¤µà¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾à¤à¤, अगले कदम, उपयोग मामले +- ✅ **दोहरे-मोड समरà¥à¤¥à¤¨** - API मोड (Claude API) या LOCAL मोड (Claude Code CLI) +- ✅ **LOCAL मोड में शूनà¥à¤¯ लागत** - अपने Claude Code Max पà¥à¤²à¤¾à¤¨ का उपयोग करके मà¥à¤«à¤¼à¥à¤¤ à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट +- ✅ **गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ परिवरà¥à¤¤à¤¨** - 75-पंकà¥à¤¤à¤¿ टेमà¥à¤ªà¤²à¥‡à¤Ÿ → 500+ पंकà¥à¤¤à¤¿ वà¥à¤¯à¤¾à¤ªà¤• मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤ + +**उपयोग:** +```bash +# तà¥à¤µà¤°à¤¿à¤¤ विशà¥à¤²à¥‡à¤·à¤£ (1-2 मिनट, केवल बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ सà¥à¤µà¤¿à¤§à¤¾à¤à¤) +skill-seekers scan tests/ --quick + +# AI के साथ वà¥à¤¯à¤¾à¤ªà¤• विशà¥à¤²à¥‡à¤·à¤£ (20-60 मिनट, सभी सà¥à¤µà¤¿à¤§à¤¾à¤à¤) +skill-seekers scan tests/ --comprehensive + +# AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के साथ +skill-seekers scan tests/ --enhance +``` + +**पूरà¥à¤£ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट वरà¥à¤•फ़à¥à¤²à¥‹ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ + +पà¥à¤¨: पà¥à¤°à¤¯à¥‹à¤œà¥à¤¯ YAML-परिभाषित à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट पाइपलाइन जो नियंतà¥à¤°à¤¿à¤¤ करती हैं कि AI कचà¥à¤šà¥‡ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ को पॉलिश किठगठकौशल में कैसे बदलता है। + +- ✅ **5 बंडल पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **उपयोगकरà¥à¤¤à¤¾-परिभाषित पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ** — `~/.config/skill-seekers/workflows/` में कसà¥à¤Ÿà¤® वरà¥à¤•फ़à¥à¤²à¥‹ जोड़ें +- ✅ **à¤à¤•ाधिक वरà¥à¤•फ़à¥à¤²à¥‹** — à¤à¤• कमांड में दो या अधिक वरà¥à¤•फ़à¥à¤²à¥‹ चेन करें +- ✅ **पूरà¥à¤£ पà¥à¤°à¤¬à¤‚धित CLI** — वरà¥à¤•फ़à¥à¤²à¥‹ को सूचीबदà¥à¤§, निरीकà¥à¤·à¤£, कॉपी, जोड़ें, हटाà¤à¤ और मानà¥à¤¯ करें + +```bash +# à¤à¤•ल वरà¥à¤•फ़à¥à¤²à¥‹ लागू करें +skill-seekers create ./my-project --enhance-workflow security-focus + +# à¤à¤•ाधिक वरà¥à¤•फ़à¥à¤²à¥‹ चेन करें (कà¥à¤°à¤® में लागू) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ पà¥à¤°à¤¬à¤‚धन +skill-seekers workflows list # सभी सूचीबदà¥à¤§ करें (बंडल + उपयोगकरà¥à¤¤à¤¾) +skill-seekers workflows show security-focus # YAML सामगà¥à¤°à¥€ पà¥à¤°à¤¿à¤‚ट करें +skill-seekers workflows copy security-focus # संपादन के लिठउपयोगकरà¥à¤¤à¤¾ डायरेकà¥à¤Ÿà¤°à¥€ में कॉपी करें +skill-seekers workflows add ./my-workflow.yaml # कसà¥à¤Ÿà¤® पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ इंसà¥à¤Ÿà¥‰à¤² करें +skill-seekers workflows remove my-workflow # उपयोगकरà¥à¤¤à¤¾ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ हटाà¤à¤ +skill-seekers workflows validate security-focus # पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ संरचना मानà¥à¤¯ करें + +# à¤à¤• साथ कई कॉपी करें +skill-seekers workflows copy security-focus minimal api-documentation + +# à¤à¤• साथ कई फ़ाइलें जोड़ें +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# à¤à¤• साथ कई हटाà¤à¤ +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ पà¥à¤°à¤¾à¤°à¥‚प:** +```yaml +name: security-focus +description: "सà¥à¤°à¤•à¥à¤·à¤¾-केंदà¥à¤°à¤¿à¤¤ समीकà¥à¤·à¤¾: कमज़ोरियाà¤, पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण, डेटा हैंडलिंग" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "OWASP शीरà¥à¤· 10 और सामानà¥à¤¯ सà¥à¤°à¤•à¥à¤·à¤¾ कमज़ोरियों की समीकà¥à¤·à¤¾ करें..." + - name: auth-review + type: custom + prompt: "पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण और पà¥à¤°à¤¾à¤§à¤¿à¤•रण पैटरà¥à¤¨ की जाà¤à¤š करें..." + uses_history: true +``` + +### âš¡ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨ और सà¥à¤•ेल +- ✅ **à¤à¤¸à¤¿à¤‚क मोड** - async/await के साथ 2-3 गà¥à¤¨à¤¾ तेज़ सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग (`--async` फ़à¥à¤²à¥ˆà¤— का उपयोग करें) +- ✅ **बड़े दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ समरà¥à¤¥à¤¨** - बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ विभाजन के साथ 10K-40K+ पेज के दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ संभालें +- ✅ **राउटर/हब कौशल** - विशेष उप-कौशल तक बà¥à¤¦à¥à¤§à¤¿à¤®à¤¾à¤¨ रूटिंग +- ✅ **समानांतर सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग** - à¤à¤• साथ कई कौशल पà¥à¤°à¥‹à¤¸à¥‡à¤¸ करें +- ✅ **चेकपॉइंट/पà¥à¤¨à¤ƒ शà¥à¤°à¥‚** - लंबी सà¥à¤•à¥à¤°à¥ˆà¤ª में कभी पà¥à¤°à¤—ति न खोà¤à¤ +- ✅ **कैशिंग सिसà¥à¤Ÿà¤®** - à¤à¤• बार सà¥à¤•à¥à¤°à¥ˆà¤ª करें, तà¥à¤°à¤‚त पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤®à¤¾à¤£ करें + +### 🤖 à¤à¤œà¥‡à¤‚ट-अजà¥à¤žà¥‡à¤¯ कौशल जनरेशन +- ✅ **बहà¥-à¤à¤œà¥‡à¤‚ट समरà¥à¤¥à¤¨** - `--agent` फ़à¥à¤²à¥ˆà¤— के माधà¥à¤¯à¤® से Claude, Kimi, Codex, Copilot, OpenCode या किसी भी कसà¥à¤Ÿà¤® à¤à¤œà¥‡à¤‚ट के लिठकौशल जनरेट करें +- ✅ **कसà¥à¤Ÿà¤® à¤à¤œà¥‡à¤‚ट कमांड** - à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के लिठकसà¥à¤Ÿà¤® à¤à¤œà¥‡à¤‚ट CLI कमांड निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करने हेतॠ`--agent-cmd` का उपयोग करें +- ✅ **सारà¥à¤µà¤­à¥Œà¤®à¤¿à¤• फ़à¥à¤²à¥ˆà¤—** - `--agent` और `--agent-cmd` सभी कमांड पर उपलबà¥à¤§ (create, scrape, github, pdf आदि) + +### 📦 मारà¥à¤•ेटपà¥à¤²à¥‡à¤¸ पाइपलाइन +- ✅ **मारà¥à¤•ेटपà¥à¤²à¥‡à¤¸ में पà¥à¤°à¤•ाशित करें** - Claude Code पà¥à¤²à¤—इन मारà¥à¤•ेटपà¥à¤²à¥‡à¤¸ रिपो में कौशल पà¥à¤°à¤•ाशित करें +- ✅ **à¤à¤‚ड-टू-à¤à¤‚ड पाइपलाइन** - दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ सà¥à¤°à¥‹à¤¤ से पà¥à¤°à¤•ाशित मारà¥à¤•ेटपà¥à¤²à¥‡à¤¸ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿ तक + +### ✅ गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ आशà¥à¤µà¤¾à¤¸à¤¨ +- ✅ **पूरà¥à¤£ परीकà¥à¤·à¤¿à¤¤** - 3,700+ परीकà¥à¤·à¤£ वà¥à¤¯à¤¾à¤ªà¤• कवरेज के साथ + +--- + +## 📦 इंसà¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ + +```bash +# बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ इंसà¥à¤Ÿà¥‰à¤² (डॉकà¥à¤¯à¥‚मेंटेशन सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग, GitHub विशà¥à¤²à¥‡à¤·à¤£, PDF, पैकेजिंग) +pip install skill-seekers + +# सभी LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® समरà¥à¤¥à¤¨ के साथ +pip install skill-seekers[all-llms] + +# MCP सरà¥à¤µà¤° के साथ +pip install skill-seekers[mcp] + +# सब कà¥à¤› +pip install skill-seekers[all] +``` + +**चà¥à¤¨à¤¨à¥‡ में मदद चाहिà¤?** सेटअप विज़ारà¥à¤¡ चलाà¤à¤: +```bash +skill-seekers-setup +``` + +### इंसà¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ विकलà¥à¤ª + +| इंसà¥à¤Ÿà¥‰à¤² कमांड | विशेषताà¤à¤ | +|---------------|----------| +| `pip install skill-seekers` | सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग, GitHub विशà¥à¤²à¥‡à¤·à¤£, PDF, सभी पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® | +| `pip install skill-seekers[gemini]` | + Google Gemini समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[all-llms]` | + सभी LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® | +| `pip install skill-seekers[mcp]` | + MCP सरà¥à¤µà¤° | +| `pip install skill-seekers[video]` | + YouTube/Vimeo टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ और मेटाडेटा निषà¥à¤•रà¥à¤·à¤£ | +| `pip install skill-seekers[video-full]` | + Whisper टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ और विज़à¥à¤…ल फ़à¥à¤°à¥‡à¤® निषà¥à¤•रà¥à¤·à¤£ | +| `pip install skill-seekers[jupyter]` | + Jupyter Notebook समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[pptx]` | + PowerPoint समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[confluence]` | + Confluence विकी समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[notion]` | + Notion पेज समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[rss]` | + RSS/Atom फ़ीड समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[chat]` | + Slack/Discord चैट à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ समरà¥à¤¥à¤¨ | +| `pip install skill-seekers[all]` | सब कà¥à¤› सकà¥à¤·à¤® | + +> **वीडियो विज़à¥à¤…ल डिपेंडेंसी (GPU-सकà¥à¤·à¤®):** `skill-seekers[video-full]` इंसà¥à¤Ÿà¥‰à¤² करने के बाद, +> `skill-seekers create --setup` चलाà¤à¤ ताकि आपका GPU सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से पहचाना जा सके और सही PyTorch +> संसà¥à¤•रण + easyocr इंसà¥à¤Ÿà¥‰à¤² किया जा सके। यह विज़à¥à¤…ल निषà¥à¤•रà¥à¤·à¤£ डिपेंडेंसी इंसà¥à¤Ÿà¥‰à¤² करने का अनà¥à¤¶à¤‚सित तरीका है। + +--- + +## 🚀 à¤à¤•-कमांड इंसà¥à¤Ÿà¥‰à¤² वरà¥à¤•फ़à¥à¤²à¥‹ + +**कॉनà¥à¤«à¤¼à¤¿à¤— से अपलोडेड कौशल तक का सबसे तेज़ तरीका — पूरà¥à¤£ ऑटोमेशन:** + +```bash +# आधिकारिक कॉनà¥à¤«à¤¼à¤¿à¤— से React कौशल इंसà¥à¤Ÿà¥‰à¤² करें (Claude पर सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ अपलोड) +skill-seekers install --config react + +# सà¥à¤¥à¤¾à¤¨à¥€à¤¯ कॉनà¥à¤«à¤¼à¤¿à¤— फ़ाइल से इंसà¥à¤Ÿà¥‰à¤² करें +skill-seekers install --config configs/custom.json + +# अपलोड किठबिना इंसà¥à¤Ÿà¥‰à¤² करें (केवल पैकेज) +skill-seekers install --config django --no-upload + +# बिना निषà¥à¤ªà¤¾à¤¦à¤¨ किठवरà¥à¤•फ़à¥à¤²à¥‹ का पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न करें +skill-seekers install --config react --dry-run +``` + +**समय:** कà¥à¤² 20-45 मिनट | **गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾:** पà¥à¤°à¥‹à¤¡à¤•à¥à¤¶à¤¨-तैयार (9/10) | **लागत:** मà¥à¤«à¤¼à¥à¤¤ + +**निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤ चरण:** +``` +📥 चरण 1: कॉनà¥à¤«à¤¼à¤¿à¤— पà¥à¤°à¤¾à¤ªà¥à¤¤ करें (यदि कॉनà¥à¤«à¤¼à¤¿à¤— नाम दिया गया हो) +📖 चरण 2: दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ सà¥à¤•à¥à¤°à¥ˆà¤ª करें +✨ चरण 3: AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट (अनिवारà¥à¤¯ - छोड़ने का विकलà¥à¤ª नहीं) +📦 चरण 4: कौशल पैकेज करें +â˜ï¸ चरण 5: Claude पर अपलोड करें (वैकलà¥à¤ªà¤¿à¤•, API key आवशà¥à¤¯à¤•) +``` + +**आवशà¥à¤¯à¤•ताà¤à¤:** +- ANTHROPIC_API_KEY परà¥à¤¯à¤¾à¤µà¤°à¤£ चर (सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ अपलोड के लिà¤) +- Claude Code Max पà¥à¤²à¤¾à¤¨ (सà¥à¤¥à¤¾à¤¨à¥€à¤¯ AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के लिà¤), या अलग AI à¤à¤œà¥‡à¤‚ट चà¥à¤¨à¤¨à¥‡ के लिठ`--agent` का उपयोग करें + +--- + +## 📊 फ़ीचर मैटà¥à¤°à¤¿à¤•à¥à¤¸ + +Skill Seekers **12 LLM पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®**, **8 RAG/वेकà¥à¤Ÿà¤° लकà¥à¤·à¥à¤¯**, **18 सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ार** और सभी लकà¥à¤·à¥à¤¯à¥‹à¤‚ पर पूरà¥à¤£ फ़ीचर समानता का समरà¥à¤¥à¤¨ करता है। + +**पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, जेनेरिक Markdown, OpenCode, Kimi, DeepSeek, Qwen, OpenRouter, Together AI, Fireworks AI +**सà¥à¤°à¥‹à¤¤ पà¥à¤°à¤•ार:** डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइट, GitHub रिपो, PDF, Word (.docx), EPUB, वीडियो, सà¥à¤¥à¤¾à¤¨à¥€à¤¯ कोडबेस, Jupyter Notebook, सà¥à¤¥à¤¾à¤¨à¥€à¤¯ HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS/Atom फ़ीड, Man पेज, Confluence विकी, Notion पेज, Slack/Discord चैट à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ + +विसà¥à¤¤à¥ƒà¤¤ पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® और फ़ीचर समरà¥à¤¥à¤¨ के लिठ[पूरà¥à¤£ फ़ीचर मैटà¥à¤°à¤¿à¤•à¥à¤¸](docs/reference/FEATURE_MATRIX.md) देखें। + +### तà¥à¤µà¤°à¤¿à¤¤ पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® तà¥à¤²à¤¨à¤¾ + +| विशेषता | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------|--------|--------|--------|---------|----------| +| पà¥à¤°à¤¾à¤°à¥‚प | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| अपलोड | ✅ API | ✅ API | ✅ API | ✅ API | ⌠मैनà¥à¤¯à¥à¤…ल | +| à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠कोई नहीं | +| सभी कौशल मोड | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## उपयोग उदाहरण + +### डॉकà¥à¤¯à¥‚मेंटेशन सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग + +```bash +# डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइट सà¥à¤•à¥à¤°à¥ˆà¤ª करें +skill-seekers create --config configs/react.json + +# बिना कॉनà¥à¤«à¤¼à¤¿à¤— के तà¥à¤µà¤°à¤¿à¤¤ सà¥à¤•à¥à¤°à¥ˆà¤ª +skill-seekers create https://react.dev --name react + +# à¤à¤¸à¤¿à¤‚क मोड के साथ (3 गà¥à¤¨à¤¾ तेज़) +skill-seekers create --config configs/godot.json --async --workers 8 + +# à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के लिठà¤à¤• विशिषà¥à¤Ÿ AI à¤à¤œà¥‡à¤‚ट का उपयोग करें +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF निषà¥à¤•रà¥à¤·à¤£ + +```bash +# बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ PDF निषà¥à¤•रà¥à¤·à¤£ +skill-seekers create --pdf docs/manual.pdf --name myskill + +# उनà¥à¤¨à¤¤ सà¥à¤µà¤¿à¤§à¤¾à¤à¤ +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # तालिकाà¤à¤ निकालें + --parallel \ # तेज़ समानांतर पà¥à¤°à¤¸à¤‚सà¥à¤•रण + --workers 8 # 8 CPU कोर उपयोग करें + +# सà¥à¤•ैन किठगठPDF (आवशà¥à¤¯à¤•: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### वीडियो निषà¥à¤•रà¥à¤·à¤£ + +```bash +# वीडियो समरà¥à¤¥à¤¨ इंसà¥à¤Ÿà¥‰à¤² करें +pip install skill-seekers[video] # टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ + मेटाडेटा +pip install skill-seekers[video-full] # + Whisper टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ + विज़à¥à¤…ल फ़à¥à¤°à¥‡à¤® निषà¥à¤•रà¥à¤·à¤£ + +# GPU सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ पहचान और विज़à¥à¤…ल डिपेंडेंसी इंसà¥à¤Ÿà¥‰à¤² (PyTorch + easyocr) +skill-seekers create --setup + +# YouTube वीडियो से निकालें +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# YouTube पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ से निकालें +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# सà¥à¤¥à¤¾à¤¨à¥€à¤¯ वीडियो फ़ाइल से निकालें +skill-seekers create --video-file recording.mp4 --name myrecording + +# विज़à¥à¤…ल फ़à¥à¤°à¥‡à¤® विशà¥à¤²à¥‡à¤·à¤£ के साथ निकालें (video-full डिपेंडेंसी आवशà¥à¤¯à¤•) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट के साथ (OCR साफ़ करें + पॉलिश SKILL.md जनरेट करें) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# वीडियो का विशिषà¥à¤Ÿ भाग कà¥à¤²à¤¿à¤ª करें (सेकंड, MM:SS, HH:MM:SS समरà¥à¤¥à¤¿à¤¤) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# कम-विशà¥à¤µà¤¸à¤¨à¥€à¤¯ OCR फ़à¥à¤°à¥‡à¤® के लिठVision API उपयोग करें (ANTHROPIC_API_KEY आवशà¥à¤¯à¤•) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# पहले से निकाले गठडेटा से कौशल पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤®à¤¾à¤£ करें (डाउनलोड छोड़ें) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **पूरà¥à¤£ गाइड:** पूरà¥à¤£ CLI संदरà¥à¤­, विज़à¥à¤…ल पाइपलाइन विवरण, AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट विकलà¥à¤ª +> और समसà¥à¤¯à¤¾ निवारण के लिठ[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) देखें। + +### GitHub रिपॉज़िटरी विशà¥à¤²à¥‡à¤·à¤£ + +```bash +# बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ रिपॉज़िटरी सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग +skill-seekers create facebook/react + +# पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण के साथ (उचà¥à¤š दर सीमा) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# शामिल सामगà¥à¤°à¥€ कसà¥à¤Ÿà¤®à¤¾à¤‡à¤œà¤¼ करें +skill-seekers create django/django \ + --include-issues \ # GitHub Issues निकालें + --max-issues 100 \ # issue संखà¥à¤¯à¤¾ सीमित करें + --include-changelog # CHANGELOG.md निकालें +``` + +### à¤à¤•ीकृत बहà¥-सà¥à¤°à¥‹à¤¤ सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग + +**विरोध पहचान के साथ डॉकà¥à¤¯à¥‚मेंटेशन + GitHub + PDF को à¤à¤• à¤à¤•ीकृत कौशल में मिलाà¤à¤:** + +```bash +# मौजूदा à¤à¤•ीकृत कॉनà¥à¤«à¤¼à¤¿à¤— का उपयोग करें +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# या à¤à¤•ीकृत कॉनà¥à¤«à¤¼à¤¿à¤— बनाà¤à¤ +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**विरोध पहचान सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से खोजती है:** +- 🔴 **कोड में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤** (उचà¥à¤š): दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•ृत लेकिन कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¿à¤¤ नहीं +- 🟡 **डॉकà¥à¤¸ में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤** (मधà¥à¤¯à¤®): कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¿à¤¤ लेकिन दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•ृत नहीं +- âš ï¸ **हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° बेमेल**: भिनà¥à¤¨ पैरामीटर/टाइप +- â„¹ï¸ **विवरण बेमेल**: भिनà¥à¤¨ सà¥à¤ªà¤·à¥à¤Ÿà¥€à¤•रण + +**पूरà¥à¤£ गाइड:** [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) देखें। + +### निजी कॉनà¥à¤«à¤¼à¤¿à¤— रिपॉज़िटरी + +**निजी Git रिपॉज़िटरी का उपयोग करके टीमों में कसà¥à¤Ÿà¤® कॉनà¥à¤«à¤¼à¤¿à¤— साà¤à¤¾ करें:** + +```bash +# विकलà¥à¤ª 1: MCP टूल का उपयोग (अनà¥à¤¶à¤‚सित) +# अपनी टीम की निजी रिपो पंजीकृत करें +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# टीम रिपो से कॉनà¥à¤«à¤¼à¤¿à¤— पà¥à¤°à¤¾à¤ªà¥à¤¤ करें +fetch_config(source="team", config_name="internal-api") +``` + +**समरà¥à¤¥à¤¿à¤¤ पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**पूरà¥à¤£ गाइड:** [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) देखें। + +## यह कैसे काम करता है + +```mermaid +graph LR + A[डॉकà¥à¤¯à¥‚मेंटेशन वेबसाइट] --> B[Skill Seekers] + B --> C[सà¥à¤•à¥à¤°à¥ˆà¤ªà¤°] + B --> D[AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट] + B --> E[पैकेजर] + C --> F[वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ संदरà¥à¤­] + D --> F + F --> E + E --> G[AI कौशल .zip] + G --> H[AI पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® पर अपलोड] +``` + +0. **llms.txt पहचान** - पहले llms-full.txt, llms.txt, llms-small.txt की जाà¤à¤š करता है (सà¥à¤®à¤¾à¤°à¥à¤Ÿ SPA खोज का हिसà¥à¤¸à¤¾) +1. **सà¥à¤•à¥à¤°à¥ˆà¤ª**: दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण से सभी पेज निकालता है +2. **वरà¥à¤—ीकरण**: सामगà¥à¤°à¥€ को विषयों में वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ करता है (API, गाइड, टà¥à¤¯à¥‚टोरियल आदि) +3. **à¤à¤¨à¥à¤¹à¤¾à¤‚स**: AI दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ का विशà¥à¤²à¥‡à¤·à¤£ करता है और उदाहरणों के साथ वà¥à¤¯à¤¾à¤ªà¤• SKILL.md बनाता है (`--agent` के माधà¥à¤¯à¤® से कई à¤à¤œà¥‡à¤‚ट समरà¥à¤¥à¤¿à¤¤) +4. **पैकेज**: सब कà¥à¤› पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®-तैयार `.zip` फ़ाइल में बंडल करता है + +## वासà¥à¤¤à¥à¤•ला + +सिसà¥à¤Ÿà¤® **8 कोर मॉडà¥à¤¯à¥‚ल** और **5 यूटिलिटी मॉडà¥à¤¯à¥‚ल** में वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ है (कà¥à¤² ~200 कà¥à¤²à¤¾à¤¸à¥‡à¤¸): + +![पैकेज अवलोकन](docs/UML/exports/00_package_overview.png) + +| मॉडà¥à¤¯à¥‚ल | उदà¥à¤¦à¥‡à¤¶à¥à¤¯ | मà¥à¤–à¥à¤¯ कà¥à¤²à¤¾à¤¸à¥‡à¤¸ | +|---------|---------|---------------| +| **CLICore** | Git-शैली कमांड डिसà¥à¤ªà¥ˆà¤šà¤° | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 सà¥à¤°à¥‹à¤¤-पà¥à¤°à¤•ार à¤à¤•à¥à¤¸à¤Ÿà¥à¤°à¥ˆà¤•à¥à¤Ÿà¤° | `DocToSkillConverter`, `DocumentSkillBuilder` (साà¤à¤¾ बिलà¥à¤¡ लेयर), `UnifiedScraper` | +| **Adaptors** | 20+ आउटपà¥à¤Ÿ पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® पà¥à¤°à¤¾à¤°à¥‚प | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | C3.x कोडबेस विशà¥à¤²à¥‡à¤·à¤£ पाइपलाइन | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 GoF डिटेकà¥à¤Ÿà¤° | +| **Enhancement** | `AgentClient` के माधà¥à¤¯à¤® से AI-संचालित कौशल सà¥à¤§à¤¾à¤° | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | कौशल पैकेज, अपलोड, इंसà¥à¤Ÿà¥‰à¤² करें | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP सरà¥à¤µà¤° (40 टूल) | `SkillSeekerMCPServer`, 10 टूल मॉडà¥à¤¯à¥‚ल | +| **Sync** | दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ परिवरà¥à¤¤à¤¨ पहचान | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +यूटिलिटी मॉडà¥à¤¯à¥‚ल: **Parsers** (28 CLI पारà¥à¤¸à¤°), **Storage** (S3/GCS/Azure), **Embedding** (बहà¥-पà¥à¤°à¤¦à¤¾à¤¤à¤¾ वेकà¥à¤Ÿà¤°), **Benchmark** (पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨), **Utilities** (16 साà¤à¤¾ हेलà¥à¤ªà¤°)। + +पूरà¥à¤£ UML आरेख: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ: `docs/UML/skill_seekers.mdj` | HTML API संदरà¥à¤­: `docs/UML/html/` + +## 📋 पूरà¥à¤µà¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾à¤à¤ + +**शà¥à¤°à¥‚ करने से पहले, सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि आपके पास है:** + +1. **Python 3.10 या उचà¥à¤šà¤¤à¤°** - [डाउनलोड](https://www.python.org/downloads/) | जाà¤à¤šà¥‡à¤‚: `python3 --version` +2. **Git** - [डाउनलोड](https://git-scm.com/) | जाà¤à¤šà¥‡à¤‚: `git --version` +3. **15-30 मिनट** पहली बार सेटअप के लिठ+ +**पहली बार?** → **[यहाठसे शà¥à¤°à¥‚ करें: बà¥à¤²à¥‡à¤Ÿà¤ªà¥à¤°à¥‚फ़ तà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤ गाइड](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Claude पर कौशल अपलोड करना + +आपका कौशल पैकेज हो जाने के बाद, इसे Claude पर अपलोड करना होगा: + +### विकलà¥à¤ª 1: सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ अपलोड (API-आधारित) + +```bash +# अपनी API key सेट करें (à¤à¤• बार) +export ANTHROPIC_API_KEY=sk-ant-... + +# पैकेज करें और सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ अपलोड करें +skill-seekers package output/react/ --upload + +# या मौजूदा .zip अपलोड करें +skill-seekers upload output/react.zip +``` + +### विकलà¥à¤ª 2: मैनà¥à¤¯à¥à¤…ल अपलोड (API Key के बिना) + +```bash +# कौशल पैकेज करें +skill-seekers package output/react/ +# → output/react.zip बनाता है + +# फिर मैनà¥à¤¯à¥à¤…ल रूप से अपलोड करें: +# - https://claude.ai/skills पर जाà¤à¤ +# - "Upload Skill" पर कà¥à¤²à¤¿à¤• करें +# - output/react.zip चà¥à¤¨à¥‡à¤‚ +``` + +### विकलà¥à¤ª 3: MCP (Claude Code) + +``` +Claude Code में, बस पूछें: +"React कौशल पैकेज और अपलोड करें" +``` + +--- + +## 🤖 AI à¤à¤œà¥‡à¤‚ट में इंसà¥à¤Ÿà¥‰à¤² करना + +Skill Seekers सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से 19 AI कोडिंग à¤à¤œà¥‡à¤‚ट में कौशल इंसà¥à¤Ÿà¥‰à¤² कर सकता है। + +```bash +# विशिषà¥à¤Ÿ à¤à¤œà¥‡à¤‚ट में इंसà¥à¤Ÿà¥‰à¤² करें +skill-seekers install-agent output/react/ --agent cursor + +# IBM Bob में इंसà¥à¤Ÿà¥‰à¤² करें (पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ-सà¥à¤¥à¤¾à¤¨à¥€à¤¯ .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# सभी à¤à¤œà¥‡à¤‚ट में à¤à¤• साथ इंसà¥à¤Ÿà¥‰à¤² करें +skill-seekers install-agent output/react/ --agent all + +# इंसà¥à¤Ÿà¥‰à¤² किठबिना पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न करें +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### समरà¥à¤¥à¤¿à¤¤ à¤à¤œà¥‡à¤‚ट + +| à¤à¤œà¥‡à¤‚ट | पथ | पà¥à¤°à¤•ार | +|-------|-----|--------| +| **Claude Code** | `~/.claude/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Cursor** | `.cursor/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **VS Code / Copilot** | `.github/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **Amp** | `~/.amp/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Goose** | `~/.config/goose/skills/` | वैशà¥à¤µà¤¿à¤• | +| **OpenCode** | `~/.opencode/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Windsurf** | `~/.windsurf/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Roo Code** | `.roo/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **Cline** | `.cline/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **Aider** | `~/.aider/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Bolt** | `.bolt/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **Kilo Code** | `.kilo/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | +| **Continue** | `~/.continue/skills/` | वैशà¥à¤µà¤¿à¤• | +| **Kimi Code** | `~/.kimi/skills/` | वैशà¥à¤µà¤¿à¤• | +| **IBM Bob** | `.bob/skills/` | पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ | + +--- + +## 🔌 MCP à¤à¤•ीकरण (40 टूल) + +Skill Seekers Claude Code, Cursor, Windsurf, VS Code + Cline, या IntelliJ IDEA से उपयोग के लिठMCP सरà¥à¤µà¤° पà¥à¤°à¤¦à¤¾à¤¨ करता है। + +```bash +# stdio मोड (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP मोड (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# सभी à¤à¤œà¥‡à¤‚ट को à¤à¤• साथ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ कॉनà¥à¤«à¤¼à¤¿à¤—र करें +./setup_mcp.sh +``` + +**सभी 40 टूल उपलबà¥à¤§:** +- **मूल (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **विसà¥à¤¤à¤¾à¤°à¤¿à¤¤ (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **वेकà¥à¤Ÿà¤° DB (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **कà¥à¤²à¤¾à¤‰à¤¡ (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**पूरà¥à¤£ गाइड:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ à¤•à¥‰à¤¨à¥à¤«à¤¼à¤¿à¤—रेशन + +### उपलबà¥à¤§ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ (24+) + +```bash +# सभी पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ सूचीबदà¥à¤§ करें +# skill-seekers list-configs # v3.7.0 में उपलबà¥à¤§ नहीं +``` + +| शà¥à¤°à¥‡à¤£à¥€ | पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ | +|--------|---------| +| **वेब फ़à¥à¤°à¥‡à¤®à¤µà¤°à¥à¤•** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **गेम डेवलपमेंट** | `godot`, `pygame`, `unity` | +| **टूल और DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **à¤à¤•ीकृत (डॉकà¥à¤¸ + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` और अधिक | + +### अपना कॉनà¥à¤«à¤¼à¤¿à¤— बनाà¤à¤ + +```bash +# विकलà¥à¤ª 1: इंटरैकà¥à¤Ÿà¤¿à¤µ +skill-seekers create --interactive + +# विकलà¥à¤ª 2: पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ कॉपी करें और संपादित करें +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### कॉनà¥à¤«à¤¼à¤¿à¤— फ़ाइल संरचना + +```json +{ + "name": "myframework", + "description": "इस कौशल का उपयोग कब करें", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### कॉनà¥à¤«à¤¼à¤¿à¤— कहाठसंगà¥à¤°à¤¹à¥€à¤¤ करें + +टूल इस कà¥à¤°à¤® में खोजता है: +1. दिठगठसटीक पथ पर +2. `./configs/` (वरà¥à¤¤à¤®à¤¾à¤¨ डायरेकà¥à¤Ÿà¤°à¥€) +3. `~/.config/skill-seekers/configs/` (उपयोगकरà¥à¤¤à¤¾ कॉनà¥à¤«à¤¼à¤¿à¤— डायरेकà¥à¤Ÿà¤°à¥€) +4. SkillSeekersWeb.com API (पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ कॉनà¥à¤«à¤¼à¤¿à¤—) + +--- + +## 📊 कà¥à¤¯à¤¾ बनाया जाता है + +``` +output/ +├── godot_data/ # सà¥à¤•à¥à¤°à¥ˆà¤ª किया गया कचà¥à¤šà¤¾ डेटा +│ ├── pages/ # JSON फ़ाइलें (पà¥à¤°à¤¤à¤¿ पेज à¤à¤•) +│ └── summary.json # अवलोकन +│ +└── godot/ # कौशल + ├── SKILL.md # वासà¥à¤¤à¤µà¤¿à¤• उदाहरणों के साथ संवरà¥à¤§à¤¿à¤¤ + ├── references/ # वरà¥à¤—ीकृत दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # खाली (अपनी सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ जोड़ें) + └── assets/ # खाली (अपने संसाधन जोड़ें) +``` + +--- + +## 🛠समसà¥à¤¯à¤¾ निवारण + +### कोई सामगà¥à¤°à¥€ नहीं निकली? +- अपना `main_content` सिलेकà¥à¤Ÿà¤° जाà¤à¤šà¥‡à¤‚ +- आज़माà¤à¤: `article`, `main`, `div[role="main"]` + +### डेटा है लेकिन उपयोग नहीं हो रहा? +```bash +# बलपूरà¥à¤µà¤• पà¥à¤¨à¤ƒ सà¥à¤•à¥à¤°à¥ˆà¤ª करें +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### शà¥à¤°à¥‡à¤£à¤¿à¤¯à¤¾à¤ अचà¥à¤›à¥€ नहीं हैं? +कॉनà¥à¤«à¤¼à¤¿à¤— में `categories` अनà¥à¤­à¤¾à¤— को बेहतर कीवरà¥à¤¡ के साथ संपादित करें। + +### दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ अपडेट करना चाहते हैं? +```bash +# पà¥à¤°à¤¾à¤¨à¤¾ डेटा हटाà¤à¤ और पà¥à¤¨à¤ƒ सà¥à¤•à¥à¤°à¥ˆà¤ª करें +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट काम नहीं कर रहा? +```bash +# जाà¤à¤šà¥‡à¤‚ कि API key सेट है या नहीं +echo $ANTHROPIC_API_KEY + +# इसके बजाय LOCAL मोड आज़माà¤à¤ (Claude Code Max उपयोग करता है, API key की आवशà¥à¤¯à¤•ता नहीं) +skill-seekers enhance output/react/ --mode LOCAL + +# बैकगà¥à¤°à¤¾à¤‰à¤‚ड à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट सà¥à¤¥à¤¿à¤¤à¤¿ की निगरानी करें +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub दर सीमा समसà¥à¤¯à¤¾à¤à¤? +```bash +# GitHub token सेट करें (5000 अनà¥à¤°à¥‹à¤§/घंटा बनाम अनाम 60/घंटा) +export GITHUB_TOKEN=ghp_your_token_here + +# या à¤à¤•ाधिक पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² कॉनà¥à¤«à¤¼à¤¿à¤—र करें +skill-seekers config --github +``` + +--- + +## 📈 पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨ + +| कारà¥à¤¯ | समय | टिपà¥à¤ªà¤£à¤¿à¤¯à¤¾à¤ | +|-------|------|-----------| +| सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग (सिंक) | 15-45 मिनट | केवल पहली बार, थà¥à¤°à¥‡à¤¡-आधारित | +| सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग (à¤à¤¸à¤¿à¤‚क) | 5-15 मिनट | `--async` फ़à¥à¤²à¥ˆà¤— से 2-3 गà¥à¤¨à¤¾ तेज़ | +| निरà¥à¤®à¤¾à¤£ | 1-3 मिनट | कैश से तेज़ पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤®à¤¾à¤£ | +| पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤®à¤¾à¤£ | <1 मिनट | `--skip-scrape` के साथ | +| à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट (LOCAL) | 30-60 सेकंड | Claude Code Max उपयोग करता है | +| à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट (API) | 20-40 सेकंड | API key आवशà¥à¤¯à¤• | +| वीडियो (टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ) | 1-3 मिनट | YouTube/सà¥à¤¥à¤¾à¤¨à¥€à¤¯, केवल टà¥à¤°à¤¾à¤‚सकà¥à¤°à¤¿à¤ªà¥à¤Ÿ | +| वीडियो (विज़à¥à¤…ल) | 5-15 मिनट | + OCR फ़à¥à¤°à¥‡à¤® निषà¥à¤•रà¥à¤·à¤£ | +| पैकेजिंग | 5-10 सेकंड | अंतिम .zip निरà¥à¤®à¤¾à¤£ | + +--- + +## 🆕 v3.6.0 में नया + +### वरà¥à¤•फ़à¥à¤²à¥‹ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ +`--preset` के साथ विशà¥à¤²à¥‡à¤·à¤£ की गहराई नियंतà¥à¤°à¤¿à¤¤ करें: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # तेज़, सतही सà¥à¤¤à¤° +skill-seekers create https://docs.react.dev/ --preset standard # संतà¥à¤²à¤¿à¤¤ (डिफ़ॉलà¥à¤Ÿ) +skill-seekers create https://docs.react.dev/ --preset comprehensive # गहन, विसà¥à¤¤à¥ƒà¤¤ +``` + +### लाइफ़साइकिल फà¥à¤²à¥ˆà¤—à¥à¤¸ +```bash +skill-seekers create https://docs.react.dev/ --dry-run # सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग के बिना पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न +skill-seekers create https://docs.react.dev/ --fresh # कैश को अनदेखा करें, पूरà¥à¤£ पà¥à¤¨à¤ƒ सà¥à¤•à¥à¤°à¥ˆà¤ª +skill-seekers create https://docs.react.dev/ --resume # रà¥à¤•े हà¥à¤ कारà¥à¤¯ को फिर से शà¥à¤°à¥‚ करें +skill-seekers create https://docs.react.dev/ --skip-scrape # मौजूदा आउटपà¥à¤Ÿ को पà¥à¤¨à¤ƒ पैकेज करें +``` + +### सà¥à¤µà¤¾à¤¸à¥à¤¥à¥à¤¯ जाà¤à¤š और उपयोगिताà¤à¤ +```bash +skill-seekers doctor # इंसà¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ और परिवेश का निदान करें +skill-seekers sync-config # कॉनà¥à¤«à¤¼à¤¿à¤—रेशन डà¥à¤°à¤¿à¤«à¥à¤Ÿ का पता लगाà¤à¤ +skill-seekers stream # बड़े दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥‹à¤‚ के लिठसà¥à¤Ÿà¥à¤°à¥€à¤®à¤¿à¤‚ग इनजेसà¥à¤Ÿà¤¨ +skill-seekers update output/react/ # वृदà¥à¤§à¤¿à¤¶à¥€à¤² अपडेट +skill-seekers multilang # बहà¥à¤­à¤¾à¤·à¥€ कौशल जनरेशन +skill-seekers quality output/react/ # गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ रिपोरà¥à¤Ÿ (गेट के लिठ--threshold 7 जोड़ें: 7/10 से नीचे गैर-शूनà¥à¤¯ निकास कोड) +``` + +### RAG चंकिंग विकलà¥à¤ª (पैकेजिंग) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### मारà¥à¤•ेटपà¥à¤²à¥‡à¤¸ पà¥à¤°à¤•ाशन +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### अतिरिकà¥à¤¤ वैकलà¥à¤ªà¤¿à¤• डिपेंडेंसी +| à¤à¤•à¥à¤¸à¥à¤Ÿà¥à¤°à¤¾ | इंसà¥à¤Ÿà¥‰à¤² | उदà¥à¤¦à¥‡à¤¶à¥à¤¯ | +|----------|---------|---------| +| `browser` | `pip install "skill-seekers[browser]"` | SPA साइटों के लिठहेडलेस Playwright | +| `embedding` | `pip install "skill-seekers[embedding]"` | à¤à¤®à¥à¤¬à¥‡à¤¡à¤¿à¤‚ग सरà¥à¤µà¤° समरà¥à¤¥à¤¨ | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` आदि | कà¥à¤²à¤¾à¤‰à¤¡ सà¥à¤Ÿà¥‹à¤°à¥‡à¤œ अपलोड | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | संयà¥à¤•à¥à¤¤ वेकà¥à¤Ÿà¤° DB अपलोड डिपेंडेंसी | + +--- + +## 📚 दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥€à¤•रण + +### शà¥à¤°à¥à¤†à¤¤ करना +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **नठहैं? यहाठसे शà¥à¤°à¥‚ करें!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - अनà¥à¤­à¤µà¥€ उपयोगकरà¥à¤¤à¤¾à¤“ं के लिठतà¥à¤µà¤°à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤ +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - सामानà¥à¤¯ समसà¥à¤¯à¤¾à¤à¤ और समाधान +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - à¤à¤•-पेज चीट शीट + +### वासà¥à¤¤à¥à¤•ला +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - 14 आरेखों के साथ UML वासà¥à¤¤à¥à¤•ला अवलोकन +- **[docs/UML/exports/](docs/UML/exports/)** - PNG आरेख निरà¥à¤¯à¤¾à¤¤ (पैकेज अवलोकन + 13 कà¥à¤²à¤¾à¤¸ आरेख) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - पूरà¥à¤£ HTML API संदरà¥à¤­ (सभी कà¥à¤²à¤¾à¤¸à¥‡à¤¸, ऑपरेशन, à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚ट) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ फ़ाइल ([StarUML](https://staruml.io/) से खोलें) + +### मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤ +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - 10K-40K+ पेज दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ संभालें +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट मोड गाइड +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP à¤à¤•ीकरण सेटअप +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - बहà¥-सà¥à¤°à¥‹à¤¤ सà¥à¤•à¥à¤°à¥ˆà¤ªà¤¿à¤‚ग +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - वीडियो निषà¥à¤•रà¥à¤·à¤£ गाइड + +### à¤à¤•ीकरण मारà¥à¤—दरà¥à¤¶à¤¿à¤•ाà¤à¤ +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - सभी RAG पाइपलाइन + +--- + +## 📠लाइसेंस + +MIT लाइसेंस - विवरण के लिठ[LICENSE](LICENSE) फ़ाइल देखें + +--- + +कौशल निरà¥à¤®à¤¾à¤£ का आनंद लें! 🚀 + +--- + +## 🔒 सà¥à¤°à¤•à¥à¤·à¤¾ + +[![MseeP.ai सà¥à¤°à¤•à¥à¤·à¤¾ मूलà¥à¤¯à¤¾à¤‚कन बैज](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 पà¥à¤°à¤¾à¤¯à¥‹à¤œà¤• + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — à¤à¤• फà¥à¤²-मोडल, OpenAI-संगत AI इनà¥à¤«à¤¼à¤°à¥‡à¤‚स पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤®à¥¤ Skill Seekers इसे `ATLAS_API_KEY` के साथ `--target atlas` के माधà¥à¤¯à¤® से पैकेजिंग/à¤à¤¨à¥à¤¹à¤¾à¤‚समेंट लकà¥à¤·à¥à¤¯ के रूप में समरà¥à¤¥à¤¨ करता है। diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..0e1c345 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,1376 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | 日本語 | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **機械翻訳ã«é–¢ã™ã‚‹æ³¨æ„** +> +> ã“ã®æ–‡æ›¸ã¯AIã«ã‚ˆã£ã¦è‡ªå‹•翻訳ã•れãŸã‚‚ã®ã§ã™ã€‚翻訳ã®å“質å‘上ã«åŠªã‚ã¦ã„ã¾ã™ãŒã€ä¸æ­£ç¢ºãªè¡¨ç¾ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ +> +> ç¿»è¨³ã®æ”¹å–„ã«ã”å”力ã„ãŸã ã‘ã‚‹æ–¹ã¯ã€[GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) ã‹ã‚‰ãƒ•ィードãƒãƒƒã‚¯ã‚’ãŠå¯„ã›ãã ã•ã„。 + +[![ãƒãƒ¼ã‚¸ãƒ§ãƒ³](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![ライセンス: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP çµ±åˆ](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![テスト通éŽ](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![プロジェクトボード](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI ãƒãƒ¼ã‚¸ãƒ§ãƒ³](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - ダウンロード数](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![å…¬å¼ã‚µã‚¤ãƒˆ](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter フォロー](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 AI システムã®ãƒ‡ãƒ¼ã‚¿ãƒ¬ã‚¤ãƒ¤ãƒ¼ã€‚** Skill Seekers ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µã‚¤ãƒˆã€GitHub リãƒã‚¸ãƒˆãƒªã€PDFã€å‹•ç”»ã€ãƒŽãƒ¼ãƒˆãƒ–ックã€Wiki ãªã© 18 種類ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—を構造化ã•れãŸãƒŠãƒ¬ãƒƒã‚¸ã‚¢ã‚»ãƒƒãƒˆã«å¤‰æ›ã—ã¾ã™ã€‚AI スキル(Claudeã€Geminiã€OpenAI)ã€RAG パイプライン(LangChainã€LlamaIndexã€Pinecone)ã€AI コーディングアシスタント(Cursorã€Windsurfã€Clineï¼‰ã‚’ã€æ•°æ™‚é–“ã§ã¯ãªãæ•°åˆ†ã§æ§‹ç¯‰ã§ãã¾ã™ã€‚ + +> 🌠**[SkillSeekersWeb.com ã«ã‚¢ã‚¯ã‚»ã‚¹](https://skillseekersweb.com/)** - 24 以上ã®ãƒ—リセット設定を閲覧ã€è¨­å®šã®å…±æœ‰ã€å®Œå…¨ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ï¼ + +> 📋 **[開発ロードマップã¨ã‚¿ã‚¹ã‚¯ã‚’確èª](https://github.com/users/yusufkaraaslan/projects/2)** - 10 カテゴリ㧠134 タスクã€å¥½ããªã‚‚ã®ã‚’é¸ã‚“ã§è²¢çŒ®ã§ãã¾ã™ï¼ + +## 🌠エコシステム + +Skill Seekers ã¯ãƒžãƒ«ãƒãƒªãƒã‚¸ãƒˆãƒªãƒ—ロジェクトã§ã™ã€‚å„リãƒã‚¸ãƒˆãƒªã®å½¹å‰²ï¼š + +| リãƒã‚¸ãƒˆãƒª | 説明 | リンク | +|-----------|------|-------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | コア CLI & MCP サーãƒãƒ¼ï¼ˆã“ã®ãƒªãƒã‚¸ãƒˆãƒªï¼‰ | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | ウェブサイト&ドキュメント | [サイト](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | コミュニティ設定リãƒã‚¸ãƒˆãƒª | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code プラグイン | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | macOS Homebrew tap | | + +> **貢献ã—ãŸã„ã§ã™ã‹ï¼Ÿ** ウェブサイトã¨è¨­å®šãƒªãƒã‚¸ãƒˆãƒªã¯æ–°ã—ã„è²¢çŒ®è€…ã«æœ€é©ã§ã™ï¼ + +## 🧠 AI システムã®ãƒ‡ãƒ¼ã‚¿ãƒ¬ã‚¤ãƒ¤ãƒ¼ + +**Skill Seekers ã¯æ±Žç”¨çš„ãªå‰å‡¦ç†ãƒ¬ã‚¤ãƒ¤ãƒ¼**ã§ã‚りã€ç”Ÿã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ãれを利用ã™ã‚‹ã™ã¹ã¦ã® AI システムã®é–“ã«ä½ç½®ã—ã¾ã™ã€‚Claude スキルã€LangChain RAG パイプラインã€Cursor ã® `.cursorrules` ファイルã®ã„ãšã‚Œã‚’構築ã™ã‚‹å ´åˆã§ã‚‚ã€ãƒ‡ãƒ¼ã‚¿ã®æº–備作業ã¯åŒã˜ã§ã™ã€‚一度実行ã™ã‚Œã°ã€ã™ã¹ã¦ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ + +```bash +# 1コマンド → 構造化ナレッジアセット +skill-seekers create https://docs.react.dev/ +# ã¾ãŸã¯: skill-seekers create facebook/react +# ã¾ãŸã¯: skill-seekers create ./my-project + +# ä»»æ„ã® AI システムã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +skill-seekers package output/react --target claude # → Claude AI スキル (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob スキルディレクトリ +``` + +### 生æˆã•れる出力 + +| 出力 | ターゲット | 用途 | +|------|-----------|------| +| **Claude スキル** (ZIP + YAML) | `--target claude` | Claude Codeã€Claude API | +| **Gemini スキル** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4oã€ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆ | +| **LangChain Documents** | `--target langchain` | QA ãƒã‚§ãƒ¼ãƒ³ã€ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã€ãƒªãƒˆãƒªãƒ¼ãƒãƒ¼ | +| **LlamaIndex TextNodes** | `--target llama-index` | クエリエンジンã€ãƒãƒ£ãƒƒãƒˆã‚¨ãƒ³ã‚¸ãƒ³ | +| **Haystack Documents** | `--target haystack` | エンタープライズ RAG パイプライン | +| **Pinecone 対応** (Markdown) | `--target markdown` | ベクトルアップサート | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | ローカルベクトル DB | +| **IBM Bob スキル**(ディレクトリ) | `--target ibm-bob` | IBM Bob プロジェクト/グローãƒãƒ«ã‚¹ã‚­ãƒ« | +| **Cursor** `.cursorrules` | `--target markdown` → SKILL.md をコピー | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → コピー | VS Codeã€IntelliJã€Vim | + +### é¸ã°ã‚Œã‚‹ç†ç”± + +- âš¡ **99% 高速化** — æ•°æ—¥ã®æ‰‹ä½œæ¥­ãƒ‡ãƒ¼ã‚¿æº–å‚™ → 15〜45 分 +- 🎯 **AI スキルå“質** — サンプルã€ãƒ‘ターンã€ã‚¬ã‚¤ãƒ‰ã‚’å«ã‚€ 500 行以上㮠SKILL.md ファイル +- 📊 **RAG 対応ãƒãƒ£ãƒ³ã‚¯** — ã‚³ãƒ¼ãƒ‰ãƒ–ãƒ­ãƒƒã‚¯ã‚’ä¿æŒã—コンテキストを維æŒã™ã‚‹ã‚¹ãƒžãƒ¼ãƒˆãƒãƒ£ãƒ³ã‚­ãƒ³ã‚° +- 🎬 **å‹•ç”»** — YouTube やローカル動画ã‹ã‚‰ã‚³ãƒ¼ãƒ‰ã€å­—å¹•ã€æ§‹é€ åŒ–知識を抽出 +- 🔄 **マルãƒã‚½ãƒ¼ã‚¹** — 18 種類ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—(ドキュメントã€GitHubã€PDFã€å‹•ç”»ã€ãƒŽãƒ¼ãƒˆãƒ–ックã€Wiki ãªã©ï¼‰ã‚’ 1 ã¤ã®ãƒŠãƒ¬ãƒƒã‚¸ã‚¢ã‚»ãƒƒãƒˆã«çµ±åˆ +- 🌠**ä¸€åº¦ã®æº–å‚™ã§å…¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ** — å†ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ングãªã—ã§åŒã˜ã‚¢ã‚»ãƒƒãƒˆã‚’ 21 プラットフォームã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +- ✅ **実戦テスト済ã¿** — 3,700 以上ã®ãƒ†ã‚¹ãƒˆã€24 以上ã®ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ãƒ—ãƒªã‚»ãƒƒãƒˆã€æœ¬ç•ªé‹ç”¨å¯èƒ½ + +## 🚀 クイックスタート(3 コマンド) + +```bash +# 1. インストール +pip install skill-seekers + +# 2. ä»»æ„ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚¹ã‚­ãƒ«ã‚’ä½œæˆ +skill-seekers create https://docs.django.com/ + +# 3. AI プラットフォームå‘ã‘ã«ãƒ‘ッケージ +skill-seekers package output/django --target claude +``` + +**ã“れã ã‘ã§ã™ï¼** `output/django-claude.zip` ãŒã™ãã«ä½¿ãˆã‚‹çŠ¶æ…‹ã§ç”Ÿæˆã•れã¾ã™ã€‚ + +```bash +# 強化ã«åˆ¥ã® AI エージェントを使用(デフォルト:claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI 駆動ã®ãƒ—ロジェクトスキャン(新機能) + +ä»»æ„ã®ãƒ—ロジェクト㫠`scan` を実行ã™ã‚‹ã¨ã€AI エージェントãŒãƒžãƒ‹ãƒ•ェストã€READMEã€Dockerfile/CIã€ã‚µãƒ³ãƒ—リングã•れãŸã‚½ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’読ã¿å–ã‚Šã€æ¤œå‡ºã•れãŸãƒ•レームワークã”ã¨ã« 1 ã¤ã®è¨­å®šãƒ•ァイルã¨ã€è‡ªåˆ†ã®ã‚³ãƒ¼ãƒ‰ç”¨ã® `-codebase.json` を出力ã—ã¾ã™ã€‚検出ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’記録ã™ã‚‹ãŸã‚ã€å†å®Ÿè¡Œæ™‚ã«ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ãŒå ±å‘Šã•れã¾ã™ï¼š + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# ãã®å¾Œã€ä»»æ„ã®ã‚‚ã®ã‚’ビルド +skill-seekers create ./configs/scanned/react.json +``` + +æ¤œå‡ºçµæžœã«æ—¢å­˜ã®ãƒ—リセットãŒãªã„å ´åˆã¯ AI ãŒæ–°ã—ã„設定を生æˆã—ã¾ã™ã€‚終了時㫠[コミュニティレジストリ](https://github.com/yusufkaraaslan/skill-seekers-configs) ã¸ã®å…¬é–‹ã‚’ä»»æ„ã§é¸æŠžã§ãã¾ã™ã€‚ + +### ãã®ä»–ã®ã‚½ãƒ¼ã‚¹ï¼ˆ18 種類対応) + +```bash +# GitHub リãƒã‚¸ãƒˆãƒª +skill-seekers create facebook/react + +# ローカルプロジェクト +skill-seekers create ./my-project + +# PDF ドキュメント +skill-seekers create manual.pdf + +# Word ドキュメント +skill-seekers create report.docx + +# EPUB 電孿›¸ç± +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# OpenAPI 仕様 +skill-seekers create openapi.yaml + +# PowerPoint プレゼンテーション +skill-seekers create presentation.pptx + +# AsciiDoc ドキュメント +skill-seekers create guide.adoc + +# ローカル HTML ファイル(拡張å­ã§è‡ªå‹•検出) +skill-seekers create page.html + +# HTML ファイルã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå…¨ä½“(HTML 主体ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’自動検出) +skill-seekers create ./mirror_output/site/ + +# ã‚³ãƒ¼ãƒ‰ãŒæ··åœ¨ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ HTML モードを強制 +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom フィード +skill-seekers create feed.rss + +# Man ページ +skill-seekers create curl.1 + +# 動画(YouTubeã€Vimeoã€ã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイル — skill-seekers[video] ãŒå¿…è¦ï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# åˆå›žä½¿ç”¨æ™‚㯠GPU 対応ã®ãƒ“ジュアルä¾å­˜é–¢ä¿‚を自動インストール: +skill-seekers create --setup + +# Confluence Wiki +skill-seekers create --space-key TEAM --name wiki + +# Notion ページ +skill-seekers create --database-id ... --name docs + +# Slack/Discord ãƒãƒ£ãƒƒãƒˆã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### ã‚らゆる場所ã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + +```bash +# 複数プラットフォームå‘ã‘ã«ãƒ‘ッケージ +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Skill Seekers ã¨ã¯ï¼Ÿ + +Skill Seekers 㯠**AI システムã®ãƒ‡ãƒ¼ã‚¿ãƒ¬ã‚¤ãƒ¤ãƒ¼**ã§ã‚りã€18 種類ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ———ドキュメントサイトã€GitHub リãƒã‚¸ãƒˆãƒªã€PDFã€å‹•ç”»ã€Jupyter Notebookã€Word/EPUB/AsciiDoc ドキュメントã€OpenAPI 仕様ã€PowerPoint プレゼンテーションã€RSS フィードã€Man ページã€Confluence Wikiã€Notion ページã€Slack/Discord ãƒãƒ£ãƒƒãƒˆã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãªã©â€”—をã™ã¹ã¦ã® AI ターゲットã«é©ã—ãŸæ§‹é€ åŒ–ナレッジアセットã«å¤‰æ›ã—ã¾ã™ï¼š + +| ユースケース | 得られるも㮠| 例 | +|-------------|-------------|-----| +| **AI スキル** | 包括的㪠SKILL.md + å‚照ファイル | Claude Codeã€Geminiã€GPT | +| **RAG パイプライン** | リッãƒãªãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ä»˜ããƒãƒ£ãƒ³ã‚¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ | LangChainã€LlamaIndexã€Haystack | +| **ベクトルデータベース** | アップサート用ã«ãƒ•ォーマット済ã¿ãƒ‡ãƒ¼ã‚¿ | Pineconeã€Chromaã€Weaviateã€FAISS | +| **AI コーディングアシスタント** | IDE ã® AI ãŒè‡ªå‹•çš„ã«èª­ã¿å–るコンテキストファイル | Cursorã€Windsurfã€Clineã€Continue.dev | + +## 📚 ドキュメント + +| やりãŸã„ã“㨠| 読むã¹ãドキュメント | +|--------------|-----------| +| **ã™ãã«å§‹ã‚ã‚‹** | [クイックスタート](docs/getting-started/02-quick-start.md) - 3 ã‚³ãƒžãƒ³ãƒ‰ã§æœ€åˆã®ã‚¹ã‚­ãƒ«ã‚’ä½œæˆ | +| **コンセプトをç†è§£ã™ã‚‹** | [コアコンセプト](docs/user-guide/01-core-concepts.md) - 仕組ã¿ã®è§£èª¬ | +| **ソースをスクレイプã™ã‚‹** | [スクレイピングガイド](docs/user-guide/02-scraping.md) - ã™ã¹ã¦ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ— | +| **スキルを強化ã™ã‚‹** | [強化ガイド](docs/user-guide/03-enhancement.md) - AI 強化 | +| **スキルをエクスãƒãƒ¼ãƒˆã™ã‚‹** | [パッケージングガイド](docs/user-guide/04-packaging.md) - プラットフォームエクスãƒãƒ¼ãƒˆ | +| **コマンドを調ã¹ã‚‹** | [CLI リファレンス](docs/reference/CLI_REFERENCE.md) - å…¨ 20 コマンド | +| **設定ã™ã‚‹** | [設定フォーマット](docs/reference/CONFIG_FORMAT.md) - JSON 仕様 | +| **å•題を解決ã™ã‚‹** | [トラブルシューティング](docs/user-guide/06-troubleshooting.md) - よãã‚ã‚‹å•題 | + +**完全ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼š** [docs/README.md](docs/README.md) + +Skill Seekers ã¯æ•°æ—¥ã‹ã‹ã‚‹æ‰‹å‹•å‰å‡¦ç†ã®ä»£ã‚りã«ä»¥ä¸‹ã‚’行ã„ã¾ã™ï¼š + +1. **å–り込ã¿** — ドキュメントã€GitHub リãƒã‚¸ãƒˆãƒªã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã€PDFã€å‹•ç”»ã€Jupyter Notebookã€Wiki ãªã© 10 種類以上ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ— +2. **分æž** — 高度㪠AST è§£æžã€ãƒ‘ターン検出ã€API 抽出 +3. **構造化** — メタデータ付ãã®ã‚«ãƒ†ã‚´ãƒªåˆ†é¡žã•れãŸå‚照ファイル +4. **強化** — AI 駆動㮠SKILL.md 生æˆï¼ˆClaudeã€Geminiã€ã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ï¼‰ +5. **エクスãƒãƒ¼ãƒˆ** — 1 ã¤ã®ã‚¢ã‚»ãƒƒãƒˆã‹ã‚‰ 16 種類ã®ãƒ—ラットフォーム専用フォーマットã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + +## ãªãœ Skill Seekers を使ã†ã®ã‹ï¼Ÿ + +### AI スキルビルダーå‘ã‘(Claudeã€Geminiã€OpenAI) + +- 🎯 **本番グレードã®ã‚¹ã‚­ãƒ«** — コード例ã€ãƒ‘ターンã€ã‚¬ã‚¤ãƒ‰ã‚’å«ã‚€ 500 行以上㮠SKILL.md ファイル +- 🔄 **強化ワークフロー** — `security-focus`ã€`architecture-comprehensive` ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ  YAML プリセットをé©ç”¨ +- 🎮 **ã‚らゆるドメイン** — ゲームエンジン(Godotã€Unity)ã€ãƒ•レームワーク(Reactã€Django)ã€ç¤¾å†…ツール +- 🔧 **ãƒãƒ¼ãƒ å‘ã‘** — 社内ドキュメント + コードをå˜ä¸€ã®ä¿¡é ¼ã§ãるソースã«çµ±åˆ +- 📚 **高å“質** — サンプルã€ã‚¯ã‚¤ãƒƒã‚¯ãƒªãƒ•ァレンスã€ãƒŠãƒ“ゲーションガイド付ãã® AI 強化 + +### RAG ビルダー & AI エンジニアå‘ã‘ + +- 🤖 **RAG 対応データ** — 事å‰ãƒãƒ£ãƒ³ã‚¯æ¸ˆã¿ã® LangChain `Documents`ã€LlamaIndex `TextNodes`ã€Haystack `Documents` +- 🚀 **99% 高速化** — æ•°æ—¥ã®å‰å‡¦ç† → 15〜45 分 +- 📊 **スマートメタデータ** — カテゴリã€ã‚½ãƒ¼ã‚¹ã€ã‚¿ã‚¤ãƒ— → ã‚ˆã‚Šé«˜ã„æ¤œç´¢ç²¾åº¦ +- 🔄 **マルãƒã‚½ãƒ¼ã‚¹** — 1 ã¤ã®ãƒ‘イプラインã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ + GitHub + PDF + å‹•ç”»ã‚’çµ±åˆ +- 🌠**プラットフォームéžä¾å­˜** — å†ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ングãªã—ã§ä»»æ„ã®ãƒ™ã‚¯ãƒˆãƒ« DB やフレームワークã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + +### AI コーディングアシスタントユーザーå‘ã‘ + +- 💻 **Cursor / Windsurf / Cline** — `.cursorrules` / `.windsurfrules` / `.clinerules` ã‚’è‡ªå‹•ç”Ÿæˆ +- 🎯 **永続的コンテキスト** — AI ãŒãƒ•レームワークを「ç†è§£ã€ã—ã€ç¹°ã‚Šè¿”ã—ã®ãƒ—ロンプトãŒä¸è¦ã« +- 📚 **å¸¸ã«æœ€æ–°** — ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ›´æ–°æ™‚ã«æ•°åˆ†ã§ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’æ›´æ–° + +## ä¸»è¦æ©Ÿèƒ½ + +### 🌠ドキュメントスクレイピング +- ✅ **スマート SPA ディスカãƒãƒªãƒ¼** - JavaScript SPA サイトå‘ã‘ã® 3 層ディスカãƒãƒªãƒ¼ï¼ˆsitemap.xml → llms.txt → ヘッドレスブラウザレンダリング) +- ✅ **llms.txt サãƒãƒ¼ãƒˆ** - LLM 対応ドキュメントファイルを自動検出ã—使用(10 å€é«˜é€Ÿï¼‰ +- ✅ **汎用スクレイパー** - ã‚らゆるドキュメントサイトã«å¯¾å¿œ +- ✅ **スマート分類** - トピック別ã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’è‡ªå‹•æ•´ç† +- ✅ **コード言語検出** - Pythonã€JavaScriptã€C++ã€GDScript ãªã©ã‚’èªè­˜ +- ✅ **24 以上ã®ãƒ—リセット** - Godotã€Reactã€Vueã€Djangoã€FastAPI ãªã© + +### 📄 PDF サãƒãƒ¼ãƒˆ +- ✅ **基本 PDF 抽出** - PDF ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã€ã‚³ãƒ¼ãƒ‰ã€ç”»åƒã‚’抽出 +- ✅ **スキャン PDF ã® OCR** - スキャンドキュメントã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã‚’抽出 +- ✅ **パスワードä¿è­· PDF** - æš—å·åŒ– PDF ã®å‡¦ç† +- ✅ **テーブル抽出** - 複雑ãªãƒ†ãƒ¼ãƒ–ãƒ«ã®æŠ½å‡º +- ✅ **並列処ç†** - å¤§è¦æ¨¡ PDF ã§ 3 å€é«˜é€Ÿ +- ✅ **インテリジェントキャッシュ** - å†å®Ÿè¡Œæ™‚ã« 50% 高速 + +### 🎬 動画抽出 +- ✅ **YouTube & ローカル動画** - å‹•ç”»ã‹ã‚‰å­—幕ã€ã‚³ãƒ¼ãƒ‰ã€æ§‹é€ åŒ–知識を抽出 +- ✅ **ビジュアルフレーム分æž** - コードエディタã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã€ã‚¹ãƒ©ã‚¤ãƒ‰ã€å›³ã® OCR 抽出 +- ✅ **GPU 自動検出** - æ­£ã—ã„ PyTorch ビルド(CUDA/ROCm/MPS/CPU)を自動インストール +- ✅ **AI 強化** - 2 パス処ç†ï¼šOCR アーティファクトã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ— + æ´—ç·´ã•れ㟠SKILL.md ã®ç”Ÿæˆ +- ✅ **時間トリミング** - `--start-time` 㨠`--end-time` ã§ç‰¹å®šã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’抽出 +- ✅ **プレイリストサãƒãƒ¼ãƒˆ** - YouTube プレイリスト内ã®ã™ã¹ã¦ã®å‹•ç”»ã‚’ä¸€æ‹¬å‡¦ç† +- ✅ **Vision API フォールãƒãƒƒã‚¯** - 低信頼度㮠OCR フレーム㫠Claude Vision を使用 + +### 🙠GitHub リãƒã‚¸ãƒˆãƒªåˆ†æž +- ✅ **高度ãªã‚³ãƒ¼ãƒ‰åˆ†æž** - Pythonã€JavaScriptã€TypeScriptã€Javaã€C++ã€Go ã® AST è§£æž +- ✅ **API 抽出** - 関数ã€ã‚¯ãƒ©ã‚¹ã€ãƒ¡ã‚½ãƒƒãƒ‰ã®ãƒ‘ラメータã¨åž‹æƒ…å ± +- ✅ **リãƒã‚¸ãƒˆãƒªãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿** - READMEã€ãƒ•ァイルツリーã€è¨€èªžæ§‹æˆã€ã‚¹ã‚¿ãƒ¼/フォーク数 +- ✅ **GitHub Issues & PR** - ラベルã¨ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ä»˜ãã® Issue ã‚’å–å¾— +- ✅ **CHANGELOG & リリース** - ãƒãƒ¼ã‚¸ãƒ§ãƒ³å±¥æ­´ã‚’自動抽出 +- ✅ **コンフリクト検出** - ドキュメント化ã•れ㟠API ã¨å®Ÿéš›ã®ã‚³ãƒ¼ãƒ‰å®Ÿè£…を比較 +- ✅ **MCP çµ±åˆ** - è‡ªç„¶è¨€èªžã§æ“作:「GitHub リãƒã‚¸ãƒˆãƒª facebook/react をスクレイプ〠+ +### 🔄 çµ±åˆãƒžãƒ«ãƒã‚½ãƒ¼ã‚¹ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング +- ✅ **複数ソースã®çµ±åˆ** - 1 ã¤ã®ã‚¹ã‚­ãƒ«ã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ + GitHub + PDF ã‚’æ··åˆ +- ✅ **コンフリクト検出** - ドキュメントã¨ã‚³ãƒ¼ãƒ‰é–“ã®ä¸ä¸€è‡´ã‚’自動検出 +- ✅ **インテリジェントマージ** - ルールベースã¾ãŸã¯ AI 駆動ã®ã‚³ãƒ³ãƒ•リクト解決 +- ✅ **逿˜Žãªãƒ¬ãƒãƒ¼ãƒˆ** - âš ï¸ è­¦å‘Šä»˜ãã®ä¸¦åˆ—比較 +- ✅ **ドキュメントギャップ分æž** - å¤ã„ドキュメントや未文書化機能を特定 +- ✅ **唯一ã®ä¿¡é ¼ã§ãるソース** - æ„図(ドキュメント)ã¨ç¾å®Ÿï¼ˆã‚³ãƒ¼ãƒ‰ï¼‰ã®ä¸¡æ–¹ã‚’示㙠1 ã¤ã®ã‚¹ã‚­ãƒ« +- ✅ **å¾Œæ–¹äº’æ›æ€§** - レガシーã®å˜ä¸€ã‚½ãƒ¼ã‚¹è¨­å®šã¯å¼•ãç¶šã動作 + +### 🤖 マルムLLM プラットフォームサãƒãƒ¼ãƒˆ +- ✅ **12 ã® LLM プラットフォーム** - Claude AIã€Google Geminiã€OpenAI ChatGPTã€MiniMax AIã€æ±Žç”¨ Markdownã€OpenCodeã€Kimi(Moonshot AI)ã€DeepSeek AIã€Qwen(Alibaba)ã€OpenRouterã€Together AIã€Fireworks AI +- ✅ **汎用スクレイピング** - åŒã˜ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã™ã¹ã¦ã®ãƒ—ラットフォームã§ä½¿ç”¨å¯èƒ½ +- ✅ **プラットフォーム固有ã®ãƒ‘ッケージング** - å„ LLM ã«æœ€é©åŒ–ã•れãŸãƒ•ォーマット +- ✅ **ワンコマンドエクスãƒãƒ¼ãƒˆ** - `--target` フラグã§ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ã‚’é¸æŠž +- ✅ **オプションä¾å­˜é–¢ä¿‚** - å¿…è¦ãªã‚‚ã®ã ã‘インストール +- ✅ **100% 後方互æ›** - 既存㮠Claude ワークフローã¯å¤‰æ›´ä¸è¦ + +| プラットフォーム | フォーマット | アップロード | 強化 | API キー | カスタムエンドãƒã‚¤ãƒ³ãƒˆ | +|----------------|------------|------------|------|---------|-------------------| +| **Claude AI** | ZIP + YAML | ✅ 自動 | ✅ ã‚り | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ 自動 | ✅ ã‚り | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ 自動 | ✅ ã‚り | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ 自動 | ✅ ã‚り | MINIMAX_API_KEY | - | +| **汎用 Markdown** | ZIP | ⌠手動 | ⌠ãªã— | - | - | + +```bash +# Claude(デフォルト — 変更ä¸è¦ï¼ï¼‰ +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# 汎用 Markdown(ユニãƒãƒ¼ã‚µãƒ«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆï¼‰ +skill-seekers package output/react/ --target markdown +# Markdown ファイルã¯ä»»æ„ã® LLM ã§ç›´æŽ¥ä½¿ç”¨å¯èƒ½ +``` + +
+🔧 独自㮠AI プロãƒã‚¤ãƒ€ãƒ¼ã‚’使用(OpenAI 互æ›ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ + サブスクリプションã€Anthropic クレジットä¸è¦ï¼‰ + +オプション㮠AI **強化**ステップ(`create`ã€`scan`ã€`enhance` ã§ä½¿ç”¨ï¼‰ã«ã¯ Anthropic キーã¯**ä¸è¦**ã§ã™ã€‚以下㮠3 ã¤ã®æ–¹æ³•ã§å®Ÿè¡Œã§ãã¾ã™ï¼š + +**1. ã™ã§ã«å¥‘ç´„ã—ã¦ã„るサブスクリプションを使用 — API クレジット完全ä¸è¦ï¼ˆLOCAL エージェントモード)** + +Skill Seekers ã¯ãƒ­ã‚°ã‚¤ãƒ³æ¸ˆã¿ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ CLI を呼ã³å‡ºã›ã‚‹ãŸã‚ã€å¾“é‡èª²é‡‘ã® API トークンã§ã¯ãªã既存ã®ãƒ—ランã§å¼·åŒ–を実行ã§ãã¾ã™ï¼š + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → ChatGPT Plus プラン +skill-seekers create --agent claude # Claude Code → Claude Pro/Max プラン +``` + +サãƒãƒ¼ãƒˆã•れるエージェント:`claude`ã€`codex`ã€`copilot`ã€`opencode`ã€`kimi`ã€`custom` +(`--agent custom` 㨠`--agent-cmd " ..."` を組ã¿åˆã‚ã›ã‚Œã°ä»»æ„ã®ãƒ„ールを利用å¯èƒ½ï¼‰ã€‚ + +**2. ä»»æ„ã® OpenAI 互æ›ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ï¼ˆOpenRouterã€Groqã€Cerebrasã€Mistralã€NVIDIA NIM ãªã©ï¼‰** + +ã“れらã¯ã™ã¹ã¦ OpenAI 互æ›ã® `/v1` エンドãƒã‚¤ãƒ³ãƒˆã‚’公開ã—ã¦ã„ã¾ã™ã€‚3 ã¤ã®ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹ã ã‘ã§åˆ©ç”¨ã§ãã¾ã™ — Skill Seekers 㯠`OPENAI_API_KEY` を検出ã—ã€OpenAI SDK ㌠`OPENAI_BASE_URL` を自動的ã«å°Šé‡ã—ã¾ã™ï¼š + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # プロãƒã‚¤ãƒ€ãƒ¼ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆï¼ˆä¸‹è¡¨å‚照) +export OPENAI_MODEL="" # å¿…é ˆ — デフォルト㮠gpt-4o ã¯ä»–ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ã¯å­˜åœ¨ã—ã¾ã›ã‚“ +skill-seekers create +``` + +| プロãƒã‚¤ãƒ€ãƒ¼ | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> プロãƒã‚¤ãƒ€ãƒ¼æ¤œå‡ºã¯ã€**最åˆã«**見ã¤ã‹ã£ãŸ API キー環境変数を採用ã—ã¾ã™ï¼ˆ`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`)。特定ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’強制ã™ã‚‹ã«ã¯ `SKILL_SEEKER_PROVIDER` を設定ã™ã‚‹ã‹ã€å„ªå…ˆåº¦ã®é«˜ã„ã‚­ãƒ¼ãŒæœªè¨­å®šã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 + +**3. Claude 互æ›ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆï¼ˆGLMã€ãƒ—ロキシãªã©ï¼‰** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini(`GOOGLE_API_KEY`)㨠Kimi/Moonshot(`MOONSHOT_API_KEY`)もãƒã‚¤ãƒ†ã‚£ãƒ–ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚プロãƒã‚¤ãƒ€ãƒ¼ã”ã¨ã®ãƒ¢ãƒ‡ãƒ«ä¸Šæ›¸ãã‚’å«ã‚€å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ **[環境変数リファレンス](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +
+ +**インストール:** +```bash +# Gemini サãƒãƒ¼ãƒˆã‚’インストール +pip install skill-seekers[gemini] + +# OpenAI サãƒãƒ¼ãƒˆã‚’インストール +pip install skill-seekers[openai] + +# MiniMax サãƒãƒ¼ãƒˆã‚’インストール +pip install skill-seekers[minimax] + +# ã™ã¹ã¦ã® LLM プラットフォームをインストール +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯çµ±åˆ + +- ✅ **LangChain Documents** - `page_content` + メタデータ付ãã® `Document` フォーマットã«ç›´æŽ¥ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + - 最é©ãªç”¨é€”:QA ãƒã‚§ãƒ¼ãƒ³ã€ãƒªãƒˆãƒªãƒ¼ãƒãƒ¼ã€ãƒ™ã‚¯ãƒˆãƒ«ã‚¹ãƒˆã‚¢ã€ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ + - サンプル:[LangChain RAG パイプライン](examples/langchain-rag-pipeline/) + - ガイド:[LangChain çµ±åˆ](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - ユニーク ID + エンベディング付ãã® `TextNode` フォーマットã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + - 最é©ãªç”¨é€”:クエリエンジンã€ãƒãƒ£ãƒƒãƒˆã‚¨ãƒ³ã‚¸ãƒ³ã€ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆ + - サンプル:[LlamaIndex クエリエンジン](examples/llama-index-query-engine/) + - ガイド:[LlamaIndex çµ±åˆ](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone 対応フォーマット** - ãƒ™ã‚¯ãƒˆãƒ«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¢ãƒƒãƒ—ã‚µãƒ¼ãƒˆã«æœ€é©åŒ– + - 最é©ãªç”¨é€”:プロダクションベクトル検索ã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯æ¤œç´¢ã€ãƒã‚¤ãƒ–リッド検索 + - サンプル:[Pinecone アップサート](examples/pinecone-upsert/) + - ガイド:[Pinecone çµ±åˆ](docs/integrations/PINECONE.md) + +**クイックエクスãƒãƒ¼ãƒˆï¼š** +```bash +# LangChain Documents(JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes(JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown(汎用) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**完全㪠RAG パイプラインガイド:** [RAG パイプラインドキュメント](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆçµ±åˆ + +ä»»æ„ã®ãƒ•レームワークドキュメントを 4 ã¤ä»¥ä¸Šã® AI アシスタントå‘ã‘ã®ã‚¨ã‚­ã‚¹ãƒ‘ートコーディングコンテキストã«å¤‰æ›ï¼š + +- ✅ **Cursor IDE** - AI 駆動ã®ã‚³ãƒ¼ãƒ‰ææ¡ˆç”¨ã« `.cursorrules` ã‚’ç”Ÿæˆ + - 最é©ãªç”¨é€”:フレームワーク固有ã®ã‚³ãƒ¼ãƒ‰ç”Ÿæˆã€ä¸€è²«ã—ãŸãƒ‘ターン + - 対応:Cursor IDE(VS Code フォーク) + - ガイド:[Cursor çµ±åˆ](docs/integrations/CURSOR.md) + - サンプル:[Cursor React スキル](examples/cursor-react-skill/) + +- ✅ **Windsurf** - `.windsurfrules` ã§ Windsurf AI アシスタントã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’カスタマイズ + - 最é©ãªç”¨é€”:IDE ãƒã‚¤ãƒ†ã‚£ãƒ–ã® AI 支æ´ã€ãƒ•ローベースã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚° + - 対応:Codeium 製 Windsurf IDE + - ガイド:[Windsurf çµ±åˆ](docs/integrations/WINDSURF.md) + - サンプル:[Windsurf FastAPI コンテキスト](examples/windsurf-fastapi-context/) + +- ✅ **Cline(VS Code)** - VS Code エージェント用ã®ã‚·ã‚¹ãƒ†ãƒ ãƒ—ロンプト + MCP + - 最é©ãªç”¨é€”:VS Code ã§ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆåž‹ã‚³ãƒ¼ãƒ‰ç”Ÿæˆ + - 対応:VS Code 用 Cline 拡張機能 + - ガイド:[Cline çµ±åˆ](docs/integrations/CLINE.md) + - サンプル:[Cline Django アシスタント](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - IDE éžä¾å­˜ã® AI コンテキストサーãƒãƒ¼ + - 最é©ãªç”¨é€”:マルムIDE 環境(VS Codeã€JetBrainsã€Vim)ã€ã‚«ã‚¹ã‚¿ãƒ  LLM プロãƒã‚¤ãƒ€ãƒ¼ + - 対応:Continue.dev プラグインを備ãˆãŸä»»æ„ã® IDE + - ガイド:[Continue çµ±åˆ](docs/integrations/CONTINUE_DEV.md) + - サンプル:[Continue ユニãƒãƒ¼ã‚µãƒ«ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆ](examples/continue-dev-universal/) + +**AI コーディングツールå‘ã‘クイックエクスãƒãƒ¼ãƒˆï¼š** +```bash +# ä»»æ„ã® AI コーディングアシスタントå‘ã‘(Cursorã€Windsurfã€Clineã€Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # ã¾ãŸã¯ --target markdown + +# プロジェクトã«ã‚³ãƒ”ー(Cursor ã®å ´åˆï¼‰ +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Windsurf ã®å ´åˆ +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Cline ã®å ´åˆ +cp output/django-claude/SKILL.md my-project/.clinerules + +# Continue.dev ã®å ´åˆï¼ˆHTTP サーãƒãƒ¼ï¼‰ +python examples/continue-dev-universal/context_server.py +# ~/.continue/config.json ã§è¨­å®š +``` + +**çµ±åˆãƒãƒ–:** [ã™ã¹ã¦ã® AI システム統åˆ](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 3 ストリーム GitHub アーキテクãƒãƒ£ +- ✅ **3 ストリーム分æž** - GitHub リãƒã‚¸ãƒˆãƒªã‚’コードã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã‚¤ãƒ³ã‚µã‚¤ãƒˆã® 3 ストリームã«åˆ†å‰² +- ✅ **çµ±åˆã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã‚¢ãƒŠãƒ©ã‚¤ã‚¶ãƒ¼** - GitHub URL ã¨ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘スã®ä¸¡æ–¹ã«å¯¾å¿œ +- ✅ **C3.x åˆ†æžæ·±åº¦** - 「basicã€ï¼ˆ1〜2 分)ã¾ãŸã¯ã€Œc3xã€ï¼ˆ20〜60 分)分æžã‚’é¸æŠž +- ✅ **強化ルーター生æˆ** - GitHub メタデータã€README クイックスタートã€ã‚ˆãã‚ã‚‹å•題 +- ✅ **Issue çµ±åˆ** - GitHub Issues ã‹ã‚‰ã®ã‚ˆãã‚ã‚‹å•題ã¨è§£æ±ºç­– +- ✅ **スマートルーティングキーワード** - GitHub ラベルã®é‡ã¿ä»˜ã‘㌠2 å€ã§ãƒˆãƒ”ック検出精度をå‘上 + +**3 ストリームã®èª¬æ˜Žï¼š** +- **ストリーム 1:コード** - 高度㪠C3.x 分æžï¼ˆãƒ‘ターンã€ã‚µãƒ³ãƒ—ルã€ã‚¬ã‚¤ãƒ‰ã€è¨­å®šã€ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ï¼‰ +- **ストリーム 2:ドキュメント** - リãƒã‚¸ãƒˆãƒªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆREADMEã€CONTRIBUTINGã€docs/*.md) +- **ストリーム 3:インサイト** - コミュニティ知識(Issuesã€ãƒ©ãƒ™ãƒ«ã€Starsã€Forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# 3 ストリーム㧠GitHub リãƒã‚¸ãƒˆãƒªã‚’åˆ†æž +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # ã¾ãŸã¯ "basic" ã§ã‚¯ã‚¤ãƒƒã‚¯åˆ†æž + fetch_github_metadata=True +) + +# コードストリームã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ï¼ˆC3.x 分æžï¼‰ +print(f"デザインパターン: {len(result.code_analysis['c3_1_patterns'])}") +print(f"テストサンプル: {result.code_analysis['c3_2_examples_count']}") + +# ドキュメントストリームã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ï¼ˆãƒªãƒã‚¸ãƒˆãƒªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼‰ +print(f"README: {result.github_docs['readme'][:100]}") + +# インサイトストリームã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ï¼ˆGitHub メタデータ) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"よãã‚ã‚‹å•題: {len(result.github_insights['common_problems'])}") +``` + +**完全ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ**:[3 ストリーム実装サマリー](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠スマートレート制é™ç®¡ç†ã¨è¨­å®š +- ✅ **マルãƒãƒˆãƒ¼ã‚¯ãƒ³è¨­å®šã‚·ã‚¹ãƒ†ãƒ ** - 複数㮠GitHub アカウント(個人ã€ä»•事ã€OSSï¼‰ã‚’ç®¡ç† + - セキュアãªè¨­å®šã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ `~/.config/skill-seekers/config.json`(パーミッション 600) + - プロファイルã”ã¨ã®ãƒ¬ãƒ¼ãƒˆåˆ¶é™æˆ¦ç•¥ï¼š`prompt`ã€`wait`ã€`switch`ã€`fail` + - プロファイルã”ã¨ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆè¨­å®šï¼ˆãƒ‡ãƒ•ォルト:30 分ã€ç„¡æœŸé™ã®å¾…機を防止) + - スマートフォールãƒãƒƒã‚¯ãƒã‚§ãƒ¼ãƒ³ï¼šCLI 引数 → 環境変数 → 設定ファイル → プロンプト + - Claudeã€Geminiã€OpenAI ã® API ã‚­ãƒ¼ç®¡ç† +- ✅ **対話å¼è¨­å®šã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰** - 美ã—ã„ターミナル UI ã§ç°¡å˜ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— + - トークン作æˆã®ãŸã‚ã®ãƒ–ラウザ統åˆï¼ˆGitHub ãªã©ã‚’自動ã§é–‹ã) + - ãƒˆãƒ¼ã‚¯ãƒ³ã®æ¤œè¨¼ã¨æŽ¥ç¶šãƒ†ã‚¹ãƒˆ + - カラーコード付ãã®ãƒ“ジュアルステータス表示 +- ✅ **インテリジェントレート制é™ãƒãƒ³ãƒ‰ãƒ©ãƒ¼** - ç„¡é™å¾…ã¡ã¯ã‚‚ã†çµ‚ã‚ã‚Šï¼ + - レート制é™ï¼ˆ60 回/時間 vs 5000 回/時間)ã®äº‹å‰è­¦å‘Š + - GitHub API レスãƒãƒ³ã‚¹ã‹ã‚‰ã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ æ¤œå‡º + - 進æ—付ãã®ãƒ©ã‚¤ãƒ–カウントダウンタイマー + - ãƒ¬ãƒ¼ãƒˆåˆ¶é™æ™‚ã®è‡ªå‹•プロファイル切り替㈠+ - 4 ã¤ã®æˆ¦ç•¥ï¼šprompt(確èªï¼‰ã€wait(カウントダウン)ã€switch(切り替ãˆï¼‰ã€fail(中止) +- ✅ **レジューム機能** - 中断ã•れãŸã‚¸ãƒ§ãƒ–ã®å†é–‹ + - 設定å¯èƒ½ãªé–“éš”ã§ã®é€²æ—自動ä¿å­˜ï¼ˆãƒ‡ãƒ•ォルト:60 秒) + - å†é–‹å¯èƒ½ãªã‚¸ãƒ§ãƒ–ã®ä¸€è¦§è¡¨ç¤ºï¼ˆé€²æ—詳細付ã) + - å¤ã„ジョブã®è‡ªå‹•クリーンアップ(デフォルト:7 日) +- ✅ **CI/CD サãƒãƒ¼ãƒˆ** - 自動化å‘ã‘ã®éžå¯¾è©±ãƒ¢ãƒ¼ãƒ‰ + - `--non-interactive` フラグã§ãƒ—ロンプトãªã—ã®å³æ™‚失敗 + - `--profile` フラグã§ç‰¹å®šã® GitHub ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’é¸æŠž + - パイプラインログå‘ã‘ã®æ˜Žç¢ºãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ + +**クイックセットアップ:** +```bash +# åˆå›žè¨­å®šï¼ˆ5 分) +skill-seekers config --github + +# プライベートリãƒã‚¸ãƒˆãƒªç”¨ã«ç‰¹å®šã®ãƒ—ロファイルを使用 +skill-seekers create mycompany/private-repo --profile work + +# CI/CD ãƒ¢ãƒ¼ãƒ‰ï¼ˆå³æ™‚失敗ã€ãƒ—ロンプトãªã—) +skill-seekers create owner/repo --non-interactive + +# 中断ã•れãŸã‚¸ãƒ§ãƒ–ã‚’å†é–‹ +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**ãƒ¬ãƒ¼ãƒˆåˆ¶é™æˆ¦ç•¥ã®èª¬æ˜Žï¼š** +- **prompt**(デフォルト)- ãƒ¬ãƒ¼ãƒˆåˆ¶é™æ™‚ã«ã©ã†ã™ã‚‹ã‹ç¢ºèªï¼ˆå¾…機ã€åˆ‡ã‚Šæ›¿ãˆã€ãƒˆãƒ¼ã‚¯ãƒ³è¨­å®šã€ã‚­ãƒ£ãƒ³ã‚»ãƒ«ï¼‰ +- **wait** - カウントダウンタイマー付ãã§è‡ªå‹•待機(タイムアウトを尊é‡ï¼‰ +- **switch** - 次ã«åˆ©ç”¨å¯èƒ½ãªãƒ—ロファイルを自動的ã«è©¦è¡Œï¼ˆãƒžãƒ«ãƒã‚¢ã‚«ã‚¦ãƒ³ãƒˆæ§‹æˆå‘ã‘) +- **fail** - 明確ãªã‚¨ãƒ©ãƒ¼ã§å³æ™‚失敗(CI/CD ã«æœ€é©ï¼‰ + +### 🎯 Bootstrap スキル — セルフホスティング + +skill-seekers 自体をスキルã¨ã—ã¦ç”Ÿæˆã—ã€AI エージェント(Claude Codeã€Kimiã€Codex ãªã©ï¼‰å†…ã§ä½¿ç”¨ã§ãã¾ã™ï¼š + +```bash +# ã‚¹ã‚­ãƒ«ã‚’ç”Ÿæˆ +./scripts/bootstrap_skill.sh + +# Claude Code ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**得られるもã®ï¼š** +- ✅ **完全ãªã‚¹ã‚­ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ** - ã™ã¹ã¦ã® CLI コマンドã¨ä½¿ç”¨ãƒ‘ターン +- ✅ **CLI コマンドリファレンス** - ã™ã¹ã¦ã®ãƒ„ールã¨ãã®ã‚ªãƒ—ションを文書化 +- ✅ **クイックスタートサンプル** - 一般的ãªãƒ¯ãƒ¼ã‚¯ãƒ•ローã¨ãƒ™ã‚¹ãƒˆãƒ—ラクティス +- ✅ **è‡ªå‹•ç”Ÿæˆ API ドキュメント** - コード分æžã€ãƒ‘ターンã€ã‚µãƒ³ãƒ—ル + +### 🔠プライベート設定リãƒã‚¸ãƒˆãƒª +- ✅ **Git ベースã®è¨­å®šã‚½ãƒ¼ã‚¹** - プライベート/ãƒãƒ¼ãƒ  Git リãƒã‚¸ãƒˆãƒªã‹ã‚‰è¨­å®šã‚’å–å¾— +- ✅ **マルãƒã‚½ãƒ¼ã‚¹ç®¡ç†** - GitHubã€GitLabã€Bitbucket リãƒã‚¸ãƒˆãƒªã‚’無制é™ã«ç™»éŒ² +- ✅ **ãƒãƒ¼ãƒ ã‚³ãƒ©ãƒœãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³** - 3〜5 人ã®ãƒãƒ¼ãƒ é–“ã§ã‚«ã‚¹ã‚¿ãƒ è¨­å®šã‚’共有 +- ✅ **エンタープライズサãƒãƒ¼ãƒˆ** - 優先度ベースã®è§£æ±ºã§ 500 人以上ã®é–‹ç™ºè€…ã«ã‚¹ã‚±ãƒ¼ãƒ« +- ✅ **セキュアèªè¨¼** - 環境変数トークン(GITHUB_TOKENã€GITLAB_TOKEN) +- ✅ **インテリジェントキャッシュ** - 一度クローンã™ã‚Œã°ã€æ›´æ–°ã¯è‡ªå‹•çš„ã«ãƒ—ル +- ✅ **オフラインモード** - オフライン時ã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れãŸè¨­å®šã§ä½œæ¥­ + +### 🤖 コードベース分æžï¼ˆC3.x) + +**C3.4:AI 強化付ã設定パターン抽出** +- ✅ **9 ã¤ã®è¨­å®šãƒ•ォーマット** - JSONã€YAMLã€TOMLã€ENVã€INIã€Pythonã€JavaScriptã€Dockerfileã€Docker Compose +- ✅ **7 ã¤ã®ãƒ‘ターンタイプ** - データベースã€APIã€ãƒ­ã‚®ãƒ³ã‚°ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€ãƒ¡ãƒ¼ãƒ«ã€èªè¨¼ã€ã‚µãƒ¼ãƒãƒ¼è¨­å®š +- ✅ **AI 強化** - オプションã®ãƒ‡ãƒ¥ã‚¢ãƒ«ãƒ¢ãƒ¼ãƒ‰ AI 分æžï¼ˆAPI + LOCAL) + - å„設定ãŒä½•ã‚’ã™ã‚‹ã‹ã‚’説明 + - ãƒ™ã‚¹ãƒˆãƒ—ãƒ©ã‚¯ãƒ†ã‚£ã‚¹ã¨æ”¹å–„æ¡ˆã‚’ææ¡ˆ + - **セキュリティ分æž** - ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れãŸã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚„公開ã•れãŸèªè¨¼æƒ…報を検出 +- ✅ **自動ドキュメント生æˆ** - ã™ã¹ã¦ã®è¨­å®šã® JSON + Markdown ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ç”Ÿæˆ +- ✅ **MCP çµ±åˆ** - 強化サãƒãƒ¼ãƒˆä»˜ãã® `extract_config_patterns` ツール + +**C3.3:AI 強化æ“作ガイド** +- ✅ **包括的㪠AI 強化** - 基本ガイドをプロフェッショナルãªãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã«å¤‰æ› +- ✅ **5 ã¤ã®è‡ªå‹•改善** - ステップ説明ã€ãƒˆãƒ©ãƒ–ルシューティングã€å‰ææ¡ä»¶ã€æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã€ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ +- ✅ **デュアルモードサãƒãƒ¼ãƒˆ** - API モード(Claude API)ã¾ãŸã¯ LOCAL モード(Claude Code CLI) +- ✅ **LOCAL モードã¯ã‚³ã‚¹ãƒˆç„¡æ–™** - Claude Code Max プランã§ç„¡æ–™å¼·åŒ– +- ✅ **å“質ã®å¤‰é©** - 75 行ã®ãƒ†ãƒ³ãƒ—レート → 500 行以上ã®åŒ…括的ãªã‚¬ã‚¤ãƒ‰ + +**使用方法:** +```bash +# クイック分æžï¼ˆ1〜2 分ã€åŸºæœ¬æ©Ÿèƒ½ã®ã¿ï¼‰ +skill-seekers scan tests/ --quick + +# 包括的分æžï¼ˆAI 付ãã€20〜60 分) +skill-seekers scan tests/ --comprehensive + +# AI 強化付ã +skill-seekers scan tests/ --enhance +``` + +**完全ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼š** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 強化ワークフロープリセット + +å†åˆ©ç”¨å¯èƒ½ãª YAML 定義ã®å¼·åŒ–パイプラインã§ã€AI ãŒç”Ÿã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ´—ç·´ã•れãŸã‚¹ã‚­ãƒ«ã«å¤‰æ›ã™ã‚‹æ–¹æ³•を制御ã—ã¾ã™ã€‚ + +- ✅ **5 ã¤ã®çµ„ã¿è¾¼ã¿ãƒ—リセット** — `default`ã€`minimal`ã€`security-focus`ã€`architecture-comprehensive`ã€`api-documentation` +- ✅ **ユーザー定義プリセット** — `~/.config/skill-seekers/workflows/` ã«ã‚«ã‚¹ã‚¿ãƒ ãƒ¯ãƒ¼ã‚¯ãƒ•ローを追加 +- ✅ **複数ワークフローãƒã‚§ãƒ¼ãƒ³** — 1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§ 2 ã¤ä»¥ä¸Šã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローをãƒã‚§ãƒ¼ãƒ³ +- ✅ **完全㪠CLI 管ç†** — ワークフローã®ä¸€è¦§è¡¨ç¤ºã€ç¢ºèªã€ã‚³ãƒ”ーã€è¿½åŠ ã€å‰Šé™¤ã€æ¤œè¨¼ + +```bash +# å˜ä¸€ãƒ¯ãƒ¼ã‚¯ãƒ•ローã®é©ç”¨ +skill-seekers create ./my-project --enhance-workflow security-focus + +# 複数ワークフローã®ãƒã‚§ãƒ¼ãƒ³ï¼ˆé †åºã©ãŠã‚Šã«é©ç”¨ï¼‰ +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# プリセットã®ç®¡ç† +skill-seekers workflows list # ã™ã¹ã¦ä¸€è¦§è¡¨ç¤ºï¼ˆçµ„ã¿è¾¼ã¿ + ユーザー) +skill-seekers workflows show security-focus # YAML 内容を表示 +skill-seekers workflows copy security-focus # 編集用ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚³ãƒ”ー +skill-seekers workflows add ./my-workflow.yaml # カスタムプリセットをインストール +skill-seekers workflows remove my-workflow # ユーザープリセットを削除 +skill-seekers workflows validate security-focus # プリセット構造を検証 + +# è¤‡æ•°ã‚’åŒæ™‚ã«ã‚³ãƒ”ー +skill-seekers workflows copy security-focus minimal api-documentation + +# è¤‡æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åŒæ™‚ã«è¿½åŠ  +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# è¤‡æ•°ã‚’åŒæ™‚ã«å‰Šé™¤ +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML プリセットフォーマット:** +```yaml +name: security-focus +description: "セキュリティé‡ç‚¹ãƒ¬ãƒ“ュー:脆弱性ã€èªè¨¼ã€ãƒ‡ãƒ¼ã‚¿å‡¦ç†" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "OWASP Top 10 ã¨ä¸€èˆ¬çš„ãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è„†å¼±æ€§ã‚’レビュー..." + - name: auth-review + type: custom + prompt: "èªè¨¼ã¨èªå¯ãƒ‘ターンを検査..." + uses_history: true +``` + +### âš¡ パフォーマンスã¨ã‚¹ã‚±ãƒ¼ãƒ« +- ✅ **éžåŒæœŸãƒ¢ãƒ¼ãƒ‰** - async/await ã§ 2〜3 å€é«˜é€Ÿãªã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング(`--async` フラグを使用) +- ✅ **å¤§è¦æ¨¡ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µãƒãƒ¼ãƒˆ** - インテリジェントãªåˆ†å‰²ã§ 10K〜40K 以上ã®ãƒšãƒ¼ã‚¸ã‚’å‡¦ç† +- ✅ **ルーター/ãƒãƒ–スキル** - 専用サブスキルã¸ã®ã‚¤ãƒ³ãƒ†ãƒªã‚¸ã‚§ãƒ³ãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚° +- ✅ **並列スクレイピング** - 複数ã®ã‚¹ã‚­ãƒ«ã‚’åŒæ™‚å‡¦ç† +- ✅ **ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆ/レジューム** - 長時間スクレイプã§ã‚‚進æ—を失ã‚ãªã„ +- ✅ **キャッシュシステム** - 一度スクレイプã™ã‚Œã°å³åº§ã«ãƒªãƒ“ルド + +### 🤖 エージェントéžä¾å­˜ã®ã‚¹ã‚­ãƒ«ç”Ÿæˆ +- ✅ **マルãƒã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚µãƒãƒ¼ãƒˆ** - `--agent` フラグ㧠Claudeã€Kimiã€Codexã€Copilotã€OpenCodeã€ã¾ãŸã¯ä»»æ„ã®ã‚«ã‚¹ã‚¿ãƒ ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆå‘ã‘ã«ã‚¹ã‚­ãƒ«ã‚’ç”Ÿæˆ +- ✅ **カスタムエージェントコマンド** - `--agent-cmd` ã§å¼·åŒ–ã«ä½¿ç”¨ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ CLI コマンドを指定 +- ✅ **ユニãƒãƒ¼ã‚µãƒ«ãƒ•ラグ** - `--agent` 㨠`--agent-cmd` ã¯ã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ï¼ˆcreateã€scrapeã€githubã€pdf ãªã©ï¼‰ã§åˆ©ç”¨å¯èƒ½ + +### 📦 マーケットプレイスパイプライン +- ✅ **マーケットプレイスã¸ã®å…¬é–‹** - Claude Code プラグインマーケットプレイスリãƒã‚¸ãƒˆãƒªã«ã‚¹ã‚­ãƒ«ã‚’公開 +- ✅ **エンドツーエンドパイプライン** - ドキュメントソースã‹ã‚‰å…¬é–‹æ¸ˆã¿ãƒžãƒ¼ã‚±ãƒƒãƒˆãƒ—レイスエントリã¾ã§ + +### ✅ å“質ä¿è¨¼ +- ✅ **完全テスト** - 3,700 以上ã®ãƒ†ã‚¹ãƒˆã€åŒ…括的ãªã‚«ãƒãƒ¬ãƒƒã‚¸ + +--- + +## 📦 インストール + +```bash +# 基本インストール(ドキュメントスクレイピングã€GitHub 分æžã€PDFã€ãƒ‘ッケージング) +pip install skill-seekers + +# ã™ã¹ã¦ã® LLM プラットフォームサãƒãƒ¼ãƒˆä»˜ã +pip install skill-seekers[all-llms] + +# MCP サーãƒãƒ¼ä»˜ã +pip install skill-seekers[mcp] + +# 全機能 +pip install skill-seekers[all] +``` + +**é¸æŠžã«è¿·ã£ãŸã‚‰ï¼Ÿ** セットアップウィザードを実行: +```bash +skill-seekers-setup +``` + +### インストールオプション + +| インストールコマンド | 機能 | +|-------------------|------| +| `pip install skill-seekers` | スクレイピングã€GitHub 分æžã€PDFã€å…¨ãƒ—ラットフォーム | +| `pip install skill-seekers[gemini]` | + Google Gemini サãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT サãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[all-llms]` | + ã™ã¹ã¦ã® LLM プラットフォーム | +| `pip install skill-seekers[mcp]` | + Claude Code ã‚„ Cursor ãªã©ã® MCP サーãƒãƒ¼ | +| `pip install skill-seekers[video]` | + YouTube/Vimeo 字幕 & メタデータ抽出 | +| `pip install skill-seekers[video-full]` | + Whisper 文字起ã“ã— & ビジュアルフレーム抽出 | +| `pip install skill-seekers[jupyter]` | + Jupyter Notebook サãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[pptx]` | + PowerPoint サãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[confluence]` | + Confluence Wiki サãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[notion]` | + Notion ページサãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[rss]` | + RSS/Atom フィードサãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[chat]` | + Slack/Discord ãƒãƒ£ãƒƒãƒˆã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚µãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc ドキュメントサãƒãƒ¼ãƒˆ | +| `pip install skill-seekers[all]` | 全機能 | + +> **動画ビジュアルä¾å­˜é–¢ä¿‚(GPU 対応):** `skill-seekers[video-full]` をインストールã—ãŸå¾Œã€ +> `skill-seekers create --setup` を実行ã—㦠GPU を自動検出ã—ã€æ­£ã—ã„ PyTorch +> ãƒãƒ¼ã‚¸ãƒ§ãƒ³ + easyocr をインストールã—ã¾ã™ã€‚ã“れã¯ãƒ“ジュアル抽出ä¾å­˜é–¢ä¿‚ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æŽ¨å¥¨ã•れる方法ã§ã™ã€‚ + +--- + +## 🚀 ワンコマンドインストールワークフロー + +**設定ã‹ã‚‰ã‚¹ã‚­ãƒ«ã‚¢ãƒƒãƒ—ロードã¾ã§ã®æœ€é€Ÿã®æ–¹æ³•——完全自動化:** + +```bash +# å…¬å¼è¨­å®šã‹ã‚‰ React スキルをインストール(Claude ã«è‡ªå‹•アップロード) +skill-seekers install --config react + +# ローカル設定ファイルã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +skill-seekers install --config configs/custom.json + +# アップロードãªã—ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ï¼ˆãƒ‘ッケージã®ã¿ï¼‰ +skill-seekers install --config django --no-upload + +# 実行ã›ãšã«ãƒ¯ãƒ¼ã‚¯ãƒ•ローをプレビュー +skill-seekers install --config react --dry-run +``` + +**æ‰€è¦æ™‚間:** åˆè¨ˆ 20〜45 分 | **å“質:** 本番é‹ç”¨å¯èƒ½ï¼ˆ9/10) | **コスト:** ç„¡æ–™ + +**実行フェーズ:** +``` +📥 フェーズ 1:設定ã®å–得(設定åãŒæŒ‡å®šã•れãŸå ´åˆï¼‰ +📖 フェーズ 2:ドキュメントã®ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング +✨ フェーズ 3:AI 強化(必須 — スキップä¸å¯ï¼‰ +📦 フェーズ 4:スキルã®ãƒ‘ッケージング +â˜ï¸ フェーズ 5:Claude ã«ã‚¢ãƒƒãƒ—ロード(オプションã€API キーãŒå¿…è¦ï¼‰ +``` + +**è¦ä»¶ï¼š** +- ANTHROPIC_API_KEY 環境変数(自動アップロード用) +- Claude Code Max プラン(ローカル AI 強化用)ã€ã¾ãŸã¯ `--agent` ã§åˆ¥ã® AI ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’é¸æŠž + +--- + +## 📊 機能マトリックス + +Skill Seekers 㯠**12 ã® LLM プラットフォーム**ã€**8 ã¤ã® RAG/ベクトルターゲット**ã€**18 種類ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—**をサãƒãƒ¼ãƒˆã—ã€ã™ã¹ã¦ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§å®Œå…¨ãªæ©Ÿèƒ½ãƒ‘リティをæä¾›ã—ã¾ã™ã€‚ + +**プラットフォーム:** Claude AIã€Google Geminiã€OpenAI ChatGPTã€MiniMax AIã€æ±Žç”¨ Markdownã€OpenCodeã€Kimi(Moonshot AI)ã€DeepSeek AIã€Qwen(Alibaba)ã€OpenRouterã€Together AIã€Fireworks AI +**ソースタイプ:** ドキュメントサイトã€GitHub リãƒã‚¸ãƒˆãƒªã€PDFã€Word(.docx)ã€EPUBã€å‹•ç”»ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã€Jupyter Notebookã€ãƒ­ãƒ¼ã‚«ãƒ« HTMLã€OpenAPI/Swaggerã€AsciiDocã€PowerPoint(.pptx)ã€RSS/Atom フィードã€Man ページã€Confluence Wikiã€Notion ページã€Slack/Discord ãƒãƒ£ãƒƒãƒˆã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ + +詳細㯠[å®Œå…¨ãªæ©Ÿèƒ½ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹](docs/reference/FEATURE_MATRIX.md) ã‚’ã”覧ãã ã•ã„。 + +### プラットフォーム簡易比較 + +| 機能 | Claude | Gemini | OpenAI | MiniMax | Markdown | +|------|--------|--------|--------|--------|----------| +| フォーマット | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| アップロード | ✅ API | ✅ API | ✅ API | ✅ API | ⌠手動 | +| 強化 | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠ãªã— | +| 全スキルモード | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## 使用例 + +### ドキュメントスクレイピング + +```bash +# ドキュメントサイトをスクレイプ +skill-seekers create --config configs/react.json + +# 設定ãªã—ã§ã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ— +skill-seekers create https://react.dev --name react + +# éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ï¼ˆ3 å€é«˜é€Ÿï¼‰ +skill-seekers create --config configs/godot.json --async --workers 8 + +# 強化ã«ç‰¹å®šã® AI エージェントを使用 +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF 抽出 + +```bash +# 基本 PDF 抽出 +skill-seekers create --pdf docs/manual.pdf --name myskill + +# é«˜åº¦ãªæ©Ÿèƒ½ +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # テーブル抽出 + --parallel \ # é«˜é€Ÿä¸¦åˆ—å‡¦ç† + --workers 8 # 8 CPU コアを使用 + +# スキャン PDF(必è¦ï¼špip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### 動画抽出 + +```bash +# 動画サãƒãƒ¼ãƒˆã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +pip install skill-seekers[video] # 字幕 + メタデータ +pip install skill-seekers[video-full] # + Whisper 文字起ã“ã— + ビジュアルフレーム抽出 + +# GPU 自動検出ã¨ãƒ“ジュアルä¾å­˜é–¢ä¿‚ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ï¼ˆPyTorch + easyocr) +skill-seekers create --setup + +# YouTube å‹•ç”»ã‹ã‚‰æŠ½å‡º +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# YouTube プレイリストã‹ã‚‰æŠ½å‡º +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# ローカル動画ファイルã‹ã‚‰æŠ½å‡º +skill-seekers create --video-file recording.mp4 --name myrecording + +# ビジュアルフレーム分æžä»˜ãã§æŠ½å‡ºï¼ˆvideo-full ä¾å­˜é–¢ä¿‚ãŒå¿…è¦ï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# AI 強化付ã(OCR クリーンアップ + æ´—ç·´ã•れ㟠SKILL.md を生æˆï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# å‹•ç”»ã®ç‰¹å®šã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’トリミング(秒数ã€MM:SSã€HH:MM:SS å½¢å¼ã«å¯¾å¿œï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# 低信頼度 OCR フレーム㫠Vision API を使用(ANTHROPIC_API_KEY ãŒå¿…è¦ï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# 以å‰ã«æŠ½å‡ºã—ãŸãƒ‡ãƒ¼ã‚¿ã‹ã‚‰ã‚¹ã‚­ãƒ«ã‚’冿§‹ç¯‰ï¼ˆãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’スキップ) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **完全ガイド:** [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) ã§å®Œå…¨ãª CLI リファレンス〠+> ビジュアルパイプラインã®è©³ç´°ã€AI 強化オプションã€ãƒˆãƒ©ãƒ–ルシューティングをå‚ç…§ã—ã¦ãã ã•ã„。 + +### GitHub リãƒã‚¸ãƒˆãƒªåˆ†æž + +```bash +# 基本リãƒã‚¸ãƒˆãƒªã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング +skill-seekers create facebook/react + +# èªè¨¼ä»˜ã(より高ã„レート制é™ï¼‰ +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# å«ã‚るコンテンツã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º +skill-seekers create django/django \ + --include-issues \ # GitHub Issues を抽出 + --max-issues 100 \ # Issue æ•°ã‚’åˆ¶é™ + --include-changelog # CHANGELOG.md を抽出 +``` + +### çµ±åˆãƒžãƒ«ãƒã‚½ãƒ¼ã‚¹ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング + +**ドキュメント + GitHub + PDF をコンフリクト検出付ãã®çµ±åˆã‚¹ã‚­ãƒ«ã«çµ±åˆï¼š** + +```bash +# 既存ã®çµ±åˆè¨­å®šã‚’使用 +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# ã¾ãŸã¯çµ±åˆè¨­å®šã‚’ä½œæˆ +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**コンフリクト検出ãŒè‡ªå‹•çš„ã«ç™ºè¦‹ã™ã‚‹ã‚‚ã®ï¼š** +- 🔴 **コードã«å­˜åœ¨ã—ãªã„**(高):文書化ã•れã¦ã„ã‚‹ãŒæœªå®Ÿè£… +- 🟡 **ドキュメントã«å­˜åœ¨ã—ãªã„**(中):実装ã•れã¦ã„ã‚‹ãŒæœªæ–‡æ›¸åŒ– +- âš ï¸ **ã‚·ã‚°ãƒãƒãƒ£ä¸ä¸€è‡´**:パラメータ/åž‹ãŒç•°ãªã‚‹ +- â„¹ï¸ **説明ã®ä¸ä¸€è‡´**:説明ãŒç•°ãªã‚‹ + +**完全ガイド:** [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +### プライベート設定リãƒã‚¸ãƒˆãƒª + +**プライベート Git リãƒã‚¸ãƒˆãƒªã‚’使用ã—ã¦ãƒãƒ¼ãƒ é–“ã§ã‚«ã‚¹ã‚¿ãƒ è¨­å®šã‚’共有:** + +```bash +# オプション 1:MCP ツールを使用(推奨) +# ãƒãƒ¼ãƒ ã®ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã‚’登録 +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# ãƒãƒ¼ãƒ ãƒªãƒã‚¸ãƒˆãƒªã‹ã‚‰è¨­å®šã‚’å–å¾— +fetch_config(source="team", config_name="internal-api") +``` + +**サãƒãƒ¼ãƒˆã•れるプラットフォーム:** +- GitHub(`GITHUB_TOKEN`)ã€GitLab(`GITLAB_TOKEN`)ã€Gitea(`GITEA_TOKEN`)ã€Bitbucket(`BITBUCKET_TOKEN`) + +**完全ガイド:** [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +## 仕組㿠+ +```mermaid +graph LR + A[ドキュメントサイト] --> B[Skill Seekers] + B --> C[スクレイパー] + B --> D[AI 強化] + B --> E[パッケージャー] + C --> F[æ•´ç†ã•れãŸå‚照ファイル] + D --> F + F --> E + E --> G[AI スキル .zip] + G --> H[AI プラットフォームã«ã‚¢ãƒƒãƒ—ロード] +``` + +0. **llms.txt ã®æ¤œå‡º** - llms-full.txtã€llms.txtã€llms-small.txt を優先ãƒã‚§ãƒƒã‚¯ï¼ˆã‚¹ãƒžãƒ¼ãƒˆ SPA ディスカãƒãƒªãƒ¼ã®ä¸€éƒ¨ï¼‰ +1. **スクレイプ**:ドキュメントã‹ã‚‰ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã‚’抽出 +2. **カテゴリ分類**ï¼šã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ãƒˆãƒ”ãƒƒã‚¯åˆ¥ã«æ•´ç†ï¼ˆAPIã€ã‚¬ã‚¤ãƒ‰ã€ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ãªã©ï¼‰ +3. **強化**:AI ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’分æžã—ã€ã‚µãƒ³ãƒ—ル付ãã®åŒ…括的㪠SKILL.md を作æˆï¼ˆ`--agent` ã§è¤‡æ•°ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã«å¯¾å¿œï¼‰ +4. **パッケージ**:ã™ã¹ã¦ã‚’プラットフォーム対応㮠`.zip` ファイルã«ãƒãƒ³ãƒ‰ãƒ« + +## アーキテクãƒãƒ£ + +システム㯠**8 ã¤ã®ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«**㨠**5 ã¤ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«**(åˆè¨ˆç´„ 200 ã‚¯ãƒ©ã‚¹ï¼‰ã§æ§‹æˆã•れã¦ã„ã¾ã™ï¼š + +![パッケージ概è¦](docs/UML/exports/00_package_overview.png) + +| モジュール | 目的 | 主è¦ã‚¯ãƒ©ã‚¹ | +|-----------|------|-------------| +| **CLICore** | Git スタイルã®ã‚³ãƒžãƒ³ãƒ‰ãƒ‡ã‚£ã‚¹ãƒ‘ッãƒãƒ£ãƒ¼ | `CLIDispatcher`ã€`SourceDetector`ã€`CreateCommand` | +| **Scrapers** | 18 種類ã®ã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—抽出器 | `DocToSkillConverter`ã€`DocumentSkillBuilder`(共有ビルドレイヤー)ã€`UnifiedScraper` | +| **Adaptors** | 20 以上ã®å‡ºåŠ›ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ | `SkillAdaptor`(ABC)ã€`ClaudeAdaptor`ã€`LangChainAdaptor` | +| **Analysis** | C3.x コードベース分æžãƒ‘イプライン | `UnifiedCodebaseAnalyzer`ã€`PatternRecognizer`ã€10 種類㮠GoF 検出器 | +| **Enhancement** | `AgentClient` ã«ã‚ˆã‚‹ AI 駆動ã®ã‚¹ã‚­ãƒ«æ”¹å–„ | `AgentClient`ã€`AIEnhancer`ã€`UnifiedEnhancer`ã€`WorkflowEngine` | +| **Packaging** | スキルã®ãƒ‘ッケージã€ã‚¢ãƒƒãƒ—ロードã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« | `PackageSkill`ã€`InstallAgent` | +| **MCP** | FastMCP サーãƒãƒ¼ï¼ˆ40 ツール) | `SkillSeekerMCPServer`ã€10 ã®ãƒ„ールモジュール | +| **Sync** | ドキュメント変更検出 | `ChangeDetector`ã€`SyncMonitor`ã€`Notifier` | + +ユーティリティモジュール:**Parsers**(28 ã® CLI パーサー)ã€**Storage**(S3/GCS/Azure)ã€**Embedding**(マルãƒãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ™ã‚¯ãƒˆãƒ«ï¼‰ã€**Benchmark**(パフォーマンス)ã€**Utilities**(16 ã®å…±æœ‰ãƒ˜ãƒ«ãƒ‘ー)。 + +完全㪠UML 図:**[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML プロジェクト:`docs/UML/skill_seekers.mdj` | HTML API リファレンス:`docs/UML/html/` + +## 📋 剿æ¡ä»¶ + +**é–‹å§‹å‰ã«ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„:** + +1. **Python 3.10 以上** - [ダウンロード](https://www.python.org/downloads/) | 確èªï¼š`python3 --version` +2. **Git** - [ダウンロード](https://git-scm.com/) | 確èªï¼š`git --version` +3. **15〜30 分**ã®åˆå›žã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—時間 + +**åˆã‚ã¦ã®æ–¹ã¯ï¼Ÿ** → **[ã“ã¡ã‚‰ã‹ã‚‰é–‹å§‹ï¼šç¢ºå®Ÿãªã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¬ã‚¤ãƒ‰](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Claude ã¸ã®ã‚¹ã‚­ãƒ«ã‚¢ãƒƒãƒ—ロード + +スキルã®ãƒ‘ッケージãŒå®Œäº†ã—ãŸã‚‰ã€Claude ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼š + +### オプション 1:自動アップロード(API ベース) + +```bash +# API キーを設定(一度ã ã‘) +export ANTHROPIC_API_KEY=sk-ant-... + +# パッケージã¨è‡ªå‹•アップロード +skill-seekers package output/react/ --upload + +# ã¾ãŸã¯æ—¢å­˜ã® .zip をアップロード +skill-seekers upload output/react.zip +``` + +### オプション 2:手動アップロード(API キーä¸è¦ï¼‰ + +```bash +# スキルをパッケージ +skill-seekers package output/react/ +# → output/react.zip ãŒä½œæˆã•れã¾ã™ + +# 手動ã§ã‚¢ãƒƒãƒ—ロード: +# - https://claude.ai/skills ã«ã‚¢ã‚¯ã‚»ã‚¹ +# - 「スキルをアップロードã€ã‚’クリック +# - output/react.zip ã‚’é¸æŠž +``` + +### オプション 3:MCP(Claude Code) + +``` +Claude Code ã§ç›´æŽ¥èžãã ã‘: +「React スキルをパッケージã—ã¦ã‚¢ãƒƒãƒ—ロードã—ã¦ã€ +``` + +--- + +## 🤖 AI エージェントã¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« + +Skill Seekers 㯠19 ã® AI コーディングエージェントã«ã‚¹ã‚­ãƒ«ã‚’自動インストールã§ãã¾ã™ã€‚ + +```bash +# 特定ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +skill-seekers install-agent output/react/ --agent cursor + +# IBM Bob ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ï¼ˆãƒ—ロジェクトローカル㮠.bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# ã™ã¹ã¦ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã«ä¸€æ‹¬ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +skill-seekers install-agent output/react/ --agent all + +# インストールã›ãšã«ãƒ—レビュー +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### サãƒãƒ¼ãƒˆã•れるエージェント + +| エージェント | パス | タイプ | +|------------|------|-------| +| **Claude Code** | `~/.claude/skills/` | グローãƒãƒ« | +| **Cursor** | `.cursor/skills/` | プロジェクト | +| **VS Code / Copilot** | `.github/skills/` | プロジェクト | +| **Amp** | `~/.amp/skills/` | グローãƒãƒ« | +| **Goose** | `~/.config/goose/skills/` | グローãƒãƒ« | +| **OpenCode** | `~/.opencode/skills/` | グローãƒãƒ« | +| **Windsurf** | `~/.windsurf/skills/` | グローãƒãƒ« | +| **Roo Code** | `.roo/skills/` | プロジェクト | +| **Cline** | `.cline/skills/` | プロジェクト | +| **Aider** | `~/.aider/skills/` | グローãƒãƒ« | +| **Bolt** | `.bolt/skills/` | プロジェクト | +| **Kilo Code** | `.kilo/skills/` | プロジェクト | +| **Continue** | `~/.continue/skills/` | グローãƒãƒ« | +| **Kimi Code** | `~/.kimi/skills/` | グローãƒãƒ« | +| **IBM Bob** | `.bob/skills/` | プロジェクト | + +--- + +## 🔌 MCP çµ±åˆï¼ˆ40 ツール) + +Skill Seekers 㯠Claude Codeã€Cursorã€Windsurfã€VS Code + Clineã€IntelliJ IDEA ã§ä½¿ç”¨ã§ãã‚‹ MCP サーãƒãƒ¼ã‚’æä¾›ã—ã¾ã™ã€‚ + +```bash +# stdio モード(Claude Codeã€VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP モード(Cursorã€Windsurfã€IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# ã™ã¹ã¦ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’一括自動設定 +./setup_mcp.sh +``` + +**利用å¯èƒ½ãªå…¨ 40 ツール:** +- **コア(9):** `list_configs`ã€`generate_config`ã€`validate_config`ã€`estimate_pages`ã€`scrape_docs`ã€`package_skill`ã€`upload_skill`ã€`enhance_skill`ã€`install_skill` +- **拡張(10):** `scrape_github`ã€`scrape_pdf`ã€`unified_scrape`ã€`merge_sources`ã€`detect_conflicts`ã€`add_config_source`ã€`fetch_config`ã€`list_config_sources`ã€`remove_config_source`ã€`split_config` +- **ベクトル DB(4):** `export_to_chroma`ã€`export_to_weaviate`ã€`export_to_faiss`ã€`export_to_qdrant` +- **クラウド(3):** `cloud_upload`ã€`cloud_download`ã€`cloud_list` + +**完全ガイド:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ è¨­å®š + +### 利用å¯èƒ½ãªãƒ—リセット(24 以上) + +```bash +# ã™ã¹ã¦ã®ãƒ—リセットを一覧表示 +# skill-seekers list-configs # v3.7.0 ã§ã¯åˆ©ç”¨ä¸å¯ +``` + +| カテゴリ | プリセット | +|---------|----------| +| **Web フレームワーク** | `react`ã€`vue`ã€`angular`ã€`svelte`ã€`nextjs` | +| **Python** | `django`ã€`flask`ã€`fastapi`ã€`sqlalchemy`ã€`pytest` | +| **ゲーム開発** | `godot`ã€`pygame`ã€`unity` | +| **ツール & DevOps** | `docker`ã€`kubernetes`ã€`terraform`ã€`ansible` | +| **çµ±åˆï¼ˆãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ + GitHub)** | `react-unified`ã€`vue-unified`ã€`nextjs-unified` ãªã© | + +### 独自ã®è¨­å®šã‚’ä½œæˆ + +```bash +# オプション 1ï¼šå¯¾è©±å¼ +skill-seekers create --interactive + +# オプション 2:プリセットをコピーã—ã¦ç·¨é›† +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã®æ§‹é€  + +```json +{ + "name": "myframework", + "description": "ã“ã®ã‚¹ã‚­ãƒ«ã‚’使用ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### 設定ã®ä¿å­˜å ´æ‰€ + +ツールã¯ä»¥ä¸‹ã®é †åºã§æ¤œç´¢ã—ã¾ã™ï¼š +1. 指定ã•ã‚ŒãŸæ­£ç¢ºãªãƒ‘ス +2. `./configs/`(カレントディレクトリ) +3. `~/.config/skill-seekers/configs/`(ユーザー設定ディレクトリ) +4. SkillSeekersWeb.com API(プリセット設定) + +--- + +## 📊 作æˆã•れるも㮠+ +``` +output/ +├── godot_data/ # スクレイプã•れãŸç”Ÿãƒ‡ãƒ¼ã‚¿ +│ ├── pages/ # JSON ファイル(ページã”ã¨ã« 1 ã¤ï¼‰ +│ └── summary.json # æ¦‚è¦ +│ +└── godot/ # スキルファイル + ├── SKILL.md # 実際ã®ã‚µãƒ³ãƒ—ル付ã強化版 + ├── references/ # カテゴリ分類ã•れãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # 空(独自ã®ã‚¹ã‚¯ãƒªãƒ—トを追加å¯èƒ½ï¼‰ + └── assets/ # 空(独自ã®ã‚¢ã‚»ãƒƒãƒˆã‚’追加å¯èƒ½ï¼‰ +``` + +--- + +## 🛠トラブルシューティング + +### ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒæŠ½å‡ºã•れãªã„å ´åˆ +- `main_content` セレクタを確èªã—ã¦ãã ã•ã„ +- 試ã—ã¦ã¿ã¦ãã ã•ã„:`article`ã€`main`ã€`div[role="main"]` + +### データã¯ã‚ã‚‹ã®ã«ä½¿ç”¨ã•れãªã„å ´åˆ +```bash +# 強制å†ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ— +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### カテゴリ分類ãŒä¸é©åˆ‡ãªå ´åˆ +設定㮠`categories` セクションをよりé©åˆ‡ãªã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ç·¨é›†ã—ã¦ãã ã•ã„。 + +### ドキュメントを更新ã—ãŸã„å ´åˆ +```bash +# å¤ã„データを削除ã—ã¦å†ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ— +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### 強化ãŒå‹•作ã—ãªã„å ´åˆ +```bash +# API キーãŒè¨­å®šã•れã¦ã„ã‚‹ã‹ç¢ºèª +echo $ANTHROPIC_API_KEY + +# LOCAL モードを試ã™ï¼ˆClaude Code Max を使用ã€API キーä¸è¦ï¼‰ +skill-seekers enhance output/react/ --mode LOCAL + +# ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰å¼·åŒ–ã®çŠ¶æ…‹ã‚’ç›£è¦– +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub レート制é™ã®å•題? +```bash +# GitHub トークンを設定(匿å 60 回/時間 → 5000 回/時間) +export GITHUB_TOKEN=ghp_your_token_here + +# ã¾ãŸã¯è¤‡æ•°ã®ãƒ—ロファイルを設定 +skill-seekers config --github +``` + +--- + +## 📈 パフォーマンス + +| タスク | 時間 | 備考 | +|-------|------|------| +| ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ãƒ³ã‚°ï¼ˆåŒæœŸï¼‰| 15〜45 分 | åˆå›žã®ã¿ã€ã‚¹ãƒ¬ãƒƒãƒ‰ãƒ™ãƒ¼ã‚¹ | +| スクレイピング(éžåŒæœŸï¼‰| 5〜15 分 | `--async` フラグ㧠2〜3 å€é«˜é€Ÿ | +| ビルド | 1〜3 分 | キャッシュã‹ã‚‰ã®é«˜é€Ÿãƒªãƒ“ルド | +| リビルド | 1 分未満 | `--skip-scrape` 使用時 | +| 強化(LOCAL)| 30〜60 ç§’ | Claude Code Max を使用 | +| 強化(API)| 20〜40 ç§’ | API キーãŒå¿…è¦ | +| 動画(字幕)| 1〜3 分 | YouTube/ローカルã€å­—幕ã®ã¿ | +| 動画(ビジュアル)| 5〜15 分 | + OCR フレーム抽出 | +| パッケージング | 5〜10 ç§’ | 最終 .zip ã®ä½œæˆ | + +--- + +## 🆕 v3.6.0 ã®æ–°æ©Ÿèƒ½ + +### ワークフロープリセット +`--preset` ã§åˆ†æžã®æ·±ã•を制御: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # 高速ã€è¡¨é¢ãƒ¬ãƒ™ãƒ« +skill-seekers create https://docs.react.dev/ --preset standard # ãƒãƒ©ãƒ³ã‚¹ï¼ˆãƒ‡ãƒ•ォルト) +skill-seekers create https://docs.react.dev/ --preset comprehensive # æ·±ãã€ç¶²ç¾…çš„ +``` + +### ライフサイクルフラグ +```bash +skill-seekers create https://docs.react.dev/ --dry-run # スクレイピングãªã—ã§ãƒ—レビュー +skill-seekers create https://docs.react.dev/ --fresh # キャッシュを無視ã—ã¦å®Œå…¨ã«å†ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング +skill-seekers create https://docs.react.dev/ --resume # 中断ã—ãŸã‚¸ãƒ§ãƒ–ã‚’å†é–‹ +skill-seekers create https://docs.react.dev/ --skip-scrape # 既存ã®å‡ºåŠ›ã‚’å†ãƒ‘ッケージング +``` + +### ヘルスãƒã‚§ãƒƒã‚¯ã¨ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ +```bash +skill-seekers doctor # インストールã¨ç’°å¢ƒã®è¨ºæ–­ +skill-seekers sync-config # 設定ã®ãƒ‰ãƒªãƒ•ト検出 +skill-seekers stream # å¤§è¦æ¨¡ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°å–り込㿠+skill-seekers update output/react/ # 増分更新 +skill-seekers multilang # å¤šè¨€èªžã‚¹ã‚­ãƒ«ç”Ÿæˆ +skill-seekers quality output/react/ # å“質レãƒãƒ¼ãƒˆï¼ˆ--threshold 7 ã§ã‚²ãƒ¼ãƒˆåŒ–: 7/10 未満ãªã‚‰éžã‚¼ãƒ­çµ‚了) +``` + +### RAG ãƒãƒ£ãƒ³ã‚­ãƒ³ã‚°ã‚ªãƒ—ション(パッケージング) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### マーケットプレイス公開 +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### 追加ã®ã‚ªãƒ—ションä¾å­˜é–¢ä¿‚ +| Extra | インストール | 用途 | +|-------|---------|---------| +| `browser` | `pip install "skill-seekers[browser]"` | SPA サイトå‘ã‘ヘッドレス Playwright | +| `embedding` | `pip install "skill-seekers[embedding]"` | エンベディングサーãƒãƒ¼ã‚µãƒãƒ¼ãƒˆ | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` ãªã© | クラウドストレージアップロード | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | ベクトル DB アップロードä¾å­˜é–¢ä¿‚ä¸€å¼ | + +--- + +## 📚 ドキュメント + +### ã¯ã˜ã‚ã« +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **åˆã‚ã¦ã®æ–¹ã¯ã“ã¡ã‚‰ã‹ã‚‰ï¼** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - 経験者å‘ã‘クイックスタート +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - よãã‚ã‚‹å•題ã¨è§£æ±ºç­– +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - 1 ページãƒãƒ¼ãƒˆã‚·ãƒ¼ãƒˆ + +### アーキテクãƒãƒ£ +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - 14 ã®å›³ã«ã‚ˆã‚‹ UML アーキテクãƒãƒ£æ¦‚è¦ +- **[docs/UML/exports/](docs/UML/exports/)** - PNG 図エクスãƒãƒ¼ãƒˆï¼ˆãƒ‘ãƒƒã‚±ãƒ¼ã‚¸æ¦‚è¦ + 13 ã®ã‚¯ãƒ©ã‚¹å›³ï¼‰ +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - 完全㪠HTML API ãƒªãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ï¼ˆå…¨ã‚¯ãƒ©ã‚¹ã€æ“作ã€å±žæ€§ï¼‰ +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML プロジェクトファイル([StarUML](https://staruml.io/) ã§é–‹ã) + +### ガイド +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - 10K〜40K 以上ã®ãƒšãƒ¼ã‚¸ã®å‡¦ç† +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI 強化モードガイド +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP çµ±åˆã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - マルãƒã‚½ãƒ¼ã‚¹ã‚¹ã‚¯ãƒ¬ã‚¤ãƒ”ング +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - 動画抽出完全ガイド + +### çµ±åˆã‚¬ã‚¤ãƒ‰ +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline(VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - ã™ã¹ã¦ã® RAG パイプライン + +--- + +## 📠ライセンス + +MIT ライセンス - 詳細㯠[LICENSE](LICENSE) ファイルをå‚ç…§ã—ã¦ãã ã•ã„ + +--- + +ã‚¹ã‚­ãƒ«æ§‹ç¯‰ã‚’ãŠæ¥½ã—ã¿ãã ã•ã„ï¼ ðŸš€ + +--- + +## 🔒 セキュリティ + +[![MseeP.ai セキュリティ評価ãƒãƒƒã‚¸](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 スãƒãƒ³ã‚µãƒ¼ + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — フルモーダル㧠OpenAI 互æ›ã® AI 推論プラットフォーム。Skill Seekers 㯠`--target atlas` 㨠`ATLAS_API_KEY` ã«ã‚ˆã‚‹ãƒ‘ッケージング/強化ターゲットã¨ã—ã¦ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ diff --git a/README.ko.md b/README.ko.md new file mode 100644 index 0000000..22e255e --- /dev/null +++ b/README.ko.md @@ -0,0 +1,1376 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | 한국어 | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **기계 번역 안내** +> +> ì´ ë¬¸ì„œëŠ” AIì— ì˜í•´ ìžë™ 번역ë˜ì—ˆìŠµë‹ˆë‹¤. 번역 품질 í–¥ìƒì„ 위해 노력하고 있으나 부정확한 í‘œí˜„ì´ í¬í•¨ë  수 있습니다. +> +> 번역 ê°œì„ ì— ë„ì›€ì„ ì£¼ì‹œë ¤ë©´ [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260)ì— ì°¸ì—¬í•´ 주세요! ì—¬ëŸ¬ë¶„ì˜ í”¼ë“œë°±ì€ ë§¤ìš° 소중합니다. + +[![버전](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![ë¼ì´ì„ ìФ: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP 통합](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![테스트 통과](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![프로ì íЏ 보드](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI 버전](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - 다운로드](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python 버전](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![ê³µì‹ ì›¹ì‚¬ì´íЏ](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter 팔로우](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 AI ì‹œìŠ¤í…œì„ ìœ„í•œ ë°ì´í„° ë ˆì´ì–´.** Skill Seekers는 문서 사ì´íЏ, GitHub 저장소, PDF, ë™ì˜ìƒ, 노트ë¶, 위키 등 18가지 소스 ìœ í˜•ì„ êµ¬ì¡°í™”ëœ ì§€ì‹ ìžì‚°ìœ¼ë¡œ 변환합니다. 몇 ì‹œê°„ì´ ì•„ë‹ˆë¼ ëª‡ ë¶„ ë§Œì— AI 스킬(Claude, Gemini, OpenAI), RAG 파ì´í”„ë¼ì¸(LangChain, LlamaIndex, Pinecone), AI 코딩 어시스턴트(Cursor, Windsurf, Cline)ì— í™œìš©í•  수 있습니다. + +> 🌠**[SkillSeekersWeb.com 방문하기](https://skillseekersweb.com/)** - 24ê°œ ì´ìƒì˜ 프리셋 ì„¤ì •ì„ ë‘˜ëŸ¬ë³´ê³ , ì„¤ì •ì„ ê³µìœ í•˜ê³ , ì „ì²´ ë¬¸ì„œì— ì ‘ê·¼í•˜ì„¸ìš”! + +> 📋 **[개발 로드맵 ë° ìž‘ì—… 보기](https://github.com/users/yusufkaraaslan/projects/2)** - 10ê°œ ì¹´í…Œê³ ë¦¬ì— ê±¸ì¹œ 134ê°œ 작업, ì›í•˜ëŠ” ê²ƒì„ ì„ íƒí•˜ì—¬ 기여하세요! + +## 🌠ì—코시스템 + +Skill Seekers는 다중 저장소 프로ì íŠ¸ìž…ë‹ˆë‹¤. ê° ì €ìž¥ì†Œì˜ ì—­í• : + +| 저장소 | 설명 | ë§í¬ | +|--------|------|------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | 핵심 CLI & MCP 서버 (ì´ ì €ìž¥ì†Œ) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | 웹사ì´íЏ & 문서 | [사ì´íЏ](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | 커뮤니티 설정 저장소 | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code í”ŒëŸ¬ê·¸ì¸ | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | macOS Homebrew tap | | + +> **기여하고 싶으신가요?** 웹사ì´íŠ¸ì™€ 설정 저장소는 새 기여ìžì—게 ì¢‹ì€ ì‹œìž‘ì ìž…니다! + +## 🧠 AI ì‹œìŠ¤í…œì„ ìœ„í•œ ë°ì´í„° ë ˆì´ì–´ + +**Skill Seekers는 범용 전처리 ë ˆì´ì–´**로, ì›ì‹œ 문서와 ì´ë¥¼ 활용하는 모든 AI 시스템 사ì´ì— 위치합니다. Claude ìŠ¤í‚¬ì„ êµ¬ì¶•í•˜ë“ , LangChain RAG 파ì´í”„ë¼ì¸ì„ 만들든, Cursor `.cursorrules` 파ì¼ì„ 작성하든 — ë°ì´í„° 준비 ìž‘ì—…ì€ ë™ì¼í•©ë‹ˆë‹¤. 한 번만 수행하면 모든 ëŒ€ìƒ í”Œëž«í¼ìœ¼ë¡œ 내보낼 수 있습니다. + +```bash +# 한 줄 명령 → êµ¬ì¡°í™”ëœ ì§€ì‹ ìžì‚° +skill-seekers create https://docs.react.dev/ +# ë˜ëŠ”: skill-seekers create facebook/react +# ë˜ëŠ”: skill-seekers create ./my-project + +# 모든 AI 시스템으로 내보내기 +skill-seekers package output/react --target claude # → Claude AI 스킬 (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob 스킬 디렉터리 +``` + +### ìƒì„±ë˜ëŠ” 출력물 + +| 출력 | ëŒ€ìƒ | 활용 분야 | +|------|------|----------| +| **Claude 스킬** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini 스킬** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, 커스텀 어시스턴트 | +| **LangChain Documents** | `--target langchain` | QA ì²´ì¸, ì—ì´ì „트, 리트리버 | +| **LlamaIndex TextNodes** | `--target llama-index` | 쿼리 엔진, 대화 엔진 | +| **Haystack Documents** | `--target haystack` | 엔터프ë¼ì´ì¦ˆ RAG 파ì´í”„ë¼ì¸ | +| **Pinecone 준비 완료** (Markdown) | `--target markdown` | 벡터 업서트 | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | 로컬 벡터 ë°ì´í„°ë² ì´ìФ | +| **IBM Bob 스킬** (디렉터리) | `--target ibm-bob` | IBM Bob 프로ì íЏ/ì „ì—­ 스킬 | +| **Cursor** `.cursorrules` | `--target markdown` → SKILL.md 복사 | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → 복사 | VS Code, IntelliJ, Vim | + +### Skill Seekers를 ì„ íƒí•´ì•¼ 하는 ì´ìœ  + +- âš¡ **99% ë” ë¹ ë¦„** — ìˆ˜ì¼ ê°„ì˜ ìˆ˜ë™ ë°ì´í„° 준비 → 15–45ë¶„ +- 🎯 **AI 스킬 품질** — 예제, 패턴, ê°€ì´ë“œë¥¼ í¬í•¨í•œ 500줄 ì´ìƒì˜ SKILL.md íŒŒì¼ +- 📊 **RAG 준비 완료 청킹** — 코드 블ë¡ì„ 보존하고 컨í…스트를 유지하는 스마트 청킹 +- 🎬 **ë™ì˜ìƒ** — YouTube ë° ë¡œì»¬ ë™ì˜ìƒì—서 코드, ìžë§‰, êµ¬ì¡°í™”ëœ ì§€ì‹ ì¶”ì¶œ +- 🔄 **다중 소스** — 18가지 소스 유형(문서, GitHub, PDF, ë™ì˜ìƒ, 노트ë¶, 위키 등)ì„ í•˜ë‚˜ì˜ ì§€ì‹ ìžì‚°ìœ¼ë¡œ ê²°í•© +- 🌠**한 번 준비, 모든 대ìƒìœ¼ë¡œ 내보내기** — 재스í¬ëž˜í•‘ ì—†ì´ ë™ì¼í•œ ìžì‚°ì„ 21ê°œ 플랫í¼ìœ¼ë¡œ 내보내기 +- ✅ **실전 ê²€ì¦ ì™„ë£Œ** — 3,700+ 테스트, 24+ í”„ë ˆìž„ì›Œí¬ í”„ë¦¬ì…‹, 프로ë•ì…˜ 준비 완료 + +## 🚀 빠른 시작 (3가지 명령어) + +```bash +# 1. 설치 +pip install skill-seekers + +# 2. 모든 소스ì—서 스킬 ìƒì„± +skill-seekers create https://docs.django.com/ + +# 3. AI 플랫í¼ìš©ìœ¼ë¡œ 패키징 +skill-seekers package output/django --target claude +``` + +**ì´ê²Œ 전부입니다!** 바로 사용할 수 있는 `output/django-claude.zip`ì´ ìƒì„±ë©ë‹ˆë‹¤. + +```bash +# ê°•í™”ì— ë‹¤ë¥¸ AI ì—ì´ì „트 사용 (기본값: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI 기반 프로ì íЏ 스캔 (ì‹ ê·œ) + +ìž„ì˜ì˜ 프로ì íŠ¸ì— `scan`ì„ ì‹¤í–‰í•˜ë©´ AI ì—ì´ì „트가 매니페스트, README, Dockerfile/CI, 샘플ë§ëœ 소스 import를 ì½ê³  — ê°ì§€ëœ 프레임워í¬ë³„ 설정 파ì¼ê³¼ ìžì‹ ì˜ 코드를 위한 `-codebase.json`ì„ ìƒì„±í•©ë‹ˆë‹¤. ê°ì§€ëœ ë²„ì „ì„ ê³ ì •í•˜ë¯€ë¡œ 재실행 시 버전 ë³€ê²½ì´ ë³´ê³ ë©ë‹ˆë‹¤: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# ì´í›„ ì›í•˜ëŠ” ê²ƒì„ ë¹Œë“œ +skill-seekers create ./configs/scanned/react.json +``` + +ê°ì§€ ê²°ê³¼ì— ê¸°ì¡´ í”„ë¦¬ì…‹ì´ ì—†ìœ¼ë©´ AIê°€ 새 ì„¤ì •ì„ ìƒì„±í•©ë‹ˆë‹¤. 종료 시 [커뮤니티 레지스트리](https://github.com/yusufkaraaslan/skill-seekers-configs)ì— ì„ íƒì ìœ¼ë¡œ 게시할 수 있습니다. + +### 기타 소스 (18가지 ì§€ì›) + +```bash +# GitHub 저장소 +skill-seekers create facebook/react + +# 로컬 프로ì íЏ +skill-seekers create ./my-project + +# PDF 문서 +skill-seekers create manual.pdf + +# Word 문서 +skill-seekers create report.docx + +# EPUB ì „ìžì±… +skill-seekers create book.epub + +# Jupyter ë…¸íŠ¸ë¶ +skill-seekers create notebook.ipynb + +# OpenAPI 스펙 +skill-seekers create openapi.yaml + +# PowerPoint 프레젠테ì´ì…˜ +skill-seekers create presentation.pptx + +# AsciiDoc 문서 +skill-seekers create guide.adoc + +# 로컬 HTML íŒŒì¼ (확장ìžë¡œ ìžë™ ê°ì§€) +skill-seekers create page.html + +# HTML íŒŒì¼ ë””ë ‰í„°ë¦¬ ì „ì²´ (HTML 위주 디렉터리 ìžë™ ê°ì§€) +skill-seekers create ./mirror_output/site/ + +# 코드가 ì„žì¸ ë””ë ‰í„°ë¦¬ì—서 HTML 모드 ê°•ì œ +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom 피드 +skill-seekers create feed.rss + +# Man 페ì´ì§€ +skill-seekers create curl.1 + +# ë™ì˜ìƒ (YouTube, Vimeo ë˜ëŠ” 로컬 íŒŒì¼ â€” skill-seekers[video] í•„ìš”) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# ì²˜ìŒ ì‚¬ìš©í•˜ì‹œë‚˜ìš”? GPU ì¸ì‹ ì‹œê° ì¢…ì†ì„± ìžë™ 설치: +skill-seekers create --setup + +# Confluence 위키 +skill-seekers create --space-key TEAM --name wiki + +# Notion 페ì´ì§€ +skill-seekers create --database-id ... --name docs + +# Slack/Discord 채팅 내보내기 +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### 어디로든 내보내기 + +```bash +# 여러 플랫í¼ìš©ìœ¼ë¡œ 패키징 +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Skill Seekers란? + +Skill Seekers는 **AI ì‹œìŠ¤í…œì„ ìœ„í•œ ë°ì´í„° ë ˆì´ì–´**로, 18가지 소스 유형 — 문서 사ì´íЏ, GitHub 저장소, PDF, ë™ì˜ìƒ, Jupyter 노트ë¶, Word/EPUB/AsciiDoc 문서, OpenAPI 스펙, PowerPoint 프레젠테ì´ì…˜, RSS 피드, Man 페ì´ì§€, Confluence 위키, Notion 페ì´ì§€, Slack/Discord 내보내기 등 — ì„ ëª¨ë“  AI 대ìƒì— ì í•©í•œ êµ¬ì¡°í™”ëœ ì§€ì‹ ìžì‚°ìœ¼ë¡œ 변환합니다: + +| 사용 사례 | ì–»ì„ ìˆ˜ 있는 것 | 예시 | +|----------|---------------|------| +| **AI 스킬** | 완전한 SKILL.md + 참조 íŒŒì¼ | Claude Code, Gemini, GPT | +| **RAG 파ì´í”„ë¼ì¸** | í’부한 메타ë°ì´í„°ë¥¼ í¬í•¨í•œ ì²­í¬ ë¬¸ì„œ | LangChain, LlamaIndex, Haystack | +| **벡터 ë°ì´í„°ë² ì´ìФ** | 업서트 준비 ì™„ë£Œëœ ì‚¬ì „ í¬ë§· ë°ì´í„° | Pinecone, Chroma, Weaviate, FAISS | +| **AI 코딩 어시스턴트** | IDE AIê°€ ìžë™ìœ¼ë¡œ ì½ëŠ” 컨í…스트 íŒŒì¼ | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 문서 + +| ì›í•˜ëŠ” 작업 | ì½ì„ 문서 | +|--------------|-----------| +| **빠르게 시작하기** | [빠른 시작](docs/getting-started/02-quick-start.md) - 3가지 명령어로 첫 스킬 만들기 | +| **ê°œë… ì´í•´í•˜ê¸°** | [핵심 ê°œë…](docs/user-guide/01-core-concepts.md) - ìž‘ë™ ì›ë¦¬ | +| **소스 스í¬ëž˜í•‘** | [스í¬ëž˜í•‘ ê°€ì´ë“œ](docs/user-guide/02-scraping.md) - 모든 소스 유형 | +| **스킬 ê°•í™”** | [ê°•í™” ê°€ì´ë“œ](docs/user-guide/03-enhancement.md) - AI ê°•í™” | +| **스킬 내보내기** | [패키징 ê°€ì´ë“œ](docs/user-guide/04-packaging.md) - í”Œëž«í¼ ë‚´ë³´ë‚´ê¸° | +| **명령어 찾아보기** | [CLI ë ˆí¼ëŸ°ìФ](docs/reference/CLI_REFERENCE.md) - ì „ì²´ 20ê°œ 명령어 | +| **설정하기** | [설정 형ì‹](docs/reference/CONFIG_FORMAT.md) - JSON 명세 | +| **문제 í•´ê²°** | [문제 í•´ê²°](docs/user-guide/06-troubleshooting.md) - ì¼ë°˜ì ì¸ 문제 | + +**ì „ì²´ 문서:** [docs/README.md](docs/README.md) + +Skill Seekers는 수ì¼ê°„ì˜ ìˆ˜ë™ ì „ì²˜ë¦¬ ìž‘ì—…ì„ ëŒ€ì²´í•©ë‹ˆë‹¤: + +1. **수집** — 문서, GitHub 저장소, 로컬 코드베ì´ìФ, PDF, ë™ì˜ìƒ, 노트ë¶, 위키 등 10가지 ì´ìƒì˜ 소스 유형 +2. **ë¶„ì„** — 심층 AST 파싱, 패턴 ê°ì§€, API 추출 +3. **구조화** — 메타ë°ì´í„°ê°€ í¬í•¨ëœ ë¶„ë¥˜ëœ ì°¸ì¡° íŒŒì¼ +4. **ê°•í™”** — AI 기반 SKILL.md ìƒì„± (Claude, Gemini ë˜ëŠ” 로컬) +5. **내보내기** — í•˜ë‚˜ì˜ ìžì‚°ì—서 16ê°œ í”Œëž«í¼ ì „ìš© 형ì‹ìœ¼ë¡œ 내보내기 + +## 왜 Skill Seekers를 사용해야 하나요? + +### AI 스킬 빌ë”를 위해 (Claude, Gemini, OpenAI) + +- 🎯 **프로ë•션급 스킬** — 코드 예제, 패턴, ê°€ì´ë“œë¥¼ í¬í•¨í•œ 500줄 ì´ìƒì˜ SKILL.md íŒŒì¼ +- 🔄 **ê°•í™” 워í¬í”Œë¡œ** — `security-focus`, `architecture-comprehensive` ë˜ëŠ” 커스텀 YAML 프리셋 ì ìš© +- 🎮 **모든 ë„ë©”ì¸** — 게임 엔진(Godot, Unity), 프레임워í¬(React, Django), ë‚´ë¶€ ë„구 +- 🔧 **팀 협업** — ë‚´ë¶€ 문서 + 코드를 ë‹¨ì¼ ì§„ì‹¤ 공급ì›ìœ¼ë¡œ 통합 +- 📚 **고품질** — 예제, 빠른 참조, 내비게ì´ì…˜ ê°€ì´ë“œë¥¼ í¬í•¨í•œ AI ê°•í™” + +### RAG ë¹Œë” ë° AI 엔지니어를 위해 + +- 🤖 **RAG 준비 완료 ë°ì´í„°** — 사전 ì²­í‚¹ëœ LangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- 🚀 **99% ë” ë¹ ë¦„** — 수ì¼ê°„ì˜ ì „ì²˜ë¦¬ → 15–45ë¶„ +- 📊 **스마트 메타ë°ì´í„°** — 카테고리, 소스, 유형 → ë” ë†’ì€ ê²€ìƒ‰ ì •í™•ë„ +- 🔄 **다중 소스** — í•˜ë‚˜ì˜ íŒŒì´í”„ë¼ì¸ì—서 문서 + GitHub + PDF + ë™ì˜ìƒ ê²°í•© +- 🌠**í”Œëž«í¼ ë…립ì ** — 재스í¬ëž˜í•‘ ì—†ì´ ëª¨ë“  벡터 DB나 프레임워í¬ë¡œ 내보내기 + +### AI 코딩 어시스턴트 사용ìžë¥¼ 위해 + +- 💻 **Cursor / Windsurf / Cline** — `.cursorrules` / `.windsurfrules` / `.clinerules` ìžë™ ìƒì„± +- 🎯 **ì˜êµ¬ì  컨í…스트** — 반복 프롬프팅 ì—†ì´ AIê°€ 프레임워í¬ë¥¼ "ì´í•´" +- 📚 **í•­ìƒ ìµœì‹ ** — 문서 변경 시 몇 ë¶„ ë§Œì— ì»¨í…스트 ì—…ë°ì´íЏ + +## 핵심 기능 + +### 🌠문서 스í¬ëž˜í•‘ +- ✅ **스마트 SPA 디스커버리** - JavaScript SPA 사ì´íŠ¸ë¥¼ 위한 3계층 디스커버리 (sitemap.xml → llms.txt → 헤드리스 브ë¼ìš°ì € ë Œë”ë§) +- ✅ **llms.txt ì§€ì›** - LLM 준비 완료 문서 íŒŒì¼ ìžë™ ê°ì§€ ë° ì‚¬ìš© (10ë°° 빠름) +- ✅ **범용 스í¬ëž˜í¼** - 모든 문서 사ì´íЏì—서 ìž‘ë™ +- ✅ **스마트 분류** - 주제별 ìžë™ 콘í…츠 정리 +- ✅ **코드 언어 ê°ì§€** - Python, JavaScript, C++, GDScript 등 ì¸ì‹ +- ✅ **24+ 즉시 사용 가능 프리셋** - Godot, React, Vue, Django, FastAPI 등 + +### 📄 PDF ì§€ì› +- ✅ **기본 PDF 추출** - PDFì—서 í…스트, 코드, ì´ë¯¸ì§€ 추출 +- ✅ **스캔 PDF OCR** - 스캔 문서ì—서 í…스트 추출 +- ✅ **비밀번호 보호 PDF** - ì•”í˜¸í™”ëœ PDF 처리 +- ✅ **표 추출** - 복잡한 표 추출 +- ✅ **병렬 처리** - 대용량 PDF 3ë°° 빠른 처리 +- ✅ **지능형 ìºì‹±** - 재실행 시 50% 빠름 + +### 🎬 ë™ì˜ìƒ 추출 +- ✅ **YouTube ë° ë¡œì»¬ ë™ì˜ìƒ** - ë™ì˜ìƒì—서 ìžë§‰, 화면 ì† ì½”ë“œ, êµ¬ì¡°í™”ëœ ì§€ì‹ ì¶”ì¶œ +- ✅ **ì‹œê° í”„ë ˆìž„ ë¶„ì„** - 코드 편집기, 터미ë„, 슬ë¼ì´ë“œ, 다ì´ì–´ê·¸ëž¨ì˜ OCR 추출 +- ✅ **GPU ìžë™ ê°ì§€** - 올바른 PyTorch 빌드 ìžë™ 설치 (CUDA/ROCm/MPS/CPU) +- ✅ **AI ê°•í™”** - 2단계: OCR 정리 + ì™„ì„±ë„ ë†’ì€ SKILL.md ìƒì„± +- ✅ **시간 í´ë¦¬í•‘** - `--start-time`ê³¼ `--end-time`으로 특정 구간 추출 +- ✅ **ìž¬ìƒ ëª©ë¡ ì§€ì›** - YouTube ìž¬ìƒ ëª©ë¡ì˜ 모든 ë™ì˜ìƒ ì¼ê´„ 처리 +- ✅ **Vision API í´ë°±** - ë‚®ì€ ì‹ ë¢°ë„ OCR í”„ë ˆìž„ì— Claude Vision 사용 + +### 🙠GitHub 저장소 ë¶„ì„ +- ✅ **심층 코드 ë¶„ì„** - Python, JavaScript, TypeScript, Java, C++, Go AST 파싱 +- ✅ **API 추출** - 함수, í´ëž˜ìФ, ë©”ì„œë“œì˜ ë§¤ê°œë³€ìˆ˜ ë° íƒ€ìž… +- ✅ **저장소 메타ë°ì´í„°** - README, íŒŒì¼ íŠ¸ë¦¬, 언어 통계, 스타/í¬í¬ 수 +- ✅ **GitHub Issues ë° PR** - ë¼ë²¨ê³¼ 마ì¼ìŠ¤í†¤ì´ í¬í•¨ëœ ì´ìŠˆ 가져오기 +- ✅ **CHANGELOG ë° ë¦´ë¦¬ìŠ¤** - 버전 히스토리 ìžë™ 추출 +- ✅ **ì¶©ëŒ ê°ì§€** - ë¬¸ì„œí™”ëœ API와 실제 코드 구현 ë¹„êµ +- ✅ **MCP 통합** - ìžì—°ì–´: "GitHub 저장소 facebook/react 스í¬ëž˜í•‘" + +### 🔄 통합 다중 소스 스í¬ëž˜í•‘ +- ✅ **다중 소스 ê²°í•©** - í•˜ë‚˜ì˜ ìŠ¤í‚¬ì—서 문서 + GitHub + PDF 혼합 +- ✅ **ì¶©ëŒ ê°ì§€** - 문서와 코드 ê°„ì˜ ë¶ˆì¼ì¹˜ ìžë™ 발견 +- ✅ **지능형 병합** - 규칙 기반 ë˜ëŠ” AI 기반 ì¶©ëŒ í•´ê²° +- ✅ **투명한 ë³´ê³ ** - âš ï¸ ê²½ê³ ê°€ í¬í•¨ëœ 나란히 ë¹„êµ +- ✅ **문서 ê°­ ë¶„ì„** - ì˜¤ëž˜ëœ ë¬¸ì„œì™€ 미문서화 기능 ì‹ë³„ +- ✅ **ë‹¨ì¼ ì§„ì‹¤ 공급ì›** - ì˜ë„(문서)와 현실(코드)ì„ ë™ì‹œì— 보여주는 í•˜ë‚˜ì˜ ìŠ¤í‚¬ +- ✅ **하위 호환** - 레거시 ë‹¨ì¼ ì†ŒìŠ¤ 설정 ê³„ì† ìž‘ë™ + +### 🤖 다중 LLM í”Œëž«í¼ ì§€ì› +- ✅ **12ê°œ LLM 플랫í¼** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, 범용 Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **범용 스í¬ëž˜í•‘** - ë™ì¼í•œ 문서가 모든 플랫í¼ì— ì ìš© +- ✅ **플랫í¼ë³„ 패키징** - ê° LLMì— ìµœì í™”ëœ í˜•ì‹ +- ✅ **ì›ì»¤ë§¨ë“œ 내보내기** - `--target` 플래그로 í”Œëž«í¼ ì„ íƒ +- ✅ **ì„ íƒì  종ì†ì„±** - 필요한 것만 설치 +- ✅ **100% 하위 호환** - 기존 Claude 워í¬í”Œë¡œ 변경 불필요 + +| í”Œëž«í¼ | í˜•ì‹ | 업로드 | ê°•í™” | API Key | 커스텀 엔드í¬ì¸íЏ | +|--------|------|--------|------|---------|-----------------| +| **Claude AI** | ZIP + YAML | ✅ ìžë™ | ✅ 예 | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ ìžë™ | ✅ 예 | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ ìžë™ | ✅ 예 | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ ìžë™ | ✅ 예 | MINIMAX_API_KEY | - | +| **범용 Markdown** | ZIP | âŒ ìˆ˜ë™ | ⌠아니오 | - | - | + +```bash +# Claude (기본값 - 변경 불필요!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# 범용 Markdown (범용 내보내기) +skill-seekers package output/react/ --target markdown +# Markdown 파ì¼ì€ ì–´ë–¤ LLMì—서든 ì§ì ‘ 사용 가능 +``` + +
+🔧 ìžì‹ ë§Œì˜ AI ì œê³µìž ì‚¬ìš© (OpenAI 호환 엔드í¬ì¸íЏ + 구ë…, Anthropic í¬ë ˆë”§ 불필요) + +ì„ íƒì  AI **ê°•í™”** 단계(`create`, `scan`, `enhance`ì—서 사용)ì—는 Anthropic 키가 **필요하지 않습니다**. 세 가지 방법으로 실행할 수 있습니다: + +**1. ì´ë¯¸ ê²°ì œ ì¤‘ì¸ êµ¬ë… ì‚¬ìš© — API í¬ë ˆë”§ 전혀 불필요 (LOCAL ì—ì´ì „트 모드)** + +Skill Seekers는 ì´ë¯¸ 로그ì¸ë˜ì–´ 있는 코딩 ì—ì´ì „트 CLI를 호출할 수 있어, 종량제 API í† í° ëŒ€ì‹  기존 요금제로 강화를 실행합니다: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → ChatGPT Plus 요금제 +skill-seekers create --agent claude # Claude Code → Claude Pro/Max 요금제 +``` + +ì§€ì›ë˜ëŠ” ì—ì´ì „트: `claude`, `codex`, `copilot`, `opencode`, `kimi`, `custom` +(`--agent custom`ì„ `--agent-cmd " ..."`와 조합하면 다른 ì–´ë–¤ ë„êµ¬ë„ ì‚¬ìš© 가능). + +**2. 모든 OpenAI 호환 ì œê³µìž (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM 등)** + +ì´ë“¤ì€ ëª¨ë‘ OpenAI 호환 `/v1` 엔드í¬ì¸íŠ¸ë¥¼ 제공합니다. 환경 변수 세 개만 설정하면 ë©ë‹ˆë‹¤ — Skill Seekersê°€ `OPENAI_API_KEY`를 ê°ì§€í•˜ê³ , OpenAI SDK는 `OPENAI_BASE_URL`ì„ ìžë™ìœ¼ë¡œ ì¸ì‹í•©ë‹ˆë‹¤: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # ì œê³µìž ì—”ë“œí¬ì¸íЏ (아래 표 참조) +export OPENAI_MODEL="" # 필수 — 기본값 gpt-4o는 다른 제공ìžì— 존재하지 않습니다 +skill-seekers create +``` + +| ì œê³µìž | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> ì œê³µìž ê°ì§€ëŠ” **첫 번째로** 발견ë˜ëŠ” API 키 환경 변수를 ì„ íƒí•©ë‹ˆë‹¤ (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). 특정 제공ìžë¥¼ 강제하려면 `SKILL_SEEKER_PROVIDER`를 설정하거나, 우선순위가 ë†’ì€ í‚¤ê°€ 설정ë˜ì–´ 있지 않ì€ì§€ 확ì¸í•˜ì„¸ìš”. + +**3. Claude 호환 엔드í¬ì¸íЏ (예: GLM, 프ë¡ì‹œ)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini(`GOOGLE_API_KEY`)와 Kimi/Moonshot(`MOONSHOT_API_KEY`)ë„ ê¸°ë³¸ì ìœ¼ë¡œ ì§€ì›ë©ë‹ˆë‹¤. 제공ìžë³„ ëª¨ë¸ ìž¬ì •ì˜ë¥¼ í¬í•¨í•œ ì „ì²´ 목ë¡ì€ **[환경 변수 ë ˆí¼ëŸ°ìФ](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)**를 참조하세요. + +
+ +**설치:** +```bash +# Gemini ì§€ì› ì„¤ì¹˜ +pip install skill-seekers[gemini] + +# OpenAI ì§€ì› ì„¤ì¹˜ +pip install skill-seekers[openai] + +# MiniMax ì§€ì› ì„¤ì¹˜ +pip install skill-seekers[minimax] + +# 모든 LLM í”Œëž«í¼ ì„¤ì¹˜ +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG í”„ë ˆìž„ì›Œí¬ í†µí•© + +- ✅ **LangChain Documents** - `page_content` + 메타ë°ì´í„°ê°€ í¬í•¨ëœ `Document` 형ì‹ìœ¼ë¡œ ì§ì ‘ 내보내기 + - ì í•©: QA ì²´ì¸, 리트리버, 벡터 스토어, ì—ì´ì „트 + - 예제: [LangChain RAG 파ì´í”„ë¼ì¸](examples/langchain-rag-pipeline/) + - ê°€ì´ë“œ: [LangChain 통합](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - 고유 ID + ìž„ë² ë”©ì´ í¬í•¨ëœ `TextNode` 형ì‹ìœ¼ë¡œ 내보내기 + - ì í•©: 쿼리 엔진, 대화 엔진, 스토리지 컨í…스트 + - 예제: [LlamaIndex 쿼리 엔진](examples/llama-index-query-engine/) + - ê°€ì´ë“œ: [LlamaIndex 통합](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone 준비 완료 형ì‹** - 벡터 ë°ì´í„°ë² ì´ìФ ì—…ì„œíŠ¸ì— ìµœì í™” + - ì í•©: 프로ë•ì…˜ 벡터 검색, 시맨틱 검색, 하ì´ë¸Œë¦¬ë“œ 검색 + - 예제: [Pinecone 업서트](examples/pinecone-upsert/) + - ê°€ì´ë“œ: [Pinecone 통합](docs/integrations/PINECONE.md) + +**빠른 내보내기:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (범용) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**ì „ì²´ RAG 파ì´í”„ë¼ì¸ ê°€ì´ë“œ:** [RAG 파ì´í”„ë¼ì¸ 문서](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI 코딩 어시스턴트 통합 + +모든 í”„ë ˆìž„ì›Œí¬ ë¬¸ì„œë¥¼ 4ê°œ ì´ìƒì˜ AI 어시스턴트를 위한 전문 코딩 컨í…스트로 변환합니다: + +- ✅ **Cursor IDE** - AI 기반 코드 ì œì•ˆì„ ìœ„í•œ `.cursorrules` ìƒì„± + - ì í•©: 프레임워í¬ë³„ 코드 ìƒì„±, ì¼ê´€ëœ 코딩 패턴 + - ì§€ì› ë„구: Cursor IDE (VS Code í¬í¬) + - ê°€ì´ë“œ: [Cursor 통합](docs/integrations/CURSOR.md) + - 예제: [Cursor React 스킬](examples/cursor-react-skill/) + +- ✅ **Windsurf** - `.windsurfrules`로 Windsurf AI 어시스턴트 컨í…스트 커스터마ì´ì§• + - ì í•©: IDE 네ì´í‹°ë¸Œ AI ì§€ì›, 플로우 기반 코딩 + - ì§€ì› ë„구: Codeiumì˜ Windsurf IDE + - ê°€ì´ë“œ: [Windsurf 통합](docs/integrations/WINDSURF.md) + - 예제: [Windsurf FastAPI 컨í…스트](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - VS Code ì—ì´ì „트를 위한 시스템 프롬프트 + MCP + - ì í•©: VS Codeì—ì„œì˜ ì—ì´ì „틱 코드 ìƒì„± + - ì§€ì› ë„구: VS Codeìš© Cline 확장 + - ê°€ì´ë“œ: [Cline 통합](docs/integrations/CLINE.md) + - 예제: [Cline Django 어시스턴트](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - IDEì— êµ¬ì• ë°›ì§€ 않는 AI 컨í…스트 서버 + - ì í•©: 멀티 IDE 환경(VS Code, JetBrains, Vim), 커스텀 LLM ì œê³µìž + - ì§€ì› ë„구: Continue.dev 플러그ì¸ì´ 있는 모든 IDE + - ê°€ì´ë“œ: [Continue 통합](docs/integrations/CONTINUE_DEV.md) + - 예제: [Continue 범용 컨í…스트](examples/continue-dev-universal/) + +**AI 코딩 ë„구를 위한 빠른 내보내기:** +```bash +# 모든 AI 코딩 ì–´ì‹œìŠ¤í„´íŠ¸ì— ì ìš© (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # ë˜ëŠ” --target markdown + +# 프로ì íŠ¸ì— ë³µì‚¬ (Cursor 예시) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# ë˜ëŠ” Windsurfìš© +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# ë˜ëŠ” Clineìš© +cp output/django-claude/SKILL.md my-project/.clinerules + +# ë˜ëŠ” Continue.devìš© (HTTP 서버) +python examples/continue-dev-universal/context_server.py +# ~/.continue/config.jsonì—서 설정 +``` + +**통합 허브:** [모든 AI 시스템 통합](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 3-스트림 GitHub 아키í…처 +- ✅ **3-스트림 ë¶„ì„** - GitHub 저장소를 코드, 문서, ì¸ì‚¬ì´íЏ 스트림으로 ë¶„í•  +- ✅ **통합 코드베ì´ìФ ë¶„ì„기** - GitHub URLê³¼ 로컬 경로 ëª¨ë‘ ì§€ì› +- ✅ **C3.x ë¶„ì„ ê¹Šì´** - 'basic' (1–2ë¶„) ë˜ëŠ” 'c3x' (20–60ë¶„) ë¶„ì„ ì„ íƒ +- ✅ **í–¥ìƒëœ ë¼ìš°í„° ìƒì„±** - GitHub 메타ë°ì´í„°, README 빠른 시작, ìžì£¼ ë°œìƒí•˜ëŠ” 문제 +- ✅ **Issue 통합** - GitHub Issuesì˜ ì£¼ìš” 문제 ë° í•´ê²°ì±… +- ✅ **스마트 ë¼ìš°íŒ… 키워드** - GitHub ë¼ë²¨ 가중치 2배로 주제 ê°ì§€ í–¥ìƒ + +**3-스트림 설명:** +- **스트림 1: 코드** - 심층 C3.x ë¶„ì„ (패턴, 예제, ê°€ì´ë“œ, 설정, 아키í…처) +- **스트림 2: 문서** - 저장소 문서 (README, CONTRIBUTING, docs/*.md) +- **스트림 3: ì¸ì‚¬ì´íЏ** - 커뮤니티 ì§€ì‹ (Issues, ë¼ë²¨, Stars, Forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# 3-스트림으로 GitHub 저장소 ë¶„ì„ +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # ë˜ëŠ” "basic"으로 빠른 ë¶„ì„ + fetch_github_metadata=True +) + +# 코드 스트림 ì ‘ê·¼ (C3.x ë¶„ì„) +print(f"ë””ìžì¸ 패턴: {len(result.code_analysis['c3_1_patterns'])}") +print(f"테스트 예제: {result.code_analysis['c3_2_examples_count']}") + +# 문서 스트림 ì ‘ê·¼ (저장소 문서) +print(f"README: {result.github_docs['readme'][:100]}") + +# ì¸ì‚¬ì´íЏ 스트림 ì ‘ê·¼ (GitHub 메타ë°ì´í„°) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"ì¼ë°˜ì ì¸ 문제: {len(result.github_insights['common_problems'])}") +``` + +**ì „ì²´ 문서**: [3-스트림 구현 요약](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠스마트 ì†ë„ 제한 관리 ë° ì„¤ì • +- ✅ **다중 í† í° ì„¤ì • 시스템** - 여러 GitHub 계정 관리 (ê°œì¸, 업무, 오픈소스) + - `~/.config/skill-seekers/config.json`ì— ë³´ì•ˆ 설정 저장 (권한 600) + - 프로필별 ì†ë„ 제한 ì „ëžµ: `prompt`, `wait`, `switch`, `fail` + - 프로필별 타임아웃 설정 (기본값: 30ë¶„, 무한 대기 ë°©ì§€) + - 스마트 í´ë°± ì²´ì¸: CLI ì¸ìž → 환경 변수 → 설정 íŒŒì¼ â†’ 프롬프트 + - Claude, Gemini, OpenAI를 위한 API Key 관리 +- ✅ **대화형 설정 마법사** - 아름다운 í„°ë¯¸ë„ UI로 쉬운 설정 + - í† í° ìƒì„±ì„ 위한 브ë¼ìš°ì € 통합 (GitHub ë“±ì„ ìžë™ìœ¼ë¡œ 열기) + - í† í° ìœ íš¨ì„± 검사 ë° ì—°ê²° 테스트 + - ìƒ‰ìƒ ì½”ë“œê°€ ì ìš©ëœ 시ê°ì  ìƒíƒœ 표시 +- ✅ **지능형 ì†ë„ 제한 핸들러** - ë” ì´ìƒ 무한 대기 ì—†ìŒ! + - ì†ë„ 제한(시간당 60회 vs 5000회)ì— ëŒ€í•œ 사전 경고 + - GitHub API ì‘답ì—서 실시간 ê°ì§€ + - ì§„í–‰ ìƒí™©ì´ 표시ë˜ëŠ” 실시간 카운트다운 타ì´ë¨¸ + - ì†ë„ 제한 시 ìžë™ 프로필 전환 + - 4가지 ì „ëžµ: prompt (질문), wait (카운트다운), switch (전환), fail (중단) +- ✅ **ì¤‘ë‹¨ì  ìž¬ê°œ** - ì¤‘ë‹¨ëœ ìž‘ì—… 계ì†í•˜ê¸° + - 설정 가능한 간격으로 ì§„í–‰ ìƒí™© ìžë™ 저장 (기본값: 60ì´ˆ) + - 재개 가능한 모든 ìž‘ì—…ì„ ì§„í–‰ ìƒí™©ê³¼ 함께 나열 + - ì˜¤ëž˜ëœ ìž‘ì—… ìžë™ 정리 (기본값: 7ì¼) +- ✅ **CI/CD ì§€ì›** - ìžë™í™”를 위한 비대화형 모드 + - `--non-interactive` 플래그로 프롬프트 ì—†ì´ ë¹ ë¥¸ 실패 + - `--profile` 플래그로 특정 GitHub 계정 ì„ íƒ + - 파ì´í”„ë¼ì¸ 로그를 위한 명확한 오류 메시지 + +**빠른 설정:** +```bash +# ì¼íšŒì„± 설정 (5ë¶„) +skill-seekers config --github + +# 프ë¼ì´ë¹— ì €ìž¥ì†Œì— íŠ¹ì • 프로필 사용 +skill-seekers create mycompany/private-repo --profile work + +# CI/CD 모드 (즉시 실패, 프롬프트 ì—†ìŒ) +skill-seekers create owner/repo --non-interactive + +# ì¤‘ë‹¨ëœ ìž‘ì—… 재개 +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**ì†ë„ 제한 ì „ëžµ 설명:** +- **prompt** (기본값) - ì†ë„ 제한 시 ë¬´ì—‡ì„ í• ì§€ 질문 (대기, 전환, í† í° ì„¤ì •, 취소) +- **wait** - 카운트다운 타ì´ë¨¸ì™€ 함께 ìžë™ 대기 (타임아웃 준수) +- **switch** - 사용 가능한 ë‹¤ìŒ í”„ë¡œí•„ ìžë™ ì‹œë„ (다중 계정 구성용) +- **fail** - 명확한 오류와 함께 즉시 실패 (CI/CDì— ìµœì ) + +### 🎯 부트스트랩 스킬 - 셀프 호스팅 + +skill-seekers ìžì²´ë¥¼ 스킬로 ìƒì„±í•˜ì—¬ AI ì—ì´ì „트(Claude Code, Kimi, Codex 등) ë‚´ì—서 사용할 수 있습니다: + +```bash +# 스킬 ìƒì„± +./scripts/bootstrap_skill.sh + +# Claude Codeì— ì„¤ì¹˜ +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**ì–»ì„ ìˆ˜ 있는 것:** +- ✅ **완전한 스킬 문서** - 모든 CLI 명령어와 사용 패턴 +- ✅ **CLI 명령어 ë ˆí¼ëŸ°ìФ** - 모든 ë„구와 옵션 문서화 +- ✅ **빠른 시작 예제** - ì¼ë°˜ì ì¸ 워í¬í”Œë¡œì™€ 모범 사례 +- ✅ **ìžë™ ìƒì„± API 문서** - 코드 ë¶„ì„, 패턴, 예제 + +### 🔠프ë¼ì´ë¹— 설정 저장소 +- ✅ **Git 기반 설정 소스** - 프ë¼ì´ë¹—/팀 Git 저장소ì—서 설정 가져오기 +- ✅ **다중 소스 관리** - 무제한 GitHub, GitLab, Bitbucket 저장소 ë“±ë¡ +- ✅ **팀 협업** - 3–5ì¸ íŒ€ ê°„ 커스텀 설정 공유 +- ✅ **엔터프ë¼ì´ì¦ˆ ì§€ì›** - 우선순위 기반 í•´ì„으로 500명 ì´ìƒì˜ 개발ìžê¹Œì§€ 확장 +- ✅ **보안 ì¸ì¦** - 환경 변수 í† í° (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **지능형 ìºì‹±** - 한 번 í´ë¡ í•˜ë©´ ì—…ë°ì´íŠ¸ëŠ” ìžë™ìœ¼ë¡œ 가져오기 +- ✅ **오프ë¼ì¸ 모드** - 오프ë¼ì¸ 시 ìºì‹œëœ 설정으로 작업 + +### 🤖 코드베ì´ìФ ë¶„ì„ (C3.x) + +**C3.4: 설정 패턴 추출 (AI ê°•í™” í¬í•¨)** +- ✅ **9가지 설정 형ì‹** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7가지 패턴 유형** - ë°ì´í„°ë² ì´ìФ, API, 로깅, ìºì‹œ, ì´ë©”ì¼, ì¸ì¦, 서버 설정 +- ✅ **AI ê°•í™”** - ì„ íƒì  듀얼 모드 AI ë¶„ì„ (API + LOCAL) + - ê° ì„¤ì •ì´ ë¬´ì—‡ì„ í•˜ëŠ”ì§€ 설명 + - 모범 사례와 개선 사항 제안 + - **보안 ë¶„ì„** - í•˜ë“œì½”ë”©ëœ ì‹œí¬ë¦¿ê³¼ ë…¸ì¶œëœ ìžê²© ì¦ëª… íƒì§€ +- ✅ **ìžë™ 문서화** - 모든 ì„¤ì •ì˜ JSON + Markdown 문서 ìƒì„± +- ✅ **MCP 통합** - ê°•í™” ì§€ì›ì´ í¬í•¨ëœ `extract_config_patterns` ë„구 + +**C3.3: AI ê°•í™” 사용 ê°€ì´ë“œ** +- ✅ **종합 AI ê°•í™”** - 기본 ê°€ì´ë“œë¥¼ 전문 튜토리얼로 변환 +- ✅ **5가지 ìžë™ 개선** - 단계 설명, 문제 í•´ê²°, ì „ì œ ì¡°ê±´, ë‹¤ìŒ ë‹¨ê³„, 사용 사례 +- ✅ **듀얼 모드 ì§€ì›** - API 모드 (Claude API) ë˜ëŠ” LOCAL 모드 (Claude Code CLI) +- ✅ **LOCAL 모드 무료** - Claude Code Max 플랜으로 무료 ê°•í™” +- ✅ **품질 변환** - 75줄 템플릿 → 500줄 ì´ìƒì˜ 종합 ê°€ì´ë“œ + +**사용법:** +```bash +# 빠른 ë¶„ì„ (1–2ë¶„, 기본 기능만) +skill-seekers scan tests/ --quick + +# 종합 ë¶„ì„ (AI í¬í•¨, 20–60ë¶„) +skill-seekers scan tests/ --comprehensive + +# AI ê°•í™” í¬í•¨ +skill-seekers scan tests/ --enhance +``` + +**ì „ì²´ 문서:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 ê°•í™” 워í¬í”Œë¡œ 프리셋 + +AIê°€ ì›ì‹œ 문서를 ì„¸ë ¨ëœ ìŠ¤í‚¬ë¡œ 변환하는 ë°©ë²•ì„ ì œì–´í•˜ëŠ” 재사용 가능한 YAML ì •ì˜ ê°•í™” 파ì´í”„ë¼ì¸ìž…니다. + +- ✅ **5ê°œ 내장 프리셋** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **ì‚¬ìš©ìž ì •ì˜ í”„ë¦¬ì…‹** — `~/.config/skill-seekers/workflows/`ì— ì»¤ìŠ¤í…€ 워í¬í”Œë¡œ 추가 +- ✅ **다중 워í¬í”Œë¡œ ì²´ì´ë‹** — í•˜ë‚˜ì˜ ëª…ë ¹ì—서 ë‘ ê°œ ì´ìƒì˜ 워í¬í”Œë¡œ ì²´ì´ë‹ +- ✅ **완전한 CLI 관리** — 목ë¡, 조회, 복사, 추가, ì‚­ì œ, 유효성 검사 + +```bash +# ë‹¨ì¼ ì›Œí¬í”Œë¡œ ì ìš© +skill-seekers create ./my-project --enhance-workflow security-focus + +# 다중 워í¬í”Œë¡œ ì²´ì´ë‹ (순서대로 ì ìš©) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# 프리셋 관리 +skill-seekers workflows list # 모든 항목 나열 (내장 + 사용ìž) +skill-seekers workflows show security-focus # YAML ë‚´ìš© 출력 +skill-seekers workflows copy security-focus # íŽ¸ì§‘ì„ ìœ„í•´ ì‚¬ìš©ìž ë””ë ‰í„°ë¦¬ì— ë³µì‚¬ +skill-seekers workflows add ./my-workflow.yaml # 커스텀 프리셋 설치 +skill-seekers workflows remove my-workflow # ì‚¬ìš©ìž í”„ë¦¬ì…‹ ì‚­ì œ +skill-seekers workflows validate security-focus # 프리셋 구조 유효성 검사 + +# 여러 ê°œ ë™ì‹œ 복사 +skill-seekers workflows copy security-focus minimal api-documentation + +# 여러 íŒŒì¼ ë™ì‹œ 추가 +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# 여러 ê°œ ë™ì‹œ ì‚­ì œ +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML 프리셋 형ì‹:** +```yaml +name: security-focus +description: "보안 중심 검토: 취약ì , ì¸ì¦, ë°ì´í„° 처리" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "OWASP Top 10 ë° ì¼ë°˜ì ì¸ 보안 ì·¨ì•½ì  ê²€í† ..." + - name: auth-review + type: custom + prompt: "ì¸ì¦ ë° ê¶Œí•œ 부여 패턴 검사..." + uses_history: true +``` + +### âš¡ 성능 ë° í™•ìž¥ì„± +- ✅ **비ë™ê¸° 모드** - async/await로 2–3ë°° 빠른 스í¬ëž˜í•‘ (`--async` 플래그 사용) +- ✅ **대규모 문서 ì§€ì›** - 지능형 분할로 10K–40K+ 페ì´ì§€ 문서 처리 +- ✅ **ë¼ìš°í„°/허브 스킬** - 전문 서브 ìŠ¤í‚¬ë¡œì˜ ì§€ëŠ¥í˜• ë¼ìš°íŒ… +- ✅ **병렬 스í¬ëž˜í•‘** - 여러 스킬 ë™ì‹œ 처리 +- ✅ **ì²´í¬í¬ì¸íЏ/재개** - 장시간 스í¬ëž˜í•‘ì—서 ì§„í–‰ ìƒí™© ì†ì‹¤ ë°©ì§€ +- ✅ **ìºì‹± 시스템** - 한 번 스í¬ëž˜í•‘, 즉시 재구축 + +### 🤖 ì—ì´ì „트 무관 스킬 ìƒì„± +- ✅ **다중 ì—ì´ì „트 ì§€ì›** - `--agent` 플래그로 Claude, Kimi, Codex, Copilot, OpenCode ë˜ëŠ” 모든 커스텀 ì—ì´ì „트용 스킬 ìƒì„± +- ✅ **커스텀 ì—ì´ì „트 명령어** - `--agent-cmd`로 ê°•í™”ì— ì‚¬ìš©í•  커스텀 ì—ì´ì „트 CLI 명령어 지정 +- ✅ **범용 플래그** - `--agent`와 `--agent-cmd`는 모든 명령어(create, scrape, github, pdf 등)ì—서 사용 가능 + +### 📦 마켓플레ì´ìФ 파ì´í”„ë¼ì¸ +- ✅ **마켓플레ì´ìŠ¤ì— ê²Œì‹œ** - Claude Code í”ŒëŸ¬ê·¸ì¸ ë§ˆì¼“í”Œë ˆì´ìФ ì €ìž¥ì†Œì— ìŠ¤í‚¬ 게시 +- ✅ **엔드투엔드 파ì´í”„ë¼ì¸** - 문서 소스ì—서 ê²Œì‹œëœ ë§ˆì¼“í”Œë ˆì´ìФ 항목까지 + +### ✅ 품질 ë³´ì¦ +- ✅ **완전한 테스트** - 3,700+ 테스트, í¬ê´„ì  ì»¤ë²„ë¦¬ì§€ + +--- + +## 📦 설치 + +```bash +# 기본 설치 (문서 스í¬ëž˜í•‘, GitHub ë¶„ì„, PDF, 패키징) +pip install skill-seekers + +# 모든 LLM í”Œëž«í¼ ì§€ì› í¬í•¨ +pip install skill-seekers[all-llms] + +# MCP 서버 í¬í•¨ +pip install skill-seekers[mcp] + +# ì „ì²´ 기능 +pip install skill-seekers[all] +``` + +**ì„ íƒì— ë„ì›€ì´ í•„ìš”í•˜ì‹ ê°€ìš”?** 설정 마법사를 실행하세요: +```bash +skill-seekers-setup +``` + +### 설치 옵션 + +| 설치 명령 | 기능 | +|----------|------| +| `pip install skill-seekers` | 스í¬ëž˜í•‘, GitHub ë¶„ì„, PDF, 모든 í”Œëž«í¼ | +| `pip install skill-seekers[gemini]` | + Google Gemini ì§€ì› | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT ì§€ì› | +| `pip install skill-seekers[all-llms]` | + 모든 LLM í”Œëž«í¼ | +| `pip install skill-seekers[mcp]` | + Claude Code, Cursor ë“±ì„ ìœ„í•œ MCP 서버 | +| `pip install skill-seekers[video]` | + YouTube/Vimeo ìžë§‰ ë° ë©”íƒ€ë°ì´í„° 추출 | +| `pip install skill-seekers[video-full]` | + Whisper 전사 ë° ì‹œê° í”„ë ˆìž„ 추출 | +| `pip install skill-seekers[jupyter]` | + Jupyter ë…¸íŠ¸ë¶ ì§€ì› | +| `pip install skill-seekers[pptx]` | + PowerPoint ì§€ì› | +| `pip install skill-seekers[confluence]` | + Confluence 위키 ì§€ì› | +| `pip install skill-seekers[notion]` | + Notion 페ì´ì§€ ì§€ì› | +| `pip install skill-seekers[rss]` | + RSS/Atom 피드 ì§€ì› | +| `pip install skill-seekers[chat]` | + Slack/Discord 채팅 내보내기 ì§€ì› | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc 문서 ì§€ì› | +| `pip install skill-seekers[all]` | 모든 기능 활성화 | + +> **ë™ì˜ìƒ ì‹œê° ì¢…ì†ì„± (GPU ì¸ì‹):** `skill-seekers[video-full]` 설치 후, +> `skill-seekers create --setup`ì„ ì‹¤í–‰í•˜ì—¬ GPU를 ìžë™ ê°ì§€í•˜ê³  올바른 PyTorch +> 빌드 + easyocrì„ ì„¤ì¹˜í•˜ì„¸ìš”. ì´ê²ƒì´ ì‹œê° ì¶”ì¶œ 종ì†ì„± ì„¤ì¹˜ì˜ ê¶Œìž¥ 방법입니다. + +--- + +## 🚀 ì›ì»¤ë§¨ë“œ 설치 워í¬í”Œë¡œ + +**설정ì—서 ì—…ë¡œë“œëœ ìŠ¤í‚¬ê¹Œì§€ 가장 빠른 방법 — 완전 ìžë™í™”:** + +```bash +# ê³µì‹ ì„¤ì •ì—서 React 스킬 설치 (Claudeì— ìžë™ 업로드) +skill-seekers install --config react + +# 로컬 설정 파ì¼ì—서 설치 +skill-seekers install --config configs/custom.json + +# 업로드 ì—†ì´ ì„¤ì¹˜ (패키징만) +skill-seekers install --config django --no-upload + +# 실행 ì—†ì´ ì›Œí¬í”Œë¡œ 미리보기 +skill-seekers install --config react --dry-run +``` + +**소요 시간:** ì´ 20–45ë¶„ | **품질:** 프로ë•ì…˜ 준비 완료 (9/10) | **비용:** 무료 + +**실행 단계:** +``` +📥 단계 1: 설정 가져오기 (설정 ì´ë¦„ì´ ì œê³µëœ ê²½ìš°) +📖 단계 2: 문서 스í¬ëž˜í•‘ +✨ 단계 3: AI ê°•í™” (필수 - 건너뛰기 불가) +📦 단계 4: 스킬 패키징 +â˜ï¸ 단계 5: Claudeì— ì—…ë¡œë“œ (ì„ íƒì‚¬í•­, API Key í•„ìš”) +``` + +**요구 사항:** +- ANTHROPIC_API_KEY 환경 변수 (ìžë™ 업로드용) +- Claude Code Max 플랜 (로컬 AI 강화용), ë˜ëŠ” `--agent`로 다른 AI ì—ì´ì „트 ì„ íƒ + +--- + +## 📊 기능 매트릭스 + +Skill Seekers는 **12ê°œ LLM 플랫í¼**, **8ê°œ RAG/벡터 대ìƒ**, **18가지 소스 유형**ì„ ì§€ì›í•˜ë©° 모든 대ìƒì—서 완전한 기능 ë™ë“±ì„±ì„ 제공합니다. + +**플랫í¼:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, 범용 Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**소스 유형:** 문서 사ì´íЏ, GitHub 저장소, PDF, Word (.docx), EPUB, ë™ì˜ìƒ, 로컬 코드베ì´ìФ, Jupyter 노트ë¶, 로컬 HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS/Atom 피드, Man 페ì´ì§€, Confluence 위키, Notion 페ì´ì§€, Slack/Discord 채팅 내보내기 + +ì „ì²´ ë‚´ìš©ì€ [ì „ì²´ 기능 매트릭스](docs/reference/FEATURE_MATRIX.md)를 참조하세요. + +### 빠른 í”Œëž«í¼ ë¹„êµ + +| 기능 | Claude | Gemini | OpenAI | MiniMax | Markdown | +|------|--------|--------|--------|---------|----------| +| í˜•ì‹ | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| 업로드 | ✅ API | ✅ API | ✅ API | ✅ API | âŒ ìˆ˜ë™ | +| ê°•í™” | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | âŒ ì—†ìŒ | +| 모든 스킬 모드 | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## 사용 예제 + +### 문서 스í¬ëž˜í•‘ + +```bash +# 문서 사ì´íЏ 스í¬ëž˜í•‘ +skill-seekers create --config configs/react.json + +# 설정 ì—†ì´ ë¹ ë¥¸ 스í¬ëž˜í•‘ +skill-seekers create https://react.dev --name react + +# 비ë™ê¸° 모드 (3ë°° 빠름) +skill-seekers create --config configs/godot.json --async --workers 8 + +# ê°•í™”ì— íŠ¹ì • AI ì—ì´ì „트 사용 +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF 추출 + +```bash +# 기본 PDF 추출 +skill-seekers create --pdf docs/manual.pdf --name myskill + +# 고급 기능 +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # 표 추출 + --parallel \ # 빠른 병렬 처리 + --workers 8 # 8ê°œ CPU 코어 사용 + +# 스캔 PDF (í•„ìš”: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### ë™ì˜ìƒ 추출 + +```bash +# ë™ì˜ìƒ ì§€ì› ì„¤ì¹˜ +pip install skill-seekers[video] # ìžë§‰ + 메타ë°ì´í„° +pip install skill-seekers[video-full] # + Whisper 전사 + ì‹œê° í”„ë ˆìž„ 추출 + +# GPU ìžë™ ê°ì§€ ë° ì‹œê° ì¢…ì†ì„± 설치 (PyTorch + easyocr) +skill-seekers create --setup + +# YouTube ë™ì˜ìƒì—서 추출 +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# YouTube ìž¬ìƒ ëª©ë¡ì—서 추출 +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# 로컬 ë™ì˜ìƒ 파ì¼ì—서 추출 +skill-seekers create --video-file recording.mp4 --name myrecording + +# ì‹œê° í”„ë ˆìž„ ë¶„ì„으로 추출 (video-full 종ì†ì„± í•„ìš”) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# AI ê°•í™” ì ìš© (OCR 정리 + ì™„ì„±ë„ ë†’ì€ SKILL.md ìƒì„±) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# ë™ì˜ìƒì˜ 특정 구간 í´ë¦¬í•‘ (ì´ˆ, MM:SS, HH:MM:SS í˜•ì‹ ì§€ì›) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# ë‚®ì€ ì‹ ë¢°ë„ OCR í”„ë ˆìž„ì— Vision API 사용 (ANTHROPIC_API_KEY í•„ìš”) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# ì´ì „ì— ì¶”ì¶œëœ ë°ì´í„°ì—서 스킬 재구축 (다운로드 건너뛰기) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **ì „ì²´ ê°€ì´ë“œ:** [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)ì—서 ì „ì²´ CLI ë ˆí¼ëŸ°ìФ, +> ì‹œê° íŒŒì´í”„ë¼ì¸ ìƒì„¸ ì •ë³´, AI ê°•í™” 옵션, 문제 í•´ê²°ì„ í™•ì¸í•˜ì„¸ìš”. + +### GitHub 저장소 ë¶„ì„ + +```bash +# 기본 저장소 스í¬ëž˜í•‘ +skill-seekers create facebook/react + +# ì¸ì¦ 설정 (ë” ë†’ì€ ì†ë„ 제한) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# í¬í•¨ ë‚´ìš© 커스터마ì´ì§• +skill-seekers create django/django \ + --include-issues \ # GitHub Issues 추출 + --max-issues 100 \ # Issue 수 제한 + --include-changelog # CHANGELOG.md 추출 +``` + +### 통합 다중 소스 스í¬ëž˜í•‘ + +**문서 + GitHub + PDF를 ì¶©ëŒ ê°ì§€ê°€ í¬í•¨ëœ í•˜ë‚˜ì˜ í†µí•© 스킬로 ê²°í•©:** + +```bash +# 기존 통합 설정 사용 +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# ë˜ëŠ” 통합 설정 ìƒì„± +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**ì¶©ëŒ ê°ì§€ê°€ ìžë™ìœ¼ë¡œ 발견하는 항목:** +- 🔴 **ì½”ë“œì— ëˆ„ë½** (높ìŒ): 문서화ë˜ì—ˆìœ¼ë‚˜ 미구현 +- 🟡 **ë¬¸ì„œì— ëˆ„ë½** (중간): 구현ë˜ì—ˆìœ¼ë‚˜ 미문서화 +- âš ï¸ **시그니처 불ì¼ì¹˜**: 매개변수/타입 ì°¨ì´ +- â„¹ï¸ **설명 불ì¼ì¹˜**: 설명 ì°¨ì´ + +**ì „ì²´ ê°€ì´ë“œ:** [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) 참조. + +### 프ë¼ì´ë¹— 설정 저장소 + +**프ë¼ì´ë¹— Git 저장소를 사용하여 팀 ê°„ 커스텀 설정 공유:** + +```bash +# 옵션 1: MCP ë„구 사용 (권장) +# 팀 프ë¼ì´ë¹— 저장소 ë“±ë¡ +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# 팀 저장소ì—서 설정 가져오기 +fetch_config(source="team", config_name="internal-api") +``` + +**ì§€ì› í”Œëž«í¼:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**ì „ì²´ ê°€ì´ë“œ:** [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) 참조. + +## ìž‘ë™ ì›ë¦¬ + +```mermaid +graph LR + A[문서 사ì´íЏ] --> B[Skill Seekers] + B --> C[스í¬ëž˜í¼] + B --> D[AI ê°•í™”] + B --> E[패키저] + C --> F[ì •ë¦¬ëœ ì°¸ì¡° 파ì¼] + D --> F + F --> E + E --> G[AI 스킬 .zip] + G --> H[AI 플랫í¼ì— 업로드] +``` + +0. **llms.txt ê°ì§€** - llms-full.txt, llms.txt, llms-small.txt를 ìš°ì„  í™•ì¸ (스마트 SPA ë””ìŠ¤ì»¤ë²„ë¦¬ì˜ ì¼ë¶€) +1. **스í¬ëž˜í•‘**: ë¬¸ì„œì˜ ëª¨ë“  페ì´ì§€ 추출 +2. **분류**: 콘í…츠를 주제별로 정리 (API, ê°€ì´ë“œ, 튜토리얼 등) +3. **ê°•í™”**: AIê°€ 문서를 ë¶„ì„하고 예제가 í¬í•¨ëœ 종합ì ì¸ SKILL.md ìƒì„± (`--agent`로 여러 ì—ì´ì „트 ì§€ì›) +4. **패키징**: 모든 ë‚´ìš©ì„ í”Œëž«í¼ ì¤€ë¹„ ì™„ë£Œëœ `.zip` 파ì¼ë¡œ ë²ˆë“¤ë§ + +## 아키í…처 + +ì‹œìŠ¤í…œì€ **8ê°œ 핵심 모듈**ê³¼ **5ê°œ 유틸리티 모듈**(ì´ ì•½ 200ê°œ í´ëž˜ìФ)로 구성ë˜ì–´ 있습니다: + +![패키지 개요](docs/UML/exports/00_package_overview.png) + +| 모듈 | ëª©ì  | 주요 í´ëž˜ìФ | +|------|------|-------------| +| **CLICore** | Git ìŠ¤íƒ€ì¼ ëª…ë ¹ì–´ 디스패처 | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18가지 소스 유형 추출기 | `DocToSkillConverter`, `DocumentSkillBuilder` (공유 빌드 ë ˆì´ì–´), `UnifiedScraper` | +| **Adaptors** | 20ê°œ ì´ìƒì˜ 출력 í”Œëž«í¼ í˜•ì‹ | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | C3.x 코드베ì´ìФ ë¶„ì„ íŒŒì´í”„ë¼ì¸ | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10가지 GoF ê°ì§€ê¸° | +| **Enhancement** | `AgentClient`를 통한 AI 기반 스킬 개선 | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | 스킬 패키징, 업로드, 설치 | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP 서버 (40ê°œ ë„구) | `SkillSeekerMCPServer`, 10ê°œ ë„구 모듈 | +| **Sync** | 문서 변경 ê°ì§€ | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +유틸리티 모듈: **Parsers** (28ê°œ CLI 파서), **Storage** (S3/GCS/Azure), **Embedding** (다중 ì œê³µìž ë²¡í„°), **Benchmark** (성능), **Utilities** (16ê°œ 공유 í—¬í¼). + +ì „ì²´ UML 다ì´ì–´ê·¸ëž¨: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML 프로ì íЏ: `docs/UML/skill_seekers.mdj` | HTML API ë ˆí¼ëŸ°ìФ: `docs/UML/html/` + +## 📋 사전 요구 사항 + +**시작하기 ì „ì— ë‹¤ìŒ ì‚¬í•­ì„ í™•ì¸í•˜ì„¸ìš”:** + +1. **Python 3.10 ì´ìƒ** - [다운로드](https://www.python.org/downloads/) | 확ì¸: `python3 --version` +2. **Git** - [다운로드](https://git-scm.com/) | 확ì¸: `git --version` +3. **15–30ë¶„** (최초 설정 시간) + +**ì²˜ìŒ ì‚¬ìš©í•˜ì‹œë‚˜ìš”?** → **[여기ì—서 시작: 확실한 빠른 시작 ê°€ì´ë“œ](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Claudeì— ìŠ¤í‚¬ 업로드 + +ìŠ¤í‚¬ì´ íŒ¨í‚¤ì§•ëœ í›„, Claudeì— ì—…ë¡œë“œí•´ì•¼ 합니다: + +### 옵션 1: ìžë™ 업로드 (API 기반) + +```bash +# API Key 설정 (ì¼íšŒì„±) +export ANTHROPIC_API_KEY=sk-ant-... + +# 패키징 후 ìžë™ 업로드 +skill-seekers package output/react/ --upload + +# ë˜ëŠ” 기존 .zip 업로드 +skill-seekers upload output/react.zip +``` + +### 옵션 2: ìˆ˜ë™ ì—…ë¡œë“œ (API Key 불필요) + +```bash +# 스킬 패키징 +skill-seekers package output/react/ +# → output/react.zip ìƒì„± + +# 그런 ë‹¤ìŒ ìˆ˜ë™ìœ¼ë¡œ 업로드: +# - https://claude.ai/skills 방문 +# - "스킬 업로드" í´ë¦­ +# - output/react.zip ì„ íƒ +``` + +### 옵션 3: MCP (Claude Code) + +``` +Claude Codeì—서 ì§ì ‘ 요청: +"React ìŠ¤í‚¬ì„ íŒ¨í‚¤ì§•í•˜ê³  업로드해 줘" +``` + +--- + +## 🤖 AI ì—ì´ì „íŠ¸ì— ì„¤ì¹˜ + +Skill Seekers는 19ê°œì˜ AI 코딩 ì—ì´ì „íŠ¸ì— ìŠ¤í‚¬ì„ ìžë™ìœ¼ë¡œ 설치할 수 있습니다. + +```bash +# 특정 ì—ì´ì „íŠ¸ì— ì„¤ì¹˜ +skill-seekers install-agent output/react/ --agent cursor + +# IBM Bobì— ì„¤ì¹˜ (프로ì íЏ 로컬 .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# 모든 ì—ì´ì „íŠ¸ì— í•œ ë²ˆì— ì„¤ì¹˜ +skill-seekers install-agent output/react/ --agent all + +# 설치 ì—†ì´ ë¯¸ë¦¬ë³´ê¸° +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### ì§€ì›ë˜ëŠ” ì—ì´ì „트 + +| ì—ì´ì „트 | 경로 | 유형 | +|---------|------|------| +| **Claude Code** | `~/.claude/skills/` | ì „ì—­ | +| **Cursor** | `.cursor/skills/` | 프로ì íЏ | +| **VS Code / Copilot** | `.github/skills/` | 프로ì íЏ | +| **Amp** | `~/.amp/skills/` | ì „ì—­ | +| **Goose** | `~/.config/goose/skills/` | ì „ì—­ | +| **OpenCode** | `~/.opencode/skills/` | ì „ì—­ | +| **Windsurf** | `~/.windsurf/skills/` | ì „ì—­ | +| **Roo Code** | `.roo/skills/` | 프로ì íЏ | +| **Cline** | `.cline/skills/` | 프로ì íЏ | +| **Aider** | `~/.aider/skills/` | ì „ì—­ | +| **Bolt** | `.bolt/skills/` | 프로ì íЏ | +| **Kilo Code** | `.kilo/skills/` | 프로ì íЏ | +| **Continue** | `~/.continue/skills/` | ì „ì—­ | +| **Kimi Code** | `~/.kimi/skills/` | ì „ì—­ | +| **IBM Bob** | `.bob/skills/` | 프로ì íЏ | + +--- + +## 🔌 MCP 통합 (40ê°œ ë„구) + +Skill Seekers는 Claude Code, Cursor, Windsurf, VS Code + Cline ë˜ëŠ” IntelliJ IDEAì—서 사용할 수 있는 MCP 서버를 제공합니다. + +```bash +# stdio 모드 (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP 모드 (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# 모든 ì—ì´ì „트 ì¼ê´„ ìžë™ 설정 +./setup_mcp.sh +``` + +**사용 가능한 ì „ì²´ 40ê°œ ë„구:** +- **핵심 (9ê°œ):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **확장 (10ê°œ):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **벡터 DB (4ê°œ):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **í´ë¼ìš°ë“œ (3ê°œ):** `cloud_upload`, `cloud_download`, `cloud_list` + +**ì „ì²´ ê°€ì´ë“œ:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ ì„¤ì • + +### 사용 가능한 프리셋 (24+) + +```bash +# 모든 프리셋 나열 +# skill-seekers list-configs # v3.7.0ì—서는 사용 불가 +``` + +| 카테고리 | 프리셋 | +|---------|--------| +| **웹 프레임워í¬** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **게임 개발** | `godot`, `pygame`, `unity` | +| **ë„구 ë° DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **통합 (문서 + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` 등 | + +### ë‚˜ë§Œì˜ ì„¤ì • 만들기 + +```bash +# 옵션 1: 대화형 +skill-seekers create --interactive + +# 옵션 2: 프리셋 복사 후 편집 +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### 설정 íŒŒì¼ êµ¬ì¡° + +```json +{ + "name": "myframework", + "description": "ì´ ìŠ¤í‚¬ì„ ì‚¬ìš©í•  시ì ", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### 설정 저장 위치 + +ë„구는 ë‹¤ìŒ ìˆœì„œë¡œ 검색합니다: +1. ì œê³µëœ ì •í™•í•œ 경로 +2. `./configs/` (현재 디렉터리) +3. `~/.config/skill-seekers/configs/` (ì‚¬ìš©ìž ì„¤ì • 디렉터리) +4. SkillSeekersWeb.com API (프리셋 설정) + +--- + +## 📊 ìƒì„±ë˜ëŠ” ë‚´ìš© + +``` +output/ +├── godot_data/ # 스í¬ëž˜í•‘ëœ ì›ì‹œ ë°ì´í„° +│ ├── pages/ # JSON íŒŒì¼ (페ì´ì§€ë‹¹ 하나) +│ └── summary.json # 개요 +│ +└── godot/ # 스킬 íŒŒì¼ + ├── SKILL.md # 실제 예제가 í¬í•¨ëœ ê°•í™” 버전 + ├── references/ # ë¶„ë¥˜ëœ ë¬¸ì„œ + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # 비어 ìžˆìŒ (ì§ì ‘ 추가 가능) + └── assets/ # 비어 ìžˆìŒ (ì§ì ‘ 추가 가능) +``` + +--- + +## 🛠문제 í•´ê²° + +### 콘í…츠가 추출ë˜ì§€ 않나요? +- `main_content` ì„ íƒìžë¥¼ 확ì¸í•˜ì„¸ìš” +- 시ë„í•´ 보세요: `article`, `main`, `div[role="main"]` + +### ë°ì´í„°ê°€ ìžˆëŠ”ë° ì‚¬ìš©ë˜ì§€ 않나요? +```bash +# ê°•ì œ 재스í¬ëž˜í•‘ +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### 분류가 ì ì ˆí•˜ì§€ 않나요? +ì„¤ì •ì˜ `categories` ì„¹ì…˜ì„ ë” ì í•©í•œ 키워드로 편집하세요. + +### 문서를 ì—…ë°ì´íŠ¸í•˜ê³  싶으신가요? +```bash +# ì´ì „ ë°ì´í„° ì‚­ì œ 후 재스í¬ëž˜í•‘ +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### 강화가 ìž‘ë™í•˜ì§€ 않나요? +```bash +# API Keyê°€ 설정ë˜ì–´ 있는지 í™•ì¸ +echo $ANTHROPIC_API_KEY + +# LOCAL 모드 ì‹œë„ (Claude Code Max 사용, API Key 불필요) +skill-seekers enhance output/react/ --mode LOCAL + +# 백그ë¼ìš´ë“œ ê°•í™” ìƒíƒœ ëª¨ë‹ˆí„°ë§ +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub ì†ë„ 제한 문제? +```bash +# GitHub í† í° ì„¤ì • (시간당 5000회 vs ìµëª… 60회) +export GITHUB_TOKEN=ghp_your_token_here + +# ë˜ëŠ” 여러 프로필 설정 +skill-seekers config --github +``` + +--- + +## 📈 성능 + +| 작업 | 시간 | 참고 | +|------|------|------| +| 스í¬ëž˜í•‘ (ë™ê¸°) | 15–45ë¶„ | 최초 실행만, 스레드 기반 | +| 스í¬ëž˜í•‘ (비ë™ê¸°) | 5–15ë¶„ | `--async` 플래그로 2–3ë°° 빠름 | +| 빌드 | 1–3ë¶„ | ìºì‹œì—서 빠른 재구축 | +| 재구축 | <1ë¶„ | `--skip-scrape` 사용 | +| ê°•í™” (LOCAL) | 30–60ì´ˆ | Claude Code Max 사용 | +| ê°•í™” (API) | 20–40ì´ˆ | API Key í•„ìš” | +| ë™ì˜ìƒ (ìžë§‰) | 1–3ë¶„ | YouTube/로컬, ìžë§‰ë§Œ | +| ë™ì˜ìƒ (시ê°) | 5–15ë¶„ | + OCR 프레임 추출 | +| 패키징 | 5–10ì´ˆ | 최종 .zip ìƒì„± | + +--- + +## 🆕 v3.6.0 ì‹ ê·œ 기능 + +### 워í¬í”Œë¡œìš° 프리셋 +`--preset`으로 ë¶„ì„ ê¹Šì´ ì œì–´: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # 빠름, 표면 수준 +skill-seekers create https://docs.react.dev/ --preset standard # 균형 (기본값) +skill-seekers create https://docs.react.dev/ --preset comprehensive # 심층, 완전 ë¶„ì„ +``` + +### ë¼ì´í”„사ì´í´ 플래그 +```bash +skill-seekers create https://docs.react.dev/ --dry-run # 스í¬ëž˜í•‘ ì—†ì´ ë¯¸ë¦¬ë³´ê¸° +skill-seekers create https://docs.react.dev/ --fresh # ìºì‹œ 무시, ì „ì²´ 재스í¬ëž˜í•‘ +skill-seekers create https://docs.react.dev/ --resume # ì¤‘ë‹¨ëœ ìž‘ì—… 재개 +skill-seekers create https://docs.react.dev/ --skip-scrape # 기존 출력 재패키징 +``` + +### ìƒíƒœ í™•ì¸ ë° ìœ í‹¸ë¦¬í‹° +```bash +skill-seekers doctor # 설치 ë° í™˜ê²½ 진단 +skill-seekers sync-config # 설정 드리프트 ê°ì§€ +skill-seekers stream # 대용량 문서 ìŠ¤íŠ¸ë¦¬ë° ìˆ˜ì§‘ +skill-seekers update output/react/ # ì¦ë¶„ ì—…ë°ì´íЏ +skill-seekers multilang # 다국어 스킬 ìƒì„± +skill-seekers quality output/react/ # 품질 리í¬íЏ (--threshold 7 추가로 게ì´íЏ ì ìš©: 7/10 미만ì´ë©´ 0ì´ ì•„ë‹Œ 종료 코드) +``` + +### RAG 청킹 옵션 (패키징) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### 마켓플레ì´ìФ 게시 +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### 추가 ì„ íƒì  종ì†ì„± +| Extra | 설치 | ìš©ë„ | +|-------|------|------| +| `browser` | `pip install "skill-seekers[browser]"` | SPA 사ì´íŠ¸ë¥¼ 위한 헤드리스 Playwright | +| `embedding` | `pip install "skill-seekers[embedding]"` | 임베딩 서버 ì§€ì› | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` 등 | í´ë¼ìš°ë“œ 스토리지 업로드 | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | 통합 벡터 DB 업로드 종ì†ì„± | + +--- + +## 📚 문서 + +### 시작 ê°€ì´ë“œ +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **ì‹ ê·œ 사용ìžëŠ” 여기ì—서 시작!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - 경험 있는 사용ìžë¥¼ 위한 빠른 시작 +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - ì¼ë°˜ì ì¸ 문제와 í•´ê²° 방법 +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - 한 페ì´ì§€ 치트 시트 + +### 아키í…처 +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - 14ê°œ 다ì´ì–´ê·¸ëž¨ì´ í¬í•¨ëœ UML 아키í…처 개요 +- **[docs/UML/exports/](docs/UML/exports/)** - PNG 다ì´ì–´ê·¸ëž¨ 내보내기 (패키지 개요 + 13ê°œ í´ëž˜ìФ 다ì´ì–´ê·¸ëž¨) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - ì „ì²´ HTML API ë ˆí¼ëŸ°ìФ (모든 í´ëž˜ìФ, ì—°ì‚°, ì†ì„±) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML 프로ì íЏ íŒŒì¼ ([StarUML](https://staruml.io/)로 열기) + +### ê°€ì´ë“œ +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - 10K–40K+ 페ì´ì§€ 문서 처리 +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI ê°•í™” 모드 ê°€ì´ë“œ +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP 통합 설정 +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - 다중 소스 스í¬ëž˜í•‘ +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - ë™ì˜ìƒ 추출 ì „ì²´ ê°€ì´ë“œ + +### 통합 ê°€ì´ë“œ +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - 모든 RAG 파ì´í”„ë¼ì¸ + +--- + +## 📠ë¼ì´ì„ ìФ + +MIT ë¼ì´ì„ ìФ - ìžì„¸í•œ ë‚´ìš©ì€ [LICENSE](LICENSE) 파ì¼ì„ 참조하세요 + +--- + +ì¦ê±°ìš´ 스킬 빌딩 ë˜ì„¸ìš”! 🚀 + +--- + +## 🔒 보안 + +[![MseeP.ai 보안 í‰ê°€ ë°°ì§€](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 후ì›ì‚¬ + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — í’€ 모달, OpenAI 호환 AI 추론 플랫í¼ìž…니다. Skill Seekers는 `--target atlas`와 `ATLAS_API_KEY`를 통해 패키징/ê°•í™” 대ìƒìœ¼ë¡œ ì§€ì›í•©ë‹ˆë‹¤. diff --git a/README.md b/README.md new file mode 100644 index 0000000..056157c --- /dev/null +++ b/README.md @@ -0,0 +1,1375 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +English | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +[![Version](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP Integration](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Tested](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Project Board](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI version](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Downloads](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![Website](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter Follow](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Repo stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) + +yusufkaraaslan%2FSkill_Seekers | Trendshift + +**🧠 The data layer for AI systems.** Skill Seekers turns documentation sites, GitHub repos, PDFs, videos, notebooks, wikis, and 10+ more source types into structured knowledge assets—ready to power AI Skills (Claude, Gemini, OpenAI), RAG pipelines (LangChain, LlamaIndex, Pinecone), and AI coding assistants (Cursor, Windsurf, Cline) in minutes, not hours. + +> 🌠**[Visit SkillSeekersWeb.com](https://skillseekersweb.com/)** - Browse 24+ preset configs, share your configs, and access complete documentation! + +> 📋 **[View Development Roadmap & Tasks](https://github.com/users/yusufkaraaslan/projects/2)** - 134 tasks across 10 categories, pick any to contribute! + +## 🌠Ecosystem + +Skill Seekers is a multi-repo project. Here's where everything lives: + +| Repository | Description | Links | +|-----------|-------------|-------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | Core CLI & MCP server (this repo) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Website & documentation | [Live](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Community config repository | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action for CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code plugin | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap for macOS | | + +> **Want to contribute?** The website and configs repos are great starting points for new contributors! + +## 🧠 The Data Layer for AI Systems + +**Skill Seekers is the universal preprocessing layer** that sits between raw documentation and every AI system that consumes it. Whether you are building Claude skills, a LangChain RAG pipeline, or a Cursor `.cursorrules` file — the data preparation is identical. You do it once, and export to all targets. + +```bash +# One command → structured knowledge asset +skill-seekers create https://docs.react.dev/ +# or: skill-seekers create facebook/react +# or: skill-seekers create ./my-project + +# Export to any AI system +skill-seekers package output/react --target claude # → Claude AI Skill (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob skill directory +``` + +### What gets built + +| Output | Target | What it powers | +|--------|--------|---------------| +| **Claude Skill** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini Skill** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, custom assistants | +| **LangChain Documents** | `--target langchain` | QA chains, agents, retrievers | +| **LlamaIndex TextNodes** | `--target llama-index` | Query engines, chat engines | +| **Haystack Documents** | `--target haystack` | Enterprise RAG pipelines | +| **Pinecone-ready** (Markdown) | `--target markdown` | Vector upsert | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Local vector DBs | +| **IBM Bob Skill** (directory) | `--target ibm-bob` | IBM Bob project/global skills | +| **Cursor** `.cursorrules` | `--target markdown` → copy SKILL.md | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → copy | VS Code, IntelliJ, Vim | + +### Why it matters + +- âš¡ **99% faster** — Days of manual data prep → 15–45 minutes +- 🎯 **AI Skill quality** — 500+ line SKILL.md files with examples, patterns, and guides +- 📊 **RAG-ready chunks** — Smart chunking preserves code blocks and maintains context +- 🎬 **Videos** — Extract code, transcripts, and structured knowledge from YouTube and local videos +- 🔄 **Multi-source** — Combine 18 source types (docs, GitHub, PDFs, videos, notebooks, wikis, and more) into one knowledge asset +- 🌠**One prep, every target** — Export the same asset to 21 platforms without re-scraping +- ✅ **Battle-tested** — 3,700+ tests, 24+ framework presets, production-ready + +## 🚀 Quick Start (3 Commands) + +```bash +# 1. Install +pip install skill-seekers + +# 2. Create skill from any source +skill-seekers create https://docs.django.com/ + +# 3. Package for your AI platform +skill-seekers package output/django --target claude +``` + +**That's it!** You now have `output/django-claude.zip` ready to use. + +```bash +# Use a different AI agent for enhancement (default: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI-driven project scan (new) + +Point `scan` at any project and an AI agent reads its manifests, README, +Dockerfile/CI and sampled source imports — then emits one config per detected +framework plus a `-codebase.json` for your own code. Pins the +detected version so re-running reports bumps: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Then build any of them +skill-seekers create ./configs/scanned/react.json +``` + +If a detection has no existing preset, the AI generates a fresh config; on +exit you can optionally publish it back to the [community registry](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### Other Sources (18 Supported) + +```bash +# GitHub repository +skill-seekers create facebook/react + +# Local project +skill-seekers create ./my-project + +# PDF document +skill-seekers create manual.pdf + +# Word document +skill-seekers create report.docx + +# EPUB e-book +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# OpenAPI spec +skill-seekers create openapi.yaml + +# PowerPoint presentation +skill-seekers create presentation.pptx + +# AsciiDoc document +skill-seekers create guide.adoc + +# Local HTML file (auto-detected by extension) +skill-seekers create page.html + +# Whole directory of HTML files (auto-detected for HTML-dominant dirs) +skill-seekers create ./mirror_output/site/ + +# Force HTML mode on a mixed/code-heavy directory +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom feed +skill-seekers create feed.rss + +# Man page +skill-seekers create curl.1 + +# Video (YouTube, Vimeo, or local file — requires skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# First time? Auto-install GPU-aware visual deps: +skill-seekers create --setup + +# Confluence wiki +skill-seekers create --space-key TEAM --name wiki + +# Notion pages +skill-seekers create --database-id ... --name docs + +# Slack/Discord chat export +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Export Everywhere + +```bash +# Package for multiple platforms +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## What is Skill Seekers? + +Skill Seekers is the **data layer for AI systems**. It transforms 18 source types—documentation websites, GitHub repositories, PDFs, videos, Jupyter Notebooks, Word/EPUB/AsciiDoc documents, OpenAPI specs, PowerPoint presentations, RSS feeds, man pages, Confluence wikis, Notion pages, Slack/Discord exports, and more—into structured knowledge assets for every AI target: + +| Use Case | What you get | Examples | +|----------|-------------|---------| +| **AI Skills** | Comprehensive SKILL.md + references | Claude Code, Gemini, GPT | +| **RAG Pipelines** | Chunked documents with rich metadata | LangChain, LlamaIndex, Haystack | +| **Vector Databases** | Pre-formatted data ready for upsert | Pinecone, Chroma, Weaviate, FAISS | +| **AI Coding Assistants** | Context files your IDE AI reads automatically | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 Documentation + +| I want to... | Read this | +|--------------|-----------| +| **Get started quickly** | [Quick Start](docs/getting-started/02-quick-start.md) - 3 commands to first skill | +| **Understand concepts** | [Core Concepts](docs/user-guide/01-core-concepts.md) - How it works | +| **Scrape sources** | [Scraping Guide](docs/user-guide/02-scraping.md) - All source types | +| **Enhance skills** | [Enhancement Guide](docs/user-guide/03-enhancement.md) - AI enhancement | +| **Export skills** | [Packaging Guide](docs/user-guide/04-packaging.md) - Platform export | +| **Look up commands** | [CLI Reference](docs/reference/CLI_REFERENCE.md) - All 20 commands | +| **Configure** | [Config Format](docs/reference/CONFIG_FORMAT.md) - JSON specification | +| **Fix issues** | [Troubleshooting](docs/user-guide/06-troubleshooting.md) - Common problems | + +**Complete documentation:** [docs/README.md](docs/README.md) + +Instead of spending days on manual preprocessing, Skill Seekers: + +1. **Ingests** — docs, GitHub repos, local codebases, PDFs, videos, notebooks, wikis, and 10+ more source types +2. **Analyzes** — deep AST parsing, pattern detection, API extraction +3. **Structures** — categorized reference files with metadata +4. **Enhances** — AI-powered SKILL.md generation (Claude, Gemini, or local) +5. **Exports** — 16 platform-specific formats from one asset + +## Why Use This? + +### For AI Skill Builders (Claude, Gemini, OpenAI) + +- 🎯 **Production-grade Skills** — 500+ line SKILL.md files with code examples, patterns, and guides +- 🔄 **Enhancement Workflows** — Apply `security-focus`, `architecture-comprehensive`, or custom YAML presets +- 🎮 **Any Domain** — Game engines (Godot, Unity), frameworks (React, Django), internal tools +- 🔧 **Teams** — Combine internal docs + code into a single source of truth +- 📚 **Quality** — AI-enhanced with examples, quick reference, and navigation guidance + +### For RAG Builders & AI Engineers + +- 🤖 **RAG-ready data** — Pre-chunked LangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- 🚀 **99% faster** — Days of preprocessing → 15–45 minutes +- 📊 **Smart metadata** — Categories, sources, types → better retrieval accuracy +- 🔄 **Multi-source** — Combine docs + GitHub + PDFs + videos in one pipeline +- 🌠**Platform-agnostic** — Export to any vector DB or framework without re-scraping + +### For AI Coding Assistant Users + +- 💻 **Cursor / Windsurf / Cline** — Generate `.cursorrules` / `.windsurfrules` / `.clinerules` automatically +- 🎯 **Persistent context** — AI "knows" your frameworks without repeated prompting +- 📚 **Always current** — Update context in minutes when docs change + +## Key Features + +### 🌠Documentation Scraping +- ✅ **Smart SPA Discovery** - Three-layer discovery for JavaScript SPA sites (sitemap.xml → llms.txt → headless browser rendering) +- ✅ **llms.txt Support** - Automatically detects and uses LLM-ready documentation files (10x faster) +- ✅ **Universal Scraper** - Works with ANY documentation website +- ✅ **Smart Categorization** - Automatically organizes content by topic +- ✅ **Code Language Detection** - Recognizes Python, JavaScript, C++, GDScript, etc. +- ✅ **24+ Ready-to-Use Presets** - Godot, React, Vue, Django, FastAPI, and more + +### 📄 PDF Support +- ✅ **Basic PDF Extraction** - Extract text, code, and images from PDF files +- ✅ **OCR for Scanned PDFs** - Extract text from scanned documents +- ✅ **Password-Protected PDFs** - Handle encrypted PDFs +- ✅ **Table Extraction** - Extract complex tables from PDFs +- ✅ **Parallel Processing** - 3x faster for large PDFs +- ✅ **Intelligent Caching** - 50% faster on re-runs + +### 🎬 Video Extraction +- ✅ **YouTube & Local Videos** - Extract transcripts, on-screen code, and structured knowledge from videos +- ✅ **Visual Frame Analysis** - OCR extraction from code editors, terminals, slides, and diagrams +- ✅ **GPU Auto-Detection** - Automatically installs correct PyTorch build (CUDA/ROCm/MPS/CPU) +- ✅ **AI Enhancement** - Two-pass: clean OCR artifacts + generate polished SKILL.md +- ✅ **Time Clipping** - Extract specific sections with `--start-time` and `--end-time` +- ✅ **Playlist Support** - Batch process all videos in a YouTube playlist +- ✅ **Vision API Fallback** - Use Claude Vision for low-confidence OCR frames + +### 🙠GitHub Repository Analysis +- ✅ **Deep Code Analysis** - AST parsing for Python, JavaScript, TypeScript, Java, C++, Go +- ✅ **API Extraction** - Functions, classes, methods with parameters and types +- ✅ **Repository Metadata** - README, file tree, language breakdown, stars/forks +- ✅ **GitHub Issues & PRs** - Fetch open/closed issues with labels and milestones +- ✅ **CHANGELOG & Releases** - Automatically extract version history +- ✅ **Conflict Detection** - Compare documented APIs vs actual code implementation +- ✅ **MCP Integration** - Natural language: "Scrape GitHub repo facebook/react" + +### 🔄 Unified Multi-Source Scraping +- ✅ **Combine Multiple Sources** - Mix documentation + GitHub + PDF in one skill +- ✅ **Conflict Detection** - Automatically finds discrepancies between docs and code +- ✅ **Intelligent Merging** - Rule-based or AI-powered conflict resolution +- ✅ **Transparent Reporting** - Side-by-side comparison with âš ï¸ warnings +- ✅ **Documentation Gap Analysis** - Identifies outdated docs and undocumented features +- ✅ **Single Source of Truth** - One skill showing both intent (docs) and reality (code) +- ✅ **Backward Compatible** - Legacy single-source configs still work + +### 🤖 Multi-LLM Platform Support +- ✅ **12 LLM Platforms** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Generic Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **Universal Scraping** - Same documentation works for all platforms +- ✅ **Platform-Specific Packaging** - Optimized formats for each LLM +- ✅ **One-Command Export** - `--target` flag selects platform +- ✅ **Optional Dependencies** - Install only what you need +- ✅ **100% Backward Compatible** - Existing Claude workflows unchanged + +| Platform | Format | Upload | Enhancement | API Key | Custom Endpoint | +|----------|--------|--------|-------------|---------|-----------------| +| **Claude AI** | ZIP + YAML | ✅ Auto | ✅ Yes | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Auto | ✅ Yes | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Auto | ✅ Yes | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Auto | ✅ Yes | MINIMAX_API_KEY | - | +| **Generic Markdown** | ZIP | ⌠Manual | ⌠No | - | - | + +```bash +# Claude (default - no changes needed!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Generic Markdown (universal export) +skill-seekers package output/react/ --target markdown +# Use the markdown files directly in any LLM +``` + +
+🔧 Use your own AI provider (OpenAI-compatible endpoints + subscriptions, no Anthropic credits needed) + +The optional AI **enhancement** step (used by `create`, `scan`, and `enhance`) does **not** require an Anthropic key. You have three ways to power it: + +**1. Use a subscription you already pay for — no API credits at all (LOCAL agent mode)** + +Skill Seekers can shell out to a coding-agent CLI you're already logged into, so enhancement runs on your existing plan instead of metered API tokens: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → your ChatGPT Plus +skill-seekers create --agent claude # Claude Code → your Claude Pro/Max +``` + +Supported agents: `claude`, `codex`, `copilot`, `opencode`, `kimi`, and `custom` +(pair `--agent custom` with `--agent-cmd " ..."` to drive any other tool). + +**2. Any OpenAI-compatible provider (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +All of these expose an OpenAI-compatible `/v1` endpoint. Point Skill Seekers at one with three env vars — it detects `OPENAI_API_KEY`, and the OpenAI SDK honors `OPENAI_BASE_URL` automatically: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # provider endpoint (see table) +export OPENAI_MODEL="" # required — default gpt-4o won't exist elsewhere +skill-seekers create +``` + +| Provider | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> Provider detection picks the **first** API-key env var it finds (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Set `SKILL_SEEKER_PROVIDER` to force a specific provider, or make sure the higher-priority keys are unset. + +**3. Claude-compatible endpoints (e.g. GLM, proxies)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) and Kimi/Moonshot (`MOONSHOT_API_KEY`) are also supported natively. See **[Environment Variables Reference](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** for the full list, including per-provider model overrides. + +
+ +**Installation:** +```bash +# Install with Gemini support +pip install skill-seekers[gemini] + +# Install with OpenAI support +pip install skill-seekers[openai] + +# Install with MiniMax support +pip install skill-seekers[minimax] + +# Install with all LLM platforms +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG Framework Integrations + +- ✅ **LangChain Documents** - Direct export to `Document` format with `page_content` + metadata + - Perfect for: QA chains, retrievers, vector stores, agents + - Example: [LangChain RAG Pipeline](examples/langchain-rag-pipeline/) + - Guide: [LangChain Integration](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - Export to `TextNode` format with unique IDs + embeddings + - Perfect for: Query engines, chat engines, storage context + - Example: [LlamaIndex Query Engine](examples/llama-index-query-engine/) + - Guide: [LlamaIndex Integration](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone-Ready Format** - Optimized for vector database upsert + - Perfect for: Production vector search, semantic search, hybrid search + - Example: [Pinecone Upsert](examples/pinecone-upsert/) + - Guide: [Pinecone Integration](docs/integrations/PINECONE.md) + +**Quick Export:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (Universal) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Complete RAG Pipeline Guide:** [RAG Pipelines Documentation](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI Coding Assistant Integrations + +Transform any framework documentation into expert coding context for 4+ AI assistants: + +- ✅ **Cursor IDE** - Generate `.cursorrules` for AI-powered code suggestions + - Perfect for: Framework-specific code generation, consistent patterns + - Works with: Cursor IDE (VS Code fork) + - Guide: [Cursor Integration](docs/integrations/CURSOR.md) + - Example: [Cursor React Skill](examples/cursor-react-skill/) + +- ✅ **Windsurf** - Customize Windsurf's AI assistant context with `.windsurfrules` + - Perfect for: IDE-native AI assistance, flow-based coding + - Works with: Windsurf IDE by Codeium + - Guide: [Windsurf Integration](docs/integrations/WINDSURF.md) + - Example: [Windsurf FastAPI Context](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - System prompts + MCP for VS Code agent + - Perfect for: Agentic code generation in VS Code + - Works with: Cline extension for VS Code + - Guide: [Cline Integration](docs/integrations/CLINE.md) + - Example: [Cline Django Assistant](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - Context servers for IDE-agnostic AI + - Perfect for: Multi-IDE environments (VS Code, JetBrains, Vim), custom LLM providers + - Works with: Any IDE with Continue.dev plugin + - Guide: [Continue Integration](docs/integrations/CONTINUE_DEV.md) + - Example: [Continue Universal Context](examples/continue-dev-universal/) + +**Quick Export for AI Coding Tools:** +```bash +# For any AI coding assistant (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # or --target markdown + +# Copy to your project (example for Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Or for Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Or for Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# Or for Continue.dev (HTTP server) +python examples/continue-dev-universal/context_server.py +# Configure in ~/.continue/config.json +``` + +**Integration Hub:** [All AI System Integrations](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Three-Stream GitHub Architecture +- ✅ **Triple-Stream Analysis** - Split GitHub repos into Code, Docs, and Insights streams +- ✅ **Unified Codebase Analyzer** - Works with GitHub URLs AND local paths +- ✅ **C3.x as Analysis Depth** - Choose 'basic' (1-2 min) or 'c3x' (20-60 min) analysis +- ✅ **Enhanced Router Generation** - GitHub metadata, README quick start, common issues +- ✅ **Issue Integration** - Top problems and solutions from GitHub issues +- ✅ **Smart Routing Keywords** - GitHub labels weighted 2x for better topic detection + +**Three Streams Explained:** +- **Stream 1: Code** - Deep C3.x analysis (patterns, examples, guides, configs, architecture) +- **Stream 2: Docs** - Repository documentation (README, CONTRIBUTING, docs/*.md) +- **Stream 3: Insights** - Community knowledge (issues, labels, stars, forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# Analyze GitHub repo with all three streams +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # or "basic" for fast analysis + fetch_github_metadata=True +) + +# Access code stream (C3.x analysis) +print(f"Design patterns: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Test examples: {result.code_analysis['c3_2_examples_count']}") + +# Access docs stream (repository docs) +print(f"README: {result.github_docs['readme'][:100]}") + +# Access insights stream (GitHub metadata) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"Common issues: {len(result.github_insights['common_problems'])}") +``` + +**See complete documentation**: [Three-Stream Implementation Summary](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Smart Rate Limit Management & Configuration +- ✅ **Multi-Token Configuration System** - Manage multiple GitHub accounts (personal, work, OSS) + - Secure config storage at `~/.config/skill-seekers/config.json` (600 permissions) + - Per-profile rate limit strategies: `prompt`, `wait`, `switch`, `fail` + - Configurable timeout per profile (default: 30 min, prevents indefinite waits) + - Smart fallback chain: CLI arg → Env var → Config file → Prompt + - API key management for Claude, Gemini, OpenAI +- ✅ **Interactive Configuration Wizard** - Beautiful terminal UI for easy setup + - Browser integration for token creation (auto-opens GitHub, etc.) + - Token validation and connection testing + - Visual status display with color coding +- ✅ **Intelligent Rate Limit Handler** - No more indefinite waits! + - Upfront warning about rate limits (60/hour vs 5000/hour) + - Real-time detection from GitHub API responses + - Live countdown timers with progress + - Automatic profile switching when rate limited + - Four strategies: prompt (ask), wait (countdown), switch (try another), fail (abort) +- ✅ **Resume Capability** - Continue interrupted jobs + - Auto-save progress at configurable intervals (default: 60 sec) + - List all resumable jobs with progress details + - Auto-cleanup of old jobs (default: 7 days) +- ✅ **CI/CD Support** - Non-interactive mode for automation + - `--non-interactive` flag fails fast without prompts + - `--profile` flag to select specific GitHub account + - Clear error messages for pipeline logs + +**Quick Setup:** +```bash +# One-time configuration (5 minutes) +skill-seekers config --github + +# Use specific profile for private repos +skill-seekers create mycompany/private-repo --profile work + +# CI/CD mode (fail fast, no prompts) +skill-seekers create owner/repo --non-interactive + +# Resume interrupted job +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Rate Limit Strategies Explained:** +- **prompt** (default) - Ask what to do when rate limited (wait, switch, setup token, cancel) +- **wait** - Automatically wait with countdown timer (respects timeout) +- **switch** - Automatically try next available profile (for multi-account setups) +- **fail** - Fail immediately with clear error (perfect for CI/CD) + +### 🎯 Bootstrap Skill - Self-Hosting + +Generate skill-seekers as a skill to use within your AI agent (Claude Code, Kimi, Codex, etc.): + +```bash +# Generate the skill +./scripts/bootstrap_skill.sh + +# Install to Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**What you get:** +- ✅ **Complete skill documentation** - All CLI commands and usage patterns +- ✅ **CLI command reference** - Every tool and its options documented +- ✅ **Quick start examples** - Common workflows and best practices +- ✅ **Auto-generated API docs** - Code analysis, patterns, and examples + +### 🔠Private Config Repositories +- ✅ **Git-Based Config Sources** - Fetch configs from private/team git repositories +- ✅ **Multi-Source Management** - Register unlimited GitHub, GitLab, Bitbucket repos +- ✅ **Team Collaboration** - Share custom configs across 3-5 person teams +- ✅ **Enterprise Support** - Scale to 500+ developers with priority-based resolution +- ✅ **Secure Authentication** - Environment variable tokens (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Intelligent Caching** - Clone once, pull updates automatically +- ✅ **Offline Mode** - Work with cached configs when offline + +### 🤖 Codebase Analysis (C3.x) + +**C3.4: Configuration Pattern Extraction with AI Enhancement** +- ✅ **9 Config Formats** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 Pattern Types** - Database, API, logging, cache, email, auth, server configurations +- ✅ **AI Enhancement** - Optional dual-mode AI analysis (API + LOCAL) + - Explains what each config does + - Suggests best practices and improvements + - **Security analysis** - Finds hardcoded secrets, exposed credentials +- ✅ **Auto-Documentation** - Generates JSON + Markdown documentation of all configs +- ✅ **MCP Integration** - `extract_config_patterns` tool with enhancement support + +**C3.3: AI-Enhanced How-To Guides** +- ✅ **Comprehensive AI Enhancement** - Transforms basic guides into professional tutorials +- ✅ **5 Automatic Improvements** - Step descriptions, troubleshooting, prerequisites, next steps, use cases +- ✅ **Dual-Mode Support** - API mode (Claude API) or LOCAL mode (Claude Code CLI) +- ✅ **No API Costs with LOCAL Mode** - FREE enhancement using your Claude Code Max plan +- ✅ **Quality Transformation** - 75-line templates → 500+ line comprehensive guides + +**Usage:** +```bash +# Quick analysis (1-2 min, basic features only) +skill-seekers scan tests/ --quick + +# Comprehensive analysis with AI (20-60 min, all features) +skill-seekers scan tests/ --comprehensive + +# With AI enhancement +skill-seekers scan tests/ --enhance +``` + +**Full Documentation:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 Enhancement Workflow Presets + +Reusable YAML-defined enhancement pipelines that control how AI transforms your raw documentation into a polished skill. + +- ✅ **5 Bundled Presets** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **User-Defined Presets** — add custom workflows to `~/.config/skill-seekers/workflows/` +- ✅ **Multiple Workflows** — chain two or more workflows in one command +- ✅ **Fully Managed CLI** — list, inspect, copy, add, remove, and validate workflows + +```bash +# Apply a single workflow +skill-seekers create ./my-project --enhance-workflow security-focus + +# Chain multiple workflows (applied in order) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Manage presets +skill-seekers workflows list # List all (bundled + user) +skill-seekers workflows show security-focus # Print YAML content +skill-seekers workflows copy security-focus # Copy to user dir for editing +skill-seekers workflows add ./my-workflow.yaml # Install a custom preset +skill-seekers workflows remove my-workflow # Remove a user preset +skill-seekers workflows validate security-focus # Validate preset structure + +# Copy multiple at once +skill-seekers workflows copy security-focus minimal api-documentation + +# Add multiple files at once +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Remove multiple at once +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML preset format:** +```yaml +name: security-focus +description: "Security-focused review: vulnerabilities, auth, data handling" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Review for OWASP top 10 and common security vulnerabilities..." + - name: auth-review + type: custom + prompt: "Examine authentication and authorisation patterns..." + uses_history: true +``` + +### âš¡ Performance & Scale +- ✅ **Async Mode** - 2-3x faster scraping with async/await (use `--async` flag) +- ✅ **Large Documentation Support** - Handle 10K-40K+ page docs with intelligent splitting +- ✅ **Router/Hub Skills** - Intelligent routing to specialized sub-skills +- ✅ **Parallel Scraping** - Process multiple skills simultaneously +- ✅ **Checkpoint/Resume** - Never lose progress on long scrapes +- ✅ **Caching System** - Scrape once, rebuild instantly + +### 🤖 Agent-Agnostic Skill Generation +- ✅ **Multi-Agent Support** - Generate skills for Claude, Kimi, Codex, Copilot, OpenCode, or any custom agent via `--agent` flag +- ✅ **Custom Agent Commands** - Use `--agent-cmd` to specify a custom agent CLI command for enhancement +- ✅ **Universal Flags** - `--agent` and `--agent-cmd` available on all commands (create, scrape, github, pdf, etc.) + +### 📦 Marketplace Pipeline +- ✅ **Publish to Marketplace** - Publish skills to Claude Code plugin marketplace repos +- ✅ **End-to-End Pipeline** - From documentation source to published marketplace entry + +### ✅ Quality Assurance +- ✅ **Fully Tested** - 3,700+ tests with comprehensive coverage + +--- + +## 📦 Installation + +```bash +# Basic install (documentation scraping, GitHub analysis, PDF, packaging) +pip install skill-seekers + +# With all LLM platform support +pip install skill-seekers[all-llms] + +# With MCP server +pip install skill-seekers[mcp] + +# Everything +pip install skill-seekers[all] +``` + +**Need help choosing?** Run the setup wizard: +```bash +skill-seekers-setup +``` + +### Installation Options + +| Install | Features | +|---------|----------| +| `pip install skill-seekers` | Scraping, GitHub analysis, PDF, all platforms | +| `pip install skill-seekers[gemini]` | + Google Gemini support | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT support | +| `pip install skill-seekers[all-llms]` | + All LLM platforms | +| `pip install skill-seekers[mcp]` | + MCP server for Claude Code, Cursor, etc. | +| `pip install skill-seekers[video]` | + YouTube/Vimeo transcript & metadata extraction | +| `pip install skill-seekers[video-full]` | + Whisper transcription & visual frame extraction | +| `pip install skill-seekers[jupyter]` | + Jupyter Notebook support | +| `pip install skill-seekers[pptx]` | + PowerPoint support | +| `pip install skill-seekers[confluence]` | + Confluence wiki support | +| `pip install skill-seekers[notion]` | + Notion pages support | +| `pip install skill-seekers[rss]` | + RSS/Atom feed support | +| `pip install skill-seekers[chat]` | + Slack/Discord chat export support | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc document support | +| `pip install skill-seekers[all]` | Everything enabled | + +> **Video visual deps (GPU-aware):** After installing `skill-seekers[video-full]`, run +> `skill-seekers create --setup` to auto-detect your GPU and install the correct PyTorch +> variant + easyocr. This is the recommended way to install visual extraction dependencies. + +--- + +## 🚀 One-Command Install Workflow + +**The fastest way to go from config to uploaded skill - complete automation:** + +```bash +# Install React skill from official configs (auto-uploads to Claude) +skill-seekers install --config react + +# Install from local config file +skill-seekers install --config configs/custom.json + +# Install without uploading (package only) +skill-seekers install --config django --no-upload + +# Preview workflow without executing +skill-seekers install --config react --dry-run +``` + +**Time:** 20-45 minutes total | **Quality:** Production-ready (9/10) | **Cost:** Free + +**Phases executed:** +``` +📥 PHASE 1: Fetch Config (if config name provided) +📖 PHASE 2: Scrape Documentation +✨ PHASE 3: AI Enhancement (MANDATORY - no skip option) +📦 PHASE 4: Package Skill +â˜ï¸ PHASE 5: Upload to Claude (optional, requires API key) +``` + +**Requirements:** +- ANTHROPIC_API_KEY environment variable (for auto-upload) +- Claude Code Max plan (for local AI enhancement), or use `--agent` to select a different AI agent + +--- + +## 📊 Feature Matrix + +Skill Seekers supports **12 LLM platforms**, **8 RAG/vector targets**, **18 source types**, and full feature parity across all targets. + +**Platforms:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Generic Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Source Types:** Documentation websites, GitHub repos, PDFs, Word (.docx), EPUB, Video, Local codebases, Jupyter Notebooks, Local HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS/Atom feeds, Man pages, Confluence wikis, Notion pages, Slack/Discord chat exports + +See [Complete Feature Matrix](docs/reference/FEATURE_MATRIX.md) for detailed platform and feature support. + +### Quick Platform Comparison + +| Feature | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------|--------|--------|--------|--------|----------| +| Format | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Upload | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Manual | +| Enhancement | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠None | +| All Skill Modes | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Usage Examples + +### Documentation Scraping + +```bash +# Scrape documentation website +skill-seekers create --config configs/react.json + +# Quick scrape without config +skill-seekers create https://react.dev --name react + +# With async mode (3x faster) +skill-seekers create --config configs/godot.json --async --workers 8 + +# Use a specific AI agent for enhancement +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF Extraction + +```bash +# Basic PDF extraction +skill-seekers create --pdf docs/manual.pdf --name myskill + +# Advanced features +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Extract tables + --parallel \ # Fast parallel processing + --workers 8 # Use 8 CPU cores + +# Scanned PDFs (requires: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Video Extraction + +```bash +# Install video support +pip install skill-seekers[video] # Transcripts + metadata +pip install skill-seekers[video-full] # + Whisper + visual frame extraction + +# Auto-detect GPU and install visual deps (PyTorch + easyocr) +skill-seekers create --setup + +# Extract from YouTube video +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Extract from a YouTube playlist +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Extract from a local video file +skill-seekers create --video-file recording.mp4 --name myrecording + +# Extract with visual frame analysis (requires video-full deps) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# With AI enhancement (cleans OCR + generates polished SKILL.md) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Clip a specific section of a video (supports seconds, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Use Vision API for low-confidence OCR frames (requires ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Re-build skill from previously extracted data (skip download) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Full guide:** See [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) for complete CLI reference, +> visual pipeline details, AI enhancement options, and troubleshooting. + +### GitHub Repository Analysis + +```bash +# Basic repository scraping +skill-seekers create facebook/react + +# With authentication (higher rate limits) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Customize what to include +skill-seekers create django/django \ + --include-issues \ # Extract GitHub Issues + --max-issues 100 \ # Limit issue count + --include-changelog # Extract CHANGELOG.md +``` + +### Unified Multi-Source Scraping + +**Combine documentation + GitHub + PDF into one unified skill with conflict detection:** + +```bash +# Use existing unified configs +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# Or create unified config +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**Conflict Detection automatically finds:** +- 🔴 **Missing in code** (high): Documented but not implemented +- 🟡 **Missing in docs** (medium): Implemented but not documented +- âš ï¸ **Signature mismatch**: Different parameters/types +- â„¹ï¸ **Description mismatch**: Different explanations + +**Full Guide:** See [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) for complete documentation. + +### Private Config Repositories + +**Share custom configs across teams using private git repositories:** + +```bash +# Option 1: Using MCP tools (recommended) +# Register your team's private repo +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Fetch config from team repo +fetch_config(source="team", config_name="internal-api") +``` + +**Supported Platforms:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Full Guide:** See [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) for complete documentation. + +## How It Works + +```mermaid +graph LR + A[Documentation Website] --> B[Skill Seekers] + B --> C[Scraper] + B --> D[AI Enhancement] + B --> E[Packager] + C --> F[Organized References] + D --> F + F --> E + E --> G[AI Skill .zip] + G --> H[Upload to AI Platform] +``` + +0. **Detect llms.txt** - Checks for llms-full.txt, llms.txt, llms-small.txt first (part of Smart SPA Discovery) +1. **Scrape**: Extracts all pages from documentation +2. **Categorize**: Organizes content into topics (API, guides, tutorials, etc.) +3. **Enhance**: AI analyzes docs and creates comprehensive SKILL.md with examples (supports multiple agents via `--agent`) +4. **Package**: Bundles everything into a platform-ready `.zip` file + +## Architecture + +The system is organized into **8 core modules** and **5 utility modules** (~200 classes total): + +![Package Overview](docs/UML/exports/00_package_overview.png) + +| Module | Purpose | Key Classes | +|--------|---------|-------------| +| **CLICore** | Git-style command dispatcher | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 source-type extractors | `DocToSkillConverter`, `DocumentSkillBuilder` (shared build layer), `UnifiedScraper` | +| **Adaptors** | 20+ output platform formats | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | C3.x codebase analysis pipeline | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 GoF detectors | +| **Enhancement** | AI-powered skill improvement via `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Package, upload, install skills | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP server (40 tools) | `SkillSeekerMCPServer`, 10 tool modules | +| **Sync** | Doc change detection | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Utility modules: **Parsers** (28 CLI parsers), **Storage** (S3/GCS/Azure), **Embedding** (multi-provider vectors), **Benchmark** (performance), **Utilities** (16 shared helpers). + +Full UML diagrams: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML project: `docs/UML/skill_seekers.mdj` | HTML API reference: `docs/UML/html/` + +## 📋 Prerequisites + +**Before you start, make sure you have:** + +1. **Python 3.10 or higher** - [Download](https://www.python.org/downloads/) | Check: `python3 --version` +2. **Git** - [Download](https://git-scm.com/) | Check: `git --version` +3. **15-30 minutes** for first-time setup + +**First time user?** → **[Start Here: Bulletproof Quick Start Guide](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Uploading Skills to Claude + +Once your skill is packaged, you need to upload it to Claude: + +### Option 1: Automatic Upload (API-based) + +```bash +# Set your API key (one-time) +export ANTHROPIC_API_KEY=sk-ant-... + +# Package and upload automatically +skill-seekers package output/react/ --upload + +# OR upload existing .zip +skill-seekers upload output/react.zip +``` + +### Option 2: Manual Upload (No API Key) + +```bash +# Package skill +skill-seekers package output/react/ +# → Creates output/react.zip + +# Then manually upload: +# - Go to https://claude.ai/skills +# - Click "Upload Skill" +# - Select output/react.zip +``` + +### Option 3: MCP (Claude Code) + +``` +In Claude Code, just ask: +"Package and upload the React skill" +``` + +--- + +## 🤖 Installing to AI Agents + +Skill Seekers can automatically install skills to 19 AI coding agents. + +```bash +# Install to specific agent +skill-seekers install-agent output/react/ --agent cursor + +# Install to IBM Bob (project-local .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Install to all agents at once +skill-seekers install-agent output/react/ --agent all + +# Preview without installing +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Supported Agents + +| Agent | Path | Type | +|-------|------|------| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Project | +| **VS Code / Copilot** | `.github/skills/` | Project | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Project | +| **Cline** | `.cline/skills/` | Project | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Project | +| **Kilo Code** | `.kilo/skills/` | Project | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Project | + +--- + +## 🔌 MCP Integration (40 Tools) + +Skill Seekers ships an MCP server for use from Claude Code, Cursor, Windsurf, VS Code + Cline, or IntelliJ IDEA. + +```bash +# stdio mode (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP mode (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Auto-configure all agents at once +./setup_mcp.sh +``` + +**All 40 tools available:** +- **Core (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **Extended (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Vector DB (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Cloud (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Full Guide:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Configuration + +### Available Presets (24+) + +```bash +# List all presets +# skill-seekers list-configs # Not available in v3.7.0 +``` + +| Category | Presets | +|----------|---------| +| **Web Frameworks** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Game Development** | `godot`, `pygame`, `unity` | +| **Tools & DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Unified (Docs + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified`, and more | + +### Creating Your Own Config + +```bash +# Option 1: Interactive +skill-seekers create --interactive + +# Option 2: Copy and edit a preset +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Config File Structure + +```json +{ + "name": "myframework", + "description": "When to use this skill", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Where to Store Configs + +The tool searches in this order: +1. Exact path as provided +2. `./configs/` (current directory) +3. `~/.config/skill-seekers/configs/` (user config directory) +4. SkillSeekersWeb.com API (preset configs) + +--- + +## 📊 What Gets Created + +``` +output/ +├── godot_data/ # Scraped raw data +│ ├── pages/ # JSON files (one per page) +│ └── summary.json # Overview +│ +└── godot/ # The skill + ├── SKILL.md # Enhanced with real examples + ├── references/ # Categorized docs + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # Empty (add your own) + └── assets/ # Empty (add your own) +``` + +--- + +## 🛠Troubleshooting + +### No Content Extracted? +- Check your `main_content` selector +- Try: `article`, `main`, `div[role="main"]` + +### Data Exists But Won't Use It? +```bash +# Force re-scrape +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Categories Not Good? +Edit the config `categories` section with better keywords. + +### Want to Update Docs? +```bash +# Delete old data and re-scrape +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### Enhancement Not Working? +```bash +# Check if API key is set +echo $ANTHROPIC_API_KEY + +# Try LOCAL mode instead (uses Claude Code Max, no API key needed) +skill-seekers enhance output/react/ --mode LOCAL + +# Monitor background enhancement status +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub Rate Limit Issues? +```bash +# Set a GitHub token (5000 req/hour vs 60/hour anonymous) +export GITHUB_TOKEN=ghp_your_token_here + +# Or configure multiple profiles +skill-seekers config --github +``` + +--- + +## 📈 Performance + +| Task | Time | Notes | +|------|------|-------| +| Scraping (sync) | 15-45 min | First time only, thread-based | +| Scraping (async) | 5-15 min | 2-3x faster with `--async` flag | +| Building | 1-3 min | Fast rebuild from cache | +| Re-building | <1 min | With `--skip-scrape` | +| Enhancement (LOCAL) | 30-60 sec | Uses Claude Code Max | +| Enhancement (API) | 20-40 sec | Requires API key | +| Video (transcript) | 1-3 min | YouTube/local, transcript only | +| Video (visual) | 5-15 min | + OCR frame extraction | +| Packaging | 5-10 sec | Final .zip creation | + +--- + +## 🆕 New in v3.6.0 + +### Workflow Presets +Control analysis depth with `--preset`: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Fast, surface-level +skill-seekers create https://docs.react.dev/ --preset standard # Balanced (default) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Deep, exhaustive +``` + +### Lifecycle Flags +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Preview without scraping +skill-seekers create https://docs.react.dev/ --fresh # Ignore cache, full re-scrape +skill-seekers create https://docs.react.dev/ --resume # Resume interrupted job +skill-seekers create https://docs.react.dev/ --skip-scrape # Re-package existing output +``` + +### Health Check & Utilities +```bash +skill-seekers doctor # Diagnose installation & environment +skill-seekers sync-config # Detect config drift +skill-seekers stream # Streaming ingestion for large docs +skill-seekers update output/react/ # Incremental update +skill-seekers multilang # Multi-language skill generation +skill-seekers quality output/react/ # Quality report (add --threshold 7 to gate: non-zero exit below 7/10) +``` + +### RAG Chunking Options (package) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Marketplace Publishing +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Additional Optional Dependencies +| Extra | Install | Purpose | +|-------|---------|---------| +| `browser` | `pip install "skill-seekers[browser]"` | Headless Playwright for SPA sites | +| `embedding` | `pip install "skill-seekers[embedding]"` | Embedding server support | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` etc. | Cloud storage upload | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Combined vector DB upload deps | + +--- + +## 📚 Documentation + +### Getting Started +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **START HERE** if you're new! +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Quick start for experienced users +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Common issues and solutions +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - One-page cheat sheet + +### Architecture +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - UML architecture overview with 14 diagrams +- **[docs/UML/exports/](docs/UML/exports/)** - PNG diagram exports (package overview + 13 class diagrams) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Full HTML API reference (all classes, operations, attributes) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML project file (open with [StarUML](https://staruml.io/)) + +### Guides +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - Handle 10K-40K+ page docs +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI enhancement modes guide +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP integration setup +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Multi-source scraping +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Video extraction guide + +### Integration Guides +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - All RAG pipelines + +--- + +## 📠License + +MIT License - see [LICENSE](LICENSE) file for details + +--- + +Happy skill building! 🚀 + +--- + +## 🔒 Security + +[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 Sponsors + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — a full-modal, OpenAI-compatible AI inference platform. Skill Seekers supports it as a packaging/enhancement target via `--target atlas` with `ATLAS_API_KEY`. diff --git a/README.pt-BR.md b/README.pt-BR.md new file mode 100644 index 0000000..c801f5a --- /dev/null +++ b/README.pt-BR.md @@ -0,0 +1,1380 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | Português | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **Aviso de tradução automática** +> +> Este documento foi traduzido automaticamente por IA. Embora nos esforcemos para garantir a qualidade, podem existir expressões imprecisas. +> +> Ajude a melhorar a tradução através do [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260)! Seu feedback é muito valioso para nós. + +[![Versão](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![Licença: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![Integração MCP](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Testes Aprovados](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Quadro do Projeto](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![Versão PyPI](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Downloads](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Versão Python](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Site Oficial](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Seguir no Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 A camada de dados para sistemas de IA.** O Skill Seekers transforma sites de documentação, repositórios GitHub, PDFs, vídeos, Jupyter Notebooks, wikis e mais de 10 outros tipos de fontes em ativos de conhecimento estruturado — prontos para alimentar AI Skills (Claude, Gemini, OpenAI), pipelines RAG (LangChain, LlamaIndex, Pinecone) e assistentes de programação com IA (Cursor, Windsurf, Cline) em minutos, não horas. + +> 🌠**[Visite SkillSeekersWeb.com](https://skillseekersweb.com/)** - Navegue por mais de 24 configurações predefinidas, compartilhe suas configurações e acesse a documentação completa! + +> 📋 **[Veja o Roteiro de Desenvolvimento e Tarefas](https://github.com/users/yusufkaraaslan/projects/2)** - 134 tarefas em 10 categorias, escolha qualquer uma para contribuir! + +## 🌠Ecossistema + +Skill Seekers é um projeto multi-repositório. Aqui está onde tudo se encontra: + +| Repositório | Descrição | Links | +|------------|-----------|-------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | CLI principal e servidor MCP (este repo) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Website e documentação | [Site](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Repositório de configurações da comunidade | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action para CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Plugin Claude Code | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap para macOS | | + +> **Quer contribuir?** Os repos do website e configurações são ótimos pontos de partida para novos contribuidores! + +## 🧠 A Camada de Dados para Sistemas de IA + +**Skill Seekers é a camada universal de pré-processamento** que fica entre a documentação bruta e todo sistema de IA que a consome. Seja para construir Claude Skills, um pipeline RAG com LangChain ou um arquivo `.cursorrules` para o Cursor — a preparação dos dados é idêntica. Faça uma vez e exporte para todos os destinos. + +```bash +# Um comando → ativo de conhecimento estruturado +skill-seekers create https://docs.react.dev/ +# ou: skill-seekers create facebook/react +# ou: skill-seekers create ./my-project + +# Exporte para qualquer sistema de IA +skill-seekers package output/react --target claude # → Claude AI Skill (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → Diretório de skill IBM Bob +``` + +### O que é gerado + +| Saída | Destino | Para que serve | +|-------|---------|----------------| +| **Claude Skill** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini Skill** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, assistentes personalizados | +| **LangChain Documents** | `--target langchain` | Cadeias de QA, agentes, recuperadores | +| **LlamaIndex TextNodes** | `--target llama-index` | Motores de consulta, motores de chat | +| **Haystack Documents** | `--target haystack` | Pipelines RAG empresariais | +| **Pinecone-ready** (Markdown) | `--target markdown` | Upload de vetores | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Bancos de dados vetoriais locais | +| **IBM Bob Skill** (diretório) | `--target ibm-bob` | Skills de projeto/globais do IBM Bob | +| **Cursor** `.cursorrules` | `--target markdown` → copiar SKILL.md | `.cursorrules` do Cursor IDE | +| **Windsurf / Cline / Continue** | `--target claude` → copiar | VS Code, IntelliJ, Vim | + +### Por que isso importa + +- âš¡ **99% mais rápido** — Dias de preparação manual de dados → 15–45 minutos +- 🎯 **Qualidade de AI Skill** — Arquivos SKILL.md com mais de 500 linhas com exemplos, padrões e guias +- 📊 **Chunks prontos para RAG** — Chunking inteligente que preserva blocos de código e mantém o contexto +- 🎬 **Vídeos** — Extraia código, transcrições e conhecimento estruturado do YouTube e vídeos locais +- 🔄 **Multi-fonte** — Combine 18 tipos de fontes (docs, GitHub, PDFs, vídeos, notebooks, wikis e mais) em um único ativo de conhecimento +- 🌠**Uma preparação, todos os destinos** — Exporte o mesmo ativo para 21 plataformas sem precisar recoletá-lo +- ✅ **Testado em batalha** — Mais de 3.700 testes, mais de 24 presets de frameworks, pronto para produção + +## 🚀 Início Rápido (3 Comandos) + +```bash +# 1. Instalar +pip install skill-seekers + +# 2. Criar skill a partir de qualquer fonte +skill-seekers create https://docs.django.com/ + +# 3. Empacotar para sua plataforma de IA +skill-seekers package output/django --target claude +``` + +**Pronto!** Agora você tem `output/django-claude.zip` pronto para usar. + +```bash +# Use um agente de IA diferente para o aprimoramento (padrão: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ Escaneamento de projeto com IA (novo) + +Aponte o `scan` para qualquer projeto e um agente de IA lê seus manifestos, README, +Dockerfile/CI e imports amostrados do código-fonte — então emite uma configuração por +framework detectado mais um `-codebase.json` para o seu próprio código. Fixa a +versão detectada, de modo que reexecutar reporta as mudanças de versão: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Depois construa qualquer uma delas +skill-seekers create ./configs/scanned/react.json +``` + +Se uma detecção não tiver um preset existente, a IA gera uma configuração nova; +ao sair, você pode opcionalmente publicá-la de volta no [registro da comunidade](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### Outras Fontes (18 Suportadas) + +```bash +# Repositório GitHub +skill-seekers create facebook/react + +# Projeto local +skill-seekers create ./my-project + +# Documento PDF +skill-seekers create manual.pdf + +# Documento Word +skill-seekers create report.docx + +# E-book EPUB +skill-seekers create book.epub + +# Jupyter Notebook +skill-seekers create notebook.ipynb + +# Especificação OpenAPI +skill-seekers create openapi.yaml + +# Apresentação PowerPoint +skill-seekers create presentation.pptx + +# Documento AsciiDoc +skill-seekers create guide.adoc + +# Arquivo HTML local (auto-detectado pela extensão) +skill-seekers create page.html + +# Diretório inteiro de arquivos HTML (auto-detectado para diretórios predominantemente HTML) +skill-seekers create ./mirror_output/site/ + +# Forçar modo HTML em um diretório misto/com muito código +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# Feed RSS/Atom +skill-seekers create feed.rss + +# Man page +skill-seekers create curl.1 + +# Vídeo (YouTube, Vimeo ou arquivo local — requer skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# Primeira vez? Instale automaticamente as dependências visuais com detecção de GPU: +skill-seekers create --setup + +# Wiki Confluence +skill-seekers create --space-key TEAM --name wiki + +# Páginas Notion +skill-seekers create --database-id ... --name docs + +# Exportação de chat Slack/Discord +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Exporte para Qualquer Lugar + +```bash +# Empacote para múltiplas plataformas +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## O que é o Skill Seekers? + +O Skill Seekers é a **camada de dados para sistemas de IA**. Ele transforma 18 tipos de fontes — sites de documentação, repositórios GitHub, PDFs, vídeos, Jupyter Notebooks, documentos Word/EPUB/AsciiDoc, especificações OpenAPI, apresentações PowerPoint, feeds RSS, man pages, wikis Confluence, páginas Notion, exportações Slack/Discord e mais — em ativos de conhecimento estruturado para qualquer destino de IA: + +| Caso de Uso | O que você obtém | Exemplos | +|-------------|-----------------|----------| +| **AI Skills** | SKILL.md abrangente + referências | Claude Code, Gemini, GPT | +| **Pipelines RAG** | Documentos fragmentados com metadados ricos | LangChain, LlamaIndex, Haystack | +| **Bancos de Dados Vetoriais** | Dados pré-formatados prontos para upload | Pinecone, Chroma, Weaviate, FAISS | +| **Assistentes de Programação com IA** | Arquivos de contexto que sua IDE lê automaticamente | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 Documentação + +| Quero... | Leia isto | +|----------|-----------| +| **Começar rapidamente** | [Início Rápido](docs/getting-started/02-quick-start.md) - 3 comandos até a primeira skill | +| **Entender os conceitos** | [Conceitos Fundamentais](docs/user-guide/01-core-concepts.md) - Como funciona | +| **Coletar fontes** | [Guia de Coleta](docs/user-guide/02-scraping.md) - Todos os tipos de fontes | +| **Aprimorar skills** | [Guia de Aprimoramento](docs/user-guide/03-enhancement.md) - Aprimoramento com IA | +| **Exportar skills** | [Guia de Empacotamento](docs/user-guide/04-packaging.md) - Exportação para plataformas | +| **Consultar comandos** | [Referência CLI](docs/reference/CLI_REFERENCE.md) - Todos os 20 comandos | +| **Configurar** | [Formato de Configuração](docs/reference/CONFIG_FORMAT.md) - Especificação JSON | +| **Resolver problemas** | [Solução de Problemas](docs/user-guide/06-troubleshooting.md) - Problemas comuns | + +**Documentação completa:** [docs/README.md](docs/README.md) + +O Skill Seekers substitui dias de pré-processamento manual com os seguintes passos: + +1. **Coleta** — Docs, repositórios GitHub, bases de código locais, PDFs, vídeos, Jupyter Notebooks, wikis e mais de 10 outros tipos de fontes +2. **Análise** — Parsing AST profundo, detecção de padrões, extração de APIs +3. **Estruturação** — Arquivos de referência categorizados com metadados +4. **Aprimoramento** — Geração de SKILL.md com IA (Claude, Gemini ou local) +5. **Exportação** — 16 formatos específicos por plataforma a partir de um único ativo + +## Por que Usar o Skill Seekers? + +### Para Construtores de AI Skills (Claude, Gemini, OpenAI) + +- 🎯 **Skills de nível de produção** — Arquivos SKILL.md com mais de 500 linhas com exemplos de código, padrões e guias +- 🔄 **Workflows de aprimoramento** — Aplique `security-focus`, `architecture-comprehensive` ou presets YAML personalizados +- 🎮 **Qualquer domínio** — Motores de jogos (Godot, Unity), frameworks (React, Django), ferramentas internas +- 🔧 **Equipes** — Combine documentação interna + código em uma única fonte da verdade +- 📚 **Qualidade** — Aprimorado por IA com exemplos, referência rápida e orientação de navegação + +### Para Construtores de RAG e Engenheiros de IA + +- 🤖 **Dados prontos para RAG** — `Documents` LangChain, `TextNodes` LlamaIndex, `Documents` Haystack pré-fragmentados +- 🚀 **99% mais rápido** — Dias de pré-processamento → 15–45 minutos +- 📊 **Metadados inteligentes** — Categorias, fontes, tipos → melhor precisão de recuperação +- 🔄 **Multi-fonte** — Combine docs + GitHub + PDFs + vídeos em um pipeline +- 🌠**Agnóstico de plataforma** — Exporte para qualquer banco vetorial ou framework sem recoleta + +### Para Usuários de Assistentes de Programação com IA + +- 💻 **Cursor / Windsurf / Cline** — Gere `.cursorrules` / `.windsurfrules` / `.clinerules` automaticamente +- 🎯 **Contexto persistente** — A IA "conhece" seus frameworks sem prompts repetidos +- 📚 **Sempre atualizado** — Atualize o contexto em minutos quando a documentação mudar + +## Funcionalidades Principais + +### 🌠Coleta de Documentação +- ✅ **Descoberta SPA Inteligente** - Descoberta em três camadas para sites SPA em JavaScript (sitemap.xml → llms.txt → renderização com navegador headless) +- ✅ **Suporte a llms.txt** - Detecta e usa automaticamente arquivos de documentação prontos para LLM (10x mais rápido) +- ✅ **Scraper Universal** - Funciona com QUALQUER site de documentação +- ✅ **Categorização Inteligente** - Organiza conteúdo automaticamente por tópico +- ✅ **Detecção de Linguagem de Código** - Reconhece Python, JavaScript, C++, GDScript, etc. +- ✅ **Mais de 24 Presets Prontos** - Godot, React, Vue, Django, FastAPI e mais + +### 📄 Suporte a PDF +- ✅ **Extração Básica de PDF** - Extraia texto, código e imagens de arquivos PDF +- ✅ **OCR para PDFs Digitalizados** - Extraia texto de documentos digitalizados +- ✅ **PDFs Protegidos por Senha** - Processe PDFs criptografados +- ✅ **Extração de Tabelas** - Extraia tabelas complexas de PDFs +- ✅ **Processamento Paralelo** - 3x mais rápido para PDFs grandes +- ✅ **Cache Inteligente** - 50% mais rápido em re-execuções + +### 🎬 Extração de Vídeo +- ✅ **YouTube e Vídeos Locais** - Extraia transcrições, código na tela e conhecimento estruturado de vídeos +- ✅ **Análise Visual de Frames** - Extração OCR de editores de código, terminais, slides e diagramas +- ✅ **Detecção Automática de GPU** - Instala automaticamente a versão correta do PyTorch (CUDA/ROCm/MPS/CPU) +- ✅ **Aprimoramento com IA** - Dois passes: limpeza de artefatos OCR + geração de SKILL.md polido +- ✅ **Recorte Temporal** - Extraia seções específicas com `--start-time` e `--end-time` +- ✅ **Suporte a Playlists** - Processe em lote todos os vídeos de uma playlist do YouTube +- ✅ **Fallback com Vision API** - Use Claude Vision para frames OCR de baixa confiança + +### 🙠Análise de Repositórios GitHub +- ✅ **Análise Profunda de Código** - Parsing AST para Python, JavaScript, TypeScript, Java, C++, Go +- ✅ **Extração de API** - Funções, classes, métodos com parâmetros e tipos +- ✅ **Metadados do Repositório** - README, árvore de arquivos, distribuição de linguagens, stars/forks +- ✅ **GitHub Issues e PRs** - Obtenha issues abertas/fechadas com labels e milestones +- ✅ **CHANGELOG e Releases** - Extração automática do histórico de versões +- ✅ **Detecção de Conflitos** - Compare APIs documentadas vs implementação real do código +- ✅ **Integração MCP** - Linguagem natural: "Colete o repositório GitHub facebook/react" + +### 🔄 Coleta Unificada Multi-Fonte +- ✅ **Combine Múltiplas Fontes** - Misture documentação + GitHub + PDF em uma skill +- ✅ **Detecção de Conflitos** - Encontra automaticamente discrepâncias entre docs e código +- ✅ **Mesclagem Inteligente** - Resolução de conflitos baseada em regras ou com IA +- ✅ **Relatórios Transparentes** - Comparação lado a lado com avisos âš ï¸ +- ✅ **Análise de Lacunas na Documentação** - Identifica docs desatualizadas e funcionalidades não documentadas +- ✅ **Fonte Única da Verdade** - Uma skill mostrando tanto a intenção (docs) quanto a realidade (código) +- ✅ **Retrocompatível** - Configurações legadas de fonte única continuam funcionando + +### 🤖 Suporte a Múltiplas Plataformas LLM +- ✅ **12 Plataformas LLM** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown Genérico, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **Coleta Universal** - A mesma documentação funciona para todas as plataformas +- ✅ **Empacotamento Específico por Plataforma** - Formatos otimizados para cada LLM +- ✅ **Exportação com Um Comando** - Flag `--target` seleciona a plataforma +- ✅ **Dependências Opcionais** - Instale apenas o que precisa +- ✅ **100% Retrocompatível** - Workflows existentes do Claude permanecem inalterados + +| Plataforma | Formato | Upload | Aprimoramento | API Key | Endpoint Personalizado | +|------------|---------|--------|---------------|---------|----------------------| +| **Claude AI** | ZIP + YAML | ✅ Automático | ✅ Sim | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Automático | ✅ Sim | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Automático | ✅ Sim | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Automático | ✅ Sim | MINIMAX_API_KEY | - | +| **Markdown Genérico** | ZIP | ⌠Manual | ⌠Não | - | - | + +```bash +# Claude (padrão - sem alterações necessárias!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Markdown Genérico (exportação universal) +skill-seekers package output/react/ --target markdown +# Use os arquivos markdown diretamente em qualquer LLM +``` + +
+🔧 Use seu próprio provedor de IA (endpoints compatíveis com OpenAI + assinaturas, sem necessidade de créditos da Anthropic) + +A etapa opcional de **aprimoramento** com IA (usada por `create`, `scan` e `enhance`) **não** requer uma chave da Anthropic. Você tem três formas de alimentá-la: + +**1. Use uma assinatura que você já paga — sem créditos de API (modo de agente LOCAL)** + +O Skill Seekers pode delegar para uma CLI de agente de programação na qual você já está logado, de modo que o aprimoramento roda no seu plano existente em vez de tokens de API cobrados: + +```bash +skill-seekers create --agent codex # CLI OpenAI Codex → seu ChatGPT Plus +skill-seekers create --agent claude # Claude Code → seu Claude Pro/Max +``` + +Agentes suportados: `claude`, `codex`, `copilot`, `opencode`, `kimi` e `custom` +(combine `--agent custom` com `--agent-cmd " ..."` para usar qualquer outra ferramenta). + +**2. Qualquer provedor compatível com OpenAI (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Todos eles expõem um endpoint `/v1` compatível com OpenAI. Aponte o Skill Seekers para um deles com três variáveis de ambiente — ele detecta `OPENAI_API_KEY`, e o SDK da OpenAI respeita `OPENAI_BASE_URL` automaticamente: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # endpoint do provedor (veja a tabela) +export OPENAI_MODEL="" # obrigatório — o padrão gpt-4o não existirá em outros provedores +skill-seekers create +``` + +| Provedor | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> A detecção de provedor escolhe a **primeira** variável de ambiente de API key que encontrar (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Defina `SKILL_SEEKER_PROVIDER` para forçar um provedor específico, ou garanta que as chaves de prioridade mais alta não estejam definidas. + +**3. Endpoints compatíveis com Claude (ex.: GLM, proxies)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) e Kimi/Moonshot (`MOONSHOT_API_KEY`) também são suportados nativamente. Consulte a **[Referência de Variáveis de Ambiente](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** para a lista completa, incluindo substituições de modelo por provedor. + +
+ +**Instalação:** +```bash +# Instalar com suporte ao Gemini +pip install skill-seekers[gemini] + +# Instalar com suporte ao OpenAI +pip install skill-seekers[openai] + +# Instalar com suporte ao MiniMax +pip install skill-seekers[minimax] + +# Instalar com todas as plataformas LLM +pip install skill-seekers[all-llms] +``` + +### 🔗 Integrações com Frameworks RAG + +- ✅ **LangChain Documents** - Exportação direta para formato `Document` com `page_content` + metadados + - Ideal para: Cadeias de QA, recuperadores, armazenamentos vetoriais, agentes + - Exemplo: [Pipeline RAG LangChain](examples/langchain-rag-pipeline/) + - Guia: [Integração LangChain](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - Exportação para formato `TextNode` com IDs únicos + embeddings + - Ideal para: Motores de consulta, motores de chat, contexto de armazenamento + - Exemplo: [Motor de Consulta LlamaIndex](examples/llama-index-query-engine/) + - Guia: [Integração LlamaIndex](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Formato Pinecone-Ready** - Otimizado para upload em bancos de dados vetoriais + - Ideal para: Busca vetorial em produção, busca semântica, busca híbrida + - Exemplo: [Upload Pinecone](examples/pinecone-upsert/) + - Guia: [Integração Pinecone](docs/integrations/PINECONE.md) + +**Exportação Rápida:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (Universal) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Guia Completo de Pipeline RAG:** [Documentação de Pipelines RAG](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 Integrações com Assistentes de Programação com IA + +Transforme qualquer documentação de framework em contexto especializado de programação para mais de 4 assistentes de IA: + +- ✅ **Cursor IDE** - Gere `.cursorrules` para sugestões de código com IA + - Ideal para: Geração de código específica de framework, padrões consistentes + - Funciona com: Cursor IDE (fork do VS Code) + - Guia: [Integração Cursor](docs/integrations/CURSOR.md) + - Exemplo: [Cursor React Skill](examples/cursor-react-skill/) + +- ✅ **Windsurf** - Personalize o contexto do assistente de IA do Windsurf com `.windsurfrules` + - Ideal para: Assistência de IA nativa na IDE, programação baseada em fluxo + - Funciona com: Windsurf IDE da Codeium + - Guia: [Integração Windsurf](docs/integrations/WINDSURF.md) + - Exemplo: [Contexto FastAPI Windsurf](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - Prompts de sistema + MCP para agente VS Code + - Ideal para: Geração de código agentiva no VS Code + - Funciona com: Extensão Cline para VS Code + - Guia: [Integração Cline](docs/integrations/CLINE.md) + - Exemplo: [Assistente Django Cline](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - Servidores de contexto para IA agnóstica de IDE + - Ideal para: Ambientes multi-IDE (VS Code, JetBrains, Vim), provedores de LLM personalizados + - Funciona com: Qualquer IDE com plugin Continue.dev + - Guia: [Integração Continue](docs/integrations/CONTINUE_DEV.md) + - Exemplo: [Contexto Universal Continue](examples/continue-dev-universal/) + +**Exportação Rápida para Ferramentas de Programação com IA:** +```bash +# Para qualquer assistente de programação com IA (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # ou --target markdown + +# Copie para seu projeto (exemplo para Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Ou para Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Ou para Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# Ou para Continue.dev (servidor HTTP) +python examples/continue-dev-universal/context_server.py +# Configure em ~/.continue/config.json +``` + +**Hub de Integrações:** [Todas as Integrações com Sistemas de IA](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Arquitetura GitHub de Três Fluxos +- ✅ **Análise em Três Fluxos** - Divide repositórios GitHub em fluxos de Código, Docs e Insights +- ✅ **Analisador de Codebase Unificado** - Funciona com URLs do GitHub E caminhos locais +- ✅ **C3.x como Profundidade de Análise** - Escolha 'basic' (1-2 min) ou 'c3x' (20-60 min) +- ✅ **Geração Aprimorada de Router** - Metadados do GitHub, quick start do README, problemas comuns +- ✅ **Integração de Issues** - Principais problemas e soluções dos GitHub Issues +- ✅ **Keywords de Roteamento Inteligente** - Labels do GitHub com peso 2x para melhor detecção de tópicos + +**Explicação dos Três Fluxos:** +- **Fluxo 1: Código** - Análise profunda C3.x (padrões, exemplos, guias, configs, arquitetura) +- **Fluxo 2: Docs** - Documentação do repositório (README, CONTRIBUTING, docs/*.md) +- **Fluxo 3: Insights** - Conhecimento da comunidade (issues, labels, stars, forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# Analise repositório GitHub com os três fluxos +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # ou "basic" para análise rápida + fetch_github_metadata=True +) + +# Acesse o fluxo de código (análise C3.x) +print(f"Design patterns: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Test examples: {result.code_analysis['c3_2_examples_count']}") + +# Acesse o fluxo de docs (documentação do repositório) +print(f"README: {result.github_docs['readme'][:100]}") + +# Acesse o fluxo de insights (metadados do GitHub) +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"Common issues: {len(result.github_insights['common_problems'])}") +``` + +**Documentação completa**: [Resumo da Implementação de Três Fluxos](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Gerenciamento Inteligente de Rate Limit e Configuração +- ✅ **Sistema de Configuração Multi-Token** - Gerencie múltiplas contas GitHub (pessoal, trabalho, OSS) + - Armazenamento seguro de configurações em `~/.config/skill-seekers/config.json` (permissões 600) + - Estratégias de rate limit por perfil: `prompt`, `wait`, `switch`, `fail` + - Timeout configurável por perfil (padrão: 30 min, evita esperas indefinidas) + - Cadeia de fallback inteligente: Argumento CLI → Variável de ambiente → Arquivo de configuração → Prompt + - Gerenciamento de API keys para Claude, Gemini, OpenAI +- ✅ **Assistente de Configuração Interativo** - Interface de terminal elegante para fácil configuração + - Integração com navegador para criação de tokens (abre automaticamente GitHub, etc.) + - Validação de tokens e teste de conexão + - Exibição visual de status com código de cores +- ✅ **Gerenciador Inteligente de Rate Limit** - Chega de esperas indefinidas! + - Aviso prévio sobre rate limits (60/hora vs 5000/hora) + - Detecção em tempo real das respostas da API do GitHub + - Contadores regressivos ao vivo com progresso + - Troca automática de perfil quando limitado + - Quatro estratégias: prompt (perguntar), wait (contagem regressiva), switch (tentar outro), fail (abortar) +- ✅ **Capacidade de Retomada** - Continue trabalhos interrompidos + - Salvamento automático de progresso em intervalos configuráveis (padrão: 60 seg) + - Liste todos os trabalhos retomáveis com detalhes de progresso + - Limpeza automática de trabalhos antigos (padrão: 7 dias) +- ✅ **Suporte CI/CD** - Modo não interativo para automação + - Flag `--non-interactive` falha rapidamente sem prompts + - Flag `--profile` para selecionar conta GitHub específica + - Mensagens de erro claras para logs de pipeline + +**Configuração Rápida:** +```bash +# Configuração única (5 minutos) +skill-seekers config --github + +# Use perfil específico para repos privados +skill-seekers create mycompany/private-repo --profile work + +# Modo CI/CD (falha rápida, sem prompts) +skill-seekers create owner/repo --non-interactive + +# Retomar trabalho interrompido +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Estratégias de Rate Limit Explicadas:** +- **prompt** (padrão) - Pergunta o que fazer quando limitado (esperar, trocar, configurar token, cancelar) +- **wait** - Espera automaticamente com contador regressivo (respeita timeout) +- **switch** - Tenta automaticamente o próximo perfil disponível (para configurações multi-conta) +- **fail** - Falha imediatamente com erro claro (ideal para CI/CD) + +### 🎯 Bootstrap Skill - Auto-Hospedagem + +Gere o skill-seekers como uma skill para uso dentro do seu agente de IA (Claude Code, Kimi, Codex, etc.): + +```bash +# Gere a skill +./scripts/bootstrap_skill.sh + +# Instale no Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**O que você obtém:** +- ✅ **Documentação completa da skill** - Todos os comandos CLI e padrões de uso +- ✅ **Referência de comandos CLI** - Cada ferramenta e suas opções documentadas +- ✅ **Exemplos de início rápido** - Workflows comuns e melhores práticas +- ✅ **Documentação de API auto-gerada** - Análise de código, padrões e exemplos + +### 🔠Repositórios Privados de Configuração +- ✅ **Fontes de Config Baseadas em Git** - Busque configs de repositórios Git privados/de equipe +- ✅ **Gerenciamento Multi-Fonte** - Registre repositórios ilimitados do GitHub, GitLab, Bitbucket +- ✅ **Colaboração em Equipe** - Compartilhe configs personalizadas entre equipes de 3-5 pessoas +- ✅ **Suporte Empresarial** - Escale para mais de 500 desenvolvedores com resolução baseada em prioridade +- ✅ **Autenticação Segura** - Tokens em variáveis de ambiente (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Cache Inteligente** - Clone uma vez, receba atualizações automaticamente +- ✅ **Modo Offline** - Trabalhe com configs em cache quando estiver offline + +### 🤖 Análise de Codebase (C3.x) + +**C3.4: Extração de Padrões de Configuração com Aprimoramento por IA** +- ✅ **9 Formatos de Config** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 Tipos de Padrão** - Banco de dados, API, logging, cache, e-mail, autenticação, configurações de servidor +- ✅ **Aprimoramento por IA** - Análise de IA opcional em modo duplo (API + LOCAL) + - Explica o que cada config faz + - Sugere melhores práticas e melhorias + - **Análise de segurança** - Encontra segredos hardcoded, credenciais expostas +- ✅ **Auto-Documentação** - Gera documentação JSON + Markdown de todas as configs +- ✅ **Integração MCP** - Ferramenta `extract_config_patterns` com suporte a aprimoramento + +**C3.3: Guias How-To Aprimorados por IA** +- ✅ **Aprimoramento Abrangente por IA** - Transforma guias básicos em tutoriais profissionais +- ✅ **5 Melhorias Automáticas** - Descrições de etapas, troubleshooting, pré-requisitos, próximos passos, casos de uso +- ✅ **Suporte Dual-Mode** - Modo API (Claude API) ou modo LOCAL (Claude Code CLI) +- ✅ **Sem Custo com Modo LOCAL** - Aprimoramento GRATUITO usando seu plano Claude Code Max +- ✅ **Transformação de Qualidade** - Templates de 75 linhas → guias abrangentes de mais de 500 linhas + +**Uso:** +```bash +# Análise rápida (1-2 min, apenas funcionalidades básicas) +skill-seekers scan tests/ --quick + +# Análise abrangente com IA (20-60 min, todas as funcionalidades) +skill-seekers scan tests/ --comprehensive + +# Com aprimoramento por IA +skill-seekers scan tests/ --enhance +``` + +**Documentação Completa:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 Presets de Workflow de Aprimoramento + +Pipelines de aprimoramento reutilizáveis definidos em YAML que controlam como a IA transforma sua documentação bruta em uma skill polida. + +- ✅ **5 Presets Incluídos** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **Presets Definidos pelo Usuário** — Adicione workflows personalizados em `~/.config/skill-seekers/workflows/` +- ✅ **Múltiplos Workflows** — Encadeie dois ou mais workflows em um comando +- ✅ **CLI Totalmente Gerenciada** — Liste, inspecione, copie, adicione, remova e valide workflows + +```bash +# Aplique um único workflow +skill-seekers create ./my-project --enhance-workflow security-focus + +# Encadeie múltiplos workflows (aplicados em ordem) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Gerencie presets +skill-seekers workflows list # Liste todos (incluídos + usuário) +skill-seekers workflows show security-focus # Exiba conteúdo YAML +skill-seekers workflows copy security-focus # Copie para diretório do usuário para edição +skill-seekers workflows add ./my-workflow.yaml # Instale um preset personalizado +skill-seekers workflows remove my-workflow # Remova um preset do usuário +skill-seekers workflows validate security-focus # Valide a estrutura do preset + +# Copie múltiplos de uma vez +skill-seekers workflows copy security-focus minimal api-documentation + +# Adicione múltiplos arquivos de uma vez +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Remova múltiplos de uma vez +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**Formato de preset YAML:** +```yaml +name: security-focus +description: "Security-focused review: vulnerabilities, auth, data handling" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Review for OWASP top 10 and common security vulnerabilities..." + - name: auth-review + type: custom + prompt: "Examine authentication and authorisation patterns..." + uses_history: true +``` + +### âš¡ Performance e Escalabilidade +- ✅ **Modo Assíncrono** - Coleta 2-3x mais rápida com async/await (use a flag `--async`) +- ✅ **Suporte a Documentações Grandes** - Processe docs de 10K-40K+ páginas com divisão inteligente +- ✅ **Skills Router/Hub** - Roteamento inteligente para sub-skills especializadas +- ✅ **Coleta Paralela** - Processe múltiplas skills simultaneamente +- ✅ **Checkpoint/Retomada** - Nunca perca progresso em coletas longas +- ✅ **Sistema de Cache** - Colete uma vez, reconstrua instantaneamente + +### 🤖 Geração de Skills Agnóstica ao Agente +- ✅ **Suporte Multi-Agente** - Gere skills para Claude, Kimi, Codex, Copilot, OpenCode ou qualquer agente personalizado via flag `--agent` +- ✅ **Comandos de Agente Personalizados** - Use `--agent-cmd` para especificar um comando CLI de agente personalizado para o aprimoramento +- ✅ **Flags Universais** - `--agent` e `--agent-cmd` disponíveis em todos os comandos (create, scrape, github, pdf, etc.) + +### 📦 Pipeline do Marketplace +- ✅ **Publicação no Marketplace** - Publique skills em repositórios do marketplace de plugins do Claude Code +- ✅ **Pipeline de Ponta a Ponta** - Da fonte de documentação à entrada publicada no marketplace + +### ✅ Garantia de Qualidade +- ✅ **Totalmente Testado** - Mais de 3.700 testes com cobertura abrangente + +--- + +## 📦 Instalação + +```bash +# Instalação básica (coleta de documentação, análise GitHub, PDF, empacotamento) +pip install skill-seekers + +# Com suporte a todas as plataformas LLM +pip install skill-seekers[all-llms] + +# Com servidor MCP +pip install skill-seekers[mcp] + +# Tudo incluído +pip install skill-seekers[all] +``` + +**Precisa de ajuda para escolher?** Execute o assistente de configuração: +```bash +skill-seekers-setup +``` + +### Opções de Instalação + +| Instalação | Funcionalidades | +|-----------|----------------| +| `pip install skill-seekers` | Coleta, análise GitHub, PDF, todas as plataformas | +| `pip install skill-seekers[gemini]` | + Suporte ao Google Gemini | +| `pip install skill-seekers[openai]` | + Suporte ao OpenAI ChatGPT | +| `pip install skill-seekers[all-llms]` | + Todas as plataformas LLM | +| `pip install skill-seekers[mcp]` | + Servidor MCP para Claude Code, Cursor, etc. | +| `pip install skill-seekers[video]` | + Extração de transcrições e metadados do YouTube/Vimeo | +| `pip install skill-seekers[video-full]` | + Transcrição Whisper e extração visual de frames | +| `pip install skill-seekers[jupyter]` | + Suporte a Jupyter Notebook | +| `pip install skill-seekers[pptx]` | + Suporte a PowerPoint | +| `pip install skill-seekers[confluence]` | + Suporte a wiki Confluence | +| `pip install skill-seekers[notion]` | + Suporte a páginas Notion | +| `pip install skill-seekers[rss]` | + Suporte a feeds RSS/Atom | +| `pip install skill-seekers[chat]` | + Suporte a exportação de chat Slack/Discord | +| `pip install skill-seekers[asciidoc]` | + Suporte a documentos AsciiDoc | +| `pip install skill-seekers[all]` | Tudo habilitado | + +> **Dependências visuais de vídeo (detecção de GPU):** Após instalar `skill-seekers[video-full]`, execute +> `skill-seekers create --setup` para detectar automaticamente sua GPU e instalar a variante +> correta do PyTorch + easyocr. Esta é a forma recomendada de instalar as dependências de extração visual. + +--- + +## 🚀 Workflow de Instalação com Um Comando + +**A forma mais rápida de ir da configuração à skill enviada — automação completa:** + +```bash +# Instale a skill React a partir das configs oficiais (upload automático para o Claude) +skill-seekers install --config react + +# Instale a partir de arquivo de configuração local +skill-seekers install --config configs/custom.json + +# Instale sem fazer upload (apenas empacotar) +skill-seekers install --config django --no-upload + +# Visualize o workflow sem executar +skill-seekers install --config react --dry-run +``` + +**Tempo:** 20-45 minutos no total | **Qualidade:** Pronto para produção (9/10) | **Custo:** Gratuito + +**Fases executadas:** +``` +📥 FASE 1: Buscar Configuração (se nome da config for fornecido) +📖 FASE 2: Coletar Documentação +✨ FASE 3: Aprimoramento com IA (OBRIGATÓRIO - sem opção de pular) +📦 FASE 4: Empacotar Skill +â˜ï¸ FASE 5: Upload para o Claude (opcional, requer API key) +``` + +**Requisitos:** +- Variável de ambiente ANTHROPIC_API_KEY (para upload automático) +- Plano Claude Code Max (para aprimoramento com IA local), ou use `--agent` para selecionar um agente de IA diferente + +--- + +## 📊 Matriz de Funcionalidades + +O Skill Seekers suporta **12 plataformas LLM**, **8 destinos RAG/vetoriais**, **18 tipos de fontes** e paridade completa de funcionalidades em todos os destinos. + +**Plataformas:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Markdown Genérico, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Tipos de Fontes:** Sites de documentação, repositórios GitHub, PDFs, Word (.docx), EPUB, Vídeo, Codebases locais, Jupyter Notebooks, HTML local, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), feeds RSS/Atom, Man pages, wikis Confluence, páginas Notion, exportações de chat Slack/Discord + +Consulte a [Matriz Completa de Funcionalidades](docs/reference/FEATURE_MATRIX.md) para suporte detalhado por plataforma e funcionalidade. + +### Comparação Rápida de Plataformas + +| Funcionalidade | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------------|--------|--------|--------|---------|----------| +| Formato | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Upload | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Manual | +| Aprimoramento | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠Nenhum | +| Todos os Modos de Skill | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Exemplos de Uso + +### Coleta de Documentação + +```bash +# Coletar site de documentação +skill-seekers create --config configs/react.json + +# Coleta rápida sem configuração +skill-seekers create https://react.dev --name react + +# Com modo assíncrono (3x mais rápido) +skill-seekers create --config configs/godot.json --async --workers 8 + +# Use um agente de IA específico para o aprimoramento +skill-seekers create --config configs/react.json --agent kimi +``` + +### Extração de PDF + +```bash +# Extração básica de PDF +skill-seekers create --pdf docs/manual.pdf --name myskill + +# Funcionalidades avançadas +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Extrair tabelas + --parallel \ # Processamento paralelo rápido + --workers 8 # Usar 8 núcleos de CPU + +# PDFs digitalizados (requer: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Extração de Vídeo + +```bash +# Instalar suporte a vídeo +pip install skill-seekers[video] # Transcrições + metadados +pip install skill-seekers[video-full] # + Whisper + extração visual de frames + +# Detectar GPU automaticamente e instalar dependências visuais (PyTorch + easyocr) +skill-seekers create --setup + +# Extrair de vídeo do YouTube +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Extrair de uma playlist do YouTube +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Extrair de um arquivo de vídeo local +skill-seekers create --video-file recording.mp4 --name myrecording + +# Extrair com análise visual de frames (requer dependências video-full) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# Com aprimoramento por IA (limpa OCR + gera SKILL.md polido) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Recortar seção específica de um vídeo (suporta segundos, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Usar Vision API para frames OCR de baixa confiança (requer ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Reconstruir skill a partir de dados previamente extraídos (pular download) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Guia completo:** Consulte [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) para referência CLI completa, +> detalhes do pipeline visual, opções de aprimoramento com IA e troubleshooting. + +### Análise de Repositórios GitHub + +```bash +# Coleta básica de repositório +skill-seekers create facebook/react + +# Com autenticação (rate limits mais altos) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Personalizar o que incluir +skill-seekers create django/django \ + --include-issues \ # Extrair GitHub Issues + --max-issues 100 \ # Limitar quantidade de issues + --include-changelog # Extrair CHANGELOG.md +``` + +### Coleta Unificada Multi-Fonte + +**Combine documentação + GitHub + PDF em uma skill unificada com detecção de conflitos:** + +```bash +# Use configs unificadas existentes +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# Ou crie uma config unificada +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**A Detecção de Conflitos encontra automaticamente:** +- 🔴 **Ausente no código** (alta): Documentado mas não implementado +- 🟡 **Ausente nos docs** (média): Implementado mas não documentado +- âš ï¸ **Assinatura incompatível**: Parâmetros/tipos diferentes +- â„¹ï¸ **Descrição incompatível**: Explicações diferentes + +**Guia Completo:** Consulte [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) para documentação completa. + +### Repositórios Privados de Configuração + +**Compartilhe configs personalizadas entre equipes usando repositórios Git privados:** + +```bash +# Opção 1: Usando ferramentas MCP (recomendado) +# Registre o repositório privado da sua equipe +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Busque config do repositório da equipe +fetch_config(source="team", config_name="internal-api") +``` + +**Plataformas Suportadas:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Guia Completo:** Consulte [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) para documentação completa. + +## Como Funciona + +```mermaid +graph LR + A[Site de Documentação] --> B[Skill Seekers] + B --> C[Coletor] + B --> D[Aprimoramento IA] + B --> E[Empacotador] + C --> F[Referências Organizadas] + D --> F + F --> E + E --> G[AI Skill .zip] + G --> H[Upload para a plataforma de IA] +``` + +0. **Detectar llms.txt** - Verifica primeiro por llms-full.txt, llms.txt, llms-small.txt (parte da Descoberta SPA Inteligente) +1. **Coletar**: Extrai todas as páginas da documentação +2. **Categorizar**: Organiza o conteúdo em tópicos (API, guias, tutoriais, etc.) +3. **Aprimorar**: IA analisa os docs e cria SKILL.md abrangente com exemplos (suporta múltiplos agentes via `--agent`) +4. **Empacotar**: Empacota tudo em um arquivo `.zip` pronto para a plataforma + +## Arquitetura + +O sistema é organizado em **8 módulos principais** e **5 módulos utilitários** (~200 classes no total): + +![Visão Geral dos Pacotes](docs/UML/exports/00_package_overview.png) + +| Módulo | Propósito | Classes principais | +|--------|-----------|--------------------| +| **CLICore** | Despachante de comandos no estilo Git | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 extratores por tipo de fonte | `DocToSkillConverter`, `DocumentSkillBuilder` (camada de construção compartilhada), `UnifiedScraper` | +| **Adaptors** | 20+ formatos de plataformas de saída | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | Pipeline de análise de codebase C3.x | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 detectores GoF | +| **Enhancement** | Aprimoramento de skills com IA via `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Empacotar, enviar e instalar skills | `PackageSkill`, `InstallAgent` | +| **MCP** | Servidor FastMCP (40 ferramentas) | `SkillSeekerMCPServer`, 10 módulos de ferramentas | +| **Sync** | Detecção de mudanças na documentação | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Módulos utilitários: **Parsers** (28 parsers CLI), **Storage** (S3/GCS/Azure), **Embedding** (vetores multi-provedor), **Benchmark** (performance), **Utilities** (16 helpers compartilhados). + +Diagramas UML completos: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | Projeto StarUML: `docs/UML/skill_seekers.mdj` | Referência de API em HTML: `docs/UML/html/` + +## 📋 Pré-requisitos + +**Antes de começar, certifique-se de ter:** + +1. **Python 3.10 ou superior** - [Download](https://www.python.org/downloads/) | Verificar: `python3 --version` +2. **Git** - [Download](https://git-scm.com/) | Verificar: `git --version` +3. **15-30 minutos** para a configuração inicial + +**Primeira vez?** → **[Comece Aqui: Guia de Início Rápido Infalível](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Enviando Skills para o Claude + +Depois que sua skill estiver empacotada, você precisa enviá-la para o Claude: + +### Opção 1: Upload Automático (via API) + +```bash +# Configure sua API key (uma única vez) +export ANTHROPIC_API_KEY=sk-ant-... + +# Empacote e faça upload automaticamente +skill-seekers package output/react/ --upload + +# OU faça upload de um .zip existente +skill-seekers upload output/react.zip +``` + +### Opção 2: Upload Manual (Sem API Key) + +```bash +# Empacote a skill +skill-seekers package output/react/ +# → Cria output/react.zip + +# Depois faça upload manualmente: +# - Acesse https://claude.ai/skills +# - Clique em "Upload Skill" +# - Selecione output/react.zip +``` + +### Opção 3: MCP (Claude Code) + +``` +No Claude Code, basta pedir: +"Empacote e faça upload da skill React" +``` + +--- + +## 🤖 Instalando em Agentes de IA + +O Skill Seekers pode instalar automaticamente skills em 19 agentes de programação com IA. + +```bash +# Instalar em agente específico +skill-seekers install-agent output/react/ --agent cursor + +# Instalar no IBM Bob (local ao projeto: .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Instalar em todos os agentes de uma vez +skill-seekers install-agent output/react/ --agent all + +# Visualizar sem instalar +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Agentes Suportados + +| Agente | Caminho | Tipo | +|--------|---------|------| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Projeto | +| **VS Code / Copilot** | `.github/skills/` | Projeto | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Projeto | +| **Cline** | `.cline/skills/` | Projeto | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Projeto | +| **Kilo Code** | `.kilo/skills/` | Projeto | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Projeto | + +--- + +## 🔌 Integração MCP (40 Ferramentas) + +O Skill Seekers inclui um servidor MCP para uso com Claude Code, Cursor, Windsurf, VS Code + Cline ou IntelliJ IDEA. + +```bash +# Modo stdio (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# Modo HTTP (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Configurar automaticamente todos os agentes de uma vez +./setup_mcp.sh +``` + +**Todas as 40 ferramentas disponíveis:** +- **Núcleo (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **Estendidas (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Bancos Vetoriais (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Nuvem (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Guia Completo:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Configuração + +### Presets Disponíveis (24+) + +```bash +# Listar todos os presets +# skill-seekers list-configs # Não disponível na v3.7.0 +``` + +| Categoria | Presets | +|-----------|---------| +| **Frameworks Web** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Desenvolvimento de Jogos** | `godot`, `pygame`, `unity` | +| **Ferramentas e DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Unificados (Docs + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` e mais | + +### Criando Sua Própria Configuração + +```bash +# Opção 1: Interativo +skill-seekers create --interactive + +# Opção 2: Copie e edite um preset +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Estrutura do Arquivo de Configuração + +```json +{ + "name": "myframework", + "description": "When to use this skill", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Onde Armazenar Configurações + +A ferramenta busca na seguinte ordem: +1. Caminho exato fornecido +2. `./configs/` (diretório atual) +3. `~/.config/skill-seekers/configs/` (diretório de configuração do usuário) +4. API SkillSeekersWeb.com (configurações predefinidas) + +--- + +## 📊 O que é Criado + +``` +output/ +├── godot_data/ # Dados brutos coletados +│ ├── pages/ # Arquivos JSON (um por página) +│ └── summary.json # Resumo geral +│ +└── godot/ # A skill + ├── SKILL.md # Aprimorado com exemplos reais + ├── references/ # Docs categorizados + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # Vazio (adicione os seus) + └── assets/ # Vazio (adicione os seus) +``` + +--- + +## 🛠Solução de Problemas + +### Nenhum Conteúdo Extraído? +- Verifique seu seletor `main_content` +- Tente: `article`, `main`, `div[role="main"]` + +### Dados Existem Mas Não São Usados? +```bash +# Forçar re-coleta +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Categorias Não Estão Boas? +Edite a seção `categories` da configuração com palavras-chave melhores. + +### Quer Atualizar os Docs? +```bash +# Apague dados antigos e recolete +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### Aprimoramento Não Funciona? +```bash +# Verifique se a API key está configurada +echo $ANTHROPIC_API_KEY + +# Tente o modo LOCAL (usa Claude Code Max, sem necessidade de API key) +skill-seekers enhance output/react/ --mode LOCAL + +# Monitore o status do aprimoramento em segundo plano +skill-seekers enhance-status output/react/ --watch +``` + +### Problemas de Rate Limit do GitHub? +```bash +# Configure um token GitHub (5000 req/hora vs 60/hora anônimo) +export GITHUB_TOKEN=ghp_your_token_here + +# Ou configure múltiplos perfis +skill-seekers config --github +``` + +--- + +## 📈 Performance + +| Tarefa | Tempo | Observações | +|--------|-------|-------------| +| Coleta (síncrona) | 15-45 min | Apenas na primeira vez, baseada em threads | +| Coleta (assíncrona) | 5-15 min | 2-3x mais rápida com a flag `--async` | +| Construção | 1-3 min | Reconstrução rápida a partir do cache | +| Reconstrução | <1 min | Com `--skip-scrape` | +| Aprimoramento (LOCAL) | 30-60 seg | Usa Claude Code Max | +| Aprimoramento (API) | 20-40 seg | Requer API key | +| Vídeo (transcrição) | 1-3 min | YouTube/local, apenas transcrição | +| Vídeo (visual) | 5-15 min | + extração OCR de frames | +| Empacotamento | 5-10 seg | Criação final do .zip | + +--- + +## 🆕 Novidades na v3.6.0 + +### Presets de Workflow +Controle a profundidade da análise com `--preset`: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Rápido, superficial +skill-seekers create https://docs.react.dev/ --preset standard # Equilibrado (padrão) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Profundo, exaustivo +``` + +### Flags de Ciclo de Vida +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Pré-visualização sem coleta +skill-seekers create https://docs.react.dev/ --fresh # Ignorar cache, recoleta completa +skill-seekers create https://docs.react.dev/ --resume # Retomar trabalho interrompido +skill-seekers create https://docs.react.dev/ --skip-scrape # Reempacotar saída existente +``` + +### Health Check e Utilitários +```bash +skill-seekers doctor # Diagnosticar instalação e ambiente +skill-seekers sync-config # Detectar divergência de configuração +skill-seekers stream # Ingestão por streaming para documentações grandes +skill-seekers update output/react/ # Atualização incremental +skill-seekers multilang # Geração de skills multilíngue +skill-seekers quality output/react/ # Relatório de qualidade (adicione --threshold 7 para bloquear: saída diferente de zero abaixo de 7/10) +``` + +### Opções de RAG Chunking (package) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Publicação no Marketplace +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Dependências Opcionais Adicionais +| Extra | Instalação | Propósito | +|-------|------------|-----------| +| `browser` | `pip install "skill-seekers[browser]"` | Playwright headless para sites SPA | +| `embedding` | `pip install "skill-seekers[embedding]"` | Suporte a servidor de embeddings | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` etc. | Upload para armazenamento em nuvem | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Dependências combinadas de upload para bancos vetoriais | + +--- + +## 📚 Documentação + +### Primeiros Passos +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **COMECE AQUI** se você é novo! +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Início rápido para usuários experientes +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Problemas comuns e soluções +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - Folha de referência rápida + +### Arquitetura +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - Visão geral da arquitetura UML com 14 diagramas +- **[docs/UML/exports/](docs/UML/exports/)** - Exportações de diagramas em PNG (visão geral dos pacotes + 13 diagramas de classes) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Referência de API completa em HTML (todas as classes, operações, atributos) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - Arquivo de projeto StarUML (abra com [StarUML](https://staruml.io/)) + +### Guias +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - Processar docs de 10K-40K+ páginas +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - Guia de modos de aprimoramento com IA +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - Configuração da integração MCP +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Coleta multi-fonte +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Guia de extração de vídeo + +### Guias de Integração +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - Todos os pipelines RAG + +--- + +## 📠Licença + +Licença MIT - consulte o arquivo [LICENSE](LICENSE) para detalhes + +--- + +Bom trabalho construindo skills! 🚀 + +--- + +## 🔒 Segurança + +[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 Patrocinadores + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — uma plataforma de inferência de IA full-modal compatível com OpenAI. O Skill Seekers a suporta como destino de empacotamento/aprimoramento via `--target atlas` com `ATLAS_API_KEY`. diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..446eec8 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,1358 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | РуÑÑкий + +> âš ï¸ **Уведомление о машинном переводе** +> +> Этот документ был автоматичеÑки переведён Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ. ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° наши уÑÐ¸Ð»Ð¸Ñ Ð¿Ð¾ обеÑпечению качеÑтва, возможны неточные выражениÑ. + +[![ВерÑиÑ](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![ЛицензиÑ: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP-интеграциÑ](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![ТеÑты пройдены](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![ДоÑка проекта](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI верÑиÑ](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Загрузки](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - ВерÑÐ¸Ñ Python](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Веб-Ñайт](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 Слой данных Ð´Ð»Ñ Ð˜Ð˜-ÑиÑтем.** Skill Seekers преобразует документацию Ñайтов, репозитории GitHub, PDF, видео, Jupyter-ноутбуки, вики и более 10 других типов иÑточников в Ñтруктурированные базы знаний — готовые к иÑпользованию в ИИ-навыках (Claude, Gemini, OpenAI), RAG-конвейерах (LangChain, LlamaIndex, Pinecone) и ИИ-помощниках Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (Cursor, Windsurf, Cline) за Ñчитанные минуты. + +> 🌠**[ПоÑетите SkillSeekersWeb.com](https://skillseekersweb.com/)** — проÑматривайте 24+ готовых конфигураций, делитеÑÑŒ Ñвоими наÑтройками и получайте доÑтуп к полной документации! + +> 📋 **[Смотрите дорожную карту разработки и задачи](https://github.com/users/yusufkaraaslan/projects/2)** — 134 задачи в 10 категориÑÑ…, выберите любую Ð´Ð»Ñ ÑƒÑ‡Ð°ÑтиÑ! + +## 🌠ЭкоÑиÑтема + +Skill Seekers — Ñто мульти-репозиторный проект. Вот где находитÑÑ ÐºÐ°Ð¶Ð´Ð°Ñ Ñ‡Ð°Ñть: + +| Репозиторий | ОпиÑание | СÑылки | +|------------|----------|--------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | ОÑновной CLI и MCP Ñервер (Ñтот репозиторий) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Веб-Ñайт и Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ | [Сайт](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Репозиторий конфигураций ÑообщеÑтва | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action Ð´Ð»Ñ CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Плагин Claude Code | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | Homebrew tap Ð´Ð»Ñ macOS | | + +> **Хотите внеÑти вклад?** Репозитории Ñайта и конфигураций — Ð¾Ñ‚Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… учаÑтников! + +## 🧠 Слой данных Ð´Ð»Ñ Ð˜Ð˜-ÑиÑтем + +**Skill Seekers — Ñто универÑальный Ñлой предобработки**, раÑположенный между необработанной документацией и вÑеми ИИ-ÑиÑтемами, которые её потреблÑÑŽÑ‚. ÐезавиÑимо от того, Ñоздаёте ли вы навыки Ð´Ð»Ñ Claude, RAG-конвейер LangChain или файл `.cursorrules` Ð´Ð»Ñ Cursor — подготовка данных одинакова. Выполните её один раз и ÑкÑпортируйте во вÑе целевые платформы. + +```bash +# Одна команда → ÑÑ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð±Ð°Ð·Ð° знаний +skill-seekers create https://docs.react.dev/ +# или: skill-seekers create facebook/react +# или: skill-seekers create ./my-project + +# ЭкÑпорт в любую ИИ-ÑиÑтему +skill-seekers package output/react --target claude # → Claude AI навык (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ° IBM Bob +``` + +### Что ÑоздаётÑÑ + +| Результат | Цель | Где иÑпользуетÑÑ | +|-----------|------|-----------------| +| **Claude навык** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini навык** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, пользовательÑкие аÑÑиÑтенты | +| **LangChain Documents** | `--target langchain` | QA-цепочки, агенты, ретриверы | +| **LlamaIndex TextNodes** | `--target llama-index` | Движки запроÑов, движки диалогов | +| **Haystack Documents** | `--target haystack` | Корпоративные RAG-конвейеры | +| **Pinecone-ready** (Markdown) | `--target markdown` | Загрузка в векторное хранилище | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Локальные векторные базы данных | +| **IBM Bob навык** (директориÑ) | `--target ibm-bob` | Проектные/глобальные навыки IBM Bob | +| **Cursor** `.cursorrules` | `--target markdown` → Ñкопировать SKILL.md | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → Ñкопировать | VS Code, IntelliJ, Vim | + +### Почему Ñто важно + +- âš¡ **Ðа 99% быÑтрее** — дни ручной подготовки данных → 15–45 минут +- 🎯 **КачеÑтво ИИ-навыков** — файлы SKILL.md на 500+ Ñтрок Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸, шаблонами и руководÑтвами +- 📊 **Готовые к RAG блоки** — ÑƒÐ¼Ð½Ð°Ñ Ñ€Ð°Ð·Ð±Ð¸Ð²ÐºÐ° ÑохранÑет блоки кода и контекÑÑ‚ +- 🎬 **Видео** — извлечение кода, Ñубтитров и Ñтруктурированных знаний из YouTube и локальных видео +- 🔄 **МножеÑтво иÑточников** — объединение 18 типов иÑточников (документациÑ, GitHub, PDF, видео, ноутбуки, вики и другие) в единую базу знаний +- 🌠**Одна подготовка — вÑе платформы** — ÑкÑпорт одного актива на 21 платформу без повторного ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- ✅ **Проверено в бою** — 3 700+ теÑтов, 24+ преÑетов Ð´Ð»Ñ Ñ„Ñ€ÐµÐ¹Ð¼Ð²Ð¾Ñ€ÐºÐ¾Ð², готово к продакшену + +## 🚀 БыÑтрый Ñтарт (3 команды) + +```bash +# 1. УÑтановка +pip install skill-seekers + +# 2. Создание навыка из любого иÑточника +skill-seekers create https://docs.django.com/ + +# 3. Упаковка Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ ИИ-платформы +skill-seekers package output/django --target claude +``` + +**Вот и вÑÑ‘!** Теперь у Ð²Ð°Ñ ÐµÑть готовый к иÑпользованию `output/django-claude.zip`. + +```bash +# ИÑпользование другого ИИ-агента Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ (по умолчанию: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ Ð¡ÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ проекта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ (новое) + +Ðаправьте `scan` на любой проект — ИИ-агент прочитает его манифеÑты, README, +Dockerfile/CI и выборку импортов иÑходного кода, а затем ÑоздаÑÑ‚ по одной +конфигурации на каждый обнаруженный фреймворк Ð¿Ð»ÑŽÑ `-codebase.json` +Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ ÑобÑтвенного кода. ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ„Ð¸ÐºÑируетÑÑ, поÑтому +повторные запуÑки Ñообщают об обновлениÑÑ…: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Затем Ñоберите любую из них +skill-seekers create ./configs/scanned/react.json +``` + +ЕÑли Ð´Ð»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½ÐµÑ‚ готового преÑета, ИИ генерирует новую конфигурацию; +при выходе её можно опционально опубликовать в [рееÑтре ÑообщеÑтва](https://github.com/yusufkaraaslan/skill-seekers-configs). + +### Другие иÑточники (поддерживаетÑÑ 18) + +```bash +# Репозиторий GitHub +skill-seekers create facebook/react + +# Локальный проект +skill-seekers create ./my-project + +# PDF-документ +skill-seekers create manual.pdf + +# Документ Word +skill-seekers create report.docx + +# Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° EPUB +skill-seekers create book.epub + +# Jupyter-ноутбук +skill-seekers create notebook.ipynb + +# Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ OpenAPI +skill-seekers create openapi.yaml + +# ÐŸÑ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ PowerPoint +skill-seekers create presentation.pptx + +# Документ AsciiDoc +skill-seekers create guide.adoc + +# Локальный HTML-файл (автоопределение по раÑширению) +skill-seekers create page.html + +# Ð¦ÐµÐ»Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ HTML-файлов (автоопределение Ð´Ð»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð¹ Ñ Ð¿Ñ€ÐµÐ¾Ð±Ð»Ð°Ð´Ð°Ð½Ð¸ÐµÐ¼ HTML) +skill-seekers create ./mirror_output/site/ + +# Принудительный HTML-режим Ð´Ð»Ñ Ñмешанной директории Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ количеÑтвом кода +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom-лента +skill-seekers create feed.rss + +# Man-Ñтраница +skill-seekers create curl.1 + +# Видео (YouTube, Vimeo или локальный файл — требуетÑÑ skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# Первый запуÑк? ÐвтоматичеÑÐºÐ°Ñ ÑƒÑтановка завиÑимоÑтей Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ GPU: +skill-seekers create --setup + +# Вики Confluence +skill-seekers create --space-key TEAM --name wiki + +# Страницы Notion +skill-seekers create --database-id ... --name docs + +# ЭкÑпорт чатов Slack/Discord +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### ЭкÑпорт куда угодно + +```bash +# Упаковка Ð´Ð»Ñ Ð½ÐµÑкольких платформ +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Что такое Skill Seekers? + +Skill Seekers — Ñто **Ñлой данных Ð´Ð»Ñ Ð˜Ð˜-ÑиÑтем**, который преобразует 18 типов иÑточников — документацию Ñайтов, репозитории GitHub, PDF, видео, Jupyter-ноутбуки, документы Word/EPUB/AsciiDoc, Ñпецификации OpenAPI/Swagger, презентации PowerPoint, RSS/Atom-ленты, man-Ñтраницы, вики Confluence, Ñтраницы Notion, ÑкÑпорты Slack/Discord и другое — в Ñтруктурированные базы знаний Ð´Ð»Ñ Ð²Ñех ИИ-целей: + +| Сценарий иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ | Что вы получаете | Примеры | +|----------------------|-----------------|---------| +| **ИИ-навыки** | Полный SKILL.md + Ñправочные файлы | Claude Code, Gemini, GPT | +| **RAG-конвейеры** | Документы, разбитые на блоки Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ | LangChain, LlamaIndex, Haystack | +| **Векторные базы данных** | Предварительно отформатированные данные Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ | Pinecone, Chroma, Weaviate, FAISS | +| **ИИ-помощники Ð´Ð»Ñ ÐºÐ¾Ð´Ð°** | Файлы контекÑта, которые IDE-ИИ читает автоматичеÑки | Cursor, Windsurf, Cline, Continue.dev | + +## 📚 Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ + +| Я хочу... | Читайте Ñто | +|-----------|-------------| +| **БыÑтро начать** | [БыÑтрый Ñтарт](docs/getting-started/02-quick-start.md) — 3 команды до первого навыка | +| **ПонÑть концепции** | [ОÑновные концепции](docs/user-guide/01-core-concepts.md) — как Ñто работает | +| **Сканировать иÑточники** | [РуководÑтво по Ñканированию](docs/user-guide/02-scraping.md) — вÑе типы иÑточников | +| **Улучшать навыки** | [РуководÑтво по улучшению](docs/user-guide/03-enhancement.md) — ИИ-улучшение | +| **ЭкÑпортировать навыки** | [РуководÑтво по упаковке](docs/user-guide/04-packaging.md) — ÑкÑпорт на платформы | +| **Ðайти команды** | [Справка по CLI](docs/reference/CLI_REFERENCE.md) — вÑе 20 команд | +| **ÐаÑтроить** | [Формат конфигурации](docs/reference/CONFIG_FORMAT.md) — ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ JSON | +| **Решить проблемы** | [УÑтранение неполадок](docs/user-guide/06-troubleshooting.md) — типичные проблемы | + +**ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ:** [docs/README.md](docs/README.md) + +Skill Seekers заменÑет дни ручной предобработки Ñледующими шагами: + +1. **Сбор** — документациÑ, репозитории GitHub, локальные кодовые базы, PDF, видео, Jupyter-ноутбуки, вики и более 10 других типов иÑточников +2. **Ðнализ** — глубокий AST-разбор, обнаружение паттернов, извлечение API +3. **Структурирование** — категоризированные Ñправочные файлы Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ +4. **Улучшение** — Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ SKILL.md Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ (Claude, Gemini или локально) +5. **ЭкÑпорт** — 16 платформоÑпецифичных форматов из одного актива + +## Зачем иÑпользовать Skill Seekers? + +### Ð”Ð»Ñ Ñоздателей ИИ-навыков (Claude, Gemini, OpenAI) + +- 🎯 **Ðавыки продакшен-уровнÑ** — файлы SKILL.md на 500+ Ñтрок Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸ кода, шаблонами и руководÑтвами +- 🔄 **Рабочие процеÑÑÑ‹ улучшениÑ** — применÑйте `security-focus`, `architecture-comprehensive` или пользовательÑкие YAML-преÑеты +- 🎮 **Ð›ÑŽÐ±Ð°Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть** — игровые движки (Godot, Unity), фреймворки (React, Django), внутренние инÑтрументы +- 🔧 **ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°** — объединÑйте внутреннюю документацию + код в единый иÑточник иÑтины +- 📚 **КачеÑтво** — ИИ-улучшение Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸, кратким Ñправочником и навигацией + +### Ð”Ð»Ñ RAG-разработчиков и ИИ-инженеров + +- 🤖 **Данные, готовые к RAG** — предварительно разбитые LangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- 🚀 **Ðа 99% быÑтрее** — дни предобработки → 15–45 минут +- 📊 **Умные метаданные** — категории, иÑточники, типы → более точный поиÑк +- 🔄 **МножеÑтво иÑточников** — объединÑйте документацию + GitHub + PDF в одном конвейере +- 🌠**ПлатформонезавиÑимоÑть** — ÑкÑпорт в любую векторную базу данных или фреймворк без повторного ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + +### Ð”Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ ИИ-помощников Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + +- 💻 **Cursor / Windsurf / Cline** — автоматичеÑÐºÐ°Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ `.cursorrules` / `.windsurfrules` / `.clinerules` +- 🎯 **ПоÑтоÑнный контекÑÑ‚** — ИИ «знает» ваши фреймворки без повторных подÑказок +- 📚 **Ð’Ñегда актуально** — обновлÑйте контекÑÑ‚ за минуты при изменении документации + +## Ключевые возможноÑти + +### 🌠Сканирование документации +- ✅ **Умное обнаружение SPA** — трёхуровневое обнаружение Ð´Ð»Ñ JavaScript SPA-Ñайтов (sitemap.xml → llms.txt → рендеринг в безголовом браузере) +- ✅ **Поддержка llms.txt** — автоматичеÑкое обнаружение и иÑпользование LLM-ready файлов документации (в 10 раз быÑтрее) +- ✅ **УниверÑальный Ñканер** — работает Ñ Ð›Ð®Ð‘Ð«Ðœ Ñайтом документации +- ✅ **Ð£Ð¼Ð½Ð°Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ** — автоматичеÑÐºÐ°Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð° по темам +- ✅ **Определение Ñзыка кода** — раÑпознавание Python, JavaScript, C++, GDScript и других +- ✅ **24+ готовых преÑетов** — Godot, React, Vue, Django, FastAPI и другие + +### 📄 Поддержка PDF +- ✅ **Базовое извлечение PDF** — извлечение текÑта, кода и изображений из PDF-файлов +- ✅ **OCR Ð´Ð»Ñ Ñканированных PDF** — извлечение текÑта из Ñканированных документов +- ✅ **PDF Ñ Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¼** — обработка зашифрованных PDF +- ✅ **Извлечение таблиц** — извлечение Ñложных таблиц из PDF +- ✅ **ÐŸÐ°Ñ€Ð°Ð»Ð»ÐµÐ»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°** — в 3 раза быÑтрее Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… PDF +- ✅ **Умное кÑширование** — на 50% быÑтрее при повторных запуÑках + +### 🎬 Извлечение из видео +- ✅ **YouTube и локальные видео** — извлечение Ñубтитров, кода и Ñтруктурированных знаний из видео +- ✅ **Ðнализ визуальных кадров** — OCR-извлечение из редакторов кода, терминалов, Ñлайдов и диаграмм +- ✅ **Ðвтоопределение GPU** — автоматичеÑÐºÐ°Ñ ÑƒÑтановка правильной Ñборки PyTorch (CUDA/ROCm/MPS/CPU) +- ✅ **ИИ-улучшение** — двухÑтапное: очиÑтка артефактов OCR + Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¿Ð¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ SKILL.md +- ✅ **Обрезка по времени** — извлечение определённых фрагментов Ñ `--start-time` и `--end-time` +- ✅ **Поддержка плейлиÑтов** — Ð¿Ð°ÐºÐµÑ‚Ð½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° вÑех видео в плейлиÑте YouTube +- ✅ **Резервный Vision API** — иÑпользование Claude Vision Ð´Ð»Ñ OCR-кадров Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¹ доÑтоверноÑтью + +### 🙠Ðнализ репозиториев GitHub +- ✅ **Глубокий анализ кода** — AST-разбор Ð´Ð»Ñ Python, JavaScript, TypeScript, Java, C++, Go +- ✅ **Извлечение API** — функции, клаÑÑÑ‹, методы Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ и типами +- ✅ **Метаданные репозиториÑ** — README, дерево файлов, раÑпределение Ñзыков, звёзды/форки +- ✅ **GitHub Issues и PR** — получение открытых/закрытых issues Ñ Ð¼ÐµÑ‚ÐºÐ°Ð¼Ð¸ и вехами +- ✅ **CHANGELOG и релизы** — автоматичеÑкое извлечение иÑтории верÑий +- ✅ **Обнаружение конфликтов** — Ñравнение документированных API Ñ Ñ„Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑкой реализацией кода +- ✅ **MCP-интеграциÑ** — на еÑтеÑтвенном Ñзыке: «ПроÑканируй GitHub-репозиторий facebook/react» + +### 🔄 Унифицированное мультииÑточниковое Ñканирование +- ✅ **Объединение неÑкольких иÑточников** — Ñмешивайте документацию + GitHub + PDF в одном навыке +- ✅ **Обнаружение конфликтов** — автоматичеÑкое нахождение раÑхождений между документацией и кодом +- ✅ **Умное ÑлиÑние** — на оÑнове правил или Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ +- ✅ **ÐŸÑ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ñть** — Ñравнение бок о бок Ñ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñми âš ï¸ +- ✅ **Ðнализ пробелов в документации** — выÑвление уÑтаревшей документации и недокументированных функций +- ✅ **Единый иÑточник иÑтины** — один навык показывает и намерение (документациÑ), и реальноÑть (код) +- ✅ **ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑовмеÑтимоÑть** — уÑтаревшие одноиÑточниковые конфигурации продолжают работать + +### 🤖 Поддержка неÑкольких LLM-платформ +- ✅ **12 LLM-платформ** — Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, универÑальный Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **УниверÑальное Ñканирование** — одна и та же Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð²Ñех платформ +- ✅ **ПлатформоÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ ÑƒÐ¿Ð°ÐºÐ¾Ð²ÐºÐ°** — оптимизированные форматы Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ LLM +- ✅ **ЭкÑпорт одной командой** — флаг `--target` Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° платформы +- ✅ **Опциональные завиÑимоÑти** — уÑтанавливайте только то, что нужно +- ✅ **100% Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑовмеÑтимоÑть** — ÑущеÑтвующие рабочие процеÑÑÑ‹ Claude без изменений + +| Платформа | Формат | Загрузка | Улучшение | API Key | ПользовательÑкий Ñндпоинт | +|-----------|--------|----------|-----------|---------|--------------------------| +| **Claude AI** | ZIP + YAML | ✅ Ðвто | ✅ Да | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Ðвто | ✅ Да | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Ðвто | ✅ Да | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Ðвто | ✅ Да | MINIMAX_API_KEY | - | +| **УниверÑальный Markdown** | ZIP | ⌠Вручную | ⌠Ðет | - | - | + +```bash +# Claude (по умолчанию — без изменений!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# УниверÑальный Markdown (универÑальный ÑкÑпорт) +skill-seekers package output/react/ --target markdown +# ИÑпользуйте markdown-файлы напрÑмую в любой LLM +``` + +
+🔧 ИÑпользуйте ÑобÑтвенного ИИ-провайдера (OpenAI-ÑовмеÑтимые Ñндпоинты + подпиÑки, кредиты Anthropic не нужны) + +Опциональный Ñтап ИИ-**улучшениÑ** (иÑпользуетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ `create`, `scan` и `enhance`) **не** требует ключа Anthropic. ЕÑть три ÑпоÑоба его запуÑтить: + +**1. ИÑпользуйте подпиÑку, за которую вы уже платите — вообще без API-кредитов (LOCAL-режим агента)** + +Skill Seekers может вызывать CLI кодинг-агента, в который вы уже вошли, поÑтому улучшение работает на вашем ÑущеÑтвующем тарифе вмеÑто оплачиваемых API-токенов: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → ваш ChatGPT Plus +skill-seekers create --agent claude # Claude Code → ваш Claude Pro/Max +``` + +Поддерживаемые агенты: `claude`, `codex`, `copilot`, `opencode`, `kimi` и `custom` +(Ñочетайте `--agent custom` Ñ `--agent-cmd " ..."`, чтобы иÑпользовать любой другой инÑтрумент). + +**2. Любой OpenAI-ÑовмеÑтимый провайдер (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Ð’Ñе они предоÑтавлÑÑŽÑ‚ OpenAI-ÑовмеÑтимый Ñндпоинт `/v1`. Ðаправьте Skill Seekers на один из них Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ трёх переменных Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ â€” он обнаруживает `OPENAI_API_KEY`, а OpenAI SDK автоматичеÑки учитывает `OPENAI_BASE_URL`: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # Ñндпоинт провайдера (Ñм. таблицу) +export OPENAI_MODEL="" # обÑзательно — модель по умолчанию gpt-4o в других меÑтах не ÑущеÑтвует +skill-seekers create +``` + +| Провайдер | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> Определение провайдера выбирает **первую** найденную переменную Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ API-ключом (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). УÑтановите `SKILL_SEEKER_PROVIDER`, чтобы принудительно выбрать конкретного провайдера, или убедитеÑÑŒ, что ключи Ñ Ð±Ð¾Ð»ÐµÐµ выÑоким приоритетом не заданы. + +**3. Claude-ÑовмеÑтимые Ñндпоинты (например, GLM, прокÑи)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) и Kimi/Moonshot (`MOONSHOT_API_KEY`) также поддерживаютÑÑ Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¾. Полный ÑпиÑок, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ моделей Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ провайдера, Ñм. в **[Справке по переменным окружениÑ](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)**. + +
+ +**УÑтановка:** +```bash +# УÑтановка Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Gemini +pip install skill-seekers[gemini] + +# УÑтановка Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ OpenAI +pip install skill-seekers[openai] + +# УÑтановка Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ MiniMax +pip install skill-seekers[minimax] + +# УÑтановка вÑех LLM-платформ +pip install skill-seekers[all-llms] +``` + +### 🔗 Интеграции Ñ RAG-фреймворками + +- ✅ **LangChain Documents** — прÑмой ÑкÑпорт в формат `Document` Ñ `page_content` + метаданными + - Подходит длÑ: QA-цепочек, ретриверов, векторных хранилищ, агентов + - Пример: [LangChain RAG-конвейер](examples/langchain-rag-pipeline/) + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ LangChain](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** — ÑкÑпорт в формат `TextNode` Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ID + Ñмбеддингами + - Подходит длÑ: движков запроÑов, движков диалогов, контекÑта хранилища + - Пример: [LlamaIndex движок запроÑов](examples/llama-index-query-engine/) + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ LlamaIndex](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Формат, готовый к Pinecone** — оптимизирован Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ в векторную базу данных + - Подходит длÑ: продакшен-поиÑка по векторам, ÑемантичеÑкого и гибридного поиÑка + - Пример: [Загрузка в Pinecone](examples/pinecone-upsert/) + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Pinecone](docs/integrations/PINECONE.md) + +**БыÑтрый ÑкÑпорт:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (универÑальный) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Полное руководÑтво по RAG-конвейерам:** [Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ð¾ RAG-конвейерам](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 Интеграции Ñ Ð˜Ð˜-помощниками Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + +Преобразуйте документацию любого фреймворка в ÑкÑпертный контекÑÑ‚ Ð´Ð»Ñ 4+ ИИ-помощников: + +- ✅ **Cursor IDE** — Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ `.cursorrules` Ð´Ð»Ñ Ð˜Ð˜-подÑказок при напиÑании кода + - Подходит длÑ: генерации кода Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ фреймворка, единообразных паттернов + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Cursor](docs/integrations/CURSOR.md) + - Пример: [Cursor React навык](examples/cursor-react-skill/) + +- ✅ **Windsurf** — наÑтройка контекÑта ИИ-помощника Windsurf через `.windsurfrules` + - Подходит длÑ: вÑтроенной ИИ-помощи в IDE, потоковое программирование + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Windsurf](docs/integrations/WINDSURF.md) + - Пример: [Windsurf FastAPI контекÑÑ‚](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** — ÑиÑтемные промпты + MCP Ð´Ð»Ñ VS Code-агента + - Подходит длÑ: автономной генерации кода в VS Code + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Cline](docs/integrations/CLINE.md) + - Пример: [Cline Django аÑÑиÑтент](examples/cline-django-assistant/) + +- ✅ **Continue.dev** — контекÑтные Ñерверы Ð´Ð»Ñ IDE-незавиÑимого ИИ + - Подходит длÑ: мультиÑредных окружений (VS Code, JetBrains, Vim), пользовательÑких LLM-провайдеров + - РуководÑтво: [Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Continue](docs/integrations/CONTINUE_DEV.md) + - Пример: [Continue универÑальный контекÑÑ‚](examples/continue-dev-universal/) + +**БыÑтрый ÑкÑпорт Ð´Ð»Ñ Ð˜Ð˜-инÑтрументов программированиÑ:** +```bash +# Ð”Ð»Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ ИИ-помощника (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # или --target markdown + +# Скопируйте в Ñвой проект (пример Ð´Ð»Ñ Cursor) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Или Ð´Ð»Ñ Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Или Ð´Ð»Ñ Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# Или Ð´Ð»Ñ Continue.dev (HTTP-Ñервер) +python examples/continue-dev-universal/context_server.py +# ÐаÑтройте в ~/.continue/config.json +``` + +**Центр интеграций:** [Ð’Ñе интеграции Ñ Ð˜Ð˜-ÑиÑтемами](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Ð¢Ñ€Ñ‘Ñ…Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° GitHub +- ✅ **Трёхпоточный анализ** — разделение GitHub-Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° потоки «Код», «ДокументациÑ» и «Ðналитика» +- ✅ **Унифицированный анализатор кодовой базы** — работает как Ñ URL GitHub, так и Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ путÑми +- ✅ **C3.x как глубина анализа** — выбор «basic» (1–2 мин) или «c3x» (20–60 мин) +- ✅ **РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð°** — метаданные GitHub, быÑтрый Ñтарт из README, типичные проблемы +- ✅ **Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Issues** — раÑпроÑтранённые проблемы и Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸Ð· GitHub Issues +- ✅ **Умные ключевые Ñлова маршрутизации** — метки GitHub Ñ Ð´Ð²Ð¾Ð¹Ð½Ñ‹Ð¼ веÑом Ð´Ð»Ñ Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ¼ + +**ОпиÑание трёх потоков:** +- **Поток 1: Код** — глубокий C3.x-анализ (паттерны, примеры, руководÑтва, конфигурации, архитектура) +- **Поток 2: ДокументациÑ** — Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ (README, CONTRIBUTING, docs/*.md) +- **Поток 3: Ðналитика** — Ð·Ð½Ð°Ð½Ð¸Ñ ÑообщеÑтва (Issues, метки, звёзды, форки) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# Ðнализ GitHub-Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ñо вÑеми Ñ‚Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ°Ð¼Ð¸ +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # или "basic" Ð´Ð»Ñ Ð±Ñ‹Ñтрого анализа + fetch_github_metadata=True +) + +# ДоÑтуп к потоку кода (C3.x-анализ) +print(f"Паттерны проектированиÑ: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Примеры из теÑтов: {result.code_analysis['c3_2_examples_count']}") + +# ДоÑтуп к потоку документации (Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ) +print(f"README: {result.github_docs['readme'][:100]}") + +# ДоÑтуп к потоку аналитики (метаданные GitHub) +print(f"Звёзды: {result.github_insights['metadata']['stars']}") +print(f"Типичные проблемы: {len(result.github_insights['common_problems'])}") +``` + +**ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ**: [Сводка по реализации трёхпоточной архитектуры](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Умное управление лимитами запроÑов и ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ +- ✅ **СиÑтема конфигурации Ñ Ð½ÐµÑколькими токенами** — управление неÑколькими аккаунтами GitHub (личный, рабочий, open source) + - БезопаÑное хранение конфигурации в `~/.config/skill-seekers/config.json` (права 600) + - Стратегии лимита запроÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ профилÑ: `prompt`, `wait`, `switch`, `fail` + - Ð£Ð¼Ð½Ð°Ñ Ñ†ÐµÐ¿Ð¾Ñ‡ÐºÐ° резервированиÑ: аргумент CLI → Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ â†’ файл конфигурации → Ð·Ð°Ð¿Ñ€Ð¾Ñ +- ✅ **Интерактивный маÑтер наÑтройки** — краÑивый терминальный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтой наÑтройки +- ✅ **Умный обработчик лимитов запроÑов** — больше никаких беÑконечных ожиданий! + - Обратный отÑчёт в реальном времени, автоматичеÑкое переключение профилей + - Четыре Ñтратегии: prompt (ÑпроÑить), wait (обратный отÑчёт), switch (переключить), fail (прервать) +- ✅ **Возобновление** — продолжение прерванных задач +- ✅ **Поддержка CI/CD** — флаг `--non-interactive` Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸ + +**БыÑÑ‚Ñ€Ð°Ñ Ð½Ð°Ñтройка:** +```bash +# ÐžÐ´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ Ð½Ð°Ñтройка (5 минут) +skill-seekers config --github + +# ИÑпользование определённого Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ñ‹Ñ… репозиториев +skill-seekers create mycompany/private-repo --profile work + +# Режим CI/CD (быÑтрый отказ, без запроÑов) +skill-seekers create owner/repo --non-interactive + +# Возобновление прерванной задачи +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**ОпиÑание Ñтратегий лимита запроÑов:** +- **prompt** (по умолчанию) — ÑпроÑить, что делать при доÑтижении лимита (подождать, переключитьÑÑ, наÑтроить токен, отменить) +- **wait** — автоматичеÑки ждать Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ отÑчётом (учитывает тайм-аут) +- **switch** — автоматичеÑки пробовать Ñледующий доÑтупный профиль (Ð´Ð»Ñ Ð½Ð°Ñтроек Ñ Ð½ÐµÑколькими аккаунтами) +- **fail** — немедленно завершитьÑÑ Ñ Ð¿Ð¾Ð½Ñтной ошибкой (идеально Ð´Ð»Ñ CI/CD) + +### 🎯 Bootstrap-навык — ÑамохоÑтинг + +Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ skill-seekers как навыка Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² вашем ИИ-агенте (Claude Code, Kimi, Codex и Ñ‚. д.): + +```bash +# Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ° +./scripts/bootstrap_skill.sh + +# УÑтановка в Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**Что вы получаете:** +- ✅ **ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ°** — вÑе CLI-команды и шаблоны иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ +- ✅ **Справка по CLI-командам** — каждый инÑтрумент и его опции задокументированы +- ✅ **Примеры быÑтрого Ñтарта** — типичные рабочие процеÑÑÑ‹ и лучшие практики +- ✅ **ÐÐ²Ñ‚Ð¾Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ API-документациÑ** — анализ кода, паттерны и примеры + +### 🔠Приватные репозитории конфигураций +- ✅ **Git-иÑточники конфигураций** — получение конфигураций из приватных/командных Git-репозиториев +- ✅ **Управление неÑколькими иÑточниками** — региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ количеÑтва репозиториев GitHub, GitLab, Bitbucket +- ✅ **ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°** — обмен пользовательÑкими конфигурациÑми в командах из 3–5 человек +- ✅ **ÐšÐ¾Ñ€Ð¿Ð¾Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°** — маÑштабирование до 500+ разработчиков +- ✅ **БезопаÑÐ½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ** — токены через переменные Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Умное кÑширование** — клонируйте один раз, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ‚ÑгиваютÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки +- ✅ **Офлайн-режим** — работа Ñ ÐºÑшированными конфигурациÑми без Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñети + +### 🤖 Ðнализ кодовой базы (C3.x) + +**C3.4: Извлечение паттернов конфигурации Ñ Ð˜Ð˜-улучшением** +- ✅ **9 форматов конфигурации** — JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 типов паттернов** — база данных, API, логирование, кÑш, почта, аутентификациÑ, Ñервер +- ✅ **ИИ-улучшение** — опциональный двухрежимный ИИ-анализ (API + LOCAL) +- ✅ **Ðнализ безопаÑноÑти** — обнаружение жёÑтко закодированных Ñекретов и открытых учётных данных +- ✅ **Ðвтодокументирование** — Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ JSON + Markdown документации вÑех конфигураций +- ✅ **MCP-интеграциÑ** — инÑтрумент `extract_config_patterns` Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ + +**C3.3: ИИ-улучшенные пошаговые руководÑтва** +- ✅ **Полное ИИ-улучшение** — преобразование базовых руководÑтв в профеÑÑиональные учебники +- ✅ **5 автоматичеÑких улучшений** — опиÑание шагов, уÑтранение неполадок, предварительные требованиÑ, Ñледующие шаги, Ñценарии иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ +- ✅ **Ð”Ð²ÑƒÑ…Ñ€ÐµÐ¶Ð¸Ð¼Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°** — API-режим (Claude API) или LOCAL-режим (Claude Code CLI) +- ✅ **Ðулевые затраты в LOCAL-режиме** — БЕСПЛÐТÐОЕ улучшение Ñ Ð²Ð°ÑˆÐ¸Ð¼ планом Claude Code Max +- ✅ **КачеÑтвенное преобразование** — шаблоны на 75 Ñтрок → подробные руководÑтва на 500+ Ñтрок + +**ИÑпользование:** +```bash +# БыÑтрый анализ (1–2 мин, только базовые функции) +skill-seekers scan tests/ --quick + +# КомплекÑный анализ (Ñ Ð˜Ð˜, 20–60 мин) +skill-seekers scan tests/ --comprehensive + +# С ИИ-улучшением +skill-seekers scan tests/ --enhance +``` + +**ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 ПреÑеты рабочих процеÑÑов ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ + +Многоразовые YAML-определённые конвейеры улучшениÑ, управлÑющие тем, как ИИ преобразует необработанную документацию в отшлифованный навык. + +- ✅ **5 вÑтроенных преÑетов** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **ПользовательÑкие преÑеты** — добавлÑйте ÑобÑтвенные рабочие процеÑÑÑ‹ в `~/.config/skill-seekers/workflows/` +- ✅ **Цепочки рабочих процеÑÑов** — объединÑйте два или более рабочих процеÑÑа в одной команде +- ✅ **Полное управление через CLI** — проÑмотр, копирование, добавление, удаление и Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‡Ð¸Ñ… процеÑÑов + +```bash +# Применение одного рабочего процеÑÑа +skill-seekers create ./my-project --enhance-workflow security-focus + +# Цепочка неÑкольких рабочих процеÑÑов (применÑÑŽÑ‚ÑÑ Ð¿Ð¾ порÑдку) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Управление преÑетами +skill-seekers workflows list # СпиÑок вÑех (вÑтроенные + пользовательÑкие) +skill-seekers workflows show security-focus # Показать Ñодержимое YAML +skill-seekers workflows copy security-focus # Скопировать в пользовательÑкую директорию Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +skill-seekers workflows add ./my-workflow.yaml # УÑтановить пользовательÑкий преÑет +skill-seekers workflows remove my-workflow # Удалить пользовательÑкий преÑет +skill-seekers workflows validate security-focus # Проверить Ñтруктуру преÑета + +# Копирование неÑкольких Ñразу +skill-seekers workflows copy security-focus minimal api-documentation + +# Добавление неÑкольких файлов Ñразу +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Удаление неÑкольких Ñразу +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**Формат YAML-преÑета:** +```yaml +name: security-focus +description: "Обзор безопаÑноÑти: уÑзвимоÑти, аутентификациÑ, обработка данных" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "Проверить на OWASP Top 10 и раÑпроÑтранённые уÑзвимоÑти..." + - name: auth-review + type: custom + prompt: "ИÑÑледовать паттерны аутентификации и авторизации..." + uses_history: true +``` + +### âš¡ ПроизводительноÑть и маÑштаб +- ✅ **ÐÑинхронный режим** — Ñканирование в 2–3 раза быÑтрее Ñ async/await (флаг `--async`) +- ✅ **Поддержка большой документации** — обработка документов на 10K–40K+ Ñтраниц Ñ ÑƒÐ¼Ð½Ñ‹Ð¼ разделением +- ✅ **Маршрутизатор/Hub-навыки** — Ð¸Ð½Ñ‚ÐµÐ»Ð»ÐµÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ðº Ñпециализированным поднавыкам +- ✅ **Параллельное Ñканирование** — Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° неÑкольких навыков +- ✅ **Контрольные точки/Возобновление** — прогреÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не терÑетÑÑ Ð¿Ñ€Ð¸ длительном Ñканировании +- ✅ **СиÑтема кÑшированиÑ** — Ñканируйте один раз, переÑобирайте мгновенно + +### 🤖 Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ¾Ð², незавиÑÐ¸Ð¼Ð°Ñ Ð¾Ñ‚ агента +- ✅ **Поддержка неÑкольких агентов** — Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ¾Ð² Ð´Ð»Ñ Claude, Kimi, Codex, Copilot, OpenCode или любого пользовательÑкого агента через флаг `--agent` +- ✅ **ПользовательÑкие команды агентов** — иÑпользуйте `--agent-cmd`, чтобы задать ÑобÑтвенную CLI-команду агента Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ +- ✅ **УниверÑальные флаги** — `--agent` и `--agent-cmd` доÑтупны во вÑех командах (create, scrape, github, pdf и Ñ‚. д.) + +### 📦 Конвейер маркетплейÑа +- ✅ **ÐŸÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð² маркетплейÑе** — Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ¾Ð² в репозитории маркетплейÑа плагинов Claude Code +- ✅ **Сквозной конвейер** — от иÑточника документации до опубликованной запиÑи в маркетплейÑе + +### ✅ Контроль качеÑтва +- ✅ **Полное покрытие теÑтами** — 3 700+ теÑтов Ñ Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ñ‹Ð¼ покрытием + +--- + +## 📦 УÑтановка + +```bash +# Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ ÑƒÑтановка (Ñканирование документации, анализ GitHub, PDF, упаковка) +pip install skill-seekers + +# С поддержкой вÑех LLM-платформ +pip install skill-seekers[all-llms] + +# С MCP-Ñервером +pip install skill-seekers[mcp] + +# Ð’ÑÑ‘ включено +pip install skill-seekers[all] +``` + +**Ðужна помощь Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð¾Ð¼?** ЗапуÑтите маÑтер наÑтройки: +```bash +skill-seekers-setup +``` + +### Варианты уÑтановки + +| Команда уÑтановки | ФункциональноÑть | +|-------------------|-----------------| +| `pip install skill-seekers` | Сканирование, анализ GitHub, PDF, вÑе платформы | +| `pip install skill-seekers[gemini]` | + Поддержка Google Gemini | +| `pip install skill-seekers[openai]` | + Поддержка OpenAI ChatGPT | +| `pip install skill-seekers[all-llms]` | + Ð’Ñе LLM-платформы | +| `pip install skill-seekers[mcp]` | + MCP-Ñервер | +| `pip install skill-seekers[video]` | + Извлечение Ñубтитров и метаданных YouTube/Vimeo | +| `pip install skill-seekers[video-full]` | + ТранÑÐºÑ€Ð¸Ð¿Ñ†Ð¸Ñ Whisper и извлечение визуальных кадров | +| `pip install skill-seekers[jupyter]` | + Поддержка Jupyter-ноутбуков | +| `pip install skill-seekers[pptx]` | + Поддержка PowerPoint | +| `pip install skill-seekers[confluence]` | + Поддержка вики Confluence | +| `pip install skill-seekers[notion]` | + Поддержка Ñтраниц Notion | +| `pip install skill-seekers[rss]` | + Поддержка RSS/Atom-лент | +| `pip install skill-seekers[chat]` | + Поддержка ÑкÑпорта чатов Slack/Discord | +| `pip install skill-seekers[asciidoc]` | + Поддержка документов AsciiDoc | +| `pip install skill-seekers[all]` | Ð’ÑÑ‘ включено | + +> **Визуальные завиÑимоÑти Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾ (Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ GPU):** ПоÑле уÑтановки `skill-seekers[video-full]` запуÑтите +> `skill-seekers create --setup` Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ GPU и уÑтановки правильной Ñборки PyTorch +> + easyocr. Это рекомендуемый ÑпоÑоб уÑтановки завиÑимоÑтей Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ извлечениÑ. + +--- + +## 🚀 Рабочий процеÑÑ ÑƒÑтановки одной командой + +**Самый быÑтрый ÑпоÑоб от конфигурации до загруженного навыка — Ð¿Ð¾Ð»Ð½Ð°Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ:** + +```bash +# УÑтановка навыка React из официальных конфигураций (автозагрузка в Claude) +skill-seekers install --config react + +# УÑтановка из локального файла конфигурации +skill-seekers install --config configs/custom.json + +# УÑтановка без загрузки (только упаковка) +skill-seekers install --config django --no-upload + +# ПредпроÑмотр рабочего процеÑÑа без Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ +skill-seekers install --config react --dry-run +``` + +**ВремÑ:** 20–45 минут вÑего | **КачеÑтво:** Готово к продакшену (9/10) | **СтоимоÑть:** БеÑплатно + +**ВыполнÑемые фазы:** +``` +📥 ФÐЗР1: Получение конфигурации (еÑли указано Ð¸Ð¼Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸) +📖 ФÐЗР2: Сканирование документации +✨ ФÐЗР3: ИИ-улучшение (ОБЯЗÐТЕЛЬÐО — без возможноÑти пропуÑка) +📦 ФÐЗР4: Упаковка навыка +â˜ï¸ ФÐЗР5: Загрузка в Claude (опционально, требуетÑÑ API Key) +``` + +**ТребованиÑ:** +- ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ ANTHROPIC_API_KEY (Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸) +- План Claude Code Max (Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ИИ-улучшениÑ) или иÑпользуйте `--agent` Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° другого ИИ-агента + +--- + +## 📊 Матрица функций + +Skill Seekers поддерживает **12 LLM-платформ**, **8 RAG/векторных целей**, **18 типов иÑточников** и полный паритет функций по вÑем целевым платформам. + +**Платформы:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, универÑальный Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +**Типы иÑточников:** Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñайтов, репозитории GitHub, PDF, Word (.docx), EPUB, видео, локальные кодовые базы, Jupyter-ноутбуки, локальный HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS/Atom-ленты, man-Ñтраницы, вики Confluence, Ñтраницы Notion, ÑкÑпорты чатов Slack/Discord + +ПодробноÑти Ñм. в [Полной матрице функций](docs/reference/FEATURE_MATRIX.md). + +### БыÑтрое Ñравнение платформ + +| Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------|--------|--------|--------|---------|----------| +| Формат | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Загрузка | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Вручную | +| Улучшение | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠Ðет | +| Ð’Ñе режимы навыков | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Примеры иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ + +### Сканирование документации + +```bash +# Сканирование документации Ñайта +skill-seekers create --config configs/react.json + +# БыÑтрое Ñканирование без конфигурации +skill-seekers create https://react.dev --name react + +# ÐÑинхронный режим (в 3 раза быÑтрее) +skill-seekers create --config configs/godot.json --async --workers 8 + +# ИÑпользование конкретного ИИ-агента Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ +skill-seekers create --config configs/react.json --agent kimi +``` + +### Извлечение из PDF + +```bash +# Базовое извлечение из PDF +skill-seekers create --pdf docs/manual.pdf --name myskill + +# РаÑширенные функции +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Извлечение таблиц + --parallel \ # БыÑÑ‚Ñ€Ð°Ñ Ð¿Ð°Ñ€Ð°Ð»Ð»ÐµÐ»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° + --workers 8 # ИÑпользование 8 Ñдер CPU + +# Сканированные PDF (требуетÑÑ: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Извлечение из видео + +```bash +# УÑтановка поддержки видео +pip install skill-seekers[video] # Субтитры + метаданные +pip install skill-seekers[video-full] # + Whisper транÑÐºÑ€Ð¸Ð¿Ñ†Ð¸Ñ + извлечение визуальных кадров + +# Ðвтоопределение GPU и уÑтановка визуальных завиÑимоÑтей (PyTorch + easyocr) +skill-seekers create --setup + +# Извлечение из видео YouTube +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# Извлечение из плейлиÑта YouTube +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Извлечение из локального видеофайла +skill-seekers create --video-file recording.mp4 --name myrecording + +# Извлечение Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¾Ð¼ визуальных кадров (требуютÑÑ Ð·Ð°Ð²Ð¸ÑимоÑти video-full) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# С ИИ-улучшением (очиÑтка OCR + Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¿Ð¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ SKILL.md) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Обрезка определённого фрагмента видео (поддерживаютÑÑ Ñекунды, MM:SS, HH:MM:SS) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# ИÑпользование Vision API Ð´Ð»Ñ OCR-кадров Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¹ доÑтоверноÑтью (требуетÑÑ ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# ПереÑборка навыка из ранее извлечённых данных (пропуÑк загрузки) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Полное руководÑтво:** Ñм. [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ Ñправки по CLI, +> деталей визуального конвейера, опций ИИ-ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¸ уÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´Ð¾Ðº. + +### Ðнализ репозиториев GitHub + +```bash +# Базовое Ñканирование Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ +skill-seekers create facebook/react + +# С аутентификацией (более выÑокие лимиты запроÑов) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# ÐаÑтройка Ñодержимого +skill-seekers create django/django \ + --include-issues \ # Извлечение GitHub Issues + --max-issues 100 \ # Ограничение количеÑтва issues + --include-changelog # Извлечение CHANGELOG.md +``` + +### Унифицированное мультииÑточниковое Ñканирование + +**Объединение документации + GitHub + PDF в один навык Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸ÐµÐ¼ конфликтов:** + +```bash +# ИÑпользование готовых унифицированных конфигураций +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# Или Ñоздание унифицированной конфигурации +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**Обнаружение конфликтов автоматичеÑки находит:** +- 🔴 **ОтÑутÑтвует в коде** (выÑокий приоритет): задокументировано, но не реализовано +- 🟡 **ОтÑутÑтвует в документации** (Ñредний приоритет): реализовано, но не задокументировано +- âš ï¸ **ÐеÑовпадение Ñигнатур**: различные параметры/типы +- â„¹ï¸ **ÐеÑовпадение опиÑаний**: различные поÑÑÐ½ÐµÐ½Ð¸Ñ + +**Полное руководÑтво:** Ñм. [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md). + +### Приватные репозитории конфигураций + +**Обмен пользовательÑкими конфигурациÑми в команде через приватные Git-репозитории:** + +```bash +# ИÑпользование MCP-инÑтрументов Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации приватного командного Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Получение конфигурации из командного Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ +fetch_config(source="team", config_name="internal-api") +``` + +**Поддерживаемые платформы:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Полное руководÑтво:** Ñм. [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md). + +## Как Ñто работает + +```mermaid +graph LR + A[Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñайта] --> B[Skill Seekers] + B --> C[Сканер] + B --> D[ИИ-улучшение] + B --> E[Упаковщик] + C --> F[Организованные Ñправочные файлы] + D --> F + F --> E + E --> G[ИИ-навык .zip] + G --> H[Загрузка на ИИ-платформу] +``` + +0. **Обнаружение llms.txt** — проверка Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ llms-full.txt, llms.txt, llms-small.txt (чаÑть умного Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ SPA) +1. **Сканирование**: извлечение вÑех Ñтраниц из документации +2. **КатегоризациÑ**: Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð° по темам (API, руководÑтва, учебники и Ñ‚.д.) +3. **Улучшение**: ИИ анализирует документацию и Ñоздаёт вÑеобъемлющий SKILL.md Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸ (поддерживает неÑколько агентов через `--agent`) +4. **Упаковка**: объединение вÑего в готовый Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ `.zip`-файл + +## Ðрхитектура + +СиÑтема организована в **8 оÑновных модулей** и **5 вÑпомогательных модулей** (вÑего ~200 клаÑÑов): + +![Обзор пакетов](docs/UML/exports/00_package_overview.png) + +| Модуль | Ðазначение | Ключевые клаÑÑÑ‹ | +|--------|------------|-----------------| +| **CLICore** | ДиÑпетчер команд в Ñтиле Git | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | Извлечение из 18 типов иÑточников | `DocToSkillConverter`, `DocumentSkillBuilder` (общий Ñлой Ñборки), `UnifiedScraper` | +| **Adaptors** | 20+ форматов выходных платформ | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | Конвейер анализа кодовой базы C3.x | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 детекторов GoF | +| **Enhancement** | ИИ-улучшение навыков через `AgentClient` | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Упаковка, загрузка, уÑтановка навыков | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP-Ñервер (40 инÑтрументов) | `SkillSeekerMCPServer`, 10 модулей инÑтрументов | +| **Sync** | Обнаружение изменений документации | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Ð’Ñпомогательные модули: **Parsers** (28 CLI-парÑеров), **Storage** (S3/GCS/Azure), **Embedding** (векторы от неÑкольких провайдеров), **Benchmark** (производительноÑть), **Utilities** (16 общих помощников). + +Полные UML-диаграммы: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | Проект StarUML: `docs/UML/skill_seekers.mdj` | HTML-Ñправка по API: `docs/UML/html/` + +## 📋 Предварительные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ + +**Перед началом убедитеÑÑŒ, что у Ð²Ð°Ñ ÐµÑть:** + +1. **Python 3.10 или выше** — [Скачать](https://www.python.org/downloads/) | Проверить: `python3 --version` +2. **Git** — [Скачать](https://git-scm.com/) | Проверить: `git --version` +3. **15–30 минут** Ð´Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¹ наÑтройки + +**Впервые?** → **[Ðачните здеÑÑŒ: Безотказное руководÑтво быÑтрого Ñтарта](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Загрузка навыков в Claude + +ПоÑле упаковки навыка его необходимо загрузить в Claude: + +### Вариант 1: ÐвтоматичеÑÐºÐ°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° (через API) + +```bash +# УÑтановка API Key (однократно) +export ANTHROPIC_API_KEY=sk-ant-... + +# Упаковка и автоматичеÑÐºÐ°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° +skill-seekers package output/react/ --upload + +# ИЛИ загрузка ÑущеÑтвующего .zip +skill-seekers upload output/react.zip +``` + +### Вариант 2: Ð ÑƒÑ‡Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° (без API Key) + +```bash +# Упаковка навыка +skill-seekers package output/react/ +# → Создаёт output/react.zip + +# Затем загрузите вручную: +# - Перейдите на https://claude.ai/skills +# - Ðажмите «Upload Skill» +# - Выберите output/react.zip +``` + +### Вариант 3: MCP (Claude Code) + +``` +Ð’ Claude Code проÑто попроÑите: +"Упакуй и загрузи навык React" +``` + +--- + +## 🤖 УÑтановка в ИИ-агенты + +Skill Seekers может автоматичеÑки уÑтанавливать навыки в 19 ИИ-агентов Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. + +```bash +# УÑтановка в конкретный агент +skill-seekers install-agent output/react/ --agent cursor + +# УÑтановка в IBM Bob (Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# УÑтановка во вÑе агенты Ñразу +skill-seekers install-agent output/react/ --agent all + +# ПредпроÑмотр без уÑтановки +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Поддерживаемые агенты + +| Ðгент | Путь | Тип | +|-------|------|-----| +| **Claude Code** | `~/.claude/skills/` | Глобальный | +| **Cursor** | `.cursor/skills/` | Проектный | +| **VS Code / Copilot** | `.github/skills/` | Проектный | +| **Amp** | `~/.amp/skills/` | Глобальный | +| **Goose** | `~/.config/goose/skills/` | Глобальный | +| **OpenCode** | `~/.opencode/skills/` | Глобальный | +| **Windsurf** | `~/.windsurf/skills/` | Глобальный | +| **Roo Code** | `.roo/skills/` | Проектный | +| **Cline** | `.cline/skills/` | Проектный | +| **Aider** | `~/.aider/skills/` | Глобальный | +| **Bolt** | `.bolt/skills/` | Проектный | +| **Kilo Code** | `.kilo/skills/` | Проектный | +| **Continue** | `~/.continue/skills/` | Глобальный | +| **Kimi Code** | `~/.kimi/skills/` | Глобальный | +| **IBM Bob** | `.bob/skills/` | Проектный | + +--- + +## 🔌 MCP-Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ (40 инÑтрументов) + +Skill Seekers поÑтавлÑетÑÑ Ñ MCP-Ñервером Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· Claude Code, Cursor, Windsurf, VS Code + Cline или IntelliJ IDEA. + +```bash +# Режим stdio (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# Режим HTTP (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# ÐвтоматичеÑÐºÐ°Ñ Ð½Ð°Ñтройка вÑех агентов за раз +./setup_mcp.sh +``` + +**Ð’Ñе 40 инÑтрументов:** +- **ОÑновные (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **РаÑширенные (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Векторные БД (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Облачные (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Полное руководÑтво:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ + +### ДоÑтупные преÑеты (24+) + +```bash +# СпиÑок вÑех преÑетов +# skill-seekers list-configs # ÐедоÑтупно в v3.7.0 +``` + +| ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ | ПреÑеты | +|-----------|---------| +| **Веб-фреймворки** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Разработка игр** | `godot`, `pygame`, `unity` | +| **ИнÑтрументы и DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **Унифицированные (Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` и другие | + +### Создание ÑобÑтвенной конфигурации + +```bash +# Вариант 1: Интерактивный +skill-seekers create --interactive + +# Вариант 2: Копирование и редактирование преÑета +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Структура файла конфигурации + +```json +{ + "name": "myframework", + "description": "Когда иÑпользовать Ñтот навык", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Где хранить конфигурации + +ИнÑтрумент выполнÑет поиÑк в Ñледующем порÑдке: +1. Точный путь, как указан +2. `./configs/` (Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ) +3. `~/.config/skill-seekers/configs/` (пользовательÑÐºÐ°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸) +4. SkillSeekersWeb.com API (готовые конфигурации) + +--- + +## 📊 Что ÑоздаётÑÑ + +``` +output/ +├── godot_data/ # Полученные необработанные данные +│ ├── pages/ # JSON-файлы (по одному на Ñтраницу) +│ └── summary.json # Обзор +│ +└── godot/ # Ðавык + ├── SKILL.md # Улучшенный Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ примерами + ├── references/ # ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # ПуÑто (добавьте Ñвои Ñкрипты) + └── assets/ # ПуÑто (добавьте Ñвои реÑурÑÑ‹) +``` + +--- + +## 🛠УÑтранение неполадок + +### Контент не извлечён? +- Проверьте Ñелектор `main_content` +- Попробуйте: `article`, `main`, `div[role="main"]` + +### Данные еÑть, но не иÑпользуютÑÑ? +```bash +# Принудительное повторное Ñканирование +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ðµ уÑтраивает? +Отредактируйте раздел `categories` в конфигурации, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð±Ð¾Ð»ÐµÐµ подходÑщие ключевые Ñлова. + +### Хотите обновить документацию? +```bash +# Удалите Ñтарые данные и проÑканируйте заново +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### Улучшение не работает? +```bash +# Проверьте, уÑтановлен ли API Key +echo $ANTHROPIC_API_KEY + +# Попробуйте LOCAL-режим (иÑпользует Claude Code Max, API Key не нужен) +skill-seekers enhance output/react/ --mode LOCAL + +# Мониторинг ÑтатуÑа фонового ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ +skill-seekers enhance-status output/react/ --watch +``` + +### Проблемы Ñ Ð»Ð¸Ð¼Ð¸Ñ‚Ð°Ð¼Ð¸ GitHub? +```bash +# УÑтановите GitHub Token (5000 запроÑов/Ñ‡Ð°Ñ Ð²Ð¼ÐµÑто 60/Ñ‡Ð°Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾) +export GITHUB_TOKEN=ghp_your_token_here + +# Или наÑтройте неÑколько профилей +skill-seekers config --github +``` + +--- + +## 📈 ПроизводительноÑть + +| Задача | Ð’Ñ€ÐµÐ¼Ñ | ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ | +|--------|-------|-----------| +| Сканирование (Ñинхр.) | 15–45 мин | Только первый раз, на оÑнове потоков | +| Сканирование (аÑинхр.) | 5–15 мин | Ð’ 2–3 раза быÑтрее Ñ Ñ„Ð»Ð°Ð³Ð¾Ð¼ `--async` | +| Сборка | 1–3 мин | БыÑÑ‚Ñ€Ð°Ñ Ð¿ÐµÑ€ÐµÑборка из кÑша | +| ПереÑборка | <1 мин | С `--skip-scrape` | +| Улучшение (LOCAL) | 30–60 Ñек | ИÑпользует Claude Code Max | +| Улучшение (API) | 20–40 Ñек | ТребуетÑÑ API Key | +| Видео (Ñубтитры) | 1–3 мин | YouTube/локальное, только Ñубтитры | +| Видео (визуальное) | 5–15 мин | + OCR-извлечение кадров | +| Упаковка | 5–10 Ñек | Создание итогового .zip | + +--- + +## 🆕 Ðовое в v3.6.0 + +### ПредуÑтановки рабочих процеÑÑов +УправлÑйте глубиной анализа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ `--preset`: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # БыÑтрый, поверхноÑтный +skill-seekers create https://docs.react.dev/ --preset standard # СбаланÑированный (по умолчанию) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Глубокий, иÑчерпывающий +``` + +### Флаги жизненного цикла +```bash +skill-seekers create https://docs.react.dev/ --dry-run # ПредпроÑмотр без ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +skill-seekers create https://docs.react.dev/ --fresh # Игнорировать кÑш, полное переÑканирование +skill-seekers create https://docs.react.dev/ --resume # Возобновить прерванную задачу +skill-seekers create https://docs.react.dev/ --skip-scrape # Переупаковать ÑущеÑтвующий результат +``` + +### Проверка Ð·Ð´Ð¾Ñ€Ð¾Ð²ÑŒÑ Ð¸ утилиты +```bash +skill-seekers doctor # ДиагноÑтика уÑтановки и Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ +skill-seekers sync-config # Обнаружение отклонений конфигурации +skill-seekers stream # Потоковое поглощение Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… документов +skill-seekers update output/react/ # Инкрементальное обновление +skill-seekers multilang # Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ¾Ð² на неÑкольких Ñзыках +skill-seekers quality output/react/ # Отчёт о качеÑтве (добавьте --threshold 7 Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ: ненулевой код выхода ниже 7/10) +``` + +### Опции RAG-фрагментации (упаковка) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### ÐŸÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð² маркетплейÑе +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Дополнительные опциональные завиÑимоÑти +| Дополнение | УÑтановка | Ðазначение | +|------------|-----------|------------| +| `browser` | `pip install "skill-seekers[browser]"` | Безголовый Playwright Ð´Ð»Ñ SPA-Ñайтов | +| `embedding` | `pip install "skill-seekers[embedding]"` | Поддержка Ñервера Ñмбеддингов | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` и Ñ‚. д. | Загрузка в облачное хранилище | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | Комбинированные завиÑимоÑти загрузки в векторные БД | + +--- + +## 📚 Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ + +### Ðачало работы +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** — 🎯 **ÐÐЧÐИТЕ ЗДЕСЬ**, еÑли вы новичок! +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** — БыÑтрый Ñтарт Ð´Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ñ… пользователей +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** — РаÑпроÑтранённые проблемы и Ñ€ÐµÑˆÐµÐ½Ð¸Ñ +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** — ÐšÑ€Ð°Ñ‚ÐºÐ°Ñ Ñправка на одну Ñтраницу + +### Ðрхитектура +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** — Обзор UML-архитектуры Ñ 14 диаграммами +- **[docs/UML/exports/](docs/UML/exports/)** — ЭкÑпорт диаграмм в PNG (обзор пакетов + 13 диаграмм клаÑÑов) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** — ÐŸÐ¾Ð»Ð½Ð°Ñ HTML-Ñправка по API (вÑе клаÑÑÑ‹, операции, атрибуты) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** — Файл проекта StarUML (откройте в [StarUML](https://staruml.io/)) + +### РуководÑтва +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** — Работа Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ на 10K–40K+ Ñтраниц +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** — РуководÑтво по режимам ИИ-ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** — ÐаÑтройка MCP-интеграции +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** — МультииÑточниковое Ñканирование +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** — Полное руководÑтво по извлечению из видео + +### РуководÑтва по интеграции +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** — LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** — Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** — Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** — Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** — Ð’Ñе RAG-конвейеры + +--- + +## ðŸ“ Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ + +Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ MIT — подробноÑти в файле [LICENSE](LICENSE) + +--- + +Удачного ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð°Ð²Ñ‹ÐºÐ¾Ð²! 🚀 + +--- + +## 🔒 БезопаÑноÑть + +[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 СпонÑоры + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — полномодальнаÑ, OpenAI-ÑовмеÑÑ‚Ð¸Ð¼Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° ИИ-инференÑа. Skill Seekers поддерживает её как цель упаковки/ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· `--target atlas` Ñ `ATLAS_API_KEY`. diff --git a/README.tr.md b/README.tr.md new file mode 100644 index 0000000..161bb6b --- /dev/null +++ b/README.tr.md @@ -0,0 +1,1381 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | Türkçe | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **Makine çevirisi bildirimi** +> +> Bu belge yapay zeka tarafından otomatik olarak çevrilmiÅŸtir. Kaliteyi saÄŸlamak için çaba göstermemize raÄŸmen, hatalı ifadeler bulunabilir. +> +> Çeviriyi iyileÅŸtirmemize yardımcı olmak için [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) üzerinden geri bildirimlerinizi paylaÅŸabilirsiniz! + +[![Sürüm](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![Lisans: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP Entegrasyonu](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![Test Geçti](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![Proje Panosu](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI Sürümü](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - İndirmeler](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python Sürümü](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![Web Sitesi](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![Twitter Takip](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Yıldızları](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 Yapay zeka sistemleri için veri katmanı.** Skill Seekers; dokümantasyon sitelerini, GitHub depolarını, PDF'leri, videoları, Jupyter not defterlerini, vikileri ve 10'dan fazla diÄŸer kaynak türünü yapılandırılmış bilgi varlıklarına dönüştürür — AI Yetenekleri (Claude, Gemini, OpenAI), RAG hatları (LangChain, LlamaIndex, Pinecone) ve AI kodlama asistanları (Cursor, Windsurf, Cline) için saatler deÄŸil dakikalar içinde hazır hale getirir. + +> 🌠**[SkillSeekersWeb.com'u Ziyaret Edin](https://skillseekersweb.com/)** - 24'ten fazla hazır yapılandırmayı inceleyin, kendi yapılandırmalarınızı paylaşın ve tam dokümantasyona eriÅŸin! + +> 📋 **[GeliÅŸtirme Yol Haritası ve Görevleri Görüntüleyin](https://github.com/users/yusufkaraaslan/projects/2)** - 10 kategoride 134 görev, istediÄŸinizi seçip katkıda bulunun! + +## 🌠Ekosistem + +Skill Seekers çoklu depo projesidır. Her ÅŸeyin bulunduÄŸu yerler: + +| Depo | Açıklama | BaÄŸlantılar | +|------|----------|-------------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | Ana CLI ve MCP sunucusu (bu depo) | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | Web sitesi ve belgeler | [Site](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | Topluluk yapılandırma deposu | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code eklentisi | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | macOS için Homebrew tap | | + +> **Katkıda bulunmak ister misiniz?** Web sitesi ve yapılandırma depoları yeni katkıda bulunanlar için harika baÅŸlangıç noktalarıdır! + +## 🧠 Yapay Zeka Sistemleri İçin Veri Katmanı + +**Skill Seekers, evrensel bir ön iÅŸleme katmanıdır** ve ham dokümantasyon ile onu tüketen tüm yapay zeka sistemleri arasında yer alır. İster Claude yetenekleri, ister LangChain RAG hattı, ister Cursor `.cursorrules` dosyası oluÅŸturuyor olun — veri hazırlık süreci aynıdır. Bir kez yaparsınız, tüm hedef platformlara dışa aktarırsınız. + +```bash +# Tek komut → yapılandırılmış bilgi varlığı +skill-seekers create https://docs.react.dev/ +# veya: skill-seekers create facebook/react +# veya: skill-seekers create ./my-project + +# Herhangi bir AI sistemine dışa aktar +skill-seekers package output/react --target claude # → Claude AI YeteneÄŸi (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob yetenek dizini +``` + +### OluÅŸturulan Çıktılar + +| Çıktı | Hedef | Kullanım Alanı | +|-------|-------|---------------| +| **Claude YeteneÄŸi** (ZIP + YAML) | `--target claude` | Claude Code, Claude API | +| **Gemini YeteneÄŸi** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4o, özel asistanlar | +| **LangChain Documents** | `--target langchain` | QA zincirleri, ajanlar, alıcılar | +| **LlamaIndex TextNodes** | `--target llama-index` | Sorgu motorları, sohbet motorları | +| **Haystack Documents** | `--target haystack` | Kurumsal RAG hatları | +| **Pinecone-hazır** (Markdown) | `--target markdown` | Vektör yükleme | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | Yerel vektör veritabanları | +| **IBM Bob YeteneÄŸi** (dizin) | `--target ibm-bob` | IBM Bob proje/global yetenekleri | +| **Cursor** `.cursorrules` | `--target markdown` → SKILL.md'yi kopyala | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → kopyala | VS Code, IntelliJ, Vim | + +### Neden Önemli + +- âš¡ **%99 daha hızlı** — Günlerce süren manuel veri hazırlığı → 15–45 dakika +- 🎯 **AI Yetenek kalitesi** — Örnekler, desenler ve kılavuzlar içeren 500+ satırlık SKILL.md dosyaları +- 📊 **RAG-hazır parçalar** — Kod bloklarını koruyan ve baÄŸlamı sürdüren akıllı parçalama +- 🎬 **Videolar** — YouTube ve yerel videolardan kod, altyazı ve yapılandırılmış bilgi çıkarma +- 🔄 **Çoklu kaynak** — 18 kaynak türünü (dokümantasyon, GitHub, PDF, video, not defterleri, vikiler ve daha fazlası) tek bir bilgi varlığında birleÅŸtirme +- 🌠**Bir hazırlık, her hedef** — Yeniden tarama yapmadan aynı varlığı 21 platforma dışa aktarma +- ✅ **SavaÅŸta test edilmiÅŸ** — 3.700+ test, 24+ çerçeve ön ayarı, üretime hazır + +## 🚀 Hızlı BaÅŸlangıç (3 Komut) + +```bash +# 1. Kurulum +pip install skill-seekers + +# 2. Herhangi bir kaynaktan yetenek oluÅŸtur +skill-seekers create https://docs.django.com/ + +# 3. AI platformunuz için paketle +skill-seekers package output/django --target claude +``` + +**İşte bu kadar!** Artık kullanıma hazır `output/django-claude.zip` dosyanız var. + +```bash +# ZenginleÅŸtirme için farklı bir AI ajanı kullan (varsayılan: claude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI destekli proje taraması (yeni) + +`scan` komutunu herhangi bir projeye yöneltin; bir AI ajanı projenin manifest +dosyalarını, README'sini, Dockerfile/CI dosyalarını ve örneklenmiÅŸ kaynak içe +aktarımlarını okur — ardından algılanan her çerçeve için bir yapılandırma ve +kendi kodunuz için bir `-codebase.json` üretir. Algılanan sürümü +sabitler, böylece yeniden çalıştırmalar sürüm artışlarını raporlar: + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# Ardından istediÄŸinizi oluÅŸturun +skill-seekers create ./configs/scanned/react.json +``` + +Bir algılamanın mevcut ön ayarı yoksa AI sıfırdan bir yapılandırma üretir; +çıkışta bunu isteÄŸe baÄŸlı olarak [topluluk kayıt deposuna](https://github.com/yusufkaraaslan/skill-seekers-configs) geri yayınlayabilirsiniz. + +### DiÄŸer Kaynaklar (18 Desteklenen) + +```bash +# GitHub deposu +skill-seekers create facebook/react + +# Yerel proje +skill-seekers create ./my-project + +# PDF belgesi +skill-seekers create manual.pdf + +# Word belgesi +skill-seekers create report.docx + +# EPUB e-kitap +skill-seekers create book.epub + +# Jupyter Not Defteri +skill-seekers create notebook.ipynb + +# OpenAPI spec +skill-seekers create openapi.yaml + +# PowerPoint sunumu +skill-seekers create presentation.pptx + +# AsciiDoc belgesi +skill-seekers create guide.adoc + +# Yerel HTML dosyası (uzantıdan otomatik algılanır) +skill-seekers create page.html + +# HTML dosyalarından oluÅŸan bütün bir dizin (HTML ağırlıklı dizinler için otomatik algılanır) +skill-seekers create ./mirror_output/site/ + +# Karışık/kod ağırlıklı bir dizinde HTML modunu zorla +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom beslemesi +skill-seekers create feed.rss + +# Man sayfası +skill-seekers create curl.1 + +# Video (YouTube, Vimeo veya yerel dosya — skill-seekers[video] gerektirir) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# İlk kez mi? GPU destekli görsel bağımlılıkları otomatik kur: +skill-seekers create --setup + +# Confluence vikisi +skill-seekers create --space-key TEAM --name wiki + +# Notion sayfaları +skill-seekers create --database-id ... --name docs + +# Slack/Discord sohbet dışa aktarımı +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### Her Yere Dışa Aktar + +```bash +# Birden fazla platform için paketle +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## Skill Seekers Nedir? + +Skill Seekers, **yapay zeka sistemleri için veri katmanıdır**. 18 kaynak türünü — dokümantasyon siteleri, GitHub depoları, PDF'ler, videolar, Jupyter Not Defterleri, Word/EPUB/AsciiDoc belgeleri, OpenAPI spesifikasyonları, PowerPoint sunumları, RSS beslemeleri, man sayfaları, Confluence vikileri, Notion sayfaları, Slack/Discord dışa aktarımları ve daha fazlasını — her AI hedefi için yapılandırılmış bilgi varlıklarına dönüştürür: + +| Kullanım Alanı | Elde EttiÄŸiniz | Örnekler | +|----------------|---------------|----------| +| **AI Yetenekleri** | Kapsamlı SKILL.md + referanslar | Claude Code, Gemini, GPT | +| **RAG Hatları** | Zengin meta verili parçalanmış belgeler | LangChain, LlamaIndex, Haystack | +| **Vektör Veritabanları** | Yüklemeye hazır önceden biçimlendirilmiÅŸ veri | Pinecone, Chroma, Weaviate, FAISS | +| **AI Kodlama Asistanları** | IDE yapay zekasının otomatik okuduÄŸu baÄŸlam dosyaları | Cursor, Windsurf, Cline, Continue.dev | + +Skill Seekers, günlerce süren manuel ön iÅŸleme çalışması yerine ÅŸunları yapar: + +1. **Toplama** — Dokümantasyon, GitHub depoları, yerel kod tabanları, PDF'ler, videolar, Jupyter not defterleri, vikiler ve 10'dan fazla diÄŸer kaynak türü +2. **Analiz** — Derin AST ayrıştırma, desen tespiti, API çıkarma +3. **Yapılandırma** — Meta verili kategorize edilmiÅŸ referans dosyaları +4. **ZenginleÅŸtirme** — AI destekli SKILL.md oluÅŸturma (Claude, Gemini veya yerel) +5. **Dışa Aktarma** — Tek bir varlıktan 16 platforma özel format + +## 📚 Dokümantasyon + +| Yapmak istediÄŸim... | Bunu oku | +|---------------------|----------| +| **Hızlıca baÅŸlamak** | [Hızlı BaÅŸlangıç](docs/getting-started/02-quick-start.md) - İlk yetenek için 3 komut | +| **Kavramları anlamak** | [Temel Kavramlar](docs/user-guide/01-core-concepts.md) - Nasıl çalışır | +| **Kaynak taramak** | [Tarama Kılavuzu](docs/user-guide/02-scraping.md) - Tüm kaynak türleri | +| **Yetenekleri geliÅŸtirmek** | [ZenginleÅŸtirme Kılavuzu](docs/user-guide/03-enhancement.md) - AI zenginleÅŸtirme | +| **Yetenekleri dışa aktarmak** | [Paketleme Kılavuzu](docs/user-guide/04-packaging.md) - Platform dışa aktarımı | +| **Komutları aramak** | [CLI Referansı](docs/reference/CLI_REFERENCE.md) - Tüm 20 komut | +| **Yapılandırma yapmak** | [Yapılandırma Formatı](docs/reference/CONFIG_FORMAT.md) - JSON spesifikasyonu | +| **Sorunları çözmek** | [Sorun Giderme](docs/user-guide/06-troubleshooting.md) - Yaygın sorunlar | + +**Tam dokümantasyon:** [docs/README.md](docs/README.md) + +## Neden Kullanmalısınız? + +### AI Yetenek OluÅŸturucuları İçin (Claude, Gemini, OpenAI) + +- 🎯 **Üretime hazır yetenekler** — Kod örnekleri, desenler ve kılavuzlar içeren 500+ satırlık SKILL.md dosyaları +- 🔄 **ZenginleÅŸtirme iÅŸ akışları** — `security-focus`, `architecture-comprehensive` veya özel YAML ön ayarları uygulayın +- 🎮 **Her alan** — Oyun motorları (Godot, Unity), çerçeveler (React, Django), dahili araçlar +- 🔧 **Ekipler** — Dahili dokümantasyon + kodu tek bir doÄŸruluk kaynağında birleÅŸtirin +- 📚 **Kalite** — Örnekler, hızlı referans ve navigasyon kılavuzu ile AI zenginleÅŸtirilmiÅŸ + +### RAG GeliÅŸtiricileri ve AI Mühendisleri İçin + +- 🤖 **RAG-hazır veri** — Önceden parçalanmış LangChain `Documents`, LlamaIndex `TextNodes`, Haystack `Documents` +- 🚀 **%99 daha hızlı** — Günlerce süren ön iÅŸleme → 15–45 dakika +- 📊 **Akıllı meta veri** — Kategoriler, kaynaklar, türler → daha iyi alma doÄŸruluÄŸu +- 🔄 **Çoklu kaynak** — Tek bir hatta dokümantasyon + GitHub + PDF + video birleÅŸtirme +- 🌠**Platform bağımsız** — Yeniden tarama yapmadan herhangi bir vektör veritabanına veya çerçeveye dışa aktarma + +### AI Kodlama Asistanı Kullanıcıları İçin + +- 💻 **Cursor / Windsurf / Cline** — Otomatik `.cursorrules` / `.windsurfrules` / `.clinerules` oluÅŸturma +- 🎯 **Kalıcı baÄŸlam** — Tekrarlanan yönlendirme olmadan AI çerçevelerinizi "bilir" +- 📚 **Her zaman güncel** — Dokümantasyon deÄŸiÅŸtiÄŸinde baÄŸlamı dakikalar içinde güncelleyin + +## Temel Özellikler + +### 🌠Dokümantasyon Tarama +- ✅ **Akıllı SPA KeÅŸfi** - JavaScript SPA siteleri için üç katmanlı keÅŸif (sitemap.xml → llms.txt → baÅŸsız tarayıcı ile iÅŸleme) +- ✅ **llms.txt DesteÄŸi** - LLM-hazır dokümantasyon dosyalarını otomatik algılar ve kullanır (10 kat daha hızlı) +- ✅ **Evrensel Tarayıcı** - HERHANGİ bir dokümantasyon sitesiyle çalışır +- ✅ **Akıllı Kategorileme** - İçeriÄŸi konuya göre otomatik düzenler +- ✅ **Kod Dili Algılama** - Python, JavaScript, C++, GDScript vb. tanır +- ✅ **24+ Hazır Ön Ayar** - Godot, React, Vue, Django, FastAPI ve daha fazlası + +### 📄 PDF DesteÄŸi +- ✅ **Temel PDF Çıkarma** - PDF dosyalarından metin, kod ve resim çıkarma +- ✅ **Taranmış PDF'ler İçin OCR** - Taranmış belgelerden metin çıkarma +- ✅ **Parola Korumalı PDF'ler** - ÅžifrelenmiÅŸ PDF'leri iÅŸleme +- ✅ **Tablo Çıkarma** - PDF'lerden karmaşık tabloları çıkarma +- ✅ **Paralel İşleme** - Büyük PDF'ler için 3 kat daha hızlı +- ✅ **Akıllı Önbellekleme** - Tekrar çalıştırmalarda %50 daha hızlı + +### 🎬 Video Çıkarma +- ✅ **YouTube ve Yerel Videolar** - Videolardan altyazı, kod ve yapılandırılmış bilgi çıkarma +- ✅ **Görsel Kare Analizi** - Kod editörleri, terminaller, slaytlar ve diyagramlardan OCR çıkarma +- ✅ **GPU Otomatik Algılama** - DoÄŸru PyTorch derlemesini otomatik yükleme (CUDA/ROCm/MPS/CPU) +- ✅ **AI ZenginleÅŸtirme** - İki aÅŸamalı: OCR yapıtlarını temizleme + gösteriÅŸli SKILL.md oluÅŸturma +- ✅ **Zaman Kırpma** - `--start-time` ve `--end-time` ile belirli bölümleri çıkarma +- ✅ **Oynatma Listesi DesteÄŸi** - YouTube oynatma listesindeki tüm videoları toplu iÅŸleme +- ✅ **Vision API Yedekleme** - Düşük güvenilirlikli OCR kareleri için Claude Vision kullanma + +### 🙠GitHub Deposu Analizi +- ✅ **Derin Kod Analizi** - Python, JavaScript, TypeScript, Java, C++, Go için AST ayrıştırma +- ✅ **API Çıkarma** - Parametreler ve türlerle fonksiyonlar, sınıflar, yöntemler +- ✅ **Depo Meta Verileri** - README, dosya aÄŸacı, dil dağılımı, yıldız/çatal sayıları +- ✅ **GitHub Issues ve PR'ler** - Etiketler ve kilometre taÅŸlarıyla açık/kapalı sorunları getirme +- ✅ **CHANGELOG ve Sürümler** - Sürüm geçmiÅŸini otomatik çıkarma +- ✅ **Çakışma Tespiti** - BelgelenmiÅŸ API'ler ile gerçek kod uygulamasını karşılaÅŸtırma +- ✅ **MCP Entegrasyonu** - DoÄŸal dil: "GitHub deposu facebook/react'i tara" + +### 🔄 BirleÅŸik Çoklu Kaynak Tarama +- ✅ **Birden Fazla Kaynağı BirleÅŸtirme** - Tek bir yetenekte dokümantasyon + GitHub + PDF karıştırma +- ✅ **Çakışma Tespiti** - Dokümantasyon ile kod arasındaki tutarsızlıkları otomatik bulma +- ✅ **Akıllı BirleÅŸtirme** - Kural tabanlı veya AI destekli çakışma çözümleme +- ✅ **Åžeffaf Raporlama** - âš ï¸ uyarılarıyla yan yana karşılaÅŸtırma +- ✅ **Dokümantasyon BoÅŸluk Analizi** - GüncelliÄŸini yitirmiÅŸ dokümantasyon ve belgelenmemiÅŸ özellikleri belirleme +- ✅ **Tek DoÄŸruluk Kaynağı** - Hem niyet (dokümantasyon) hem de gerçeÄŸi (kod) gösteren tek yetenek +- ✅ **Geriye Dönük Uyumluluk** - Eski tek kaynaklı yapılandırmalar çalışmaya devam eder + +### 🤖 Çoklu LLM Platform DesteÄŸi +- ✅ **12 LLM Platformu** - Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Genel Markdown, OpenCode, Kimi (Moonshot AI), DeepSeek AI, Qwen (Alibaba), OpenRouter, Together AI, Fireworks AI +- ✅ **Evrensel Tarama** - Aynı dokümantasyon tüm platformlar için çalışır +- ✅ **Platforma Özel Paketleme** - Her LLM için optimize edilmiÅŸ formatlar +- ✅ **Tek Komutla Dışa Aktarma** - `--target` bayrağı ile platform seçimi +- ✅ **İsteÄŸe BaÄŸlı Bağımlılıklar** - Yalnızca ihtiyacınız olanı yükleyin +- ✅ **%100 Geriye Dönük Uyumluluk** - Mevcut Claude iÅŸ akışları deÄŸiÅŸmez + +| Platform | Format | Yükleme | ZenginleÅŸtirme | API Key | Özel Uç Nokta | +|----------|--------|---------|----------------|---------|---------------| +| **Claude AI** | ZIP + YAML | ✅ Otomatik | ✅ Evet | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ Otomatik | ✅ Evet | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ Otomatik | ✅ Evet | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ Otomatik | ✅ Evet | MINIMAX_API_KEY | - | +| **Genel Markdown** | ZIP | ⌠Manuel | ⌠Hayır | - | - | + +```bash +# Claude (varsayılan - deÄŸiÅŸiklik gerekmez!) +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# Genel Markdown (evrensel dışa aktarma) +skill-seekers package output/react/ --target markdown +# Markdown dosyalarını doÄŸrudan herhangi bir LLM'de kullanın +``` + +
+🔧 Kendi AI sağlayıcınızı kullanın (OpenAI uyumlu uç noktalar + abonelikler, Anthropic kredisi gerekmez) + +İsteğe bağlı AI **zenginleştirme** adımı (`create`, `scan` ve `enhance` tarafından kullanılır) bir Anthropic anahtarı **gerektirmez**. Bunu çalıştırmanın üç yolu vardır: + +**1. Zaten ödediğiniz bir aboneliği kullanın — hiç API kredisi gerekmez (LOCAL ajan modu)** + +Skill Seekers, halihazırda oturum açtığınız bir kodlama ajanı CLI'sini çağırabilir; böylece zenginleştirme, ölçülen API token'ları yerine mevcut planınız üzerinden çalışır: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → ChatGPT Plus planınız +skill-seekers create --agent claude # Claude Code → Claude Pro/Max planınız +``` + +Desteklenen ajanlar: `claude`, `codex`, `copilot`, `opencode`, `kimi` ve `custom` +(başka herhangi bir aracı kullanmak için `--agent custom` ile `--agent-cmd " ..."` birleştirin). + +**2. Herhangi bir OpenAI uyumlu sağlayıcı (OpenRouter, Groq, Cerebras, Mistral, NVIDIA NIM, …)** + +Bunların tümü OpenAI uyumlu bir `/v1` uç noktası sunar. Skill Seekers'ı üç ortam değişkeniyle birine yönlendirin — `OPENAI_API_KEY` algılanır ve OpenAI SDK'sı `OPENAI_BASE_URL` değişkenini otomatik olarak dikkate alır: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # sağlayıcı uç noktası (tabloya bakın) +export OPENAI_MODEL="" # zorunlu — varsayılan gpt-4o başka yerde bulunmaz +skill-seekers create +``` + +| Sağlayıcı | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> Sağlayıcı algılama, bulduğu **ilk** API anahtarı ortam değişkenini seçer (`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`). Belirli bir sağlayıcıyı zorlamak için `SKILL_SEEKER_PROVIDER` ayarlayın veya daha yüksek öncelikli anahtarların tanımsız olduğundan emin olun. + +**3. Claude uyumlu uç noktalar (ör. GLM, proxy'ler)** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini (`GOOGLE_API_KEY`) ve Kimi/Moonshot (`MOONSHOT_API_KEY`) da yerel olarak desteklenir. Sağlayıcı başına model geçersiz kılmaları dahil tam liste için **[Ortam Değişkenleri Referansı](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)** bölümüne bakın. + +
+ +**Kurulum:** +```bash +# Gemini desteÄŸi ile kur +pip install skill-seekers[gemini] + +# OpenAI desteÄŸi ile kur +pip install skill-seekers[openai] + +# MiniMax desteÄŸi ile kur +pip install skill-seekers[minimax] + +# Tüm LLM platformlarını kur +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG Çerçeve Entegrasyonları + +- ✅ **LangChain Documents** - `page_content` + meta veri ile doÄŸrudan `Document` formatına dışa aktarma + - İçin uygun: QA zincirleri, alıcılar, vektör depoları, ajanlar + - Örnek: [LangChain RAG Hattı](examples/langchain-rag-pipeline/) + - Kılavuz: [LangChain Entegrasyonu](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - Benzersiz ID'ler + gömüler ile `TextNode` formatına dışa aktarma + - İçin uygun: Sorgu motorları, sohbet motorları, depolama baÄŸlamı + - Örnek: [LlamaIndex Sorgu Motoru](examples/llama-index-query-engine/) + - Kılavuz: [LlamaIndex Entegrasyonu](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone-Hazır Format** - Vektör veritabanı yüklemesi için optimize edilmiÅŸ + - İçin uygun: Üretim vektör araması, anlamsal arama, hibrit arama + - Örnek: [Pinecone Yükleme](examples/pinecone-upsert/) + - Kılavuz: [Pinecone Entegrasyonu](docs/integrations/PINECONE.md) + +**Hızlı Dışa Aktarma:** +```bash +# LangChain Documents (JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes (JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown (Evrensel) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**Tam RAG Hattı Kılavuzu:** [RAG Hatları Dokümantasyonu](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI Kodlama Asistanı Entegrasyonları + +Herhangi bir çerçeve dokümantasyonunu 4+ AI asistanı için uzman kodlama baÄŸlamına dönüştürün: + +- ✅ **Cursor IDE** - AI destekli kod önerileri için `.cursorrules` oluÅŸturma + - İçin uygun: Çerçeveye özel kod üretimi, tutarlı desenler + - Birlikte çalışır: Cursor IDE (VS Code çatalı) + - Kılavuz: [Cursor Entegrasyonu](docs/integrations/CURSOR.md) + - Örnek: [Cursor React YeteneÄŸi](examples/cursor-react-skill/) + +- ✅ **Windsurf** - `.windsurfrules` ile Windsurf AI asistanı baÄŸlamını özelleÅŸtirme + - İçin uygun: IDE-yerel AI yardımı, akış tabanlı kodlama + - Birlikte çalışır: Codeium tarafından Windsurf IDE + - Kılavuz: [Windsurf Entegrasyonu](docs/integrations/WINDSURF.md) + - Örnek: [Windsurf FastAPI BaÄŸlamı](examples/windsurf-fastapi-context/) + +- ✅ **Cline (VS Code)** - VS Code ajanı için sistem yönergeleri + MCP + - İçin uygun: VS Code'da ajanlı kod üretimi + - Birlikte çalışır: VS Code için Cline eklentisi + - Kılavuz: [Cline Entegrasyonu](docs/integrations/CLINE.md) + - Örnek: [Cline Django Asistanı](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - IDE bağımsız AI için baÄŸlam sunucuları + - İçin uygun: Çoklu IDE ortamları (VS Code, JetBrains, Vim), özel LLM saÄŸlayıcıları + - Birlikte çalışır: Continue.dev eklentisi bulunan herhangi bir IDE + - Kılavuz: [Continue Entegrasyonu](docs/integrations/CONTINUE_DEV.md) + - Örnek: [Continue Evrensel BaÄŸlam](examples/continue-dev-universal/) + +**AI Kodlama Araçları İçin Hızlı Dışa Aktarma:** +```bash +# Herhangi bir AI kodlama asistanı için (Cursor, Windsurf, Cline, Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # veya --target markdown + +# Projenize kopyalayın (Cursor örneÄŸi) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# Veya Windsurf için +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# Veya Cline için +cp output/django-claude/SKILL.md my-project/.clinerules + +# Veya Continue.dev için (HTTP sunucusu) +python examples/continue-dev-universal/context_server.py +# ~/.continue/config.json içinde yapılandırın +``` + +**Entegrasyon Merkezi:** [Tüm AI Sistemi Entegrasyonları](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 Üç Akışlı GitHub Mimarisi +- ✅ **Üçlü Akış Analizi** - GitHub depolarını Kod, Dokümantasyon ve İçgörü akışlarına ayırma +- ✅ **BirleÅŸik Kod Tabanı Analizcisi** - GitHub URL'leri VE yerel yollarla çalışır +- ✅ **C3.x Analiz DerinliÄŸi** - 'basic' (1-2 dk) veya 'c3x' (20-60 dk) analiz seçimi +- ✅ **GeliÅŸtirilmiÅŸ Yönlendirici OluÅŸturma** - GitHub meta verileri, README hızlı baÅŸlangıç, yaygın sorunlar +- ✅ **Issue Entegrasyonu** - GitHub Issues'dan en yaygın sorunlar ve çözümler +- ✅ **Akıllı Yönlendirme Anahtar Kelimeleri** - Daha iyi konu tespiti için GitHub etiketleri 2 kat ağırlıklandırılmış + +**Üç Akış Açıklaması:** +- **Akış 1: Kod** - Derin C3.x analizi (desenler, örnekler, kılavuzlar, yapılandırmalar, mimari) +- **Akış 2: Dokümantasyon** - Depo dokümantasyonu (README, CONTRIBUTING, docs/*.md) +- **Akış 3: İçgörüler** - Topluluk bilgisi (issues, etiketler, yıldızlar, çatallar) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# GitHub deposunu üç akışla analiz et +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # veya hızlı analiz için "basic" + fetch_github_metadata=True +) + +# Kod akışına eriÅŸ (C3.x analizi) +print(f"Tasarım desenleri: {len(result.code_analysis['c3_1_patterns'])}") +print(f"Test örnekleri: {result.code_analysis['c3_2_examples_count']}") + +# Dokümantasyon akışına eriÅŸ (depo dokümantasyonu) +print(f"README: {result.github_docs['readme'][:100]}") + +# İçgörü akışına eriÅŸ (GitHub meta verileri) +print(f"Yıldızlar: {result.github_insights['metadata']['stars']}") +print(f"Yaygın sorunlar: {len(result.github_insights['common_problems'])}") +``` + +**Tam dokümantasyonu görüntüle**: [Üç Akışlı Uygulama Özeti](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠Akıllı İstek Hızı Limiti Yönetimi ve Yapılandırma +- ✅ **Çoklu Token Yapılandırma Sistemi** - Birden fazla GitHub hesabını yönetme (kiÅŸisel, iÅŸ, açık kaynak) + - `~/.config/skill-seekers/config.json` konumunda güvenli yapılandırma depolama (600 izinleri) + - Profil başına hız limiti stratejileri: `prompt`, `wait`, `switch`, `fail` + - Profil başına yapılandırılabilir zaman aşımı (varsayılan: 30 dk, süresiz beklemeyi önler) + - Akıllı yedekleme zinciri: CLI argümanı → Ortam deÄŸiÅŸkeni → Yapılandırma dosyası → İstem + - Claude, Gemini, OpenAI için API anahtarı yönetimi +- ✅ **EtkileÅŸimli Yapılandırma Sihirbazı** - Kolay kurulum için güzel terminal arayüzü + - Token oluÅŸturma için tarayıcı entegrasyonu (otomatik olarak GitHub vb. açar) + - Token doÄŸrulama ve baÄŸlantı testi + - Renk kodlamalı görsel durum göstergesi +- ✅ **Akıllı Hız Limiti İşleyicisi** - Artık süresiz bekleme yok! + - Hız limitleri hakkında önceden uyarı (60/saat vs 5000/saat) + - GitHub API yanıtlarından gerçek zamanlı algılama + - İlerleme ile canlı geri sayım zamanlayıcıları + - Hız sınırına ulaşıldığında otomatik profil deÄŸiÅŸtirme + - Dört strateji: prompt (sor), wait (geri sayım), switch (baÅŸkasını dene), fail (iptal et) +- ✅ **Devam Etme YeteneÄŸi** - Kesilen iÅŸlere devam etme + - Yapılandırılabilir aralıklarla otomatik ilerleme kaydetme (varsayılan: 60 sn) + - İlerleme ayrıntılarıyla tüm devam ettirilebilir iÅŸleri listeleme + - Eski iÅŸleri otomatik temizleme (varsayılan: 7 gün) +- ✅ **CI/CD DesteÄŸi** - Otomasyon için etkileÅŸimsiz mod + - `--non-interactive` bayrağı istemler olmadan hızlı baÅŸarısızlık + - `--profile` bayrağı ile belirli GitHub hesabı seçimi + - Hat günlükleri için açık hata mesajları + +**Hızlı Kurulum:** +```bash +# Tek seferlik yapılandırma (5 dakika) +skill-seekers config --github + +# Özel depolar için belirli profil kullanma +skill-seekers create mycompany/private-repo --profile work + +# CI/CD modu (hızlı baÅŸarısızlık, istem yok) +skill-seekers create owner/repo --non-interactive + +# Kesilen iÅŸe devam etme +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**Hız Limiti Stratejileri Açıklaması:** +- **prompt** (varsayılan) - Hız sınırına ulaşıldığında ne yapılacağını sor (bekle, deÄŸiÅŸtir, token kur, iptal) +- **wait** - Geri sayım zamanlayıcısıyla otomatik bekleme (zaman aşımına uyar) +- **switch** - Sonraki kullanılabilir profili otomatik deneme (çoklu hesap kurulumları için) +- **fail** - Açık hata ile hemen baÅŸarısız olma (CI/CD için mükemmel) + +### 🎯 Bootstrap YeteneÄŸi - Kendi Kendini Barındırma + +Skill-seekers'ı AI ajanınız (Claude Code, Kimi, Codex vb.) içinde kullanmak üzere bir yetenek olarak oluÅŸturma: + +```bash +# YeteneÄŸi oluÅŸtur +./scripts/bootstrap_skill.sh + +# Claude Code'a yükle +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**Elde ettikleriniz:** +- ✅ **Tam yetenek dokümantasyonu** - Tüm CLI komutları ve kullanım desenleri +- ✅ **CLI komut referansı** - Her araç ve seçenekleri belgelenmiÅŸ +- ✅ **Hızlı baÅŸlangıç örnekleri** - Yaygın iÅŸ akışları ve en iyi uygulamalar +- ✅ **Otomatik oluÅŸturulan API dokümantasyonu** - Kod analizi, desenler ve örnekler + +### 🔠Özel Yapılandırma Depoları +- ✅ **Git Tabanlı Yapılandırma Kaynakları** - Özel/ekip git depolarından yapılandırma getirme +- ✅ **Çoklu Kaynak Yönetimi** - Sınırsız GitHub, GitLab, Bitbucket deposu kaydetme +- ✅ **Ekip İşbirliÄŸi** - 3-5 kiÅŸilik ekipler arasında özel yapılandırmaları paylaÅŸma +- ✅ **Kurumsal Destek** - Öncelik tabanlı çözümleme ile 500+ geliÅŸtiriciye ölçekleme +- ✅ **Güvenli Kimlik DoÄŸrulama** - Ortam deÄŸiÅŸkeni token'ları (GITHUB_TOKEN, GITLAB_TOKEN) +- ✅ **Akıllı Önbellekleme** - Bir kez klonla, güncellemeleri otomatik çek +- ✅ **Çevrimdışı Mod** - Çevrimdışıyken önbelleÄŸe alınmış yapılandırmalarla çalışma + +### 🤖 Kod Tabanı Analizi (C3.x) + +**C3.4: AI ZenginleÅŸtirmeli Yapılandırma Deseni Çıkarma** +- ✅ **9 Yapılandırma Formatı** - JSON, YAML, TOML, ENV, INI, Python, JavaScript, Dockerfile, Docker Compose +- ✅ **7 Desen Türü** - Veritabanı, API, günlükleme, önbellek, e-posta, kimlik doÄŸrulama, sunucu yapılandırmaları +- ✅ **AI ZenginleÅŸtirme** - İsteÄŸe baÄŸlı çift modlu AI analizi (API + LOCAL) + - Her yapılandırmanın ne yaptığını açıklar + - En iyi uygulamaları ve iyileÅŸtirmeleri önerir + - **Güvenlik analizi** - Sabit kodlanmış sırları, açığa çıkmış kimlik bilgilerini bulur +- ✅ **Otomatik Belgeleme** - Tüm yapılandırmaların JSON + Markdown dokümantasyonunu oluÅŸturur +- ✅ **MCP Entegrasyonu** - ZenginleÅŸtirme destekli `extract_config_patterns` aracı + +**C3.3: AI ZenginleÅŸtirilmiÅŸ Nasıl Yapılır Kılavuzları** +- ✅ **Kapsamlı AI ZenginleÅŸtirme** - Temel kılavuzları profesyonel eÄŸitimlere dönüştürme +- ✅ **5 Otomatik İyileÅŸtirme** - Adım açıklamaları, sorun giderme, ön koÅŸullar, sonraki adımlar, kullanım senaryoları +- ✅ **Çift Mod DesteÄŸi** - API modu (Claude API) veya LOCAL modu (Claude Code CLI) +- ✅ **LOCAL Moduyla Ücretsiz** - Claude Code Max planınızı kullanarak ÜCRETSİZ zenginleÅŸtirme +- ✅ **Kalite Dönüşümü** - 75 satırlık ÅŸablonlar → 500+ satırlık kapsamlı kılavuzlar + +**Kullanım:** +```bash +# Hızlı analiz (1-2 dk, yalnızca temel özellikler) +skill-seekers scan tests/ --quick + +# AI ile kapsamlı analiz (20-60 dk, tüm özellikler) +skill-seekers scan tests/ --comprehensive + +# AI zenginleÅŸtirme ile +skill-seekers scan tests/ --enhance +``` + +**Tam Dokümantasyon:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 ZenginleÅŸtirme İş Akışı Ön Ayarları + +AI'nın ham dokümantasyonunuzu cilalı bir yeteneÄŸe nasıl dönüştüreceÄŸini kontrol eden yeniden kullanılabilir YAML tanımlı zenginleÅŸtirme hatları. + +- ✅ **5 YerleÅŸik Ön Ayar** — `default`, `minimal`, `security-focus`, `architecture-comprehensive`, `api-documentation` +- ✅ **Kullanıcı Tanımlı Ön Ayarlar** — `~/.config/skill-seekers/workflows/` dizinine özel iÅŸ akışları ekleme +- ✅ **Çoklu İş Akışları** — Tek komutta iki veya daha fazla iÅŸ akışını zincirleme +- ✅ **Tam CLI Yönetimi** — İş akışlarını listeleme, inceleme, kopyalama, ekleme, kaldırma ve doÄŸrulama + +```bash +# Tek iÅŸ akışı uygula +skill-seekers create ./my-project --enhance-workflow security-focus + +# Birden fazla iÅŸ akışını zincirle (sırayla uygulanır) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# Ön ayarları yönet +skill-seekers workflows list # Tümünü listele (yerleÅŸik + kullanıcı) +skill-seekers workflows show security-focus # YAML içeriÄŸini yazdır +skill-seekers workflows copy security-focus # Düzenleme için kullanıcı dizinine kopyala +skill-seekers workflows add ./my-workflow.yaml # Özel ön ayar yükle +skill-seekers workflows remove my-workflow # Kullanıcı ön ayarını kaldır +skill-seekers workflows validate security-focus # Ön ayar yapısını doÄŸrula + +# Aynı anda birden fazla kopyala +skill-seekers workflows copy security-focus minimal api-documentation + +# Aynı anda birden fazla dosya ekle +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# Aynı anda birden fazla kaldır +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML ön ayar formatı:** +```yaml +name: security-focus +description: "Güvenlik odaklı inceleme: güvenlik açıkları, kimlik doÄŸrulama, veri iÅŸleme" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "OWASP ilk 10 ve yaygın güvenlik açıklarını inceleyin..." + - name: auth-review + type: custom + prompt: "Kimlik doÄŸrulama ve yetkilendirme desenlerini inceleyin..." + uses_history: true +``` + +### âš¡ Performans ve Ölçek +- ✅ **Asenkron Mod** - async/await ile 2-3 kat daha hızlı tarama (`--async` bayrağını kullanın) +- ✅ **Büyük Dokümantasyon DesteÄŸi** - Akıllı bölme ile 10K-40K+ sayfalık dokümantasyonu iÅŸleme +- ✅ **Yönlendirici/Hub Yetenekleri** - ÖzelleÅŸtirilmiÅŸ alt yeteneklere akıllı yönlendirme +- ✅ **Paralel Tarama** - Birden fazla yeteneÄŸi aynı anda iÅŸleme +- ✅ **Kontrol Noktası/Devam Etme** - Uzun taramalarda hiçbir zaman ilerleme kaybetmeyin +- ✅ **Önbellekleme Sistemi** - Bir kez tara, anında yeniden oluÅŸtur + +### 🤖 Ajan Bağımsız Yetenek OluÅŸturma +- ✅ **Çoklu Ajan DesteÄŸi** - `--agent` bayrağı ile Claude, Kimi, Codex, Copilot, OpenCode veya herhangi bir özel ajan için yetenek oluÅŸturma +- ✅ **Özel Ajan Komutları** - ZenginleÅŸtirme için özel bir ajan CLI komutu belirtmek üzere `--agent-cmd` kullanma +- ✅ **Evrensel Bayraklar** - `--agent` ve `--agent-cmd` tüm komutlarda kullanılabilir (create, scrape, github, pdf vb.) + +### 📦 Market Hattı +- ✅ **Markette Yayınlama** - Yetenekleri Claude Code eklenti market depolarında yayınlama +- ✅ **Uçtan Uca Hat** - Dokümantasyon kaynağından yayınlanmış market girdisine kadar + +### ✅ Kalite Güvencesi +- ✅ **Tam Test Kapsamı** - 3.700+ test ile kapsamlı kapsam + +--- + +## 📦 Kurulum + +```bash +# Temel kurulum (dokümantasyon tarama, GitHub analizi, PDF, paketleme) +pip install skill-seekers + +# Tüm LLM platform desteÄŸi ile +pip install skill-seekers[all-llms] + +# MCP sunucusu ile +pip install skill-seekers[mcp] + +# Her ÅŸey +pip install skill-seekers[all] +``` + +**Seçim konusunda yardım mı lazım?** Kurulum sihirbazını çalıştırın: +```bash +skill-seekers-setup +``` + +### Kurulum Seçenekleri + +| Kurulum | Özellikler | +|---------|-----------| +| `pip install skill-seekers` | Tarama, GitHub analizi, PDF, tüm platformlar | +| `pip install skill-seekers[gemini]` | + Google Gemini desteÄŸi | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT desteÄŸi | +| `pip install skill-seekers[all-llms]` | + Tüm LLM platformları | +| `pip install skill-seekers[mcp]` | + Claude Code, Cursor vb. için MCP sunucusu | +| `pip install skill-seekers[video]` | + YouTube/Vimeo altyazı ve meta veri çıkarma | +| `pip install skill-seekers[video-full]` | + Whisper transkripsiyonu ve görsel kare çıkarma | +| `pip install skill-seekers[jupyter]` | + Jupyter Not Defteri desteÄŸi | +| `pip install skill-seekers[pptx]` | + PowerPoint desteÄŸi | +| `pip install skill-seekers[confluence]` | + Confluence viki desteÄŸi | +| `pip install skill-seekers[notion]` | + Notion sayfaları desteÄŸi | +| `pip install skill-seekers[rss]` | + RSS/Atom besleme desteÄŸi | +| `pip install skill-seekers[chat]` | + Slack/Discord sohbet dışa aktarım desteÄŸi | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc belge desteÄŸi | +| `pip install skill-seekers[all]` | Her ÅŸey etkin | + +> **Video görsel bağımlılıkları (GPU destekli):** `skill-seekers[video-full]` kurulumundan sonra +> `skill-seekers create --setup` komutunu çalıştırarak GPU'nuzu otomatik algılayın ve doÄŸru PyTorch +> sürümünü + easyocr'ı yükleyin. Bu, görsel çıkarma bağımlılıklarını yüklemenin önerilen yoludur. + +--- + +## 🚀 Tek Komutla Kurulum İş Akışı + +**Yapılandırmadan yüklenen yeteneÄŸe en hızlı yol — tam otomasyon:** + +```bash +# Resmi yapılandırmalardan React yeteneÄŸini kur (Claude'a otomatik yükle) +skill-seekers install --config react + +# Yerel yapılandırma dosyasından kur +skill-seekers install --config configs/custom.json + +# Yüklemeden kur (yalnızca paketle) +skill-seekers install --config django --no-upload + +# Çalıştırmadan iÅŸ akışını önizle +skill-seekers install --config react --dry-run +``` + +**Süre:** Toplamda 20-45 dakika | **Kalite:** Üretime hazır (9/10) | **Maliyet:** Ücretsiz + +**Yürütülen aÅŸamalar:** +``` +📥 AÅžAMA 1: Yapılandırmayı Getir (yapılandırma adı verilmiÅŸse) +📖 AÅžAMA 2: Dokümantasyonu Tara +✨ AÅžAMA 3: AI ZenginleÅŸtirme (ZORUNLU - atlama seçeneÄŸi yok) +📦 AÅžAMA 4: YeteneÄŸi Paketle +â˜ï¸ AÅžAMA 5: Claude'a Yükle (isteÄŸe baÄŸlı, API anahtarı gerektirir) +``` + +**Gereksinimler:** +- ANTHROPIC_API_KEY ortam deÄŸiÅŸkeni (otomatik yükleme için) +- Claude Code Max planı (yerel AI zenginleÅŸtirme için) veya farklı bir AI ajanı seçmek için `--agent` kullanın + +--- + +## 📊 Özellik Matrisi + +Skill Seekers **12 LLM platformu**, **8 RAG/vektör hedefi**, **18 kaynak türü** ve tüm hedeflerde tam özellik eÅŸitliÄŸini destekler. + +**Platformlar:** Claude AI, Google Gemini, OpenAI ChatGPT, MiniMax AI, Genel Markdown, OpenCode, Kimi, DeepSeek, Qwen, OpenRouter, Together AI, Fireworks AI +**Kaynak Türleri:** Dokümantasyon siteleri, GitHub depoları, PDF'ler, Word (.docx), EPUB, Video, Yerel kod tabanları, Jupyter Not Defterleri, Yerel HTML, OpenAPI/Swagger, AsciiDoc, PowerPoint (.pptx), RSS/Atom beslemeleri, Man sayfaları, Confluence vikileri, Notion sayfaları, Slack/Discord sohbet dışa aktarımları + +Ayrıntılı platform ve özellik desteÄŸi için [Tam Özellik Matrisi](docs/reference/FEATURE_MATRIX.md) bölümüne bakın. + +### Hızlı Platform KarşılaÅŸtırması + +| Özellik | Claude | Gemini | OpenAI | MiniMax | Markdown | +|---------|--------|--------|--------|---------|----------| +| Format | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| Yükleme | ✅ API | ✅ API | ✅ API | ✅ API | ⌠Manuel | +| ZenginleÅŸtirme | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠Yok | +| Tüm Yetenek Modları | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## Kullanım Örnekleri + +### Dokümantasyon Tarama + +```bash +# Dokümantasyon sitesini tara +skill-seekers create --config configs/react.json + +# Yapılandırma olmadan hızlı tarama +skill-seekers create https://react.dev --name react + +# Asenkron mod ile (3 kat daha hızlı) +skill-seekers create --config configs/godot.json --async --workers 8 + +# ZenginleÅŸtirme için belirli bir AI ajanı kullan +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF Çıkarma + +```bash +# Temel PDF çıkarma +skill-seekers create --pdf docs/manual.pdf --name myskill + +# GeliÅŸmiÅŸ özellikler +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # Tabloları çıkar + --parallel \ # Hızlı paralel iÅŸleme + --workers 8 # 8 CPU çekirdeÄŸi kullan + +# Taranmış PDF'ler (gerekli: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### Video Çıkarma + +```bash +# Video desteÄŸini kur +pip install skill-seekers[video] # Altyazılar + meta veri +pip install skill-seekers[video-full] # + Whisper transkripsiyonu + görsel kare çıkarma + +# GPU'yu otomatik algıla ve görsel bağımlılıkları kur (PyTorch + easyocr) +skill-seekers create --setup + +# YouTube videosundan çıkar +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# YouTube oynatma listesinden çıkar +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# Yerel video dosyasından çıkar +skill-seekers create --video-file recording.mp4 --name myrecording + +# Görsel kare analizi ile çıkar (video-full bağımlılıkları gerektirir) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# AI zenginleÅŸtirme ile (OCR'ı temizle + cilalı SKILL.md oluÅŸtur) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# Videonun belirli bir bölümünü kırp (saniye, DD:SS, SS:DD:SS destekler) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# Düşük güvenilirlikli OCR kareleri için Vision API kullan (ANTHROPIC_API_KEY gerektirir) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# Daha önce çıkarılmış verilerden yeteneÄŸi yeniden oluÅŸtur (indirmeyi atla) +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **Tam kılavuz:** Eksiksiz CLI referansı, görsel hat ayrıntıları, AI zenginleÅŸtirme seçenekleri +> ve sorun giderme için [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) bölümüne bakın. + +### GitHub Deposu Analizi + +```bash +# Temel depo tarama +skill-seekers create facebook/react + +# Kimlik doÄŸrulama ile (daha yüksek hız limitleri) +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# Nelerin dahil edileceÄŸini özelleÅŸtir +skill-seekers create django/django \ + --include-issues \ # GitHub Issues çıkar + --max-issues 100 \ # Issue sayısını sınırla + --include-changelog # CHANGELOG.md çıkar +``` + +### BirleÅŸik Çoklu Kaynak Tarama + +**Çakışma tespiti ile dokümantasyon + GitHub + PDF'yi tek bir birleÅŸik yeteneÄŸe dönüştürme:** + +```bash +# Mevcut birleÅŸik yapılandırmaları kullan +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# Veya birleÅŸik yapılandırma oluÅŸtur +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**Çakışma Tespiti otomatik olarak ÅŸunları bulur:** +- 🔴 **Kodda eksik** (yüksek): BelgelenmiÅŸ ama uygulanmamış +- 🟡 **Dokümantasyonda eksik** (orta): Uygulanmış ama belgelenmemiÅŸ +- âš ï¸ **İmza uyuÅŸmazlığı**: Farklı parametreler/türler +- â„¹ï¸ **Açıklama uyuÅŸmazlığı**: Farklı açıklamalar + +**Tam Kılavuz:** Eksiksiz dokümantasyon için [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md) bölümüne bakın. + +### Özel Yapılandırma Depoları + +**Özel git depoları kullanarak ekipler arasında özel yapılandırmaları paylaÅŸma:** + +```bash +# Seçenek 1: MCP araçlarını kullanma (önerilen) +# Ekibinizin özel deposunu kaydedin +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# Ekip deposundan yapılandırma getir +fetch_config(source="team", config_name="internal-api") +``` + +**Desteklenen Platformlar:** +- GitHub (`GITHUB_TOKEN`), GitLab (`GITLAB_TOKEN`), Gitea (`GITEA_TOKEN`), Bitbucket (`BITBUCKET_TOKEN`) + +**Tam Kılavuz:** Eksiksiz dokümantasyon için [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md) bölümüne bakın. + +## Nasıl Çalışır + +```mermaid +graph LR + A[Dokümantasyon Sitesi] --> B[Skill Seekers] + B --> C[Tarayıcı] + B --> D[AI ZenginleÅŸtirme] + B --> E[Paketleyici] + C --> F[DüzenlenmiÅŸ Referanslar] + D --> F + F --> E + E --> G[AI YeteneÄŸi .zip] + G --> H[AI Platformuna Yükle] +``` + +0. **llms.txt Algılama** - Önce llms-full.txt, llms.txt, llms-small.txt kontrol eder (Akıllı SPA KeÅŸfi'nin bir parçası) +1. **Tarama**: Dokümantasyondaki tüm sayfaları çıkarır +2. **Kategorileme**: İçeriÄŸi konulara göre düzenler (API, kılavuzlar, eÄŸitimler vb.) +3. **ZenginleÅŸtirme**: AI dokümantasyonu analiz eder ve örneklerle kapsamlı SKILL.md oluÅŸturur (`--agent` ile birden fazla ajanı destekler) +4. **Paketleme**: Her ÅŸeyi platforma hazır `.zip` dosyasına paketler + +## Mimari + +Sistem, **8 çekirdek modül** ve **5 yardımcı modül** olarak düzenlenmiÅŸtir (toplam ~200 sınıf): + +![Paket Genel Bakışı](docs/UML/exports/00_package_overview.png) + +| Modül | Amaç | Anahtar Sınıflar | +|-------|------|------------------| +| **CLICore** | Git tarzı komut dağıtıcısı | `CLIDispatcher`, `SourceDetector`, `CreateCommand` | +| **Scrapers** | 18 kaynak türü çıkarıcısı | `DocToSkillConverter`, `DocumentSkillBuilder` (paylaşılan derleme katmanı), `UnifiedScraper` | +| **Adaptors** | 20+ çıktı platformu formatı | `SkillAdaptor` (ABC), `ClaudeAdaptor`, `LangChainAdaptor` | +| **Analysis** | C3.x kod tabanı analiz hattı | `UnifiedCodebaseAnalyzer`, `PatternRecognizer`, 10 GoF dedektörü | +| **Enhancement** | `AgentClient` üzerinden AI destekli yetenek iyileÅŸtirme | `AgentClient`, `AIEnhancer`, `UnifiedEnhancer`, `WorkflowEngine` | +| **Packaging** | Yetenekleri paketleme, yükleme, kurma | `PackageSkill`, `InstallAgent` | +| **MCP** | FastMCP sunucusu (40 araç) | `SkillSeekerMCPServer`, 10 araç modülü | +| **Sync** | Dokümantasyon deÄŸiÅŸikliÄŸi algılama | `ChangeDetector`, `SyncMonitor`, `Notifier` | + +Yardımcı modüller: **Parsers** (28 CLI ayrıştırıcısı), **Storage** (S3/GCS/Azure), **Embedding** (çoklu saÄŸlayıcı vektörler), **Benchmark** (performans), **Utilities** (16 paylaşılan yardımcı). + +Tam UML diyagramları: **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML projesi: `docs/UML/skill_seekers.mdj` | HTML API referansı: `docs/UML/html/` + +## 📋 Ön KoÅŸullar + +**BaÅŸlamadan önce ÅŸunlara sahip olduÄŸunuzdan emin olun:** + +1. **Python 3.10 veya üstü** - [İndir](https://www.python.org/downloads/) | Kontrol: `python3 --version` +2. **Git** - [İndir](https://git-scm.com/) | Kontrol: `git --version` +3. **İlk kurulum için 15-30 dakika** + +**İlk kez mi kullanıyorsunuz?** → **[Buradan BaÅŸlayın: KurÅŸun Geçirmez Hızlı BaÅŸlangıç Kılavuzu](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 Yetenekleri Claude'a Yükleme + +YeteneÄŸiniz paketlendikten sonra Claude'a yüklemeniz gerekir: + +### Seçenek 1: Otomatik Yükleme (API tabanlı) + +```bash +# API anahtarınızı ayarlayın (tek seferlik) +export ANTHROPIC_API_KEY=sk-ant-... + +# Otomatik olarak paketle ve yükle +skill-seekers package output/react/ --upload + +# VEYA mevcut .zip'i yükle +skill-seekers upload output/react.zip +``` + +### Seçenek 2: Manuel Yükleme (API Anahtarı Gerekmez) + +```bash +# YeteneÄŸi paketle +skill-seekers package output/react/ +# → output/react.zip oluÅŸturur + +# Sonra manuel olarak yükleyin: +# - https://claude.ai/skills adresine gidin +# - "Upload Skill" düğmesine tıklayın +# - output/react.zip dosyasını seçin +``` + +### Seçenek 3: MCP (Claude Code) + +``` +Claude Code'da ÅŸunu sorun: +"React yeteneÄŸini paketle ve yükle" +``` + +--- + +## 🤖 AI Ajanlara Yükleme + +Skill Seekers, yetenekleri 19 AI kodlama ajanına otomatik olarak yükleyebilir. + +```bash +# Belirli bir ajana yükle +skill-seekers install-agent output/react/ --agent cursor + +# IBM Bob'a yükle (proje yerelinde .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# Tüm ajanlara aynı anda yükle +skill-seekers install-agent output/react/ --agent all + +# Yüklemeden önizle +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### Desteklenen Ajanlar + +| Ajan | Yol | Tür | +|------|-----|-----| +| **Claude Code** | `~/.claude/skills/` | Global | +| **Cursor** | `.cursor/skills/` | Proje | +| **VS Code / Copilot** | `.github/skills/` | Proje | +| **Amp** | `~/.amp/skills/` | Global | +| **Goose** | `~/.config/goose/skills/` | Global | +| **OpenCode** | `~/.opencode/skills/` | Global | +| **Windsurf** | `~/.windsurf/skills/` | Global | +| **Roo Code** | `.roo/skills/` | Proje | +| **Cline** | `.cline/skills/` | Proje | +| **Aider** | `~/.aider/skills/` | Global | +| **Bolt** | `.bolt/skills/` | Proje | +| **Kilo Code** | `.kilo/skills/` | Proje | +| **Continue** | `~/.continue/skills/` | Global | +| **Kimi Code** | `~/.kimi/skills/` | Global | +| **IBM Bob** | `.bob/skills/` | Proje | + +--- + +## 🔌 MCP Entegrasyonu (40 Araç) + +Skill Seekers, Claude Code, Cursor, Windsurf, VS Code + Cline veya IntelliJ IDEA'dan kullanılmak üzere bir MCP sunucusu saÄŸlar. + +```bash +# stdio modu (Claude Code, VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP modu (Cursor, Windsurf, IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# Tüm ajanları aynı anda otomatik yapılandır +./setup_mcp.sh +``` + +**Mevcut tüm 40 araç:** +- **Çekirdek (9):** `list_configs`, `generate_config`, `validate_config`, `estimate_pages`, `scrape_docs`, `package_skill`, `upload_skill`, `enhance_skill`, `install_skill` +- **GeniÅŸletilmiÅŸ (10):** `scrape_github`, `scrape_pdf`, `unified_scrape`, `merge_sources`, `detect_conflicts`, `add_config_source`, `fetch_config`, `list_config_sources`, `remove_config_source`, `split_config` +- **Vektör Veritabanı (4):** `export_to_chroma`, `export_to_weaviate`, `export_to_faiss`, `export_to_qdrant` +- **Bulut (3):** `cloud_upload`, `cloud_download`, `cloud_list` + +**Tam Kılavuz:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ Yapılandırma + +### Mevcut Ön Ayarlar (24+) + +```bash +# Tüm ön ayarları listele +# skill-seekers list-configs # v3.7.0'da mevcut deÄŸil +``` + +| Kategori | Ön Ayarlar | +|----------|-----------| +| **Web Çerçeveleri** | `react`, `vue`, `angular`, `svelte`, `nextjs` | +| **Python** | `django`, `flask`, `fastapi`, `sqlalchemy`, `pytest` | +| **Oyun GeliÅŸtirme** | `godot`, `pygame`, `unity` | +| **Araçlar ve DevOps** | `docker`, `kubernetes`, `terraform`, `ansible` | +| **BirleÅŸik (Dokümantasyon + GitHub)** | `react-unified`, `vue-unified`, `nextjs-unified` ve daha fazlası | + +### Kendi Yapılandırmanızı OluÅŸturma + +```bash +# Seçenek 1: EtkileÅŸimli +skill-seekers create --interactive + +# Seçenek 2: Bir ön ayarı kopyalayıp düzenleme +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### Yapılandırma Dosyası Yapısı + +```json +{ + "name": "myframework", + "description": "Bu yeteneÄŸin ne zaman kullanılacağı", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### Yapılandırmaların Aranma Sırası + +Araç aÅŸağıdaki sırayla arar: +1. Belirtilen tam yol +2. `./configs/` (mevcut dizin) +3. `~/.config/skill-seekers/configs/` (kullanıcı yapılandırma dizini) +4. SkillSeekersWeb.com API (ön ayar yapılandırmaları) + +--- + +## 📊 OluÅŸturulan İçerik + +``` +output/ +├── godot_data/ # Taranan ham veriler +│ ├── pages/ # JSON dosyaları (sayfa başına bir tane) +│ └── summary.json # Genel bakış +│ +└── godot/ # Yetenek + ├── SKILL.md # Gerçek örneklerle zenginleÅŸtirilmiÅŸ + ├── references/ # Kategorize edilmiÅŸ dokümantasyon + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # BoÅŸ (kendinizinkini ekleyin) + └── assets/ # BoÅŸ (kendinizinkini ekleyin) +``` + +--- + +## 🛠Sorun Giderme + +### İçerik Çıkarılmadı mı? +- `main_content` seçicinizi kontrol edin +- Deneyin: `article`, `main`, `div[role="main"]` + +### Veri Var Ama Kullanılmıyor mu? +```bash +# Yeniden taramaya zorla +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### Kategoriler İyi DeÄŸil mi? +Yapılandırmadaki `categories` bölümünü daha iyi anahtar kelimelerle düzenleyin. + +### Dokümantasyonu Güncellemek mi İstiyorsunuz? +```bash +# Eski verileri sil ve yeniden tara +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### ZenginleÅŸtirme Çalışmıyor mu? +```bash +# API anahtarının ayarlanıp ayarlanmadığını kontrol edin +echo $ANTHROPIC_API_KEY + +# Bunun yerine LOCAL modunu deneyin (Claude Code Max kullanır, API anahtarı gerekmez) +skill-seekers enhance output/react/ --mode LOCAL + +# Arka plan zenginleÅŸtirme durumunu izleyin +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub Hız Limiti Sorunları mı? +```bash +# GitHub token ayarlayın (anonim 60/saat yerine 5000 istek/saat) +export GITHUB_TOKEN=ghp_your_token_here + +# Veya birden fazla profil yapılandırın +skill-seekers config --github +``` + +--- + +## 📈 Performans + +| Görev | Süre | Notlar | +|-------|------|--------| +| Tarama (senkron) | 15-45 dk | Yalnızca ilk seferinde, iÅŸ parçacığı tabanlı | +| Tarama (asenkron) | 5-15 dk | `--async` bayrağı ile 2-3 kat daha hızlı | +| Derleme | 1-3 dk | Önbellekten hızlı yeniden derleme | +| Yeniden derleme | <1 dk | `--skip-scrape` ile | +| ZenginleÅŸtirme (LOCAL) | 30-60 sn | Claude Code Max kullanır | +| ZenginleÅŸtirme (API) | 20-40 sn | API anahtarı gerektirir | +| Video (altyazı) | 1-3 dk | YouTube/yerel, yalnızca altyazı | +| Video (görsel) | 5-15 dk | + OCR kare çıkarma | +| Paketleme | 5-10 sn | Son .zip oluÅŸturma | + +--- + +## 🆕 v3.6.0'daki Yenilikler + +### İş Akışı Ön Ayarları +Analiz derinliÄŸini `--preset` ile kontrol edin: + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # Hızlı, yüzeysel +skill-seekers create https://docs.react.dev/ --preset standard # Dengeli (varsayılan) +skill-seekers create https://docs.react.dev/ --preset comprehensive # Derin, kapsamlı +``` + +### YaÅŸam Döngüsü Bayrakları +```bash +skill-seekers create https://docs.react.dev/ --dry-run # Tarama olmadan önizleme +skill-seekers create https://docs.react.dev/ --fresh # ÖnbelleÄŸi yoksay, tam yeniden tarama +skill-seekers create https://docs.react.dev/ --resume # Kesintiye uÄŸrayan iÅŸi sürdür +skill-seekers create https://docs.react.dev/ --skip-scrape # Mevcut çıktıyı yeniden paketle +``` + +### SaÄŸlık Kontrolü ve Araçlar +```bash +skill-seekers doctor # Kurulum ve ortamı teÅŸhis et +skill-seekers sync-config # Yapılandırma sapmasını algıla +skill-seekers stream # Büyük dokümanlar için akış alımı +skill-seekers update output/react/ # Artımlı güncelleme +skill-seekers multilang # Çok dilli yetenek oluÅŸturma +skill-seekers quality output/react/ # Kalite raporu (kapı için --threshold 7 ekleyin: 7/10 altında sıfırdan farklı çıkış kodu) +``` + +### RAG Parçalama Seçenekleri (paketleme) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### Markette Yayınlama +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### Ek İsteÄŸe BaÄŸlı Bağımlılıklar +| Ek Paket | Kurulum | Amaç | +|----------|---------|------| +| `browser` | `pip install "skill-seekers[browser]"` | SPA siteleri için baÅŸsız Playwright | +| `embedding` | `pip install "skill-seekers[embedding]"` | Gömme (embedding) sunucu desteÄŸi | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` vb. | Bulut depolama yüklemesi | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | BirleÅŸik vektör veritabanı yükleme bağımlılıkları | + +--- + +## 📚 Dokümantasyon + +### BaÅŸlarken +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 Yeniyseniz **BURADAN BAÅžLAYIN!** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - Deneyimli kullanıcılar için hızlı baÅŸlangıç +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Yaygın sorunlar ve çözümler +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - Tek sayfalık hızlı referans + +### Mimari +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - 14 diyagramlı UML mimari genel bakışı +- **[docs/UML/exports/](docs/UML/exports/)** - PNG diyagram dışa aktarımları (paket genel bakışı + 13 sınıf diyagramı) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - Tam HTML API referansı (tüm sınıflar, iÅŸlemler, öznitelikler) +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML proje dosyası ([StarUML](https://staruml.io/) ile açın) + +### Kılavuzlar +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - 10K-40K+ sayfalık dokümantasyonu iÅŸleme +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI zenginleÅŸtirme modları kılavuzu +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP entegrasyon kurulumu +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - Çoklu kaynak tarama +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - Video çıkarma kılavuzu + +### Entegrasyon Kılavuzları +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline (VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - Tüm RAG hatları + +--- + +## 📠Lisans + +MIT Lisansı - ayrıntılar için [LICENSE](LICENSE) dosyasına bakın + +--- + +Keyifli yetenek oluÅŸturmalar! 🚀 + +--- + +## 🔒 Güvenlik + +[![MseeP.ai Güvenlik DeÄŸerlendirme Rozeti](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 Sponsorlar + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — tam modlu, OpenAI uyumlu bir AI çıkarım platformu. Skill Seekers, `ATLAS_API_KEY` ile `--target atlas` üzerinden paketleme/zenginleÅŸtirme hedefi olarak destekler. diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..2dc880a --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub æ¥æºè¯´æ˜Ž + +- 原始项目:`yusufkaraaslan/Skill_Seekers` +- 原始仓库:https://github.com/yusufkaraaslan/Skill_Seekers +- 导入方å¼ï¼šä¸Šæ¸¸é»˜è®¤åˆ†æ”¯çš„æœ€æ–°å¿«ç…§ +- 原作者ã€ç‰ˆæƒå’Œè®¸å¯è¯ä¿¡æ¯ä»¥åŽŸå§‹ä»“åº“åŠæœ¬ä»“库 LICENSE 为准 +- æœ¬æ–‡ä»¶ä»…ç”¨äºŽè®°å½•æ¥æºï¼Œä¸ä»£è¡¨ WeHub 是原项目作者 diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..f3ece28 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,1376 @@ +

+ Skill Seekers +

+ +# Skill Seekers + +[English](README.md) | 简体中文 | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português](README.pt-BR.md) | [Türkçe](README.tr.md) | [العربية](README.ar.md) | [हिनà¥à¤¦à¥€](README.hi.md) | [РуÑÑкий](README.ru.md) + +> âš ï¸ **机器翻译声明** +> +> 本文档由 AI 自动翻译生æˆã€‚虽然我们努力确ä¿ç¿»è¯‘è´¨é‡ï¼Œä½†å¯èƒ½å­˜åœ¨ä¸å‡†ç¡®æˆ–ä¸è‡ªç„¶çš„表述。 +> +> 欢迎通过 [GitHub Issue #260](https://github.com/yusufkaraaslan/Skill_Seekers/issues/260) å¸®åŠ©æ”¹è¿›ç¿»è¯‘ï¼æ‚¨çš„å馈对我们éžå¸¸å®è´µã€‚ + +[![版本](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/yusufkaraaslan/Skill_Seekers/releases) +[![许å¯è¯: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) +[![MCP 集æˆ](https://img.shields.io/badge/MCP-40-Tools-blue.svg)](https://modelcontextprotocol.io) +[![测试通过](https://img.shields.io/badge/Tests-3700%2B%20Passing-brightgreen.svg)](tests/) +[![项目看æ¿](https://img.shields.io/badge/Project-Board-purple.svg)](https://github.com/users/yusufkaraaslan/projects/2) +[![PyPI 版本](https://badge.fury.io/py/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - 下载é‡](https://img.shields.io/pypi/dm/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI - Python 版本](https://img.shields.io/pypi/pyversions/skill-seekers.svg)](https://pypi.org/project/skill-seekers/) +[![PyPI Downloads](https://static.pepy.tech/personalized-badge/skill-seekers?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/skill-seekers) +Trendshift +[![官方网站](https://img.shields.io/badge/Website-skillseekersweb.com-blue.svg)](https://skillseekersweb.com/) +[![关注 Twitter](https://img.shields.io/twitter/follow/_yUSyUS_?style=social)](https://x.com/_yUSyUS_) +[![GitHub Stars](https://img.shields.io/github/stars/yusufkaraaslan/Skill_Seekers?style=social)](https://github.com/yusufkaraaslan/Skill_Seekers) + +**🧠 AI 系统的数æ®å±‚。** Skill Seekers 将文档网站ã€GitHub 仓库ã€PDFã€è§†é¢‘ã€ç¬”记本ã€Wiki ç­‰ 18 ç§æ¥æºç±»åž‹è½¬æ¢ä¸ºç»“构化知识资产——å¯åœ¨å‡ åˆ†é’Ÿï¼ˆè€Œéžå‡ å°æ—¶ï¼‰å†…为 AI 技能(Claudeã€Geminiã€OpenAI)ã€RAG æµæ°´çº¿ï¼ˆLangChainã€LlamaIndexã€Pinecone)和 AI 编程助手(Cursorã€Windsurfã€Cline)æä¾›æ”¯æŒã€‚ + +> 🌠**[访问 SkillSeekersWeb.com](https://skillseekersweb.com/)** - æµè§ˆ 24+ 个预设é…置,分享您的é…ç½®ï¼Œè®¿é—®å®Œæ•´æ–‡æ¡£ï¼ + +> 📋 **[查看开å‘路线图和任务](https://github.com/users/yusufkaraaslan/projects/2)** - 10 个类别的 134 个任务,选择任æ„一个å‚ä¸Žè´¡çŒ®ï¼ + +## 🌠生æ€ç³»ç»Ÿ + +Skill Seekers 是一个多仓库项目。以下是å„部分所在ä½ç½®ï¼š + +| 仓库 | æè¿° | 链接 | +|------|------|------| +| **[Skill_Seekers](https://github.com/yusufkaraaslan/Skill_Seekers)** | 核心 CLI å’Œ MCP æœåŠ¡å™¨ï¼ˆæœ¬ä»“åº“ï¼‰ | [PyPI](https://pypi.org/project/skill-seekers/) | +| **[skillseekersweb](https://github.com/yusufkaraaslan/skillseekersweb)** | 网站和文档 | [在线](https://skillseekersweb.com/) | +| **[skill-seekers-configs](https://github.com/yusufkaraaslan/skill-seekers-configs)** | 社区é…置仓库 | | +| **[skill-seekers-action](https://github.com/yusufkaraaslan/skill-seekers-action)** | GitHub Action CI/CD | | +| **[skill-seekers-plugin](https://github.com/yusufkaraaslan/skill-seekers-plugin)** | Claude Code æ’ä»¶ | | +| **[homebrew-skill-seekers](https://github.com/yusufkaraaslan/homebrew-skill-seekers)** | macOS Homebrew tap | | + +> **想è¦è´¡çŒ®ï¼Ÿ** 网站和é…ç½®ä»“åº“æ˜¯æ–°è´¡çŒ®è€…çš„æœ€ä½³èµ·ç‚¹ï¼ + +## 🧠 AI 系统的数æ®å±‚ + +**Skill Seekers 是通用预处ç†å±‚**,ä½äºŽåŽŸå§‹æ–‡æ¡£å’Œæ‰€æœ‰ä½¿ç”¨å®ƒçš„ AI 系统之间。无论您是在构建 Claude 技能ã€LangChain RAG æµæ°´çº¿ï¼Œè¿˜æ˜¯ Cursor `.cursorrules` 文件——数æ®å‡†å¤‡å·¥ä½œå®Œå…¨ç›¸åŒã€‚åªéœ€æ‰§è¡Œä¸€æ¬¡ï¼Œå³å¯å¯¼å‡ºåˆ°æ‰€æœ‰ç›®æ ‡å¹³å°ã€‚ + +```bash +# 一æ¡å‘½ä»¤ → 结构化知识资产 +skill-seekers create https://docs.react.dev/ +# 或: skill-seekers create facebook/react +# 或: skill-seekers create ./my-project + +# å¯¼å‡ºåˆ°ä»»æ„ AI 系统 +skill-seekers package output/react --target claude # → Claude AI 技能 (ZIP) +skill-seekers package output/react --target langchain # → LangChain Documents +skill-seekers package output/react --target llama-index # → LlamaIndex TextNodes +skill-seekers package output/react --target cursor # → .cursorrules +skill-seekers package output/react --target ibm-bob # → IBM Bob 技能目录 +``` + +### 坿ž„建的输出 + +| 输出 | 目标 | 应用场景 | +|------|------|---------| +| **Claude 技能** (ZIP + YAML) | `--target claude` | Claude Codeã€Claude API | +| **Gemini 技能** (tar.gz) | `--target gemini` | Google Gemini | +| **OpenAI / Custom GPT** (ZIP) | `--target openai` | GPT-4oã€è‡ªå®šä¹‰åŠ©æ‰‹ | +| **LangChain Documents** | `--target langchain` | QA é“¾ã€æ™ºèƒ½ä½“ã€æ£€ç´¢å™¨ | +| **LlamaIndex TextNodes** | `--target llama-index` | 查询引擎ã€å¯¹è¯å¼•擎 | +| **Haystack Documents** | `--target haystack` | ä¼ä¸šçº§ RAG æµæ°´çº¿ | +| **Pinecone 就绪** (Markdown) | `--target markdown` | å‘é‡ä¸Šä¼  | +| **ChromaDB / FAISS / Qdrant** | `--target chroma/faiss/qdrant` | 本地å‘釿•°æ®åº“ | +| **IBM Bob 技能**(目录) | `--target ibm-bob` | IBM Bob 项目/全局技能 | +| **Cursor** `.cursorrules` | `--target markdown` → å¤åˆ¶ SKILL.md | Cursor IDE `.cursorrules` | +| **Windsurf / Cline / Continue** | `--target claude` → å¤åˆ¶ | VS Codeã€IntelliJã€Vim | + +### 为什么选择 Skill Seekers + +- âš¡ **å¿« 99%** — 数天的手动数æ®å‡†å¤‡ → 15–45 分钟 +- 🎯 **AI 技能质é‡** — 500+ 行的 SKILL.md 文件,包å«ç¤ºä¾‹ã€æ¨¡å¼å’ŒæŒ‡å— +- 📊 **RAG 就绪的分å—** — 智能分å—ä¿ç•™ä»£ç å—并维护上下文 +- 🎬 **视频** — 从 YouTube 和本地视频æå–代ç ã€å­—幕和结构化知识 +- 🔄 **å¤šæºæ”¯æŒ** — å°† 18 ç§æ¥æºç±»åž‹ï¼ˆæ–‡æ¡£ã€GitHubã€PDFã€è§†é¢‘ã€ç¬”记本ã€Wiki 等)åˆå¹¶ä¸ºä¸€ä¸ªçŸ¥è¯†èµ„产 +- 🌠**一次准备,导出所有目标** — æ— éœ€é‡æ–°æŠ“å–å³å¯å°†åŒä¸€èµ„产导出到 21 ä¸ªå¹³å° +- ✅ **ä¹…ç»è€ƒéªŒ** — 3,700+ 测试,24+ 框架预设,生产就绪 + +## 🚀 快速开始(3 æ¡å‘½ä»¤ï¼‰ + +```bash +# 1. 安装 +pip install skill-seekers + +# 2. ä»Žä»»æ„æ¥æºåˆ›å»ºæŠ€èƒ½ +skill-seekers create https://docs.django.com/ + +# 3. 为您的 AI 平尿‰“包 +skill-seekers package output/django --target claude +``` + +**就是这么简å•ï¼** 您现在已拥有å¯ç›´æŽ¥ä½¿ç”¨çš„ `output/django-claude.zip`。 + +```bash +# 使用其他 AI 代ç†è¿›è¡Œå¢žå¼ºï¼ˆé»˜è®¤ï¼šclaude) +skill-seekers create https://docs.django.com/ --agent kimi +skill-seekers create https://docs.django.com/ --agent codex +skill-seekers create https://docs.django.com/ --agent-cmd "my-custom-agent run" +``` + +### ðŸ›°ï¸ AI 驱动的项目扫æï¼ˆæ–°åŠŸèƒ½ï¼‰ + +å°† `scan` 指å‘ä»»æ„项目,AI 代ç†ä¼šè¯»å–å…¶æ¸…å•æ–‡ä»¶ã€READMEã€Dockerfile/CI 和采样的æºç å¯¼å…¥â€”—然åŽä¸ºæ¯ä¸ªæ£€æµ‹åˆ°çš„æ¡†æž¶ç”Ÿæˆä¸€ä¸ªé…置文件,并为您自己的代ç ç”Ÿæˆ `-codebase.json`ã€‚å®ƒä¼šå›ºå®šæ£€æµ‹åˆ°çš„ç‰ˆæœ¬ï¼Œå› æ­¤é‡æ–°è¿è¡Œæ—¶ä¼šæŠ¥å‘Šç‰ˆæœ¬å‡çº§ï¼š + +```bash +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, vite.json, tailwind.json, jest.json, my-react-app-codebase.json + +# ç„¶åŽæž„建其中任æ„一个 +skill-seekers create ./configs/scanned/react.json +``` + +如果æŸä¸ªæ£€æµ‹ç»“果没有现æˆé¢„设,AI 会生æˆå…¨æ–°é…置;退出时您å¯ä»¥é€‰æ‹©å°†å…¶å‘布回 [社区注册表](https://github.com/yusufkaraaslan/skill-seekers-configs)。 + +### å…¶ä»–æ¥æºï¼ˆæ”¯æŒ 18 ç§ï¼‰ + +```bash +# GitHub 仓库 +skill-seekers create facebook/react + +# 本地项目 +skill-seekers create ./my-project + +# PDF 文档 +skill-seekers create manual.pdf + +# Word 文档 +skill-seekers create report.docx + +# EPUB 电å­ä¹¦ +skill-seekers create book.epub + +# Jupyter 笔记本 +skill-seekers create notebook.ipynb + +# OpenAPI 规范 +skill-seekers create openapi.yaml + +# PowerPoint 演示文稿 +skill-seekers create presentation.pptx + +# AsciiDoc 文档 +skill-seekers create guide.adoc + +# 本地 HTML æ–‡ä»¶ï¼ˆæ ¹æ®æ‰©å±•å自动检测) +skill-seekers create page.html + +# 整个 HTML 文件目录(自动检测以 HTML 为主的目录) +skill-seekers create ./mirror_output/site/ + +# åœ¨ä»£ç æ··æ‚的目录上强制 HTML æ¨¡å¼ +skill-seekers create ./repo/ --html-path ./repo/docs/build/html/ + +# RSS/Atom è®¢é˜…æº +skill-seekers create feed.rss + +# Man 手册页 +skill-seekers create curl.1 + +# 视频(YouTubeã€Vimeo 或本地文件 — éœ€è¦ skill-seekers[video]) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial +# 首次使用?自动安装 GPU 感知的视觉ä¾èµ–: +skill-seekers create --setup + +# Confluence 维基 +skill-seekers create --space-key TEAM --name wiki + +# Notion é¡µé¢ +skill-seekers create --database-id ... --name docs + +# Slack/Discord èŠå¤©è®°å½• +skill-seekers create --chat-export-path ./slack-export --name team-chat +``` + +### 导出到任何地方 + +```bash +# ä¸ºå¤šä¸ªå¹³å°æ‰“包 +for platform in claude gemini openai langchain; do + skill-seekers package output/django --target $platform +done +``` + +## 什么是 Skill Seekers? + +Skill Seekers 是 **AI 系统的数æ®å±‚**,将 18 ç§æ¥æºç±»åž‹â€”—文档网站ã€GitHub 仓库ã€PDFã€è§†é¢‘ã€Jupyter 笔记本ã€Word/EPUB/AsciiDoc 文档ã€OpenAPI 规范ã€PowerPoint 演示文稿ã€RSS 订阅æºã€Man 手册页ã€Confluence 维基ã€Notion 页é¢ã€Slack/Discord èŠå¤©è®°å½•等——转æ¢ä¸ºé€‚用于所有 AI 目标的结构化知识资产: + +| 使用场景 | 获得的内容 | 示例 | +|---------|-----------|------| +| **AI 技能** | 完整的 SKILL.md + å‚考文件 | Claude Codeã€Geminiã€GPT | +| **RAG æµæ°´çº¿** | 带丰富元数æ®çš„åˆ†å—æ–‡æ¡£ | LangChainã€LlamaIndexã€Haystack | +| **å‘釿•°æ®åº“** | 预格å¼åŒ–çš„å¾…ä¸Šä¼ æ•°æ® | Pineconeã€Chromaã€Weaviateã€FAISS | +| **AI 编程助手** | IDE AI 自动读å–的上下文文件 | Cursorã€Windsurfã€Clineã€Continue.dev | + +## 📚 文档 + +| 我想è¦... | 阅读此文档 | +|--------------|-----------| +| **快速上手** | [快速开始](docs/getting-started/02-quick-start.md) - 3 æ¡å‘½ä»¤æž„建首个技能 | +| **ç†è§£æ¦‚念** | [核心概念](docs/user-guide/01-core-concepts.md) - å·¥ä½œåŽŸç† | +| **æŠ“å–æ¥æº** | [æŠ“å–æŒ‡å—](docs/user-guide/02-scraping.md) - æ‰€æœ‰æ¥æºç±»åž‹ | +| **增强技能** | [增强指å—](docs/user-guide/03-enhancement.md) - AI 增强 | +| **导出技能** | [打包指å—](docs/user-guide/04-packaging.md) - å¹³å°å¯¼å‡º | +| **查询命令** | [CLI å‚考](docs/reference/CLI_REFERENCE.md) - 全部 20 æ¡å‘½ä»¤ | +| **进行é…ç½®** | [é…置格å¼](docs/reference/CONFIG_FORMAT.md) - JSON 规范 | +| **解决问题** | [故障排除](docs/user-guide/06-troubleshooting.md) - 常è§é—®é¢˜ | + +**完整文档:** [docs/README.md](docs/README.md) + +Skill Seekers 通过以下步骤代替数天的手动预处ç†å·¥ä½œï¼š + +1. **采集** — 文档ã€GitHub ä»“åº“ã€æœ¬åœ°ä»£ç åº“ã€PDFã€è§†é¢‘ã€ç¬”记本ã€Wiki ç­‰ 10 ç§ä»¥ä¸Šæ¥æºç±»åž‹ +2. **分æž** — 深度 AST è§£æžã€æ¨¡å¼æ£€æµ‹ã€API æå– +3. **结构化** — 带元数æ®çš„分类å‚考文件 +4. **增强** — AI 驱动的 SKILL.md 生æˆï¼ˆClaudeã€Gemini 或本地) +5. **导出** — 从一个资产导出到 16 ç§å¹³å°ä¸“ç”¨æ ¼å¼ + +## 为什么使用 Skill Seekers? + +### é¢å‘ AI 技能构建者(Claudeã€Geminiã€OpenAI) + +- 🎯 **生产级技能** — 500+ 行的 SKILL.md 文件,包å«ä»£ç ç¤ºä¾‹ã€æ¨¡å¼å’ŒæŒ‡å— +- 🔄 **增强工作æµ** — 应用 `security-focus`ã€`architecture-comprehensive` 或自定义 YAML 预设 +- 🎮 **ä»»æ„领域** — 游æˆå¼•擎(Godotã€Unityï¼‰ã€æ¡†æž¶ï¼ˆReactã€Django)ã€å†…部工具 +- 🔧 **团队å作** — 将内部文档 + ä»£ç æ•´åˆä¸ºå•ä¸€äº‹å®žæ¥æº +- 📚 **高质é‡** — AI 增强,包å«ç¤ºä¾‹ã€å¿«é€Ÿå‚è€ƒå’Œå¯¼èˆªæŒ‡å— + +### é¢å‘ RAG 构建者和 AI 工程师 + +- 🤖 **RAG 就绪数æ®** — 预分å—çš„ LangChain `Documents`ã€LlamaIndex `TextNodes`ã€Haystack `Documents` +- 🚀 **å¿« 99%** — æ•°å¤©çš„é¢„å¤„ç† â†’ 15–45 分钟 +- 📊 **智能元数æ®** — ç±»åˆ«ã€æ¥æºã€ç±»åž‹ → 更高的检索精度 +- 🔄 **å¤šæºæ”¯æŒ** — åœ¨ä¸€ä¸ªæµæ°´çº¿ä¸­åˆå¹¶æ–‡æ¡£ + GitHub + PDF + 视频 +- 🌠**平尿— å…³** — æ— éœ€é‡æ–°æŠ“å–å³å¯å¯¼å‡ºåˆ°ä»»æ„å‘釿•°æ®åº“或框架 + +### é¢å‘ AI 编程助手用户 + +- 💻 **Cursor / Windsurf / Cline** — è‡ªåŠ¨ç”Ÿæˆ `.cursorrules` / `.windsurfrules` / `.clinerules` +- 🎯 **æŒä¹…上下文** — AI "了解"您的框架,无需é‡å¤æç¤º +- 📚 **始终最新** — 文档更新时å¯åœ¨å‡ åˆ†é’Ÿå†…更新上下文 + +## 核心功能 + +### ðŸŒ æ–‡æ¡£æŠ“å– +- ✅ **智能 SPA å‘现** - 针对 JavaScript SPA 网站的三层å‘现机制(sitemap.xml → llms.txt → 无头æµè§ˆå™¨æ¸²æŸ“) +- ✅ **llms.txt 支æŒ** - 自动检测并使用 LLM 就绪文档文件(快 10 å€ï¼‰ +- ✅ **通用抓å–器** - é€‚ç”¨äºŽä»»æ„æ–‡æ¡£ç½‘ç«™ +- ✅ **智能分类** - 按主题自动组织内容 +- ✅ **代ç è¯­è¨€æ£€æµ‹** - 识别 Pythonã€JavaScriptã€C++ã€GDScript ç­‰ +- ✅ **24+ å³ç”¨é¢„设** - Godotã€Reactã€Vueã€Djangoã€FastAPI ç­‰ + +### 📄 PDF æ”¯æŒ +- ✅ **基础 PDF æå–** - 从 PDF æå–文本ã€ä»£ç å’Œå›¾ç‰‡ +- ✅ **扫æä»¶ OCR** - ä»Žæ‰«ææ–‡æ¡£æå–文本 +- ✅ **密ç ä¿æŠ¤ PDF** - 处ç†åР坆 PDF +- ✅ **表格æå–** - æå–夿‚表格 +- ✅ **并行处ç†** - 大型 PDF å¿« 3 å€ +- ✅ **智能缓存** - é‡å¤è¿è¡Œå¿« 50% + +### 🎬 视频æå– +- ✅ **YouTube 和本地视频** - 从视频æå–字幕ã€å±å¹•代ç å’Œç»“构化知识 +- ✅ **视觉帧分æž** - OCR æå–代ç ç¼–辑器ã€ç»ˆç«¯ã€å¹»ç¯ç‰‡å’Œå›¾è¡¨å†…容 +- ✅ **GPU 自动检测** - 自动安装正确的 PyTorch 版本(CUDA/ROCm/MPS/CPU) +- ✅ **AI 增强** - ä¸¤é˜¶æ®µå¢žå¼ºï¼šæ¸…ç† OCR + 生æˆç²¾ç¾Ž SKILL.md +- ✅ **æ—¶é—´è£å‰ª** - æå–视频的特定片段(`--start-time`ã€`--end-time`) +- ✅ **播放列表支æŒ** - 批é‡å¤„ç† YouTube 播放列表中的所有视频 +- ✅ **Vision API 回退** - 对低置信度 OCR 帧使用 Claude Vision + +### 🙠GitHub ä»“åº“åˆ†æž +- ✅ **深度代ç åˆ†æž** - æ”¯æŒ Pythonã€JavaScriptã€TypeScriptã€Javaã€C++ã€Go çš„ AST è§£æž +- ✅ **API æå–** - 函数ã€ç±»ã€æ–¹æ³•åŠå‚数和类型 +- ✅ **仓库元数æ®** - READMEã€æ–‡ä»¶æ ‘ã€è¯­è¨€ç»Ÿè®¡ã€æ˜Ÿæ ‡/分支数 +- ✅ **GitHub Issues å’Œ PR** - 获å–带标签和里程碑的开放/已关闭 issues +- ✅ **CHANGELOG å’Œå‘布** - 自动æå–ç‰ˆæœ¬åŽ†å² +- ✅ **å†²çªæ£€æµ‹** - 对比文档化 API 与实际代ç å®žçް +- ✅ **MCP 集æˆ** - 自然语言:"æŠ“å– GitHub 仓库 facebook/react" + +### 🔄 ç»Ÿä¸€å¤šæºæŠ“å– +- ✅ **åˆå¹¶å¤šä¸ªæ¥æº** - åœ¨ä¸€ä¸ªæŠ€èƒ½ä¸­æ··åˆæ–‡æ¡£ + GitHub + PDF +- ✅ **å†²çªæ£€æµ‹** - 自动å‘现文档与代ç ä¹‹é—´çš„差异 +- ✅ **智能åˆå¹¶** - 基于规则或 AI 驱动的冲çªè§£å†³ +- ✅ **逿˜ŽæŠ¥å‘Š** - 带 âš ï¸ è­¦å‘Šçš„å¹¶æŽ’å¯¹æ¯” +- ✅ **文档差è·åˆ†æž** - 识别过时文档和未文档化功能 +- ✅ **å•ä¸€äº‹å®žæ¥æº** - ä¸€ä¸ªæŠ€èƒ½åŒæ—¶å±•示æ„图(文档)和现实(代ç ï¼‰ +- ✅ **å‘åŽå…¼å®¹** - é—ç•™å•æºé…置继续有效 + +### 🤖 多 LLM 平尿”¯æŒ +- ✅ **12 个 LLM å¹³å°** - Claude AIã€Google Geminiã€OpenAI ChatGPTã€MiniMax AIã€é€šç”¨ Markdownã€OpenCodeã€Kimi(月之暗é¢ï¼‰ã€DeepSeek AIã€Qwen(阿里巴巴)ã€OpenRouterã€Together AIã€Fireworks AI +- ✅ **通用抓å–** - ç›¸åŒæ–‡æ¡£é€‚ç”¨äºŽæ‰€æœ‰å¹³å° +- ✅ **å¹³å°ä¸“用打包** - 针对æ¯ä¸ª LLM çš„ä¼˜åŒ–æ ¼å¼ +- ✅ **一键导出** - `--target` æ ‡å¿—é€‰æ‹©å¹³å° +- ✅ **å¯é€‰ä¾èµ–** - 仅安装所需内容 +- ✅ **100% å‘åŽå…¼å®¹** - 现有 Claude å·¥ä½œæµæ— éœ€æ›´æ”¹ + +| å¹³å° | æ ¼å¼ | 上传 | 增强 | API Key | 自定义端点 | +|------|------|------|------|---------|-----------| +| **Claude AI** | ZIP + YAML | ✅ 自动 | ✅ 是 | ANTHROPIC_API_KEY | ANTHROPIC_BASE_URL | +| **Google Gemini** | tar.gz | ✅ 自动 | ✅ 是 | GOOGLE_API_KEY | - | +| **OpenAI ChatGPT** | ZIP + Vector Store | ✅ 自动 | ✅ 是 | OPENAI_API_KEY | - | +| **MiniMax AI** | ZIP + Knowledge Files | ✅ 自动 | ✅ 是 | MINIMAX_API_KEY | - | +| **通用 Markdown** | ZIP | ⌠手动 | âŒ å¦ | - | - | + +```bash +# Claude(默认 - 无需更改ï¼ï¼‰ +skill-seekers package output/react/ +skill-seekers upload react.zip + +# Google Gemini +pip install skill-seekers[gemini] +skill-seekers package output/react/ --target gemini +skill-seekers upload react-gemini.tar.gz --target gemini + +# OpenAI ChatGPT +pip install skill-seekers[openai] +skill-seekers package output/react/ --target openai +skill-seekers upload react-openai.zip --target openai + +# MiniMax AI +pip install skill-seekers[minimax] +skill-seekers package output/react/ --target minimax +skill-seekers upload react-minimax.zip --target minimax + +# 通用 Markdown(通用导出) +skill-seekers package output/react/ --target markdown +# Markdown 文件å¯ç›´æŽ¥ç”¨äºŽä»»æ„ LLM +``` + +
+🔧 使用您自己的 AI æä¾›å•†ï¼ˆOpenAI 兼容端点 + 订阅计划,无需 Anthropic é¢åº¦ï¼‰ + +å¯é€‰çš„ AI **增强**步骤(由 `create`ã€`scan` å’Œ `enhance` 使用)**ä¸éœ€è¦** Anthropic å¯†é’¥ã€‚æ‚¨æœ‰ä¸‰ç§æ–¹å¼ä¸ºå…¶ä¾›èƒ½ï¼š + +**1. 使用您已付费的订阅 — 完全无需 API é¢åº¦ï¼ˆLOCAL ä»£ç†æ¨¡å¼ï¼‰** + +Skill Seekers å¯ä»¥è°ƒç”¨æ‚¨å·²ç™»å½•çš„ç¼–ç¨‹ä»£ç† CLIï¼Œå› æ­¤å¢žå¼ºä¼šä½¿ç”¨æ‚¨çŽ°æœ‰çš„è®¢é˜…è®¡åˆ’è€ŒéžæŒ‰é‡è®¡è´¹çš„ API token: + +```bash +skill-seekers create --agent codex # OpenAI Codex CLI → 您的 ChatGPT Plus +skill-seekers create --agent claude # Claude Code → 您的 Claude Pro/Max +``` + +支æŒçš„代ç†ï¼š`claude`ã€`codex`ã€`copilot`ã€`opencode`ã€`kimi` å’Œ `custom` +(将 `--agent custom` 与 `--agent-cmd " ..."` 组åˆå¯é©±åЍ任æ„其他工具)。 + +**2. ä»»æ„ OpenAI 兼容æä¾›å•†ï¼ˆOpenRouterã€Groqã€Cerebrasã€Mistralã€NVIDIA NIM 等)** + +这些æä¾›å•†éƒ½æš´éœ² OpenAI 兼容的 `/v1` 端点。åªéœ€ä¸‰ä¸ªçŽ¯å¢ƒå˜é‡å³å¯è®© Skill Seekers 指å‘其中之一——它会检测 `OPENAI_API_KEY`,而 OpenAI SDK 会自动识别 `OPENAI_BASE_URL`: + +```bash +export OPENAI_API_KEY="" +export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # æä¾›å•†ç«¯ç‚¹ï¼ˆè§ä¸‹è¡¨ï¼‰ +export OPENAI_MODEL="" # å¿…å¡« — 默认的 gpt-4o 在其他æä¾›å•†å¤„ä¸å­˜åœ¨ +skill-seekers create +``` + +| æä¾›å•† | `OPENAI_BASE_URL` | +|--------------|--------------------------------------------| +| OpenRouter | `https://openrouter.ai/api/v1` | +| Groq | `https://api.groq.com/openai/v1` | +| Cerebras | `https://api.cerebras.ai/v1` | +| Mistral | `https://api.mistral.ai/v1` | +| NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | + +> æä¾›å•†æ£€æµ‹ä¼šé€‰å–**第一个**找到的 API 密钥环境å˜é‡ï¼ˆ`ANTHROPIC_API_KEY` → `GOOGLE_API_KEY` → `OPENAI_API_KEY` → `MOONSHOT_API_KEY`)。设置 `SKILL_SEEKER_PROVIDER` å¯å¼ºåˆ¶æŒ‡å®šæä¾›å•†ï¼Œæˆ–ç¡®ä¿ä¼˜å…ˆçº§æ›´é«˜çš„密钥未被设置。 + +**3. Claude 兼容端点(如 GLMã€ä»£ç†æœåŠ¡ï¼‰** + +```bash +export ANTHROPIC_API_KEY="your-key" +export ANTHROPIC_BASE_URL="https://your-claude-compatible-endpoint/v1" +``` + +Google Gemini(`GOOGLE_API_KEY`)和 Kimi/月之暗é¢ï¼ˆ`MOONSHOT_API_KEY`)也获得原生支æŒã€‚完整列表(包括æ¯ä¸ªæä¾›å•†çš„æ¨¡åž‹è¦†ç›–设置)请å‚阅 **[环境å˜é‡å‚考](docs/reference/ENVIRONMENT_VARIABLES.md#llm-provider-selection)**。 + +
+ +**安装:** +```bash +# 安装 Gemini æ”¯æŒ +pip install skill-seekers[gemini] + +# 安装 OpenAI æ”¯æŒ +pip install skill-seekers[openai] + +# 安装 MiniMax æ”¯æŒ +pip install skill-seekers[minimax] + +# 安装所有 LLM å¹³å° +pip install skill-seekers[all-llms] +``` + +### 🔗 RAG æ¡†æž¶é›†æˆ + +- ✅ **LangChain Documents** - 直接导出为 `Document` æ ¼å¼ï¼ŒåŒ…å« `page_content` + å…ƒæ•°æ® + - 适用于:QA é“¾ã€æ£€ç´¢å™¨ã€å‘é‡å­˜å‚¨ã€æ™ºèƒ½ä½“ + - 示例:[LangChain RAG æµæ°´çº¿](examples/langchain-rag-pipeline/) + - 指å—:[LangChain 集æˆ](docs/integrations/LANGCHAIN.md) + +- ✅ **LlamaIndex TextNodes** - 导出为带唯一 ID + 嵌入的 `TextNode` æ ¼å¼ + - 适用于:查询引擎ã€å¯¹è¯å¼•擎ã€å­˜å‚¨ä¸Šä¸‹æ–‡ + - 示例:[LlamaIndex 查询引擎](examples/llama-index-query-engine/) + - 指å—:[LlamaIndex 集æˆ](docs/integrations/LLAMA_INDEX.md) + +- ✅ **Pinecone 就绪格å¼** - 针对å‘釿•°æ®åº“上传进行优化 + - 适用于:生产级å‘釿œç´¢ã€è¯­ä¹‰æœç´¢ã€æ··åˆæœç´¢ + - 示例:[Pinecone 上传](examples/pinecone-upsert/) + - 指å—:[Pinecone 集æˆ](docs/integrations/PINECONE.md) + +**快速导出:** +```bash +# LangChain Documents(JSON) +skill-seekers package output/django --target langchain +# → output/django-langchain.json + +# LlamaIndex TextNodes(JSON) +skill-seekers package output/django --target llama-index +# → output/django-llama-index.json + +# Markdown(通用) +skill-seekers package output/django --target markdown +# → output/django-markdown/SKILL.md + references/ +``` + +**完整 RAG æµæ°´çº¿æŒ‡å—:** [RAG æµæ°´çº¿æ–‡æ¡£](docs/integrations/RAG_PIPELINES.md) + +--- + +### 🧠 AI ç¼–ç¨‹åŠ©æ‰‹é›†æˆ + +å°†ä»»æ„æ¡†æž¶æ–‡æ¡£è½¬æ¢ä¸º 4+ ç§ AI 助手的专家编程上下文: + +- ✅ **Cursor IDE** - 为 AI 驱动的代ç å»ºè®®ç”Ÿæˆ `.cursorrules` + - 适用于:框架专用代ç ç”Ÿæˆã€ä¸€è‡´çš„ç¼–ç æ¨¡å¼ + - 兼容工具:Cursor IDE(VS Code 分支) + - 指å—:[Cursor 集æˆ](docs/integrations/CURSOR.md) + - 示例:[Cursor React 技能](examples/cursor-react-skill/) + +- ✅ **Windsurf** - 使用 `.windsurfrules` 自定义 Windsurf AI 助手上下文 + - 适用于:IDE 原生 AI è¾…åŠ©ã€æµå¼ç¼–程 + - 兼容工具:Codeium 出å“çš„ Windsurf IDE + - 指å—:[Windsurf 集æˆ](docs/integrations/WINDSURF.md) + - 示例:[Windsurf FastAPI 上下文](examples/windsurf-fastapi-context/) + +- ✅ **Cline(VS Code)** - VS Code 智能体的系统æç¤º + MCP + - 适用于:VS Code 中的智能代ç ç”Ÿæˆ + - 兼容工具:VS Code çš„ Cline 扩展 + - 指å—:[Cline 集æˆ](docs/integrations/CLINE.md) + - 示例:[Cline Django 助手](examples/cline-django-assistant/) + +- ✅ **Continue.dev** - 与 IDE 无关的 AI 上下文æœåС噍 + - 适用于:多 IDE 环境(VS Codeã€JetBrainsã€Vim),自定义 LLM æä¾›å•† + - 兼容工具:任何带有 Continue.dev æ’ä»¶çš„ IDE + - 指å—:[Continue 集æˆ](docs/integrations/CONTINUE_DEV.md) + - 示例:[Continue 通用上下文](examples/continue-dev-universal/) + +**快速导出(适用于 AI 编程工具):** +```bash +# é€‚ç”¨äºŽä»»æ„ AI 编程助手(Cursorã€Windsurfã€Clineã€Continue.dev) +skill-seekers create --config configs/django.json +skill-seekers package output/django --target claude # 或 --target markdown + +# å¤åˆ¶åˆ°é¡¹ç›®ï¼ˆä»¥ Cursor 为例) +cp output/django-claude/SKILL.md my-project/.cursorrules + +# 或用于 Windsurf +cp output/django-claude/SKILL.md my-project/.windsurf/rules/django.md + +# 或用于 Cline +cp output/django-claude/SKILL.md my-project/.clinerules + +# 或用于 Continue.dev(HTTP æœåŠ¡å™¨ï¼‰ +python examples/continue-dev-universal/context_server.py +# 在 ~/.continue/config.json 中é…ç½® +``` + +**集æˆä¸­å¿ƒï¼š** [所有 AI 系统集æˆ](docs/integrations/INTEGRATIONS.md) + +--- + +### 🌊 ä¸‰æµ GitHub æž¶æž„ +- ✅ **三æµåˆ†æž** - å°† GitHub ä»“åº“æ‹†åˆ†ä¸ºä»£ç æµã€æ–‡æ¡£æµå’Œæ´žå¯Ÿæµ +- ✅ **统一代ç åº“分æžå™¨** - åŒæ—¶é€‚用于 GitHub URL 和本地路径 +- ✅ **C3.x åˆ†æžæ·±åº¦** - 选择"basic"(1–2 分钟)或"c3x"(20–60 åˆ†é’Ÿï¼‰åˆ†æž +- ✅ **增强路由生æˆ** - GitHub 元数æ®ã€README 快速入门ã€å¸¸è§é—®é¢˜ +- ✅ **Issue 集æˆ** - æ¥è‡ª GitHub Issues 的常è§é—®é¢˜å’Œè§£å†³æ–¹æ¡ˆ +- ✅ **智能路由关键è¯** - GitHub 标签æƒé‡åŠ å€ï¼Œæå‡ä¸»é¢˜æ£€æµ‹æ•ˆæžœ + +**三æµè¯´æ˜Žï¼š** +- **æµ 1:代ç ** - 深度 C3.x 分æžï¼ˆæ¨¡å¼ã€ç¤ºä¾‹ã€æŒ‡å—ã€é…ç½®ã€æž¶æž„) +- **æµ 2:文档** - 仓库文档(READMEã€CONTRIBUTINGã€docs/*.md) +- **æµ 3:洞察** - 社区知识(Issuesã€æ ‡ç­¾ã€Starsã€Forks) + +```python +from skill_seekers.cli.unified_codebase_analyzer import UnifiedCodebaseAnalyzer + +# 使用三æµåˆ†æž GitHub 仓库 +analyzer = UnifiedCodebaseAnalyzer() +result = analyzer.analyze( + source="https://github.com/facebook/react", + depth="c3x", # 或 "basic" å¿«é€Ÿåˆ†æž + fetch_github_metadata=True +) + +# è®¿é—®ä»£ç æµï¼ˆC3.x 分æžï¼‰ +print(f"设计模å¼: {len(result.code_analysis['c3_1_patterns'])}") +print(f"测试示例: {result.code_analysis['c3_2_examples_count']}") + +# 访问文档æµï¼ˆä»“库文档) +print(f"README: {result.github_docs['readme'][:100]}") + +# 访问洞察æµï¼ˆGitHub 元数æ®ï¼‰ +print(f"Stars: {result.github_insights['metadata']['stars']}") +print(f"常è§é—®é¢˜: {len(result.github_insights['common_problems'])}") +``` + +**完整文档**:[三æµå®žçŽ°æ€»ç»“](docs/archive/historical/IMPLEMENTATION_SUMMARY_THREE_STREAM.md) + +### 🔠智能速率é™åˆ¶ç®¡ç†ä¸Žé…ç½® +- ✅ **多 Token é…置系统** - 管ç†å¤šä¸ª GitHub è´¦å·ï¼ˆä¸ªäººã€å·¥ä½œã€å¼€æºï¼‰ + - 安全é…置存储在 `~/.config/skill-seekers/config.json`(æƒé™ 600) + - æ¯ä¸ªé…置文件的速率é™åˆ¶ç­–略:`prompt`ã€`wait`ã€`switch`ã€`fail` + - æ¯ä¸ªé…置文件å¯è®¾ç½®è¶…时(默认:30 分钟,防止无é™ç­‰å¾…) + - 智能回退链:CLI 傿•° → 环境å˜é‡ → é…置文件 → æç¤º + - Claudeã€Geminiã€OpenAI çš„ API Key ç®¡ç† +- ✅ **交互å¼é…ç½®å‘导** - 美观的终端 UI,轻æ¾è®¾ç½® + - æµè§ˆå™¨é›†æˆè¾…助创建 token(自动打开 GitHub 等) + - Token 验è¯å’Œè¿žæŽ¥æµ‹è¯• + - 带颜色编ç çš„å¯è§†åŒ–çŠ¶æ€æ˜¾ç¤º +- ✅ **智能速率é™åˆ¶å¤„ç†å™¨** - ä¸å†æ— é™ç­‰å¾…ï¼ + - 关于速率é™åˆ¶çš„预先警告(60 次/å°æ—¶ vs 5000 次/å°æ—¶ï¼‰ + - 从 GitHub API å“应中实时检测 + - 带进度的实时倒计时 + - 速率å—陿—¶è‡ªåŠ¨åˆ‡æ¢é…置文件 + - å››ç§ç­–略:prompt(询问)ã€wait(倒计时)ã€switch(切æ¢ï¼‰ã€fail(中止) +- ✅ **断点续传** - 继续中断的任务 + - 按å¯é…置间隔自动ä¿å­˜è¿›åº¦ï¼ˆé»˜è®¤ï¼š60 秒) + - åˆ—å‡ºæ‰€æœ‰å¯æ¢å¤ä»»åŠ¡åŠå…¶è¿›åº¦è¯¦æƒ… + - è‡ªåŠ¨æ¸…ç†æ—§ä»»åŠ¡ï¼ˆé»˜è®¤ï¼š7 天) +- ✅ **CI/CD 支æŒ** - éžäº¤äº’å¼è‡ªåŠ¨åŒ–æ¨¡å¼ + - `--non-interactive` æ ‡å¿—å¿«é€Ÿå¤±è´¥ã€æ— æç¤º + - `--profile` 标志选择特定 GitHub è´¦å· + - é€‚ç”¨äºŽæµæ°´çº¿æ—¥å¿—çš„æ¸…æ™°é”™è¯¯æ¶ˆæ¯ + +**快速设置:** +```bash +# 一次性é…置(5 分钟) +skill-seekers config --github + +# ä¸ºç§æœ‰ä»“库使用特定é…置文件 +skill-seekers create mycompany/private-repo --profile work + +# CI/CD 模å¼ï¼ˆå¿«é€Ÿå¤±è´¥ï¼Œæ— æç¤ºï¼‰ +skill-seekers create owner/repo --non-interactive + +# æ¢å¤ä¸­æ–­çš„任务 +skill-seekers resume --list +skill-seekers resume github_react_20260117_143022 +``` + +**速率é™åˆ¶ç­–略说明:** +- **prompt**(默认)- 速率å—陿—¶è¯¢é—®æ“作(等待ã€åˆ‡æ¢ã€è®¾ç½® tokenã€å–消) +- **wait** - 带倒计时自动等待(éµå®ˆè¶…时设置) +- **switch** - 自动å°è¯•下一个å¯ç”¨é…置文件(适用于多账å·åœºæ™¯ï¼‰ +- **fail** - ç«‹å³å¤±è´¥å¹¶ç»™å‡ºæ¸…æ™°é”™è¯¯ï¼ˆé€‚åˆ CI/CD) + +### 🎯 Bootstrap 技能 - 自托管 + +å°† skill-seekers 自身生æˆä¸ºæŠ€èƒ½ï¼Œåœ¨æ‚¨çš„ AI 代ç†ï¼ˆClaude Codeã€Kimiã€Codex 等)中使用: + +```bash +# ç”ŸæˆæŠ€èƒ½ +./scripts/bootstrap_skill.sh + +# 安装到 Claude Code +cp -r output/skill-seekers ~/.claude/skills/ +``` + +**您将获得:** +- ✅ **完整的技能文档** - 所有 CLI å‘½ä»¤å’Œä½¿ç”¨æ¨¡å¼ +- ✅ **CLI 命令å‚考** - æ¯ä¸ªå·¥å…·åŠå…¶é€‰é¡¹çš„æ–‡æ¡£ +- ✅ **快速入门示例** - 常è§å·¥ä½œæµå’Œæœ€ä½³å®žè·µ +- ✅ **自动生æˆçš„ API 文档** - 代ç åˆ†æžã€æ¨¡å¼å’Œç¤ºä¾‹ + +### ðŸ” ç§æœ‰é…置仓库 +- ✅ **基于 Git çš„é…ç½®æº** - ä»Žç§æœ‰/团队 Git 仓库获å–é…ç½® +- ✅ **多æºç®¡ç†** - æ³¨å†Œæ— é™æ•°é‡çš„ GitHubã€GitLabã€Bitbucket 仓库 +- ✅ **团队å作** - 在 3–5 人团队间共享自定义é…ç½® +- ✅ **ä¼ä¸šæ”¯æŒ** - é€šè¿‡åŸºäºŽä¼˜å…ˆçº§çš„è§£æžæ‰©å±•到 500+ å¼€å‘者 +- ✅ **安全认è¯** - 环境å˜é‡ token(GITHUB_TOKENã€GITLAB_TOKEN) +- ✅ **智能缓存** - å…‹éš†ä¸€æ¬¡ï¼Œè‡ªåŠ¨æ‹‰å–æ›´æ–° +- ✅ **离线模å¼** - 离线时使用缓存的é…置工作 + +### 🤖 代ç åº“分æžï¼ˆC3.x) + +**C3.4:é…ç½®æ¨¡å¼æå–ï¼ˆå« AI 增强)** +- ✅ **9 ç§é…置格å¼** - JSONã€YAMLã€TOMLã€ENVã€INIã€Pythonã€JavaScriptã€Dockerfileã€Docker Compose +- ✅ **7 ç§æ¨¡å¼ç±»åž‹** - æ•°æ®åº“ã€APIã€æ—¥å¿—ã€ç¼“å­˜ã€é‚®ä»¶ã€è®¤è¯ã€æœåС噍é…ç½® +- ✅ **AI 增强** - å¯é€‰åŒæ¨¡å¼ AI 分æžï¼ˆAPI + LOCAL) + - 解释æ¯é¡¹é…置的作用 + - 建议最佳实践和改进方案 + - **安全分æž** - å‘现硬编ç çš„å¯†é’¥å’Œæš´éœ²çš„å‡­è¯ +- ✅ **自动文档生æˆ** - 为所有é…ç½®ç”Ÿæˆ JSON + Markdown 文档 +- ✅ **MCP 集æˆ** - 支æŒå¢žå¼ºçš„ `extract_config_patterns` 工具 + +**C3.3:AI 增强æ“作指å—** +- ✅ **å…¨é¢ AI 增强** - 将基础指å—转æ¢ä¸ºä¸“业教程 +- ✅ **5 项自动改进** - æ­¥éª¤è¯´æ˜Žã€æ•…障排除ã€å‰ææ¡ä»¶ã€åŽç»­æ­¥éª¤ã€ä½¿ç”¨åœºæ™¯ +- ✅ **åŒæ¨¡å¼æ”¯æŒ** - API 模å¼ï¼ˆClaude API)或 LOCAL 模å¼ï¼ˆClaude Code CLI) +- ✅ **LOCAL 模å¼é›¶æˆæœ¬** - 使用您的 Claude Code Max 计划å…费增强 +- ✅ **è´¨é‡èœ•å˜** - 75 è¡Œæ¨¡æ¿ â†’ 500+ è¡Œçš„å®Œæ•´æŒ‡å— + +**使用方法:** +```bash +# 快速分æžï¼ˆ1–2 分钟,仅基础功能) +skill-seekers scan tests/ --quick + +# å…¨é¢åˆ†æžï¼ˆå« AI,20–60 分钟) +skill-seekers scan tests/ --comprehensive + +# å« AI 增强 +skill-seekers scan tests/ --enhance +``` + +**完整文档:** [docs/features/HOW_TO_GUIDES.md](docs/features/HOW_TO_GUIDES.md#ai-enhancement-new) + +### 🔄 增强工作æµé¢„设 + +å¯é‡ç”¨çš„ YAML å®šä¹‰å¢žå¼ºæµæ°´çº¿ï¼ŒæŽ§åˆ¶ AI 如何将原始文档转æ¢ä¸ºç²¾å¿ƒæ‰“磨的技能。 + +- ✅ **5 个内置预设** — `default`ã€`minimal`ã€`security-focus`ã€`architecture-comprehensive`ã€`api-documentation` +- ✅ **用户自定义预设** — å°†è‡ªå®šä¹‰å·¥ä½œæµæ·»åŠ åˆ° `~/.config/skill-seekers/workflows/` +- ✅ **多工作æµé“¾å¼** — 在一æ¡å‘½ä»¤ä¸­é“¾å¼ä½¿ç”¨ä¸¤ä¸ªæˆ–æ›´å¤šå·¥ä½œæµ +- ✅ **完整 CLI 管ç†** — åˆ—å‡ºã€æŸ¥çœ‹ã€å¤åˆ¶ã€æ·»åŠ ã€åˆ é™¤å’ŒéªŒè¯å·¥ä½œæµ + +```bash +# 应用å•ä¸ªå·¥ä½œæµ +skill-seekers create ./my-project --enhance-workflow security-focus + +# 链å¼å¤šä¸ªå·¥ä½œæµï¼ˆæŒ‰é¡ºåºåº”用) +skill-seekers create ./my-project \ + --enhance-workflow security-focus \ + --enhance-workflow minimal + +# 管ç†é¢„设 +skill-seekers workflows list # 列出所有(内置 + 用户) +skill-seekers workflows show security-focus # 显示 YAML 内容 +skill-seekers workflows copy security-focus # å¤åˆ¶åˆ°ç”¨æˆ·ç›®å½•以便编辑 +skill-seekers workflows add ./my-workflow.yaml # 安装自定义预设 +skill-seekers workflows remove my-workflow # 删除用户预设 +skill-seekers workflows validate security-focus # 验è¯é¢„设结构 + +# åŒæ—¶å¤åˆ¶å¤šä¸ª +skill-seekers workflows copy security-focus minimal api-documentation + +# åŒæ—¶æ·»åŠ å¤šä¸ªæ–‡ä»¶ +skill-seekers workflows add ./wf-a.yaml ./wf-b.yaml + +# åŒæ—¶åˆ é™¤å¤šä¸ª +skill-seekers workflows remove my-wf-a my-wf-b +``` + +**YAML 预设格å¼ï¼š** +```yaml +name: security-focus +description: "安全é‡ç‚¹å®¡æŸ¥ï¼šæ¼æ´žã€è®¤è¯ã€æ•°æ®å¤„ç†" +version: "1.0" +stages: + - name: vulnerabilities + type: custom + prompt: "审查 OWASP Top 10 和常è§å®‰å…¨æ¼æ´ž..." + - name: auth-review + type: custom + prompt: "检查认è¯å’ŒæŽˆæƒæ¨¡å¼..." + uses_history: true +``` + +### âš¡ 性能与规模 +- ✅ **异步模å¼** - 使用 async/await 抓å–速度快 2–3 å€ï¼ˆä½¿ç”¨ `--async` 标志) +- ✅ **大型文档支æŒ** - é€šè¿‡æ™ºèƒ½æ‹†åˆ†å¤„ç† 10K–40K+ 页文档 +- ✅ **路由器/Hub 技能** - æ™ºèƒ½è·¯ç”±åˆ°ä¸“ç”¨å­æŠ€èƒ½ +- ✅ **并行抓å–** - åŒæ—¶å¤„ç†å¤šä¸ªæŠ€èƒ½ +- ✅ **检查点/ç»­ä¼ ** - é•¿æ—¶é—´æŠ“å–æ°¸ä¸ä¸¢å¤±è¿›åº¦ +- ✅ **缓存系统** - 抓å–ä¸€æ¬¡ï¼Œå³æ—¶é‡å»º + +### 🤖 ä¸Žä»£ç†æ— å…³çš„æŠ€èƒ½ç”Ÿæˆ +- ✅ **å¤šä»£ç†æ”¯æŒ** - 通过 `--agent` 标志为 Claudeã€Kimiã€Codexã€Copilotã€OpenCode 或任æ„自定义代ç†ç”ŸæˆæŠ€èƒ½ +- ✅ **自定义代ç†å‘½ä»¤** - 使用 `--agent-cmd` æŒ‡å®šç”¨äºŽå¢žå¼ºçš„è‡ªå®šä¹‰ä»£ç† CLI 命令 +- ✅ **通用标志** - `--agent` å’Œ `--agent-cmd` 在所有命令(createã€scrapeã€githubã€pdf 等)中å‡å¯ç”¨ + +### 📦 å¸‚åœºæµæ°´çº¿ +- ✅ **å‘布到市场** - 将技能å‘布到 Claude Code æ’件市场仓库 +- ✅ **ç«¯åˆ°ç«¯æµæ°´çº¿** - ä»Žæ–‡æ¡£æ¥æºåˆ°å·²å‘布的市场æ¡ç›® + +### ✅ è´¨é‡ä¿è¯ +- ✅ **免颿µ‹è¯•** - 3,700+ 测试,全é¢è¦†ç›– + +--- + +## 📦 安装 + +```bash +# 基础安装(文档抓å–ã€GitHub 分æžã€PDFã€æ‰“包) +pip install skill-seekers + +# åŒ…å«æ‰€æœ‰ LLM 平尿”¯æŒ +pip install skill-seekers[all-llms] + +# åŒ…å« MCP æœåС噍 +pip install skill-seekers[mcp] + +# 全部功能 +pip install skill-seekers[all] +``` + +**需è¦å¸®åŠ©é€‰æ‹©ï¼Ÿ** è¿è¡Œè®¾ç½®å‘导: +```bash +skill-seekers-setup +``` + +### 安装选项 + +| 安装命令 | 功能 | +|---------|------| +| `pip install skill-seekers` | 抓å–ã€GitHub 分æžã€PDFã€æ‰€æœ‰å¹³å° | +| `pip install skill-seekers[gemini]` | + Google Gemini æ”¯æŒ | +| `pip install skill-seekers[openai]` | + OpenAI ChatGPT æ”¯æŒ | +| `pip install skill-seekers[all-llms]` | + 所有 LLM å¹³å° | +| `pip install skill-seekers[mcp]` | + 适用于 Claude Codeã€Cursor 等的 MCP æœåС噍 | +| `pip install skill-seekers[video]` | + YouTube/Vimeo å­—å¹•å’Œå…ƒæ•°æ®æå– | +| `pip install skill-seekers[video-full]` | + Whisper 转录和视觉帧æå– | +| `pip install skill-seekers[jupyter]` | + Jupyter ç¬”è®°æœ¬æ”¯æŒ | +| `pip install skill-seekers[pptx]` | + PowerPoint æ”¯æŒ | +| `pip install skill-seekers[confluence]` | + Confluence ç»´åŸºæ”¯æŒ | +| `pip install skill-seekers[notion]` | + Notion 页颿”¯æŒ | +| `pip install skill-seekers[rss]` | + RSS/Atom è®¢é˜…æºæ”¯æŒ | +| `pip install skill-seekers[chat]` | + Slack/Discord èŠå¤©è®°å½•æ”¯æŒ | +| `pip install skill-seekers[asciidoc]` | + AsciiDoc æ–‡æ¡£æ”¯æŒ | +| `pip install skill-seekers[all]` | 全部功能 | + +> **视频视觉ä¾èµ–(GPU 感知):** 安装 `skill-seekers[video-full]` åŽï¼Œè¿è¡Œ +> `skill-seekers create --setup` 自动检测您的 GPU 并安装正确的 PyTorch +> 版本 + easyocr。这是安装视觉æå–ä¾èµ–çš„æŽ¨èæ–¹å¼ã€‚ + +--- + +## 🚀 ä¸€é”®å®‰è£…å·¥ä½œæµ + +**从é…置到上传技能的最快方å¼â€”—全自动化:** + +```bash +# 从官方é…置安装 React 技能(自动上传到 Claude) +skill-seekers install --config react + +# 从本地é…置文件安装 +skill-seekers install --config configs/custom.json + +# 安装但ä¸ä¸Šä¼ ï¼ˆä»…打包) +skill-seekers install --config django --no-upload + +# 预览工作æµè€Œä¸æ‰§è¡Œ +skill-seekers install --config react --dry-run +``` + +**耗时:** 总计 20–45 分钟 | **è´¨é‡ï¼š** 生产就绪(9/10) | **æˆæœ¬ï¼š** å…è´¹ + +**执行阶段:** +``` +📥 阶段 1:获å–é…置(如果æä¾›é…ç½®å称) +📖 阶段 2ï¼šæŠ“å–æ–‡æ¡£ +✨ 阶段 3:AI 增强(必选 - ä¸å¯è·³è¿‡ï¼‰ +📦 阶段 4:打包技能 +â˜ï¸ 阶段 5:上传到 Claude(å¯é€‰ï¼Œéœ€è¦ API Key) +``` + +**è¦æ±‚:** +- ANTHROPIC_API_KEY 环境å˜é‡ï¼ˆç”¨äºŽè‡ªåŠ¨ä¸Šä¼ ï¼‰ +- Claude Code Max 计划(用于本地 AI 增强),或使用 `--agent` 选择其他 AI ä»£ç† + +--- + +## 📊 功能矩阵 + +Skill Seekers æ”¯æŒ **12 个 LLM å¹³å°**ã€**8 个 RAG/å‘é‡ç›®æ ‡**ã€**18 ç§æ¥æºç±»åž‹**,并在所有目标上实现完全的功能对等。 + +**å¹³å°ï¼š** Claude AIã€Google Geminiã€OpenAI ChatGPTã€MiniMax AIã€é€šç”¨ Markdownã€OpenCodeã€Kimi(月之暗é¢ï¼‰ã€DeepSeek AIã€Qwen(阿里巴巴)ã€OpenRouterã€Together AIã€Fireworks AI +**æ¥æºç±»åž‹ï¼š** 文档网站ã€GitHub 仓库ã€PDFã€Word (.docx)ã€EPUBã€è§†é¢‘ã€æœ¬åœ°ä»£ç åº“ã€Jupyter ç¬”è®°æœ¬ã€æœ¬åœ° HTMLã€OpenAPI/Swaggerã€AsciiDocã€PowerPoint (.pptx)ã€RSS/Atom 订阅æºã€Man 手册页ã€Confluence 维基ã€Notion 页é¢ã€Slack/Discord èŠå¤©è®°å½• + +完整信æ¯è¯·æŸ¥çœ‹ [完整功能矩阵](docs/reference/FEATURE_MATRIX.md)。 + +### 快速平å°å¯¹æ¯” + +| 功能 | Claude | Gemini | OpenAI | MiniMax | Markdown | +|------|--------|--------|--------|---------|----------| +| æ ¼å¼ | ZIP + YAML | tar.gz | ZIP + Vector | ZIP + Knowledge | ZIP | +| 上传 | ✅ API | ✅ API | ✅ API | ✅ API | ⌠手动 | +| 增强 | ✅ Sonnet 4 | ✅ 2.0 Flash | ✅ GPT-4o | ✅ M3 | ⌠无 | +| æ‰€æœ‰æŠ€èƒ½æ¨¡å¼ | ✅ | ✅ | ✅ | ✅ | ✅ | + +--- + +## 使用示例 + +### æ–‡æ¡£æŠ“å– + +```bash +# æŠ“å–æ–‡æ¡£ç½‘ç«™ +skill-seekers create --config configs/react.json + +# 快速抓å–(无需é…置) +skill-seekers create https://react.dev --name react + +# 异步模å¼ï¼ˆå¿« 3 å€ï¼‰ +skill-seekers create --config configs/godot.json --async --workers 8 + +# 使用特定 AI 代ç†è¿›è¡Œå¢žå¼º +skill-seekers create --config configs/react.json --agent kimi +``` + +### PDF æå– + +```bash +# 基础 PDF æå– +skill-seekers create --pdf docs/manual.pdf --name myskill + +# 高级功能 +skill-seekers create --pdf docs/manual.pdf --name myskill \ + --extract-tables \ # æå–表格 + --parallel \ # å¿«é€Ÿå¹¶è¡Œå¤„ç† + --workers 8 # 使用 8 个 CPU 核心 + +# 扫æ PDF(需è¦: pip install pytesseract Pillow) +skill-seekers create --pdf docs/scanned.pdf --name myskill --ocr +``` + +### 视频æå– + +```bash +# å®‰è£…è§†é¢‘æ”¯æŒ +pip install skill-seekers[video] # 字幕 + å…ƒæ•°æ® +pip install skill-seekers[video-full] # + Whisper 转录 + 视觉帧æå– + +# 自动检测 GPU 并安装视觉ä¾èµ–(PyTorch + easyocr) +skill-seekers create --setup + +# 从 YouTube 视频æå– +skill-seekers create --video-url https://www.youtube.com/watch?v=dQw4w9WgXcQ --name mytutorial + +# 从 YouTube 播放列表æå– +skill-seekers create --video-playlist https://www.youtube.com/playlist?list=... --name myplaylist + +# 从本地视频文件æå– +skill-seekers create --video-file recording.mp4 --name myrecording + +# ä½¿ç”¨è§†è§‰å¸§åˆ†æžæå–ï¼ˆéœ€è¦ video-full ä¾èµ–) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --name mytutorial --visual + +# 使用 AI å¢žå¼ºï¼ˆæ¸…ç† OCR + 生æˆç²¾ç¾Ž SKILL.md) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --enhance-level 2 + +# è£å‰ªè§†é¢‘的特定片段(支æŒç§’æ•°ã€MM:SSã€HH:MM:SS æ ¼å¼ï¼‰ +skill-seekers create --video-url https://www.youtube.com/watch?v=... --start-time 1:30 --end-time 5:00 + +# 使用 Vision API 处ç†ä½Žç½®ä¿¡åº¦ OCR å¸§ï¼ˆéœ€è¦ ANTHROPIC_API_KEY) +skill-seekers create --video-url https://www.youtube.com/watch?v=... --visual --vision-ocr + +# ä»Žä¹‹å‰æå–的数æ®é‡å»ºæŠ€èƒ½ï¼ˆè·³è¿‡ä¸‹è½½ï¼‰ +skill-seekers create --from-json output/mytutorial/video_data/extracted_data.json --name mytutorial +``` + +> **完整指å—:** å‚è§ [docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md) 了解完整 CLI å‚考〠+> è§†è§‰æµæ°´çº¿è¯¦æƒ…ã€AI 增强选项和故障排除。 + +### GitHub ä»“åº“åˆ†æž + +```bash +# åŸºç¡€ä»“åº“æŠ“å– +skill-seekers create facebook/react + +# é…置认è¯ï¼ˆæ›´é«˜é€Ÿçއé™åˆ¶ï¼‰ +export GITHUB_TOKEN=ghp_your_token_here +skill-seekers create facebook/react + +# 自定义包å«å†…容 +skill-seekers create django/django \ + --include-issues \ # æå– GitHub Issues + --max-issues 100 \ # é™åˆ¶ issue æ•°é‡ + --include-changelog # æå– CHANGELOG.md +``` + +### ç»Ÿä¸€å¤šæºæŠ“å– + +**将文档 + GitHub + PDF åˆå¹¶ä¸ºä¸€ä¸ªå¸¦å†²çªæ£€æµ‹çš„统一技能:** + +```bash +# 使用现有统一é…ç½® +skill-seekers create --config configs/react_unified.json +skill-seekers create --config configs/django_unified.json + +# 或创建统一é…ç½® +cat > configs/myframework_unified.json << 'EOF' +{ + "name": "myframework", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.myframework.com/", + "max_pages": 200 + }, + { + "type": "github", + "repo": "owner/myframework", + "code_analysis_depth": "surface" + } + ] +} +EOF + +skill-seekers create --config configs/myframework_unified.json +``` + +**å†²çªæ£€æµ‹è‡ªåЍå‘现:** +- 🔴 **代ç ä¸­ç¼ºå¤±**(高):已文档化但未实现 +- 🟡 **文档中缺失**(中):已实现但未文档化 +- âš ï¸ **ç­¾åä¸åŒ¹é…**ï¼šå‚æ•°/类型ä¸åŒ +- â„¹ï¸ **æè¿°ä¸åŒ¹é…**:解释ä¸åŒ + +**完整指å—:** å‚è§ [docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)。 + +### ç§æœ‰é…置仓库 + +**ä½¿ç”¨ç§æœ‰ Git 仓库在团队间共享自定义é…置:** + +```bash +# 选项 1:使用 MCP 工具(推è) +# æ³¨å†Œå›¢é˜Ÿç§æœ‰ä»“库 +add_config_source( + name="team", + git_url="https://github.com/mycompany/skill-configs.git", + token_env="GITHUB_TOKEN" +) + +# 从团队仓库获å–é…ç½® +fetch_config(source="team", config_name="internal-api") +``` + +**支æŒçš„å¹³å°ï¼š** +- GitHub(`GITHUB_TOKEN`)ã€GitLab(`GITLAB_TOKEN`)ã€Gitea(`GITEA_TOKEN`)ã€Bitbucket(`BITBUCKET_TOKEN`) + +**完整指å—:** å‚è§ [docs/reference/GIT_CONFIG_SOURCES.md](docs/reference/GIT_CONFIG_SOURCES.md)。 + +## å·¥ä½œåŽŸç† + +```mermaid +graph LR + A[文档网站] --> B[Skill Seekers] + B --> C[抓å–器] + B --> D[AI 增强] + B --> E[打包器] + C --> F[有åºå‚考文件] + D --> F + F --> E + E --> G[AI 技能 .zip] + G --> H[上传到 AI å¹³å°] +``` + +0. **检测 llms.txt** - 优先检查 llms-full.txtã€llms.txtã€llms-small.txt(智能 SPA å‘现的一部分) +1. **抓å–**:æå–æ–‡æ¡£ä¸­çš„æ‰€æœ‰é¡µé¢ +2. **分类**:将内容组织为主题(APIã€æŒ‡å—ã€æ•™ç¨‹ç­‰ï¼‰ +3. **增强**:AI åˆ†æžæ–‡æ¡£å¹¶åˆ›å»ºåŒ…å«ç¤ºä¾‹çš„完整 SKILL.md(通过 `--agent` 支æŒå¤šç§ä»£ç†ï¼‰ +4. **打包**:将所有内容打包为平å°å°±ç»ªçš„ `.zip` 文件 + +## æž¶æž„ + +系统由 **8 个核心模å—**å’Œ **5 个工具模å—**组æˆï¼ˆå…±çº¦ 200 个类): + +![包概览](docs/UML/exports/00_package_overview.png) + +| æ¨¡å— | 用途 | 关键类 | +|------|------|--------| +| **CLICore** | Git 风格的命令分å‘器 | `CLIDispatcher`ã€`SourceDetector`ã€`CreateCommand` | +| **Scrapers** | 18 ç§æ¥æºç±»åž‹æå–器 | `DocToSkillConverter`ã€`DocumentSkillBuilder`(共享构建层)ã€`UnifiedScraper` | +| **Adaptors** | 20+ è¾“å‡ºå¹³å°æ ¼å¼ | `SkillAdaptor`(ABC)ã€`ClaudeAdaptor`ã€`LangChainAdaptor` | +| **Analysis** | C3.x 代ç åº“åˆ†æžæµæ°´çº¿ | `UnifiedCodebaseAnalyzer`ã€`PatternRecognizer`ã€10 个 GoF 检测器 | +| **Enhancement** | 通过 `AgentClient` 实现 AI 驱动的技能改进 | `AgentClient`ã€`AIEnhancer`ã€`UnifiedEnhancer`ã€`WorkflowEngine` | +| **Packaging** | 打包ã€ä¸Šä¼ ã€å®‰è£…技能 | `PackageSkill`ã€`InstallAgent` | +| **MCP** | FastMCP æœåŠ¡å™¨ï¼ˆ40 个工具) | `SkillSeekerMCPServer`ã€10 ä¸ªå·¥å…·æ¨¡å— | +| **Sync** | æ–‡æ¡£å˜æ›´æ£€æµ‹ | `ChangeDetector`ã€`SyncMonitor`ã€`Notifier` | + +工具模å—:**Parsers**(28 个 CLI è§£æžå™¨ï¼‰ã€**Storage**(S3/GCS/Azure)ã€**Embedding**(多æä¾›å•†å‘é‡ï¼‰ã€**Benchmark**(性能)ã€**Utilities**(16 个共享辅助工具)。 + +完整 UML 图:**[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** | StarUML 项目:`docs/UML/skill_seekers.mdj` | HTML API å‚考:`docs/UML/html/` + +## 📋 剿æ¡ä»¶ + +**开始å‰ï¼Œè¯·ç¡®ä¿æ‚¨å…·å¤‡ï¼š** + +1. **Python 3.10 或更高版本** - [下载](https://www.python.org/downloads/) | 检查:`python3 --version` +2. **Git** - [下载](https://git-scm.com/) | 检查:`git --version` +3. **15–30 分钟**用于首次设置 + +**首次使用?** → **[从这里开始:防弹快速入门指å—](BULLETPROOF_QUICKSTART.md)** 🎯 + +--- + +## 📤 上传技能到 Claude + +技能打包完æˆåŽï¼Œéœ€è¦å°†å…¶ä¸Šä¼ åˆ° Claude: + +### 选项 1:自动上传(基于 API) + +```bash +# 设置 API Key(一次性) +export ANTHROPIC_API_KEY=sk-ant-... + +# 打包并自动上传 +skill-seekers package output/react/ --upload + +# 或上传已有的 .zip +skill-seekers upload output/react.zip +``` + +### 选项 2:手动上传(无需 API Key) + +```bash +# 打包技能 +skill-seekers package output/react/ +# → 创建 output/react.zip + +# ç„¶åŽæ‰‹åŠ¨ä¸Šä¼ ï¼š +# - 访问 https://claude.ai/skills +# - 点击"上传技能" +# - 选择 output/react.zip +``` + +### 选项 3:MCP(Claude Code) + +``` +在 Claude Code 中,直接询问: +"打包并上传 React 技能" +``` + +--- + +## 🤖 安装到 AI ä»£ç† + +Skill Seekers å¯è‡ªåŠ¨å°†æŠ€èƒ½å®‰è£…åˆ° 19 个 AI 编程代ç†ã€‚ + +```bash +# å®‰è£…åˆ°ç‰¹å®šä»£ç† +skill-seekers install-agent output/react/ --agent cursor + +# 安装到 IBM Bob(项目本地 .bob/skills/) +skill-seekers install-agent output/react/ --agent bob + +# ä¸€æ¬¡æ€§å®‰è£…åˆ°æ‰€æœ‰ä»£ç† +skill-seekers install-agent output/react/ --agent all + +# 预览而ä¸å®‰è£… +skill-seekers install-agent output/react/ --agent cursor --dry-run +``` + +### 支æŒçš„ä»£ç† + +| ä»£ç† | 路径 | 类型 | +|------|------|------| +| **Claude Code** | `~/.claude/skills/` | 全局 | +| **Cursor** | `.cursor/skills/` | 项目 | +| **VS Code / Copilot** | `.github/skills/` | 项目 | +| **Amp** | `~/.amp/skills/` | 全局 | +| **Goose** | `~/.config/goose/skills/` | 全局 | +| **OpenCode** | `~/.opencode/skills/` | 全局 | +| **Windsurf** | `~/.windsurf/skills/` | 全局 | +| **Roo Code** | `.roo/skills/` | 项目 | +| **Cline** | `.cline/skills/` | 项目 | +| **Aider** | `~/.aider/skills/` | 全局 | +| **Bolt** | `.bolt/skills/` | 项目 | +| **Kilo Code** | `.kilo/skills/` | 项目 | +| **Continue** | `~/.continue/skills/` | 全局 | +| **Kimi Code** | `~/.kimi/skills/` | 全局 | +| **IBM Bob** | `.bob/skills/` | 项目 | + +--- + +## 🔌 MCP 集æˆï¼ˆ40 个工具) + +Skill Seekers æä¾› MCP æœåŠ¡å™¨ï¼Œå¯åœ¨ Claude Codeã€Cursorã€Windsurfã€VS Code + Cline 或 IntelliJ IDEA 中使用。 + +```bash +# stdio 模å¼ï¼ˆClaude Codeã€VS Code + Cline) +python -m skill_seekers.mcp.server_fastmcp + +# HTTP 模å¼ï¼ˆCursorã€Windsurfã€IntelliJ) +python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 + +# 一次性自动é…ç½®æ‰€æœ‰ä»£ç† +./setup_mcp.sh +``` + +**全部 40 个å¯ç”¨å·¥å…·ï¼š** +- **核心(9 个):** `list_configs`ã€`generate_config`ã€`validate_config`ã€`estimate_pages`ã€`scrape_docs`ã€`package_skill`ã€`upload_skill`ã€`enhance_skill`ã€`install_skill` +- **扩展(10 个):** `scrape_github`ã€`scrape_pdf`ã€`unified_scrape`ã€`merge_sources`ã€`detect_conflicts`ã€`add_config_source`ã€`fetch_config`ã€`list_config_sources`ã€`remove_config_source`ã€`split_config` +- **å‘釿•°æ®åº“(4 个):** `export_to_chroma`ã€`export_to_weaviate`ã€`export_to_faiss`ã€`export_to_qdrant` +- **云存储(3 个):** `cloud_upload`ã€`cloud_download`ã€`cloud_list` + +**完整指å—:** [docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md) + +--- + +## âš™ï¸ é…ç½® + +### å¯ç”¨é¢„设(24+) + +```bash +# 列出所有预设 +# skill-seekers list-configs # v3.7.0 中ä¸å¯ç”¨ +``` + +| 类别 | 预设 | +|------|------| +| **Web 框架** | `react`ã€`vue`ã€`angular`ã€`svelte`ã€`nextjs` | +| **Python** | `django`ã€`flask`ã€`fastapi`ã€`sqlalchemy`ã€`pytest` | +| **游æˆå¼€å‘** | `godot`ã€`pygame`ã€`unity` | +| **工具与 DevOps** | `docker`ã€`kubernetes`ã€`terraform`ã€`ansible` | +| **统一(文档 + GitHub)** | `react-unified`ã€`vue-unified`ã€`nextjs-unified` ç­‰ | + +### 创建您自己的é…ç½® + +```bash +# 选项 1ï¼šäº¤äº’å¼ +skill-seekers create --interactive + +# 选项 2:å¤åˆ¶å¹¶ç¼–辑预设 +cp configs/react.json configs/myframework.json +nano configs/myframework.json +skill-seekers create --config configs/myframework.json +``` + +### é…置文件结构 + +```json +{ + "name": "myframework", + "description": "何时使用此技能", + "base_url": "https://docs.myframework.com/", + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs", "/guide"], + "exclude": ["/blog", "/about"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +### é…置存储ä½ç½® + +å·¥å…·æŒ‰ä»¥ä¸‹é¡ºåºæœç´¢ï¼š +1. æä¾›çš„确切路径 +2. `./configs/`(当å‰ç›®å½•) +3. `~/.config/skill-seekers/configs/`(用户é…置目录) +4. SkillSeekersWeb.com API(预设é…置) + +--- + +## 📊 创建的内容 + +``` +output/ +├── godot_data/ # 抓å–çš„åŽŸå§‹æ•°æ® +│ ├── pages/ # JSON 文件(æ¯é¡µä¸€ä¸ªï¼‰ +│ └── summary.json # 概览 +│ +└── godot/ # 技能文件 + ├── SKILL.md # å«çœŸå®žç¤ºä¾‹çš„增强版 + ├── references/ # 分类文档 + │ ├── index.md + │ ├── getting_started.md + │ ├── scripting.md + │ └── ... + ├── scripts/ # ç©ºï¼ˆå¯æ·»åŠ è‡ªå·±çš„è„šæœ¬ï¼‰ + └── assets/ # ç©ºï¼ˆå¯æ·»åŠ è‡ªå·±çš„èµ„æºï¼‰ +``` + +--- + +## 🛠故障排除 + +### 未æå–到内容? +- 检查您的 `main_content` 选择器 +- å°è¯•:`article`ã€`main`ã€`div[role="main"]` + +### æ•°æ®å­˜åœ¨ä½†ä¸ä½¿ç”¨ï¼Ÿ +```bash +# å¼ºåˆ¶é‡æ–°æŠ“å– +rm -rf output/myframework_data/ +skill-seekers create --config configs/myframework.json +``` + +### 分类ä¸ç†æƒ³ï¼Ÿ +编辑é…置中的 `categories` 部分,使用更好的关键è¯ã€‚ + +### æƒ³è¦æ›´æ–°æ–‡æ¡£ï¼Ÿ +```bash +# 删除旧数æ®å¹¶é‡æ–°æŠ“å– +rm -rf output/godot_data/ +skill-seekers create --config configs/godot.json +``` + +### 增强ä¸å·¥ä½œï¼Ÿ +```bash +# 检查 API Key 是å¦è®¾ç½® +echo $ANTHROPIC_API_KEY + +# å°è¯• LOCAL 模å¼ï¼ˆä½¿ç”¨ Claude Code Max,无需 API Key) +skill-seekers enhance output/react/ --mode LOCAL + +# 监控åŽå°å¢žå¼ºçŠ¶æ€ +skill-seekers enhance-status output/react/ --watch +``` + +### GitHub 速率é™åˆ¶é—®é¢˜ï¼Ÿ +```bash +# 设置 GitHub Token(5000 次/å°æ—¶ vs 匿å 60 次/å°æ—¶ï¼‰ +export GITHUB_TOKEN=ghp_your_token_here + +# 或é…置多个é…置文件 +skill-seekers config --github +``` + +--- + +## 📈 性能 + +| 任务 | æ—¶é—´ | 备注 | +|------|------|------| +| 抓å–ï¼ˆåŒæ­¥ï¼‰| 15–45 分钟 | 仅首次,基于线程 | +| 抓å–(异步)| 5–15 分钟 | `--async` 标志快 2–3 å€ | +| 构建 | 1–3 分钟 | 从缓存快速é‡å»º | +| é‡å»º | <1 分钟 | 使用 `--skip-scrape` | +| 增强(LOCAL)| 30–60 ç§’ | 使用 Claude Code Max | +| 增强(API)| 20–40 ç§’ | éœ€è¦ API Key | +| 视频(字幕)| 1–3 分钟 | YouTube/本地,仅字幕 | +| 视频(视觉)| 5–15 分钟 | + OCR 帧æå– | +| 打包 | 5–10 ç§’ | 最终 .zip 创建 | + +--- + +## 🆕 v3.6.0 新增功能 + +### 工作æµé¢„设 +使用 `--preset` æŽ§åˆ¶åˆ†æžæ·±åº¦ï¼š + +```bash +skill-seekers create https://docs.react.dev/ --preset quick # å¿«é€Ÿï¼Œæµ…å±‚åˆ†æž +skill-seekers create https://docs.react.dev/ --preset standard # 平衡(默认) +skill-seekers create https://docs.react.dev/ --preset comprehensive # æ·±åº¦ï¼Œè¯¦å°½åˆ†æž +``` + +### 生命周期标志 +```bash +skill-seekers create https://docs.react.dev/ --dry-run # 䏿Гå–预览 +skill-seekers create https://docs.react.dev/ --fresh # å¿½ç•¥ç¼“å­˜ï¼Œå®Œæ•´é‡æ–°æŠ“å– +skill-seekers create https://docs.react.dev/ --resume # æ¢å¤ä¸­æ–­çš„任务 +skill-seekers create https://docs.react.dev/ --skip-scrape # 釿–°æ‰“包现有输出 +``` + +### å¥åº·æ£€æŸ¥ä¸Žå·¥å…· +```bash +skill-seekers doctor # 诊断安装与环境 +skill-seekers sync-config # é…置漂移检测 +skill-seekers stream # 大型文档æµå¼æ‘„å– +skill-seekers update output/react/ # å¢žé‡æ›´æ–° +skill-seekers multilang # å¤šè¯­è¨€æŠ€èƒ½ç”Ÿæˆ +skill-seekers quality output/react/ # è´¨é‡æŠ¥å‘Šï¼ˆæ·»åŠ  --threshold 7 设置门槛:低于 7/10 æ—¶éžé›¶é€€å‡ºï¼‰ +``` + +### RAG 分å—选项(打包) +```bash +skill-seekers package output/react/ --chunk-for-rag --chunk-tokens 512 --chunk-overlap-tokens 50 +``` + +### 市场å‘布 +```bash +skill-seekers package output/react/ --marketplace --marketplace-category frontend +``` + +### å…¶ä»–å¯é€‰ä¾èµ– +| Extra | 安装 | 用途 | +|-------|------|------| +| `browser` | `pip install "skill-seekers[browser]"` | 适用于 SPA 网站的无头 Playwright | +| `embedding` | `pip install "skill-seekers[embedding]"` | 嵌入æœåŠ¡å™¨æ”¯æŒ | +| `s3` / `gcs` / `azure` | `pip install "skill-seekers[s3]"` ç­‰ | 云存储上传 | +| `rag-upload` | `pip install "skill-seekers[rag-upload]"` | 组åˆå‘釿•°æ®åº“上传ä¾èµ– | + +--- + +## 📚 文档 + +### å…¥é—¨æŒ‡å— +- **[BULLETPROOF_QUICKSTART.md](BULLETPROOF_QUICKSTART.md)** - 🎯 **新用户从这里开始ï¼** +- **[QUICKSTART.md](docs/archive/legacy/QUICKSTART.md)** - 有ç»éªŒç”¨æˆ·çš„快速入门 +- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - 常è§é—®é¢˜å’Œè§£å†³æ–¹æ¡ˆ +- **[docs/archive/legacy/QUICK_REFERENCE.md](docs/archive/legacy/QUICK_REFERENCE.md)** - å•页速查表 + +### æž¶æž„ +- **[docs/UML_ARCHITECTURE.md](docs/UML_ARCHITECTURE.md)** - åŒ…å« 14 张图的 UML 架构概览 +- **[docs/UML/exports/](docs/UML/exports/)** - PNG 图导出(包概览 + 13 张类图) +- **[docs/UML/html/](docs/UML/html/index.html/index.html)** - 完整 HTML API å‚è€ƒï¼ˆæ‰€æœ‰ç±»ã€æ“作ã€å±žæ€§ï¼‰ +- **[docs/UML/skill_seekers.mdj](docs/UML/skill_seekers.mdj)** - StarUML 项目文件(使用 [StarUML](https://staruml.io/) 打开) + +### æŒ‡å— +- **[docs/reference/LARGE_DOCUMENTATION.md](docs/reference/LARGE_DOCUMENTATION.md)** - å¤„ç† 10K–40K+ 页文档 +- **[docs/features/ENHANCEMENT_MODES.md](docs/features/ENHANCEMENT_MODES.md)** - AI å¢žå¼ºæ¨¡å¼æŒ‡å— +- **[docs/guides/MCP_SETUP.md](docs/guides/MCP_SETUP.md)** - MCP 集æˆè®¾ç½® +- **[docs/features/UNIFIED_SCRAPING.md](docs/features/UNIFIED_SCRAPING.md)** - å¤šæºæŠ“å– +- **[docs/VIDEO_GUIDE.md](docs/VIDEO_GUIDE.md)** - 视频æå–å®Œæ•´æŒ‡å— + +### é›†æˆæŒ‡å— +- **[docs/integrations/LANGCHAIN.md](docs/integrations/LANGCHAIN.md)** - LangChain RAG +- **[docs/integrations/CURSOR.md](docs/integrations/CURSOR.md)** - Cursor IDE +- **[docs/integrations/WINDSURF.md](docs/integrations/WINDSURF.md)** - Windsurf IDE +- **[docs/integrations/CLINE.md](docs/integrations/CLINE.md)** - Cline(VS Code) +- **[docs/integrations/RAG_PIPELINES.md](docs/integrations/RAG_PIPELINES.md)** - 所有 RAG æµæ°´çº¿ + +--- + +## 📠许å¯è¯ + +MIT 许å¯è¯ - è¯¦è§ [LICENSE](LICENSE) 文件 + +--- + +ç¥æ‚¨æž„å»ºæŠ€èƒ½æ„‰å¿«ï¼ ðŸš€ + +--- + +## 🔒 安全 + +[![MseeP.ai 安全评估徽章](https://mseep.net/pr/yusufkaraaslan-skill-seekers-badge.png)](https://mseep.ai/app/yusufkaraaslan-skill-seekers) + +--- + +## 💛 赞助商 + +

+ + Atlas Cloud + +

+ +[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=skill_seekers) — 全模æ€ã€OpenAI 兼容的 AI 推ç†å¹³å°ã€‚Skill Seekers 通过 `--target atlas`(é…ç½® `ATLAS_API_KEY`)支æŒå°†å…¶ä½œä¸ºæ‰“包/增强目标。 diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..9a3a8f7 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,433 @@ +# Skill Seekers Roadmap + +Transform Skill Seekers into the easiest way to create Claude AI skills from **any knowledge source** - documentation websites, PDFs, codebases, GitHub repos, Office docs, and more - with both CLI and MCP interfaces. + +--- + +## 🎯 Current Status: v3.6.0 ✅ + +**Latest Release:** v3.6.0 (May 2026) + +**What Works:** +- ✅ **18 source types** — documentation, GitHub, PDF, video, Word, EPUB, Jupyter, local HTML, OpenAPI, AsciiDoc, PowerPoint, RSS/Atom, man pages, Confluence, Notion, Slack/Discord, local codebase +- ✅ Unified multi-source scraping with generic merge for any source combination +- ✅ 40 MCP tools fully functional +- ✅ Multi-platform support (21 platforms: Claude, Gemini, OpenAI, DeepSeek, Qwen, Fireworks, Together, OpenRouter, IBM BoB, Kimi, MiniMax, OpenCode, LangChain, LlamaIndex, Haystack, Pinecone, ChromaDB, FAISS, Weaviate, Qdrant, Markdown) +- ✅ Auto-upload to all platforms +- ✅ 12 preset configs (including unified configs) +- ✅ Large docs support (40K+ pages with router skills) +- ✅ C3.x codebase analysis suite (C3.1-C3.10) +- ✅ Bootstrap skill feature - self-hosting capability +- ✅ 3,445+ tests passing +- ✅ Unified `create` command with auto-detection for all 18 source types +- ✅ 68 YAML workflow presets +- ✅ Cloud storage integration (S3, GCS, Azure) +- ✅ Source auto-detection via `source_detector.py` + +**Recent Improvements (v3.2.0):** +- ✅ **10 new source types**: Word, EPUB, video, Jupyter, local HTML, OpenAPI, AsciiDoc, PowerPoint, RSS/Atom, man pages, Confluence, Notion, Slack/Discord +- ✅ **Generic merge system**: `_generic_merge()` in `unified_skill_builder.py` handles arbitrary source combinations +- ✅ **Unified CLI**: `create` command auto-detects all 18 source types +- ✅ **Workflow Presets**: YAML-based enhancement presets with CLI management +- ✅ **Progressive Disclosure**: Default help shows 13 universal flags, detailed help per source +- ✅ **Bug Fixes**: Markdown parser h1 filtering, paragraph length filtering +- ✅ **Docs Cleanup**: Removed 47 stale planning/QA/release markdown files + +--- + +## 🧭 Development Philosophy + +**Small tasks → Pick one → Complete → Move on** + +Instead of rigid milestones, we use a **flexible task-based approach**: +- 136 small, independent tasks across 10 categories +- Pick any task, any order +- Start small, ship often +- No deadlines, just continuous progress + +**Philosophy:** Small steps → Consistent progress → Compound results + +--- + +## 📋 Task-Based Roadmap (136 Tasks, 10 Categories) + +### 🌠**Category A: Community & Sharing** +Small tasks that build community features incrementally + +#### A1: Config Sharing (Website Feature) +- [x] **Task A1.1:** Create simple JSON API endpoint to list configs ✅ **COMPLETE** + - **Status:** Live at https://api.skillseekersweb.com + - **Features:** 6 REST endpoints, auto-categorization, auto-tags, filtering, SSL enabled +- [x] **Task A1.2:** Add MCP tool `fetch_config` to download from website ✅ **COMPLETE** + - **Features:** List 24 configs, filter by category, download by name +- [x] **Task A1.3:** Add MCP tool `submit_config` to submit custom configs ✅ **COMPLETE** + - **Purpose:** Allow users to submit custom configs via MCP (creates GitHub issue) + - **Completed:** May 2026 +- [ ] **Task A1.4:** Create static config catalog website (GitHub Pages) + - **Purpose:** Read-only catalog to browse/search configs + - **Time:** 2-3 hours +- [ ] **Task A1.5:** Add config rating/voting system + - **Purpose:** Community feedback on config quality + - **Time:** 3-4 hours +- [ ] **Task A1.6:** Admin review queue for submitted configs + - **Approach:** Use GitHub Issues with labels + - **Time:** 1-2 hours +- [x] **Task A1.7:** Add MCP tool `install_skill` for one-command workflow ✅ **COMPLETE** + - **Features:** fetch → scrape → enhance → package → upload + - **Completed:** December 21, 2025 +- [ ] **Task A1.8:** Add smart skill detection and auto-install + - **Purpose:** Auto-detect missing skills from user queries + - **Time:** 4-6 hours + +**Start Next:** Pick A1.4 (static config catalog website) + +#### A2: Knowledge Sharing (Website Feature) +- [ ] **Task A2.1:** Design knowledge database schema +- [ ] **Task A2.2:** Create API endpoint to upload knowledge (.zip files) +- [ ] **Task A2.3:** Add MCP tool `fetch_knowledge` to download from site +- [ ] **Task A2.4:** Add knowledge preview/description +- [ ] **Task A2.5:** Add knowledge categorization (by framework/topic) +- [ ] **Task A2.6:** Add knowledge search functionality + +**Start Small:** Pick A2.1 first (schema design, no coding) + +#### A3: Simple Website Foundation +- [ ] **Task A3.1:** Create single-page static site (GitHub Pages) +- [ ] **Task A3.2:** Add config gallery view +- [ ] **Task A3.3:** Add "Submit Config" link +- [ ] **Task A3.4:** Add basic stats +- [ ] **Task A3.5:** Add simple blog using GitHub Issues +- [ ] **Task A3.6:** Add RSS feed for updates + +**Start Small:** Pick A3.1 first (single HTML page) + +--- + +### ðŸ› ï¸ **Category B: New Input Formats** +Add support for non-HTML documentation sources + +#### B1: PDF Documentation Support ✅ **COMPLETE (v3.0.0)** +- [x] **Task B1.1:** Research PDF parsing libraries ✅ +- [x] **Task B1.2:** Create simple PDF text extractor (POC) ✅ +- [x] **Task B1.3:** Add PDF page detection and chunking ✅ +- [x] **Task B1.4:** Extract code blocks from PDFs ✅ +- [x] **Task B1.5:** Add PDF image extraction ✅ +- [x] **Task B1.6:** Create `pdf_scraper.py` CLI tool ✅ +- [x] **Task B1.7:** Add MCP tool `scrape_pdf` ✅ +- [x] **Task B1.8:** Create PDF config format ✅ + +#### B2: Microsoft Word (.docx) Support ✅ **COMPLETE (v3.2.0)** +- [x] **Task B2.1-B2.7:** Word document parsing and scraping ✅ + +#### B3: Excel/Spreadsheet (.xlsx) Support +- [ ] **Task B3.1-B3.6:** Spreadsheet parsing and API extraction + +#### B4: Markdown Files Support ✅ **COMPLETE (v3.1.0)** +- [x] **Task B4.1-B4.6:** Local markdown directory scraping ✅ + +#### B5: Additional Source Types ✅ **COMPLETE (v3.2.0)** +- [x] **EPUB** - `epub_scraper.py` ✅ +- [x] **Video** - `video_scraper.py` (YouTube, Vimeo, local files) ✅ +- [x] **Jupyter Notebook** - `jupyter_scraper.py` ✅ +- [x] **Local HTML** - `html_scraper.py` ✅ +- [x] **OpenAPI/Swagger** - `openapi_scraper.py` ✅ +- [x] **AsciiDoc** - `asciidoc_scraper.py` ✅ +- [x] **PowerPoint** - `pptx_scraper.py` ✅ +- [x] **RSS/Atom** - `rss_scraper.py` ✅ +- [x] **Man pages** - `manpage_scraper.py` ✅ +- [x] **Confluence** - `confluence_scraper.py` ✅ +- [x] **Notion** - `notion_scraper.py` ✅ +- [x] **Slack/Discord** - `chat_scraper.py` ✅ + +--- + +### 💻 **Category C: Codebase Knowledge** +Generate skills from actual code repositories + +#### C1: GitHub Repository Scraping +- [ ] **Task C1.1-C1.12:** GitHub API integration and code analysis + +#### C2: Local Codebase Scraping +- [ ] **Task C2.1-C2.8:** Local directory analysis and API extraction + +#### C3: Code Pattern Recognition +- [x] **Task C3.1:** Detect common patterns (singleton, factory, etc.) ✅ **v2.6.0** + - 10 GoF patterns, 9 languages, 87% precision +- [x] **Task C3.2:** Extract usage examples from test files ✅ **v2.6.0** + - 5 categories, 9 languages, 80%+ high-confidence examples +- [x] **Task C3.3:** Build "how to" guides from code ✅ **COMPLETE** +- [x] **Task C3.4:** Extract configuration patterns ✅ **COMPLETE** +- [x] **Task C3.5:** Create architectural overview ✅ **COMPLETE** +- [x] **Task C3.6:** AI Enhancement for Pattern Detection ✅ **v2.6.0** + - Claude API integration for enhanced insights +- [x] **Task C3.7:** Architectural Pattern Detection ✅ **v2.6.0** + - Detects 8 architectural patterns, framework-aware + +**Start Next:** Pick C1.1 (GitHub API client) + +--- + +### 🔌 **Category D: Context7 Integration** +- [ ] **Task D1.1-D1.4:** Research and planning +- [ ] **Task D2.1-D2.5:** Basic integration + +--- + +### 🚀 **Category E: MCP Enhancements** +Small improvements to existing MCP tools + +#### E1: New MCP Tools +- [x] **Task E1.3:** Add `scrape_pdf` MCP tool ✅ +- [x] **Task E1.1:** Add `fetch_config` MCP tool ✅ **COMPLETE** +- [ ] **Task E1.2:** Add `fetch_knowledge` MCP tool +- [ ] **Task E1.4-E1.9:** Additional format scrapers + +#### E2: MCP Quality Improvements +- [ ] **Task E2.1:** Add error handling to all tools +- [ ] **Task E2.2:** Add structured logging +- [ ] **Task E2.3:** Add progress indicators +- [ ] **Task E2.4:** Add validation for all inputs +- [ ] **Task E2.5:** Add helpful error messages +- [x] **Task E2.6:** Add retry logic for network failures ✅ **Utilities ready** + +--- + +### âš¡ **Category F: Performance & Reliability** +Technical improvements to existing features + +#### F1: Core Scraper Improvements +- [ ] **Task F1.1:** Add URL normalization +- [ ] **Task F1.2:** Add duplicate page detection +- [ ] **Task F1.3:** Add memory-efficient streaming +- [ ] **Task F1.4:** Add HTML parser fallback +- [x] **Task F1.5:** Add network retry with exponential backoff ✅ +- [ ] **Task F1.6:** Fix package path output bug + +#### F2: Incremental Updates +- [ ] **Task F2.1-F2.5:** Track modifications, update only changed content + +--- + +### 🎨 **Category G: Tools & Utilities** +Small standalone tools that add value + +#### G1: Config Tools +- [ ] **Task G1.1:** Create `validate_config.py` +- [ ] **Task G1.2:** Create `test_selectors.py` +- [ ] **Task G1.3:** Create `auto_detect_selectors.py` (AI-powered) +- [ ] **Task G1.4:** Create `compare_configs.py` +- [ ] **Task G1.5:** Create `optimize_config.py` + +#### G2: Skill Quality Tools +- [ ] **Task G2.1-G2.5:** Quality analysis and reporting + +--- + +### 📚 **Category H: Community Response** +- [ ] **Task H1.1-H1.5:** Address open GitHub issues + +--- + +### 🎓 **Category I: Content & Documentation** +- [ ] **Task I1.1-I1.6:** Video tutorials +- [ ] **Task I2.1-I2.5:** Written guides + +--- + +### 🧪 **Category J: Testing & Quality** +- [ ] **Task J1.1-J1.6:** Test expansion and coverage + +--- + +## 🎯 Recommended Starting Tasks + +### Quick Wins (1-2 hours each): +1. **H1.1** - Respond to Issue #8 +2. **J1.1** - Install MCP package +3. **A3.1** - Create GitHub Pages site +4. **B1.1** - Research PDF parsing +5. **F1.1** - Add URL normalization + +### Medium Tasks (3-5 hours each): +6. ✅ **A1.1** - JSON API for configs (COMPLETE) +7. **G1.1** - Config validator script +8. **C1.1** - GitHub API client +9. **I1.1** - Video script writing +10. **E2.1** - Error handling for MCP tools + +--- + +## 📊 Release History + +### ✅ v2.6.0 - C3.x Codebase Analysis Suite (January 14, 2026) +**Focus:** Complete codebase analysis with multi-platform support + +**Completed Features:** +- C3.x suite (C3.1-C3.8): Pattern detection, test extraction, architecture analysis +- Multi-platform support: Claude, Gemini, OpenAI, Markdown +- Platform adaptor architecture +- 18 MCP tools (up from 9) +- 700+ tests passing +- Unified multi-source scraping maturity + +### ✅ v2.1.0 - Test Coverage & Quality (November 29, 2025) +**Focus:** Test coverage and unified scraping + +**Completed Features:** +- Fixed 12 unified scraping tests +- GitHub repository scraping with unlimited local analysis +- PDF extraction and conversion +- 427 tests passing + +### ✅ v1.0.0 - Production Release (October 19, 2025) +**First stable release** + +**Core Features:** +- Documentation scraping with BFS +- Smart categorization +- Language detection +- Pattern extraction +- 12 preset configurations +- MCP server with 9 tools +- Large documentation support (40K+ pages) +- Auto-upload functionality + +--- + +## 📅 Release Planning + +### Release: v3.7.0 (Estimated: Q3 2026) +**Focus:** Developer Experience & Integrations + +**Planned Features:** +- CI/CD integration examples +- Docker containerization +- Enhanced scraping formats (Sphinx, Docusaurus detection) +- Performance optimizations +- Real-time documentation monitoring + +--- + +## 🔮 Long-term Vision (v3.0+) + +### Major Features Under Consideration + +#### Advanced Scraping +- Real-time documentation monitoring +- Automatic skill updates +- Change notifications +- Multi-language documentation support + +#### Collaboration +- Collaborative skill curation +- Shared skill repositories +- Community ratings and reviews +- Skill marketplace + +#### AI & Intelligence +- Enhanced AI analysis +- Better conflict detection algorithms +- Automatic documentation quality scoring +- Semantic understanding and natural language queries + +#### Ecosystem +- VS Code extension +- IntelliJ/PyCharm plugin +- Interactive TUI mode +- Skill diff and merge tools + +--- + +## 📈 Metrics & Goals + +### Current State (v3.6.0) ✅ +- ✅ 18 source types supported (17 + config) +- ✅ 12 preset configs +- ✅ 3,445+ tests (excellent coverage) +- ✅ 40 MCP tools +- ✅ 21 platform adaptors +- ✅ C3.x codebase analysis suite complete +- ✅ Multi-source synthesis with generic merge for any combination + +### Goals for v3.7+ +- 🎯 Professional website live +- 🎯 50+ preset configs +- 🎯 Video tutorial series (5+ videos) +- 🎯 100+ GitHub stars +- 🎯 Community contributions flowing + +### Goals for v3.0+ +- 🎯 Auto-detection for 80%+ of sites +- 🎯 <1 minute skill generation +- 🎯 Active community marketplace +- 🎯 Quality scoring system +- 🎯 Real-time monitoring + +--- + +## 🤠How to Influence the Roadmap + +### Priority System + +Features are prioritized based on: +1. **User impact** - How many users will benefit? +2. **Technical feasibility** - How complex is the implementation? +3. **Community interest** - How many upvotes/requests? +4. **Strategic alignment** - Does it fit our vision? + +### Ways to Contribute + +1. **Vote on Features** - â­ Star feature request issues +2. **Contribute Code** - Pick any task from the 136 available +3. **Share Feedback** - Open issues, share success stories +4. **Help with Documentation** - Write tutorials, improve docs + +See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines. + +--- + +## 🎨 Flexibility Rules + +1. **Pick any task, any order** - No rigid dependencies +2. **Start small** - Research tasks before implementation +3. **One task at a time** - Focus, complete, move on +4. **Switch anytime** - Not enjoying it? Pick another! +5. **Document as you go** - Each task should update docs +6. **Test incrementally** - Each task should have a quick test +7. **Ship early** - Don't wait for "complete" features + +--- + +## 📊 Progress Tracking + +**Completed Tasks:** 15+ (C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, A1.1, A1.2, A1.3, A1.7, E1.1, E1.3, E2.6, F1.5) +**In Progress:** v3.7.0 planning +**Total Available Tasks:** 136 + +**No pressure, no deadlines, just progress!** ✨ + +--- + +## 🔗 Related Projects + +- [Model Context Protocol](https://modelcontextprotocol.io/) +- [Claude Code](https://claude.ai/code) +- [Anthropic Claude](https://claude.ai) +- Documentation frameworks we support: Docusaurus, GitBook, VuePress, Sphinx, MkDocs + +--- + +## 📚 Learn More + +- **Project Board**: https://github.com/users/yusufkaraaslan/projects/2 +- **Changelog**: [CHANGELOG.md](CHANGELOG.md) +- **Contributing**: [CONTRIBUTING.md](CONTRIBUTING.md) +- **Discussions**: https://github.com/yusufkaraaslan/Skill_Seekers/discussions +- **Issues**: https://github.com/yusufkaraaslan/Skill_Seekers/issues + +--- + +**Last Updated:** May 30, 2026 +**Philosophy:** Small steps → Consistent progress → Compound results + +**Together, we're building the future of documentation-to-AI skill conversion!** 🚀 diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 0000000..1f20426 --- /dev/null +++ b/TROUBLESHOOTING.md @@ -0,0 +1,485 @@ +# Troubleshooting Guide + +Common issues and solutions when using Skill Seeker. + +--- + +## Installation Issues + +### Python Not Found + +**Error:** +``` +python3: command not found +``` + +**Solutions:** +1. **Check if Python is installed:** + ```bash + which python3 + python --version # Try without the 3 + ``` + +2. **Install Python:** + - **macOS:** `brew install python3` + - **Linux:** `sudo apt install python3 python3-pip` + - **Windows:** Download from python.org, check "Add to PATH" + +3. **Use python instead of python3:** + ```bash + python -m skill_seekers --help + ``` + +### Module Not Found + +**Error:** +``` +ModuleNotFoundError: No module named 'requests' +ModuleNotFoundError: No module named 'bs4' +ModuleNotFoundError: No module named 'mcp' +``` + +**Solutions:** +1. **Install the package in editable mode (critical first step):** + ```bash + pip install -e . + ``` + +2. **Install MCP extras if needed:** + ```bash + pip install -e ".[mcp]" + ``` + +3. **Use --user flag if permission denied:** + ```bash + pip install --user -e . + ``` + +4. **Check pip is working:** + ```bash + pip3 --version + ``` + +### Permission Denied + +**Error:** +``` +Permission denied: '/usr/local/lib/python3.x/...' +``` + +**Solutions:** +1. **Use --user flag:** + ```bash + pip3 install --user -e . + ``` + +2. **Use sudo (not recommended):** + ```bash + sudo pip install -e . + ``` + +3. **Use virtual environment (best practice):** + ```bash + python3 -m venv venv + source venv/bin/activate + pip install -e . + ``` + +--- + +## Runtime Issues + +### File Not Found + +**Error:** +``` +FileNotFoundError: [Errno 2] No such file or directory: 'src/skill_seekers/cli/main.py' +``` + +**Solutions:** +1. **Check you're in the Skill_Seekers directory:** + ```bash + pwd + # Should show: .../Skill_Seekers + + ls + # Should show: README.md, src/, configs/, tests/ + ``` + +2. **Change to the correct directory:** + ```bash + cd ~/Projects/Skill_Seekers # Adjust path + ``` + +3. **Ensure the package is installed:** + ```bash + pip install -e . + ``` + +### Config File Not Found + +**Error:** +``` +⌠Error: Config file not found: configs/myconfig.json +``` + +**Understanding Config Locations:** + +The tool searches for configs in this order: +1. Exact path as provided +2. `./configs/` (current directory) +3. `~/.config/skill-seekers/configs/` (user config directory) +4. SkillSeekersWeb.com API (preset configs) + +**Solutions:** + +1. **Place config in user directory (recommended for custom configs):** + ```bash + mkdir -p ~/.config/skill-seekers/configs + cp myconfig.json ~/.config/skill-seekers/configs/ + + # Now you can use it from anywhere + skill-seekers create --config myconfig.json + ``` + +2. **Place config in current directory (project-specific):** + ```bash + mkdir -p configs + cp myconfig.json configs/ + + skill-seekers create --config configs/myconfig.json + ``` + +3. **Use absolute path:** + ```bash + skill-seekers create --config /full/path/to/myconfig.json + ``` + +4. **Check if it's a preset config (auto-downloads):** + ```bash + # List all available presets + skill-seekers estimate --all + + # Use preset (auto-fetched from API) + skill-seekers create --config react.json + ``` + +5. **Create new config interactively:** + ```bash + skill-seekers create --interactive + ``` + +--- + +## MCP Setup Issues + +### MCP Server Not Loading + +**Symptoms:** +- Tools don't appear in Claude Code +- "List all available configs" doesn't work + +**Solutions:** + +1. **Check configuration file:** + ```bash + cat ~/.config/claude-code/mcp.json + ``` + +2. **Verify paths are ABSOLUTE (not placeholders):** + ```json + { + "mcpServers": { + "skill-seeker": { + "command": "python", + "args": [ + "-m", + "skill_seekers.mcp.server_fastmcp" + ] + } + } + } + ``` + ⌠**Bad:** `$REPO_PATH` or `/path/to/Skill_Seekers` + ✅ **Good:** `/Users/john/Projects/Skill_Seekers` + +3. **Test server manually:** + ```bash + cd ~/Projects/Skill_Seekers + python -m skill_seekers.mcp.server_fastmcp + # Should start without errors (Ctrl+C to stop) + ``` + +4. **Re-run setup script:** + ```bash + ./setup_mcp.sh + # Select "y" for auto-configure + ``` + +5. **RESTART Claude Code completely:** + - Quit (don't just close window) + - Reopen + +### Placeholder Paths in Config + +**Problem:** Config has `$REPO_PATH` or `/Users/username/` instead of real paths + +**Solution:** +```bash +# Get your actual path +cd ~/Projects/Skill_Seekers +pwd +# Copy this path + +# Edit config +nano ~/.config/claude-code/mcp.json + +# Replace ALL instances of placeholders with your actual path +# Save (Ctrl+O, Enter, Ctrl+X) + +# Restart Claude Code +``` + +### Tools Appear But Don't Work + +**Symptoms:** +- Tools listed but commands fail +- "Error executing tool" messages + +**Solutions:** + +1. **Check working directory:** + ```json + { + "cwd": "/FULL/PATH/TO/Skill_Seekers" + } + ``` + +2. **Verify package is installed:** + ```bash + pip list | grep skill-seekers + python -c "import skill_seekers; print(skill_seekers.__version__)" + ``` + +3. **Test CLI tools directly:** + ```bash + skill-seekers create --help + ``` + +--- + +## Scraping Issues + +### Slow or Hanging + +**Solutions:** + +1. **Check network connection:** + ```bash + ping google.com + curl -I https://docs.yoursite.com + ``` + +2. **Use smaller max_pages for testing:** + ```bash + skill-seekers create --config configs/test.json --max-pages 5 + ``` + +3. **Increase rate_limit in config:** + ```json + { + "rate_limit": 1.0 // Increase from 0.5 + } + ``` + +### No Content Extracted + +**Problem:** Pages scraped but content is empty + +**Solutions:** + +1. **Check selector in config:** + ```bash + # Test with browser dev tools + # Look for: article, main, div[role="main"], div.content + ``` + +2. **Verify website is accessible:** + ```bash + curl https://docs.example.com + ``` + +3. **Try different selectors:** + ```json + { + "selectors": { + "main_content": "article" // Try: main, div.content, etc. + } + } + ``` + +### Rate Limiting / 429 Errors + +**Error:** +``` +HTTP Error 429: Too Many Requests +``` + +**Solutions:** + +1. **Increase rate_limit:** + ```json + { + "rate_limit": 2.0 // Wait 2 seconds between requests + } + ``` + +2. **Reduce max_pages:** + ```json + { + "max_pages": 50 // Scrape fewer pages + } + ``` + +3. **Try again later:** + ```bash + # Wait an hour and retry + ``` + +--- + +## Platform-Specific Issues + +### macOS + +**Issue:** Can't run `./setup_mcp.sh` + +**Solution:** +```bash +chmod +x setup_mcp.sh +./setup_mcp.sh +``` + +**Issue:** Homebrew not installed + +**Solution:** +```bash +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +### Linux + +**Issue:** pip3 not found + +**Solution:** +```bash +sudo apt update +sudo apt install python3-pip +``` + +**Issue:** Permission errors + +**Solution:** +```bash +# Use --user flag +pip3 install --user -e . +``` + +### Windows (WSL) + +**Issue:** Python not in PATH + +**Solution:** +1. Reinstall Python +2. Check "Add Python to PATH" +3. Or add manually to PATH + +**Issue:** Line ending errors + +**Solution:** +```bash +dos2unix setup_mcp.sh +./setup_mcp.sh +``` + +--- + +## Verification Commands + +Use these to check your setup: + +```bash +# 1. Check Python +python3 --version # Should be 3.10+ + +# 2. Check package is installed +pip list | grep skill-seekers +python -c "import skill_seekers; print(skill_seekers.__version__)" + +# 3. Check source layout +ls src/skill_seekers/cli/ +ls src/skill_seekers/mcp/ +ls configs/ + +# 4. Check MCP config +cat ~/.config/claude-code/mcp.json + +# 5. Test scraper +skill-seekers create --help + +# 6. Test MCP server +timeout 3 python -m skill_seekers.mcp.server_fastmcp || echo "Server OK" + +# 7. Check git repo +git status +git log --oneline -5 +``` + +--- + +## Getting Help + +If none of these solutions work: + +1. **Check existing issues:** + https://github.com/yusufkaraaslan/Skill_Seekers/issues + +2. **Open a new issue with:** + - Your OS (macOS 13, Ubuntu 22.04, etc.) + - Python version (`python3 --version`) + - Full error message + - What command you ran + - Output of verification commands above + +3. **Include this debug info:** + ```bash + # System info + uname -a + python3 --version + pip3 --version + + # Skill Seeker info + cd ~/Projects/Skill_Seekers # Your path + pwd + git log --oneline -1 + ls -la cli/ mcp/ configs/ + + # MCP config (if using MCP) + cat ~/.config/claude-code/mcp.json + ``` + +--- + +## Quick Fixes Checklist + +- [ ] In the Skill_Seekers directory? (`pwd`) +- [ ] Python 3.10+ installed? (`python3 --version`) +- [ ] Package installed? (`pip list | grep skill-seekers`) +- [ ] Config file exists? (`ls configs/yourconfig.json`) +- [ ] Internet connection working? (`ping google.com`) +- [ ] For MCP: Config uses absolute paths? (not `$REPO_PATH`) +- [ ] For MCP: Claude Code restarted? (quit and reopen) + +--- + +**Still stuck?** Open an issue: https://github.com/yusufkaraaslan/Skill_Seekers/issues/new diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000..2e95cc3 --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,2 @@ +# configs_repo is now a git submodule, tracked in .gitmodules +# configs_repo/ diff --git a/api/README.md b/api/README.md new file mode 100644 index 0000000..941efd7 --- /dev/null +++ b/api/README.md @@ -0,0 +1,267 @@ +# Skill Seekers Config API + +FastAPI backend for discovering and downloading Skill Seekers configuration files. + +## 🚀 Endpoints + +### Base URL +- **Production**: `https://skillseekersweb.com` +- **Local**: `http://localhost:8000` + +### Available Endpoints + +#### 1. **GET /** - API Information +Returns API metadata and available endpoints. + +```bash +curl https://skillseekersweb.com/ +``` + +**Response:** +```json +{ + "name": "Skill Seekers Config API", + "version": "1.0.0", + "endpoints": { + "/api/configs": "List all available configs", + "/api/configs/{name}": "Get specific config details", + "/api/categories": "List all categories", + "/docs": "API documentation" + }, + "repository": "https://github.com/yusufkaraaslan/Skill_Seekers", + "website": "https://skillseekersweb.com" +} +``` + +--- + +#### 2. **GET /api/configs** - List All Configs +Returns list of all available configs with metadata. + +**Query Parameters:** +- `category` (optional) - Filter by category (e.g., `web-frameworks`) +- `tag` (optional) - Filter by tag (e.g., `javascript`) +- `type` (optional) - Filter by type (`single-source` or `unified`) + +```bash +# Get all configs +curl https://skillseekersweb.com/api/configs + +# Filter by category +curl https://skillseekersweb.com/api/configs?category=web-frameworks + +# Filter by tag +curl https://skillseekersweb.com/api/configs?tag=javascript + +# Filter by type +curl https://skillseekersweb.com/api/configs?type=unified +``` + +**Response:** +```json +{ + "version": "1.0.0", + "total": 24, + "filters": null, + "configs": [ + { + "name": "react", + "description": "React framework for building user interfaces...", + "type": "single-source", + "category": "web-frameworks", + "tags": ["javascript", "frontend", "documentation"], + "primary_source": "https://react.dev/", + "max_pages": 300, + "file_size": 1055, + "last_updated": "2025-11-30T09:26:07+00:00", + "download_url": "https://skillseekersweb.com/api/download/react.json", + "config_file": "react.json" + } + ] +} +``` + +--- + +#### 3. **GET /api/configs/{name}** - Get Specific Config +Returns detailed information about a specific config. + +```bash +curl https://skillseekersweb.com/api/configs/react +``` + +**Response:** +```json +{ + "name": "react", + "description": "React framework for building user interfaces...", + "type": "single-source", + "category": "web-frameworks", + "tags": ["javascript", "frontend", "documentation"], + "primary_source": "https://react.dev/", + "max_pages": 300, + "file_size": 1055, + "last_updated": "2025-11-30T09:26:07+00:00", + "download_url": "https://skillseekersweb.com/api/download/react.json", + "config_file": "react.json" +} +``` + +--- + +#### 4. **GET /api/categories** - List Categories +Returns all available categories with config counts. + +```bash +curl https://skillseekersweb.com/api/categories +``` + +**Response:** +```json +{ + "total_categories": 5, + "categories": { + "web-frameworks": 7, + "game-engines": 2, + "devops": 2, + "css-frameworks": 1, + "uncategorized": 12 + } +} +``` + +--- + +#### 5. **GET /api/download/{config_name}** - Download Config File +Downloads the actual config JSON file. + +```bash +# Download react config +curl -O https://skillseekersweb.com/api/download/react.json + +# Download with just name (auto-adds .json) +curl -O https://skillseekersweb.com/api/download/react +``` + +--- + +#### 6. **GET /health** - Health Check +Health check endpoint for monitoring. + +```bash +curl https://skillseekersweb.com/health +``` + +**Response:** +```json +{ + "status": "healthy", + "service": "skill-seekers-api" +} +``` + +--- + +#### 7. **GET /docs** - API Documentation +Interactive OpenAPI documentation (Swagger UI). + +Visit: `https://skillseekersweb.com/docs` + +--- + +## 📦 Metadata Fields + +Each config includes the following metadata: + +| Field | Type | Description | +|-------|------|-------------| +| `name` | string | Config identifier (e.g., "react") | +| `description` | string | What the config is used for | +| `type` | string | "single-source" or "unified" | +| `category` | string | Auto-categorized (e.g., "web-frameworks") | +| `tags` | array | Relevant tags (e.g., ["javascript", "frontend"]) | +| `primary_source` | string | Main documentation URL or repo | +| `max_pages` | int | Estimated page count for scraping | +| `file_size` | int | Config file size in bytes | +| `last_updated` | string | ISO 8601 date of last update | +| `download_url` | string | Direct download link | +| `config_file` | string | Filename (e.g., "react.json") | + +--- + +## ðŸ—ï¸ Categories + +Configs are auto-categorized into: + +- **web-frameworks** - Web development frameworks (React, Django, FastAPI, etc.) +- **game-engines** - Game development engines (Godot, Unity, etc.) +- **devops** - DevOps tools (Kubernetes, Ansible, etc.) +- **css-frameworks** - CSS frameworks (Tailwind, etc.) +- **development-tools** - Dev tools (Claude Code, etc.) +- **gaming** - Gaming platforms (Steam, etc.) +- **uncategorized** - Other configs + +--- + +## ðŸ·ï¸ Tags + +Common tags include: + +- **Language**: `javascript`, `python`, `php` +- **Domain**: `frontend`, `backend`, `devops`, `game-development` +- **Type**: `documentation`, `github`, `pdf`, `multi-source` +- **Tech**: `css`, `testing`, `api` + +--- + +## 🚀 Local Development + +### Setup + +```bash +# Install dependencies +cd api +pip install -r requirements.txt + +# Run server +python main.py +``` + +API will be available at `http://localhost:8000` + +### Testing + +```bash +# Test health check +curl http://localhost:8000/health + +# List all configs +curl http://localhost:8000/api/configs + +# Get specific config +curl http://localhost:8000/api/configs/react + +# Download config +curl -O http://localhost:8000/api/download/react.json +``` + +--- + +## 📠Deployment + +### Render + +This API is configured for Render deployment via `render.yaml`. + +1. Push to GitHub +2. Connect repository to Render +3. Render auto-deploys from `render.yaml` +4. Configure custom domain: `skillseekersweb.com` + +--- + +## 🔗 Links + +- **API Documentation**: https://skillseekersweb.com/docs +- **GitHub Repository**: https://github.com/yusufkaraaslan/Skill_Seekers +- **Main Project**: https://github.com/yusufkaraaslan/Skill_Seekers#readme diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..77136ba --- /dev/null +++ b/api/__init__.py @@ -0,0 +1,6 @@ +""" +Skill Seekers Config API +FastAPI backend for discovering and downloading config files +""" + +__version__ = "1.0.0" diff --git a/api/config_analyzer.py b/api/config_analyzer.py new file mode 100644 index 0000000..20c9eb9 --- /dev/null +++ b/api/config_analyzer.py @@ -0,0 +1,366 @@ +#!/usr/bin/env python3 +""" +Config Analyzer - Extract metadata from Skill Seekers config files +""" + +import json +import subprocess +from datetime import datetime +from pathlib import Path +from typing import Any + + +class ConfigAnalyzer: + """Analyzes Skill Seekers config files and extracts metadata""" + + # Category mapping based on config content + CATEGORY_MAPPING = { + "web-frameworks": ["react", "vue", "django", "fastapi", "laravel", "astro", "hono"], + "game-engines": ["godot", "unity", "unreal"], + "devops": ["kubernetes", "ansible", "docker", "terraform"], + "css-frameworks": ["tailwind", "bootstrap", "bulma"], + "development-tools": ["claude-code", "vscode", "git"], + "gaming": ["steam"], + "testing": ["pytest", "jest", "test"], + } + + # Tag extraction keywords + TAG_KEYWORDS = { + "javascript": ["react", "vue", "astro", "hono", "javascript", "js", "node"], + "python": ["django", "fastapi", "ansible", "python", "flask"], + "php": ["laravel", "php"], + "frontend": ["react", "vue", "astro", "tailwind", "frontend", "ui"], + "backend": ["django", "fastapi", "laravel", "backend", "server", "api"], + "css": ["tailwind", "css", "styling"], + "game-development": ["godot", "unity", "unreal", "game"], + "devops": ["kubernetes", "ansible", "docker", "k8s", "devops"], + "documentation": ["docs", "documentation"], + "testing": ["test", "testing", "pytest", "jest"], + } + + def __init__(self, config_dir: Path, base_url: str = "https://api.skillseekersweb.com"): + """ + Initialize config analyzer + + Args: + config_dir: Path to configs directory + base_url: Base URL for download links + """ + self.config_dir = Path(config_dir) + self.base_url = base_url + + if not self.config_dir.exists(): + raise ValueError(f"Config directory not found: {self.config_dir}") + + def analyze_all_configs(self) -> list[dict[str, Any]]: + """ + Analyze all config files and extract metadata + + Returns: + List of config metadata dicts + """ + configs = [] + + # Find all JSON files recursively in configs directory and subdirectories + for config_file in sorted(self.config_dir.rglob("*.json")): + # Skip test/example configs in test-examples directory + if "test-examples" in config_file.parts: + continue + + try: + metadata = self.analyze_config(config_file) + if metadata: # Skip invalid configs + configs.append(metadata) + except Exception as e: + print(f"Warning: Failed to analyze {config_file.name}: {e}") + continue + + return configs + + def analyze_config(self, config_path: Path) -> dict[str, Any] | None: + """ + Analyze a single config file and extract metadata + + Args: + config_path: Path to config JSON file + + Returns: + Config metadata dict or None if invalid + """ + try: + # Read config file + with open(config_path) as f: + config_data = json.load(f) + + # Skip if no name field + if "name" not in config_data: + return None + + name = config_data["name"] + description = config_data.get("description", "") + + # Determine config type + config_type = self._determine_type(config_data) + + # Get primary source (base_url or repo) + primary_source = self._get_primary_source(config_data, config_type) + + # Use directory name as category (official/{category}/{name}.json) + # Fall back to keyword-based categorization if not in a named subdirectory + category = self._categorize_config(name, description, config_data, config_path) + + # Extract tags + tags = self._extract_tags(name, description, config_data) + + # Get file metadata + file_size = config_path.stat().st_size + last_updated = self._get_last_updated(config_path) + + # Generate download URL + download_url = f"{self.base_url}/api/download/{config_path.name}" + + # Get max_pages (for estimation) + max_pages = self._get_max_pages(config_data) + + return { + "name": name, + "description": description, + "type": config_type, + "category": category, + "tags": tags, + "primary_source": primary_source, + "max_pages": max_pages, + "file_size": file_size, + "last_updated": last_updated, + "download_url": download_url, + "config_file": config_path.name, + } + + except json.JSONDecodeError as e: + print(f"Invalid JSON in {config_path.name}: {e}") + return None + except Exception as e: + print(f"Error analyzing {config_path.name}: {e}") + return None + + def get_config_by_name(self, name: str) -> dict[str, Any] | None: + """ + Get config metadata by name + + Args: + name: Config name (e.g., "react", "django") + + Returns: + Config metadata or None if not found + """ + configs = self.analyze_all_configs() + for config in configs: + if config["name"] == name: + return config + return None + + def _determine_type(self, config_data: dict[str, Any]) -> str: + """ + Determine if config is single-source or unified + + Args: + config_data: Config JSON data + + Returns: + "single-source" or "unified" + """ + # Unified configs have "sources" array + if "sources" in config_data: + return "unified" + + # Check for merge_mode (another indicator of unified configs) + if "merge_mode" in config_data: + return "unified" + + return "single-source" + + def _get_primary_source(self, config_data: dict[str, Any], config_type: str) -> str: + """ + Get primary source URL/repo + + Args: + config_data: Config JSON data + config_type: "single-source" or "unified" + + Returns: + Primary source URL or repo name + """ + if config_type == "unified": + # Get first source + sources = config_data.get("sources", []) + if sources: + first_source = sources[0] + if first_source.get("type") == "documentation": + return first_source.get("base_url", "") + elif first_source.get("type") == "github": + return f"github.com/{first_source.get('repo', '')}" + elif first_source.get("type") == "pdf": + return first_source.get("pdf_url", "PDF file") + return "Multiple sources" + + # Single-source configs + if "base_url" in config_data: + return config_data["base_url"] + elif "repo" in config_data: + return f"github.com/{config_data['repo']}" + elif "pdf_url" in config_data or "pdf" in config_data: + return "PDF file" + + return "Unknown" + + def _categorize_config( + self, + name: str, + description: str, + config_data: dict[str, Any], + config_path: Path | None = None, + ) -> str: + """ + Categorize config using directory structure first, then keyword fallback. + + The configs_repo organizes files as official/{category}/{name}.json so the + parent directory name is the authoritative category. + + Args: + name: Config name + description: Config description + config_data: Full config data + config_path: Path to config file (used to read directory-based category) + + Returns: + Category name + """ + # Primary: use directory structure (official/{category}/{name}.json) + if config_path is not None: + parent = config_path.parent.name + # Exclude generic/root directories from being used as categories + if parent not in ("official", "community", "configs", "configs_repo", "."): + return parent + + # Fallback: keyword matching against config name + name_lower = name.lower() + for category, keywords in self.CATEGORY_MAPPING.items(): + if any(keyword in name_lower for keyword in keywords): + return category + + # Fallback: description hints + desc_lower = description.lower() + if "framework" in desc_lower or "library" in desc_lower: + if any(word in desc_lower for word in ["web", "frontend", "backend", "api"]): + return "web-frameworks" + + if "game" in desc_lower or "engine" in desc_lower: + return "game-engines" + + if "devops" in desc_lower or "deployment" in desc_lower or "infrastructure" in desc_lower: + return "devops" + + return "uncategorized" + + def _extract_tags(self, name: str, description: str, config_data: dict[str, Any]) -> list[str]: + """ + Extract relevant tags from config + + Args: + name: Config name + description: Config description + config_data: Full config data + + Returns: + List of tags + """ + tags = set() + name_lower = name.lower() + desc_lower = description.lower() + + # Check against tag keywords + for tag, keywords in self.TAG_KEYWORDS.items(): + if any(keyword in name_lower or keyword in desc_lower for keyword in keywords): + tags.add(tag) + + # Add config type as tag + config_type = self._determine_type(config_data) + if config_type == "unified": + tags.add("multi-source") + + # Add source type tags + if "base_url" in config_data or ( + config_type == "unified" + and any(s.get("type") == "documentation" for s in config_data.get("sources", [])) + ): + tags.add("documentation") + + if "repo" in config_data or ( + config_type == "unified" + and any(s.get("type") == "github" for s in config_data.get("sources", [])) + ): + tags.add("github") + + if ( + "pdf" in config_data + or "pdf_url" in config_data + or ( + config_type == "unified" + and any(s.get("type") == "pdf" for s in config_data.get("sources", [])) + ) + ): + tags.add("pdf") + + return sorted(list(tags)) + + def _get_max_pages(self, config_data: dict[str, Any]) -> int | None: + """ + Get max_pages value from config + + Args: + config_data: Config JSON data + + Returns: + max_pages value or None + """ + # Single-source configs + if "max_pages" in config_data: + return config_data["max_pages"] + + # Unified configs - get from first documentation source + if "sources" in config_data: + for source in config_data["sources"]: + if source.get("type") == "documentation" and "max_pages" in source: + return source["max_pages"] + + return None + + def _get_last_updated(self, config_path: Path) -> str: + """ + Get last updated date from git history + + Args: + config_path: Path to config file + + Returns: + ISO format date string + """ + try: + # Try to get last commit date for this file + result = subprocess.run( + ["git", "log", "-1", "--format=%cI", str(config_path)], + cwd=config_path.parent.parent, + capture_output=True, + text=True, + timeout=5, + ) + + if result.returncode == 0 and result.stdout.strip(): + return result.stdout.strip() + + except Exception: + pass + + # Fallback to file modification time + mtime = config_path.stat().st_mtime + return datetime.fromtimestamp(mtime).isoformat() diff --git a/api/main.py b/api/main.py new file mode 100644 index 0000000..433ef8a --- /dev/null +++ b/api/main.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +""" +Skill Seekers Config API +FastAPI backend for listing available skill configs +""" + +from pathlib import Path +from typing import Any + +from config_analyzer import ConfigAnalyzer +from fastapi import FastAPI, HTTPException +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse + +app = FastAPI( + title="Skill Seekers Config API", + description="API for discovering and downloading Skill Seekers configuration files", + version="1.0.0", + docs_url="/docs", + redoc_url="/redoc", +) + +# CORS middleware - allow all origins for public API +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Initialize config analyzer +# Try configs_repo first (production), fallback to configs (local development) +CONFIG_DIR = Path(__file__).parent / "configs_repo" / "official" +if not CONFIG_DIR.exists(): + CONFIG_DIR = Path(__file__).parent.parent / "configs" + +analyzer = ConfigAnalyzer(CONFIG_DIR) + + +@app.get("/") +async def root(): + """Root endpoint - API information""" + return { + "name": "Skill Seekers Config API", + "version": "1.0.0", + "endpoints": { + "/api/configs": "List all available configs", + "/api/configs/{name}": "Get specific config details", + "/api/categories": "List all categories", + "/api/download/{name}": "Download config file", + "/docs": "API documentation", + }, + "repository": "https://github.com/yusufkaraaslan/Skill_Seekers", + "configs_repository": "https://github.com/yusufkaraaslan/skill-seekers-configs", + "website": "https://api.skillseekersweb.com", + } + + +@app.get("/api/configs") +async def list_configs( + category: str | None = None, tag: str | None = None, type: str | None = None +) -> dict[str, Any]: + """ + List all available configs with metadata + + Query Parameters: + - category: Filter by category (e.g., "web-frameworks") + - tag: Filter by tag (e.g., "javascript") + - type: Filter by type ("single-source" or "unified") + + Returns: + - version: API version + - total: Total number of configs + - filters: Applied filters + - configs: List of config metadata + """ + try: + # Get all configs + all_configs = analyzer.analyze_all_configs() + + # Apply filters + configs = all_configs + filters_applied = {} + + if category: + configs = [c for c in configs if c.get("category") == category] + filters_applied["category"] = category + + if tag: + configs = [c for c in configs if tag in c.get("tags", [])] + filters_applied["tag"] = tag + + if type: + configs = [c for c in configs if c.get("type") == type] + filters_applied["type"] = type + + return { + "version": "1.0.0", + "total": len(configs), + "filters": filters_applied if filters_applied else None, + "configs": configs, + } + + except Exception as e: + raise HTTPException(status_code=500, detail=f"Error analyzing configs: {str(e)}") + + +@app.get("/api/configs/{name}") +async def get_config(name: str) -> dict[str, Any]: + """ + Get detailed information about a specific config + + Path Parameters: + - name: Config name (e.g., "react", "django") + + Returns: + - Full config metadata including all fields + """ + try: + config = analyzer.get_config_by_name(name) + + if not config: + raise HTTPException(status_code=404, detail=f"Config '{name}' not found") + + return config + + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=f"Error loading config: {str(e)}") + + +@app.get("/api/categories") +async def list_categories() -> dict[str, Any]: + """ + List all available categories with config counts + + Returns: + - categories: Dict of category names to config counts + - total_categories: Total number of categories + """ + try: + configs = analyzer.analyze_all_configs() + + # Count configs per category + category_counts = {} + for config in configs: + cat = config.get("category", "uncategorized") + category_counts[cat] = category_counts.get(cat, 0) + 1 + + return {"total_categories": len(category_counts), "categories": category_counts} + + except Exception as e: + raise HTTPException(status_code=500, detail=f"Error analyzing categories: {str(e)}") + + +@app.get("/api/download/{config_name}") +async def download_config(config_name: str): + """ + Download a specific config file + + Path Parameters: + - config_name: Config filename (e.g., "react.json", "django.json") + + Returns: + - JSON file for download + """ + try: + # Validate filename (prevent directory traversal) + if ".." in config_name or "/" in config_name or "\\" in config_name: + raise HTTPException(status_code=400, detail="Invalid config name") + + # Ensure .json extension + if not config_name.endswith(".json"): + config_name = f"{config_name}.json" + + # Search recursively in all subdirectories + config_path = None + for found_path in CONFIG_DIR.rglob(config_name): + config_path = found_path + break + + if not config_path or not config_path.exists(): + raise HTTPException(status_code=404, detail=f"Config file '{config_name}' not found") + + return FileResponse(path=config_path, media_type="application/json", filename=config_name) + + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=f"Error downloading config: {str(e)}") + + +@app.get("/health") +async def health_check(): + """Health check endpoint for monitoring""" + return {"status": "healthy", "service": "skill-seekers-api"} + + +if __name__ == "__main__": + import uvicorn + + uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/api/requirements.txt b/api/requirements.txt new file mode 100644 index 0000000..9cdcfa4 --- /dev/null +++ b/api/requirements.txt @@ -0,0 +1,3 @@ +fastapi==0.115.0 +uvicorn[standard]==0.32.0 +python-multipart==0.0.12 diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..80fd778 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,25 @@ +coverage: + status: + project: + default: + target: auto + threshold: 1% + informational: false + patch: + default: + # Patch coverage is informational only — doesn't fail CI. + # Rationale: version bumps, docs, config, and test-only commits have + # naturally low or zero patch coverage and shouldn't block releases. + informational: true + +comment: + layout: "reach, diff, flags, files" + behavior: default + require_changes: false + +# Ignore files that don't need coverage +ignore: + - "tests/**/*" + - "docs/**/*" + - "**/__init__.py" + - "src/skill_seekers/_version.py" diff --git a/configs/astrovalley_unified.json b/configs/astrovalley_unified.json new file mode 100644 index 0000000..c91824f --- /dev/null +++ b/configs/astrovalley_unified.json @@ -0,0 +1,32 @@ +{ + "name": "astrovalley", + "description": "Space farming/automation game with combat and exploration - GitHub repo with deep codebase analysis", + "version": "1.0.0", + "target": "claude", + "sources": [ + { + "type": "github", + "repo": "yusufkaraaslan/AstroValley", + "clone_path": "/mnt/1ece809a-2821-4f10-aecb-fcdf34760c0b/Git/AstroValley", + "enable_codebase_analysis": true, + "analysis_depth": "deep", + "include_issues": true, + "include_pull_requests": true, + "include_discussions": false, + "max_issues": 100, + "codebase_options": { + "build_api_reference": true, + "build_dependency_graph": true, + "detect_patterns": true, + "extract_test_examples": true, + "extract_config_patterns": true, + "detect_architecture": true + } + } + ], + "synthesis_strategy": "comprehensive", + "ai_enhancement": { + "mode": "auto", + "enable": true + } +} diff --git a/configs/blender-unified.json b/configs/blender-unified.json new file mode 100644 index 0000000..3fd86c3 --- /dev/null +++ b/configs/blender-unified.json @@ -0,0 +1,276 @@ +{ + "name": "blender", + "description": "Complete Blender 3D creation suite knowledge base combining official documentation and source code analysis. Use for comprehensive understanding of 3D modeling, animation, rendering, compositing, video editing, game development, Python scripting, and Blender's internal architecture.", + "merge_mode": "claude-enhanced", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.blender.org/manual/en/latest/", + "extract_api": true, + "selectors": { + "main_content": "article[role='main']", + "title": "h1", + "code_blocks": "pre code, div.highlight pre" + }, + "url_patterns": { + "include": [ + "/getting_started/", + "/interface/", + "/editors/", + "/modeling/", + "/sculpt_paint/", + "/grease_pencil/", + "/animation/", + "/physics/", + "/render/", + "/scene_layout/", + "/compositing/", + "/video_editing/", + "/files/", + "/addons/", + "/advanced/", + "/troubleshooting/" + ], + "exclude": [ + "/_static/", + "/_images/", + "/search.html", + "/genindex.html", + "/glossary.html", + "/index.html$" + ] + }, + "categories": { + "getting_started": [ + "getting_started", + "installing", + "configuration", + "introduction", + "quickstart", + "about" + ], + "interface": [ + "interface", + "window_system", + "keymap", + "controls", + "operators", + "tools", + "ui", + "navigation" + ], + "modeling": [ + "modeling", + "mesh", + "curve", + "surface", + "metaball", + "text", + "volume", + "geometry_nodes", + "modifiers", + "mesh_tools", + "edit_mode" + ], + "sculpting": [ + "sculpt", + "sculpting", + "brush", + "texture_paint", + "vertex_paint", + "weight_paint", + "dynamic_paint" + ], + "grease_pencil": [ + "grease_pencil", + "2d_animation", + "drawing", + "stroke" + ], + "animation": [ + "animation", + "keyframe", + "rigging", + "armature", + "constraints", + "drivers", + "shape_keys", + "motion_paths", + "timeline", + "dope_sheet", + "graph_editor", + "nla" + ], + "physics": [ + "physics", + "simulation", + "particles", + "hair", + "fluid", + "cloth", + "soft_body", + "rigid_body", + "dynamic_paint", + "force_fields" + ], + "shading": [ + "shading", + "shader", + "material", + "texture", + "nodes", + "shader_nodes", + "lighting", + "world" + ], + "rendering": [ + "render", + "eevee", + "cycles", + "workbench", + "freestyle", + "camera", + "output", + "color_management", + "optimization" + ], + "compositing": [ + "compositing", + "compositor", + "nodes", + "color_correction", + "filters", + "matte" + ], + "video_editing": [ + "video_editing", + "vse", + "sequencer", + "strips", + "effects", + "preview" + ], + "scene_layout": [ + "scene", + "object", + "collection", + "properties", + "outliner", + "view_layers" + ], + "files_assets": [ + "files", + "import", + "export", + "asset", + "library", + "data_blocks", + "linking", + "append" + ], + "addons": [ + "addon", + "plugin", + "extension", + "import_export" + ], + "scripting": [ + "scripting", + "python", + "api", + "bpy", + "operator", + "custom", + "automation" + ], + "advanced": [ + "advanced", + "command_line", + "app_templates", + "extensions", + "limits" + ], + "troubleshooting": [ + "troubleshooting", + "crash", + "recover", + "gpu", + "graphics" + ] + }, + "rate_limit": 0.5, + "max_pages": 1500 + }, + { + "type": "github", + "repo": "blender/blender", + "github_token": null, + "code_analysis_depth": "deep", + "include_code": true, + "include_issues": true, + "max_issues": 200, + "include_changelog": true, + "include_releases": true, + "include_wiki": true, + "file_patterns": [ + "source/blender/blenkernel/**/*.h", + "source/blender/blenkernel/**/*.c", + "source/blender/blenkernel/**/*.cc", + "source/blender/blenlib/**/*.h", + "source/blender/blenlib/**/*.c", + "source/blender/blenlib/**/*.cc", + "source/blender/editors/**/*.h", + "source/blender/editors/**/*.c", + "source/blender/editors/**/*.cc", + "source/blender/makesdna/**/*.h", + "source/blender/makesrna/**/*.c", + "source/blender/makesrna/**/*.cc", + "source/blender/render/**/*.h", + "source/blender/render/**/*.c", + "source/blender/render/**/*.cc", + "source/blender/python/**/*.h", + "source/blender/python/**/*.c", + "source/blender/python/**/*.cc", + "source/blender/python/**/*.py", + "source/blender/depsgraph/**/*.h", + "source/blender/depsgraph/**/*.cc", + "source/blender/draw/**/*.h", + "source/blender/draw/**/*.c", + "source/blender/draw/**/*.cc", + "source/blender/gpu/**/*.h", + "source/blender/gpu/**/*.c", + "source/blender/gpu/**/*.cc", + "source/blender/nodes/**/*.h", + "source/blender/nodes/**/*.c", + "source/blender/nodes/**/*.cc", + "source/blender/windowmanager/**/*.h", + "source/blender/windowmanager/**/*.c", + "source/blender/windowmanager/**/*.cc", + "intern/cycles/**/*.h", + "intern/cycles/**/*.cpp", + "scripts/startup/bl_ui/**/*.py", + "scripts/modules/**/*.py", + "release/scripts/startup/**/*.py", + "README.md", + "CONTRIBUTING.md", + "BUILD.md", + "CODE_OF_CONDUCT.md" + ], + "exclude_patterns": [ + "**/tests/**", + "**/__pycache__/**", + "build_files/**", + "doc/**" + ], + "analysis_features": { + "detect_patterns": true, + "extract_tests": true, + "build_guides": true, + "extract_config": true, + "build_api_reference": true, + "analyze_dependencies": true, + "detect_architecture": true + } + } + ] +} diff --git a/configs/claude-code-unified.json b/configs/claude-code-unified.json new file mode 100644 index 0000000..c792b1b --- /dev/null +++ b/configs/claude-code-unified.json @@ -0,0 +1,261 @@ +{ + "name": "claude-code-unified", + "description": "Claude Code CLI - unified knowledge base combining official documentation and leaked source code analysis. Use for understanding Claude Code internals, architecture, tools, commands, IDE integrations, MCP, plugins, skills, and development workflows.", + "merge_mode": "claude-enhanced", + "workflows": [ + "complex-merge", + "cli-tooling", + "architecture-comprehensive", + "api-documentation", + "security-focus", + "ai-assistant-internals" + ], + "workflow_vars": { + "depth": "comprehensive", + "merge_strategy": "priority", + "source_priority_order": "official_docs,code,community" + }, + "sources": [ + { + "type": "documentation", + "base_url": "https://code.claude.com/docs/en/", + "start_urls": [ + "https://code.claude.com/docs/en/overview", + "https://code.claude.com/docs/en/quickstart", + "https://code.claude.com/docs/en/common-workflows", + "https://code.claude.com/docs/en/claude-code-on-the-web", + "https://code.claude.com/docs/en/desktop", + "https://code.claude.com/docs/en/chrome", + "https://code.claude.com/docs/en/vs-code", + "https://code.claude.com/docs/en/jetbrains", + "https://code.claude.com/docs/en/github-actions", + "https://code.claude.com/docs/en/gitlab-ci-cd", + "https://code.claude.com/docs/en/slack", + "https://code.claude.com/docs/en/sub-agents", + "https://code.claude.com/docs/en/plugins", + "https://code.claude.com/docs/en/discover-plugins", + "https://code.claude.com/docs/en/skills", + "https://code.claude.com/docs/en/output-styles", + "https://code.claude.com/docs/en/hooks-guide", + "https://code.claude.com/docs/en/headless", + "https://code.claude.com/docs/en/mcp", + "https://code.claude.com/docs/en/third-party-integrations", + "https://code.claude.com/docs/en/amazon-bedrock", + "https://code.claude.com/docs/en/google-vertex-ai", + "https://code.claude.com/docs/en/microsoft-foundry", + "https://code.claude.com/docs/en/network-config", + "https://code.claude.com/docs/en/llm-gateway", + "https://code.claude.com/docs/en/devcontainer", + "https://code.claude.com/docs/en/sandboxing", + "https://code.claude.com/docs/en/setup", + "https://code.claude.com/docs/en/iam", + "https://code.claude.com/docs/en/security", + "https://code.claude.com/docs/en/data-usage", + "https://code.claude.com/docs/en/monitoring-usage", + "https://code.claude.com/docs/en/costs", + "https://code.claude.com/docs/en/analytics", + "https://code.claude.com/docs/en/plugin-marketplaces", + "https://code.claude.com/docs/en/settings", + "https://code.claude.com/docs/en/terminal-config", + "https://code.claude.com/docs/en/model-config", + "https://code.claude.com/docs/en/memory", + "https://code.claude.com/docs/en/statusline", + "https://code.claude.com/docs/en/cli-reference", + "https://code.claude.com/docs/en/interactive-mode", + "https://code.claude.com/docs/en/slash-commands", + "https://code.claude.com/docs/en/checkpointing", + "https://code.claude.com/docs/en/hooks", + "https://code.claude.com/docs/en/plugins-reference", + "https://code.claude.com/docs/en/troubleshooting", + "https://code.claude.com/docs/en/legal-and-compliance" + ], + "selectors": { + "main_content": "#content-area, #content-container, article, main", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": [ + "/docs/en/" + ], + "exclude": [ + "/docs/fr/", + "/docs/de/", + "/docs/it/", + "/docs/ja/", + "/docs/es/", + "/docs/ko/", + "/docs/zh-CN/", + "/docs/zh-TW/", + "/docs/ru/", + "/docs/id/", + "/docs/pt/", + "/changelog", + "github.com" + ] + }, + "categories": { + "getting_started": [ + "overview", + "quickstart", + "common-workflows" + ], + "ide_integrations": [ + "vs-code", + "jetbrains", + "desktop", + "chrome", + "claude-code-on-the-web", + "slack" + ], + "ci_cd": [ + "github-actions", + "gitlab-ci-cd" + ], + "building": [ + "sub-agents", + "subagent", + "plugins", + "discover-plugins", + "skills", + "output-styles", + "hooks-guide", + "headless", + "programmatic" + ], + "mcp": [ + "mcp", + "model-context-protocol" + ], + "deployment": [ + "third-party-integrations", + "amazon-bedrock", + "google-vertex-ai", + "microsoft-foundry", + "network-config", + "llm-gateway", + "devcontainer", + "sandboxing" + ], + "administration": [ + "setup", + "iam", + "security", + "data-usage", + "monitoring-usage", + "costs", + "analytics", + "plugin-marketplaces" + ], + "configuration": [ + "settings", + "terminal-config", + "model-config", + "memory", + "statusline" + ], + "reference": [ + "cli-reference", + "interactive-mode", + "slash-commands", + "checkpointing", + "hooks", + "plugins-reference" + ], + "troubleshooting": [ + "troubleshooting" + ], + "legal": [ + "legal-and-compliance" + ] + }, + "rate_limit": 0.5, + "max_pages": 250 + }, + { + "type": "local", + "path": "/Users/yusufkaraaslan/Github/cli-template", + "name": "claude-code-source", + "description": "Leaked Claude Code CLI TypeScript source code (main.tsx, tools, commands, components, Ink renderer, bridge, coordinator, plugins, skills, MCP, vim, voice, remote, server, memdir, tasks, state, schemas, entrypoints)", + "weight": 0.6, + "enhance_level": 3, + "include_code": true, + "file_patterns": [ + "*.ts", + "*.tsx", + "*.md", + "*.json" + ], + "skip_patterns": [ + ".git/", + "node_modules/", + "__pycache__/", + "*.map", + "*.js", + "dist/", + "build/" + ], + "categories": { + "core": [ + "main.tsx", + "commands.ts", + "tools.ts", + "Tool.ts", + "QueryEngine.ts", + "context.ts", + "cost-tracker.ts" + ], + "commands": [ + "commands/" + ], + "tools": [ + "tools/" + ], + "ui": [ + "components/", + "hooks/", + "screens/", + "ink/" + ], + "integrations": [ + "bridge/", + "coordinator/", + "remote/", + "server/", + "services/" + ], + "features": [ + "plugins/", + "skills/", + "vim/", + "voice/", + "tasks/", + "memdir/", + "state/", + "buddy/" + ], + "infrastructure": [ + "entrypoints/", + "migrations/", + "schemas/", + "query/", + "upstreamproxy/", + "native-ts/", + "outputStyles/", + "utils/", + "types/", + "constants/" + ] + }, + "analysis_features": { + "detect_patterns": true, + "extract_tests": true, + "build_guides": true, + "extract_config": true, + "build_api_reference": true, + "analyze_dependencies": true, + "detect_architecture": true + } + } + ] +} diff --git a/configs/claude-code.json b/configs/claude-code.json new file mode 100644 index 0000000..e042aa3 --- /dev/null +++ b/configs/claude-code.json @@ -0,0 +1,164 @@ +{ + "name": "claude-code", + "description": "Claude Code CLI and development environment. Use for Claude Code features, tools, workflows, MCP integration, plugins, hooks, configuration, deployment, and AI-assisted development.", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "_migration_note": "TODO: Migrate to external skill-seekers-configs repo. Kept temporarily to preserve PR #244 work.", + "base_url": "https://code.claude.com/docs/en/", + "start_urls": [ + "https://code.claude.com/docs/en/overview", + "https://code.claude.com/docs/en/quickstart", + "https://code.claude.com/docs/en/common-workflows", + "https://code.claude.com/docs/en/claude-code-on-the-web", + "https://code.claude.com/docs/en/desktop", + "https://code.claude.com/docs/en/chrome", + "https://code.claude.com/docs/en/vs-code", + "https://code.claude.com/docs/en/jetbrains", + "https://code.claude.com/docs/en/github-actions", + "https://code.claude.com/docs/en/gitlab-ci-cd", + "https://code.claude.com/docs/en/slack", + "https://code.claude.com/docs/en/sub-agents", + "https://code.claude.com/docs/en/plugins", + "https://code.claude.com/docs/en/discover-plugins", + "https://code.claude.com/docs/en/skills", + "https://code.claude.com/docs/en/output-styles", + "https://code.claude.com/docs/en/hooks-guide", + "https://code.claude.com/docs/en/headless", + "https://code.claude.com/docs/en/mcp", + "https://code.claude.com/docs/en/third-party-integrations", + "https://code.claude.com/docs/en/amazon-bedrock", + "https://code.claude.com/docs/en/google-vertex-ai", + "https://code.claude.com/docs/en/microsoft-foundry", + "https://code.claude.com/docs/en/network-config", + "https://code.claude.com/docs/en/llm-gateway", + "https://code.claude.com/docs/en/devcontainer", + "https://code.claude.com/docs/en/sandboxing", + "https://code.claude.com/docs/en/setup", + "https://code.claude.com/docs/en/iam", + "https://code.claude.com/docs/en/security", + "https://code.claude.com/docs/en/data-usage", + "https://code.claude.com/docs/en/monitoring-usage", + "https://code.claude.com/docs/en/costs", + "https://code.claude.com/docs/en/analytics", + "https://code.claude.com/docs/en/plugin-marketplaces", + "https://code.claude.com/docs/en/settings", + "https://code.claude.com/docs/en/terminal-config", + "https://code.claude.com/docs/en/model-config", + "https://code.claude.com/docs/en/memory", + "https://code.claude.com/docs/en/statusline", + "https://code.claude.com/docs/en/cli-reference", + "https://code.claude.com/docs/en/interactive-mode", + "https://code.claude.com/docs/en/slash-commands", + "https://code.claude.com/docs/en/checkpointing", + "https://code.claude.com/docs/en/hooks", + "https://code.claude.com/docs/en/plugins-reference", + "https://code.claude.com/docs/en/troubleshooting", + "https://code.claude.com/docs/en/legal-and-compliance" + ], + "selectors": { + "main_content": "#content-area, #content-container, article, main", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": [ + "/docs/en/" + ], + "exclude": [ + "/docs/fr/", + "/docs/de/", + "/docs/it/", + "/docs/ja/", + "/docs/es/", + "/docs/ko/", + "/docs/zh-CN/", + "/docs/zh-TW/", + "/docs/ru/", + "/docs/id/", + "/docs/pt/", + "/changelog", + "github.com" + ] + }, + "categories": { + "getting_started": [ + "overview", + "quickstart", + "common-workflows" + ], + "ide_integrations": [ + "vs-code", + "jetbrains", + "desktop", + "chrome", + "claude-code-on-the-web", + "slack" + ], + "ci_cd": [ + "github-actions", + "gitlab-ci-cd" + ], + "building": [ + "sub-agents", + "subagent", + "plugins", + "discover-plugins", + "skills", + "output-styles", + "hooks-guide", + "headless", + "programmatic" + ], + "mcp": [ + "mcp", + "model-context-protocol" + ], + "deployment": [ + "third-party-integrations", + "amazon-bedrock", + "google-vertex-ai", + "microsoft-foundry", + "network-config", + "llm-gateway", + "devcontainer", + "sandboxing" + ], + "administration": [ + "setup", + "iam", + "security", + "data-usage", + "monitoring-usage", + "costs", + "analytics", + "plugin-marketplaces" + ], + "configuration": [ + "settings", + "terminal-config", + "model-config", + "memory", + "statusline" + ], + "reference": [ + "cli-reference", + "interactive-mode", + "slash-commands", + "checkpointing", + "hooks", + "plugins-reference" + ], + "troubleshooting": [ + "troubleshooting" + ], + "legal": [ + "legal-and-compliance" + ] + }, + "rate_limit": 0.5, + "max_pages": 250 + } + ] +} \ No newline at end of file diff --git a/configs/godot.json b/configs/godot.json new file mode 100644 index 0000000..786f22b --- /dev/null +++ b/configs/godot.json @@ -0,0 +1,49 @@ +{ + "name": "godot", + "description": "Complete Godot Engine knowledge base combining official documentation and source code analysis", + "merge_mode": "claude-enhanced", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.godotengine.org/en/stable/", + "extract_api": true, + "selectors": { + "main_content": "div[role='main']", + "title": "title", + "code_blocks": "pre" + }, + "url_patterns": { + "include": [], + "exclude": ["/search.html", "/_static/", "/_images/"] + }, + "categories": { + "getting_started": ["introduction", "getting_started", "step_by_step"], + "scripting": ["scripting", "gdscript", "c_sharp"], + "2d": ["2d", "canvas", "sprite", "animation"], + "3d": ["3d", "spatial", "mesh", "shader"], + "physics": ["physics", "collision", "rigidbody"], + "api": ["api", "class", "reference", "method"] + }, + "rate_limit": 0.5, + "max_pages": 500 + }, + { + "type": "github", + "repo": "godotengine/godot", + "enable_codebase_analysis": true, + "code_analysis_depth": "deep", + "fetch_issues": true, + "max_issues": 100, + "fetch_changelog": true, + "fetch_releases": true, + "file_patterns": [ + "core/**/*.h", + "core/**/*.cpp", + "scene/**/*.h", + "scene/**/*.cpp", + "servers/**/*.h", + "servers/**/*.cpp" + ] + } + ] +} diff --git a/configs/godot_unified.json b/configs/godot_unified.json new file mode 100644 index 0000000..ab863c9 --- /dev/null +++ b/configs/godot_unified.json @@ -0,0 +1,108 @@ +{ + "name": "godot", + "description": "Godot Engine 4.x - Complete open source game engine (documentation + source code + signal flow analysis)", + "output_dir": "output/godot-unified/", + + "sources": [ + { + "type": "local", + "path": "/mnt/1ece809a-2821-4f10-aecb-fcdf34760c0b/Git/godot-docs", + "name": "documentation", + "description": "Official Godot 4.x documentation (RST + Markdown)", + "weight": 0.4, + "enhance_level": 3, + "file_patterns": ["*.rst", "*.md"], + "skip_patterns": [ + "build/", + "_build/", + ".git/", + "node_modules/", + "__pycache__/" + ], + "categories": { + "getting_started": ["getting_started", "introduction", "tutorial"], + "core_concepts": ["classes", "nodes", "scenes", "signals"], + "api": ["api", "reference", "class_reference"], + "tutorials": ["tutorials", "how_to", "examples"], + "advanced": ["advanced", "performance", "optimization"] + } + }, + { + "type": "local", + "path": "/mnt/1ece809a-2821-4f10-aecb-fcdf34760c0b/Git/godot", + "name": "source_code", + "description": "Godot Engine C++ source code + GDScript core", + "weight": 0.6, + "enhance_level": 3, + "languages": ["C++", "GDScript", "Python", "GodotShader"], + "skip_patterns": [ + ".git/", + "thirdparty/", + "tests/", + "doc/", + "misc/", + "drivers/", + "platform/android/", + "platform/ios/", + "platform/web/", + "*.obj", + "*.o", + "*.a", + "*.so" + ], + "focus_dirs": [ + "core/", + "scene/", + "servers/", + "modules/gdscript/", + "editor/" + ], + "analysis_depth": "full", + "extract_patterns": true, + "extract_tests": true, + "extract_signals": true, + "extract_config": true + } + ], + + "merge_strategy": "unified", + "conflict_resolution": "code_first", + "detect_conflicts": true, + + "analysis_features": { + "pattern_detection": true, + "test_extraction": true, + "how_to_guides": true, + "config_extraction": true, + "architecture_overview": true, + "signal_flow_analysis": true, + "api_reference": true, + "dependency_graph": true + }, + + "enhancement": { + "enabled": true, + "level": 3, + "mode": "LOCAL" + }, + + "chunking": { + "enabled": true, + "chunk_size": 1000, + "chunk_overlap": 200 + }, + + "output_formats": [ + "claude", + "markdown" + ], + + "metadata": { + "version": "4.x", + "framework": "godot", + "language": "cpp+gdscript", + "tags": ["game-engine", "godot", "cpp", "gdscript", "signals", "nodes"], + "documentation_url": "https://docs.godotengine.org/", + "repository_url": "https://github.com/godotengine/godot" + } +} diff --git a/configs/httpx_comprehensive.json b/configs/httpx_comprehensive.json new file mode 100644 index 0000000..422e944 --- /dev/null +++ b/configs/httpx_comprehensive.json @@ -0,0 +1,114 @@ +{ + "name": "httpx", + "description": "Use this skill when working with HTTPX, a fully featured HTTP client for Python 3 with sync and async APIs. HTTPX provides a familiar requests-like interface with support for HTTP/2, connection pooling, and comprehensive middleware capabilities.", + "version": "1.0.0", + "base_url": "https://www.python-httpx.org/", + "sources": [ + { + "type": "documentation", + "base_url": "https://www.python-httpx.org/", + "selectors": { + "main_content": "article.md-content__inner", + "title": "h1", + "code_blocks": "pre code" + } + }, + { + "type": "github", + "repo": "encode/httpx", + "code_analysis_depth": "deep", + "enable_codebase_analysis": true, + "fetch_issues": true, + "fetch_changelog": true, + "fetch_releases": true, + "max_issues": 50 + } + ], + "selectors": { + "main_content": "article.md-content__inner", + "title": "h1", + "code_blocks": "pre code", + "navigation": "nav.md-tabs", + "sidebar": "nav.md-nav--primary" + }, + "url_patterns": { + "include": [ + "/quickstart/", + "/advanced/", + "/api/", + "/async/", + "/http2/", + "/compatibility/" + ], + "exclude": [ + "/changelog/", + "/contributing/", + "/exceptions/" + ] + }, + "categories": { + "getting_started": [ + "quickstart", + "install", + "introduction", + "overview" + ], + "core_concepts": [ + "client", + "request", + "response", + "timeout", + "pool" + ], + "async": [ + "async", + "asyncio", + "trio", + "concurrent" + ], + "http2": [ + "http2", + "http/2", + "multiplexing" + ], + "advanced": [ + "authentication", + "middleware", + "transport", + "proxy", + "ssl", + "streaming" + ], + "api_reference": [ + "api", + "reference", + "client", + "request", + "response" + ], + "compatibility": [ + "requests", + "migration", + "compatibility" + ] + }, + "rate_limit": 0.5, + "max_pages": 100, + "metadata": { + "author": "Encode", + "language": "Python", + "framework_type": "HTTP Client", + "use_cases": [ + "Making HTTP requests", + "REST API clients", + "Async HTTP operations", + "HTTP/2 support", + "Connection pooling" + ], + "related_skills": [ + "requests", + "aiohttp", + "urllib3" + ] + } +} diff --git a/configs/medusa-mercurjs.json b/configs/medusa-mercurjs.json new file mode 100644 index 0000000..e5c31ad --- /dev/null +++ b/configs/medusa-mercurjs.json @@ -0,0 +1,71 @@ +{ + "name": "medusa-mercurjs", + "description": "Complete Medusa v2 + MercurJS multi-vendor e-commerce framework knowledge. Use when building headless commerce applications, implementing multi-vendor marketplaces, or understanding Medusa modules/workflows.", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.medusajs.com", + "llms_txt_url": "https://docs.medusajs.com/llms-full.txt", + "extract_api": true, + "selectors": { + "main_content": "main, article, .content", + "title": "h1", + "code_blocks": "pre" + }, + "url_patterns": { + "include": [ + "/learn", + "/resources" + ], + "exclude": [] + }, + "categories": { + "installation": ["installation", "install", "docker", "update"], + "fundamentals": ["fundamentals", "api-routes", "data-models", "modules", "module-links", "workflows", "events-and-subscribers", "scheduled-jobs", "custom-cli-scripts", "admin", "environment-variables"], + "customization": ["customization", "custom-features", "extend-features", "integrate-systems", "customize-admin"], + "debugging_testing": ["debugging-and-testing", "logging", "testing", "test-tools", "instrumentation", "feature-flags", "debug-workflows"], + "deployment": ["deployment", "production", "deploy", "general"], + "commerce_modules": ["commerce-modules", "product", "cart", "order", "payment", "pricing", "tax", "inventory", "fulfillment", "customer", "promotion", "auth", "region", "currency", "sales-channel", "stock-location", "api-key", "user"], + "infrastructure_modules": ["infrastructure-modules", "caching", "event", "file", "locking", "notification", "workflow-engine", "analytics"], + "storefront": ["storefront-development", "publishable-api-keys", "checkout", "products", "customers", "regions"], + "integrations": ["integrations", "sanity", "contentful", "stripe", "paypal", "shipstation", "sentry"], + "cli_tools": ["medusa-cli", "commands", "build", "develop", "plugin", "db"], + "references": ["references", "medusa-workflows", "helper-steps", "service-factory-reference", "data-model-repository-reference", "test-tools-reference", "fulfillment", "auth", "notification-provider", "file-provider", "locking-service", "caching-service"], + "recipes": ["recipes", "erp", "marketplace", "b2b", "subscriptions", "digital-products", "bundled-products"], + "admin_components": ["admin-components", "widgets", "ui-routes"], + "examples": ["examples", "guides", "how-to-tutorials", "tutorials"] + }, + "rate_limit": 0.3, + "max_pages": 500 + }, + { + "type": "documentation", + "base_url": "https://docs.mercurjs.com/", + "llms_txt_url": "https://docs.mercurjs.com/llms-full.txt", + "extract_api": true, + "selectors": { + "main_content": "main, article", + "title": "h1", + "code_blocks": "pre" + }, + "url_patterns": { + "include": ["/"], + "exclude": [] + }, + "categories": { + "quick_start": ["introduction", "get-started"], + "components": ["components", "backend", "admin-panel", "vendor-panel", "storefront"], + "core_concepts": ["core-concepts", "seller", "commission", "payouts", "order-splitting", "reviews", "requests", "notifications", "marketplace-settings"], + "product": ["product", "core-commerce-modules", "core-infrastructure-modules", "framework"], + "integrations": ["integrations", "algolia", "resend", "stripe"], + "api_admin": ["api-reference/admin", "admin-algolia", "admin-api-keys", "admin-attributes", "admin-auth", "admin-campaigns", "admin-claims", "admin-collections", "admin-commission", "admin-currencies", "admin-customers", "admin-draft-orders", "admin-exchanges", "admin-fulfillment", "admin-inventory", "admin-invites", "admin-notifications", "admin-orders", "admin-payments", "admin-price-lists", "admin-products", "admin-promotions", "admin-regions", "admin-reservations", "admin-returns", "admin-sales-channels", "admin-sellers", "admin-shipping", "admin-stock-locations", "admin-stores", "admin-tax", "admin-uploads", "admin-users"], + "api_store": ["api-reference/store", "store-auth", "store-carts", "store-collections", "store-currencies", "store-customers", "store-fulfillment", "store-orders", "store-payment", "store-products", "store-regions", "store-returns"], + "api_vendor": ["api-reference/vendor", "vendor-auth", "vendor-fulfillment", "vendor-inventory", "vendor-orders", "vendor-payouts", "vendor-products", "vendor-returns", "vendor-sellers", "vendor-shipping", "vendor-stock-locations", "vendor-uploads"], + "help": ["help", "llm", "mcp", "support"] + }, + "rate_limit": 0.3, + "max_pages": 300 + } + ] +} diff --git a/configs/react.json b/configs/react.json new file mode 100644 index 0000000..42edb52 --- /dev/null +++ b/configs/react.json @@ -0,0 +1,69 @@ +{ + "name": "react", + "description": "Complete React knowledge base combining official documentation and React codebase insights. Use when working with React, understanding API changes, or debugging React internals.", + "version": "1.1.0", + "merge_mode": "rule-based", + "sources": [ + { + "type": "documentation", + "base_url": "https://react.dev/", + "extract_api": true, + "selectors": { + "main_content": "article", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": [], + "exclude": [ + "/blog/", + "/community/" + ] + }, + "categories": { + "getting_started": [ + "learn", + "installation", + "quick-start" + ], + "components": [ + "components", + "props", + "state" + ], + "hooks": [ + "hooks", + "usestate", + "useeffect", + "usecontext" + ], + "api": [ + "api", + "reference" + ], + "advanced": [ + "context", + "refs", + "portals", + "suspense" + ] + }, + "rate_limit": 0.5 + }, + { + "type": "github", + "repo": "facebook/react", + "enable_codebase_analysis": true, + "code_analysis_depth": "deep", + "fetch_issues": true, + "max_issues": 100, + "fetch_changelog": true, + "fetch_releases": true, + "file_patterns": [ + "packages/react/src/**/*.js", + "packages/react-dom/src/**/*.js" + ] + } + ], + "base_url": "https://react.dev/" +} \ No newline at end of file diff --git a/configs/unity-addressables.json b/configs/unity-addressables.json new file mode 100644 index 0000000..9b4bce7 --- /dev/null +++ b/configs/unity-addressables.json @@ -0,0 +1,125 @@ +{ + "name": "unity-addressables", + "description": "Unity Addressables asset management system - Use when implementing asset loading, remote content delivery, asset bundles, memory management, or dynamic asset loading in Unity projects.", + "version": "1.0.0", + "merge_mode": "claude-enhanced", + "base_url": "https://docs.unity3d.com/Packages/com.unity.addressables@2.3/manual/index.html", + "sources": [ + { + "type": "documentation", + "base_url": "https://docs.unity3d.com/Packages/com.unity.addressables@2.3/manual/index.html", + "browser": true, + "extract_api": true, + "selectors": { + "main_content": ".content-wrap, .section, article, main", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": [ + "com.unity.addressables" + ], + "exclude": [ + "/changelog/", + "/license/" + ] + }, + "categories": { + "getting_started": [ + "index", + "getting-started", + "installation", + "quickstart", + "AddressableAssetsGettingStarted" + ], + "concepts": [ + "AddressableAssetsDevelopmentCycle", + "AddressableAssetsOverview", + "asset-references", + "labels", + "groups", + "profiles" + ], + "loading": [ + "load-assets", + "LoadingAddressableAssets", + "MemoryManagement", + "AsyncOperationHandle", + "UnloadingAddressableAssets", + "synchronous-addressables" + ], + "api": [ + "api", + "reference", + "Addressables", + "AddressablesAPI" + ], + "building": [ + "Builds", + "BuildLayoutReport", + "ContentUpdateWorkflow", + "AddressableAssetSettings", + "build-scripting" + ], + "advanced": [ + "remote-content-distribution", + "content-catalogs", + "diagnostic-tools", + "CustomOperations", + "TransformInternalId", + "ccd" + ] + }, + "rate_limit": 0.5 + }, + { + "type": "github", + "repo": "Unity-Technologies/Addressables-Sample", + "include_code": true, + "language": "C#", + "enable_codebase_analysis": true, + "code_analysis_depth": "deep", + "fetch_issues": false, + "fetch_changelog": false, + "fetch_releases": false, + "file_patterns": [ + "**/*.cs" + ] + } + ], + "analysis_features": { + "pattern_detection": true, + "test_extraction": true, + "how_to_guides": true, + "config_extraction": true, + "architecture_overview": true, + "api_reference": true, + "dependency_graph": true + }, + + "enhancement": { + "enabled": true, + "level": 3, + "mode": "LOCAL" + }, + + "chunking": { + "enabled": true, + "chunk_size": 1000, + "chunk_overlap": 200 + }, + + "output_formats": [ + "claude", + "markdown" + ], + + "metadata": { + "version": "2.3", + "framework": "unity", + "language": "csharp", + "tags": ["unity", "addressables", "asset-management", "asset-bundles", "content-delivery", "csharp"], + "documentation_url": "https://docs.unity3d.com/Packages/com.unity.addressables@latest/", + "repository_url": "https://github.com/Unity-Technologies/Addressables-Sample" + } +} diff --git a/configs/unity-dotween.json b/configs/unity-dotween.json new file mode 100644 index 0000000..58a15c9 --- /dev/null +++ b/configs/unity-dotween.json @@ -0,0 +1,128 @@ +{ + "name": "dotween", + "description": "DOTween (HOTween v2) animation engine for Unity - Use when implementing tweening animations, sequences, easing, UI animations, or any programmatic animation in Unity C# projects.", + "version": "1.0.0", + "merge_mode": "claude-enhanced", + "base_url": "https://dotween.demigiant.com/documentation.php", + "sources": [ + { + "type": "documentation", + "base_url": "https://dotween.demigiant.com/documentation.php", + "extract_api": true, + "selectors": { + "main_content": "#content, .documentation, article, main", + "title": "h1, h2", + "code_blocks": "pre code, .code" + }, + "url_patterns": { + "include": [ + "/documentation", + "/getstarted", + "/pro", + "/support" + ], + "exclude": [ + "/download", + "/credits" + ] + }, + "categories": { + "getting_started": [ + "getstarted", + "setup", + "installation", + "initialization" + ], + "core_api": [ + "DOTween", + "Tweener", + "Sequence", + "Tween", + "TweenParams", + "DOVirtual" + ], + "shortcuts": [ + "shortcuts", + "transform", + "material", + "rigidbody", + "camera", + "audio", + "light", + "spriterenderer" + ], + "easing": [ + "ease", + "easing", + "animationcurve", + "custom-ease" + ], + "sequences": [ + "sequence", + "append", + "insert", + "join", + "prepend", + "callbacks" + ], + "advanced": [ + "paths", + "blendable", + "DOTweenAnimation", + "DOTweenVisualManager", + "pro" + ] + }, + "rate_limit": 1.0 + }, + { + "type": "github", + "repo": "Demigiant/dotween", + "include_code": true, + "language": "C#", + "enable_codebase_analysis": true, + "code_analysis_depth": "deep", + "fetch_issues": true, + "max_issues": 50, + "fetch_changelog": false, + "fetch_releases": true + } + ], + "analysis_features": { + "pattern_detection": true, + "test_extraction": true, + "how_to_guides": true, + "config_extraction": true, + "architecture_overview": true, + "api_reference": true, + "dependency_graph": true + }, + + "enhancement": { + "enabled": true, + "level": 3, + "mode": "LOCAL", + "agent": "kimi", + "timeout": "unlimited" + }, + + "chunking": { + "enabled": true, + "chunk_size": 1000, + "chunk_overlap": 200 + }, + + "output_formats": [ + "claude", + "markdown" + ], + + "metadata": { + "version": "1.2", + "framework": "unity", + "language": "csharp", + "tags": ["unity", "dotween", "tweening", "animation", "easing", "csharp"], + "documentation_url": "https://dotween.demigiant.com/documentation.php", + "repository_url": "https://github.com/Demigiant/dotween" + } +} diff --git a/configs/unity-spine.json b/configs/unity-spine.json new file mode 100644 index 0000000..c598e42 --- /dev/null +++ b/configs/unity-spine.json @@ -0,0 +1,136 @@ +{ + "name": "spine-unity", + "description": "Spine 2D skeletal animation runtime for Unity - Use when implementing Spine animations, SkeletonAnimation components, skin management, or spine-unity integration in Unity projects.", + "version": "1.0.0", + "merge_mode": "claude-enhanced", + "base_url": "http://en.esotericsoftware.com/spine-unity", + "sources": [ + { + "type": "documentation", + "base_url": "http://en.esotericsoftware.com/spine-unity", + "extract_api": true, + "selectors": { + "main_content": "#wiki_page_content, .wiki-content, article, main", + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": [ + "/spine-unity", + "/spine-runtime", + "/spine-api", + "/spine-applying-animations", + "/spine-attachments", + "/spine-events", + "/spine-skeleton", + "/spine-skins", + "/spine-slots" + ], + "exclude": [ + "/spine-corona", + "/spine-cocos2d", + "/spine-godot", + "/spine-unreal", + "/spine-flutter", + "/spine-sfml", + "/spine-monogame", + "/spine-love", + "/spine-haxe", + "/spine-ts", + "/spine-phaser", + "/spine-pixi", + "/spine-lwjgl", + "/spine-libgdx", + "/spine-changelog" + ] + }, + "categories": { + "getting_started": [ + "Installation", + "Download", + "Assets", + "Runtime Documentation", + "FAQ" + ], + "components": [ + "Main Components", + "Utility Components", + "SkeletonAnimation", + "SkeletonGraphic", + "SkeletonMecanim", + "BoneFollower" + ], + "animation": [ + "Events", + "AnimationState", + "callback", + "Timeline", + "Examples" + ], + "rendering": [ + "Rendering", + "shader", + "material" + ], + "advanced": [ + "On-Demand Loading", + "UPM", + "Packages" + ] + }, + "rate_limit": 1.0 + }, + { + "type": "github", + "repo": "EsotericSoftware/spine-runtimes", + "include_code": true, + "language": "C#", + "enable_codebase_analysis": true, + "code_analysis_depth": "deep", + "fetch_issues": true, + "max_issues": 50, + "fetch_changelog": true, + "fetch_releases": true, + "file_patterns": [ + "spine-unity/Assets/Spine/**/*.cs", + "spine-unity/Assets/Spine Examples/**/*.cs", + "spine-csharp/src/**/*.cs" + ] + } + ], + "analysis_features": { + "pattern_detection": true, + "test_extraction": true, + "how_to_guides": true, + "config_extraction": true, + "architecture_overview": true, + "api_reference": true, + "dependency_graph": true + }, + + "enhancement": { + "enabled": true, + "level": 3, + "mode": "LOCAL" + }, + + "chunking": { + "enabled": true, + "chunk_size": 1000, + "chunk_overlap": 200 + }, + + "output_formats": [ + "claude", + "markdown" + ], + + "metadata": { + "version": "4.2", + "framework": "unity", + "language": "csharp", + "tags": ["unity", "spine", "2d-animation", "skeletal-animation", "csharp"], + "documentation_url": "http://en.esotericsoftware.com/spine-unity", + "repository_url": "https://github.com/EsotericSoftware/spine-runtimes" + } +} diff --git a/distribution/claude-plugin/.claude-plugin/plugin.json b/distribution/claude-plugin/.claude-plugin/plugin.json new file mode 100644 index 0000000..1b3ed69 --- /dev/null +++ b/distribution/claude-plugin/.claude-plugin/plugin.json @@ -0,0 +1,11 @@ +{ + "name": "skill-seekers", + "description": "Transform 17 source types (docs, GitHub, PDFs, videos, Jupyter, Confluence, Notion, Slack, and more) into AI-ready skills and RAG knowledge for 16+ LLM platforms.", + "version": "3.3.0", + "author": { + "name": "Yusuf Karaaslan" + }, + "homepage": "https://github.com/yusufkaraaslan/Skill_Seekers", + "repository": "https://github.com/yusufkaraaslan/Skill_Seekers", + "license": "MIT" +} diff --git a/distribution/claude-plugin/.mcp.json b/distribution/claude-plugin/.mcp.json new file mode 100644 index 0000000..c0fa9c9 --- /dev/null +++ b/distribution/claude-plugin/.mcp.json @@ -0,0 +1,6 @@ +{ + "skill-seekers": { + "command": "python", + "args": ["-m", "skill_seekers.mcp.server_fastmcp"] + } +} diff --git a/distribution/claude-plugin/README.md b/distribution/claude-plugin/README.md new file mode 100644 index 0000000..7366172 --- /dev/null +++ b/distribution/claude-plugin/README.md @@ -0,0 +1,93 @@ +# Skill Seekers — Claude Code Plugin + +Transform 18 source types into AI-ready skills and RAG knowledge, directly from Claude Code. + +## Installation + +### From the Official Plugin Directory + +``` +/plugin install skill-seekers@claude-plugin-directory +``` + +Or browse for it in `/plugin > Discover`. + +### Local Installation (for development) + +```bash +claude --plugin-dir ./path/to/skill-seekers-plugin +``` + +### Prerequisites + +The plugin requires `skill-seekers` to be installed: + +```bash +pip install skill-seekers[mcp] +``` + +## What's Included + +### MCP Server (40 tools) + +The plugin bundles the Skill Seekers MCP server providing tools for: +- Scraping documentation, GitHub repos, PDFs, videos, and 13 other source types +- Packaging skills for 21+ LLM platforms +- Exporting to vector databases (Weaviate, Chroma, FAISS, Qdrant) +- Managing configs, workflows, and sources + +### Slash Commands + +| Command | Description | +|---------|-------------| +| `/skill-seekers:create-skill ` | Create a skill from any source (auto-detects type) | +| `/skill-seekers:sync-config ` | Sync config URLs against live docs | +| `/skill-seekers:install-skill ` | End-to-end: fetch, scrape, enhance, package, install | + +### Agent Skill + +The **skill-builder** skill is automatically available to Claude. It detects source types and uses the appropriate MCP tools to build skills autonomously. + +## Usage Examples + +``` +# Create a skill from a documentation site +/skill-seekers:create-skill https://react.dev + +# Create from a GitHub repo, targeting LangChain +/skill-seekers:create-skill pallets/flask --target langchain + +# Full install workflow with AI enhancement +/skill-seekers:install-skill https://fastapi.tiangolo.com --enhance + +# Sync an existing config +/skill-seekers:sync-config react +``` + +Or just ask Claude naturally: +> "Create an AI skill from the React documentation" +> "Scrape the Flask GitHub repo and package it for OpenAI" +> "Export my skill to a Chroma vector database" + +The skill-builder agent skill will automatically detect the intent and use the right tools. + +## Remote MCP Alternative + +By default, the plugin runs the MCP server locally via `python -m skill_seekers.mcp.server_fastmcp`. To use a remote server instead, edit `.mcp.json`: + +```json +{ + "skill-seekers": { + "type": "http", + "url": "https://your-hosted-server.com/mcp" + } +} +``` + +## Supported Source Types + +Documentation (web), GitHub repos, PDFs, Word docs, EPUBs, videos, local codebases, Jupyter notebooks, HTML files, OpenAPI specs, AsciiDoc, PowerPoint, RSS/Atom feeds, man pages, Confluence, Notion, Slack/Discord exports. + +## License + +MIT — https://github.com/yusufkaraaslan/Skill_Seekers diff --git a/distribution/claude-plugin/commands/create-skill.md b/distribution/claude-plugin/commands/create-skill.md new file mode 100644 index 0000000..6130871 --- /dev/null +++ b/distribution/claude-plugin/commands/create-skill.md @@ -0,0 +1,62 @@ +--- +description: Create an AI skill from any source (URL, repo, PDF, video, notebook, etc.) +--- + +# Create Skill + +Create an AI-ready skill from a source. The source type is auto-detected. + +## Usage + +``` +/skill-seekers:create-skill [--preset ] [--output ] +``` + +## Instructions + +When the user provides a source via `$ARGUMENTS`, run the `skill-seekers create` command to generate a skill. + +1. Parse the arguments: extract the source (first argument) and any flags. +2. If no `--preset` is specified, default to `quick` for fast results. +3. If no `--output` is specified, default to `./output`. +4. Run the create command: + ```bash + skill-seekers create "$SOURCE" --preset quick --output "$OUTPUT" + ``` +5. After completion, read the generated `SKILL.md` and summarize what was created. +6. If the user wants to target a specific platform (e.g., Claude, OpenAI, LangChain), run the package command after: + ```bash + skill-seekers package "$SKILL_DIR" --target "$PLATFORM" + ``` + +## Presets + +- `-p quick` — 1-2 minutes, basic skill +- `-p standard` — 5-10 minutes, good coverage +- `-p comprehensive` — 20-60 minutes, full analysis + +## Source Types (auto-detected) + +- **URL** (https://...) — Documentation scraping +- **owner/repo** or github.com URL — GitHub repo analysis +- **file.pdf** — PDF extraction +- **file.ipynb** — Jupyter notebook +- **file.docx** — Word document +- **file.epub** — EPUB book +- **YouTube/Vimeo URL** — Video transcript +- **./directory** — Local codebase analysis +- **file.yaml** with OpenAPI — API spec +- **file.pptx** — PowerPoint +- **file.adoc** — AsciiDoc +- **file.html** — HTML page +- **file.rss** — RSS/Atom feed +- **cmd.1** — Man page + +## Examples + +``` +/skill-seekers:create-skill https://react.dev +/skill-seekers:create-skill pallets/flask -p standard +/skill-seekers:create-skill ./docs/api.pdf +/skill-seekers:create-skill https://youtube.com/watch?v=abc123 +``` diff --git a/distribution/claude-plugin/commands/install-skill.md b/distribution/claude-plugin/commands/install-skill.md new file mode 100644 index 0000000..c857ba5 --- /dev/null +++ b/distribution/claude-plugin/commands/install-skill.md @@ -0,0 +1,43 @@ +--- +description: One-command skill creation and packaging for a target platform +--- + +# Install Skill + +End-to-end workflow: create a skill from any source, then package it for a target LLM platform. + +## Usage + +``` +/skill-seekers:install-skill [--target ] [--preset ] +``` + +## Instructions + +When the user provides a source via `$ARGUMENTS`: + +1. Parse the arguments: extract source, `--target` (default: claude), `--preset` (default: quick). +2. Run the create command: + ```bash + skill-seekers create "$SOURCE" --preset "$PRESET" --output ./output + ``` +3. Find the generated skill directory (look for the directory containing SKILL.md in ./output/). +4. Run the package command for the target platform: + ```bash + skill-seekers package "$SKILL_DIR" --target "$TARGET" + ``` +5. Report what was created and where to find the packaged output. + +## Target Platforms + +`claude` (default), `openai`, `gemini`, `langchain`, `llama-index`, `haystack`, `markdown`, `chroma`, `weaviate`, `faiss`, `qdrant`, `pinecone`, `deepseek`, `kimi`, `qwen`, `fireworks`, `openrouter`, `together`, `minimax`, `opencode`, `ibm-bob` + +> **IDE-specific installs** (`cursor`, `windsurf`, `continue`, `cline`) are not standalone `--target` values. Use `skill-seekers install-agent` or manually copy the output from `--target markdown` or `--target claude`. + +## Examples + +``` +/skill-seekers:install-skill https://react.dev --target claude +/skill-seekers:install-skill pallets/flask --target langchain -p standard +/skill-seekers:install-skill ./docs/api.pdf --target openai +``` diff --git a/distribution/claude-plugin/commands/sync-config.md b/distribution/claude-plugin/commands/sync-config.md new file mode 100644 index 0000000..273bd15 --- /dev/null +++ b/distribution/claude-plugin/commands/sync-config.md @@ -0,0 +1,32 @@ +--- +description: Sync a scraping config's URLs against the live documentation site +--- + +# Sync Config + +Synchronize a Skill Seekers config file with the current state of a documentation site. Detects new pages, removed pages, and URL changes. + +## Usage + +``` +/skill-seekers:sync-config +``` + +## Instructions + +When the user provides a config path or preset name via `$ARGUMENTS`: + +1. If it's a preset name (e.g., `react`, `godot`), look for it in the `configs/` directory or fetch from the API. +2. Run the sync command: + ```bash + skill-seekers sync-config "$CONFIG" + ``` +3. Report what changed: new URLs found, removed URLs, and any conflicts. +4. Ask the user if they want to update the config and re-scrape. + +## Examples + +``` +/skill-seekers:sync-config configs/react.json +/skill-seekers:sync-config react +``` diff --git a/distribution/claude-plugin/skills/skill-builder/SKILL.md b/distribution/claude-plugin/skills/skill-builder/SKILL.md new file mode 100644 index 0000000..71b11d5 --- /dev/null +++ b/distribution/claude-plugin/skills/skill-builder/SKILL.md @@ -0,0 +1,69 @@ +--- +name: skill-builder +description: Automatically detect source types and build AI skills using Skill Seekers. Use when the user wants to create skills from documentation, repos, PDFs, videos, or other knowledge sources. +--- + +# Skill Builder + +You have access to the Skill Seekers MCP server which provides 40 tools for converting knowledge sources into AI-ready skills. + +## When to Use This Skill + +Use this skill when the user: +- Wants to create an AI skill from a documentation site, GitHub repo, PDF, video, or other source +- Needs to convert documentation into a format suitable for LLM consumption +- Wants to update or sync existing skills with their source documentation +- Needs to export skills to vector databases (Weaviate, Chroma, FAISS, Qdrant) +- Asks about scraping, converting, or packaging documentation for AI + +## Source Type Detection + +Automatically detect the source type from user input: + +| Input Pattern | Source Type | Tool to Use | +|---------------|-------------|-------------| +| `https://...` (not GitHub/YouTube) | Documentation | `scrape_docs` | +| `owner/repo` or `github.com/...` | GitHub | `scrape_github` | +| `*.pdf` | PDF | `scrape_pdf` | +| YouTube/Vimeo URL or video file | Video | `scrape_video` | +| Local directory path | Codebase | `scrape_codebase` | +| `*.ipynb`, `*.html`, `*.yaml` (OpenAPI), `*.adoc`, `*.pptx`, `*.rss`, `*.1`-`.8` | Various | `scrape_generic` | +| JSON config file | Unified | Use config with `scrape_docs` | + +## Recommended Workflow + +1. **Detect source type** from the user's input +2. **Generate or fetch config** using `generate_config` or `fetch_config` if needed +3. **Estimate scope** with `estimate_pages` for documentation sites +4. **Scrape the source** using the appropriate scraping tool +5. **Enhance** with `enhance_skill` if the user wants AI-powered improvements +6. **Package** with `package_skill` for the target platform +7. **Export to vector DB** if requested using `export_to_*` tools + +## Available MCP Tools + +### Config Management +- `generate_config` — Generate a scraping config from a URL +- `list_configs` — List available preset configs +- `validate_config` — Validate a config file + +### Scraping (use based on source type) +- `scrape_docs` — Documentation sites +- `scrape_github` — GitHub repositories +- `scrape_pdf` — PDF files +- `scrape_video` — Video transcripts +- `scrape_codebase` — Local code analysis +- `scrape_generic` — Jupyter, HTML, OpenAPI, AsciiDoc, PPTX, RSS, manpage, Confluence, Notion, chat + +### Post-processing +- `enhance_skill` — AI-powered skill enhancement +- `package_skill` — Package for target platform +- `upload_skill` — Upload to platform API +- `install_skill` — End-to-end install workflow + +### Advanced +- `detect_patterns` — Design pattern detection in code +- `extract_test_examples` — Extract usage examples from tests +- `build_how_to_guides` — Generate how-to guides from tests +- `split_config` — Split large configs into focused skills +- `export_to_weaviate`, `export_to_chroma`, `export_to_faiss`, `export_to_qdrant` — Vector DB export diff --git a/distribution/github-action/README.md b/distribution/github-action/README.md new file mode 100644 index 0000000..6e942bd --- /dev/null +++ b/distribution/github-action/README.md @@ -0,0 +1,147 @@ +# Skill Seekers GitHub Action + +Transform documentation, GitHub repos, PDFs, videos, and 13 other source types into AI-ready skills and RAG knowledge — directly in your CI/CD pipeline. + +## Quick Start + +```yaml +- uses: yusufkaraaslan/skill-seekers-action@v3 + with: + source: 'https://react.dev' +``` + +## Inputs + +| Input | Required | Default | Description | +|-------|----------|---------|-------------| +| `source` | Yes | — | Source URL, file path, or `owner/repo` | +| `command` | No | `create` | Command: `create`, `scan`, `doctor`, `enhance`, `enhance-status`, `package`, `upload`, `install`, `install-agent`, `estimate`, `extract-test-examples`, `resume`, `quality`, `config`, `workflows`, `sync-config`, `stream`, `update`, `multilang` | +| `target` | No | `claude` | Target platform: `claude`, `openai`, `gemini`, `langchain`, `llama-index`, `markdown` | +| `config` | No | — | Path to JSON config file | +| `output-dir` | No | `output` | Output directory | +| `extra-args` | No | — | Additional CLI arguments | + +## Outputs + +| Output | Description | +|--------|-------------| +| `skill-dir` | Path to the generated skill directory | +| `skill-name` | Name of the generated skill | + +## Examples + +### Auto-update documentation skill weekly + +```yaml +name: Update AI Skills +on: + schedule: + - cron: '0 6 * * 1' # Every Monday 6am UTC + workflow_dispatch: + +jobs: + update-skills: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: yusufkaraaslan/skill-seekers-action@v3 + with: + source: 'https://react.dev' + target: 'langchain' + + - uses: actions/upload-artifact@v4 + with: + name: react-skill + path: output/ +``` + +### Generate skill from GitHub repo + +```yaml +- uses: yusufkaraaslan/skill-seekers-action@v3 + with: + source: 'pallets/flask' + command: 'create' + target: 'claude' +``` + +### Process PDF documentation + +```yaml +- uses: actions/checkout@v4 + +- uses: yusufkaraaslan/skill-seekers-action@v3 + with: + source: 'docs/api-reference.pdf' + command: 'create' +``` + +### Unified multi-source build with config + +```yaml +- uses: actions/checkout@v4 + +- uses: yusufkaraaslan/skill-seekers-action@v3 + with: + config: 'configs/my-project.json' + command: 'create' + target: 'openai' +``` + +### Commit generated skill back to repo + +```yaml +- uses: actions/checkout@v4 + +- uses: yusufkaraaslan/skill-seekers-action@v3 + id: generate + with: + source: 'https://fastapi.tiangolo.com' + +- name: Commit skill + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add output/ + git diff --staged --quiet || git commit -m "Update AI skill: ${{ steps.generate.outputs.skill-name }}" + git push +``` + +## Environment Variables + +Pass API keys as environment variables for AI-enhanced skills: + +```yaml +env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +``` + +## Supported Source Types + +| Type | Example Source | +|------|---------------| +| Documentation (web) | `https://react.dev` | +| GitHub repo | `pallets/flask` or `https://github.com/pallets/flask` | +| PDF | `docs/manual.pdf` | +| Video | `https://youtube.com/watch?v=...` | +| Local codebase | `./src` | +| Jupyter Notebook | `analysis.ipynb` | +| OpenAPI/Swagger | `openapi.yaml` | +| Word (.docx) | `docs/guide.docx` | +| EPUB | `book.epub` | +| PowerPoint | `slides.pptx` | +| AsciiDoc | `docs/guide.adoc` | +| HTML | `page.html` | +| RSS/Atom | `feed.rss` | +| Man pages | `tool.1` | +| Confluence | Via config file | +| Notion | Via config file | +| Chat (Slack/Discord) | Via config file | + +## License + +MIT diff --git a/distribution/github-action/action.yml b/distribution/github-action/action.yml new file mode 100644 index 0000000..529ff7c --- /dev/null +++ b/distribution/github-action/action.yml @@ -0,0 +1,92 @@ +name: 'Skill Seekers - AI Knowledge Builder' +description: 'Transform documentation, repos, PDFs, videos, and 13 other source types into AI skills and RAG knowledge' +author: 'Yusuf Karaaslan' + +branding: + icon: 'book-open' + color: 'blue' + +inputs: + source: + description: 'Source URL, file path, or owner/repo for GitHub repos' + required: true + command: + description: 'Command to run: create (auto-detect), scrape, github, pdf, video, analyze, unified' + required: false + default: 'create' + target: + description: 'Output target platform: claude, openai, gemini, langchain, llama-index, markdown, cursor, windsurf' + required: false + default: 'claude' + config: + description: 'Path to JSON config file (for unified/advanced scraping)' + required: false + output-dir: + description: 'Output directory for generated skills' + required: false + default: 'output' + extra-args: + description: 'Additional CLI arguments to pass to skill-seekers' + required: false + default: '' + +outputs: + skill-dir: + description: 'Path to the generated skill directory' + value: ${{ steps.run.outputs.skill-dir }} + skill-name: + description: 'Name of the generated skill' + value: ${{ steps.run.outputs.skill-name }} + +runs: + using: 'composite' + steps: + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install Skill Seekers + shell: bash + run: pip install skill-seekers + + - name: Run Skill Seekers + id: run + shell: bash + env: + ANTHROPIC_API_KEY: ${{ env.ANTHROPIC_API_KEY }} + OPENAI_API_KEY: ${{ env.OPENAI_API_KEY }} + GOOGLE_API_KEY: ${{ env.GOOGLE_API_KEY }} + GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }} + run: | + set -euo pipefail + + OUTPUT_DIR="${{ inputs.output-dir }}" + mkdir -p "$OUTPUT_DIR" + + CMD="${{ inputs.command }}" + SOURCE="${{ inputs.source }}" + TARGET="${{ inputs.target }}" + CONFIG="${{ inputs.config }}" + EXTRA="${{ inputs.extra-args }}" + + # Build the command + if [ "$CMD" = "create" ]; then + skill-seekers create "$SOURCE" --target "$TARGET" --output "$OUTPUT_DIR" $EXTRA + elif [ -n "$CONFIG" ]; then + skill-seekers "$CMD" --config "$CONFIG" --target "$TARGET" --output "$OUTPUT_DIR" $EXTRA + else + skill-seekers "$CMD" "$SOURCE" --target "$TARGET" --output "$OUTPUT_DIR" $EXTRA + fi + + # Find the generated skill directory + SKILL_DIR=$(find "$OUTPUT_DIR" -name "SKILL.md" -exec dirname {} \; | head -1) + SKILL_NAME=$(basename "$SKILL_DIR" 2>/dev/null || echo "unknown") + + echo "skill-dir=$SKILL_DIR" >> "$GITHUB_OUTPUT" + echo "skill-name=$SKILL_NAME" >> "$GITHUB_OUTPUT" + + echo "### Skill Generated" >> "$GITHUB_STEP_SUMMARY" + echo "- **Name:** $SKILL_NAME" >> "$GITHUB_STEP_SUMMARY" + echo "- **Directory:** $SKILL_DIR" >> "$GITHUB_STEP_SUMMARY" + echo "- **Target:** $TARGET" >> "$GITHUB_STEP_SUMMARY" diff --git a/distribution/smithery/README.md b/distribution/smithery/README.md new file mode 100644 index 0000000..93a6f39 --- /dev/null +++ b/distribution/smithery/README.md @@ -0,0 +1,109 @@ +# Skill Seekers — Smithery MCP Registry + +Publishing guide for the Skill Seekers MCP server on [Smithery](https://smithery.ai). + +## Status + +- **Namespace created:** `yusufkaraaslan` +- **Server created:** `yusufkaraaslan/skill-seekers` +- **Server page:** https://smithery.ai/servers/yusufkaraaslan/skill-seekers +- **Release status:** Needs re-publish (initial release failed — Smithery couldn't scan GitHub URL as MCP endpoint) + +## Publishing + +Smithery requires a live, scannable MCP HTTP endpoint for URL-based publishing. Two options: + +### Option A: Publish via Web UI (Recommended) + +1. Go to https://smithery.ai/servers/yusufkaraaslan/skill-seekers/releases +2. The server already exists — create a new release +3. For the "Local" tab: follow the prompts to publish as a stdio server +4. For the "URL" tab: provide a hosted HTTP endpoint URL + +### Option B: Deploy HTTP endpoint first, then publish via CLI + +1. Deploy the MCP server on Render/Railway/Fly.io: + ```bash + # Using existing Dockerfile.mcp + docker build -f Dockerfile.mcp -t skill-seekers-mcp . + # Deploy to your hosting provider + ``` +2. Publish the live URL: + ```bash + npx @smithery/cli@latest auth login + npx @smithery/cli@latest mcp publish "https://your-deployed-url/mcp" \ + -n yusufkaraaslan/skill-seekers + ``` + +### CLI Authentication (already done) + +```bash +# Install via npx (no global install needed) +npx @smithery/cli@latest auth login +npx @smithery/cli@latest namespace show # Should show: yusufkaraaslan +``` + +### After Publishing + +Update the server page with metadata: + +**Display name:** Skill Seekers — AI Skill & RAG Toolkit + +**Description:** +> Transform 18 source types into AI-ready skills and RAG knowledge. Ingest documentation sites, GitHub repos, PDFs, Jupyter notebooks, videos, Confluence, Notion, Slack/Discord exports, and more. Package for 21+ LLM platforms including Claude, GPT, Gemini, LangChain, LlamaIndex, and vector databases. + +**Tags:** `ai`, `rag`, `documentation`, `skills`, `preprocessing`, `mcp`, `knowledge-base`, `vector-database` + +## User Installation + +Once published, users can add the server to their MCP client: + +```bash +# Via Smithery CLI (adds to Claude Desktop, Cursor, etc.) +smithery mcp add yusufkaraaslan/skill-seekers --client claude + +# Or configure manually — users need skill-seekers installed: +pip install skill-seekers[mcp] +``` + +### Manual MCP Configuration + +For clients that use JSON config (Claude Desktop, Claude Code, Cursor): + +```json +{ + "mcpServers": { + "skill-seekers": { + "command": "python", + "args": ["-m", "skill_seekers.mcp.server_fastmcp"] + } + } +} +``` + +## Available Tools (40) + +| Category | Tools | Description | +|----------|-------|-------------| +| Config | 3 | Generate, list, validate scraping configs | +| Sync | 1 | Sync config URLs against live docs | +| Scraping | 11 | Scrape docs, GitHub, PDF, video, codebase, generic (10 types) | +| Packaging | 4 | Package, upload, enhance, install skills | +| Splitting | 2 | Split large configs, generate routers | +| Sources | 5 | Fetch, submit, manage config sources | +| Vector DB | 4 | Export to Weaviate, Chroma, FAISS, Qdrant | +| Workflows | 5 | List, get, create, update, delete workflows | +| Quality | 3 | Quality checks, estimate scope, resume operations | +| Agent Install | 2 | Install agent, extract test examples | + +## Maintenance + +- Update description/tags on major releases +- No code changes needed — users always get the latest via `pip install` + +## Notes + +- Smithery CLI v4.7.0 removed the `--transport stdio` flag from the docs +- The CLI `publish` command only supports URL-based (external) publishing +- For local/stdio servers, use the web UI at smithery.ai/servers/new +- The namespace and server entity are already created; only the release needs to succeed diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fd7762e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,111 @@ +# Skill Seekers Docker Compose +# Complete deployment with MCP server and vector databases + +version: '3.8' + +services: + # Main Skill Seekers CLI application + skill-seekers: + build: + context: . + dockerfile: Dockerfile + image: skill-seekers:latest + container_name: skill-seekers + environment: + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - GOOGLE_API_KEY=${GOOGLE_API_KEY} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - GITHUB_TOKEN=${GITHUB_TOKEN} + volumes: + - ./data:/data + - ./configs:/configs:ro + - ./output:/output + networks: + - skill-seekers-net + command: ["skill-seekers", "--help"] + + # MCP Server (HTTP mode) + mcp-server: + build: + context: . + dockerfile: Dockerfile.mcp + image: skill-seekers-mcp:latest + container_name: skill-seekers-mcp + ports: + - "8765:8765" + environment: + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - GOOGLE_API_KEY=${GOOGLE_API_KEY} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - GITHUB_TOKEN=${GITHUB_TOKEN} + - MCP_TRANSPORT=http + - MCP_PORT=8765 + volumes: + - ./data:/data + - ./configs:/configs:ro + - ./output:/output + networks: + - skill-seekers-net + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8765/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + + # Weaviate Vector Database + weaviate: + image: semitechnologies/weaviate:latest + container_name: weaviate + ports: + - "8080:8080" + environment: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' + PERSISTENCE_DATA_PATH: '/var/lib/weaviate' + DEFAULT_VECTORIZER_MODULE: 'none' + ENABLE_MODULES: '' + CLUSTER_HOSTNAME: 'node1' + volumes: + - weaviate-data:/var/lib/weaviate + networks: + - skill-seekers-net + restart: unless-stopped + + # Qdrant Vector Database + qdrant: + image: qdrant/qdrant:latest + container_name: qdrant + ports: + - "6333:6333" + - "6334:6334" + volumes: + - qdrant-data:/qdrant/storage + networks: + - skill-seekers-net + restart: unless-stopped + + # Chroma Vector Database + chroma: + image: ghcr.io/chroma-core/chroma:latest + container_name: chroma + ports: + - "8000:8000" + environment: + IS_PERSISTENT: 'TRUE' + PERSIST_DIRECTORY: '/chroma/data' + volumes: + - chroma-data:/chroma/data + networks: + - skill-seekers-net + restart: unless-stopped + +networks: + skill-seekers-net: + driver: bridge + +volumes: + weaviate-data: + qdrant-data: + chroma-data: diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..39b9dd5 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,263 @@ +# Documentation Architecture + +> **How Skill Seekers documentation is organized (v3.6.0 - 18 source types)** + +--- + +## Philosophy + +Our documentation follows these principles: + +1. **Progressive Disclosure** - Start simple, add complexity as needed +2. **Task-Oriented** - Organized by what users want to do +3. **Single Source of Truth** - One authoritative reference per topic +4. **Version Current** - Always reflect the latest release + +--- + +## Directory Structure + +``` +docs/ +├── README.md # Entry point - navigation hub +├── ARCHITECTURE.md # This file +│ +├── getting-started/ # New users (lowest cognitive load) +│ ├── 01-installation.md +│ ├── 02-quick-start.md +│ ├── 03-your-first-skill.md +│ └── 04-next-steps.md +│ +├── user-guide/ # Common tasks (practical focus) +│ ├── 01-core-concepts.md +│ ├── 02-scraping.md +│ ├── 03-enhancement.md +│ ├── 04-packaging.md +│ ├── 05-workflows.md +│ └── 06-troubleshooting.md +│ +├── reference/ # Technical details (comprehensive) +│ ├── CLI_REFERENCE.md +│ ├── MCP_REFERENCE.md +│ ├── CONFIG_FORMAT.md +│ └── ENVIRONMENT_VARIABLES.md +│ +└── advanced/ # Power users (specialized) + ├── mcp-server.md + ├── mcp-tools.md + ├── custom-workflows.md + └── multi-source.md +``` + +--- + +## Category Guidelines + +### Getting Started + +**Purpose:** Get new users to their first success quickly + +**Characteristics:** +- Minimal prerequisites +- Step-by-step instructions +- Copy-paste ready commands +- Screenshots/output examples + +**Files:** +- `01-installation.md` - Install the tool +- `02-quick-start.md` - 3 commands to first skill +- `03-your-first-skill.md` - Complete walkthrough +- `04-next-steps.md` - Where to go after first success + +--- + +### User Guide + +**Purpose:** Teach common tasks and concepts + +**Characteristics:** +- Task-oriented +- Practical examples +- Best practices +- Common patterns + +**Files:** +- `01-core-concepts.md` - How it works +- `02-scraping.md` - All 18 source types (docs, GitHub, PDF, video, Word, EPUB, Jupyter, HTML, OpenAPI, AsciiDoc, PPTX, RSS, man pages, Confluence, Notion, Slack/Discord, local codebase) +- `03-enhancement.md` - AI enhancement +- `04-packaging.md` - Platform export +- `05-workflows.md` - Workflow presets +- `06-troubleshooting.md` - Problem solving + +--- + +### Reference + +**Purpose:** Authoritative technical information + +**Characteristics:** +- Comprehensive +- Precise +- Organized for lookup +- Always accurate + +**Files:** +- `CLI_REFERENCE.md` - All CLI commands (including 17 source-type subcommands) +- `MCP_REFERENCE.md` - 40 MCP tools +- `CONFIG_FORMAT.md` - JSON schema (covers all 18 source types) +- `ENVIRONMENT_VARIABLES.md` - All env vars (including Confluence, Notion, Slack tokens) + +--- + +### Advanced + +**Purpose:** Specialized topics for power users + +**Characteristics:** +- Assumes basic knowledge +- Deep dives +- Complex scenarios +- Integration topics + +**Files:** +- `mcp-server.md` - MCP server setup +- `mcp-tools.md` - Advanced MCP usage +- `custom-workflows.md` - Creating workflows +- `multi-source.md` - Unified scraping + +--- + +## Naming Conventions + +### Files + +- **getting-started:** `01-topic.md` (numbered for order) +- **user-guide:** `01-topic.md` (numbered for order) +- **reference:** `TOPIC_REFERENCE.md` (uppercase, descriptive) +- **advanced:** `topic.md` (lowercase, specific) + +### Headers + +- H1: Title with version +- H2: Major sections +- H3: Subsections +- H4: Details + +Example: +```markdown +# Topic Guide + +> **Skill Seekers v3.6.0** + +## Major Section + +### Subsection + +#### Detail +``` + +--- + +## Cross-References + +Link to related docs using relative paths: + +```markdown + +See [Troubleshooting](06-troubleshooting.md) + + +See [CLI Reference](../reference/CLI_REFERENCE.md) + + +See [Contributing](../../CONTRIBUTING.md) +``` + +--- + +## Maintenance + +### Keeping Docs Current + +1. **Update with code changes** - Docs must match implementation +2. **Version in header** - Keep version current +3. **Last updated date** - Track freshness +4. **Deprecate old files** - Don't delete, redirect + +### Review Checklist + +Before committing docs: + +- [ ] Commands actually work (tested) +- [ ] No phantom commands documented +- [ ] Links work +- [ ] Version number correct +- [ ] Date updated + +--- + +## Adding New Documentation + +### New User Guide + +1. Add to `user-guide/` with next number +2. Update `docs/README.md` navigation +3. Add to table of contents +4. Link from related guides + +### New Reference + +1. Add to `reference/` with `_REFERENCE` suffix +2. Update `docs/README.md` navigation +3. Link from user guides +4. Add to troubleshooting if relevant + +### New Advanced Topic + +1. Add to `advanced/` with descriptive name +2. Update `docs/README.md` navigation +3. Link from appropriate user guide + +--- + +## Deprecation Strategy + +When content becomes outdated: + +1. **Don't delete immediately** - Breaks external links +2. **Add deprecation notice**: + ```markdown + > âš ï¸ **DEPRECATED**: This document is outdated. + > See [New Guide](path/to/new.md) for current information. + ``` +3. **Move to archive** after 6 months: + ``` + docs/archive/legacy/ + ``` +4. **Update navigation** to remove deprecated links + +--- + +## Contributing + +### Doc Changes + +1. Edit relevant file +2. Test all commands +3. Update version/date +4. Submit PR + +### New Doc + +1. Choose appropriate category +2. Follow naming conventions +3. Add to README.md +4. Cross-link related docs + +--- + +## See Also + +- [Docs README](README.md) - Navigation hub +- [Contributing Guide](../CONTRIBUTING.md) - How to contribute +- [Repository README](../README.md) - Project overview diff --git a/docs/BEST_PRACTICES.md b/docs/BEST_PRACTICES.md new file mode 100644 index 0000000..bb6d2fa --- /dev/null +++ b/docs/BEST_PRACTICES.md @@ -0,0 +1,496 @@ +# Best Practices for High-Quality Skills + +**Target Audience:** Anyone creating Claude skills | Already scraped documentation? Make it better! + +**Time:** 5-10 minutes to review | Apply as you build + +**Result:** Skills that Claude understands better and activates more reliably + +--- + +## Quick Checklist + +Before uploading a skill, check: + +- [ ] SKILL.md has clear "When to Use" triggers +- [ ] At least 5 code examples included +- [ ] Prerequisites documented (if any) +- [ ] Troubleshooting section present +- [ ] Quality score 90+ (Grade A) + +```bash +# Check your skill quality +skill-seekers quality output/myskill/ +``` + +--- + +## 1. Structure Your SKILL.md Clearly + +### Use Consistent Sections + +Claude looks for specific sections to understand your skill: + +```markdown +# Skill Name + +## Description +Brief explanation of what this skill enables. + +## When to Use This Skill +- User asks about [specific topic] +- User needs help with [specific task] +- User mentions [keywords] + +## Prerequisites +What needs to be true before using this skill. + +## Quick Reference +Most common commands or patterns. + +## Detailed Guide +Step-by-step instructions with examples. + +## Troubleshooting +Common issues and solutions. +``` + +### Why This Matters + +Claude uses the "When to Use" section to decide if your skill matches the user's question. Vague triggers = skill doesn't activate. + +**Bad Example:** +```markdown +## When to Use This Skill +Use this skill for API-related questions. +``` + +**Good Example:** +```markdown +## When to Use This Skill +- User asks about Steam Inventory API methods +- User needs to implement item drops in a Steam game +- User wants to grant promotional items to players +- User mentions: SteamInventory, GetAllItems, AddPromoItems +``` + +--- + +## 2. Include Real Code Examples + +Skills with 5+ code examples work significantly better. Claude learns patterns from examples. + +### What Works + +**Include a variety:** +- Basic usage (getting started) +- Common patterns (day-to-day use) +- Advanced usage (edge cases) +- Error handling (when things go wrong) + +**Example from a good SKILL.md:** +```markdown +## Quick Reference + +### Get All Items +```cpp +SteamInventoryResult_t resultHandle; +bool success = SteamInventory()->GetAllItems(&resultHandle); +``` + +### Grant Promotional Items +```cpp +void CInventory::GrantPromoItems() +{ + SteamItemDef_t newItems[2]; + newItems[0] = 110; + newItems[1] = 111; + SteamInventory()->AddPromoItems(&s_GenerateRequestResult, newItems, 2); +} +``` + +### Handle Async Results +```cpp +void OnSteamInventoryResult(SteamInventoryResultReady_t *pResult) +{ + if (pResult->m_result == k_EResultOK) { + // Process items + } +} +``` +``` + +### What to Avoid + +**Generic placeholder text:** +```markdown +## Quick Reference + +*Quick reference patterns will be added as you use the skill.* +``` + +**Code without context:** +```markdown +`GetAllItems()` +``` + +--- + +## 3. Document Prerequisites + +Claude can check conditions before proceeding. This prevents errors mid-execution. + +### Good Pattern + +```markdown +## Before You Start + +Make sure you have: +- [ ] Python 3.10+ installed +- [ ] API key set in environment (`export API_KEY=...`) +- [ ] Network access to api.example.com + +### Quick Check +```bash +python3 --version # Should show 3.10+ +echo $API_KEY # Should not be empty +curl api.example.com/health # Should return 200 +``` +``` + +### Why It Matters + +Without prerequisites, Claude might: +1. Start a complex workflow +2. Fail halfway through +3. Leave the user with a broken state + +With prerequisites, Claude can: +1. Check conditions first +2. Report what's missing +3. Guide the user to fix issues before starting + +--- + +## 4. Add Troubleshooting Sections + +Real-world usage hits errors. Document the common ones. + +### Template + +```markdown +## Troubleshooting + +### "Connection refused" error +**Cause:** Service not running or firewall blocking + +**Solution:** +1. Check if the service is running: `systemctl status myservice` +2. Verify firewall settings: `sudo ufw status` +3. Test connectivity: `curl -v https://api.example.com` + +### "Permission denied" error +**Cause:** Insufficient file permissions + +**Solution:** +1. Check file permissions: `ls -la /path/to/file` +2. Fix permissions: `chmod 644 /path/to/file` +3. Verify ownership: `chown user:group /path/to/file` + +### "Rate limited" error +**Cause:** Too many API requests + +**Solution:** +1. Wait 60 seconds before retrying +2. Implement exponential backoff in your code +3. Consider caching responses +``` + +### What to Include + +- Error message (exact text users see) +- Cause (why it happens) +- Solution (step-by-step fix) +- Prevention (how to avoid it) + +--- + +## 5. Organize Reference Files + +The `references/` directory should be easy to navigate. + +### Good Structure + +``` +output/myskill/ +├── SKILL.md # Main entry point +└── references/ + ├── index.md # Category overview + ├── getting_started.md # Installation, setup + ├── api_reference.md # API methods, classes + ├── guides.md # How-to tutorials + └── advanced.md # Complex scenarios +``` + +### Category Guidelines + +| Category | Contains | Keywords | +|----------|----------|----------| +| getting_started | Installation, setup, quickstart | intro, install, setup, quickstart | +| api_reference | Methods, classes, parameters | api, method, function, class, reference | +| guides | Step-by-step tutorials | guide, tutorial, how-to, example | +| concepts | Architecture, design patterns | concept, overview, architecture | +| advanced | Complex scenarios, internals | advanced, internal, extend | + +### Navigation Table in SKILL.md + +```markdown +## Navigation + +| Topic | File | Description | +|-------|------|-------------| +| Getting Started | references/getting_started.md | Installation and setup | +| API Reference | references/api_reference.md | Complete API documentation | +| Guides | references/guides.md | Step-by-step tutorials | +| Advanced | references/advanced.md | Complex scenarios | +``` + +--- + +## 6. Run Quality Checks + +Always check quality before uploading: + +```bash +# Check quality score +skill-seekers quality output/myskill/ + +# Expected output: +# ✅ Grade: A (Score: 95) +# ✅ No errors +# âš ï¸ 1 warning: Consider adding more code examples +``` + +### Quality Targets + +| Grade | Score | Status | +|-------|-------|--------| +| A | 90-100 | Ready to upload | +| B | 80-89 | Good, minor improvements possible | +| C | 70-79 | Review warnings before uploading | +| D | 60-69 | Needs work | +| F | < 60 | Significant issues | + +### Common Issues + +**"Missing SKILL.md"** +- Run the scraper first +- Or create manually + +**"No code examples found"** +- Add code blocks to SKILL.md +- Run enhancement: `skill-seekers enhance output/myskill/` + +**"Generic description"** +- Rewrite "When to Use" section +- Add specific keywords and use cases + +--- + +## 7. Test Your Skill + +Before uploading, test with Claude: + +### Manual Testing + +1. Upload the skill to Claude +2. Ask a question your skill should answer +3. Check if Claude activates the skill +4. Verify the response uses skill content + +### Test Questions + +For a Steam Inventory skill: +``` +"How do I get all items in a player's Steam inventory?" +"What's the API call for granting promotional items?" +"Show me how to handle async inventory results" +``` + +### What to Look For + +**Good activation:** +- Claude references your skill +- Response includes examples from your SKILL.md +- Specific, accurate information + +**Poor activation:** +- Claude gives generic answer +- No skill reference +- Information doesn't match your docs + +--- + +## Real-World Example + +### Before Improvement + +```markdown +# React Skill + +## Description +React documentation. + +## When to Use +For React questions. + +## Quick Reference +See references. +``` + +**Quality Score:** 45 (Grade F) + +### After Improvement + +```markdown +# React Skill + +## Description +Complete React 18+ documentation including hooks, components, and best practices. + +## When to Use This Skill +- User asks about React hooks (useState, useEffect, useContext) +- User needs help with React component lifecycle +- User wants to implement React patterns (render props, HOCs, custom hooks) +- User mentions: React, JSX, virtual DOM, fiber, concurrent mode + +## Prerequisites +- Node.js 16+ for development +- Basic JavaScript/ES6 knowledge + +## Quick Reference + +### useState Hook +```jsx +const [count, setCount] = useState(0); +``` + +### useEffect Hook +```jsx +useEffect(() => { + document.title = `Count: ${count}`; +}, [count]); +``` + +### Custom Hook +```jsx +function useWindowSize() { + const [size, setSize] = useState({ width: 0, height: 0 }); + useEffect(() => { + const handleResize = () => { + setSize({ width: window.innerWidth, height: window.innerHeight }); + }; + window.addEventListener('resize', handleResize); + handleResize(); + return () => window.removeEventListener('resize', handleResize); + }, []); + return size; +} +``` + +## Troubleshooting + +### "Invalid hook call" +**Cause:** Hook called outside component or conditionally + +**Solution:** +1. Only call hooks at top level of function components +2. Don't call hooks inside loops or conditions +3. Check for multiple React copies: `npm ls react` +``` + +**Quality Score:** 94 (Grade A) + +--- + +## Summary + +| Practice | Why It Matters | Quick Check | +|----------|---------------|-------------| +| Clear structure | Claude knows where to look | Has all standard sections? | +| Code examples (5+) | Claude learns patterns | Count code blocks | +| Prerequisites | Prevents mid-task failures | Prerequisites section exists? | +| Troubleshooting | Handles real-world errors | Common errors documented? | +| Organized references | Easy navigation | Categories make sense? | +| Quality check | Catches issues early | Score 90+? | +| Testing | Confirms it works | Claude activates skill? | + +**Final command before upload:** +```bash +skill-seekers quality output/myskill/ +``` + +That's it! Follow these practices and your skills will work better with Claude. + +--- + +## 8. Tips for Specific Source Types + +Skill Seekers supports **18 source types**. Here are tips for getting the best results from each category: + +### Documentation (Web) +- Always test CSS selectors before large scrapes: `skill-seekers create --max-pages 3 --verbose` +- Use `--async` for large sites (2-3x faster) + +### GitHub Repos +- Use `--analysis-depth c3x` for deep analysis (patterns, tests, architecture) +- Set `GITHUB_TOKEN` to avoid rate limits + +### PDFs & Office Documents (PDF, Word, EPUB, PPTX) +- Use `--enable-ocr` for scanned PDFs +- For Word/PPTX, embedded images are extracted automatically; add `--extract-images` for PDFs +- EPUB works best with DRM-free files + +### Video +- Run `skill-seekers create --setup` first to install GPU-optimized dependencies +- YouTube and Vimeo URLs are auto-detected; local video files also work + +### Jupyter Notebooks +- Ensure notebooks are saved (unsaved cell outputs won't be captured) +- Both code cells and markdown cells are extracted + +### OpenAPI/Swagger Specs +- Both YAML and JSON specs are supported (OpenAPI 3.x and Swagger 2.0) +- Endpoints, schemas, and examples are parsed into structured API reference + +### AsciiDoc & Man Pages +- AsciiDoc requires `asciidoctor` (install via your package manager or gem) +- Man pages in sections `.1` through `.8` are supported + +### RSS/Atom Feeds +- Useful for converting blog posts and changelogs into skills +- Set `--max-items` to limit how many entries are extracted + +### Confluence & Notion +- API mode requires authentication tokens (see FAQ for setup) +- Export directory mode works offline with HTML/Markdown exports + +### Slack & Discord +- Use official export tools (Slack Workspace Export, DiscordChatExporter) +- Specify `--platform slack` or `--platform discord` explicitly + +--- + +## See Also + +- [Enhancement Guide](features/ENHANCEMENT.md) - AI-powered SKILL.md improvement +- [Upload Guide](guides/UPLOAD_GUIDE.md) - How to upload skills to Claude +- [CLI Reference](reference/CLI_REFERENCE.md) - Complete command reference + +--- + +## Contributing + +This guide was contributed by the [AI Writing Guide](https://github.com/jmagly/ai-writing-guide) project, which uses Skill Seekers for documentation-to-skill conversion. Best practices here are informed by research on production-grade agentic workflows. + +Found an issue or want to improve this guide? PRs welcome! diff --git a/docs/BUG_AUDIT.md b/docs/BUG_AUDIT.md new file mode 100644 index 0000000..1a4cf65 --- /dev/null +++ b/docs/BUG_AUDIT.md @@ -0,0 +1,704 @@ +# Skill Seekers — Bug Audit + +> **Addendum (2026-06-11):** Follow-up review during the Grand Unification work +> (see [UNIFICATION_PLAN.md](UNIFICATION_PLAN.md)) found that two fixes claimed +> below were no-ops as shipped and have since been fixed properly: +> 1. **MCP-03 (`dry_run` for unified configs)** — the injected flag never +> reached `UnifiedScraper`; it is now genuinely honored (constructor param, +> preview-and-return, no directory creation) for both CLI and MCP paths. +> 2. **ENH timeout fallback** — the raw-config fallbacks for enhancement +> settings (incl. timeout/"unlimited") were dead code because +> `ExecutionContext.get()` never raises; the gate now uses +> `ExecutionContext.is_initialized()`. +> +> The findings below are preserved unchanged as a historical record. + +**Date:** 2026-06-10 +**Scope:** Full audit of `src/skill_seekers/` (~80K LOC): scan/config pipeline, CLI core & dispatch, platform adaptors, MCP server & tools, codebase-analysis engines (AST/pattern/dependency/guide/router), document & media & remote scrapers, enhancement + unified builder, argument/parser system, and infra (embedding, sync, storage, benchmark, presets). + +**Method:** Two-pass. Pass 1 — 10 parallel review agents, one per subsystem, surfaced candidate defects. Pass 2 — a second set of agents (plus manual spot-checks) re-read the actual code behind **every** finding, checked reachability/trigger, marked each `Confirmed` / `Corrected` / `False-Positive`, deepened it, and hunted for additional related bugs. Only `Confirmed` and `Corrected` findings appear in the body; dismissed items are recorded in Appendix A for transparency. + +**Severity rubric** +- **Critical** — silent data loss/corruption of the primary output, or a core feature completely (and silently) non-functional. +- **High** — wrong result / broken feature under common conditions, or a crash on realistic input. +- **Medium** — wrong behaviour under specific conditions, misleading output, or latent correctness hazard with a plausible trigger. +- **Low** — cosmetic, rare trigger, dead code, type-annotation, or defensive gap. + +**No security/RCE findings.** Subprocess calls use argv arrays (no `shell=True`); path-traversal guards in `config_publisher`, `marketplace_publisher`, and `workflow_tools` were verified present and correct. + +--- + +## Summary counts + +| Severity | Count | +|----------|-------| +| Critical | 5 | +| High | 18 | +| Medium | 45 | +| Low | 67 | +| **Total confirmed/corrected** | **135** | +| of which newly found in the verification pass (★) | 33 | +| Dismissed (false-positive / no-impact) | 7 (Appendix A) | + +IDs are subsystem-prefixed: `SCAN` (scan+config), `CLI` (core/dispatch), `ADP` (adaptors), `MCP`, `CBA` (codebase-analysis: AST/pattern/dependency), `CBB` (codebase-analysis: example/guide/router), `DOC` (document scrapers), `MED` (media/structured/remote scrapers), `ENH` (enhancement + unified builder), `INF` (args/parsers + infra). `★` marks bugs newly discovered during the verification pass. + +--- + +## Resolution status (this PR) + +Worked through the audit Critical → Low. Every Critical and High finding is fixed, and the entire Medium tier is fixed except one deferred item. Each fix carries a regression test where behavioral; the rest are covered by existing suites. Lint + format are clean throughout. + +| Tier | Total | Fixed | Remaining | +|------|-------|-------|-----------| +| Critical | 5 | 5 | 0 | +| High | 18 | 18 | 0 | +| Medium | 45* | 44 | 1 (DOC-04) | +| Low | 67* | 0 | 67 (not in scope for this PR) | + +\* Medium/Low counts include sub-findings; the body tables enumerate each fixed ID. + +**Delivered as 8 commits:** +1. Critical + High behavioral bugs (each with a regression test). +2. `--output` honored for every source type + config-file precedence (CLI-01/02, CFG-01/02). +3. `ExecutionContext` made the real single source of truth (RT-01..11): ~12 inert flags wired, 4 bypasses fixed, dead `rag` section removed, `--languages`/`--dry-run` wired. +4. Medium batch 1 — codebase-analysis, enhancement, infra, scan/config, adaptors. +5. Medium batch 2 — guides + document/remote scrapers. +6. DOC-07/MED-04 — SKILL.md nav links fixed across all 7 scrapers. +7. ADP-01 — `--streaming` wired into the 8 RAG/vector adaptors (was dead for every target). +8. CLI-04 — all 15 commands migrated off `_reconstruct_argv` to namespace dispatch (also fixed a pre-existing live bug: `skill-seekers workflows …` was broken). + +**Remaining / out of scope:** +- **DOC-04** (Medium, deferred): `DEFAULT_MAX_PAGES = -1` means a config without `max_pages` crawls unbounded. The fix (a finite default) is a **user-visible behavior change** for existing configs, so it's left for a maintainer product decision rather than changed unilaterally. +- **Low tier (67):** cosmetic / rare-trigger / dead-code / type-annotation items — catalogued in the body, not addressed in this PR. +- **`tests/test_bootstrap_skill*.py`** were hardened (out of band) to guard a fork-bomb: the bootstrap/`create` subprocess tests spawn real `skill-seekers create` runs (and LLM enhance agents). Because of this, the *full* `pytest tests/` is unsafe to run repeatedly; verification used targeted per-module suites + `-m "not slow and not integration"`. + +--- + +## Independent re-review of this PR — 2026-06-10 (second pass) + +After the fixes above, every commit in this PR was re-reviewed independently (one reviewer per commit) to verify the fixes are correct, complete, and don't introduce regressions — i.e. not taking the audit's own self-grade at face value. The reviewers confirmed the large majority of fixes are correct, and surfaced the following issues, **all now resolved in this PR** (each with a regression test unless noted): + +### Regressions this PR had introduced (now fixed) + +| ID | Sev | Fix | +|----|-----|-----| +| **ENH-03-bis** | Blocker | The ENH-03 retry path was mis-indented: when the exit-75 retry failed, `new_mtime` was unbound → `UnboundLocalError`. Re-nested under the returncode/exists guards. Tests: `test_enhance_skill_local.py::TestHeadlessSuccessGate::{test_failed_retry_returns_false_without_crashing,test_successful_retry_counts_as_success}`. | +| **R1 (CLI-04-bis)** | High | `skill-seekers estimate ` crawled **unlimited** instead of capping at 1000 — the unified `estimate_parser`'s `--max-discovery` had no default (`None`), which `estimate_pages()` treats as unlimited. Added `default=DEFAULT_MAX_DISCOVERY`. Test: `test_estimate_pages.py::TestEstimateParserDefault`. | +| **R2 (CBA-14-bis)** | Medium | The JS method regex required `)` immediately before `{`, silently dropping **TypeScript** class methods with return-type annotations (`greet(): string {`). Made the return type optional in the pattern. Test: `test_code_analyzer.py::...::test_typescript_class_methods_with_return_types_not_dropped`. | +| **R3 (CLI-02-bis)** | Medium | `github_scraper._save_data()` did `os.makedirs("output")` but wrote to a `--output`-derived `data_file`, raising `FileNotFoundError` for `create owner/repo --output `. Now creates `dirname(data_file)`. Test: `test_github_scraper.py::...::test_save_data_creates_nested_output_parent`. | + +### Audit fixes that were incomplete / over-claimed (now corrected) + +| ID | Sev | Resolution | +|----|-----|-----------| +| **I1 (MCP-03)** | High | `skip_scrape` was a no-op (set an attribute no converter read). Now honored at the `SkillConverter.run()` chokepoint for single-source paths and by `UnifiedScraper.run()` for multi-source configs, which reloads each configured source from `.skillseeker-cache`/cached extraction files before conflict detection and build. Tests: `test_skill_converter.py::TestSkipScrape`, `test_unified_scraper_orchestration.py::TestUnifiedSkipScrape`, `test_unified_mcp_integration.py::test_mcp_scrape_docs_unified_skip_scrape_sets_attribute_without_warning`. | +| **I2 (RT-06)** | Medium | Config-file **inline** `stages` never ran — `_build_inline_engine` re-read `args.enhance_stage` (None for config-only) instead of the resolved list. Now takes the resolved `inline_stages`. Test: `test_workflow_runner.py::...::test_inline_stages_from_config_execute`. | +| **I3 (ENH-06)** | Low | The OpenAI branch of `_call_api` still hardcoded `timeout=120`; now forwards the caller's `request_timeout`. Test: `test_agent_client.py::...::test_openai_forwards_caller_timeout`. | +| **I4 (RT-04)** | Low | RT-04 claimed `--timeout` is wired on `create`, but the flag isn't registered there, so the mapping is inert on that path (it only fires for config dicts carrying `timeout`). **Claim corrected here** — no CLI flag added (avoids new surface area for an over-claim). | + +### Low-tier / pre-existing issues fixed opportunistically + +| ID | Area | Fix | +|----|------|-----| +| **CBA-09** | Kotlin | `is_suspend` used a substring test, mis-flagging a function *named* `suspendCoroutine`. Now word-boundary (`\bsuspend\b`). Test in `test_kotlin_support.py`. | +| **P1** | chat | Discord 429 retry was unbounded (hang risk) — the Slack path in the same commit was bounded; Discord now caps consecutive 429s at 3 and stops with partial data. | +| **P2** | doc | `_normalize_url` stripped `?ref=`, which is content-bearing on some sites (GitHub `?ref=branch`, SPA routers) → could collapse distinct pages. `ref` removed from the strip set (`ref_src` kept). Tests in `test_scraper_features.py::TestNormalizeUrl`. | +| **P3** | doc | `--dry-run` supplied via config still created empty output dirs (the ctor used the param, not `self.dry_run`). Now uses `self.dry_run`/`self.resume`. | +| **P5** | adaptors | `claude.py` enhancement did rename-then-write, leaving only `SKILL.md.backup` if the write failed. Now writes to a temp file, copies the backup, then `os.replace()` (atomic). | +| **P6** | mcp | `submit_config` dedup used GitHub's fuzzy title search (`[CONFIG] react` matched `react-native`). Added an exact-title guard. | +| **P8** | scrapers | asciidoc/jupyter `_generate_index` still had inline filename logic (drift risk vs the nav helper). Both index generators now route through `_ref_filename`, so index links and reference files share one source of truth. | +| **P9** | config | `config status` omitted the Moonshot key row; added it. | + +### Deferred (genuine larger work — not safe to do inline; tracked here) + +- **Streaming adaptor format (ADP-01 follow-up):** all 8 RAG/vector adaptors emit a *generic* streamed format rather than each platform's native shape (only the unregistered example classes override the converter). `--streaming` works; per-platform fidelity is a follow-up. +- **Unified multi-source `skip_scrape` (I1 remainder):** fixed in #405 by rebuilding `scraped_data` from cached per-source files before the unified build, and by forwarding `--skip-scrape` through the config-source `create` path. +- **Kotlin brace-depth / `is_suspend` corpus robustness (CBA-08, CBA-11):** the brace-depth nesting check is fooled by braces inside strings/comments; a robust fix needs a string/comment-aware scan (shared with the still-open CBA-11). +### Low-tier disposition (2026-06-11) + +After fixing the ~12 impactful Low items above, the remaining Low tier was triaged +and batch-fixed. Issues #405–#408 track the 4 larger deferred items. + +**Fixed in this PR (data-loss/crash + minor correctness):** +DOC-11, DOC-13, DOC-14, DOC-15, DOC-17, MED-06, MED-07, MED-08, MED-11, MED-12, +MED-14, MED-17, MED-18, ENH-13, ENH-14, ENH-15, ENH-16, ENH-17, ADP-03, ADP-04, +ADP-05, ADP-06, MCP-11, MCP-15, MCP-16, MCP-17, SCAN-05, SCAN-06, SCAN-07, CLI-08, +CLI-09, INF-06, CBA-12, CBA-16, CBB-09, CBB-10, CBB-11, CBB-14, CBB-15, CBB-16 +(plus the re-review R/I/P items). MED-16 was already fixed in batch 2. + +**Intentionally NOT changed (with reason):** +- **Product decisions (left as-is, like DOC-04):** MCP-10 (sync caps at 500 — a + sensible safety bound), CLI-07 (a failed *optional* enhancement returning a + non-zero exit from `create` is a behavior change — needs a maintainer call). +- **Cosmetic / doc-only (dropped):** ADP-07 (docstring), CLI-05 (a misleading + success-log path), MED-13 (type-annotation lie), MCP-08 (param typing), MED-09, + MED-10 (already corrected/dead per Appendix). +- **Still deferred (genuinely larger work):** MED-15 (OpenAPI external/multi-file + `$ref` bundling — needs a pre-bundle pass; the MED-07 *cycle* guard is fixed), + MCP-09 (a truly structured MCP error channel — the text already carries ✅/⌠+ markers). + +- The original **DOC-04** decision stands (issue #408): keep `-1` (unbounded). + +--- + +## Fix log — 2026-06-10 + +All 5 Criticals + all 18 High findings fixed with regression tests (lint/format clean; affected suites green). A few mechanical/wide fixes (CLI-01, CLI-02, CBB-02/03/12, MCP-02..05) are covered by the broad suite rather than dedicated new tests. + +### Critical + +| ID | Status | Fix summary | +|----|--------|-------------| +| ENH-01 | ✅ Fixed | `enhance_skill.py`, `agent_client.py`, `adaptors/claude.py` refuse to save/return a `max_tokens`-truncated (or empty) response; unified-scraper path covered via `agent_client`. | +| SCAN-01 | ✅ Fixed | Schema hint `code_analysis_depth` `"standard"` → `"deep"`; pinned to the validator by a regression test. | +| CBA-13 | ✅ Fixed | GDScript class dict key `"bases"` → `"base_classes"` (+ `docstring`, `_offset_to_line`). | +| CBB-01 | ✅ Fixed | `guide_enhancer._enhance_via_local` now calls the real `_call_ai`. | +| MCP-01 | ✅ Fixed | `config_publisher` clone/pull/push authenticate via an explicit token URL (origin stays tokenless). | +| ★MCP-12 | ✅ Fixed | `get_source` `KeyError` translated to a helpful `ValueError`. | +| ★MCP-13 | ✅ Fixed | cached-repo re-pull uses the token URL (was tokenless origin). | +| ★MCP-14 | ✅ Fixed | feature branch restored in a `finally` so the cache can't be stranded. | +| MCP-07 | ✅ Fixed | commit `action` uses pre-copy existence (`add` vs `update`). | +| ADP-06 | ✅ Fixed | `adaptors/claude.py` validates non-empty before renaming the original (folded into the ENH-01 fix). | + +### High + +| ID | Status | Fix summary | +|----|--------|-------------| +| SCAN-02 | ✅ Fixed | Guard the non-numeric `confidence` parse so one bad AI entry can't crash the scan. | +| CLI-01 | ✅ Fixed | `_build_config` reads the negative dests (`not no_issues`/`no_changelog`/`no_releases`); `--no-*` opt-outs now work. | +| CLI-02 | ✅ Fixed | `--output` now honored across the whole single-source create path: base `SkillConverter` + all 16 overriding converters read `config["output_dir"]` (incl. 5 type-annotated `skill_dir: str = …` that a first pass missed), and `data_file`/`data_dir`/`checkpoint` are derived from `skill_dir` so intermediate artifacts follow `--output` too (behavior-preserving fallback to `output/`). `_build_config` passes `output_dir` for every branch. The unified/`config` multi-source path also honors `--output`: `unified_scraper`/`unified_skill_builder` derive the final skill from `config["output_dir"]`, and the docs/github sub-converters now write **straight into the `.skillseeker-cache/` cache** (their sub-config gets `output_dir`), removing the `output/{subname}` hardcodes and the move-to-cache dance. (`pdf_extractor_poc.py` keeps an `output/` *default* but already accepts `image_dir` as a constructor arg — standalone PoC, not the config flow.) | +| CBA-01 | ✅ Fixed | Singleton precedence: `(has_instance_method or has_init_control) and confidence >= 0.5`. | +| CBA-02 | ✅ Fixed | `total_emissions` iterates `.values()` (was `.items()` → always 2×#signals). | +| CBA-03 | ✅ Fixed | JS/TS class body delimited by the matching brace (brace-count), not the first `}`. | +| CBA-04 | ✅ Fixed | New `_base_root`/`_matches_base` normalize generic/qualified bases so subclass detection matches. | +| CBB-02 | ✅ Fixed | Removed the positional verification overwrite that misattributed checks to steps. | +| CBB-03 | ✅ Fixed | `_generate_examples_from_github` works on a copy + index set instead of mutating shared insights. | +| CBB-12 | ✅ Fixed | `dependencies=list(imports)` — per-example copy (no shared mutable list). | +| ENH-02 | ✅ Fixed | `SKILL_SEEKER_PROVIDER` override so a Moonshot/Kimi `sk-` key isn't misrouted to OpenAI. | +| ENH-03 | ✅ Fixed | Headless success gates on mtime advance, not file growth (matches background/daemon). | +| ENH-04 | ✅ Fixed | Kimi parser uses `re.DOTALL` + record-boundary anchor (multi-line / apostrophe safe). | +| ENH-05 | ✅ Fixed | Only read the response file when `output_file` was requested; dropped the stray-`.json` glob. | +| MCP-02 | ✅ Fixed | Package-path regex matches `Output:` / `Package created:` (the strings actually printed). | +| MCP-03 | ✅ Fixed | `scrape_docs` honors `skip_scrape` and applies `dry_run` for unified configs too. | +| MCP-04 | ✅ Fixed | `submit_config` searches for an existing open issue before creating (idempotent). | +| MCP-05 | ✅ Fixed | `install_skill` detects failure by the specific `_run_converter` markers, not any `âŒ`. | + +Regression tests added — Critical: `test_agent_client.py::TestCallApiTruncation`, `test_scan_command.py::TestGenerateSchemaHintDepth`, `test_code_analyzer.py::TestGDScriptParsing`, `test_guide_enhancer.py::TestEnhanceViaLocalRegression`, `test_config_publisher.py` (re-pull + KeyError + add/update). High: `test_agent_client.py` (`TestProviderOverride`, `TestKimiOutputParsing`, `TestCallLocalStrayJson`), `test_scan_command.py` (non-numeric confidence), `test_enhance_skill_local.py::TestHeadlessSuccessGate`, `test_pattern_recognizer.py::TestBaseClassMatching`, `test_code_analyzer.py` (JS multi-method), `test_signal_flow_analyzer.py`. (CBB-02/03/12, CLI-01, MCP-02..05 are covered by the broad suite rather than dedicated new tests.) + +### Config-override follow-up (found while auditing "what else is overridden by hardcoded values") + +| ID | Status | Fix summary | +|----|--------|-------------| +| CFG-01 | ✅ Fixed | **Web `--config` `selectors`/`url_patterns` silently ignored.** `_merge_json_config` only fills missing keys, but `_build_config` pre-set the hardcoded `selectors`/`url_patterns` before merging → the user's config-file values were shadowed. Now applied via `setdefault` **after** the merge, so the file wins. (Verified `doc_scraper` actually reads `config["selectors"]`/`url_patterns`.) | +| CFG-02 | ✅ Fixed | **Web config-file `workers`/`async_mode`/`browser_wait_until`/`browser_extra_wait` dropped.** `ExecutionContext._load_config_file` copied only `max_pages`/`rate_limit`/`browser`; now copies all scraping-tuning keys. Test: `test_execution_context.py::...test_simple_web_config_format`. | +| CFG-03 | â„¹ï¸ Noted | `--config` is only merged for `web`/`github` source types; for `pdf`/`video`/etc. the documented path is the unified `sources` config (which reads per-source keys correctly). Low impact; left as a design note. | + +### Runtime-config (ExecutionContext) audit — is every field wired through args→context→consumer, with no bypasses? + +The singleton claims "all components read from this context instead of parsing their own argv." Audit found it was **not** the single source of truth: ~12 registered flags never reached the context, several consumers bypassed it, and two sections were dead. All fixed (regression tests in `test_execution_context.py`). + +| ID | Status | Fix summary | +|----|--------|-------------| +| RT-01 | ✅ Fixed | **5 analysis `--skip-*` flags inert.** `--skip-config-patterns`/`--skip-api-reference`/`--skip-dependency-graph`/`--skip-docs`/`--no-comments` were never mapped in `_args_to_data`, yet `create_command` reads those exact `ctx.analysis.*` fields → the skipped steps ran anyway. Now mapped. | +| RT-02 | ✅ Fixed | **`--skip-config` orphan dest** now aliased to `skip_config_patterns`. | +| RT-03 | ✅ Fixed | **`--dry-run` dead on `create`.** `ctx.output.dry_run` was set but never put in the converter config; `_build_config` now passes `"dry_run"`, and `doc_scraper` reads `config["dry_run"]` (was only honoring the unused ctor param). | +| RT-04 | ✅ Fixed | **`--timeout` not wired on `create`** → mapped to `ctx.enhancement.timeout` in `_args_to_data`. | +| RT-05 | ✅ Fixed | **`get_agent_client()` dropped `api_key`** → a CLI `--api-key` was lost and AgentClient env-detected only. Now forwarded. | +| RT-06 | ✅ Fixed | **Config-file `workflows`/`stages`/`workflow_vars` never ran** — `run_workflows`/`collect_workflow_vars` read only argv. Now fall back to `ctx.enhancement.*` so config-declared workflows execute. | +| RT-07 | ✅ Fixed | **Confluence/Notion `max_pages` bypass** — read `getattr(self.args, …)` (dropping config-file `max_pages`); now read `ctx.scraping.max_pages`. | +| RT-08 | ✅ Fixed | **`unified_scraper` dropped `ctx.enhancement.timeout` and `api_key`** (re-read raw config / built `AgentClient(mode="api")`); now use the context. | +| RT-09 | ✅ Fixed | **`scraping.languages` was a dead field with a name collision** (default `["en"]`, read nowhere; `--languages` is a *code*-filter the local converter read from argv, which would have broken if fed `["en"]`). Repurposed the field as the code-language filter (`default=None`), wired `--languages` into it, and `create_command` now reads `ctx.scraping.languages`. | +| RT-10 | ✅ Fixed (removed) | **`rag.*` section was write-only/dead.** Chunking lives in the separate `package` command, which parses its own (richer) args and runs as its own process — the create/scrape context never chunks and `ctx.rag` was read nowhere. Removed `RAGSettings` from the context. As cleanup, `common.py` now sources `DEFAULT_CHUNK_TOKENS`/`_OVERLAP` from `defaults.json` (was hardcoded `512`/`50`), so `defaults.json`'s `rag` block is the single source of truth for package chunking. *(Deviation: the earlier plan said "wire rag via package"; on inspection that's unsound — `create` and `package` are separate processes, so a create-time context can't reach package. Removal is the honest fix.)* | +| RT-11 | ✅ Kept (not a bug) | **`source.*`** is read nowhere in production (consumers use `create_command.self.source_info`), but it is **tested public API** and legitimately belongs in an execution context. Retained — removing tested API to chase a cosmetic dual-representation would be over-reach. | + +### Medium tier — batch 1 (codebase-analysis + enhancement + infra + scan/config + adaptors) + +All ✅ Fixed; verified by existing suites + new regression tests where behavioral. + +| ID | Fix summary | +|----|-------------| +| CBA-05 / CBA-06 | Parenthesized the `A and B or C` precedence so the `"protocol"`/`"event"` clause no longer boosts *every* pattern type. | +| CBA-07 | `_resolve_import` converts dotted module names → slash paths + suffix-matches `file_nodes`, so the dependency graph has edges (cycle detection was empty for all dotted-import languages). | +| CBA-08 | Kotlin top-level-fn detection uses brace-depth, not the brittle `indent > 4`. | +| CBA-09 | Kotlin `is_suspend` reads `match.group(0)` (the matched modifiers), not a fixed look-behind window. | +| CBA-10 | `gd_resource` regex ends with `\s*[\]\s]` so `script_class` is captured on compact headers. | +| CBA-14 | JS method extractor requires a trailing `{` (declarations only) + a fuller keyword blocklist, so call-sites like `setTimeout(...)` aren't counted as methods (unmasked by the CBA-03 brace fix). | +| CBA-15 | GDScript signal doc comment = nearest preceding non-blank line (was always `None` for col-0/indented signals). | +| ENH-06 | `_call_api` threads the caller's `timeout` (was hardcoded 120s, killing large prompts). | +| ENH-07 | `scrape_all_sources` reports the count of items scraped (was the bucket count, always ~17) and returns it. | +| ENH-08 | `run()` aborts with non-zero when every source failed (was building an empty skill + exit 0). | +| ENH-09 | "Official Documentation" URL filters `type == "documentation"` (was `sources[0]`). | +| ENH-10 | `DEBUG:` synthesis logs downgraded to `logger.debug`. | +| ENH-11 | Gemini API honors `max_output_tokens`/`timeout` and rejects a truncated reply. | +| ENH-12 | Moonshot/Kimi added to the auto-detect priority in `enhance_command._pick_mode` + `enhance_skill_local._detect_api_target` (Moonshot-only users were dropped to LOCAL). | +| SCAN-03 | `get_api_key`/`set_api_key` include `moonshot` → `MOONSHOT_API_KEY`. | +| SCAN-04 | `scan --dry-run` resolves with `auto_fetch=False` (no network, no stray `./configs/` write). | +| MCP-06 | `list_configs` falls back to `sources[].base_url` for unified configs. | +| ADP-02 | `chroma`/`pinecone` split `except ImportError` from `except Exception` (don't misreport a broken-but-installed package as "not installed"). | +| CLI-03 | `CreateCommand.execute` calls `ExecutionContext.reset()` first so a 2nd in-process create rebuilds the context. | +| INF-01 | Embedding cache key includes `normalize` (`{model}:{int(normalize)}:{text}`); threaded through `server.py`. | +| INF-02 | `cleanup_old` strips the full `_YYYYMMDD_HHMMSS` timestamp via regex (retention was per-name-per-day). | +| INF-03 | `memory()` samples RSS on a background thread to capture the true peak. | +| INF-04 | `compare()` guards division by zero on instant ops. | +| INF-05 | `check_header_changes` returns `True` when the server provides no `Last-Modified`/`ETag` validators. | + +### Medium tier — batch 2 (guides + document scrapers + remote scrapers) + +All ✅ Fixed; verified by the guide/scraper suites + new regression tests where behavioral. + +| ID | Fix summary | +|----|-------------| +| CBB-04 | `_extract_steps_python` descends one level into the test-function wrapper (else module body) instead of `ast.walk`, which flattened nested control flow out of context. | +| CBB-05 | `ai_enhancer` batch analysis maps back by an echoed `index` (was positional → a dropped/reordered entry shifted every later example's analysis). | +| CBB-06 | `_is_test_class` matches a base that *is* a `TestCase` (bare/`*TestCase`), not the `"Test" in base.id` substring that matched `LatestConfig`/`TestableMixin`. | +| CBB-07 | Index TOC sorts by a difficulty rank map (was alphabetical → advanced/beginner/intermediate). | +| CBB-08 | c3x failure returns `analysis_type="c3x_failed"` (distinct from empty) and the temp dir is removed in `finally` (was leaked every run). | +| CBB-13 | `guide_enhancer` step-enhancements map by the model's explicit `step_index`; positional fallback only when none are indexed (extracted to `_parse_step_enhancements`). | +| DOC-02 | `smart_categorize` assigns to the highest-scoring category (was the first over threshold → config-order dependent). | +| DOC-03 | Link extraction strips tracking params (`utm_*`/`fbclid`/…) + sorts the query before dedup, so tracking variants don't re-crawl the same page (preserves `?lang=`). | +| DOC-05 | PDF cross-page code merge requires a real continuation token / unbalanced bracket / block-opener colon (was `any([...])` ≈ always true) and keeps both pages' `code_blocks_count` consistent. | +| DOC-06 | Async `--dry-run` caps the preview at 20 even for unlimited configs (matches sync; was previewing the whole site). | +| MED-01 | `github_fetcher` follows `Link: rel="next"` pagination (was a single ≤100 page). Regression test added. | +| MED-02 | Slack: per-channel try/except so one channel can't abort all; `conversations_history` retries on 429 with `Retry-After`. | +| MED-03 | Discord: `ClientTimeout(30)`, 429 `Retry-After` retry, and a guarded `before` cursor (`.get("id")`). | + +### Medium tier — batch 3 (systemic nav-link fix) + +| ID | Status | Fix summary | +|----|--------|-------------| +| DOC-07 + MED-04 | ✅ Fixed | **Broken SKILL.md nav links across all 7 scrapers** (pdf/html/word/epub/jupyter/asciidoc/pptx). Each scraper now routes its SKILL.md nav, `index.md`, and reference-file writer through ONE filename helper (`_reference_filename`, or the pre-existing `_ref_filename` for asciidoc/jupyter), so nav links match the actual range/basename filenames instead of pointing at nonexistent `sanitize(title).md`. Regression test: `test_pdf_scraper.py::...test_reference_filename_matches_nav_and_index`. | +| ADP-01 | ✅ Fixed | **`--streaming` was dead for every target.** `StreamingAdaptorMixin` was never inherited, so `hasattr(adaptor, "package_streaming")` was always False. Fixed the mixin's fragile `sys.path` import (now `from skill_seekers.cli.streaming_ingest import …`) and made all 8 RAG/vector adaptors (langchain, llama-index, chroma, haystack, weaviate, qdrant, faiss, pinecone) inherit it. `--streaming` now produces a real streamed package; non-streaming targets (claude/markdown) still fall back with the announced message. Regression + end-to-end test in `test_adaptors/test_langchain_adaptor.py`. | + +| CLI-04 | ✅ Fixed | **`_reconstruct_argv` argv round-trip removed; all 15 legacy commands migrated to namespace dispatch.** Each command's `main(args=None)` now accepts the central parsed namespace (re-parses only when invoked standalone via the `skill-seekers-` entry points). The dispatcher calls `module.main(args=args)` directly and `_reconstruct_argv` is deleted. Fixed the drift the round-trip had been masking: aligned 4 central positional dests to the modules (`skill_directory`→`skill_dir`, `input_file`→`input` via `metavar`), added `--welcome` to the config parser, and backfill module-parser defaults for options the central parser doesn't expose. **This also fixed a pre-existing live bug: `skill-seekers workflows …` was broken** (`unrecognized arguments: --workflows-action`) and now works. Verified: 345 command-suite tests + all 16 commands dispatch cleanly. | + +Deferred (Medium): +- **DOC-04** — `DEFAULT_MAX_PAGES = -1` (unbounded default crawl). Changing the default to finite is a user-visible behavior change; left for an explicit decision (not selected for fixing). + +> **Test-harness note:** the *full* `pytest tests/` run is unsafe to execute repeatedly — `@pytest.mark.slow` tests like `test_bootstrap_skill::test_bootstrap_script_runs` and the `test_create_integration_basic` subprocess tests invoke the real `create` pipeline, which spawns live LLM agents (a fork-bomb). Verify with targeted per-module test files and `-m "not slow and not integration"`. + +--- + +## Triage index — Critical & High + +| ID | Sev | Title | File | +|----|-----|-------|------| +| ENH-01 | Critical | Truncated SKILL.md silently overwrites the original | `enhance_skill.py` / `agent_client.py` / `adaptors/claude.py` | +| SCAN-01 | Critical | Scan AI github-config generation always rejected by validator | `scan_command.py:426` | +| CBB-01 | Critical | LOCAL-mode guide enhancement calls a non-existent method (silent no-op) | `guide_enhancer.py:307` | +| MCP-01 | Critical | `push_config` strips its own token → broken for private repos | `mcp/config_publisher.py:170,210` | +| CBA-13 ★ | Critical | GDScript class dicts use `"bases"`; consumer reads `"base_classes"` | `code_analyzer.py:1986` | +| SCAN-02 | High | Non-numeric AI `confidence` crashes the whole scan | `scan_command.py:394` | +| CLI-01 | High | `--no-issues/--no-changelog/--no-releases` are dead on `create` | `create_command.py:270` | +| CLI-02 | High | `--output` ignored for all non-local sources; enhancement targets wrong dir | `create_command.py:215` | +| CBA-01 | High | Singleton precedence bug bypasses the confidence gate | `pattern_recognizer.py:453` | +| CBA-02 | High | `total_emissions` iterates `.items()` → always 2×#signals | `signal_flow_analyzer.py:172` | +| CBA-03 | High | JS/TS class body truncated at first `}` → later methods dropped | `code_analyzer.py:301` | +| CBA-04 | High | Subclass detection misses generic/qualified bases | `pattern_recognizer.py:819` | +| CBB-02 | High | Verification points overwritten/misattributed across steps | `how_to_guide_builder.py:185` | +| MCP-02 | High | `install_skill` package-path regex never matches real output | `tools/packaging_tools.py:602` | +| MCP-03 | High | `scrape_docs` drops `skip_scrape` and `dry_run` (unified) | `tools/scraping_tools.py:144` | +| MCP-04 | High | `submit_config` has no idempotency guard → duplicate issues | `tools/source_tools.py:570` | +| MCP-05 | High | `install_skill` infers failure from `"âŒ"` substring | `tools/packaging_tools.py:523` | +| ENH-02 | High | Direct Moonshot key misrouted to OpenAI | `agent_client.py:202` | +| ENH-03 | High | Headless "success" requires the file to *grow* | `enhance_skill_local.py:900` | +| ENH-04 | High | Kimi stdout parser drops all multi-line responses | `agent_client.py:467` | +| ENH-05 | High | Stray `.json` in agent cwd returned as the LLM response | `agent_client.py:419` | +| CBB-03 | High | `common_problems.remove()` mutates shared insights | `generate_router.py:421` | +| CBB-12 ★ | High | `dependencies=imports` shares one mutable list across examples | `test_example_extractor.py:394` | + +--- + +# Critical + +## ENH-01 — Truncated SKILL.md silently overwrites the original `Confirmed · High` +**Location:** `cli/enhance_skill.py:75-94`; `cli/agent_client.py:286-301`; reachable save path `cli/adaptors/claude.py:384-405`; unified path `cli/unified_scraper.py:2079`. +**Trigger:** Enhancement output exceeds `max_tokens` (4096 in `enhance_skill.py`/`agent_client.py`; 8192 in the unified path), or the model otherwise stops with `stop_reason="max_tokens"`. +**Mechanism:** All call sites read `message.content[0].text` / iterate for `block.text` with **no** check of `message.stop_reason` (Anthropic) or `choices[0].finish_reason` (OpenAI). The reachable save path renames the original to `SKILL.md.backup` **first** (claude.py:400), then writes the new content (claude.py:404). So a truncated body overwrites the live file; the only intact copy is the backup. +**Impact:** Any non-trivial skill gets silently chopped to ~4k output tokens (broken frontmatter/fences) and saved as "complete." Silent data loss of the primary deliverable; the run reports success. +```python +message = client.messages.create(model=..., max_tokens=4096, ...) +enhanced_content = message.content[0].text # no stop_reason check +if skill_md_path.exists(): + skill_md_path.rename(skill_md_path.with_suffix(".md.backup")) # original moved away first +skill_md_path.write_text(enhanced_content, ...) # truncated body wins +``` +**Fix:** Check the stop reason before touching the original; abort on truncation. Also write to a temp file and `os.replace` only after a successful, complete write (so failure can never leave the dir without a `SKILL.md`). +```python +if getattr(message, "stop_reason", None) == "max_tokens": + print("⌠Response truncated (max_tokens); leaving original SKILL.md intact.") + return False +``` + +## SCAN-01 — Scan AI github-config generation always rejected by the validator `Confirmed · High` +**Location:** `cli/scan_command.py:426` (`_GENERATE_SCHEMA_HINT`); validated at `scan_command.py:555` via `UniSkillConfigValidator(data).validate()`; rejection at `cli/config_validator.py:266-272` against `VALID_DEPTH_LEVELS` (`config_validator.py:71`). +**Trigger:** Any unmapped detection that falls through to `generate_config_with_ai`. The hint sits inside the `"type": "github"` source block, and `"standard"` is a plain literal, so a prompt-compliant model copies it verbatim. +**Mechanism:** The schema hint tells the AI to emit `"code_analysis_depth": "standard"`, but the validator's github-source branch only accepts `{surface, deep, full}`. `generate_config_with_ai` validates AI output and rejects on raise; the retry reuses the same hint, so attempt 2 reproduces the same invalid value. After `max_attempts` the detection lands in `result.failed`. +**Impact:** The headline `scan` feature — "generate a config for an unmapped framework" — systematically produces nothing for any library with a github source. Two wasted AI calls per detection, zero output. +```python +"code_analysis_depth": "standard", # scan_command.py:426 — not a valid level +# config_validator.py:71 +VALID_DEPTH_LEVELS = {"surface", "deep", "full"} +``` +**Fix:** `"code_analysis_depth": "deep",` (or `"surface"`). + +## CBB-01 — LOCAL-mode guide enhancement calls a non-existent method `Confirmed · High` +**Location:** `cli/guide_enhancer.py:307`. +**Trigger:** `build-how-to-guides` runs with AI enhancement when no API key is set (`auto` → `AgentClient.mode == "local"`) or `ai_mode="local"`. +**Mechanism:** `_enhance_via_local` calls `self._call_claude_local(prompt)`, which is defined nowhere (only `_call_ai` at :263 exists; every other call site uses it). The `AttributeError` is swallowed by the broad `except Exception` in `enhance_guide` (:106-109), which logs and returns the original `guide_data`. +**Impact:** Every LOCAL-mode (no-API-key) guide build silently returns **unenhanced** guides while logging a generic "AI enhancement failed." Local-mode guide enhancement has never worked. +```python +def _enhance_via_local(self, guide_data: dict) -> dict: + prompt = self._create_enhancement_prompt(guide_data) + response = self._call_claude_local(prompt) # NameError: no such method +``` +**Fix:** `response = self._call_ai(prompt)`. + +## MCP-01 — `push_config` strips its own auth token → broken for private repos `Confirmed · High` +**Location:** `mcp/config_publisher.py:170,210` (compounded by ★MCP-12 / ★MCP-13). +**Trigger:** Any `push_config` to a private/authenticated source repo. +**Mechanism:** The clone uses a token-injected URL, but line 170 immediately runs `origin.set_url(git_url)` (tokenless) "to scrub the token," and the push at line 210 goes through that tokenless `origin`. `marketplace_publisher.py:160` does it correctly — it pushes to a freshly token-injected URL. +**Impact:** The push fails with an auth error *after* the commit, leaving the cache repo with an orphan commit. `push_config` to the primary (private) config source is effectively non-functional. ★MCP-12 and ★MCP-13 (below) make the second run fail at pull and leave the cache on a stranded branch — together they fully break the feature and corrupt the cache. +```python +repo_obj.remotes.origin.set_url(git_url) # :170 scrubs token from origin +... +repo.remotes.origin.push(target_branch) # :210 pushes via tokenless origin +``` +**Fix:** `repo.git.push(self.git_repo.inject_token(git_url, token), target_branch)`. + +## CBA-13 ★ — GDScript class dicts use key `"bases"`; consumer reads `"base_classes"` `Confirmed · High` +**Location:** `cli/code_analyzer.py:1986` vs `cli/pattern_recognizer.py:367`. +**Trigger:** Any GDScript file with `class_name Foo extends Bar` run through `PatternRecognizer`. +**Mechanism:** `_analyze_gdscript` emits class dicts with the key `"bases"` — the only one of 11 analyzers to do so (the other 10 use `"base_classes"`). `_convert_to_signatures` reads `cls.get("base_classes", [])`, so for GDScript the base list is always `[]`. +**Impact:** All inheritance-based pattern detection (Strategy/Template-Method `subclasses`, Observer/Chain families — every `name in cls.base_classes` check) is silently dead for GDScript, a first-class target (C3.10 signal-flow pipeline). +```python +classes.append({ + "name": class_name, + "bases": [extends] if extends else [], # wrong key + ... +}) +``` +**Fix:** rename to `"base_classes"`. + +--- + +# High + +## SCAN-02 — Non-numeric AI `confidence` crashes the whole scan `Confirmed · High` +**Location:** `cli/scan_command.py:394`; propagates through `run_scan` → `_amain` (only catches `KeyboardInterrupt`/`RuntimeError`). +**Trigger:** AI returns `"confidence": "high"` / a list / explicit `null` (LLMs do this despite the "0-1" instruction). Missing key is safe (defaults to `0.0`). +**Mechanism:** `float(entry.get("confidence", 0.0))` is inside the per-entry loop, which is **not** wrapped in try/except (only `client.call` is). `float("high")` raises `ValueError`; it unwinds out of `asyncio.run`. +**Impact:** One malformed entry aborts the entire command with a traceback, discarding all valid detections. +```python +confidence = float(entry.get("confidence", 0.0)) # unguarded +``` +**Fix:** wrap in `try/except (TypeError, ValueError): continue`. + +## CLI-01 — `--no-issues/--no-changelog/--no-releases` are dead on `create` `Confirmed · High` +**Location:** `cli/create_command.py:270-283`; dests in `arguments/create.py:298-318` & `arguments/github.py:49-69`; consumer `github_scraper.py:257-266`. +**Trigger:** `skill-seekers create owner/repo --no-issues` (or `--no-changelog`/`--no-releases`). +**Mechanism:** The parser defines the **negative** dests `no_issues/no_changelog/no_releases`, but `_build_config` reads the never-defined positive keys `include_issues/include_changelog/include_releases` via `getattr(..., True)`, so they're always `True`. No `no_*→include_*` translation exists anywhere. `include_code` has no flag at all. +**Impact:** `--no-issues` still fetches every issue (potential rate-limit exhaustion); the three opt-out flags are no-ops on the only entry point that exists. +```python +"include_issues": getattr(self.args, "include_issues", True), # attr never exists +``` +**Fix:** `"include_issues": not getattr(self.args, "no_issues", False)` (and the others). + +## CLI-02 — `--output` ignored for all non-local sources; enhancement targets the wrong dir `Confirmed · High` +**Location:** `cli/create_command.py:215-430` (`_build_config`) & `:450-457` (`_run_enhancement`); scrapers `doc_scraper.py:209`, `notion_scraper.py:99`, `pdf_scraper.py:79`, `unified_scraper.py:120`. +**Trigger:** `create --output /tmp/x` (anything but `output/{name}`), especially with `--enhance-level > 0`. +**Mechanism:** `_build_config` only forwards `output_dir` for the `local` branch; the other scrapers hardcode `self.skill_dir = f"output/{name}"`. But `_run_enhancement` computes `skill_dir = ctx.output.output_dir`, which *does* honor `--output`. +**Impact:** Output always lands in `output/{name}` (flag silently ignored); enhancement then runs against the empty `--output` dir and fails — and since `_run_enhancement` swallows exceptions (★CLI-06), the run still exits 0 with an un-enhanced skill in the wrong place. +**Fix:** have every converter read `config.get("output_dir") or f"output/{self.name}"`, and set `config["output_dir"]` in every `_build_config` branch. + +## CBA-01 — Singleton precedence bug bypasses the confidence gate `Confirmed · High` +**Location:** `cli/pattern_recognizer.py:453`. +**Mechanism:** `if has_instance_method or has_init_control and confidence >= 0.5:` parses as `has_instance_method or (...)`. Any class with a method named `instance`/`getInstance` is flagged Singleton at confidence 0.4, bypassing the 0.5 gate. +**Impact:** False-positive Singletons for any class exposing an `instance`-style accessor (e.g. ORM models). +**Fix:** `if (has_instance_method or has_init_control) and confidence >= 0.5:`. + +## CBA-02 — `total_emissions` iterates `.items()` → always 2× signal count `Confirmed · High` +**Location:** `cli/signal_flow_analyzer.py:172` (line 171 correctly uses `.values()`). +**Mechanism:** `sum(len(emits) for emits in self.signal_emissions.items())` — each `emits` is a `(key, list)` 2-tuple, so `len` is always 2. Result = `2 × (#emitting signals)`, decoupled from real emission count. +**Impact:** "Total Emissions" in every Godot signal-flow report (`signal_flow.json`, `signal_reference.md`) is meaningless. +**Fix:** `.values()`. + +## CBA-03 — JS/TS class body truncated at first `}` `Confirmed · High` +**Location:** `cli/code_analyzer.py:301`. +**Mechanism:** `class_block_end = content.find("}", class_block_start)` finds the **first** brace, not the matching one (C#/Java/Kotlin brace-count; JS doesn't). For any real JS class, the body ends at the first method's closing brace. +**Impact:** All methods after the first are dropped from JS/TS classes, breaking method-count pattern heuristics (Builder/Observer/Strategy). (Fixing this surfaces ★CBA-14.) +**Fix:** use the brace-counting loop already used in `_analyze_csharp`/`_analyze_java`. + +## CBA-04 — Subclass detection misses generic/qualified bases `Confirmed · High` +**Location:** `cli/pattern_recognizer.py:819` (also 805/926/1297/1324/1476). +**Mechanism:** `class_sig.name in cls.base_classes` is exact-match, but C# bases are stored verbatim (`BaseStrategy`), so `"BaseStrategy" in ["BaseStrategy"]` is False. (Java strips generics, so Java works; C#/qualified `Namespace.Base` fail.) +**Impact:** Strategy/Template-Method built on C# generic bases are missed entirely; sibling/family evidence lost. +**Fix:** normalize bases before compare: `b.split("<",1)[0].split(".")[-1].strip()`. + +## CBB-02 — Verification points overwritten / misattributed across steps `Confirmed · High` +**Location:** `cli/how_to_guide_builder.py:185-187`. +**Mechanism:** `_extract_steps_python` (:222-226) already pairs each step with its following assertion. Then `analyze_workflow` does `step.verification = verifications[i]` positionally, but `steps` (non-assert statements) and `verifications` (assert lines) are different filtered lists with divergent lengths/order. +**Impact:** Guides show verification code under the wrong step (e.g. step 1 shows a check that validates step 4's result), and the correct pairing is thrown away. +**Fix:** remove the positional overwrite loop; rely on the per-step pairing already done. + +## CBB-03 — `common_problems.remove()` mutates shared insights `Confirmed · High` +**Location:** `cli/generate_router.py:421,436` (readers at :865, :1022). +**Mechanism:** `common_problems = self.github_issues.get("common_problems", [])` is the shared list (no copy); `.remove(issue)` deletes from it in place for up to 3 skills, **before** the "Common Issues" section and the issues-reference file read it. +**Impact:** Up to 3 of the most label-relevant issues vanish from the summary and `github_issues.md`; output is order-dependent and non-idempotent. +**Fix:** iterate `list(...)` copy and track used issues by id; never `.remove()` the shared list. + +## CBB-12 ★ — `dependencies=imports` shares one mutable list across all examples `Corrected · High→Medium (latent)` +**Location:** `cli/test_example_extractor.py:394,446,490,532` (list built once at :191). +**Mechanism:** The same `imports` list object is assigned as `dependencies` to every `TestExample` from a file, and `how_to_guide_builder._detect_prerequisites` aliases it again into `metadata["required_imports"]`. Aliasing is real, **but** all current consumers only read the list — none mutate it — so there is no observable corruption today. +**Impact:** Latent: any future `.append`/`.sort` on one example's `dependencies` would silently affect all siblings (and the guide prerequisites). Reclassified **Medium** (latent) after verification. +**Fix:** `dependencies=list(imports)` at each call site. + +## MCP-02 — `install_skill` package-path regex never matches real output `Confirmed · High` +**Location:** `mcp/tools/packaging_tools.py:602` vs `cli/package_skill.py:177`. +**Mechanism:** The regex matches `"saved to:"`, but `package_skill.py` prints `"Output: "` and `"✅ Package created: "`. The match always fails, so `zip_path` falls back to a constructed name (`{name}.zip`) that differs from real adaptor names (`{dir}-gemini.tar.gz`, etc.). +**Impact:** The upload phase receives a guessed/non-existent path while the workflow reports success. +**Fix:** match what is actually printed: `r"(?im)^\s*(?:Output|✅ Package created):\s*(.+\.(?:zip|tar\.gz))\s*$"` (better: return the path structurally). + +## MCP-03 — `scrape_docs` drops `skip_scrape` entirely and `dry_run` for unified configs `Confirmed · High` +**Location:** `mcp/tools/scraping_tools.py:144-216` (wrapper `server_fastmcp.py:353-381`). +**Mechanism:** The FastMCP wrapper declares `skip_scrape`, `dry_run`, `enhance_local` and forwards them, but the impl never reads `skip_scrape`/`enhance_local`, and only sets `converter.dry_run` in the non-unified branch. `server_legacy.py` honored all three. +**Impact:** `skip_scrape=True` re-scrapes from the network (20-45 min wasted, ignores cache); `dry_run=True` performs a full scrape for unified configs. Real server_fastmcp ↔ server_legacy drift. +**Fix:** read `skip_scrape`, set `converter.dry_run = dry_run` and `converter.skip_scrape = skip_scrape` in both branches. + +## MCP-04 — `submit_config` has no idempotency guard `Confirmed · High` +**Location:** `mcp/tools/source_tools.py:529-574`. +**Mechanism:** Calls `repo.create_issue(title=f"[CONFIG] {name}", ...)` unconditionally; unlike scan's `maybe_publish` (`_find_existing_issue`), it never searches for an existing open issue. +**Impact:** Re-runs create duplicate `[CONFIG] {name}` issues, polluting the review queue. +**Fix:** query `is:issue is:open in:title "{name}"` before creating; return the existing URL if found. + +## MCP-05 — `install_skill` infers scrape failure from `"âŒ"` substring `Confirmed · Medium-High` +**Location:** `mcp/tools/packaging_tools.py:523`. +**Mechanism:** `if "âŒ" in scrape_output:` discards the structured returncode that `_run_converter` already provides. +**Impact:** A single skipped page logging `âŒ` aborts the workflow; a real failure without that emoji proceeds to package an empty skill and reports success. (★MCP-15 is the identical issue for the packaging phase, which has no check at all.) +**Fix:** return a status flag from `scrape_docs_tool`/`_run_converter` and branch on it. + +## ENH-02 — Direct Moonshot/Kimi key misrouted to OpenAI `Confirmed · High` +**Location:** `cli/agent_client.py:202-217`. +**Mechanism:** `_detect_provider_from_key` returns `"moonshot"` for an `sk-` key only if `MOONSHOT_API_KEY` env equals it; otherwise any `sk-` key → `"openai"`. Moonshot keys are `sk-`-prefixed, so a key passed via `--api-key` without the env var builds an `OpenAI` client with `gpt-4o`. +**Impact:** Direct Moonshot-key usage fails auth (hits `api.openai.com`) or routes to the wrong provider, surfacing as a misleading OpenAI error. +**Fix:** accept an explicit provider hint (e.g. `SKILL_SEEKER_PROVIDER`) before defaulting to OpenAI. + +## ENH-03 — Headless "success" requires the file to *grow* `Confirmed · High` +**Location:** `cli/enhance_skill_local.py:900` (headless), `:1087` (background), `:1213` (daemon). +**Mechanism:** Headless gates success on `new_mtime > initial_mtime and new_size > initial_size`; background/daemon gate only on `returncode == 0`. The three modes disagree. +**Impact:** A legitimate condensing/same-size rewrite is reported as failure in the default headless mode ("SKILL.md was not updated"), so CI/automation treats valid runs as errors. +**Fix:** gate on `new_mtime > initial_mtime` (file changed), not strictly larger size; share one predicate across modes. + +## ENH-04 — Kimi stdout parser drops all multi-line responses `Confirmed · High` +**Location:** `cli/agent_client.py:467`. +**Mechanism:** `re.findall(r"TextPart\(type='text', text='(.+?)'\)", raw_output)` has no `re.DOTALL`, so `.` doesn't match newlines; every multi-line SKILL.md matches nothing and the function returns the raw `TurnBegin(...)/StepBegin(...)` debug dump. The non-greedy `'` also splits on embedded apostrophes. +**Impact:** With `--agent kimi`, SKILL.md is replaced by Kimi's raw debug log (or fragmented at apostrophes). +**Fix:** add `re.DOTALL` and anchor the terminator to the next record boundary. + +## ENH-05 — Stray `.json` in agent cwd returned as the LLM response `Confirmed · High (conditional)` +**Location:** `cli/agent_client.py:385-393, 419-435` *(downgraded from Critical — conditional trigger)*. +**Mechanism:** When `output_file` is None, the prompt is `prompt.md` and no "write response" instruction is added, yet the code returns `temp/response.json` if present, else **any** `*.json` in the temp dir. The guard `!= "prompt.json"` is dead (the file is `prompt.md`). The subprocess cwd is `temp_path`, so any incidental `.json` the agent writes becomes the "response," shadowing stdout. +**Impact:** Non-deterministic: enhancement can return an unrelated JSON file's contents instead of the model's actual output. Conditional on the agent writing a stray `.json`, hence High not Critical. +**Fix:** only consult the response file when `output_file` was explicitly requested (and match exactly that file); otherwise return stdout. + +--- + +# Medium + +## Scan + config +- **SCAN-03 — `get_api_key("moonshot")` env fallback dead.** `config_manager.py:314` — `env_map` omits `moonshot`, so a user who exports `MOONSHOT_API_KEY` (no config-file key) gets `None`, while `config_command.py:329` shows "(from environment)". `set_api_key`'s error text also omits moonshot. *Fix:* add `"moonshot": "MOONSHOT_API_KEY"`. `Confirmed` +- **★SCAN-04 — `--dry-run` writes `./configs/` and hits the network.** `scan_command.py:1162` calls `resolve_config_path(lookup, auto_fetch=allow_network)` (default True) in the dry-run branch; on an API hit `fetch_config_from_api` performs HTTP GETs and writes `./configs/.json`, contradicting the "DRY RUN — no files written" promise (`:1287`). *Fix:* pass `auto_fetch=False` in dry-run. `Confirmed` + +## CLI core +- **CLI-03 — `ExecutionContext.reset()` never called in production.** `execution_context.py:207-228` — the singleton guard returns the existing instance; `reset()` exists but only tests call it. A 2nd in-process `create` reuses the 1st's name/output/settings. Latent today (MCP runs scrapes in subprocesses; CLI is one-shot). *Fix:* call `reset()` at the top of `CreateCommand.execute()`. `Confirmed` +- **★CLI-04 — Legacy `_reconstruct_argv` round-trips the full namespace.** `main.py:179-186` re-serializes every namespace attribute to argv for ~14 legacy commands; attributes unknown to a sub-parser are emitted as `--unknown-flag value`, which the sub-parser can reject. Brittle; the documented migration to `COMMAND_CLASSES` is the fix. `Confirmed` + +## Adaptors +- **ADP-01 — `--streaming` is dead for every adaptor.** `streaming_adaptor.py:21` + `package_skill.py:149` — `StreamingAdaptorMixin` is never imported or inherited by any registered adaptor, so `hasattr(adaptor,"package_streaming")` is always False. *Corrected:* the fallback **announces** "Streaming not supported… using standard packaging" (not silent), but the feature is fully dead. *Fix:* have RAG adaptors inherit the mixin or register the streaming variants. `Corrected` +- **ADP-02 — `except (ImportError, Exception)` masks all import errors.** `chroma.py:236`, `pinecone_adaptor.py:328` — `Exception` subsumes `ImportError`, so a broken-but-installed package (e.g. chromadb/py3.14 pydantic-v1) is misreported as "not installed." *Fix:* split the handlers. `Confirmed` + +## MCP +- **MCP-06 — `list_configs` reads top-level `base_url`; unified configs store it under `sources[0]`.** `tools/config_tools.py:136` — every config `generate_config` produces lists a blank URL. *Fix:* fall back to `sources[].base_url`. `Confirmed` +- **★MCP-12 — `config_publisher` `get_source` raises `KeyError`; the `if not source:` branch is dead.** `config_publisher.py:140-143` — an unknown source name raises a raw `KeyError` (quoted message) instead of the curated "Available sources" error. *Fix:* wrap in `try/except KeyError`. `Confirmed` +- **★MCP-13 — `config_publisher` tokenless re-pull on the 2nd run.** `config_publisher.py:161-172` — on a cached repo it pulls via `origin` (scrubbed tokenless by the prior run's :170) before re-injecting the token, so a 2nd push to a private repo fails at pull. Compounds MCP-01. *Fix:* `origin.set_url(clone_url)` before pulling. `Confirmed` + +## Codebase analysis (AST / pattern / dependency) +- **CBA-05 — "protocol" boosts ANY pattern.** `pattern_recognizer.py:1538-1542` — `type=="Strategy" and "duck typing" in s or "protocol" in s` precedence → the `"protocol"` clause fires for any Python pattern. *Fix:* parenthesize the OR group. `Confirmed` +- **CBA-06 — "event" boosts ANY pattern (+ false "EventEmitter detected").** `pattern_recognizer.py:1559-1563` — same precedence flaw for JS/TS. `Confirmed` +- **CBA-07 — `_resolve_import` never maps dotted module → file path.** `dependency_analyzer.py:784-814` — `file_nodes` keys are file paths (`src/pkg/mod.py`) while `imported_module` is `pkg.mod`; no dot→slash conversion. The dependency graph is essentially edgeless and cycle detection returns empty for **all dotted-import languages** (Python/Java/C#/Kotlin/Go/Rust/Ruby/PHP). *Corrected:* Godot resource graphs (slash paths) **do** resolve. *Fix:* convert dots to slashes + suffix-match against `file_nodes`. `Confirmed` +- **CBA-08 — Kotlin top-level-fn `indent > 4` heuristic.** `code_analyzer.py:1379-1383` — tab/2-space-indented methods are misclassified as top-level, and indented top-level fns are dropped. *Fix:* track brace depth instead of indentation. `Confirmed` +- **CBA-09 — Kotlin `is_suspend` look-behind reads before the modifier.** `code_analyzer.py:1385` — the 50-char window precedes the match (which already includes `suspend`), so real `suspend fun` reads False and a neighboring `suspend` reads True. *Fix:* `"suspend" in match.group(0)`. `Confirmed` +- **CBA-10 — `gd_resource` regex drops `script_class` on compact headers.** `code_analyzer.py:1875` — trailing `\s+` can't match `]`, so `[gd_resource type="X" script_class="Y"]` yields `script_class=None`. *Fix:* end with `\s*[\]\s]`. `Confirmed` +- **★CBA-14 — JS method extractor matches call-sites and keywords.** `code_analyzer.py:391-419` — `(\w+)\s*\(...\)` matches any `ident(args)`; only 4 keywords are blocklisted, so `this.helper(b)`, `setTimeout(...)` become "methods." Masked today by CBA-03 (truncation); surfaces once CBA-03 is fixed. *Fix:* anchor to `\s*\{` declarations and exclude the full JS keyword set. `Confirmed` +- **★CBA-15 — GDScript signal doc comment read from the wrong line.** `code_analyzer.py:2043-2047` — for a signal at column 0, `content[:start].split("\n")[-1]` is the empty pre-`signal` text; the doc comment is `lines[-2]`. So `## doc \n signal x` always yields `documentation=None`. *Fix:* use `lines[-2]`. `Confirmed` + +## Codebase analysis (example / guide / router) +- **CBB-04 — `ast.walk` flattens nested statements.** `how_to_guide_builder.py:204-206` — statements inside `if`/`for`/`with`/`try` are hoisted into the flat step list, losing control-flow context. *Fix:* iterate top-level body only. `Confirmed` +- **CBB-05 — AI `ai_analysis` aligned by position, not `example_id`.** Real site `ai_enhancer.py:360-362` (the extractor re-merge at `test_example_extractor.py:1088` is actually order-safe). If the model drops/reorders an entry, every later example gets another's analysis (and `tutorial_group`, which drives guide grouping). *Fix:* key by `example_id`. `Confirmed` +- **CBB-06 — `_is_test_class` `"Test" in base.id` over-matches.** `test_example_extractor.py:218-225` — any base whose name *contains* "Test" (`LatestConfig`, `TestableMixin`) flags the class as a test. *Fix:* `endswith("TestCase")` / explicit bases. `Confirmed` +- **CBB-07 — Index TOC sorts complexity alphabetically.** `how_to_guide_builder.py:789` — `sorted(..., key=g.complexity_level)` → `advanced, beginner, intermediate`. *Fix:* explicit rank map. `Confirmed` +- **CBB-08 — c3x failures look like empty results; temp dir leaks.** `unified_codebase_analyzer.py:288-305` — broad `except` returns `analysis_type:"c3x"` with empty arrays + an easily-ignored `error` key; `tempfile.mkdtemp` (:255) is never cleaned. *Fix:* mark a distinct failure type and `shutil.rmtree` in `finally`. `Confirmed` +- **★CBB-13 — Guide step-description index trust.** `guide_enhancer.py:552-560` + `how_to_guide_builder.py:1050-1055` — step explanations routed by AI-supplied `step_index` with an enumerate fallback; a dropped entry shifts every subsequent explanation onto the wrong step. *Fix:* require an explicit in-range `step_index`; skip otherwise. `Confirmed` + +## Document scrapers +- **DOC-02 — `smart_categorize` assigns to first category over threshold, not max.** `doc_scraper.py:1837-1840` — `break`s on the first category reaching score 2 (config-order dependent); siblings use `max(scores,...)`. *Corrected severity High→Medium.* *Fix:* collect all scores, assign to `max`. `Confirmed` +- **DOC-03 — Link extraction keeps query strings.** `doc_scraper.py:432-437` — only `#fragment` is stripped, so `?lang=`/`?utm=` variants are distinct pages (crawler-trap risk in unlimited mode). *Fix:* drop tracking params / normalize query before dedup. `Confirmed` +- **DOC-04 — `DEFAULT_MAX_PAGES = -1` ⇒ unbounded default crawl.** `doc_scraper.py:1443-1450`; `defaults.json:7` — a config without `max_pages` enters unlimited mode. *Fix:* finite default (e.g. 1000); require explicit `-1` for unlimited. `Confirmed (by-design footgun)` +- **DOC-05 — PDF cross-page code merge heuristic is ~always true; count drift.** `pdf_extractor_poc.py:606-623` — `any([not endswith("}"), not endswith(";"), ...])` merges unrelated adjacent blocks; `code_blocks_count` decremented on next page but not incremented on current. *Fix:* require a real continuation token; recompute counts from `len(code_samples)`. `Confirmed` +- **DOC-06 — Async unlimited dry-run doesn't cap at 20.** `doc_scraper.py:1613-1620` — sets `preview_limit=inf` before checking `dry_run` (sync caps at 20 unconditionally), so async `--dry-run` on a default config previews the entire site. *Fix:* set `preview_limit=20` when `dry_run` first. `Confirmed` +- **DOC-07 — Broken SKILL.md nav links (pdf/html/word/epub).** `pdf_scraper.py:530`, `html_scraper.py:1562`, `word_scraper.py:631`, `epub_scraper.py:800` — nav links to `references/{sanitize(title)}.md` but files are written with range/basename names (`_pX-pY`, `_sX-sY`, raw basename). Dead links for any multi-section/multi-category source. (Same root cause as MED-04 — see systemic pattern S2.) *Fix:* derive nav names from the same filename helper that writes the files. `Confirmed` + +## Media / structured / remote scrapers +- **MED-01 — GitHub issues capped at 100 (no Link pagination).** `github_fetcher.py:299-345` — single page, `per_page=min(max,100)`, no `rel="next"`; PR filtering reduces further. *Corrected severity High→Medium.* *Fix:* loop on the `next` link. `Confirmed` +- **MED-02 — Slack 429 aborts all channels.** `chat_scraper.py:648-722` — `conversations_history` has no 429/retry, and the per-channel loop is in one try whose `except SlackApiError` raises a fatal `RuntimeError`, losing already-fetched channels. *Fix:* per-channel try/except + `Retry-After` backoff. `Confirmed` +- **MED-03 — Discord session has no timeout; 429 silently breaks.** `chat_scraper.py:827-878` — no `ClientTimeout`; a 429 is treated as a generic non-200 → silent `break`. *Fix:* add timeout + honor `Retry-After`. `Confirmed` +- **MED-04 — Broken SKILL.md nav links (jupyter/asciidoc/pptx).** `jupyter_scraper.py:966`, `asciidoc_scraper.py:841`, `pptx_scraper.py:1467` — same nav vs file naming mismatch as DOC-07. *Verified:* Confluence/RSS are consistent (not affected). *Fix:* shared filename helper. `Confirmed` + +## Enhancement + unified builder +- **ENH-06 — `_call_api` ignores the caller's `timeout`.** `agent_client.py:295-309` — `call()` computes a timeout (default 45 min) but `_call_api` hardcodes `timeout=120`. Large prompts fail at 2 min with a misleading "connection error." *Fix:* thread `timeout` through. `Confirmed` +- **ENH-07 — `scrape_all_sources` reports the bucket count, not sources scraped.** `unified_scraper.py:256` — `len(self.scraped_data)` is always ~17. *Fix:* `sum(len(v) for v in ...)`. `Confirmed` +- **ENH-08 — All-sources-fail still builds and returns 0.** `unified_scraper.py:252-254` — per-source exceptions swallowed; `run()` proceeds to `build_skill` on empty data and exits 0. *Fix:* count scraped sources; return non-zero on zero. `Confirmed` +- **ENH-09 — "Official Documentation" reads `sources[0]` regardless of type.** `unified_skill_builder.py:280` — prints `N/A` (or a non-docs URL) if github is listed first. *Fix:* filter `type == "documentation"`. `Confirmed` +- **ENH-10 — `DEBUG:` log lines left in production synthesis.** `unified_skill_builder.py:327-332` — `logger.info("DEBUG: ...")` and `logger.warning("DEBUG: ... NOT FOUND!")` fire on every docs+github synthesis. *Fix:* `logger.debug`, drop the alarm wording. `Confirmed` +- **★ENH-11 — Gemini API mode ignores `timeout` and `max_tokens`.** `agent_client.py:312-315` — `generate_content(prompt)` with no `generation_config`/timeout; output capped at the model default, request unbounded. With ENH-01 the truncation is doubly invisible. *Fix:* pass `max_output_tokens`/`request_options` and check `finish_reason`. `Confirmed` +- **★ENH-12 — Provider-priority lists are inconsistent; Moonshot dropped in `_pick_mode`.** `agent_client.py:84-90` honors `MOONSHOT_API_KEY`, but `enhance_command._pick_mode` and `enhance_skill_local._detect_api_target` only check claude/gemini/openai. A Moonshot-only user is silently dropped to LOCAL mode by the `enhance` command. *Fix:* add a moonshot/kimi branch; share one priority order. `Confirmed` + +## Args / infra +- **INF-01 — Embedding cache key omits `normalize`.** `embedding/generator.py:414-418`; `server.py:138,182,209` — cache keyed `(model,text)` only; a `normalize=False` request after a cached `normalize=True` returns the wrong (normalized) vector. *Fix:* include `int(normalize)` in the key. `Confirmed` +- **INF-02 — `cleanup_old` folds the date into the group key.** `benchmark/runner.py:293-295` — filename is `{name}_{%Y%m%d_%H%M%S}`; `"_".join(parts[:-1])` leaves `{name}_{date}`, so retention is per-name-per-day → old files never pruned. *Fix:* `parts[:-2]`. `Confirmed` +- **INF-03 — `peak_mb` never samples during the op.** `benchmark/framework.py:184-192` — only `max(before, after)`; transient spikes invisible, so leak/memory recommendations under-report. *Fix:* sample RSS on a background thread during `yield`. `Confirmed` +- **INF-04 — `compare()` divides by zero on instant ops.** `benchmark/runner.py:160,195` — no guard on `current.duration == 0`. *Fix:* guard with `float("inf")`. `Confirmed` +- **INF-05 — Header change-detection misses validator-less servers.** `sync/detector.py:270-277` — returns `False` (unchanged) when neither `Last-Modified` nor `ETag` is present, so `batch_check_headers` silently drops genuinely-changed pages (the `except` branch returns `True`, inconsistently). *Fix:* return `True` when no validators are available. `Confirmed` + +--- + +# Low + +## Scan + config +- **SCAN-05 — API-fetched configs written to `./configs/` regardless of `--out`.** `config_fetcher.py:196` — hardcoded `destination="configs"` pollutes CWD (scan re-writes to out_dir anyway). *Fix:* thread the out dir / temp dir through. `Confirmed` +- **SCAN-06 — Module-level `logging.basicConfig` in a library.** `config_validator.py:33` — can win over scan's `--verbose` depending on import order. *Fix:* remove from the library module. `Confirmed` +- **SCAN-07 — Duplicate-slug detections double-count.** `scan_command.py:1149-1199` — the diff dedups by slug, but the main loop double-writes/double-counts duplicate-slug detections. *Fix:* dedup detections by `_config_filename_for`. `Confirmed` + +## CLI core +- **CLI-05 — `run()` success log prints `output/{name}` for local builds.** `skill_converter.py:46` + `codebase_scraper.py:2154` — artifacts go to `output_dir` (honors `--output`) but the base log shows `skill_dir`. *Fix:* set `self.skill_dir = str(self.output_dir)`. `Confirmed` +- **CLI-06 — confluence/notion `max_pages` dead `DEFAULTS` fallback.** `create_command.py:404,415` — `getattr(..., DEFAULTS[...])` fallback is unreachable (`max_pages` always present as `None`); harmless because `None` is treated as unlimited like `-1`. *Corrected (no behavioral impact).* `Corrected` +- **★CLI-07 — `_run_enhancement`/`_run_workflows` swallow all exceptions; exit 0.** `create_command.py:504-516` — enhancement/workflow failure never affects the exit code (CI can't detect it). Compounds CLI-02. *Fix:* track success, return non-zero or emit a clear failure summary. `Confirmed` +- **★CLI-08 — `merge_sources(mode="ai-enhanced")` not recognized.** `merge_sources.py:766-769` — only `"claude-enhanced"` is special-cased, so the canonical `"ai-enhanced"` falls through to rule-based merging for direct callers. *Fix:* accept both spellings. `Confirmed` +- **★CLI-09 — Module-level `logging.basicConfig` in `merge_sources.py:36`.** Same library-logging hazard as SCAN-06 (imported transitively via `generate_router`). *Fix:* remove. `Confirmed` + +## Adaptors +- **ADP-03 — Weaviate adaptor uses v3-only API; pin allows v4.** `weaviate.py:341-379`; pin `weaviate-client>=3.25.0` — `weaviate.Client`, `schema.create_class`, `client.batch` all raise `AttributeError` on v4. *Fix:* cap `<4` or port to the v4 API. `Confirmed` +- **ADP-04 — OpenAI upload uses `client.beta.vector_stores`.** `openai.py:260-280`; pin `openai>=1.0.0` — promoted to `client.vector_stores` in newer SDKs; deprecated path may raise. *Fix:* prefer top-level with fallback; pin a known-good range. `Confirmed (Conf: Low)` +- **ADP-05 — Unquoted YAML name/description in Claude frontmatter.** `claude.py:76-80` — colon-space / leading-quote in `description` produces invalid YAML (OpenCode/IBM-Bob quote; Claude doesn't). *Fix:* quote/escape the values. `Confirmed` +- **ADP-06 — Enhance renames SKILL.md to `.backup` before writing; empty response loses it.** `openai_compatible.py:349-357` (+ openai/gemini/claude) — a successful-but-empty/None response leaves the dir with no `SKILL.md`. *Fix:* validate non-empty before renaming; write-temp-then-swap. `Confirmed` +- **ADP-07 — LlamaIndex uses `format="hex"` while base docstring claims uuid5.** `llama_index.py:43` vs `base.py:481` — doc/behavior mismatch only (hex ids are valid). *Fix:* correct the docstring. `Confirmed` +- *Verified correct:* the thin OpenAI-compatible subclasses (kimi/deepseek/qwen/openrouter/together/fireworks/minimax) have correct, distinct model ids / endpoints / env vars / registry keys; vector-DB dimensions/metrics are consistent. + +## MCP +- **MCP-07 — `config_publisher` commit `action` term is meaningless.** `config_publisher.py:204` — `target_file.exists()` is always True post-copy. *Fix:* capture existence before copy, or use `"update" if force else "add"`. `Confirmed` +- **MCP-08 — Three tool params typed `str` but default `None`.** `server_fastmcp.py:1342,1403,1404` — should be `str | None`; schema advertises non-nullable. `Confirmed` +- **MCP-09 — `enhance_skill` returns identical shape on success/failure.** `tools/packaging_tools.py:329-344` — callers can't distinguish without substring scanning. *Fix:* structured error signal. `Confirmed` +- **MCP-10 — `sync_config` wrapper hardcodes `max_pages=500`.** `server_fastmcp.py:279` vs `tools/sync_config_tools.py:40` — the impl's `DEFAULTS` (-1/unlimited) default is dead; MCP path silently caps at 500. *Fix:* default to `None`, forward only if set. `Confirmed` +- **MCP-11 — Unlimited temp path is non-unique and uses `str.replace`.** `tools/scraping_tools.py:169` — `config_path.replace(".json", "_unlimited_temp.json")` collides on concurrency and rewrites any `.json` substring. *Fix:* `tempfile.mkstemp`. `Confirmed` +- **★MCP-14 — `config_publisher` left on the feature branch after a mid-flow exception.** `config_publisher.py:198-219` — no try/finally to restore `branch`; a push failure strands the cache on `config/`. *Fix:* restore branch in `finally`. `Confirmed` +- **★MCP-15 — `package_skill_tool` returncode swallowed in `install_skill`.** `tools/packaging_tools.py:85-143` — no success check after packaging; a failed package still yields a fabricated `zip_path`. *Fix:* structured success signal; abort on failure. `Confirmed` +- **★MCP-16 — `generate_config` silently overwrites an existing config.** `tools/config_tools.py:80-84` — no `exists()`/`force` guard; clobbers hand-edited configs. *Fix:* add a `force` arg and guard. `Confirmed` +- **★MCP-17 — `_run_converter` attaches a handler to the shared `skill_seekers` logger.** `tools/scraping_tools.py:41-70` — concurrent converter tools cross-contaminate captured logs. *Fix:* per-call scoped capture. `Confirmed` + +## Codebase analysis +- **CBA-11 — Comment extractors match `//` / `/* */` inside string literals.** `code_analyzer.py:581,588` — URLs in strings yield phantom comments. *Fix:* strip string literals first. `Confirmed` +- **CBA-12 — Single-letter CSS classes `c`/`r` matched as C/R.** `language_detector.py:688,708` — bare-name branch returns confidence 1.0 for ambiguous tokens. *Fix:* require a prefix for `c`/`r`. `Confirmed` +- **★CBA-16 — Go grouped-import line numbers off by one.** `dependency_analyzer.py:495` — uses `match.start()` (at `import`) instead of `match.start(1)` (after `import (\n`). *Fix:* `block_start = match.start(1)`. `Confirmed` + +## Codebase analysis (guides) +- **CBB-09 — Duplicate `LANGUAGE_ALIASES`; `c++→cpp` but no `cpp` in `PATTERNS`.** `test_example_extractor.py:731-743` — C++ test files silently yield nothing. *Fix:* remove the dup; add `cpp` patterns or drop the alias. `Confirmed` +- **CBB-10 — Space-form `ENV KEY VALUE` dropped; `_infer_purpose` substring-matches.** `config_extractor.py:601-611,350` — legacy ENV skipped; `"db" in "dbeaver"`. *Fix:* handle space form; token-boundary match. `Confirmed` +- **CBB-11 — Step code fences hardcoded ```python```.** `how_to_guide_builder.py:650,663,679` — wrong highlighting for non-Python guides despite `guide.language`. *Fix:* `f"```{guide.language}"`. `Confirmed` +- **★CBB-14 — Basic-mode maps best_practices onto step explanations by index.** `how_to_guide_builder.py:1098-1101` — unrelated best-practice strings attached to steps positionally. *Fix:* render as a separate list. `Confirmed` +- **★CBB-15 — `ast.unparse(node.body)` on a statement list for `setUp`.** `test_example_extractor.py:266-271` — relies on undocumented unparse-of-list behavior. *Fix:* `"\n".join(ast.unparse(s) for s in node.body)`. `Confirmed` +- **★CBB-16 — Regex `group(1)` assumption → `Test: None` for Kotlin/GDScript/C#.** `test_example_extractor.py:762-769` — alternation patterns put the name in group 2/3; `group(1)` is None, and the body-slice re-search can land inside the current body. *Fix:* `next((g for g in match.groups() if g), match.group(0))`. `Confirmed` +- **★CBB-17 — Redundant triple-fetch of `ai_analysis` with divergent null handling.** `how_to_guide_builder.py:957-961, 995, 1004-1012` — maintenance hazard. *Fix:* fetch once, reuse. `Confirmed` + +## Document scrapers +- **DOC-08 — llms.txt sections with identical titles overwrite each other.** `doc_scraper.py:867-875` — same title → same URL → same `{safe_title}_{url_hash}` filename. *Corrected:* narrow (identical-title sections only), not the general case. *Fix:* add a section index/counter. `Corrected` +- **DOC-09 — Parallel/async submit guard off-by-one (`<=` vs `<`).** `doc_scraper.py:1523,1647` vs `1457` — parallel mode over-scrapes `max_pages` by ≥1. *Fix:* use `<`. `Confirmed` +- **DOC-10 — `is_valid_url` rejects the exact base page.** `doc_scraper.py:301-303` — trailing-slash `base_dir` drops the slashless base URL. *Corrected:* negligible — the start page is enqueued directly via `start_urls`. *Fix:* also accept `url == base_url`. `Corrected (negligible)` +- **DOC-11 — EPUB section images written as 0-byte files with broken links.** `epub_scraper.py:984-994` + `598-613` — `data=b""` passes the `isinstance(bytes)` check → 0-byte PNG + `![Image]` link. *Fix:* `if isinstance(...) and len(data) > 0`. `Confirmed` +- **DOC-12 — `_extract_html_as_markdown` returns `links=[]` → BFS dead-ends.** `doc_scraper.py:509-510,667-711` — a `.md` URL serving HTML contributes no further links. *Fix:* extract same-prefix links. `Confirmed` +- **DOC-13 — `_extract_tables` drops body rows equal to the header.** `html_scraper.py:868-872` (+ shared helper, confluence) — `cells != headers` drops legitimate data rows. *Fix:* skip the first row only when it came from ``. `Confirmed` +- **DOC-14 — Non-atomic checkpoint/page writes corrupt on interrupt.** `doc_scraper.py:334, 874` (the earlier-cited :771 is unrelated) — direct `open(...,'w')`; a second Ctrl-C truncates the checkpoint, and `load_checkpoint` silently starts fresh, losing progress. *Fix:* temp-file + `os.replace`. `Confirmed` +- **DOC-15 — `int(img.get("width") or 0)` crashes on `"100%"`/`"50px"`.** `html_scraper.py:911-912` (crash), `word_scraper.py:826` (silently drops image), `epub_scraper.py:991` (crash). *Fix:* parse leading digits defensively. `Confirmed` +- **★DOC-16 — Async dry-run discovered links bypass the cap.** `doc_scraper.py:1647-1664` — combined with DOC-06, async `--dry-run` issues real GETs across the whole site. *Fix:* the DOC-06 fix bounds this. `Confirmed` +- **★DOC-17 — pdf legacy image branch writes raw `img["data"]` with no guard.** `pdf_scraper.py:341-356` — `b""` → 0-byte file; missing/non-bytes → `KeyError`/`TypeError` aborts the reference-file write. *Fix:* `isinstance`/non-empty guard + `.get`. `Confirmed` +- **★DOC-18 — `smart_categorize` output is config-order-dependent.** `doc_scraper.py:1809-1846` — corollary of DOC-02; identical configs differing only in key order produce different groupings. *Fix:* same as DOC-02 (pick max, stable tiebreak). `Confirmed` + +## Media / structured / remote scrapers +- **MED-05 — `VideoScraperResult.to_dict()` drops `config`.** `video_models.py:827-848` — `--from-json` reload loses clip range/languages/whisper model. *Corrected:* latent — no current reader of `result.config`. *Fix:* serialize/restore `config`. `Corrected (latent)` +- **MED-06 — `.man` files dropped when `--sections` is set.** `man_scraper.py:317-353` — section-less `.man` pages have `section_num=None`, never in the list. *Fix:* only filter when `section_num is not None`. `Confirmed` +- **MED-07 — OpenAPI `$ref` has no cycle set.** `openapi_scraper.py:775-855` — self-referential schemas expand to the depth-10 cap (bounded — no hang). *Fix:* track visited ref names; emit a stub on cycle. `Confirmed` +- **MED-08 — RSS link-following has no global time budget.** `rss_scraper.py:191-206,484-489` — serial, 15s/req + 1s sleep; ~13 min on a 50-entry feed with slow hosts. *Fix:* time budget or concurrency. `Confirmed` +- **MED-09 — Confluence pagination compares against constant `limit`.** `confluence_scraper.py:455-528` — `if len(batch) < limit` uses 50, not the requested `min(...)`. *Corrected:* sloppy but not a reachable premature-stop (outer `while` already bounds it). *Fix:* compare against the requested size. `Corrected` +- **MED-10 — OCR keyframe temp JPEGs never deleted.** `video_visual.py:702-715` — `delete=False`, never unlinked. *Corrected:* `extract_keyframes` is dead code (no production caller); the active pipeline writes intended output frames and cleans stale ones. *Fix:* delete the dead function or have it clean up. `Corrected (dead code)` +- **MED-11 — Confluence `created` only set for version-1 pages.** `confluence_scraper.py:494-498` — empty for all edited pages. *Fix:* use `history.createdDate`. `Confirmed` +- **MED-12 — `get_releases()` / file-tree walk uncapped.** `github_scraper.py:686-708, 939-968` — unlike issues' `islice`, can exhaust the rate-limit quota on large repos. *Fix:* `islice` / depth cap. `Confirmed` +- **MED-13 — `max_pages: int` assigned `float("inf")`.** `notion_scraper.py:96-98`, `confluence_scraper.py:241-243` — type-annotation lie; works only because comparisons accept inf. *Fix:* `sys.maxsize` or annotate `float`. `Confirmed` +- **MED-14 — Video AI ref cleaning accepts any response >50% of input.** `video_scraper.py:299-312` — no `stop_reason` check; a truncated (>50%) response overwrites the reference file. *Fix:* require `stop_reason == "end_turn"`. `Confirmed` +- **★MED-15 — OpenAPI external/relative `$ref` left as an unresolved stub.** `openapi_scraper.py:916-943` — only `#/`-refs resolve; multi-file bundles emit stubs with a debug-only log. *Fix:* pre-bundle, or warn + mark `_ref_unresolved`. `Confirmed` +- **★MED-16 — Discord `before = batch[-1]["id"]` `KeyError` on malformed message.** `chat_scraper.py:875` — aborts the whole fetch. *Fix:* `.get("id")` + break. `Confirmed` +- **★MED-17 — Slack `conversations_list` is single-page.** `chat_scraper.py:654-662` — no `next_cursor`; >200 channels truncated. *Fix:* paginate via `response_metadata.next_cursor`. `Confirmed` +- **★MED-18 — GitHub "all" mode `//2` quota split under-fetches.** `github_fetcher.py:289-297` — rigid open/closed split never reallocates unused quota; magnifies MED-01. *Fix:* fetch open then request `max - len(open)` closed. `Confirmed` + +## Enhancement + builder +- **ENH-13 — Unknown provider → `_init_api_client` returns None, mode stays "api".** `agent_client.py:219-254` — `_call_api` then silently returns None (no fallback to LOCAL). *Fix:* `else:` raise or set `self.mode = "local"`. `Confirmed` +- **ENH-14 — `quality_metrics --threshold` parsed but never used.** `quality_metrics.py:542` — `main()` always returns 0, so quality gating is a no-op (also a 0-10 vs percentage scale mismatch). *Fix:* compare the score and return non-zero. `Confirmed` +- **ENH-15 — `prompt_file.write_text` missing `encoding="utf-8"`.** `agent_client.py:393` — `UnicodeEncodeError` on non-UTF-8 locales for emoji/CJK prompts (every read uses utf-8). *Fix:* add `encoding="utf-8"`. `Confirmed` +- **★ENH-16 — `_call_api` error classification by name substring.** `agent_client.py:317-353` — `"auth"/"rate" in type-name` misfires; a 429 whose class lacks "rate" gets a generic message. *Fix:* branch on HTTP status / typed SDK exceptions. `Confirmed (diagnostic)` +- **★ENH-17 — PDF content dropped when base SKILL.md lacks a Reference heading.** `unified_skill_builder.py:619-623, 659-663` — `insertion_index == -1` → assembled PDF lines silently discarded (no append-at-end fallback, unlike the docs+github+pdf path). *Fix:* append at end when no heading found. `Confirmed` + +## Args / infra +- **INF-06 — `--skip-config` is an orphan flag.** `arguments/create.py:427-433` — dest `skip_config` read nowhere (the real flag is `--skip-config-patterns`). *Fix:* remove or alias. `Confirmed` +- **INF-07 — Azure server-side copy uses an unauthenticated source URL.** `storage/azure_storage.py:223` — `start_copy_from_url(source_blob.url)` (no SAS) → 403 on private containers (S3/GCS are fine). *Fix:* append a short-lived read SAS. `Confirmed` +- **INF-08 — `presets/` package is dead code.** `presets/manager.py`, `presets/analyze_presets.py` — imported by no command (analyze parser not registered). Latent: `resolve_enhance_level` assumes `enhance_level` defaults to `None`, but the analyze parser forces `0`, so `--enhance` would be dead if revived. *Fix:* delete, or set the default back to `None`. `Confirmed` +- **★INF-09 — `create --no-preserve-code-blocks` / `--no-preserve-paragraphs` inert.** `arguments/create.py:810-822` — registered for `create` but read nowhere in `_args_to_data`/`_build_config` (only the `package` command consumes them). *Fix:* wire into the RAG config or drop from `create`. `Confirmed` +- **★INF-10 — `create --preset/-p` consumed nowhere.** `arguments/create.py:75-82` — the only reader lives in the dead `presets` package; `--preset comprehensive` is parsed and discarded. *Fix:* wire to analysis depth/features or remove. `Confirmed` + +--- + +# Appendix A — Investigated and dismissed / corrected severity + +These were checked against the source and are **not** defects (or were materially downgraded). Recorded for coverage. + +- **C6 → DOC-01 (pdf `next(iter(...))` StopIteration).** *Downgraded Critical → Low (not in body).* The `elif self.categories:` guard means a plain dict is non-empty there, so `next(iter(values()))` cannot raise; it is only a defensive inconsistency vs the siblings (which pass `, None`). Low-priority robustness fix: add the `, None` default at `pdf_scraper.py:192`. +- **CLI `_validate_arguments` false "not applicable" warnings — FALSE POSITIVE.** `create_command.py:111-136`. Verified every argument dict key equals its argparse dest, so the compatible-set membership check aligns; warnings only fire for genuinely-incompatible args. +- **CBA GDScript `class_name` line via `.count("\n")` — FALSE POSITIVE (correctness).** `code_analyzer.py:1988`. Produces the identical line number as `_offset_to_line`; only a style/perf nit. +- **CBB JS/TS config extraction duplicate settings — FALSE POSITIVE.** `config_extractor.py:584-586`. The three regexes are mutually exclusive per declaration; tested, no duplicate emissions. (A separate `version = 1.5` → `1` truncation defect exists but was not the claim.) +- **DOC PDF chapter-boundary chunk inverts start/end — FALSE POSITIVE.** `pdf_extractor_poc.py:660-669`. The non-empty-`current_chunk` guard guarantees `end_page ≥ start_page`. +- **ENH `enhance --model` dropped — CORRECTED (dead path).** `enhance_skill_local.py:1312-1340` does drop `--model`, but it's an unreachable legacy `main()`; the shipped `enhance` command routes through `enhance_command.py`, which forwards `--model` correctly to `enhance_skill.py` (which accepts it). +- **Scan archive/diff ordering & `set_api_key` display name — FALSE POSITIVE.** `scan_command.py:1137-1143` ordering is correct by design; `config_manager.py` `capitalize()` is display-only (the real defect is the env_map omission, SCAN-03). + +--- + +# Appendix B — Systemic patterns + +Cross-cutting root causes worth fixing once rather than per-site: + +- **S1 — Truncated/empty LLM output accepted as complete.** No `stop_reason`/`finish_reason` check: ENH-01 (`enhance_skill`/`agent_client`), ENH-11 (Gemini), MED-14 (video), ADP-06 (rename-before-write). Add a single "complete and non-empty?" gate before any overwrite, and always write-temp-then-swap. +- **S2 — SKILL.md nav links derived differently from reference filenames.** DOC-07 (pdf/html/word/epub) + MED-04 (jupyter/asciidoc/pptx): 7 scrapers link to `sanitize(title).md` while files use range/basename names. Extract one `_ref_filename()` helper per scraper and use it for both writing and nav. (★MED-N5: PPTX duplicates the naming logic in 3 places.) +- **S3 — Success/failure inferred from emoji/text substrings.** MCP-05 (`"âŒ"`), MCP-09/★MCP-15 (enhance/package), ENH-04 (Kimi regex). Return structured status/returncodes; never scan stdout for `âŒ`. +- **S4 — `A or B and C` precedence bugs.** CBA-01, CBA-05, CBA-06, CBB-06. Audit every multi-clause boolean for missing parentheses. +- **S5 — Shared-mutable-list aliasing.** CBB-03 (`common_problems.remove`), CBB-12 (`dependencies=imports`). Copy lists at construction (`list(...)`). +- **S6 — Pagination / `max_pages` inconsistency.** MED-01/★MED-18 (github), MED-02/★MED-17 (slack), MED-03/★MED-16 (discord), MED-09 (confluence), DOC-04/DOC-09 (doc_scraper), MED-13 (`inf`-as-`int`). Standardize a cursor-following helper with explicit caps. +- **S7 — Negative→positive flag translation gaps & inert flags.** CLI-01 (`--no-*`), INF-06/INF-09/INF-10 (`--skip-config`, `--no-preserve-*`, `--preset`). Add a registration test asserting every declared arg's dest is read somewhere. +- **S8 — Library modules calling `logging.basicConfig`.** SCAN-06, ★CLI-09. Only the entry point should configure logging. +- **S9 — Provider/model/timeout plumbing not threaded to the SDK call.** ENH-02, ENH-06, ENH-11, ENH-12. Centralize provider detection and request-option passing in one place. + +--- + +# Suggested fix order + +1. **S1 + ENH-01** (silent data loss of the primary artifact) — highest blast radius, low risk. +2. **SCAN-01, CBB-01, MCP-01(+★MCP-12/13/14), CBA-13** (core features silently broken) — small, surgical fixes. +3. **CLI-01, CLI-02(+★CLI-07), SCAN-02** (user-visible flag/crash bugs on the main `create`/`scan` paths). +4. **S3 + S6** (MCP install/upload reliability; scraper pagination correctness). +5. **CBA-01..04 + ★CBA-13..16** (pattern/dependency-analysis correctness — many share the precedence/regex root causes in S4). +6. Medium/Low by subsystem as code is touched. diff --git a/docs/DOCKER_DEPLOYMENT.md b/docs/DOCKER_DEPLOYMENT.md new file mode 100644 index 0000000..c9b8072 --- /dev/null +++ b/docs/DOCKER_DEPLOYMENT.md @@ -0,0 +1,762 @@ +# Docker Deployment Guide + +Complete guide for deploying Skill Seekers using Docker. + +## Table of Contents + +- [Quick Start](#quick-start) +- [Building Images](#building-images) +- [Running Containers](#running-containers) +- [Docker Compose](#docker-compose) +- [Configuration](#configuration) +- [Data Persistence](#data-persistence) +- [Networking](#networking) +- [Monitoring](#monitoring) +- [Troubleshooting](#troubleshooting) + +## Quick Start + +### Single Container Deployment + +```bash +# Pull pre-built image (when available) +docker pull skillseekers/skillseekers:latest + +# Or build locally +docker build -t skillseekers:latest . + +# Run MCP server +docker run -d \ + --name skillseekers-mcp \ + -p 8765:8765 \ + -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ + -e GITHUB_TOKEN=$GITHUB_TOKEN \ + -v skillseekers-data:/app/data \ + --restart unless-stopped \ + skillseekers:latest +``` + +### Multi-Service Deployment + +```bash +# Start all services +docker-compose up -d + +# Check status +docker-compose ps + +# View logs +docker-compose logs -f +``` + +## Building Images + +### 1. Production Image + +The Dockerfile uses multi-stage builds for optimization: + +```dockerfile +# Build stage +FROM python:3.12-slim as builder +WORKDIR /build +COPY requirements.txt . +RUN pip install --user --no-cache-dir -r requirements.txt + +# Runtime stage +FROM python:3.12-slim +WORKDIR /app +COPY --from=builder /root/.local /root/.local +COPY . . +ENV PATH=/root/.local/bin:$PATH +CMD ["python", "-m", "skill_seekers.mcp.server_fastmcp"] +``` + +**Build the image:** + +```bash +# Standard build +docker build -t skillseekers:latest . + +# Build with specific features +docker build \ + --build-arg INSTALL_EXTRAS="all-llms,embedding" \ + -t skillseekers:full \ + . + +# Build with cache +docker build \ + --cache-from skillseekers:latest \ + -t skillseekers:v3.6.0 \ + . +``` + +### 2. Development Image + +```dockerfile +# Dockerfile.dev +FROM python:3.12 +WORKDIR /app +RUN pip install -e ".[dev]" +COPY . . +CMD ["python", "-m", "skill_seekers.mcp.server_fastmcp", "--reload"] +``` + +**Build and run:** + +```bash +docker build -f Dockerfile.dev -t skillseekers:dev . + +docker run -it \ + --name skillseekers-dev \ + -p 8765:8765 \ + -v $(pwd):/app \ + skillseekers:dev +``` + +### 3. Image Optimization + +**Reduce image size:** + +```bash +# Multi-stage build +FROM python:3.12-slim as builder +... +FROM python:3.12-alpine # Smaller base + +# Remove build dependencies +RUN pip install --no-cache-dir ... && \ + rm -rf /root/.cache + +# Use .dockerignore +echo ".git" >> .dockerignore +echo "tests/" >> .dockerignore +echo "*.pyc" >> .dockerignore +``` + +**Layer caching:** + +```dockerfile +# Copy requirements first (changes less frequently) +COPY requirements.txt . +RUN pip install -r requirements.txt + +# Copy code later (changes more frequently) +COPY . . +``` + +## Running Containers + +### 1. MCP Server + +```bash +# HTTP transport (recommended for production) +docker run -d \ + --name skillseekers-mcp \ + -p 8765:8765 \ + -e MCP_TRANSPORT=http \ + -e MCP_PORT=8765 \ + -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ + -v skillseekers-data:/app/data \ + --restart unless-stopped \ + skillseekers:latest + +# stdio transport (for local tools) +docker run -it \ + --name skillseekers-stdio \ + -e MCP_TRANSPORT=stdio \ + skillseekers:latest +``` + +### 2. Embedding Server + +```bash +docker run -d \ + --name skillseekers-embed \ + -p 8000:8000 \ + -e OPENAI_API_KEY=$OPENAI_API_KEY \ + -e VOYAGE_API_KEY=$VOYAGE_API_KEY \ + -v skillseekers-cache:/app/cache \ + --restart unless-stopped \ + skillseekers:latest \ + python -m skill_seekers.embedding.server --host 0.0.0.0 --port 8000 +``` + +### 3. Sync Monitor + +```bash +docker run -d \ + --name skillseekers-sync \ + -e SYNC_WEBHOOK_URL=$SYNC_WEBHOOK_URL \ + -v skillseekers-configs:/app/configs \ + --restart unless-stopped \ + skillseekers:latest \ + skill-seekers-sync start --config configs/react.json +``` + +### 4. Interactive Commands + +```bash +# Run scraping +docker run --rm \ + -e GITHUB_TOKEN=$GITHUB_TOKEN \ + -v $(pwd)/output:/app/output \ + skillseekers:latest \ + skill-seekers create --config configs/react.json + +# Generate skill +docker run --rm \ + -v $(pwd)/output:/app/output \ + skillseekers:latest \ + skill-seekers package output/react/ + +# Interactive shell +docker run --rm -it \ + skillseekers:latest \ + /bin/bash +``` + +## Docker Compose + +### 1. Basic Setup + +**docker-compose.yml:** + +```yaml +version: '3.8' + +services: + mcp-server: + image: skillseekers:latest + container_name: skillseekers-mcp + ports: + - "8765:8765" + environment: + - MCP_TRANSPORT=http + - MCP_PORT=8765 + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - GITHUB_TOKEN=${GITHUB_TOKEN} + - LOG_LEVEL=INFO + volumes: + - skillseekers-data:/app/data + - skillseekers-logs:/app/logs + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8765/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + embedding-server: + image: skillseekers:latest + container_name: skillseekers-embed + ports: + - "8000:8000" + environment: + - OPENAI_API_KEY=${OPENAI_API_KEY} + - VOYAGE_API_KEY=${VOYAGE_API_KEY} + volumes: + - skillseekers-cache:/app/cache + command: ["python", "-m", "skill_seekers.embedding.server", "--host", "0.0.0.0"] + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 30s + + nginx: + image: nginx:alpine + container_name: skillseekers-nginx + ports: + - "80:80" + - "443:443" + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + - ./certs:/etc/nginx/certs:ro + depends_on: + - mcp-server + - embedding-server + restart: unless-stopped + +volumes: + skillseekers-data: + skillseekers-logs: + skillseekers-cache: +``` + +### 2. With Monitoring Stack + +**docker-compose.monitoring.yml:** + +```yaml +version: '3.8' + +services: + # ... (previous services) + + prometheus: + image: prom/prometheus:latest + container_name: skillseekers-prometheus + ports: + - "9090:9090" + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + restart: unless-stopped + + grafana: + image: grafana/grafana:latest + container_name: skillseekers-grafana + ports: + - "3000:3000" + environment: + - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} + volumes: + - grafana-data:/var/lib/grafana + - ./grafana/dashboards:/etc/grafana/provisioning/dashboards:ro + restart: unless-stopped + + loki: + image: grafana/loki:latest + container_name: skillseekers-loki + ports: + - "3100:3100" + volumes: + - loki-data:/loki + restart: unless-stopped + +volumes: + prometheus-data: + grafana-data: + loki-data: +``` + +### 3. Commands + +```bash +# Start services +docker-compose up -d + +# Start with monitoring +docker-compose -f docker-compose.yml -f docker-compose.monitoring.yml up -d + +# Check status +docker-compose ps + +# View logs +docker-compose logs -f mcp-server + +# Scale services +docker-compose up -d --scale mcp-server=3 + +# Stop services +docker-compose down + +# Stop and remove volumes +docker-compose down -v +``` + +## Configuration + +### 1. Environment Variables + +**Using .env file:** + +```bash +# .env +ANTHROPIC_API_KEY=sk-ant-... +GITHUB_TOKEN=ghp_... +OPENAI_API_KEY=sk-... +VOYAGE_API_KEY=... +LOG_LEVEL=INFO +MCP_PORT=8765 +``` + +**Load in docker-compose:** + +```yaml +services: + mcp-server: + env_file: + - .env +``` + +### 2. Config Files + +**Mount configuration:** + +```bash +docker run -d \ + -v $(pwd)/configs:/app/configs:ro \ + skillseekers:latest +``` + +**docker-compose.yml:** + +```yaml +services: + mcp-server: + volumes: + - ./configs:/app/configs:ro +``` + +### 3. Secrets Management + +**Docker Secrets (Swarm mode):** + +```bash +# Create secrets +echo $ANTHROPIC_API_KEY | docker secret create anthropic_key - +echo $GITHUB_TOKEN | docker secret create github_token - + +# Use in service +docker service create \ + --name skillseekers-mcp \ + --secret anthropic_key \ + --secret github_token \ + skillseekers:latest +``` + +**docker-compose.yml (Swarm):** + +```yaml +version: '3.8' + +secrets: + anthropic_key: + external: true + github_token: + external: true + +services: + mcp-server: + secrets: + - anthropic_key + - github_token + environment: + - ANTHROPIC_API_KEY_FILE=/run/secrets/anthropic_key +``` + +## Data Persistence + +### 1. Named Volumes + +```bash +# Create volume +docker volume create skillseekers-data + +# Use in container +docker run -v skillseekers-data:/app/data skillseekers:latest + +# Backup volume +docker run --rm \ + -v skillseekers-data:/data \ + -v $(pwd):/backup \ + alpine \ + tar czf /backup/backup.tar.gz /data + +# Restore volume +docker run --rm \ + -v skillseekers-data:/data \ + -v $(pwd):/backup \ + alpine \ + sh -c "cd /data && tar xzf /backup/backup.tar.gz --strip 1" +``` + +### 2. Bind Mounts + +```bash +# Mount host directory +docker run -v /opt/skillseekers/output:/app/output skillseekers:latest + +# Read-only mount +docker run -v $(pwd)/configs:/app/configs:ro skillseekers:latest +``` + +### 3. Data Migration + +```bash +# Export from container +docker cp skillseekers-mcp:/app/data ./data-backup + +# Import to new container +docker cp ./data-backup new-container:/app/data +``` + +## Networking + +### 1. Bridge Network (Default) + +```bash +# Containers can communicate by name +docker network create skillseekers-net + +docker run --network skillseekers-net skillseekers:latest +``` + +### 2. Host Network + +```bash +# Use host network stack +docker run --network host skillseekers:latest +``` + +### 3. Custom Network + +**docker-compose.yml:** + +```yaml +networks: + frontend: + driver: bridge + backend: + driver: bridge + internal: true # No external access + +services: + nginx: + networks: + - frontend + + mcp-server: + networks: + - frontend + - backend + + database: + networks: + - backend +``` + +## Monitoring + +### 1. Health Checks + +```yaml +services: + mcp-server: + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8765/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s +``` + +### 2. Resource Limits + +```yaml +services: + mcp-server: + deploy: + resources: + limits: + cpus: '2.0' + memory: 4G + reservations: + cpus: '1.0' + memory: 2G +``` + +### 3. Logging + +```yaml +services: + mcp-server: + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + labels: "service=mcp" + + # Or use syslog + logging: + driver: "syslog" + options: + syslog-address: "udp://192.168.1.100:514" +``` + +### 4. Metrics + +```bash +# Docker stats +docker stats skillseekers-mcp + +# cAdvisor for metrics +docker run -d \ + --name cadvisor \ + -p 8080:8080 \ + -v /:/rootfs:ro \ + -v /var/run:/var/run:ro \ + -v /sys:/sys:ro \ + -v /var/lib/docker:/var/lib/docker:ro \ + gcr.io/cadvisor/cadvisor:latest +``` + +## Troubleshooting + +### Common Issues + +#### 1. Container Won't Start + +```bash +# Check logs +docker logs skillseekers-mcp + +# Inspect container +docker inspect skillseekers-mcp + +# Run with interactive shell +docker run -it --entrypoint /bin/bash skillseekers:latest +``` + +#### 2. Port Already in Use + +```bash +# Find process using port +sudo lsof -i :8765 + +# Kill process +kill -9 + +# Or use different port +docker run -p 8766:8765 skillseekers:latest +``` + +#### 3. Volume Permission Issues + +```bash +# Run as specific user +docker run --user $(id -u):$(id -g) skillseekers:latest + +# Fix permissions +docker run --rm \ + -v skillseekers-data:/data \ + alpine chown -R 1000:1000 /data +``` + +#### 4. Network Connectivity + +```bash +# Test connectivity +docker exec skillseekers-mcp ping google.com + +# Check DNS +docker exec skillseekers-mcp cat /etc/resolv.conf + +# Use custom DNS +docker run --dns 8.8.8.8 skillseekers:latest +``` + +#### 5. High Memory Usage + +```bash +# Set memory limit +docker run --memory=4g skillseekers:latest + +# Check memory usage +docker stats skillseekers-mcp + +# Enable memory swappiness +docker run --memory=4g --memory-swap=8g skillseekers:latest +``` + +### Debug Commands + +```bash +# Enter running container +docker exec -it skillseekers-mcp /bin/bash + +# View environment variables +docker exec skillseekers-mcp env + +# Check processes +docker exec skillseekers-mcp ps aux + +# View logs in real-time +docker logs -f --tail 100 skillseekers-mcp + +# Inspect container details +docker inspect skillseekers-mcp | jq '.[]' + +# Export container filesystem +docker export skillseekers-mcp > container.tar +``` + +## Production Best Practices + +### 1. Image Management + +```bash +# Tag images with versions +docker build -t skillseekers:2.9.0 . +docker tag skillseekers:2.9.0 skillseekers:latest + +# Use private registry +docker tag skillseekers:latest registry.example.com/skillseekers:latest +docker push registry.example.com/skillseekers:latest + +# Scan for vulnerabilities +docker scan skillseekers:latest +``` + +### 2. Security + +```bash +# Run as non-root user +RUN useradd -m -s /bin/bash skillseekers +USER skillseekers + +# Read-only root filesystem +docker run --read-only --tmpfs /tmp skillseekers:latest + +# Drop capabilities +docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE skillseekers:latest + +# Use security scanning +trivy image skillseekers:latest +``` + +### 3. Resource Management + +```yaml +services: + mcp-server: + # CPU limits + cpus: 2.0 + cpu_shares: 1024 + + # Memory limits + mem_limit: 4g + memswap_limit: 8g + mem_reservation: 2g + + # Process limits + pids_limit: 200 +``` + +### 4. Backup & Recovery + +```bash +# Backup script +#!/bin/bash +docker-compose down +tar czf backup-$(date +%Y%m%d).tar.gz volumes/ +docker-compose up -d + +# Automated backups +0 2 * * * /opt/skillseekers/backup.sh +``` + +## Next Steps + +- See [KUBERNETES_DEPLOYMENT.md](./KUBERNETES_DEPLOYMENT.md) for Kubernetes deployment +- Review [PRODUCTION_DEPLOYMENT.md](./PRODUCTION_DEPLOYMENT.md) for general production guidelines +- Check [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common issues + +--- + +**Need help?** Open an issue on [GitHub](https://github.com/yusufkaraaslan/Skill_Seekers/issues). diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000..962c174 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,863 @@ +# Frequently Asked Questions (FAQ) + +**Version:** 3.6.0 +**Last Updated:** 2026-03-15 + +--- + +## General Questions + +### What is Skill Seekers? + +Skill Seekers is a Python tool that converts 18 source types — documentation websites, GitHub repos, PDFs, videos, Word docs, EPUB books, Jupyter notebooks, local HTML files, OpenAPI specs, AsciiDoc, PowerPoint, RSS/Atom feeds, man pages, Confluence wikis, Notion pages, Slack/Discord exports, and local codebases — into AI-ready formats for 21+ platforms: LLM platforms (Claude, Gemini, OpenAI, MiniMax, OpenCode, Kimi, DeepSeek, Qwen, OpenRouter, Together AI, Fireworks AI, Markdown), RAG frameworks (LangChain, LlamaIndex, Haystack), vector databases (ChromaDB, FAISS, Weaviate, Qdrant, Pinecone), and AI coding assistants (Cursor, Windsurf, Cline, Continue.dev, Roo, Aider, Bolt, Kilo, Kimi Code). + +**Use Cases:** +- Create custom documentation skills for your favorite frameworks +- Analyze GitHub repositories and extract code patterns +- Convert PDF manuals into searchable AI skills +- Import knowledge from Confluence, Notion, or Slack/Discord +- Extract content from videos (YouTube, Vimeo, local files) +- Convert Jupyter notebooks, EPUB books, or PowerPoint slides into skills +- Parse OpenAPI/Swagger specs into API reference skills +- Combine multiple sources (docs + code + PDFs + more) into unified skills + +### Which platforms are supported? + +**Supported Platforms (30+):** + +*LLM Platforms (12):* +1. **Claude AI** - ZIP format with YAML frontmatter +2. **Google Gemini** - tar.gz format for Grounded Generation +3. **OpenAI ChatGPT** - ZIP format for Vector Stores +4. **MiniMax** - ZIP format +5. **OpenCode** - ZIP format +6. **Kimi** - ZIP format +7. **DeepSeek** - ZIP format +8. **Qwen** - ZIP format +9. **OpenRouter** - ZIP format for multi-model routing +10. **Together AI** - ZIP format for open-source models +11. **Fireworks AI** - ZIP format for fast inference +12. **Generic Markdown** - ZIP format with markdown files + +*RAG Frameworks:* +13. **LangChain** - Document objects for QA chains and agents +14. **LlamaIndex** - TextNodes for query engines +15. **Haystack** - Document objects for enterprise RAG + +*Vector Databases:* +16. **ChromaDB** - Direct collection upload +17. **FAISS** - Index files for local similarity search +18. **Weaviate** - Vector objects with schema creation +19. **Qdrant** - Points with payload indexing +20. **Pinecone** - Ready-to-upsert format + +*AI Coding Assistants (9):* +21. **Cursor** - .cursorrules persistent context +22. **Windsurf** - .windsurfrules AI coding rules +23. **Cline** - .clinerules + MCP integration +24. **Continue.dev** - HTTP context server (all IDEs) +25. **Roo** - .roorules AI coding rules +26. **Aider** - Terminal AI coding assistant +27. **Bolt** - Web IDE AI context +28. **Kilo** - IDE AI context +29. **Kimi Code** - IDE AI context + +Each platform has a dedicated adaptor for optimal formatting and upload. + +### Is it free to use? + +**Tool:** Yes, Skill Seekers is 100% free and open-source (MIT license). + +**API Costs:** +- **Scraping:** Free (just bandwidth) +- **AI Enhancement (API mode):** ~$0.15-0.30 per skill (Claude API) +- **AI Enhancement (LOCAL mode):** Free! (uses your Claude Code Max plan) +- **Upload:** Free (platform storage limits apply) + +**Recommendation:** Use LOCAL mode for free AI enhancement or skip enhancement entirely. + +### How do I set up video extraction? + +**Quick setup:** +```bash +# 1. Install video support +pip install skill-seekers[video-full] + +# 2. Auto-detect GPU and install visual deps +skill-seekers create --setup +``` + +The `--setup` command auto-detects your GPU vendor (NVIDIA CUDA, AMD ROCm, or CPU-only) and installs the correct PyTorch variant along with easyocr and other visual extraction dependencies. This avoids the ~2GB NVIDIA CUDA download that would happen if easyocr were installed via pip on non-NVIDIA systems. + +**What it detects:** +- **NVIDIA:** Uses `nvidia-smi` to find CUDA version → installs matching `cu124`/`cu121`/`cu118` PyTorch +- **AMD:** Uses `rocminfo` to find ROCm version → installs matching ROCm PyTorch +- **CPU-only:** Installs lightweight CPU-only PyTorch + +### What source types are supported? + +Skill Seekers supports **18 source types**: + +| # | Source Type | CLI Command | Auto-Detection | +|---|------------|-------------|----------------| +| 1 | Documentation (web) | `scrape` / `create ` | HTTP/HTTPS URLs | +| 2 | GitHub repo | `github` / `create owner/repo` | `owner/repo` or github.com URLs | +| 3 | PDF | `pdf` / `create file.pdf` | `.pdf` extension | +| 4 | Word (.docx) | `word` / `create file.docx` | `.docx` extension | +| 5 | EPUB | `epub` / `create file.epub` | `.epub` extension | +| 6 | Video | `video` / `create ` | YouTube/Vimeo URLs, video extensions | +| 7 | Local codebase | `analyze` / `create ./path` | Directory paths | +| 8 | Jupyter Notebook | `jupyter` / `create file.ipynb` | `.ipynb` extension | +| 9 | Local HTML | `html` / `create file.html` | `.html`/`.htm` extensions | +| 10 | OpenAPI/Swagger | `openapi` / `create spec.yaml` | `.yaml`/`.yml` with OpenAPI content | +| 11 | AsciiDoc | `asciidoc` / `create file.adoc` | `.adoc`/`.asciidoc` extensions | +| 12 | PowerPoint | `pptx` / `create file.pptx` | `.pptx` extension | +| 13 | RSS/Atom | `rss` / `create feed.rss` | `.rss`/`.atom` extensions | +| 14 | Man pages | `manpage` / `create cmd.1` | `.1`-`.8`/`.man` extensions | +| 15 | Confluence | `confluence` | API or export directory | +| 16 | Notion | `notion` | API or export directory | +| 17 | Slack/Discord | `chat` | Export directory or API | + +The `create` command auto-detects the source type from your input, so you often don't need to specify a subcommand. + +### How long does it take to create a skill? + +**Typical Times:** +- Documentation scraping: 5-45 minutes (depends on size) +- GitHub analysis: 1-5 minutes (basic) or 20-60 minutes (C3.x deep analysis) +- PDF extraction: 30 seconds - 5 minutes +- Video extraction: 2-10 minutes (depends on length and visual analysis) +- Word/EPUB/PPTX: 10-60 seconds +- Jupyter notebook: 10-30 seconds +- OpenAPI spec: 5-15 seconds +- Confluence/Notion import: 1-5 minutes (depends on space size) +- AI enhancement: 30-60 seconds (LOCAL or API mode) +- Total workflow: 10-60 minutes + +**Speed Tips:** +- Use `--async` for 2-3x faster scraping +- Use `--skip-scrape` to rebuild without re-scraping +- Skip AI enhancement for faster workflow + +--- + +## Installation & Setup + +### How do I install Skill Seekers? + +```bash +# Basic installation +pip install skill-seekers + +# With all platform support +pip install skill-seekers[all-llms] + +# Development installation +git clone https://github.com/yusufkaraaslan/Skill_Seekers.git +cd Skill_Seekers +pip install -e ".[all-llms,dev]" +``` + +### What Python version do I need? + +**Required:** Python 3.10 or higher +**Tested on:** Python 3.10, 3.11, 3.12, 3.13 +**OS Support:** Linux, macOS, Windows (WSL recommended) + +**Check your version:** +```bash +python --version # Should be 3.10+ +``` + +### Why do I get "No module named 'skill_seekers'" error? + +**Common Causes:** +1. Package not installed +2. Wrong Python environment + +**Solutions:** +```bash +# Install package +pip install skill-seekers + +# Or for development +pip install -e . + +# Verify installation +skill-seekers --version +``` + +### How do I set up API keys? + +```bash +# Claude AI (for enhancement and upload) +export ANTHROPIC_API_KEY=sk-ant-... + +# Google Gemini (for upload) +export GOOGLE_API_KEY=AIza... + +# OpenAI ChatGPT (for upload) +export OPENAI_API_KEY=sk-... + +# GitHub (for higher rate limits) +export GITHUB_TOKEN=ghp_... + +# Make permanent (add to ~/.bashrc or ~/.zshrc) +echo 'export ANTHROPIC_API_KEY=sk-ant-...' >> ~/.bashrc +``` + +--- + +## Usage Questions + +### How do I scrape documentation? + +**Using preset config:** +```bash +skill-seekers create --config react +``` + +**Using custom URL:** +```bash +skill-seekers create https://docs.example.com --name my-framework +``` + +**From custom config file:** +```bash +skill-seekers create --config configs/my-framework.json +``` + +### How do I create skills for an entire project at once? + +Use `skill-seekers scan` — an AI agent inspects the project's manifests, README, Dockerfile/CI, and source imports, then emits one config per detected framework plus a `-codebase.json` for your own code: + +```bash +# AI-detect frameworks and emit configs +skill-seekers scan ./my-react-app --out ./configs/scanned/ +# → react.json, typescript.json, vite.json, my-react-app-codebase.json + +# Then build any of them +skill-seekers create ./configs/scanned/react.json +``` + +Re-running `scan` against the same output directory reports diffs (added / version-bumped / removed) so you can keep skills in sync with your real dependencies. See [CLI Reference: scan](reference/CLI_REFERENCE.md#scan) for all flags. + +### Can I analyze GitHub repositories? + +Yes! Skill Seekers has powerful GitHub analysis: + +```bash +# Basic analysis (fast) +skill-seekers create https://github.com/facebook/react + +# Deep C3.x analysis (includes patterns, tests, guides) +skill-seekers create https://github.com/vercel/next.js --depth full +``` + +**C3.x Features:** +- Design pattern detection (10 GoF patterns) +- Test example extraction +- How-to guide generation +- Configuration pattern extraction +- Architectural overview +- API reference generation + +### Can I extract content from PDFs? + +Yes! PDF extraction with OCR support: + +```bash +# Basic PDF extraction +skill-seekers create --pdf manual.pdf --name product-manual + +# With OCR (for scanned PDFs) +skill-seekers create --pdf scanned.pdf --ocr + +# Images and tables are extracted automatically +skill-seekers create --pdf document.pdf +``` + +### How do I scrape a Jupyter Notebook? + +```bash +# Extract cells, outputs, and markdown from a notebook +skill-seekers create analysis.ipynb --name data-analysis + +# Or use auto-detection +skill-seekers create analysis.ipynb +``` + +Jupyter extraction preserves code cells, markdown cells, and cell outputs. It works with `.ipynb` files from JupyterLab, Google Colab, and other notebook environments. + +### How do I import from Confluence or Notion? + +**Confluence:** +```bash +# From Confluence Cloud API +export CONFLUENCE_URL=https://yourorg.atlassian.net +export CONFLUENCE_TOKEN=your-api-token +export CONFLUENCE_EMAIL=your-email@example.com +skill-seekers create --space-key MYSPACE --name my-wiki + +# From a Confluence HTML/XML export directory +skill-seekers create --conf-export-path ./confluence-export --name my-wiki +``` + +**Notion:** +```bash +# From Notion API +export NOTION_TOKEN=secret_... +skill-seekers create --database-id DATABASE_ID --name my-notes + +# From a Notion HTML/Markdown export directory +skill-seekers create --notion-export-path ./notion-export --name my-notes +``` + +### How do I convert Word, EPUB, or PowerPoint files? + +```bash +# Word document +skill-seekers create report.docx --name quarterly-report + +# EPUB book +skill-seekers create handbook.epub --name dev-handbook + +# PowerPoint presentation +skill-seekers create slides.pptx --name training-deck + +# Or use auto-detection for any of them +skill-seekers create report.docx +skill-seekers create handbook.epub +skill-seekers create slides.pptx +``` + +### How do I parse an OpenAPI/Swagger spec? + +```bash +# From a local YAML/JSON file +skill-seekers create api-spec.yaml --name my-api + +# Auto-detection works too +skill-seekers create api-spec.yaml +``` + +OpenAPI extraction parses endpoints, schemas, parameters, and examples into a structured API reference skill. + +### How do I extract content from RSS feeds or man pages? + +```bash +# RSS/Atom feed +skill-seekers create https://blog.example.com/feed.xml --name blog-feed + +# Man page +skill-seekers create grep.1 --name grep-manual +``` + +### How do I import from Slack or Discord? + +```bash +# From a Slack export directory +skill-seekers create --chat-export-path ./slack-export --platform slack --name team-knowledge + +# From a Discord export directory +skill-seekers create --chat-export-path ./discord-export --platform discord --name server-archive +``` + +### Can I combine multiple sources? + +Yes! Unified multi-source scraping: + +**Create unified config** (`configs/unified/my-framework.json`): +```json +{ + "name": "my-framework", + "sources": { + "documentation": { + "type": "docs", + "base_url": "https://docs.example.com" + }, + "github": { + "type": "github", + "repo_url": "https://github.com/org/repo" + }, + "pdf": { + "type": "pdf", + "pdf_path": "manual.pdf" + } + } +} +``` + +**Run unified scraping:** +```bash +skill-seekers create --config configs/unified/my-framework.json +``` + +### How do I upload skills to platforms? + +```bash +# Upload to Claude AI +export ANTHROPIC_API_KEY=sk-ant-... +skill-seekers upload output/react-claude.zip --target claude + +# Upload to Google Gemini +export GOOGLE_API_KEY=AIza... +skill-seekers upload output/react-gemini.tar.gz --target gemini + +# Upload to OpenAI ChatGPT +export OPENAI_API_KEY=sk-... +skill-seekers upload output/react-openai.zip --target openai +``` + +**Or use complete workflow (uploads by default):** +```bash +skill-seekers install --config react --target claude +``` + +--- + +## Platform-Specific Questions + +### What's the difference between platforms? + +| Feature | Claude AI | Google Gemini | OpenAI ChatGPT | Markdown | +|---------|-----------|---------------|----------------|----------| +| Format | ZIP + YAML | tar.gz | ZIP | ZIP | +| Upload API | Projects API | Corpora API | Vector Stores | N/A | +| Model | Sonnet 4.5 | Gemini 2.0 Flash | GPT-4o | N/A | +| Max Size | 32MB | 10MB | 512MB | N/A | +| Use Case | Claude Code | Grounded Gen | ChatGPT Custom | Export | + +**Choose based on:** +- Claude AI: Best for Claude Code integration +- Google Gemini: Best for Grounded Generation in Gemini +- OpenAI ChatGPT: Best for ChatGPT Custom GPTs +- MiniMax/Kimi/DeepSeek/Qwen: Best for Chinese LLM ecosystem +- OpenRouter/Together/Fireworks: Best for multi-model routing or open-source model access +- Markdown: Generic export for other tools + +### Can I use multiple platforms at once? + +Yes! Package and upload to all platforms: + +```bash +# Package for all platforms +for platform in claude gemini openai minimax kimi deepseek qwen openrouter together fireworks markdown; do + skill-seekers package output/react/ --target $platform +done + +# Install + upload per platform (one --target per run) +for platform in claude gemini openai; do + skill-seekers install --config react --target $platform +done +``` + +### How do I use skills in Claude Code? + +1. **Install skill to Claude Code directory:** +```bash +skill-seekers install-agent output/react/ --agent claude +``` + +2. **Use in Claude Code:** +``` +Use the react skill to explain React hooks +``` + +3. **Or upload to Claude AI:** +```bash +skill-seekers upload output/react-claude.zip --target claude +``` + +--- + +## Features & Capabilities + +### What is AI enhancement? + +AI enhancement transforms basic skills (2-3/10 quality) into production-ready skills (8-9/10 quality) using LLMs. + +**Two Modes (via AgentClient):** +1. **API Mode:** Multi-provider AI API calls -- Anthropic, Moonshot/Kimi, Gemini, OpenAI (fast, costs ~$0.15-0.30) +2. **LOCAL Mode:** Any supported coding agent -- Claude Code, Kimi, Codex, Copilot, OpenCode, or custom (free with agent subscription) + +**What it improves:** +- Better organization and structure +- Clearer explanations +- More examples and use cases +- Better cross-references +- Improved searchability + +**Usage:** +```bash +# API mode (if ANTHROPIC_API_KEY is set) +skill-seekers enhance output/react/ + +# LOCAL mode (free! — auto-selected when no API key is set; pick the agent) +skill-seekers enhance output/react/ --agent claude + +# Background mode +skill-seekers enhance output/react/ --background +skill-seekers enhance-status output/react/ --watch +``` + +### What are C3.x features? + +C3.x features are advanced codebase analysis capabilities: + +- **C3.1:** Design pattern detection (Singleton, Factory, Strategy, etc.) +- **C3.2:** Test example extraction (real usage examples from tests) +- **C3.3:** How-to guide generation (educational guides from test workflows) +- **C3.4:** Configuration pattern extraction (env vars, config files) +- **C3.5:** Architectural overview (system architecture analysis) +- **C3.6:** AI enhancement (Claude API integration for insights) +- **C3.7:** Architectural pattern detection (MVC, MVVM, Repository, etc.) +- **C3.8:** Standalone codebase scraping (300+ line SKILL.md from code alone) + +**Enable C3.x:** +```bash +# All C3.x features enabled by default +skill-seekers create --directory /path/to/repo + +# Skip specific features +skill-seekers create --directory . --skip-patterns --skip-how-to-guides +``` + +### What are router skills? + +Router skills help Claude navigate large documentation (>500 pages) by providing a table of contents and keyword index. + +**When to use:** +- Documentation with 500+ pages +- Complex multi-section docs +- Large API references + +**Generate router (from split sub-skill configs):** +```bash +python -m skill_seekers.cli.generate_router configs/godot_*.json --name godot +``` +(Also available as the `generate_router` MCP tool.) + +### What preset configurations are available? + +**24 preset configs:** +- Web: react, vue, angular, svelte, nextjs +- Python: django, flask, fastapi, sqlalchemy, pytest +- Game Dev: godot, pygame, unity +- DevOps: docker, kubernetes, terraform, ansible +- Unified: react-unified, vue-unified, nextjs-unified, etc. + +**List all:** +```bash +skill-seekers estimate --all +``` + +--- + +## Troubleshooting + +### Scraping is very slow, how can I speed it up? + +**Solutions:** +1. **Use async mode** (2-3x faster): +```bash +skill-seekers create --config react --async +``` + +2. **Increase rate limit** (faster requests): +```json +{ + "rate_limit": 0.1 // Faster (but may hit rate limits) +} +``` + +3. **Limit pages**: +```json +{ + "max_pages": 100 // Stop after 100 pages +} +``` + +### Why are some pages missing? + +**Common Causes:** +1. **URL patterns exclude them** +2. **Max pages limit reached** +3. **BFS didn't reach them** + +**Solutions:** +```bash +# Check URL patterns in config +{ + "url_patterns": { + "include": ["/docs/"], // Make sure your pages match + "exclude": [] // Remove overly broad exclusions + } +} + +# Increase max pages +{ + "max_pages": 1000 // Default is 500 +} + +# Use verbose mode to see what's being scraped +skill-seekers create --config react --verbose +``` + +### How do I fix "NetworkError: Connection failed"? + +**Solutions:** +1. **Check internet connection** +2. **Verify URL is accessible**: +```bash +curl -I https://docs.example.com +``` + +3. **Increase timeout**: +```json +{ + "timeout": 30 // 30 seconds +} +``` + +4. **Check rate limiting**: +```json +{ + "rate_limit": 1.0 // Slower requests +} +``` + +### Tests are failing, what should I do? + +**Quick fixes:** +```bash +# Ensure package is installed +pip install -e ".[all-llms,dev]" + +# Clear caches +rm -rf .pytest_cache/ **/__pycache__/ + +# Run specific failing test +pytest tests/test_file.py::test_name -vv + +# Check for missing dependencies +pip install -e ".[all-llms,dev]" +``` + +**If still failing:** +1. Check [Troubleshooting Guide](../TROUBLESHOOTING.md) +2. Report issue on [GitHub](https://github.com/yusufkaraaslan/Skill_Seekers/issues) + +--- + +## MCP Server Questions + +### How do I start the MCP server? + +```bash +# stdio mode (Claude Code, VS Code + Cline) +skill-seekers-mcp + +# HTTP mode (Cursor, Windsurf, IntelliJ) +skill-seekers-mcp --transport http --port 8765 +``` + +### What MCP tools are available? + +**40 MCP tools:** + +*Core Tools (9):* +1. `list_configs` - List preset configurations +2. `generate_config` - Generate config from docs URL +3. `validate_config` - Validate config structure +4. `estimate_pages` - Estimate page count +5. `scrape_docs` - Scrape documentation +6. `package_skill` - Package to .zip (supports `--format` and `--target`) +7. `upload_skill` - Upload to platform (supports `--target`) +8. `enhance_skill` - AI enhancement +9. `install_skill` - Complete workflow + +*Extended Tools (10):* +10. `scrape_github` - GitHub analysis +11. `scrape_pdf` - PDF extraction +12. `unified_scrape` - Multi-source scraping +13. `merge_sources` - Merge docs + code +14. `detect_conflicts` - Find discrepancies +15. `split_config` - Split large configs +16. `generate_router` - Generate router skills +17. `add_config_source` - Register git repos +18. `fetch_config` - Fetch configs from git +19. `list_config_sources` - List registered sources +20. `remove_config_source` - Remove config source + +*Vector DB Tools (4):* +21. `export_to_chroma` - Export to ChromaDB +22. `export_to_weaviate` - Export to Weaviate +23. `export_to_faiss` - Export to FAISS +24. `export_to_qdrant` - Export to Qdrant + +*Cloud Tools (3):* +25. `cloud_upload` - Upload to S3/GCS/Azure +26. `cloud_download` - Download from cloud storage + +### How do I configure MCP for Claude Code? + +**Add to `claude_desktop_config.json`:** +```json +{ + "mcpServers": { + "skill-seekers": { + "command": "skill-seekers-mcp" + } + } +} +``` + +**Restart Claude Code**, then use: +``` +Use skill-seekers MCP tools to scrape React documentation +``` + +--- + +## Advanced Questions + +### Can I use Skill Seekers programmatically? + +Yes! Full API for Python integration: + +```python +from skill_seekers.cli.doc_scraper import scrape_all, build_skill +from skill_seekers.cli.adaptors import get_adaptor + +# Scrape documentation +pages = scrape_all( + base_url='https://docs.example.com', + selectors={'main_content': 'article'}, + config={'name': 'example'} +) + +# Build skill +skill_path = build_skill( + config_name='example', + output_dir='output/example' +) + +# Package for platform +adaptor = get_adaptor('claude') +package_path = adaptor.package(skill_path, 'output/') +``` + +**See:** [API Reference](reference/API_REFERENCE.md) + +### How do I create custom configurations? + +**Create config file** (`configs/my-framework.json`): +```json +{ + "name": "my-framework", + "description": "My custom framework documentation", + "base_url": "https://docs.example.com/", + "selectors": { + "main_content": "article", // CSS selector + "title": "h1", + "code_blocks": "pre code" + }, + "url_patterns": { + "include": ["/docs/", "/api/"], + "exclude": ["/blog/", "/changelog/"] + }, + "categories": { + "getting_started": ["intro", "quickstart"], + "api": ["api", "reference"] + }, + "rate_limit": 0.5, + "max_pages": 500 +} +``` + +**Use config:** +```bash +skill-seekers create --config configs/my-framework.json +``` + +### Can I contribute preset configs? + +Yes! We welcome config contributions: + +1. **Create config** in `configs/` directory +2. **Test it** thoroughly: +```bash +skill-seekers create --config configs/your-framework.json +``` +3. **Submit PR** on [GitHub](https://github.com/yusufkaraaslan/Skill_Seekers) + +**Guidelines:** +- Name: `{framework-name}.json` +- Include all required fields +- Add to appropriate category +- Test with real documentation + +### How do I debug scraping issues? + +```bash +# Verbose output +skill-seekers create --config react --verbose + +# Dry run (no actual scraping) +skill-seekers create --config react --dry-run + +# Single page test +skill-seekers create https://docs.example.com/intro --max-pages 1 + +# Check config (also available as the validate_config MCP tool) +python -m skill_seekers.cli.config_validator configs/react.json +``` + +--- + +## Getting More Help + +### Where can I find documentation? + +**Main Documentation:** +- [README](../README.md) - Project overview +- [Usage Guide](guides/USAGE.md) - Detailed usage +- [API Reference](reference/API_REFERENCE.md) - Programmatic usage +- [Troubleshooting](../TROUBLESHOOTING.md) - Common issues + +**Guides:** +- [MCP Setup](guides/MCP_SETUP.md) +- [Testing Guide](guides/TESTING_GUIDE.md) +- [Migration Guide](guides/MIGRATION_GUIDE.md) +- [Quick Reference](QUICK_REFERENCE.md) + +### How do I report bugs? + +1. **Check existing issues:** https://github.com/yusufkaraaslan/Skill_Seekers/issues +2. **Create new issue** with: + - Skill Seekers version (`skill-seekers --version`) + - Python version (`python --version`) + - Operating system + - Config file (if relevant) + - Error message and stack trace + - Steps to reproduce + +### How do I request features? + +1. **Check roadmap:** [ROADMAP.md](../ROADMAP.md) +2. **Create feature request:** https://github.com/yusufkaraaslan/Skill_Seekers/issues +3. **Join discussions:** https://github.com/yusufkaraaslan/Skill_Seekers/discussions + +### Is there a community? + +Yes! +- **GitHub Discussions:** https://github.com/yusufkaraaslan/Skill_Seekers/discussions +- **Issue Tracker:** https://github.com/yusufkaraaslan/Skill_Seekers/issues +- **Project Board:** https://github.com/users/yusufkaraaslan/projects/2 + +--- + +**Version:** 3.6.0 +**Last Updated:** 2026-03-15 +**Questions? Ask on [GitHub Discussions](https://github.com/yusufkaraaslan/Skill_Seekers/discussions)** diff --git a/docs/KUBERNETES_DEPLOYMENT.md b/docs/KUBERNETES_DEPLOYMENT.md new file mode 100644 index 0000000..1e5431b --- /dev/null +++ b/docs/KUBERNETES_DEPLOYMENT.md @@ -0,0 +1,933 @@ +# Kubernetes Deployment Guide + +Complete guide for deploying Skill Seekers on Kubernetes. + +## Table of Contents + +- [Prerequisites](#prerequisites) +- [Quick Start with Helm](#quick-start-with-helm) +- [Manual Deployment](#manual-deployment) +- [Configuration](#configuration) +- [Scaling](#scaling) +- [High Availability](#high-availability) +- [Monitoring](#monitoring) +- [Ingress & Load Balancing](#ingress--load-balancing) +- [Storage](#storage) +- [Security](#security) +- [Troubleshooting](#troubleshooting) + +## Prerequisites + +### 1. Kubernetes Cluster + +**Minimum requirements:** +- Kubernetes v1.21+ +- kubectl configured +- 2 nodes (minimum) +- 4 CPU cores total +- 8 GB RAM total + +**Cloud providers:** +- **AWS:** EKS (Elastic Kubernetes Service) +- **GCP:** GKE (Google Kubernetes Engine) +- **Azure:** AKS (Azure Kubernetes Service) +- **Local:** Minikube, kind, k3s + +### 2. Required Tools + +```bash +# kubectl +curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" +sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + +# Helm 3 +curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash + +# Verify installations +kubectl version --client +helm version +``` + +### 3. Cluster Access + +```bash +# Verify cluster connection +kubectl cluster-info +kubectl get nodes + +# Create namespace +kubectl create namespace skillseekers +kubectl config set-context --current --namespace=skillseekers +``` + +## Quick Start with Helm + +### 1. Install with Default Values + +```bash +# Add Helm repository (when available) +helm repo add skillseekers https://charts.skillseekers.io +helm repo update + +# Install release +helm install skillseekers skillseekers/skillseekers \ + --namespace skillseekers \ + --create-namespace + +# Or install from local chart +helm install skillseekers ./helm/skillseekers \ + --namespace skillseekers \ + --create-namespace +``` + +### 2. Install with Custom Values + +```bash +# Create values file +cat > values-prod.yaml < + @type tail + path /var/log/containers/skillseekers*.log + pos_file /var/log/fluentd-skillseekers.pos + tag kubernetes.* + format json + + + @type elasticsearch + host elasticsearch + port 9200 + +``` + +## Ingress & Load Balancing + +### 1. Nginx Ingress + +```yaml +# ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: skillseekers + namespace: skillseekers + annotations: + kubernetes.io/ingress.class: nginx + cert-manager.io/cluster-issuer: letsencrypt-prod + nginx.ingress.kubernetes.io/rate-limit: "100" + nginx.ingress.kubernetes.io/ssl-redirect: "true" +spec: + tls: + - hosts: + - api.skillseekers.example.com + secretName: skillseekers-tls + rules: + - host: api.skillseekers.example.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: skillseekers-mcp + port: + number: 8765 +``` + +### 2. TLS with cert-manager + +```bash +# Install cert-manager +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml + +# Create ClusterIssuer +cat < -n skillseekers + +# Check events +kubectl get events -n skillseekers --sort-by='.lastTimestamp' + +# Check logs +kubectl logs -n skillseekers +``` + +#### 2. Image Pull Errors + +```bash +# Check image pull secrets +kubectl get secrets -n skillseekers + +# Create image pull secret +kubectl create secret docker-registry regcred \ + --docker-server=registry.example.com \ + --docker-username=user \ + --docker-password=password \ + -n skillseekers + +# Use in pod spec +spec: + imagePullSecrets: + - name: regcred +``` + +#### 3. Resource Constraints + +```bash +# Check node resources +kubectl top nodes + +# Check pod resources +kubectl top pods -n skillseekers + +# Increase resources +kubectl edit deployment skillseekers-mcp -n skillseekers +``` + +#### 4. Service Not Accessible + +```bash +# Check service +kubectl get svc -n skillseekers +kubectl describe svc skillseekers-mcp -n skillseekers + +# Check endpoints +kubectl get endpoints -n skillseekers + +# Port forward +kubectl port-forward svc/skillseekers-mcp 8765:8765 -n skillseekers +``` + +### Debug Commands + +```bash +# Execute command in pod +kubectl exec -it -n skillseekers -- /bin/bash + +# Copy files from pod +kubectl cp skillseekers/:/app/data ./data + +# Check pod networking +kubectl exec -n skillseekers -- nslookup google.com + +# View full pod spec +kubectl get pod -n skillseekers -o yaml + +# Restart deployment +kubectl rollout restart deployment skillseekers-mcp -n skillseekers +``` + +## Best Practices + +1. **Always set resource requests and limits** +2. **Use namespaces for environment separation** +3. **Enable autoscaling for variable workloads** +4. **Implement health checks (liveness & readiness)** +5. **Use Secrets for sensitive data** +6. **Enable monitoring and logging** +7. **Implement Pod Disruption Budgets for HA** +8. **Use RBAC for access control** +9. **Enable Network Policies** +10. **Regular backup of persistent volumes** + +## Next Steps + +- Review [PRODUCTION_DEPLOYMENT.md](./PRODUCTION_DEPLOYMENT.md) for general guidelines +- See [DOCKER_DEPLOYMENT.md](./DOCKER_DEPLOYMENT.md) for container-specific details +- Check [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common issues + +--- + +**Need help?** Open an issue on [GitHub](https://github.com/yusufkaraaslan/Skill_Seekers/issues). diff --git a/docs/PRODUCTION_DEPLOYMENT.md b/docs/PRODUCTION_DEPLOYMENT.md new file mode 100644 index 0000000..7762e92 --- /dev/null +++ b/docs/PRODUCTION_DEPLOYMENT.md @@ -0,0 +1,827 @@ +# Production Deployment Guide + +Complete guide for deploying Skill Seekers in production environments. + +## Table of Contents + +- [Prerequisites](#prerequisites) +- [Installation](#installation) +- [Configuration](#configuration) +- [Deployment Options](#deployment-options) +- [Monitoring & Observability](#monitoring--observability) +- [Security](#security) +- [Scaling](#scaling) +- [Backup & Disaster Recovery](#backup--disaster-recovery) +- [Troubleshooting](#troubleshooting) + +## Prerequisites + +### System Requirements + +**Minimum:** +- CPU: 2 cores +- RAM: 4 GB +- Disk: 10 GB +- Python: 3.10+ + +**Recommended (for production):** +- CPU: 4+ cores +- RAM: 8+ GB +- Disk: 50+ GB SSD +- Python: 3.12+ + +### Dependencies + +**Required:** +```bash +# System packages (Ubuntu/Debian) +sudo apt update +sudo apt install -y python3.12 python3.12-venv python3-pip \ + git curl wget build-essential libssl-dev + +# System packages (RHEL/CentOS) +sudo yum install -y python312 python312-devel git curl wget \ + gcc gcc-c++ openssl-devel +``` + +**Optional (for specific features):** +```bash +# OCR support (PDF scraping) +sudo apt install -y tesseract-ocr + +# Cloud storage +# (Install provider-specific SDKs via pip) + +# Embedding generation +# (GPU support requires CUDA) +``` + +## Installation + +### 1. Production Installation + +```bash +# Create dedicated user +sudo useradd -m -s /bin/bash skillseekers +sudo su - skillseekers + +# Create virtual environment +python3.12 -m venv /opt/skillseekers/venv +source /opt/skillseekers/venv/bin/activate + +# Install package +pip install --upgrade pip +pip install skill-seekers[all] + +# Verify installation +skill-seekers --version +``` + +### 2. Configuration Directory + +```bash +# Create config directory +mkdir -p ~/.config/skill-seekers/{configs,output,logs,cache} + +# Set permissions +chmod 700 ~/.config/skill-seekers +``` + +### 3. Environment Variables + +Create `/opt/skillseekers/.env`: + +```bash +# API Keys +ANTHROPIC_API_KEY=sk-ant-... +GOOGLE_API_KEY=AIza... +OPENAI_API_KEY=sk-... +VOYAGE_API_KEY=... + +# GitHub Tokens (use skill-seekers config --github for multiple) +GITHUB_TOKEN=ghp_... + +# Cloud Storage (optional) +AWS_ACCESS_KEY_ID=... +AWS_SECRET_ACCESS_KEY=... +GOOGLE_APPLICATION_CREDENTIALS=/path/to/gcs-key.json +AZURE_STORAGE_CONNECTION_STRING=... + +# MCP Server +MCP_TRANSPORT=http +MCP_PORT=8765 + +# Sync Monitoring (optional) +SYNC_WEBHOOK_URL=https://... +SLACK_WEBHOOK_URL=https://hooks.slack.com/... + +# Logging +LOG_LEVEL=INFO +LOG_FILE=/var/log/skillseekers/app.log +``` + +**Security Note:** Never commit `.env` files to version control! + +```bash +# Secure the env file +chmod 600 /opt/skillseekers/.env +``` + +## Configuration + +### 1. GitHub Configuration + +Use the interactive configuration wizard: + +```bash +skill-seekers config --github +``` + +This will: +- Add GitHub personal access tokens +- Configure rate limit strategies +- Test token validity +- Support multiple profiles (work, personal, etc.) + +### 2. API Keys Configuration + +```bash +skill-seekers config --api-keys +``` + +Configure: +- Claude API (Anthropic) +- Gemini API (Google) +- OpenAI API +- Voyage AI (embeddings) + +### 3. Connection Testing + +```bash +skill-seekers config --test +``` + +Verifies: +- ✅ GitHub token(s) validity and rate limits +- ✅ Claude API connectivity +- ✅ Gemini API connectivity +- ✅ OpenAI API connectivity +- ✅ Cloud storage access (if configured) + +## Deployment Options + +### Option 1: Systemd Service (Recommended) + +Create `/etc/systemd/system/skillseekers-mcp.service`: + +```ini +[Unit] +Description=Skill Seekers MCP Server +After=network.target + +[Service] +Type=simple +User=skillseekers +Group=skillseekers +WorkingDirectory=/opt/skillseekers +EnvironmentFile=/opt/skillseekers/.env +ExecStart=/opt/skillseekers/venv/bin/python -m skill_seekers.mcp.server_fastmcp --transport http --port 8765 +Restart=always +RestartSec=10 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=skillseekers-mcp + +# Security +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ProtectHome=true +ReadWritePaths=/opt/skillseekers /var/log/skillseekers + +[Install] +WantedBy=multi-user.target +``` + +**Enable and start:** + +```bash +sudo systemctl daemon-reload +sudo systemctl enable skillseekers-mcp +sudo systemctl start skillseekers-mcp +sudo systemctl status skillseekers-mcp +``` + +### Option 2: Docker Deployment + +See [Docker Deployment Guide](./DOCKER_DEPLOYMENT.md) for detailed instructions. + +**Quick Start:** + +```bash +# Build image +docker build -t skillseekers:latest . + +# Run container +docker run -d \ + --name skillseekers-mcp \ + -p 8765:8765 \ + -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ + -e GITHUB_TOKEN=$GITHUB_TOKEN \ + -v /opt/skillseekers/data:/app/data \ + --restart unless-stopped \ + skillseekers:latest +``` + +### Option 3: Kubernetes Deployment + +See [Kubernetes Deployment Guide](./KUBERNETES_DEPLOYMENT.md) for detailed instructions. + +**Quick Start:** + +```bash +# Install with Helm +helm install skillseekers ./helm/skillseekers \ + --namespace skillseekers \ + --create-namespace \ + --set secrets.anthropicApiKey=$ANTHROPIC_API_KEY \ + --set secrets.githubToken=$GITHUB_TOKEN +``` + +### Option 4: Docker Compose + +See [Docker Compose Guide](./DOCKER_COMPOSE.md) for multi-service deployment. + +```bash +# Start all services +docker-compose up -d + +# Check status +docker-compose ps + +# View logs +docker-compose logs -f +``` + +## Monitoring & Observability + +### 1. Health Checks + +**MCP Server Health:** + +```bash +# HTTP transport +curl http://localhost:8765/health + +# Expected response: +{ + "status": "healthy", + "version": "2.9.0", + "uptime": 3600, + "tools": 25 +} +``` + +### 2. Logging + +**Configure structured logging:** + +```python +# config/logging.yaml +version: 1 +formatters: + json: + format: '{"time":"%(asctime)s","level":"%(levelname)s","msg":"%(message)s"}' +handlers: + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/skillseekers/app.log + maxBytes: 10485760 # 10MB + backupCount: 5 + formatter: json +loggers: + skill_seekers: + level: INFO + handlers: [file] +``` + +**Log aggregation options:** +- **ELK Stack:** Elasticsearch + Logstash + Kibana +- **Grafana Loki:** Lightweight log aggregation +- **CloudWatch Logs:** For AWS deployments +- **Stackdriver:** For GCP deployments + +### 3. Metrics + +**Prometheus metrics endpoint:** + +```bash +# Add to MCP server +from prometheus_client import start_http_server, Counter, Histogram + +# Metrics +scraping_requests = Counter('scraping_requests_total', 'Total scraping requests') +scraping_duration = Histogram('scraping_duration_seconds', 'Scraping duration') + +# Start metrics server +start_http_server(9090) +``` + +**Key metrics to monitor:** +- Request rate +- Response time (p50, p95, p99) +- Error rate +- Memory usage +- CPU usage +- Disk I/O +- GitHub API rate limit remaining +- Claude API token usage + +### 4. Alerting + +**Example Prometheus alert rules:** + +```yaml +groups: + - name: skillseekers + rules: + - alert: HighErrorRate + expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05 + for: 5m + annotations: + summary: "High error rate detected" + + - alert: HighMemoryUsage + expr: process_resident_memory_bytes > 2e9 # 2GB + for: 10m + annotations: + summary: "Memory usage above 2GB" + + - alert: GitHubRateLimitLow + expr: github_rate_limit_remaining < 100 + for: 1m + annotations: + summary: "GitHub rate limit low" +``` + +## Security + +### 1. API Key Management + +**Best Practices:** + +✅ **DO:** +- Store keys in environment variables or secret managers +- Use different keys for dev/staging/prod +- Rotate keys regularly (quarterly minimum) +- Use least-privilege IAM roles for cloud services +- Monitor key usage for anomalies + +⌠**DON'T:** +- Commit keys to version control +- Share keys via email/Slack +- Use production keys in development +- Grant overly broad permissions + +**Recommended Secret Managers:** +- **Kubernetes Secrets** (for K8s deployments) +- **AWS Secrets Manager** (for AWS) +- **Google Secret Manager** (for GCP) +- **Azure Key Vault** (for Azure) +- **HashiCorp Vault** (cloud-agnostic) + +### 2. Network Security + +**Firewall Rules:** + +```bash +# Allow only necessary ports +sudo ufw enable +sudo ufw allow 22/tcp # SSH +sudo ufw allow 8765/tcp # MCP server (if public) +sudo ufw deny incoming +sudo ufw allow outgoing +``` + +**Reverse Proxy (Nginx):** + +```nginx +# /etc/nginx/sites-available/skillseekers +server { + listen 80; + server_name api.skillseekers.example.com; + + # Redirect to HTTPS + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl http2; + server_name api.skillseekers.example.com; + + ssl_certificate /etc/letsencrypt/live/api.skillseekers.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/api.skillseekers.example.com/privkey.pem; + + # Security headers + add_header Strict-Transport-Security "max-age=31536000" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + + # Rate limiting + limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; + limit_req zone=api burst=20 nodelay; + + location / { + proxy_pass http://localhost:8765; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Timeouts + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } +} +``` + +### 3. TLS/SSL + +**Let's Encrypt (free certificates):** + +```bash +# Install certbot +sudo apt install certbot python3-certbot-nginx + +# Obtain certificate +sudo certbot --nginx -d api.skillseekers.example.com + +# Auto-renewal (cron) +0 12 * * * /usr/bin/certbot renew --quiet +``` + +### 4. Authentication & Authorization + +**API Key Authentication (optional):** + +```python +# Add to MCP server +from fastapi import Security, HTTPException +from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials + +security = HTTPBearer() + +async def verify_token(credentials: HTTPAuthorizationCredentials = Security(security)): + token = credentials.credentials + if token != os.getenv("API_SECRET_KEY"): + raise HTTPException(status_code=401, detail="Invalid token") + return token +``` + +## Scaling + +### 1. Vertical Scaling + +**Increase resources:** + +```yaml +# Kubernetes resource limits +resources: + requests: + cpu: "2" + memory: "4Gi" + limits: + cpu: "4" + memory: "8Gi" +``` + +### 2. Horizontal Scaling + +**Deploy multiple instances:** + +```bash +# Kubernetes HPA (Horizontal Pod Autoscaler) +kubectl autoscale deployment skillseekers-mcp \ + --cpu-percent=70 \ + --min=2 \ + --max=10 +``` + +**Load Balancing:** + +```nginx +# Nginx load balancer +upstream skillseekers { + least_conn; + server 10.0.0.1:8765; + server 10.0.0.2:8765; + server 10.0.0.3:8765; +} + +server { + listen 80; + location / { + proxy_pass http://skillseekers; + } +} +``` + +### 3. Database/Storage Scaling + +**Distributed caching:** + +```python +# Redis for distributed cache +import redis + +cache = redis.Redis(host='redis.example.com', port=6379, db=0) +``` + +**Object storage:** +- Use S3/GCS/Azure Blob for skill packages +- Enable CDN for static assets +- Use read replicas for databases + +### 4. Rate Limit Management + +**Multiple GitHub tokens:** + +```bash +# Configure multiple profiles +skill-seekers config --github + +# Automatic token rotation on rate limit +# (handled by rate_limit_handler.py) +``` + +## Backup & Disaster Recovery + +### 1. Data Backup + +**What to backup:** +- Configuration files (`~/.config/skill-seekers/`) +- Generated skills (`output/`) +- Database/cache (if applicable) +- Logs (for forensics) + +**Backup script:** + +```bash +#!/bin/bash +# /opt/skillseekers/scripts/backup.sh + +BACKUP_DIR="/backups/skillseekers" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +# Create backup +tar -czf "$BACKUP_DIR/backup_$TIMESTAMP.tar.gz" \ + ~/.config/skill-seekers \ + /opt/skillseekers/output \ + /opt/skillseekers/.env + +# Retain last 30 days +find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +30 -delete + +# Upload to S3 (optional) +aws s3 cp "$BACKUP_DIR/backup_$TIMESTAMP.tar.gz" \ + s3://backups/skillseekers/ +``` + +**Schedule backups:** + +```bash +# Crontab +0 2 * * * /opt/skillseekers/scripts/backup.sh +``` + +### 2. Disaster Recovery Plan + +**Recovery steps:** + +1. **Provision new infrastructure** + ```bash + # Deploy from backup + terraform apply + ``` + +2. **Restore configuration** + ```bash + tar -xzf backup_20250207.tar.gz -C / + ``` + +3. **Verify services** + ```bash + skill-seekers config --test + systemctl status skillseekers-mcp + ``` + +4. **Test functionality** + ```bash + skill-seekers create --config configs/test.json --max-pages 10 + ``` + +**RTO/RPO targets:** +- **RTO (Recovery Time Objective):** < 2 hours +- **RPO (Recovery Point Objective):** < 24 hours + +## Troubleshooting + +### Common Issues + +#### 1. High Memory Usage + +**Symptoms:** +- OOM kills +- Slow performance +- Swapping + +**Solutions:** + +```bash +# Check memory usage +ps aux --sort=-%mem | head -10 + +# Reduce parallel workers +skill-seekers create --config config.json --workers 2 + +# Enable memory limits +docker run --memory=4g skillseekers:latest +``` + +#### 2. GitHub Rate Limits + +**Symptoms:** +- `403 Forbidden` errors +- "API rate limit exceeded" messages + +**Solutions:** + +```bash +# Check rate limit +curl -H "Authorization: token $GITHUB_TOKEN" \ + https://api.github.com/rate_limit + +# Add more tokens +skill-seekers config --github + +# Use rate limit strategy +# (automatic with multi-token config) +``` + +#### 3. Slow Scraping + +**Symptoms:** +- Long scraping times +- Timeouts + +**Solutions:** + +```bash +# Enable async scraping (2-3x faster) +skill-seekers create --config config.json --async + +# Increase concurrency +# (adjust in config: "concurrency": 10) + +# Re-runs reuse cached data automatically (use --fresh to discard) +skill-seekers create --config config.json +``` + +#### 4. API Errors + +**Symptoms:** +- `401 Unauthorized` +- `429 Too Many Requests` + +**Solutions:** + +```bash +# Verify API keys +skill-seekers config --test + +# Check API key validity +# Claude API: https://console.anthropic.com/ +# OpenAI: https://platform.openai.com/api-keys +# Google: https://console.cloud.google.com/apis/credentials + +# Rotate keys if compromised +``` + +#### 5. Service Won't Start + +**Symptoms:** +- systemd service fails +- Container exits immediately + +**Solutions:** + +```bash +# Check logs +journalctl -u skillseekers-mcp -n 100 + +# Or for Docker +docker logs skillseekers-mcp + +# Common causes: +# - Missing environment variables +# - Port already in use +# - Permission issues + +# Verify config +skill-seekers config --show +``` + +### Debug Mode + +Enable detailed logging: + +```bash +# Set debug level +export LOG_LEVEL=DEBUG + +# Run with verbose output +skill-seekers create --config config.json --verbose +``` + +### Getting Help + +**Community Support:** +- GitHub Issues: https://github.com/yusufkaraaslan/Skill_Seekers/issues +- Documentation: https://skillseekersweb.com/ + +**Log Collection:** + +```bash +# Collect diagnostic info +tar -czf skillseekers-debug.tar.gz \ + /var/log/skillseekers/ \ + ~/.config/skill-seekers/configs/ \ + /opt/skillseekers/.env +``` + +## Performance Tuning + +### 1. Scraping Performance + +**Optimization techniques:** + +```python +# Enable async scraping +"async_scraping": true, +"concurrency": 20, # Adjust based on resources + +# Optimize selectors +"selectors": { + "main_content": "article", # More specific = faster + "code_blocks": "pre code" +} + +# Enable caching +"use_cache": true, +"cache_ttl": 86400 # 24 hours +``` + +### 2. Embedding Performance + +**GPU acceleration (if available):** + +```python +# Use GPU for sentence-transformers +pip install sentence-transformers[gpu] + +# Configure +export CUDA_VISIBLE_DEVICES=0 +``` + +**Batch processing:** + +```python +# Generate embeddings in batches +generator.generate_batch(texts, batch_size=32) +``` + +### 3. Storage Performance + +**Use SSD for:** +- SQLite databases +- Cache directories +- Log files + +**Use object storage for:** +- Skill packages +- Backup archives +- Large datasets + +## Next Steps + +1. **Review** deployment option that fits your infrastructure +2. **Configure** monitoring and alerting +3. **Set up** backups and disaster recovery +4. **Test** failover procedures +5. **Document** your specific deployment +6. **Train** your team on operations + +--- + +**Need help?** See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) or open an issue on GitHub. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..a535653 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,231 @@ +# Skill Seekers Documentation + +> **Complete documentation for Skill Seekers v3.7.0** + +--- + +## Welcome! + +This is the official documentation for **Skill Seekers** - the universal tool for converting **18 source types** (documentation sites, GitHub repos, PDFs, videos, Word docs, EPUB books, Jupyter notebooks, local HTML, OpenAPI specs, AsciiDoc, PowerPoint, RSS/Atom feeds, man pages, Confluence, Notion, Slack/Discord, and local codebases) into AI-ready skills for 21+ platforms. + +--- + +## Where Should I Start? + +### 🚀 I'm New Here + +Start with our **Getting Started** guides: + +1. [Installation](getting-started/01-installation.md) - Install Skill Seekers +2. [Quick Start](getting-started/02-quick-start.md) - Create your first skill in 3 commands +3. [Your First Skill](getting-started/03-your-first-skill.md) - Complete walkthrough +4. [Next Steps](getting-started/04-next-steps.md) - Where to go from here +5. [Scan a Project](getting-started/05-scan-a-project.md) - Bootstrap configs from a codebase + +### 📖 I Want to Learn + +Explore our **User Guides**: + +- [Core Concepts](user-guide/01-core-concepts.md) - How Skill Seekers works +- [Scraping Guide](user-guide/02-scraping.md) - All scraping options +- [Enhancement Guide](user-guide/03-enhancement.md) - AI enhancement explained +- [Packaging Guide](user-guide/04-packaging.md) - Export to platforms +- [Workflows Guide](user-guide/05-workflows.md) - Enhancement workflows +- [Troubleshooting](user-guide/06-troubleshooting.md) - Common issues + +### 📚 I Need Reference + +Look up specific information: + +- [CLI Reference](reference/CLI_REFERENCE.md) - All 19 commands +- [MCP Reference](reference/MCP_REFERENCE.md) - 40 MCP tools +- [Config Format](reference/CONFIG_FORMAT.md) - JSON specification +- [Environment Variables](reference/ENVIRONMENT_VARIABLES.md) - All env vars +- [FAQ](FAQ.md) - Frequently asked questions +- [Troubleshooting](TROUBLESHOOTING.md) - Full troubleshooting reference + +### 🚀 I'm Ready for Advanced Topics + +Power user features: + +- [MCP Server Setup](advanced/mcp-server.md) - MCP integration +- [MCP Tools Deep Dive](advanced/mcp-server.md) - Advanced MCP usage +- [Custom Workflows](advanced/custom-workflows.md) - Create workflows +- [Multi-Source Scraping](advanced/multi-source.md) - Combine sources + +--- + +## Quick Reference + +### The 3 Commands + +```bash +# 1. Install +pip install skill-seekers + +# 2. Create skill +skill-seekers create https://docs.django.com/ + +# 3. Package for Claude +skill-seekers package output/django --target claude +``` + +### Common Commands + +```bash +# Create from any source (auto-detects type) +skill-seekers create https://docs.django.com/ +skill-seekers create facebook/react +skill-seekers create manual.pdf +skill-seekers create notebook.ipynb + +# Scan a project for tech stack — emits one config per framework +skill-seekers scan ./my-react-app --out ./configs/scanned/ + +# Enhance skill +skill-seekers enhance output/my-skill/ + +# Package for platform +skill-seekers package output/my-skill/ --target claude + +# Upload +skill-seekers upload output/my-skill-claude.zip + +# Install complete workflow +skill-seekers install --config react --target claude + +# Doctor / diagnostics +skill-seekers doctor +``` + +--- + +## Documentation Structure + +``` +docs/ +├── README.md # This file - start here +├── ARCHITECTURE.md # How docs are organized +├── UML_ARCHITECTURE.md # Software architecture (UML diagrams) +├── UNIFICATION_PLAN.md # Grand Unification refactor plan + phase results +├── BUG_AUDIT.md # Full-codebase bug audit (historical record) +│ +├── getting-started/ # For new users +│ ├── 01-installation.md +│ ├── 02-quick-start.md +│ ├── 03-your-first-skill.md +│ ├── 04-next-steps.md +│ └── 05-scan-a-project.md +│ +├── user-guide/ # Common tasks +│ ├── 01-core-concepts.md +│ ├── 02-scraping.md +│ ├── 03-enhancement.md +│ ├── 04-packaging.md +│ ├── 05-workflows.md +│ └── 06-troubleshooting.md +│ +├── guides/ # How-to guides +│ ├── MCP_SETUP.md +│ ├── MIGRATION_GUIDE.md +│ ├── TESTING_GUIDE.md +│ └── UPLOAD_GUIDE.md +│ +├── integrations/ # Platform integrations +│ ├── LANGCHAIN.md +│ ├── LLAMA_INDEX.md +│ ├── CURSOR.md +│ └── ... +│ +├── features/ # Feature deep-dives +│ ├── BOOTSTRAP_SKILL.md +│ ├── UNIFIED_SCRAPING.md +│ └── ENHANCEMENT.md +│ +├── reference/ # Technical reference +│ ├── CLI_REFERENCE.md # 19 commands +│ ├── MCP_REFERENCE.md # 40 MCP tools +│ ├── CONFIG_FORMAT.md # JSON spec +│ └── ENVIRONMENT_VARIABLES.md +│ +├── advanced/ # Power user topics +│ ├── mcp-server.md +│ ├── custom-workflows.md +│ └── multi-source.md +│ +├── archive/ # Legacy docs +├── blog/ # Blog posts +├── case-studies/ # Case studies +├── plans/ # Feature plans +├── roadmap/ # Roadmap +├── strategy/ # Strategy docs +└── zh-CN/ # Chinese translations +``` + +--- + +## By Use Case + +### I Want to Build AI Skills + +For Claude, Gemini, ChatGPT: + +1. [Quick Start](getting-started/02-quick-start.md) +2. [Enhancement Guide](user-guide/03-enhancement.md) +3. [Workflows Guide](user-guide/05-workflows.md) + +### I Want to Build RAG Pipelines + +For LangChain, LlamaIndex, vector DBs: + +1. [Core Concepts](user-guide/01-core-concepts.md) +2. [Packaging Guide](user-guide/04-packaging.md) +3. [MCP Reference](reference/MCP_REFERENCE.md) + +### I Want AI Coding Assistance + +For Cursor, Windsurf, Cline, Roo, Aider, Bolt, Kilo, Continue, Kimi Code: + +1. [Your First Skill](getting-started/03-your-first-skill.md) +2. [Local Codebase Analysis](user-guide/02-scraping.md#local-codebase-analysis) +3. `skill-seekers install-agent --agent cursor` + +--- + +## Version Information + +- **Current Version:** 3.7.0 +- **Last Updated:** 2026-06-11 +- **Source Types:** 18 +- **Python Required:** 3.10+ + +--- + +## Contributing to Documentation + +Found an issue? Want to improve docs? + +1. Edit files in the `docs/` directory +2. Follow the existing structure +3. Submit a PR + +See [Contributing Guide](../CONTRIBUTING.md) for details. + +--- + +## External Links + +- **Main Repository:** https://github.com/yusufkaraaslan/Skill_Seekers +- **Website:** https://skillseekersweb.com/ +- **PyPI:** https://pypi.org/project/skill-seekers/ +- **Issues:** https://github.com/yusufkaraaslan/Skill_Seekers/issues + +--- + +## License + +MIT License - see [LICENSE](../LICENSE) file. + +--- + +*Happy skill building! 🚀* diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md new file mode 100644 index 0000000..dc0a36c --- /dev/null +++ b/docs/TROUBLESHOOTING.md @@ -0,0 +1,1102 @@ +# Troubleshooting Guide + +Comprehensive guide for diagnosing and resolving common issues with Skill Seekers. + +## Quick Fixes + +| Issue | Quick Fix | +|-------|-----------| +| `command not found` | `export PATH="$HOME/.local/bin:$PATH"` | +| `ImportError` | `pip install -e .` | +| `Rate limit` | Add `--rate-limit 2.0` | +| `No content` | Check selectors in config | +| `Enhancement fails` | Set `ANTHROPIC_API_KEY` | +| `Out of memory` | Use `--streaming` mode | + +## Table of Contents + +- [Installation Issues](#installation-issues) +- [Configuration Issues](#configuration-issues) +- [Scraping Issues](#scraping-issues) +- [GitHub API Issues](#github-api-issues) +- [API & Enhancement Issues](#api--enhancement-issues) +- [Docker & Kubernetes Issues](#docker--kubernetes-issues) +- [Performance Issues](#performance-issues) +- [Storage Issues](#storage-issues) +- [Network Issues](#network-issues) +- [General Debug Techniques](#general-debug-techniques) +- [Source-Type-Specific Issues](#source-type-specific-issues) + +## Installation Issues + +### Issue: Package Installation Fails + +**Symptoms:** +``` +ERROR: Could not build wheels for... +ERROR: Failed building wheel for... +``` + +**Solutions:** + +```bash +# Update pip and setuptools +python -m pip install --upgrade pip setuptools wheel + +# Install build dependencies (Ubuntu/Debian) +sudo apt install python3-dev build-essential libssl-dev + +# Install build dependencies (RHEL/CentOS) +sudo yum install python3-devel gcc gcc-c++ openssl-devel + +# Retry installation +pip install skill-seekers +``` + +### Issue: Command Not Found After Installation + +**Symptoms:** +```bash +$ skill-seekers --version +bash: skill-seekers: command not found +``` + +**Solutions:** + +```bash +# Check if installed +pip show skill-seekers + +# Add to PATH +export PATH="$HOME/.local/bin:$PATH" + +# Or reinstall with --user flag +pip install --user skill-seekers + +# Verify +which skill-seekers +``` + +### Issue: Python Version Mismatch + +**Symptoms:** +``` +ERROR: Package requires Python >=3.10 but you are running 3.9 +``` + +**Solutions:** + +```bash +# Check Python version +python --version +python3 --version + +# Use specific Python version +python3.12 -m pip install skill-seekers + +# Create alias +alias python=python3.12 + +# Or use pyenv +pyenv install 3.12 +pyenv global 3.12 +``` + +### Issue: Video Visual Dependencies Missing + +**Symptoms:** +``` +Missing video dependencies: easyocr +RuntimeError: Required video visual dependencies not installed +``` + +**Solutions:** + +```bash +# Run the GPU-aware setup command +skill-seekers create --setup + +# This auto-detects your GPU and installs: +# - PyTorch (correct CUDA/ROCm/CPU variant) +# - easyocr, opencv, pytesseract, scenedetect, faster-whisper +# - yt-dlp, youtube-transcript-api + +# Verify installation +python -c "import torch; print(f'PyTorch: {torch.__version__}, CUDA: {torch.cuda.is_available()}')" +python -c "import easyocr; print('easyocr OK')" +``` + +**Common issues:** +- Running outside a virtual environment → `--setup` will warn you; create a venv first +- Missing system packages → Install `tesseract-ocr` and `ffmpeg` for your OS +- AMD GPU without ROCm → Install ROCm first, then re-run `--setup` + +## Configuration Issues + +### Issue: API Keys Not Recognized + +**Symptoms:** +``` +Error: ANTHROPIC_API_KEY not found +401 Unauthorized +``` + +**Solutions:** + +```bash +# Check environment variables +env | grep API_KEY + +# Set in current session +export ANTHROPIC_API_KEY=sk-ant-... + +# Set permanently (~/.bashrc or ~/.zshrc) +echo 'export ANTHROPIC_API_KEY=sk-ant-...' >> ~/.bashrc +source ~/.bashrc + +# Or use .env file +cat > .env < configs/test.json < + +# Check system resources +htop +df -h +``` + +### Issue: API Cost Concerns + +**Symptoms:** +``` +Worried about API costs for enhancement +Need free alternative +``` + +**Solutions:** + +```bash +# Use LOCAL mode (free! — auto-selected when no API key is set) +skill-seekers enhance output/react/ --agent claude + +# Skip enhancement entirely +skill-seekers create --config config.json --enhance-level 0 + +# Estimate cost before enhancing +# Claude API: ~$0.15-$0.30 per skill +# Check usage: https://console.anthropic.com/ + +# Use batch processing +for dir in output/*/; do + skill-seekers enhance "$dir" --mode LOCAL --background +done +``` + +## Docker & Kubernetes Issues + +### Issue: Container Won't Start + +**Symptoms:** +``` +Error response from daemon: Container ... is not running +Container exits immediately +``` + +**Solutions:** + +```bash +# Check logs +docker logs skillseekers-mcp + +# Common issues: +# 1. Missing environment variables +docker run -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY ... + +# 2. Port already in use +sudo lsof -i :8765 +docker run -p 8766:8765 ... + +# 3. Permission issues +docker run --user $(id -u):$(id -g) ... + +# Run interactively to debug +docker run -it --entrypoint /bin/bash skillseekers:latest +``` + +### Issue: Kubernetes Pod CrashLoopBackOff + +**Symptoms:** +``` +NAME READY STATUS RESTARTS +skillseekers-mcp-xxx 0/1 CrashLoopBackOff 5 +``` + +**Solutions:** + +```bash +# Check pod logs +kubectl logs -n skillseekers skillseekers-mcp-xxx + +# Describe pod +kubectl describe pod -n skillseekers skillseekers-mcp-xxx + +# Check events +kubectl get events -n skillseekers --sort-by='.lastTimestamp' + +# Common issues: +# 1. Missing secrets +kubectl get secrets -n skillseekers + +# 2. Resource constraints +kubectl top nodes +kubectl edit deployment skillseekers-mcp -n skillseekers + +# 3. Liveness probe failing +# Increase initialDelaySeconds in deployment +``` + +### Issue: Image Pull Errors + +**Symptoms:** +``` +ErrImagePull +ImagePullBackOff +Failed to pull image +``` + +**Solutions:** + +```bash +# Check image exists +docker pull skillseekers:latest + +# Create image pull secret +kubectl create secret docker-registry regcred \ + --docker-server=registry.example.com \ + --docker-username=user \ + --docker-password=pass \ + -n skillseekers + +# Add to deployment +spec: + imagePullSecrets: + - name: regcred + +# Use public image (if available) +image: docker.io/skillseekers/skillseekers:latest +``` + +## Performance Issues + +### Issue: High Memory Usage + +**Symptoms:** +``` +Process killed (OOM) +Memory usage: 8GB+ +System swapping +``` + +**Solutions:** + +```bash +# Check memory usage +ps aux --sort=-%mem | head -10 +htop + +# Reduce parallel workers +skill-seekers create --config config.json --workers 2 + +# Enable memory limits +# Docker: +docker run --memory=4g skillseekers:latest + +# Kubernetes: +resources: + limits: + memory: 4Gi + +# Clear cache +rm -rf ~/.cache/skill-seekers/ + +# Use streaming for large files +# (automatically handled by library) +``` + +### Issue: Slow Performance + +**Symptoms:** +``` +Operations taking much longer than expected +High CPU usage +Disk I/O bottleneck +``` + +**Solutions:** + +```bash +# Enable async operations +skill-seekers create --config config.json --async + +# Increase concurrency +{ + "concurrency": 20 # Adjust based on resources +} + +# Use SSD for storage +# Move output to SSD: +mv output/ /mnt/ssd/output/ + +# Monitor performance +# CPU: +mpstat 1 +# Disk I/O: +iostat -x 1 +# Network: +iftop + +# Profile code +python -m cProfile -o profile.stats \ + -m skill_seekers.cli.doc_scraper --config config.json +``` + +### Issue: Disk Space Issues + +**Symptoms:** +``` +No space left on device +Disk full +Cannot create file +``` + +**Solutions:** + +```bash +# Check disk usage +df -h +du -sh output/* + +# Clean up old skills +find output/ -type d -mtime +30 -exec rm -rf {} \; + +# Compress old benchmarks +tar czf benchmarks-archive.tar.gz benchmarks/ +rm -rf benchmarks/*.json + +# Push outputs to cloud storage (S3/GCS/Azure) +skill-seekers-cloud --provider s3 --bucket my-skills-bucket upload output/react/ + +# Clear cached scrape data for a skill +skill-seekers create --config config.json --fresh +``` + +## Storage Issues + +### Issue: S3 Upload Fails + +**Symptoms:** +``` +botocore.exceptions.NoCredentialsError +AccessDenied +``` + +**Solutions:** + +```bash +# Check credentials +aws sts get-caller-identity + +# Configure AWS CLI +aws configure + +# Set environment variables +export AWS_ACCESS_KEY_ID=... +export AWS_SECRET_ACCESS_KEY=... +export AWS_DEFAULT_REGION=us-east-1 + +# Check bucket permissions +aws s3 ls s3://my-bucket/ + +# Test upload +echo "test" > test.txt +aws s3 cp test.txt s3://my-bucket/ +``` + +### Issue: GCS Authentication Failed + +**Symptoms:** +``` +google.auth.exceptions.DefaultCredentialsError +Permission denied +``` + +**Solutions:** + +```bash +# Set credentials file +export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json + +# Or use gcloud auth +gcloud auth application-default login + +# Verify permissions +gsutil ls gs://my-bucket/ + +# Test upload +echo "test" > test.txt +gsutil cp test.txt gs://my-bucket/ +``` + +## Network Issues + +### Issue: Connection Timeouts + +**Symptoms:** +``` +requests.exceptions.ConnectionError +ReadTimeout +Connection refused +``` + +**Solutions:** + +```bash +# Check network connectivity +ping google.com +curl https://docs.example.com/ + +# Increase timeout +{ + "timeout": 60 # seconds +} + +# Use proxy if behind firewall +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 + +# Check DNS resolution +nslookup docs.example.com +dig docs.example.com + +# Test with curl +curl -v https://docs.example.com/ +``` + +### Issue: SSL/TLS Errors + +**Symptoms:** +``` +ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] +SSLCertVerificationError +``` + +**Solutions:** + +```bash +# Update certificates +# Ubuntu/Debian: +sudo apt update && sudo apt install --reinstall ca-certificates + +# RHEL/CentOS: +sudo yum reinstall ca-certificates + +# As last resort (not recommended for production): +export PYTHONHTTPSVERIFY=0 +skill-seekers create --config config.json +``` + +## General Debug Techniques + +### Enable Debug Logging + +```bash +# Set debug level +export LOG_LEVEL=DEBUG + +# Run with verbose output +skill-seekers create --config config.json --verbose + +# Save logs to file +skill-seekers create --config config.json 2>&1 | tee debug.log +``` + +### Collect Diagnostic Information + +```bash +# System info +uname -a +python --version +pip --version + +# Package info +pip show skill-seekers +pip list | grep skill + +# Environment +env | grep -E '(API_KEY|TOKEN|PATH)' + +# Recent errors +grep -i error /var/log/skillseekers/*.log | tail -20 + +# Package all diagnostics +tar czf diagnostics.tar.gz \ + debug.log \ + ~/.config/skill-seekers/ \ + /var/log/skillseekers/ +``` + +### Test Individual Components + +```bash +# Test scraper +python -c " +from skill_seekers.cli.doc_scraper import scrape_all +pages = scrape_all('configs/test.json') +print(f'Scraped {len(pages)} pages') +" + +# Test GitHub API +python -c " +from skill_seekers.cli.github_fetcher import GitHubFetcher +fetcher = GitHubFetcher() +repo = fetcher.fetch('facebook/react') +print(repo['full_name']) +" + +# Test embeddings +python -c " +from skill_seekers.embedding.generator import EmbeddingGenerator +gen = EmbeddingGenerator() +emb = gen.generate('test', model='text-embedding-3-small') +print(f'Embedding dimension: {len(emb)}') +" +``` + +### Interactive Debugging + +```python +# Add breakpoint +import pdb; pdb.set_trace() + +# Or use ipdb +import ipdb; ipdb.set_trace() + +# Debug with IPython +ipython -i script.py +``` + +## Getting More Help + +If you're still experiencing issues: + +1. **Search existing issues:** https://github.com/yusufkaraaslan/Skill_Seekers/issues +2. **Check documentation:** https://skillseekersweb.com/ +3. **Ask on GitHub Discussions:** https://github.com/yusufkaraaslan/Skill_Seekers/discussions +4. **Open a new issue:** Include: + - Skill Seekers version (`skill-seekers --version`) + - Python version (`python --version`) + - Operating system + - Complete error message + - Steps to reproduce + - Diagnostic information (see above) + +## Source-Type-Specific Issues + +### Issue: Missing Optional Dependencies for New Source Types + +**Symptoms:** +``` +ModuleNotFoundError: No module named 'ebooklib' +ModuleNotFoundError: No module named 'python-docx' +ModuleNotFoundError: No module named 'python-pptx' +ImportError: Missing dependency for jupyter extraction +``` + +**Solutions:** + +```bash +# Install all optional dependencies at once +pip install skill-seekers[all] + +# Or install per source type +pip install python-docx # Word (.docx) support +pip install ebooklib # EPUB support +pip install python-pptx # PowerPoint (.pptx) support +pip install nbformat nbconvert # Jupyter Notebook support +pip install pyyaml jsonschema # OpenAPI/Swagger support +pip install asciidoctor # AsciiDoc support (or install system asciidoctor) +pip install feedparser # RSS/Atom feed support +pip install groff # Man page support (system package) + +# Video support (GPU-aware) +skill-seekers create --setup +``` + +### Issue: Confluence API Authentication Fails + +**Symptoms:** +``` +401 Unauthorized: Confluence API rejected credentials +Error: CONFLUENCE_TOKEN not found +``` + +**Solutions:** + +```bash +# Set Confluence Cloud credentials +export CONFLUENCE_URL=https://yourorg.atlassian.net +export CONFLUENCE_EMAIL=your-email@example.com +export CONFLUENCE_TOKEN=your-api-token + +# Generate API token at: +# https://id.atlassian.com/manage-profile/security/api-tokens + +# Test connection +skill-seekers create --space-key MYSPACE --dry-run + +# For Confluence Server/Data Center, use personal access token: +export CONFLUENCE_TOKEN=your-pat +``` + +### Issue: Notion API Authentication Fails + +**Symptoms:** +``` +401 Unauthorized: Notion API rejected credentials +Error: NOTION_TOKEN not found +``` + +**Solutions:** + +```bash +# Set Notion integration token +export NOTION_TOKEN=secret_... + +# Create an integration at: +# https://www.notion.so/my-integrations + +# IMPORTANT: Share the target database/page with your integration +# (click "..." menu on page → "Add connections" → select your integration) + +# Test connection +skill-seekers create --database-id DATABASE_ID --dry-run +``` + +### Issue: Jupyter Notebook Extraction Fails + +**Symptoms:** +``` +Error: Cannot read notebook format +nbformat.reader.NotJSONError +``` + +**Solutions:** + +```bash +# Ensure notebook is valid JSON +python -c "import json; json.load(open('notebook.ipynb'))" + +# Install required deps +pip install nbformat nbconvert + +# Re-run with verbose output to see the parse error +skill-seekers create notebook.ipynb --verbose +``` + +### Issue: OpenAPI Spec Parsing Fails + +**Symptoms:** +``` +Error: Not a valid OpenAPI specification +Error: Missing 'openapi' or 'swagger' field +``` + +**Solutions:** + +```bash +# Validate your spec first +pip install openapi-spec-validator +python -c " +from openapi_spec_validator import validate +validate({'openapi': '3.0.0', ...}) +" + +# Ensure the file has the 'openapi' or 'swagger' top-level key +# Supported: OpenAPI 3.x and Swagger 2.0 + +# For remote specs +skill-seekers create https://api.example.com/openapi.json --name my-api +``` + +### Issue: EPUB Extraction Produces Empty Output + +**Symptoms:** +``` +Warning: No content found in EPUB +0 chapters extracted +``` + +**Solutions:** + +```bash +# Check EPUB is valid +pip install epubcheck +epubcheck book.epub + +# Re-run with verbose output (images are extracted automatically) +skill-seekers create book.epub --verbose + +# Some DRM-protected EPUBs cannot be extracted +# Ensure your EPUB is DRM-free +``` + +### Issue: Slack/Discord Export Not Recognized + +**Symptoms:** +``` +Error: Cannot detect chat platform from export directory +Error: No messages found in export +``` + +**Solutions:** + +```bash +# Specify platform explicitly +skill-seekers create --chat-export-path ./slack-export --platform slack +skill-seekers create --chat-export-path ./discord-export --platform discord + +# For Slack: Export from Workspace Settings → Import/Export +# For Discord: Use DiscordChatExporter or similar tool + +# Check export directory structure +ls ./slack-export/ +# Should contain: channels/, users.json, etc. +``` + +--- + +## Common Error Messages Reference + +| Error | Cause | Solution | +|-------|-------|----------| +| `ModuleNotFoundError` | Package not installed | `pip install skill-seekers` | +| `401 Unauthorized` | Invalid API key | Check API key format | +| `403 Forbidden` | Rate limit exceeded | Add more GitHub tokens | +| `404 Not Found` | Invalid URL/repo | Verify URL is correct | +| `429 Too Many Requests` | API rate limit | Wait or use multiple keys | +| `ConnectionError` | Network issue | Check internet connection | +| `TimeoutError` | Request too slow | Increase timeout | +| `MemoryError` | Out of memory | Reduce batch size | +| `PermissionError` | Access denied | Check file permissions | +| `FileNotFoundError` | Missing file | Verify file path | +| `No module named 'ebooklib'` | EPUB dep missing | `pip install ebooklib` | +| `No module named 'python-docx'` | Word dep missing | `pip install python-docx` | +| `No module named 'python-pptx'` | PPTX dep missing | `pip install python-pptx` | +| `CONFLUENCE_TOKEN not found` | Confluence auth missing | Set env vars (see above) | +| `NOTION_TOKEN not found` | Notion auth missing | Set env vars (see above) | + +--- + +**Still stuck?** Open an issue with the "help wanted" label and we'll assist you! diff --git a/docs/UML/exports/00_package_overview.png b/docs/UML/exports/00_package_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..a842061ee3bffecf947b5be19ae97c533dc3d000 GIT binary patch literal 110434 zcmZs@1yq#V`!>uBLk!&^DJhL0h~$8%bSQ|@NQZPu&M2USgot!0A|28_7NF87T>=u) zIW*rMIeO0j`@L(8%3_|_`;P0bYa6bkb%T`X91#u<4yme&@=Y8Z+(qz*mJlEOhWLIJ z3-|}(ar1@}PDvLt_=X)vRasHb*K|1@FG*h?(;6&!4|&grVCWt%K0g0JO@pWcQ-gfN zOn*0>jE)mc10_>A0!8 zU<&jywJ79&J}701Bo4~kLxlhH4fa~WzGI3cB>eyXK`0U4$>Fu)a0>gMuaNLNIfsn@ zuNQ?-l&NU9D-V(UKi*WPf)O`|^8C*Se%?GTBR0H@@qfSKF^^ldMZ+}y=R>80=8!v2 zZ6W@@UumE@#=HM_J4iTJ2=bbr63=^^Bt$D=2bmy|AXxy}_S1bISdXON@kLkv<)#&+ z^~=E)-1$!vMl3^@b`OZA9xvSVp^1*s-Okp5_F}1(;jQyBW zB!*MQ+9i9OdB0$AQ#*)mq#vzbK6nFH{CcSZY&D{(=GMAj{=!b_J1=_hV3`HmS3^su zu$d#8CesTH!KFj~O-RMwrQ7I@a*Qb~<7tyTQBobHzc=K?lL;nTV;|M!<{d~NZHiMu zr$hY>4BbfjyQO!%#QVbdp|_p1j~Mr9Y9+i^P9a~fm7d~sg*OdS4sq-rNKcI}>@cI> zm19`RGu{|jmd4;2UVd**kQEqixl5Swsq~ejEgo6qQ{5xxk9G9Hbkjl6xLpOYnSNy3 zvUyEx0TZiFcN%V>{o)pOV$eU!F_MHC$zGPFA~@G?l4(BT8B@ZQ?%{R+OhduDbUnF4-1J5F>XsCV5tbua1tO11-NQ!>2dwn%p> zl-9*vmxlZ|=H08OZ0FCHV}`O7}ciE6N11wk9D~z1NmI9I_))}uDlv_ z!D;(Aad^3h&+nM2hkJKo7u|BN6a#C1V(Noa64m4*zkX-g>xjJQF)Gq>&4g5trRfAV zba{6o8(m#K=%!eI-c@b6i4z6sU8+N6lw(TB=>%7wGzH-#ar=#vOY!Ya45JNum*UWp zd1Muu}urWfy-_!E>R#&x1=&<=jC?nIwL2PKN+G&~9yQKD5K za9jP98CsiZ7_}gqe39FA`*D+Dd8T1U1o4JEnxwbNFz*WIK&d>v0I&zfXpy%nBr9|c zw~K&EzkY$khm*B=aS-L|to zafshX-xcOs3P3CYOX`ITyCR#?%uUXaznx>VmG-rcyYp`!coH|p{ehoKzN2vo`~dp z!4C}j{*k{~iYnM<6q52-iMnvFn@p}{OW8$DqmACGYN+M`r^n0g_3(1cbc^_<+#nu@ zi@KSNLOM&Bq*QnkLJNT2yyx^vHC!(i>Fvn1&V?BJi$4772wnNm_Jl9H%M;+2RH^`; z;`;Bs(qN~B(M%VNRA1PJd{^{qV4ZaBH0zlYqU#`m& zO9VYswiqVb5ejL_eecR-{|{{PozI$KH-s5{OL15D7z54uh?fe!>M@4WEp~FxEouH2 zC$p+y&$&GA#C9v!ox?6vObe`OhS~|Ek@XPveA}k}CCrL;dBP<5|6=7o$bKOdDaKdG z9Iy7{V}(?rdui##KVc|ToGtF^c*@DF{yml#`3Qsu|KfSVAm-B&bu3y zqB=!0l{a-%_ocY0x5GcM?oTX41cDF}V3wIJR{$RS8rX(GO5UM3%9A>YI0@JH^0@Pm z-#<%eCq;21YaqvkR_<8!^YH>LZ^A40|C$2$p^i6;D!(6h^k+s0Bng2JR%vTawek>N z8H=Dd=a}Mh6M`*{{-fS3Ef@_PbFoZ*-6q{>y$sw<%V8d8dOmiw6?Rk2{QDGry;==3 z{_g8!&JuhKQTR49LkFW{`~B4X>f!lVuTHOxNP5rDotX93hF4<56aDsJQi6*^xgCvTyolMW~Nd3%Dc%yIMt| zk{!U_biwsOQX1@LunA}wj?CQG`~Hsqte}pgjH`#pm)F2_^e%NfAtZ7;N+V}n6h%d7 zOz4DH1dZbV;b(U5Kg$KVh>j(Ao&^5t4~?v7*zKr~`@CM2@2;l)U#HLrLtd+ABmc9c z-$H8VK}n(=(DB2b-KNP1NnioC9;Pb^@Q?70<#lfbihuSTs}5D8@#ihW5fw{>Emy*G zVu1#TcsqGg5#oetgifSIBT@bV`G4)oo3N318(*s{T7CB;?5!s7+0iY>wM|X)*IC~T zPgQahp1aWOPW+=*cXe|kbMh=lXZVmCwF)EH@N>3VELs#L zO$9W|89;s?s?Q@TvmThx=8E}0>H+2iaL80KY4yt=XFJ?e*EAOVk%0p*hi0S+gU$)?-UXf4%Lkx;f=k zJbQlw)mO6ilGNP}Sf4i7@v(;;xkeTOk!<7w8Np>^i2U;cB%FrQS87O;jcD0L46OPy zH!!fVx^iot9%iUGWD>^~hhAd7^_+17q|DhVjTqV6yYw2Fes67@@fvi&NSw|(H~8Yh z{P0lK4V?S01~Z{GtrMeUcX<4c30$?7o4%toElW$GVK++WaqB-#+%g%ixmT(kd2BX0 zco>>{=-HBTaH}OWcjJK$a&->6KUFm3&x=#4TxyHA8q?&%zI(b#OlBH4bkD?hPY2sc6V70 zK7AErDERV`rUFFgg-b+W2OmoU<#&Sv&DQ8sR{M_~erX@mrL;y8yA5+Te6xD9EOcrA zeDJr~%p<`|`yynaJo3{yJkHYwb}snD^hEaq&iNA6%I{{J{&6j=iNxvvSAnN9q*_Dy zI9-`tS$i&zm^4H8+`Oi9a@^=oLQ6L`&ZF=sEefo8-3*Yt! zrLPoG9Gbl>r+p!JUggf^0oI-A7 z3GF2FX zw2Ys#_SS!J0>uLqb~(JAJ_+%XkeQH~Owh!-kZa)izW(Wi{?GEUKzBlwyfr#5YD4&* z^c9<7szr@{p*rgv8GVOD zu#|Yx`acl|;1tN!vVS^iX6?c%Qy*M(&FB>!PiOWT`K zQX`jtZ(Rg0%ZPsPHesJTOJntvpeWW1wmbGm-&y#uT~hvb4IJl!cXwFd!!*prfJBac zv53<_8i4Oa6VRk*A?^c_hnN<+wybvjxsg2`Mh1;0i@qY1qP2Cu3U2inNZos`FT*MZ zL0~R3wN2Dejlb?5%kFG6bwY$$S$(UC2**>vZ~j`Hy8HVn?yBbA=2B&E1)65vPgXo1 zVpA+TF{cRlHzfL@u6yn2ZN;NObO5=oEtCkAMm^Nnx_3!x%b(rVmhbX&-%dev zJ5}iph#@qn>RzRrw+8nE|LY7kAY!`kh?+Trh?ync@)gP=AfEU?2z@JM| zBvd_<=PyGGt$HpuSV8l#>WZ*`8+V1n^|CAX`n}MA0g)kIl(6n~43XE8vj#g?8Q!{} z=!oo@$BJFe(xefp67IPyZaPd!twIURl1B4|rUXiiu#wi<{#ct4b3jLJ7lB?vd!XGk zO%^a`C~@=Jl>C&@RFB@>`<9yQoY>S=EYAA_?A-aOiiMy{1*+zF<~ThN2E9(ySk3Q1 ziqM2RF)L3OFS-{?Sg*d*FsFhzeg zLTv}qmwGl5>O2JqxA!fngJs2`^(3OC3h8yN(1QZxl~s-z7;|yl2E5w;%&EcORUk^6 z8cncv!p?DIiJKYV%P=9qW1;X%k;u~|M>=6MC#-{n^R5e&J-{pM;+n8vvV*E(MIUmv zjPwD}TG@=8!nztByA!D~nIL_FRz4ze^*v0Dr%ZO8s)u#2V74J3`%Eg&;IgER#21vh zu~p4=AV){o$cH4vQ$kou$zn&Iw+dU0?2`0Qoi?+4gqXE3>Da)+x7e_gChZ2dMd=@qUo zM5P{RHHJYwBZ{H2{7A9gW;&(j_9SiZwm&Y8g}hf-yO1vT7U+c?;IiS$RQIS^hp>?> z{(EBJ!Qz|ZM^8dS1^aHvJ(WC5HQ5b z;+^QJZ%mn?U!iS$Cevn<~}Y^I49U-8T@nE6(1-IPJ)dGfN0QY zRJjcK*|G?`pqPg(#S?(^3>eEAE~7$#S8ET2SPd~JEbY?_G5ZRB2pW;V-qDT=5vnD_ zq1lw@Cnp=dL7m479Llc`GxUJd)&BYH$|0R}5WcHJav*>lcvnrrHAI!yB;hmKU7;oC zNf4W{TI7QAe;T0P<5RspOh?_$0UjXORS>Ag0pa$M;gx1P_9rH3WEf)Xu~>2sQZ>w} z!D)8+7jeM4Q4ZLBNm^iBprV>IyZ)@M*2KsQx?}yia0zZ#zBhMs60de*{+d7b2Vic% zG6*Xlf0jV~M6xR0{-$rFVi9Z(pIV^Xwv3yA`ZiZNLHX&WaM!(u<@T=sMjsRx#T{4@ z+?N;LI)qQ%&JPw^)KzpWh6;nvYUTL+`eq+m(Jg;i*vk4uV$gW&hJv6zZ&m<_0CdS9 zkc%Ab6nu0vp&0yBycYbQ#+ZUR_SI3?CbnU)rj0!AW4oJ(m;0K?&X`L zdl4Jy(q5aZ&N~WtTR4+2iGBkD)4~&1)^}&>RfBPLiNNM?cy8O1_&9?47O3^`1{$Y8 z#r(RttY~hiCiF>^B9K&dyL9+-kuUceAsQ8H<2c;C?_!APuPP zGBw3e8rY`Y$4evOAyiTQ+Go#Ly z?>=Y3<$8jqLvzC4w&f-v=74~0oz+%!ln6VB0^rMp+kE}G+@M$2H6w1ls~eE&(`TtH z*e9^9SI6`R+p)Tgzy=ToH6JTzFsCbHnGJi7fjuO#7*c%O$5D}uZc#qo^j%xq|7oY_ zrGi*m1#dWQr0Nmg^F%kmai`L^heCXLn}oIJ@pbv$IsOu>Cpfd2JQ#!$%VhK6>eualZL`qT`2L?s7cFalgfS&qMqgP?b*^6wa%_JK zr{>Yvn@e?h{(7L;8W!z1x59?wgJUbPB@cq$Z%-hBra}vnOG2^=tY$zetfL6B7}}7< z5)B+FqFOnA?VDs2=~si3Hlb;9xDQ3j!?ZVI>t8|Os z-=~%a3H5DBOzxh66}5sp+hu+%FBz ziPB&1m%+J`fXO}NZOeTfhP?S&!8o_7;Nk&gnTV@Fa^R(T$;j=wp3SOwZXHNm$q5^Q zJSXx9Vg>3Xt_1`)VggD!7W( zDdlsm(JGRe+qj-#>d@m(u~m_Iy2x$!y!{M(xJr(h&$t(7M!@FhpXaV#^4qqP_E|kD zro=uL3AcKIl;o$O{E4-_^H|%1E;_rbBC4`ma4S%abdAsxtRu_)j*{F1V{_tYUxcDagnuNC+BH=@Yx zPe?|j&$HE& zO1ZM%(w38OEa4Ljmf)85-|B4H+$*jcFbr6KM{u+^6I1CjnZan2gnE-1l;Sqi8j4Xl zY8xFYw_F^p5t$6cuy}Mz&@UBLko9Z6`B*dT1cdi6rvuGz>l-8)KKwiHZWlxqqn40Y z#FnyI#8Kz4Dmw2(p1=sbj9Y=nI9zk#!>hzs;xz;bZZ3Q^PWa2DPHfgu1}i%amf7oI z7o*M%LLyDuR5HtDxQS*#S8i!+493(eoF2v7=O*(Uonj_~yCVcj7=qRk3`{NJu2rIl zoBVdBd#;j`UY*GdK6$V^=Aq3ReB`Djx1;CWa_lXCyxqSp9ont1-E;Mamjl&S!)m?2 zWWZKu&Vy%92IamA4ccvP-JH8rKB%Xd|mPsI{a}oY7JoM;YFuZ2rp^ zwG@s$$z<0NyOY7EI#El_oH4S`$XKLZ$K2XBKJ#Xl9q*2Me4;f7vDjHEX%M~|Mq<%& zyi4q}=)b%C8IRr={hnB)qp-A~&ve(2R@rZteVFq%CbT)w7CWm8m1KCumDtzKr8w69Dkx--Tn=WcAi6*4RMDxlAq#9E zOy;M|YOUpk#>~LoyRA`-)T>dBKF8@k6BgCOHZw?EvZ;3jY*t&Hm*;a+or!FZUKlz5 z7_yA94yC<~n4dhvtg$thZmp{6y(#nE$zIw%yur&~9$s`dN z#RWp|BQp!9at{&+4X!(d*3qYQh4F<)dLO@uQZp)sHR2b&AczyDkbW#|X6C~VHK}g3y|OgCSmdTt4Pc2&qOn__^$*w{kr1+u>iJ|Og= ze-y`gL+q=dJ0^JL$78l!qZ;QQb=x386g4~UndNhTdF1tu^1jq5l)a<)?H0ptcy~6KS z3nxsH{Df6^^98y1bPQ<4*Mk(Ul-Qd*MF~obBmL2&OEO>WJEs9;ywuK=_gv1Cc-E34)-15) zZ=6HUCNHbOUel*0kbQc3wAI~+nedON>PX<|qn&P^@LLLn|DrjNUu)b7%ic0_uCr!< ziu8h}*c9D~_?FF4QGTolvrCis{dJUfnN*b3Fy&qR-~zE>{9t zANj1Aud?yV{l^y?>b5K`Ia_T|11;#r!@z^3Ll5hza1*L&=dUQUv*kC;3ITH4rxU3;(5yUnNjgiSa0&_tIgyAheh42l@^)dFX`(x{QWyz$Kbb%f{l zn+m`3UcKM?HPaSjTacf7uV3>r>59&?dckUbP$qFyU6b5oUeaN@eHKIVB zM+Zt1hd8g6yBt~f^{v%PKNYO6A{?his382XASchcrsqcP=lf>ZX_`y67K@E)Y@)Bs z*~RLf-x%HeD#8}A{NmEew-|mA@&0140;E)I&I!}UXn_@uQ z8-(s8SqOJPzw<$=KCH^y)7v%_z}y7AeEIjtORvW&OQOR{wzb3+=Rwc2Awi!VVX zs1~L9H&yNF_WA!!6jT(zlDE6F9Ls z*bx1Z`nKZqaMF;?O&|e5s_e%*g<^kewR*?>De|W`r4mrv5Utpyo)|LkDS8C=c^H3^-YZthUzs1F~c2;y5ob^7x#UZ2Dwu~MN?Fd3bHmDY%<8zKmGjo)-uDkb{v;M@ zMBh{w+KC}6shc}jQaepF5o`t_FI#_4?6LWow_>gN(EYovgd6tVz%1R!r71xx{khd~W^pS=pba8){xQ!1q|)tQ3+_<@7Ayo?7}aFwaOGy_ z?w7xAr7+c()mkBz#;XTAuO&Vs;Z0c1cVo=wgm z%1+}Z(!6(%fvO3M&L@E&d$h>gW(z)|42vtR>{E+BIsuB>Uu{@>zh?i&f1xM4sCGKy zhu5ncF>^robKMH3R_R^?762rY1WQ30bkV9k)|Ju%M16A<9vxw+i%O1wo|(-2SHTLB z2&z4RA$KjGO1xh(;_qvVVT<`yyyS~~zw{|blPTSI&#eC<qAX6>O(`z|b)i8aUe?_u~o%xKYOG38tmv%6ytd-hQ6$D_>xbOygAsnp;YfAkfPk zAM6l+*o=|gY!80ox%0isad5q(uC)ae+oyDW6I5{}TWd!5t7xe@snCYVScaDUxl~>u z!zXbL6A}E;`!yzerLblx_4P@wL6hvE+X8fpk6FAKTpBm7 zGyD)eT&{S9M|(}d&a_e|>k}D^evfehUzC}oP{Z=u9}nMOY-6Stv;VRSVtmX~$&n|v zAXRdC*|IJ>2x=b2giGIkb!x*8G=^z@LpkV#*;U=O&DDZkXL<(eR4lPX-S(%zmLkHd zlPx+Z`}wbOF|-eaX2jI)i%M~nQD)+Z>eCX(n>p%@_6CM8>w35t$Q6!U!$_Ivg48Y6 z)H-;6@NK+dnU0Y^xImLjZx(Q|VYT4nj;QMtdi`AZweUVB=UUV)tt;F#`Pj4$G(Jey zdYzBswdEOC^VIho-Wc3#VYixbdOoDt&`b4_D&1iuw0WbI>1w%1oUv5Auv^1Sw2aue zXTRIwO3h=LlTY(qMj(%|aP7J>A3{tT3Uid+622I;T;A6AMw^XHY6__{>o9MqNsMQk z=61dI>UfEXjF$8w7x1?$8GgU=*E?F0JeLN9#`Ni_t7@OtV*moog5;0Pr>|=0yj$?@ zuG8-E#`%;2#@!YA` z)WDS8XIhDaMqh?AA#cJp2#(GjKiwV_xrA-&J_FT%V#sIupCRa0UCr(Nm*d-WwZ)G{ zW{|p_b@^n2l6-xmH7;yK>fxJ8K=~spFKP!$D!rY)bN%8jQUJA7i#06K{KZ0|&T|!o zjgQp(zcQ`6;l{l{garSjA?u^d_E^ zoY$kK0Dfd#GUdMJS8Ceyo+SVd%7n=@ki#Ch%tgHNZuc_D1{IErg?9jV>8SVU{STq| z;hRz}LI}I;tGy)BhB_3BBjxnAD_QjK$7nxinRp6$UNFq=;p*cqt3uqI65cSCy594A zB{ZmVw0YrWr2FD)>ADTfZGyNGR}AGuT>b}bGVYJ1w$C4l@?d7PNPMO#j85Z_y<%>umeP+qSI|*RzYOM;t5&Yu~?Ra-d3jli|nT za&jP0SoBt{*0IQq>xh`cBztniq6L`P``8tw!W*9Pt&@__vaIHmwSh&`FFUX=-iT;;ybJF6`9>8?w2+#C}!DNq(XKSH6 z8JqcgBrQq&(+J~FCf*J{%{?h^n_S01`pXiwj^ZKH3Sv zxS)v#^Pw`sp#w=O22#~uJo8n{c9w_5Nsgmyu-U4{KrY3KTKM+E*zfxeD@l%TjAgnC zcuPXuN176S4WxX3q$u4!P>a}pnAvi)sqTB-)M5ps7-qHT^Q-_T?HT%nQO0B2#{kR$apnT9F-pw4g>PT>cB49-jGdck1u}Qj&XjuBBc^s*Dbu9I5(|R+V z!Z#XevoVm2pX~1-e<#C|(1=S%7w=ymH3bv~5V8Hbk!{-ID3tE*ZaT^z>3DNWBmT## zGf{(%m2P($uUX{XFGGJ-(qC21+@O=N0D%Y?H4o@dZny2O9ABg@!vm zu65-xf!;Yy97>4Q=h;(>@LchAgeXDldpw0rZC63~nGp>!kvXJV-^leRl9`WC*5N{S zJ*Q7ONO%9j#~WJO)}13@pC7slZgj6zT4`?#dFgW&sXq_s)z0ozqoTRTvc^p zI_R5fPB-ZV&J1~Ltu~$Gckeqr`MvoKf51EG$Ls|yyI@Cz|b5snH>bxI#O*HnX zQ7-al^SsNi7^cdXW)pJD+v)>xM1`T+1RhtSa|w~$Qdq5>QL-p8@miS{*f#n6lSZ-x4}V2PK-pw? zn7e@Z?#8D(#OJ2-ay+D|vN)j*ZgC|T?q8rsb|U)RtYL3N-(Vmxoyp*tYy!GJ+1t8r z5W|Gs?l}YQk>?$23$J3xu5Lvdr7PEyO$0MtD;_fnCl5Wure0?s6c;GEwfmfgUieY= zknN?aHJZGHd>J_j<#>uJRBzGrd%KLs>@2isG$qBRQ2|yz)~H|?W$KFF~`Zt;Tm~&N10M8jmK(Yf)I|j%8$xQR*7Fw$kxG5~{93YAOC=^A=>`V<57zp%7365vh_n+4 z2bMSgl2^-fbWe)24#&l5pCc&H?(M)v9#GgklHAfFe3JQMkR36yxT zQ>H9?{;d_QRJ@ZD`B1d;aQsj}x_!nqLJ6hrcq5qdCSs&Pb23tk6Cte%%Jrbx*&J>eoCv3cwR~ zEZ5@V6|3j(P~@{B5<;y9>Bb2Y=C_v}4P7C}^448d_hAO_-KEB5i&zZSW0DlhHhfPkN%@-fTN^rN; zZTe{rP2Z|$m&ZspU58Pz_nqP%{YpUve-U;983LE<2n{lz!a=?p;jBC0$22 zWT0Aw`ia7**NWsP{vIscv@?Jz9|)sE6@MW2QE)zGyZEz#26hNE#Rk%|W1ZOqlo{)wb`X>o z&UfCXYP`U`+tlrNU`fUr73qQ;WtMu>Cbk{4{G)gJyY`9SMIWLVIqc#xvOgEq2!Mwv zxq5D234ApnD|^qyrub&^FGBj7?SXjb=N z=VZ^65R_4=kihtRu`8k|F6@+Sx@aiZkLnJaue=S?d%P4@Qu0Q(iun+m>)3qD(+YQ6~v~;qE(<349EneFAJMnrE~`Qq`Oq;WqUZ2NxxWB1T?I zm1>x;ICga9K)u0HyKi)7|}=6aj?LrQ-D5lB4^FheqAjH#OPN!Am8+S8i^8Rg6`a_R<}foJ?|Z$m%Oz1jXtW{wi8^0QBt8c=*8Y+#%x z8qI;`MH8WANbmTlR1&`lCN3sj_n4N=f2#=Og`ZZj>Ug2A3SA8;^X{S;HNh@Jg$X6x zJ83mS;s$nShs5$!A{#08T=Y_Jsm_e?Tm|Zjxxo$prjsKA&ue`7u^vzfurn)nxGY{H zEG@&B`hGI}TOyD{;J*L%2;~BSO|h?$l}9)Km`UxFo&-zZc7l zs(ScJRU20vGDBsXPAUf2XF!Q)uAz{63LVJ>AJoh%Dn~rdE+Y3g_bJm&N+T_HSoJuL zYbJw?iYB~$kDMqNWW1NV(`9^4s>3EaAV=`1q8~}DXPn)v2Qa-WH|ic@dH?4C8)mhQ zV+l4#;{D~Z#MG=~FQz7<>9Y1Vv1P?e!^OL{R;L>5>aYxg44kgcXSa4g{m}-y0@&7; z_~3(`ZMmtGm*ei`QdjtkC0`PD47?LQc=RCDxRK4=R;q!|BHk%oUIvWJ|-@;&CP=f9nknGlaB23Zcj9wG)X+h!Rk2 z%sbS3%r8eM4lQ+~-^9&hl(W}HOkys7H<*wkLUprn$^51Zou!^$>{&+$A86ut3n!4C zhl8VL84HW$ZnRvkFjt;3=JmU}EpjOPM?FLL1*9?>{_VG8Egk&{{SfUP2HLOdKEQv2 zI5rUonO`mt8Hf-4l}0DMh+(k4;CnK6?RtnLdV#JM7OZ`zj z2rIxs>`2IXupA*X4SbdUt%^%D2m(8P|y(l8}EPR~J+7HG-4zOLAFwrxrPSYyN zvGV`44Y0DJ&8q)ePn87U!ylsWVf4gS7Xef~-4Ejswo}6a9A#Ll;@QU@JA-b$ThSTM znRU?q7($GD|K&$F9-xL;ZD=6!GAek!KhXa^_UdrnGG$j9H~XpVk46r-npt5$pN@p1 zSHFj#U!&W4h3mVLTyVGVn_GpV>%ILnb3Z;xLW~nGG|rUOKV3zgVR;HinSd*PncXe= zgFxzbYJkJCo!-p>fjCLzcV1K0WWr1%f-cTRMm7CsU~WZm=R!gKt0Tp$@fObj5$ym= zp*dw9diaHU2!e<{L>1Mj{Xl^e4HNZ#$g;$Tcx&@7_pgW-DXR5Hv zTK5*_9QCCnfA;3B71=3=smNU6?L#1$WOmVW3sBiaxXW_LA5Hvy*-Tp3MOD{Q+R*a( zRyP?3Fs`OT`J>p7xa##I^#9>5{vo)PFhEu^N}1EF9oVeACxs}MwDpT@0mpaM(o+9SW&+o`gjTc?93D(HMGD&~xY{{u|mhqN}iw5iX6@RdbYM|H? zS-0+EE|UXG)#nzysv{7{kyVD}<6|*@mQqKbHCazP zGsI{kbQ~?ycb0!Q3bL1n=yT{u^ftOy&2vFsgS`_NQopQ!bs(6!Q;AlF2d%sOs$byl z+2rPlHG!T+&@GvME{Oz30RVR0#GVi6|7Pg&K@%KW0;C+mev|KMXmRuwI$45k7#ENO za^lb*(DUeQ`%4p&f4RXx!Porc=dMJW3KKNqIuVa$UL(NfQixCRWk?!9p3|!{?El?* z<9Y@z=6LhzdIBPgt&FG4jyhXcx^SW<IRLcavTP z=n7@M=;E=UfJ}H!23W$cH=;FUX>`6NrJp6NJ%UN4F4R0(9P9`#U5 zGG^bMx}63nT|?7WIBi(^jzv1%g8svr*Dve@vI{$m-!R)I9$Chy!k;Bd};t%fj$w^~|ikJfbi(!9QQfibsVw5XkT5Jj0=Wgdm zdkkn_=p!IKr`+JJlrk>)n@#BA5|=T~=NxY9L6H4?5Ku`Om<_)LOpB$P z>ZYw0MZok%eYK~4@O1IrXAV(eA$7WW&8Tmz>Y87QZFjZ7Gc=>_y_ebo!}*72=x%or zB9!&3efpNr>SvZDgc_EM;W_PYw~IpGKznHJo$#-Vx$2QICQQG*=EwIu;OQUTAeso7 z$vq(h`H2wLLD(-Wrca1ZZ3w6$8Wx&R`^NN5x4 zUI$K&UBbry4}!z31C$SYHM8zeFAy3#TVZ)+tJ;d;usK-T%uD4v&A*zprH zRQ-AzbG&7o(8a%`iSJI(2FNK~jr$mC3^5*CW(~M{5lj2q2Q_m!0juxS*H+e0&}2JV zY~!kd-G)v?QPDhY7s8V{V~AlNdjSAacnTTQEoB7vvsH4n(iPGU+VGt)_WTz~r)c4o zjnC;S3Pw-y8Pm=l)hm3Lr(AA ztyW9WeCPu7uXlAhyu34qEOAH!eBYYSAUMQql&fIc@P;lGB%hSnV>1JA)H?zV?d9ok z34i;gHR&(m>q08B>m|9%^y)R#JG2;@z&hr6CX-MfV0vv;j-H)=KwYBNd7k4=B^PVM z>(l^$4wA+uW`|~8RoE&t7gDYHOc!4LiDMk_zGB{J{=*JJfiH38$zO6eq=v(1v4i3X z8`=GnF8m`3Zg*))skiX>M7-AP4U3;KB`0)-IYv2yr+gZ@c#*hQpV_BiC;7K!azp-b z0Yp*8R8q3->&+gX%NG-ImOX=j8P5Bx#{b%Xg+@%>K>QrMtx=H8SM?RUjMp*F`kkvJ zW4ImXX5TZIeUBSEJE4fkhi!}BHT?7$r4G)8ih*s&iQh_w-x$EnfV_YnK-+L?Y~NSR zN?F7?$7Q6wxp?J;260rBL#{#sbA=N?z28zyLa<`r?KTj<7@ zZEwji_Mx&LPC>MQQG#f{hB$X0T8(iBFdlk}jV|9dcKdY8Hr?y?HJhVXPXYT1P(&Kn zRbRJuxGBUJHpkKll0(h#WF#Nwelj2ZbGVf!RudS|aN1y{UzO-O!MY|jnIJ3x-xHdl zU0C7u*1saFX#Cav(dy#<^(vNK?Cd9kFPGtRoi49dnpAo9?bkMy&uXLC6iz|`kHzH2 zw7rW7Y7uE_@AGjN8yFB_go4l_W){^iu}0pX{*-g);A5~07RGIt&Y9V!o{E_JOlB!Q zvKuThN!Q$1x94?Tt($jWsTw3>6SwI|v&Ve;{U~5y&(PlJ@48Aql+W3{(#SdoVpE~w z_rTk!Xj){~Q+d4=l-N+qH9vgbDpTRRIfIdnZP*kCHAZmUb@1>agtf)O@X+SH;Lu)GL(Hs}MI^sDZ@2l~%y6&7@w` zl#T+Wf1B*<_g_dNJlzaJ;Xj*dFVV)EbN(&c#clvA^SG75|Cr{s-#wc5IS1p?mco=* z>LDUFurU1jIBxAoJx@h}^WaKl9Pjv_k^>F#Pd00S&DjXx)03=!a%1m}fM z-qyqi>%}~==fFDilM6H$rI|oA;57SvncK?41$R%-?<*T_{J7uITi!B&VtQ-E^6Pc*bK;0r>U2Bc`n;E z{M=FeE8Sw%kF-c#G2y-%?~_Pl*;a3$YjC+Yt`-5E=Ht5RKA7Qkunp^@0G};*2Rwka zIAnr2jns*#XzZvYfS?Q_dcHu!j3`zwa$CGxHhvH=OI(7wF7;~&)=oWK2CN=IFgANF zx-LP>5o-}A9~j%S$(tpx?i=d*56c;~3C;;!a8Un_9MfRm0_zl4_!RD;lN?`zJA&H} zA$lZ7RQsAz-3np0KHI*23b>^7KoH_=0qYRJLiF03NOfuc4EQY?O9RD=L*<-Xpo`DN1^7$y zpgqpHGFmf_iprqa$sm|Cu?dva-rGCznGB>K*#$#baljTi zU72uaMf#1$yTvtMc71zQU}?wmf$=}tTDu5H&yKnR&&dWW47si0*x|=8mR?V!0AqfUOlGvkazJ`bp0ITyVr1AUrL zPY!jGPC@h+ton9y%zv$^L;i5t4r2a+^s?2-{=6+15zc|PS;ffhP62e+ds*eGtB9c) zG4|-B6&4e0svIco>j(C13$uYVt93^W{XU4?E(`f73glus@@@>o?(SpG*gH5>$@JG{ z?n*QL8jyuH;NO7nl8Y^r63bG;cN<<-oF3!BrqwR6SG}xg}ZJ{t_b2~?5*@#2o#?GLb2VjtdMM9`1crydUfW+hsjNS0C z{6`QGY``%Y^3ZzN!83K?&%X*wSy$Va4grhLsuuUOoinDV$sgltftbn7w>Ab0XnvG6p=FqljA@WZH29?< z0jYSOOK->A&Nze|=9uJ^Hg0~gcv73&inohz>~$02ZT%jKc+sB;qhG%Hj;MyhVt z)}?rl(C!AIAp{|qV!%Ni^N5MwI{mJ7{HUR2Z5ea_8rra)8L$b@3_7sC(D$7+XwTxdiP!h_Q=-Db=!W+jr^jo- z6}{J)$^nVx&8}{RiuTI4Vb|X+4o*nI%=cE!$5T%xvo1-Sr)p;D0Wf|2Y|~5Vd=_nY zw(f;pTy&A{`&uF78>2qAuC@D2%nfu`Szeej*IvBsZ)(SLeatJv?0ka&q_tx4(blJP@L$>9*wCO@}@?8lN3T9G)0q8FZQmo^{p%MO~_jkp2s?9ao) zLcVWJ>WRY4{>$Y*9xA06YAGMcqmO&p!t7I6M?pnz4!z5@u1I5_-|_%JWd#;0Wvas6 zHHcLBYP_OV-fz?{cv%v-)!NduEE0P0UIU5l!;-;v`cBj$2g;VsH)u(2baJ>>K_d^T$^v4 zmHNaZ)tFa7ANlUO+Ig?|=KTrVickHr#HwQ0pYDjb^>y}(|JSLrZ`8V5cynsat}ARq zY#YS4=Hrf}+t+`DLPwP&R(8+!F4g`Aj`(ls*ef9%Hesy?F@~w$mPfC~?vHIxQ`U%b z<+4XZ>h`?X5$6wYQR`~8?i5(mkt$QS9g-;=m>D6vj1wei#o#Y%;&^0AoL8&?wfh=& zybf}!O7e9zmZqo3yEgTRx;uLBdLuvt-86Y168LGxsf*hd#A7%R#!bd<4i#!8i)?)A zU?8R%x)TTJ9W&Df(4?5rsHWbIOovvYZn4!5S^c^%&%k5+icRK4`63)FhNAS9;gZja z*gM+)N+Liw`G@<*6BlIj`A_)s4#RIqolS9GyR7AVwGToXap;KKy7E+`{9SwY*eoa) z$&{8XY3n(tSqyWB;r0e5t6Uv<2+I=vs`-y!Nr~OY01M6DV}I@EdnhB{3;E>xYJPg7 zMOMKEr+2yyRhNccdH|7&mOXMXs`f$KUGe(X4dS0uv{&6mYXHaS3-bPJ^VCt5$HkU9Q~!;KNmWZY9s%4k|cd?-WPK zh8ffDn>?Fs8c)?r8qhwsmA5rZ|GCL}I{L^4zG(2X9nzcdD7P@tI(9nVdHWz?zUt#l;Qyr z(-Y14p(>E>?Z<(v>w`&bMqOcX;TPa>@-4miOGad`P9}wWiSr;eL96%v6;4jkarA)R z+6=!utf~F$XackT-u&uM;OGOBGBsU#ge;Dj^KVJHm8Mt^tahH`?y-}HVW^E>`{pL< z7r~yvud9lhxB{I3dztF|WoMuWkq^f}dLNbBf@WdF%j|n9+PBd3d*TSOY=aKYY8P1pCVKHHop0$ysnC>5X_tyEp0BL=U3BuH(iQR^ z2om0o3#HKSO$JaL^|+%R+SA8hI~FTCpW?S_PcZ3IdwZf$aQ>5MOqAF43rk}JY>)dI zRc8v+`0{IsADFY^OrneO>c3Td@i#z5(o6Y{Im$wrjN;J`uC~tH8_oXuV1RKK1}`*= zJp<=5yKXwowwwsixXhCyPo~^vuGx6;0zL!`!(9pZhd$Y_W|}?#YK_TZ)%-qCO1$SC zzN@PhxeJ6pV)x!WIWf|F7cudaIPJRfpZ^d}gS%6p)C9xIZr?NY9|kaBZI0COe^8bn)xg<`@{$77-RPlEkJh0bXrBX6U=J_CQ2j0=aLi`_H z1XQ=M9FRmKNa@j!=X)CNlHopDOG|4V`l3Y=!EU*K+wGgy84G8*Cr}>aKHDw zu=eZZ^|c6xbGL7TFy^(N!gZQgtcT3EX<9KaQSfN&v~)HgYN396`Gv_eW!VqRw4^Cd z*)_iet?>j~UPE*g@`u~fW>b>>9nW&P~K`lTb`>u0ouf;-h0EfpgKW= z@aa$e+kr!(maK{UVvdQSd|3@;6tun`&f6pcYIDs$uToP1$Y)XPQ>~92jrP8&V>eq!z z8+Mcd0>A(Wp*)M=NL?YJArGs;vi(Rxjb2Ioz7l}#4oDKtenm^Q-rq@hqHjf+0VFu7 zAe8a|c}-m~Dg6(ug2+f12--40C3SYPt3IMEtn!cfHhyrauAa8L>7YWee)SVfb**({M~(R^LKPSa_o#yS{LQb#@NY(hY$m>#M(# zRJ(ZUZEM~;fJ7GXD7E|)2>48MB8BDwPv$UfnfKv>=nb@fgcp^FAezy2;(~Z`hgl;L z+KfS|d^Ob@*MMrpL5;0)6RK+#5Gq#$EDo@Z?;242X2!5L+uE1|5KlKT-}9KmcV2%k z@NT7GzP~&{-lfzZ-wg@9NDbm~0g>hfV7|<&)}ttU0@=U3{xcWMZ#(vJ>)BOL-4{Yc z>Y-BWjiej_ZQF6g{tAK+^=5`X^ zm;PBEdAD^IJTxNe+gFK3;ERSY42qAvk1%sU=tZbd>RLKnso?;a*a6~0K=}I$8K*X1 zyOi+@P&%*norJ?a+fTI`y6`;?pD6GIU6KrFUFIA(48!Ru4}dn&HJMjhbzYz795O9D z{rZ=~qjc`k*vpamBk}8Xiq$W-=VtxM7J>Hau){e)3kbZ9FP#%pzz)eSr(IBrT-d?V zmsRwblkvt*0|2R!Oajy2jQAzcZ}fUD5a%Y^oVB+t67b=Y+lNG%&2#O>6*3!*#8Ij)uY6l{Hju8B9vPo@T*Fjjb%g49e6zuQqS=;O-Ba@ zu8zyr9D_2gOM%)Ds8CsJjyLK#B6VT0)5W@F4g|)nK#M4Bxl-uT`sQ#{E ze26OsxZI}zN1v8Q02<%n4#fb(`W7SI4~UO@d1%JA`lNK4aUo|4`On+RFJKp$=;cL+2W z9)jFg2f|FB(>>iMdgciZqfdW9|4_@<$u?Jg_35B@3t*lId;*K*F~TZXX?kahbc*js z80!t(hDW>Vv6!_B)u8u{iXsB*VXTeAashHAa|1`oG^C{*-1TFkAC ze`%g=hFJCCZ>{ZHK72ZDzBOU>YeO4eS%T)Cb9LZ6i<2yk_If&Y6+)?lNUvTm{6;Wh zipAKaNx^)BS{00wNHdPu4Jv^{Zoeij<>Xbo8D7G3?L$Gq(~pfJW8RWDG{YzyuQv)r zkDeg!Ht4aOHthBiyOk4{@Bx;wZ90Kg-1F6+6_zwd^sj&_z&ZJYD)V>(C3?kJ_Q_Il zm1$|Z)4E7;Mh)c;s{^BX!@1c&o2z>0yCCEFoB>h9+%5OOsu=)L&EW>W#&#+u(0Y6) z$H4=j45SakwBFjDw-KPG+@wT<$l^>>S4RH_pe>iU%?i@p7gJ28FRhnS3-9q>x#sxl z$A0Uv{)vXxvX^5Qpt~#wqtdb6mvk>tJU3vPmt5Xy-7FGtfY*55wkSLk0_ph;Da!tf z$>S1-+z|$9(VXU$KC-A8E)#<}Ppd7hz23enKEx5H`9;e91gaBbW;OM_{&!FGO(p}M zgh7)up8Top4e02qgx$LrFA0QH5zo<+yKl#g4psn%F1aUPGBi+3Bsf{uY(f{of7zG{SE#3Xg zW=e%uGc#@Rjq1|*X^tO_qPbTOYAWxS(|$ftZQHdy-T=*S1l zf;RkBB%g*jr1!=Qn7s6H?5c(8?$ku{pHyUPN;ywPW2*=Oh4;3xr49F#>7F&vOb@-? z^O|94%)kutS1WjUEOHel7A04>b`hHoEk+<(?}!>WYO>KIb#|(9<3+?wNa=~!-kY|y z91vBMAQnOW_CE-><#DB}+Cr-J=pVRcwo5;bN;Nh?pp#t7r(`i~eQa3{po*oIJ$=1_ zggpblnk+H&Wr{cFrw757i-1e}eKYK`!>6~et~MZ0=!lx$rd5Ml{EG4#mDhK1GE<{2 zaY77p=i9XEH^v1=-CYFJ53ss#x$V*|c&NivF}@?HL;pzG4hh414YM$Tfx(}rJ?>7b z>Y^m~%Jk7(TKV)>6v)8#xjr#mwzdYcKuwx`?3pkwnUaz>sojd`HkM@q{sT4*)j$B~ z#0{lZj>_|`Q1JNAnb~>a+gthuk26TWYA9~ZB1Cp7?&Y&wTWd`u_BQ6CN&_sIarB)D zboK6sE`dX8iRgc2&!}oxX1F@{H8_|UXZ%|tO^L2nyKCsQkllEI@i$fGKSkc9fy8XD zZ8}FjnRW!ZjJUjU%&yfur6ePQ52x|Q2iUAkfB)$Nz_XxOq8}Xn8eO0w#gTTK%`B!? zl{xt5svU9d@`11}R{4*&U*K(~yTeSm7{m;3i z;!#hUo2|93c3UK=KEFJB`}tnEXTeG2>f(LvDiEBzDUE*&mGV#LhBf|BkM{h);ma%+ z6tHxXK==ya*j3PT4xEG+T6bWfnAp8{ccU-3OLsWlb9QfHwJP!TCcAO6v!DW_6Z60< zyCYtxi@E~g1+d)-X_qB?}3b?8(re5Ch5DHeQ!Cf?a>r&4fV^> zmRftFc?g@S*2v+xK+G7=;R5J{zOyv`ma7f^fQ9OhNG7B%kOv~)o1qwhbO!)0p*SGA z3mmqZ+`$@^&g^EoZ64rV!Q*X{<{aF1cs|1-lEx+ankj4#Z>;1D;E1bI1Sy}uPrm!% zjB|S8Daub}qlCR!;8m;-L75j7Wf_1r&$eP?mEmlxCbof?_b{8tXmOS9k4|V_rXvp05>r#rwbpuLa*) z?fo}^c&Q0bI(&6dn&O@T*Rd;czTYH(dl#=vF>8A!(N*PJnHXUW*Z5rXr}@VGGC835 z?a_O|T@5A6SCleUi$Z9yyO!D}U-Ui6(&4~i#k;}^xE975na(osP~b0y$d0QBD(c-3 z$MIHf%xWE7zXnZq!?Q1Nn6X;#WsxZ1Pm-?ZMtz0pi4?&<$@Fq5K(<0FVc?A4!Hxh> zp(@!wZ=zxEZcJ$Fc9A>$%LTB*jmCR*DZlNCb*V#Hb>#M$`GjoCY89QpoM|8n)~8Fo zCPj#s8$U1Ax+oS59HwjdJUjlGLGFbiVZ@4mhwJWGa^up^vX3BxV@EujSeeUld!7AM z-QFLU5xu3Zt7L`)8wP$Q*&_T?dZy;18JCQR9!hZ!PFr?}hGGQSmwLgDllTn~gNN#_ z2GtzH><*v}owkoPviq?ygI(qaD(_iXyn%l2IkpMt;{M!yk5ha^z!!>)UZ1Kz(2q2f z01{oVSFzIqD#o#-xL0X)Be!|@oT>4G@N-8KajvvCNwES?V`!wI)>P#2CAP5RqIOeD ziyGk>FXz<9If~p#w}RK8hQQ^jvGk9`1uqKe3j`EL44!LWC{^x#`Oa}yHRPEQma^co zxV!q<6_tN^I-I#ifKvjw;IMkrMD&VAN;R8xh>FxKFR}Vd@(pKOyo+5Kh|k4>;;ma|F#a1Um&`2ZLt-=IK) zg7!LS;n~O}3w|V5SpoHZKA2UI(A&YNh_ckp@xO5bzhfa8RgNj5{n+VCggEAOL=43ZAlzOzVV?iz8I zIYUrx*a39OO%-5Z1TNwhn+8R!5t-2G@qs0_k-)ZXAgx*eMB`e|Yv39%2BxR2^m~%t zNB1qdlecC-DWhepzzCJ1gfEZtPn^PYh|^5N63_ljO!yYFcT? zTS><=-{!PJ@MgnOo311*)@p1gWNR>+vdIN#r>cYrJeHMje>8LWYSWW`wDI7bXP?82 zbFY5$%<0^_gDKB-%jPAqJ|i0mn~{4ZMvdbNKhX!h$xS`Ud~$Sz@8Brdi{9T|N%ii0 zq0=I4YEV&8Z+G`S7SFEBa?m;5t}NAIz`?>r6;Z_(@R zc~ZHR1z=jzjF+L6uciYwoY>}oZNCgP?20`Nj2jEAc zZkbV$epM0E2H+sv@N);iL_X_?PthsBAF{rZR1Gune%0%FJ~q7kK}w0Tj;ysX=M z$ELJmdG&X;YPC?_h>>;y#8d+wt|DsPH-rQCmOSbgQCg%qAq{SjG&^%lIV7D>bij^f zZYWjQdZ<&OoVf|O&>&gsXf~yGI$1sThII|`Pe6)>x20V_1>#j$&U z`7T|k6sX?ckpZi*i12J|cXONXMF8s}I5KW`j{FJ8TqXI)HXU19=Dq?hQN!SzTtDL@ zRBL${D{PdT8K$`^EX>nNC)IH4W6H*8fERnq4#AxEi|qwJcKl`&q}Nr z;E!mIRG~!hSZQ#rLZv66M@o#|NbrTaZqqP24pE^uXI@jF#P$G{S(SNL;s@Bl#49Ok z8L0yUE}2|#IHW-~Me@`wXMae=0QW?zorUje&q)!HkLyYGlw$0G?mg+Gk9(2-`%(&4lhKS|jDM+{0_&aXIkTR-T{a7f+ zoVv{J_*&dk(`md0pBdzQ+BXW{J6d_y!+$vl#WS~1N34r_1qEN+I@s7BS#cd%(OP+r z1^@(JWbAXuhNb~GJu@G3$?4JULx7B~Xm&7n4EZd{qtr#_@RwFW5X}qcRU9`<6MWg< zG8}{D2d;p^@Ft8=$TnF`B7vu4B0_(cfYD0>TSp~lE{iDEJrvv_U&Fz>QlL}(!~-1D zijCdDC2xceXynA-IG69QPt?OtwE0-kh2>g{mLCW;EDtTmm)l;Q)puEZ|C`p&q5F3nTyp~Etkh;d+v02Q6>@?@KsSrO=Hu$#)JeI>t-PvZNQWh+CMAzrN37w0l+ z@&Wjl2pJ}O2z}daA=_o>DNqz$hOmj54(nR#KpQ)lh(tCo8cxq}BTw zm<7E2vo*&u^$z0{apbbn_Sl)@Muyn-JLpk&3jc7Oiw%eVXNNgiVPTg|!U35N%xi>S z4BwpYsqLMD_^uU7$z~8KTD6v}jw%di1fmpDs{Cjvde%U{r7WtKtB6Aa@m!I z_$_%6v3i+$dz~#QSo8b%JK-(YyfzWqg3ZF?dl%u+j1$+94gI|>#?_qg!=cMUNT*Dq zWnad6_HxXN5FzyM7>6NLsMEpP&q0b~fbw=J)G{v^*1NhCt;ci&*jpJWa`UL*U!7Rc z#5eCbWV_I~tPqYe-wbY{`?c-X*~Dm9rj;Lcd;k!pO0(~jN-f@q4JxMrgkOR?MHIze@U}POan zjQi4N)AnujKKTjoz!NSGG^lLCpA!QCcI@&lGXhxD zkP6BN@!=anLhgTm{-FZX2BZ;`#&y7s!LV=ZkuYiu{Yy>CW#%Q(0cc-~K_O^G5FLxD zoX~uxfsg;PUXcuQ!(_B)*P54+5A)Azx=Ozds)X+OSk?S<;R_%!z&w_E)6=s>1xG9> z?`&fkIe&gXBA=P8F?_778@exRh#&N2R$IXaEFrCGj zGWIHh=Y%8oUW0u0U=#vtBsOXF%gV~lyH>!~9|nx7dF^gA0fTnV)UC!&bYv57 zx>{SX*gpVtJkxc+X(}x{1V!w!&uuV-EciXpv<@gs{W1g;&r}+?4ePXLaY;c1*XJV3 ziVmG2PGhbmoLt{i$p4o5N`dY4PN?K>Jj4QNW51L-%0MXc@2UK|e}bgvSjYuo*x`_2 zrej}lr-v3e;*NIguP29tpocQu{r4C4<>GkkT7I4qm&UC*+z!v zCGr}B9%L`cdZ=J-JTx7&8{#;i(tpaWUkMHAyiu*dg8q35%C+67PnjGUud|KZf8P+a z9^&i>k3drI58Cf`(E3)esm51I+RlE;nqGbraFpkE)$`irs9&;v&^d~Or(QoNs4|a* z5@ptm{=JBcYw?YjXJUcPl$(cR*<*rMs5XUHx*wiqeUIZP2K7iC7%&*>ixiFmWqmEH z<6xfZAn1qoK!meu4ItVX{C?;R%mTIiuUsqF%(GH$_vT24Bf!8}-1~HIRBZMwo`L!{ z@cF6}aLGQv&~p4pPwGkG?@-u(tR@8rd{ZJ%)ga!7JHL;>1X#QH33pOybQwVI-zg{Y z&^trC0S*d&D*D|Fa?~G|^1$5H;S?C+IPLNarw}IG)t#R6Zcmo;;1AgeL%AAxt;{*U0XcPhg~`RE zB&5V`_P}*=CBKC<) zu#{kwgA1BL^r-`^Q^N_qjXj$&pp!3EPT(SXp{l(PEDoLaHpn$mz32)_P+KZ(>6RMY zfv)#w$kyFXd!IgC>`Q>wwVwRTwYTseo}$~twsGY>{mxV7_Fk{Ip0bp%kQMi z#q;-y$i=a%j{9PcJzvCPn7k`{lFXRj)=b(V>N>1sS0*1zDRS~mb8S014FvIF&jS-X zz9eaA$F)QZ{87$W&)@LGi%S6$!*>GYAD;0wS_&hUKEU#U$3D-VC9IHn$oxkBOSI@B zjcz@u==xxObbUgnD3WgH5LoNg>A#u|jz1bDFQFHB8B^@t1enp2-Z3vp@lI@7KjWDQ zd%X>j730h92LNvN5w-y%3Z67__;R^)(Q9k=3r}`tdRvDqY8%@Ox&>ctY8eNdm!;0v zfKV=IKPlq&9_RZWKb{C@4VX?D1k@SSI@JMdnJJme!8hyItJA)M{=5wS*yRCLc^rJh z8~88?Saj1+!_EPHfUXGuIIem)Gz+PZ2s@9#@E1+W(efGefA*615Ss@6ymXQ=3NnXs zuHcwAHFG|&GlwehBw}vh+PA_dIU`oaY`2uQgD>Q_9ottmnU$ zBMeo>S~-cAydAP5B?-}>5+ze7UV4!k5SM)pPG22B>UnjF;%V<@K)|6kcBAkL5pDJO z7RD@5HN~_n-&x!HSQ1vC0#=P%lL~;QD|y zpi`hB1M1|iI&ooy8j_|pV%tq~3Y42ATslQ&Q^x@GT8@kCa>F-IxvU^BH?OY3bCmx)m<^*R#GG-sj}L#X|Oz1)x`~J#rMd z#DpH2((;qmPOCar40s23&Gb4h(+XB^$FbUtu{t5?5J7C7iI@pHh)6F;)Zc=AHs(XW zm7a)k5^rAD2pglRe$Qt_f23+smQKBr#h|t@Xma|`qWqh1d|MSjkmsmVN#`FhnQ>x8 z&zaHU)B-}eI=^KvJXUumnl89Evdx5+jLmII4H1oXV(Gvq{6 zLs|}RUV|xFr7sIUHrH(SW{sqcEYMPy9&aP7~|^=w2~ki}wr{QZerb z&M~!|(3ca(DiBF#K+;1F>ReXoeD@>kUauTcw3@DW6Znz|Z)~$JnX$wWwa5g$ics-x z&TL}fp$mRVN5Dd-=CIX*bNSA}^I1mu`)YsaL}M|~rsJk}-upkr);@kMmtSrjHGxQc zdqbOitVg&tVWvRC@EK~&a;M>NmJluku@kT6s)>!0eY0o!p~K^gOr`k$ygMi>J_`bF z9nEZ95PuBrEkBC>)901p;`%zcW)0}Zv^Xe7bCk$*naesh4SdHiWu-~=EV%BYi-Up-M zVd8D|ir4DyssK8r;~jKm7^|4tP@8VJu87{|LTAh9 z6Mq8vW2Px=ulZ~6Zn}`m(0-gm3>7T8-OZRJ=4?-XFcQhJ|J5pofYw(C5!A8FA}W0H zJ;@A|IL|Ld%5K*~)LNo9Lzndvqex#6!_i?to zPf*B_e)fn;;yuS-RNsOkZYE}pk)pY^@*7qyi+L&<|`bU&O1B0V>0xvtOex>?Y%{Z$A45tjDV0q4o=-Ym zO7=C!JL${oy`U3K_Ovuo2)?AGez#&cIj$ZhgW5kM8i>4s=JMIr_ppS-uX%$tfV$yp z+>^z_FSobA;)Vc9qW3L;iY3MQVd32T+YENvLWXbiqz*w|N?mf|(k)%nN9N{G40F&o zyYDXY++`64c`>R!^Og*9YDPL@3V^g?`(U7h+7=y#b}&@V|A zbQGUMBn(|2?v6N?BMI2HEo-=m6&lKjbH9-78#QR4b`kptm06eW$NI~jy4%1+sUxpH z*QjT+zy~kVs)PTTd(@40#rrKF5AA$7r-V!ONc|h7nB*uzQjyfx8Rdt_d5Zy}Art)Z zSQ8(I6@91t@uGz`AyecZkB~=<^sa*P_KF3$b3KnEKkh1Eo@Ua7jT;-b9IscmF*!Wv zte;x~QW!Q1%-hJYumYri1d_nk^uYvud5Xw&LH@se##oSaE9~fouEE?9B97-(;xxc9 z)i+OjFvFrO)U35x!{bTJh-RL_FC=3}Q`5aE{7S!nBoHUtY`YLBXq63z#A5!)+T`4z z^Q}Wz1peS6R^RwM+cc4Wv7(Txz5#I<(Bo+m_C?Z(K6q^N(GkxNw4`rs18QS=@pq`c z{8ZAM4&*&d9p@n>1U)8RImM!)BFo1#i#KIT83@ZrWX7$U^v(YA6o%j5Uv( z^AmnP&I-6<3)Dkw)83;rQu6m3kE-R&AZ|XXHVMiHO70Y|-`R|UdHKFr_tOHAZ)Ca2X<0W|rnvX}&9 z7Q#N-@m{@zBX%+As)fp#$*z%O&%n>@IiDya(;E;Dia%zOJy2(H&xH|Ths47Fg*OM`|{Qhi(FB_%ye zjjrxHV9b#5@Pi$2xB0h!457k}<4~6rQj`06{}z~_qWDj62*-BBUkk>(2{=?3XDi$k zeqA=jh5n&ITV3=sdp$N$_Vfrh8ae3NbFT(mH`&H?vgN-A11uOZ?k5Ch`&Wmq7l3l3 z0hca#hA)Pn7HrCt#`D6DN2aok1LujDIOGe&O<3LFYIKJ2c_GJ(dld_;8ZgZpFh(W5 zs#pxCbopP5^>2Usl(0=1<+-<_v*}MJ`Pu=H2Cw;7J=kUciCs9Mc_HI_giQAiq@nIL z!Bwi^m)m7)4|rb9F!Vm@jfvyGrGx^qarh!IpO3LQ#9FfQ_M>(dD z_?1juWQP+b^1HBeKW7iz?=p3!kiQL&7pcO>$V=xGZK zA^E7KM#$`p;w3Y>og6l!peYQ?TzVki9*eO7ywG=v+|PoN+|6XPkkHtk$lHQPEawgr z^g+^(2xAWYitc$Zsl2%T-CpRTcab9xNkHOhfj6LZj23DwZ3AS?;YCo3MOQZtSiSwH z_&C0!Y^Ss=XwIw0u9Xn|vTr-YVZ13buPG+aWS$lrG6kG->edKB@I#tf{6(L?fJl&B z2ftT%M;?DsndSKRH(AV=yuV*%P98!4V|-xNi39GC7`|E(|1;*g>k!oA>MNtvnx=Z> zZ$xkJ$O}8_-HW7N(v? zAn}d5)iRDGT3FMIezEByEx=@$7$6dNqQ)VS+@5e3dP-O5C-$tXY%mgdt&%Sup;i-5Me2GnEvLJNBL*nGwA2Q@^Xuy zYo2anGg4dQ=-+~Oe@QWnXGUc?1*btIRt#++Q&11Mda>cfLx%E?Ln&!#!AoG4Bf?njM3mJs-103)teCOF4P~ohl7fkD%1kpYpDc7d>XERlY)R}6 z@Ml|RM{n86r)k5>X`evF29M)ZNaN&ZJZ6lDPmc*U8FL|1REis+4ckqx=*sWyl0Iq= zSo9HHlgM5n#6{?LO=3QtyZ62m1zE_zXJ7nx=_&Be)y`48rl;!h!!BLa_HPOUV?Ih> zyaro2fwXRbuCjon5i@~s$Pf8&j_xUcs;LY6N+oG?^yp)muI$?f{77mAubE|0V?$Il zqUjoaP=u-*<50%GT!7Z{XYRo`F^4~YE_ywqHLy^IW4?)sq;OmvzId#hZsB_kd zK^XBLqQnYKI39E-eSak44iaW<)=g*ChjW6~?fx&>*aj@h@(#4Rj-93Ye!3f_J=8DX z_8*%GVB%@>QdY%RPP``ylG|SV>*U{zAo=743$T(OPR5*1tp6P+koe*jv1rnCIw8Wn!L$5JYCSue3!&Y4Ilk&OZ}Fc} z&_fL0#qTNL7+`XlGs)xSNJw+orYrAj_GT%&{+c!U(-!&(K10kzxu}`NbRU3l5}=n> z0n4LA6sdPcF?;^phjF*I@@vJ(FH5(JT1JB$AIc{GEHtDpg_#@*7K6a)*$dYd9T=?~ zu1So@%*M{jtAeEVmtXgrIc@Ty4>apS^UfJ6+`inp4EK&2S%IN`tHTe^?-I0U5qW@~- zzVl~~ur*(YBJy|l5k`dX^H<{)QG+g)c7_+9f|S6`W!v@^HJ}k$r?w-0L=P4xzt`y7 zpjPKflDsx6iM~{r%{*F{rCk=d$&=&H8j(<7GJcZYr{uGY=@39LEKI@pX29=^1*O#g zbJLQzeI7W)`&UAl$>p(Y?WpTFN3}AGe4|xys(IglD~37-vn!XM+ZS;3g_paZ5bY8d zi@}Wd$r?t+Vrssq8;Y?hoHYGgCP5$K>OxnT(IIW>=KM6chuFPz#z(wEPxx(sOsqjc z-yPO!jz0QL2VZa*)$RiN^SSG87XY)8kpd5V&4`OQaNhvfYsm!XBZ`ZO=L` z{m-SkGdn~e`ydHdR|CvKZsGdMfDeCO&B7DKggZK_vbj%yETJ(z3xctTHF1UAv<+51 zYNgVVd(LxXEmR||Qq4%+Ir}kVzTaTrY)&jj_L78QK3I~^=?ZPm8KY`^4L8gt*+2UJ z)8xC#zTJ%UXDi{iCGmaF40gp!aZQIeOvaeb((8#M-gTo(X+G$?jgk%WDVvcmZXYRS zQ)Y6xW`35uf4_?!o37w(*KnXmZ*lOR0IBgx#N?H!2KU{0;CYa*wc1`Ymt^<8Lyr3f zV=P7~oBgBXf0|P!L2R16eSAGK$*y61mAI8B&)CCp(`BfqnP^Y3Y(BS5iQht_OjJ`- zsVtGRK=R6PSp)|f%umCC@A}?T_2Rag?XdME`=-d z+5pYQ06@CkZt~p~J!DIy4esN;S84N#T>eM%89jU*NB6sQ@spX6^SEV}^rRJL$ix z;k!n-l^*h-AAu0M{V+&62Fpo7PH`F-lRv9h)4WF2&p8E$y`l8W znFS3>=lYQ4q9cfDlI||D97<+RSG_jadOyf>A)e)Twv1 zqjzkh*qCNf2&>t{{}O@h@TRtKXUQZqNxeWopA$lE;yidX3M~Q;woT1EhZgrx4tsL9 zuFem86?5dKYalaAJx|=gnWiIWdOdzc3hdh=xcKmkZ zwz%tu@z1Zyz+godFl&Z^#I+3Ir-QLN+3PpBwEO?kYdG}ekATxS9M}q24P-0m9e)$V zl1$8m#bL(fW}&@etM_Dv&JUW;3-u~29{2D&EkF&y8?H8_am2yfvZnszC`O{VKTpnU z{&5x~FL+Xt3X*PallO6vQZ$1;fLH1n&w(BIY{(H{#tfI6t9Wl;R=rt`)#BuXMhj(5 zJ8MJU4fU9G^S#Hc=G+^4+$jW(`9%YzM(DK^>e}>jiw0Ll7OX;yYtHi~gSBC+oRubS zsi!Nfg|;CLpUHARe@>{>Lv<2m$8(C|B`I8{gjv+`4?aO;LF%o5&cNGyELLucLH>bxuVXC1)wH8 z0?ahrZ3kLd^s!KX>@RMZXPdVfZU5gsiHQSWU*%|o`1LK>AnE7WgOOaq`H_{XL2Q?{ zfdV=ub5atBgiU)6y*l98BKh9Dtqtpdtt{m-v(5Np()s!!>7DRTFTNSTQw4Saqj@N| zP(9<}&*8i>y^3~#PGuU^!L5?G)XYv>@W_UMT5PS9gOW5ha5C-+Sys@!-2+fA*ns(k zn#cxtWyuKGH>GaV?n*$Al;hd+8M^BQSS{A$m4&+r?ohW5sNDHnFyjscU1dG&bZ3q3 zzQfpCmyJoR_eY`%nxl#_Tha;zp)L&WG?iawUI7XA;Oi|E-W|43|Ist6M&)Pk{*$*C zu&wdX8)^GJkE~<&PovPf$0%lpE71kIBnrs$A0~y!TCH#@e3h!EHJO$VOp^GiNK0e# zg*3v0!h9!tR&PL!^8l_Hdth-_fP$`=11hBN2P@*Y}Q#|^W1>p^* za{;2M?jS=fu`Gi*VObNHxqh$;X_GtJ4MQG7yn#Zg$hf(w{-Cse1BIQWv_r&tJYW-V z7Gjm)Ko?kJ({#8r{@ zoMovA1WET)Av=9-h&N_=py=7>()vB{Jf8s8bvaZ_a0hSL@{Y243XdO>`AJ)USn_#IF!e}on>w<@aepQ)va z2(HL~v&vO0`UBokO2-$htu>l%*c~bKGJ^Pf&}tlISq z0Svg*Rba#u9p0){b~bZa`V;zR?36EP#hU?K(#QMaOKpaBCjndI zY_0refs)+%XaQ`KL6cxw9o6&2anxP5=P=M{bN6j+BHspn6mp5${V1&L>8IA=thk*h z8M8ujjvs3iU|66KPlu~|>h8mx>Q0l%>9#!&sp`Db6=!jd9p@UYf1)Y*sZpNa#K4O1 znG2-07@p~P;M%Yuh+yD_xZNh$?sJyQm7a*d-1ASxNg3L53jrPW|BwbsTWPR6n5vm) z)V97|GZ7&awTc~kw3)92<+N`aZ6YzLVH#^f7$M*vk;D+Yq_3oYZYjUze#Bwk+l~Tw zXD)t<`4@5~E*m>GtP42<{K|!uIbv(hHe(NTZfVs75DWuGkY}x!$5DgZa{m|e%h;lT z!;u ze!vS)6nqhQ^#&Z^Wc9cAo<_iZR>omH9Og5^D}$jZszx%uTQIU#o@BDW8}cD;490~` zIesjD=Wgf=98i6YgNYxv{6-{F$yYbe2;e>5t{DYKny~c7y3|t9d)Fwke`i5m(=d9~ zC6G+)qvv?;Zb+Jv_eONy1@ov36b;3e0%q7ET08@M$3- zBBHV$PU&%x1v4RVYJ#gv1C4ap|untJp@V5m>e<`1`L+MfFvCTG zF=Sbhj_58?-YF<8OCxVf3{n_%*#inv&L6AEnopjqAkB?XDA8s4lZtgVGMpJ{JfYbz zec;8?lQH7-eBtisl0aE3CSdbQ@H@`N=8UZrTim|@2$`=e2O7&*RTEzq0O~MxE>Hr= z#)6He@p{n00Z>z`5{3|D811RYf%jHp_gNb`4|B6P_df+TAQKUaH_FL`yf+Bt6;NnF zAHc3J1k4S!TCeX2HnGEnIK#XA9xgMlSsR#>+rQv0Jor40mBXrmciwy`X6q=}%PSLQ zaX{8efbUHece4k2J#fu*;LQqg`k(Dfa-zhPu>z1%t=lm5KlWS4KK}WFh^_DcUOEx> z(mxzysS5LDFS{WqaF8gcFt;Y49@gu>(+F*#E3>uU>7yu;z)p8WMqGU3`nVlFVA5vj zs|dczkp{*lN4+_uN1u?qY>uzvk`xqB%q5s(1}UEgDsEt(Rw?GPf&@89&2v+A-_C)X z64tj-8;f~&-~`HMY^%2izPjKsE0?*e5G$JKoQ{q+)Sh9GQZi2UZ#g^1OiqZ%`0yJ* zls8d@5`c;~G%n>7aoDRv7IWIqGrAuIO|eBy$vWLM;LStD9Yq+ z+X^VULWNzNF)ySRV&o=W)@aLoJpnX4rSHA#2#VA^@z-;WfXy~p<<`~p zm*KPv7*1)wzP^M=%v%oe{KG~Ii2&tdC(X|rw}QZ5Fk=p>>|aI7-^2wWDP)@O;dCL# zlC-sKah3o&23XC1o<99%#S!a_b{AvSV7kUFr&6;wF=>}8jnb^4`BM%r>Cjsm? z-UIU)8StBK_}<^bZj|=Y>kI?3uOj9a$FLV5QKgDHTa-RN250-fDEsQDsP^_>Kopc3 zLP2_9C>2oYu0du*Km-FMBoq)S=@L<-b5Jp8M*$@aL>dW61sOrQ5g5881@5yw=Uw+* z>;CRt>;7|=>zuQ2*t7R{KhGx>9cSTxbA+x~3GqEhUm1!ZN?n4})%=^n3L<_{A{I8V z;InosK)-!YTI;UD-Mi6D-0~-9zEeeml!GS)dZwJsH@2YcHz#m=jnVQX*unF*S?@8m zqV8aC@%LTvB0y$|H!=`Q)LJ1JXN3I?XPnWZ^J8 zW(YKgjwz7E@l4u*#7G?P2my%^@Uj%IQPZZ zzS>G4Q=<0*dR|b-Tr*yrvIP?vbf4&6Ztq0(>Mhy^OYx0rcTBM3P~Xfr^9Bi<(emhc z(%53WTqY_0#t?rrydCp)|F}Ot!tb!~uSzN$7IuG~b4UfSIjpVoiXm5u54@)p+kq)1 z3+i@j6FML-&mOdl^SmLZ!mxY_OrtCXD&hmv8bg&L-*VB=qYQB(XV|vBuv>cA@)2gc zh+58)#luuxWq;*TqiGfM%0~$Lp_IQJxurL#96QRj>Y+6_2QZEt*ra2}SxV~vqn3K6 zQVd!tnd{ALpw#ovpWr)}9VPghQMd=MxLygtFPu_0qN9lJ-IOH@5V!e*?lXTE?XJck z2!_tdiG2L^@We^JBTe4<)$ELXr5@x=$NZ8TS(9LHh)(-HS3CVUKLKy_h7A`U>T5^Pwo%C=_|&qp z{pw8v>n*1H_AeYQadeqTj`#&ayqs{X^dYRm88M)}h@SZNOvVUSQ7>0^?udBz z6c^a8-KICfyFNPnsOOPZZ?0XMptyIR@%>Rz@kJ(<@b3Fk%)mLPoI8*?#qANFH_V0M zx%Z7SB2H<1fW7V?UDcWvlZvr{@=~3?KS)x<_;zn(*hVI)RDUO)vrqgBX~)}AQ)!SC zt|2qW49dORDolu;3Qp_$vUvw&0qyJSF(lOzaOQ(2a-y=;@*#LE{?)B22Ehx}oKx-fl&#=3(eXr2=vDU+>31f6alhgQ z?qV`5?;Z==VMolg%~hWmsv&iIiUj=u6`9H5FTH{L41PW|k2!L#NuJ`eYlA`NN~QMl zK-D~Gm)*&Ku!A3-C#-U)=Cltr+xb~d-HmaHrVaTAor-s+rM^epcWg+^x#IVw6n}|R zv2{-pR_lhJIlq8+atsg8OrXL_Z6s}QLNlY)JevF&b#P_oQug7n@+#KJm(_K`XBAZ* zj#diNMXg|E%_>pD!=bp%+*{t&ES9U&-wij?<}1=f@FEpQ3A;djmg0(BN)kLs?;L(S z(C7xQz*^|zPS2hn|W@93@9|H{Wv=c%c*NKK!|w(m=ZKBp~* z$%CqMmFox2Z*iTCq$e&=#}#~#tq*OBy^M04IqvXWu|w9sw@fy5hlKVjbla9R`Boiv zLQt9b`RPtN?ItB26hBu|0e);voRh$4D7=&WY;jT6 zX*bC0PXjv>p;d#*bLM&rq5Ivp>_DA}RB1PXx;uJ`)K99kywLAOtKoXMpZ`orP2DRu zJ(^RJrWRDGYbElY>A$pJ>Ut$E(N_!Y+jCccFP8dZ$If?5x>6-qr&LhgckQp8Y&^LB zAK{n8TpN1^on=_UDsd-&lSZ~XwcA;fxHe3Pl?G0k3 zpoC7ZJPkdTh&R+p;khvPX7v6k8qVSHDQ+RkhqTv5Fe&Tk-=KeR1A*95#OoKO1_SZ} zzJ;G(yy6iGv}i-Fj+CT$FKT6`{Y9AWw>D>Bx3*Dz1AotM4k|`i6nc26Sz|vKgu+DP zcRwcO2|E6O;VO%7#ezVKs2x8@j>8jR{hbBx@aa5x;cVeUnh zobp-6ZyELS#hK(@@9Adr*X&}ga^~S$QA&QHluK^I`2R^ICV&dNtLMeHDd#y)ByH0$ zAy`n9;@8qT zoZr^m`XFH{g6GXsoLMey{le}M0ZG;%I}@bvZO;8D_>V%`hx!=K^qek<|4G`TGZg&H6W4z(nX6uAsq~z=WQkH_mLTpt0jt)Q zC%j#!=3o#N$Nt8 z=;pM2gX7L~{i-e}ie=$MQiq8Xc{ZTYLh3o|H4W;}sV}r14%~OTrr2=m+14r#4a)V#5a?P9HXwnWc{18kX5Qsvg0RkZ@MJwCOD?1z89D!tu$r`=^6ZHung_%ezFLUssjuBkmtR zDo5?KcHS=QWvb;U$_14vOkPUuuGdA#G?74qO|@Z#0-mcRkxvKzJ}NjARlcx_C`LuY zvCt|p1QrzxrPB{v^l;WK^B_A3(nTlF$mrISD#Lz4E~(3+Wtak2HeTUuw0TThoVh^ zhmY=^CrTcnl*b4S{m$&)_L&|`yYPWk#03@cLQT-U{r0yLCA71`IYmUKL?tJW>3RHG z(<@y=xNz*v_3gj!*Z+l({HJO_QxqgAF{r!tVwELwh4#Ya0% znNOU29B=8LFt3DZ=bh_3&&B(2s2~yRpMQlu<8*JyQz3RrQ_+e!^1<^r$&FH`TLlQ1dlU|{c>>v{H{;Bf>LV}R_G|jaa)4E->!mKOW>t$k}%2Tu{w1T znEQ0W$S*768cAeOx$*T$i~DngI{OsNS~Nmv#`UtSxBttb65`Z{aa+JHdBTWGhB@dm zs2~&L!oOX)M$Jz~PPS0^C0V1twnwr{Ru)1WO4Sh`0;V6f=!5)|?uU#kH%E6bh<@48 z#D5dw8Gc#$<4#sAhBP>Hc1u3Z<^{?CyK7;+^H}?|GZ@1SKisg_(M3#p zKMO1iprzX6dJE~j>PJA@ZZ23J^D`*>c+p~LwFToT`dMHwu}-q)Oos7h=l@|gO*1NZ8!EkL_IK>&lI_~9Rb9cBG0>dpL%2tzgi>|F?H#qZ;Lv`gKU&Ke9{ z?${^WL3=8@7q1Z~jdT!0>l?_ZQYhVknF3*rFN42$6)3dVx>p|}i#2v^FmT;`XHpHP?eqz98yY%aFF-7XA|z}625yH83}OfH z;i6=INps7xQ z&0qy6zG=Xyyxf7h|Nc!^d>0I1ubEUgK5Orm>;aoQR84d8KOBFt8@r^%?7Z4k`hAbj zl*Ti{Aj}crTk%LskaZL-c`>c;FC7wWL7!8+C+_f;XruY@>t1)#`-gt?qVk+GkJyP= zHXaXvbUUPu_}IbFYa8{Q-9(V=qx$~f)9M5N9H_pu)C8iIu>mxjYlP}P8hx`VyJA!i z3}hzoabzG#y$V>ZKs?a(8)#KU>nJb*>O&iXM@W|l8FKL7IC6TmTFF zz3p|FUqn|P zY+}btwC?Iklwbh_yq!v(-++Jz@2Puq5-1uLBw}LSNO!M})nKZIF5xQyBARjlkT~;P zHp4-jCt$JqHJA+@uX;mF&Jf}c)vCp)P`87E*Mh9)0ECynjw*EDffj{dxJ?tgl$S@u zO{aPt3p_QQAu#E_GZ3)3+x#tvp}vepfU#ZZwkjCicmSS=4T$47Rm1!nxENz-8~F&u z^xQf%h-U#fIA)G zUSD|GoP@-7h7>bdgd^9EW5Xj{{umoxP032C`}5yL149$6p0L{gnBF(^$~Got2Hp}Q zncWaB@LF&T+k_xz?7mfiVw)8v+sk6)vbH(K`rX?+$6VFaxDTNAi(D`V2k9hZrYrFg zYp1YzB|u&hx7*C(9q0`eCl>JtWH$Q{aw^D~a9_5V-(Tc$Sn@sC!0fQl^C7D_Niyy5 zH>ULzHtz{1L`#&Mjr!C9SU=STe-<`4NLJYz1N~_vN z)GT?BBHDmtn0nmCaXG?Y8ga2cNX{|D)RULvX2Yh}pRgk4e@?Dr$jOC`D)SPm_S8{= z2p4neK9O8(T~4PkLo(+YV1~sHU2c}23f}~7oZNV#POe-yrPQhF0FO0e6Ocp|Q2|{! zTAzL;&w)+26VX2CN>&&Hu^Xpbu^waWb#n@`JRs1R45z*)c_Tg`I{OchfXs*SBAt8} z;tVYf0u|3-Qupl>nCj@0dganC`c-7B={<5&6fM;yj9TwZf<2T0h8t_Sll=%TQr72XQ<+i8 z@!ZT#L)mB@Osfc4@0qk)0+MV!(|r6>U|xEXqDt?J2qNp@2FY8nS4h;vX^@U4c?4XT zib&q}0@T@|x6t7Te7z!r0%SLeQ|Vd{*E5$XJtgP*Umu>fQqv>36P$I+I(zOB9#AN< zaSyHIeul`#{YTt!zLD0J4Nv1(wVPbEEjC&hBzU;uObn;Ka;)O*aM?2zN@A-JHj~c! zevCKGL-3kTjC{f_5F574w$p9oz}WA7NW@qELRUeWZcp4JVu4x71(8(T`+PvFFM+V3d{~~0sGF+4vR=%7nthALMXNb`?SQw z#*0gC{#9*+si)%<$>Z^QLyu3GjAs5sU9}94*>bsAgZFM&X2nmc3XI0v`#nsYZtc!~ zo2a@Ausa!Ec-~H5vl+r3A~``46)Dp0e;_R&XFmK>!bGeq_gptlcm3cp5_LoBkLVtg z`#3{v5xl{E96toEj!uZZ$r3j3{fwk-fMuz)cK_mO0`In6p8)xt4aW>^ije1_kJE}0 z9j_f<6D@^yCbVsGw5nQXTzDN)jWCb2Sp`TB*8UN_hpLclK&aHW%u7Bvs4UFRyj?H|nmKUvIb+faW?t%aIlt=K8KA&gi zyywhM&)+NDjN|YM!rM9b=4QypHF6(Y=Vpr+x=RZ9Jq+{X@rl$TtJ(uQFhjhCkPxE> zZO-w|nS&jHtW9msz~Fc#1Prbm9&}$`fa$?YYzj!`+XCK8g+PDkLP%5A%w#P1fxlj- zjz6eA5MTw!XN|hb&cuniz=I-(?)Xl%Y`n8@@xaNEqv9T9j`c<2mSz32UkDG%!}oE= zjM<0OSMb=4r}KambrIV29nntHoG*5@_cW(OsJcEazpT6|srJA>4~1BydOBXQ-L7sl z9QWKwhvJbBA|#+4Oo%ja@qskLttr8z1C|_*b1;F=*Y4cti92W};X^8p5AQjg@zc@Y z-*(#*zy2U(C_lm)_KS+?-_1hPHy(3S^Pk_*nv0wEJBn(0+Igc%nz}wL+)n{7^5DH~ zk!|m&Q-vYg^_2+Amap;UKJCA+6KbYl^+b=Gxy(*2$4z;ZajXl>V(Spa|G?<=dQ9%! z?S-nL&TRI_*N@>vUiVeJRX12Ge|h#1=Lc9-jx?oqP0%S*tqP|eC!fY^?OVuGc+yO3 zyvVpXZ}3a|$pT*IZc&P|k|^iS^VJ?F&A*_*GCXj2zum_Klgmak`guE$yOBI)j_AkE z4HyU?JE}{9;H&0QlhpL7$z-e}7*hiVEAh&TxJG&*)~f z{(%(L-21wRoHF4wusul?EJ7|kTN?|r0{!5tjw^t1b#!M@`8!}LK7W6?5_3ewU~+(A zx7Y8i=I-yo;j){&!l>XCjA7WFi{0E6m=w{Ri1l6u3$C{1gR8Zn|L8g_Xt8=ELu{6a zFIWS#k4v$AM}J@4(Z>W=A}KDqQpPQG)}pyVpj=ag%p><)r?y>Hr*HOoUI6J&!*uPT z7Q;oO%ZF$N5x#$9t3;&Mo|Q&oc=%1zUyk2)_6)k!3R8iqW}4`j3^gta(;byd;LAJo zDr@3mslfMsqooOsy$>Gd#JuAIP`rzl*a|122Rpg>D|v4A;dLAJ2wNe8N@gs99slTK zXcegp6Fs(W|M0ri7>~|R;SjGnZ&7f$Aa!OTMfCng1-xbMJvmZ`GP!T2pQ70L+oa98 zJP4!!4zSeav;UnRZk9d$1n*Nn$ZC-Bmbi_peg}%&?%!HE$`VJ<>}`O?a3=djEGck3 zqafu2Y)kddY@^(umuCJmtY@yp;xs>{v4>skmx?=08$5|g5hlN-H~k>)X-6IYN~;4s z>%qUY{Zfuz`-d96=RTjyBsqe!^y1%54o69yDL{rXw+k{r$1-yuSC3t#)UhKw15&xB zAYl?eb=vORvzN$F4i@2K-<1<^erp;r#7X*lKIv_#Iv$jn7^}rAZ(DD3+Yx?PVG+nLK zd4Tap;(gmkn0pJkXj&qOl9rYIVlN<{t>xtmlE9`oUp!_E6yy^@GIAJJG%r2>>2~b` z#K-Ui>_Jml|DUgV!kPdhc>AQCf~{iSH1~gplca>?IXzZ^7=q^(VyS8Al{7a-YdKM(*Pn6pZ30EPU#}9o1LhJ@iZ2&kk19V|?3GTkt5|{oLd9 z_fh1aYEn?k^4v+W5e|~eJgw)Vl+;e1zVe94Gm?;s^-s#*IK*w zJDnx&c1af?;r=qagA?GBseaR9I^D>!14)G$^A=U1fsh&Y8nmDMKe5*lhWqjYBU)%K zS#fo9Wm4&06=(`IZbJXXbmL8ZFUa_t0fmjXZ4f-3h|n7ppNa_(r$H<*{n(rr=I4Bx zlD}nyy!Z}FTKe=aC6BI&R&yQxoU29mKSq*}})9anT6YJv)koZBR^AtfRBgU1&L;+w571n!JxR1QP4lp~n zYJvtY6+!jd=eurDK1DpDa9IiT0(mq}@p7a9DQXgXFe%k<{n@H{X5I-ZDiIu~P)-yP zx&R((1}wb%+_z`2Mhh6T`Z0baa)UpNfomf3TP5>|(6TZ}zS$27ABsK6RmZxl6T*>s z_90JZcNWua9+m`moWgkG3i zcP2CODtBu`$jinRoZ=n8rFQ1eSF>M%_w6M2QDmn;WVnpd{3Y1@Q;dg@QWN$JiOc!P z&QQGJeZD&53lw-voIZp!p0Hm`J84w|Sr`68ely}RN2ThuNgx4a3X=?o{CF+i@idx$ z0a*y2vj%_-b9|y!V6#2Xa?8Soo2JG&;~j zcOvCN;$iD__7e1b4*Nm}wzc+0P03G@5#kh*FO;8}x~cmpGtz0&11=kE;#Knk8z}dX z-;sxp7u_#Ic?gV~P4>aVX8iHyMQ{6d7%9EKQ;1cq^*VmYAE6k{jFKRM!gk~|>W_yv zqh_k_#8GyQ^&kCBw)~Nd7TF!!2k>FnUJ#g`RzkEKx9^a*WodZx=EEe2>%jIkMf;3K zq`b@oh^$6O^#ETCv4O(EuRn5%<@7VBA2td_k!M9<)gqsTwiF6!2Y=qf zJbF}U%3|rY&g4mz&H5$KE8_2nrlAfI9%|4oc`-wCKS*CBTZSOG5X1TZ5oZ$06uko1 zU?Th|HDrG*bbut(TuGkRp&^!shj|^Z$Q&pz8*R{B)TwT1vls8w7m9(?fZvA=MNyVP66;ueUIx;M%v?!6A#b$ z(VG}ndv_^+y+)n?5c}iOLxJ%HEM~a8-Y86}>B0X~Zw3|;S zM=)+b20@2NU&o6yM76Ep{wk_`>&$r4!d8cgkqZyRW^{H#_~dWo{!+K7H4JUMV5wJ^ zj8kB?>n$=|*DqBbPw{Zw_$zg(f3|ukL^dl|hfjKq&^sO5nyD&;84d^Z$t7OlDhgUm4(w`cKx0 z(S*C@Nu3xXJN+l=k{L04o6n&phxeGPXE+7bnOJa7O>PLP<0e$_&xHn9rl0QG->9{E zBL^vdY??@vi}rKTS@5MKe9Q&TGvRh-CH4`1XDvqB8QaRgaHrIth*NZ!U9}5~7GPv| z?!XInUn)9b_o{CeR_;!yQJt9Xh(K-ExT3D@GWI-Z%%tWs0BXGY{}p*c!M7aaM%G)% zDhPX1Cdkh#<2~}V-}M(z ziagkcPU&M^r)pjfZJr zyK~%*po|(M^R%_;NbWC?A*9}WenSGdQwmFu(+YDH7Y?XW^?cDCqF341g*SZ?e5IR! zAa^oIK#?Jjh#s^6Q8Pq6CMJ>?kA`71N$B{F9Ie+8hbF^_S{EXSc5>l@GCkQJjc8h{ z47GKBb899WrFo>)A^6+?Yr&CQ+_>|C`g3Jf7RLSPL5PKO%}-=jKdYEG8Xn8)8Mb}C zAl7hU;LT-8ok6@oSctpibt=(*o1Sf=(PS&{CJj^gnno%6i7UhPS(g=^rsZe({rN=* zyfF)v9Q->o5wE!LL!qCIzzQ_in`MwTcRDarVIX={1g)9;bKwgJ@fM$&-d@k;vy{_xUFpPQ>6_6uTbbRrz!pg z>cy%Qrn6rh7+>Sxf%PcpTbi1hQ5C(;R)F@lYMqZ?A-l+wV#wnOoaWl?+xI5kS}_D; z1wYHh_7LtcdZsueOf^v{?#jT3F|GwZ!OXA#Q?7O*sJ+BRV7;0t`hv^`rUJmTrYU;9 zM(l-0rEbiocck9JhSP87)e}^_U$x1(3@Trqj6)3qkP65peXt9-Jy2%M5kBA04Bd`iqzP&%a4edC8YZH=V^>LQd{?aFW&HpQq)P zAk*RJFuwxoxYxz@$)pRC0Tw^!4_QE&39ITV{u9yggt2iWnJcybmAO(h>^v7BGU`f< zwYwY@H_2TRqaCyiXq|Lh&i@g?@={d}xt=7Du|LdONCB(!ajI-nXOL09A=cbUM_tW~ zdGzsWl&8_$ECjT(eB0n0it=c722_7M{Kt(qi6L#SqbaGrJ{}4&=zh+}cOGPO_ zK6ej%I|7q3fLMNDdt4=1+% zb-clfO|RmT;M21t2c5P17}8LVQ5!W(@(0UqIfDK@*h7o|CC;xjIL&$H6d~1F>E`-7 z4Uhk50cIdw^8t<&_d8_N6wmo+^#S{Q2&{PQd$w)67;{Gqj}Upt*1&>x1@PupjwVCFzL1&E0VQ+ESG_@q@x;NkAoQT6i zDTbIGh`3z%1Gzuk30+0fH#_W&7C(JcMm{6G4u2H!hpy6L`bXZm=@qp`Rxvr#W6(f_ zTI)Lr%^O=Kc^MFFt_#c7qGNp56--(yge9m_erR#mNk`$g@(333tCtVVgP8kkpT{)k z>0c&oqJ%rJitWi-*M^$t5F9%Lru0#RtezFeCx$8^s zX5hF@k4N1lcEw72Lp&p6l!xB?K|nUPe!(tc4!PaGsDkIq~~Ijo~w*pcyK1|{II?ZGB@?J z=##+UNk5>nN&)8WEnF5q;JQl{QH)PnHxYkkQ8xfk^_EZ>Z`aS@fJ8M?_o(a44fW|NPQy$31~UlU0{M+kFxgz@W3+= znnVIfH0uE!I}$IC8KdNKU);tH%;_Q2R8OP{{lj)yrIrH@@b5^Fyp7>_0Bb9S2H<#hcNYP~_m><6mh z8Q?SbOrG>rg6CrV6TP1>P9%9wtkM8q>xo>C)X=z(;!W`3)%kIl0WZu)L~;?oa}~_8 zrXO#<1Y2IaFXC~21X_1U8ui?B?#NC+f=${-k7l@4$0G?kz%jCv)Pe~|`{`zC(N1;{G3EmUM_J8mqDMT=w z8n+}#UWPlhzYi5O|116)#$({QjlqT zijhICCw3AahJj&rT_SI%nuf36Di&BHBgg^kgx@SO=zfIzlA%`zyV^tK9@n zgR{F(&O4T$^RJs3m@Zv-7&UG6P~MGxaGI{d7g;R51J>@+*}I^fxXz=_MxQr6_y|i# z?SHV}AN(KSUfKz%pBOMg!gD6UNq%eF!S2@B{$vyUi@I! zX2IR9O^mf6U*RMuPCd^Gy&IQ1lAy2 zR7-vCxF7E=Vtofg`T0Q!XNrA?!SN;^UPWLuT}z0C?jl#4SXtdr=w1*5){{B zj7NR);AhXHg13AxEamvynaA%y-n}XGt;8O?lsh#K{JcFyeBA6k#7`kKd& zd+`_Auq@^tu8$XlK(`*4SgjwN^1d*Md43aw&R6ld%{JD9a#57Qi0dJ#LoyUSdkGG4 zhTu?(IN@*zvB13Sr}oS##{K+VzDLKO%_w@$=lak0cx@m!zs^r+ zT^P%p?`V<|_FRE3t2YRE- z7hrN;5P5!Z3aC(!_bTCLR4MZC7J22Pn=Q^&_4&xl>ajgvpu*xN*5CXc7?AK{a9(7w z3z;*|T=Dw5zX?(O7Sf}8WSps*(iQArDlvHE(G_aIoDGuY4cW~-5+d2eGJ%2a?2Mkg zz8_7F4g{39%nJUEXUgqnG2d3Vnu8+6+3=}UCP*`Zj^ERRm2gPK<$m%Se(SAOt=Vhk zGco?aM&IVy1G31oea-kSb>iw}tkqaQpx}dl*+Xgu+=;uf=y*l7cWhDU~gSj}9N8axfqv&rdF= zOYciVC0=LuiLdQ&SEs|Q0sR)Y_vho+_5021o;P|IBRT3wDFpC=W7A*ZPqs)vHSCz5 z8Jz|Lmi6=efXM!U+X9^H!_99wE(PY#CC=WKnIjg5U4`Sq+%MqR6)L=97Dt*Naje$( zvp|F@CvxQOxV?}Yhpugo1B$NtI0H62glp5LTmu`UwVzP+dbM3iH zWluzD!mHL`bzla}m1O@+_kAiTV|?jN>L?jBc)AV|qnMP^bxxU^@=Nl)^+>Mtz#bgv zImS5`6d}<@@CF@b%A|Sy?LiDV*jP}n(oI?X*Zedg`U3EjGXqsMKc+`20^|#)%R)29AF(R zZ?&QbqYCf*J=Hm%6MmMSs8c zF&7<`N7__Z!O%UB@Njds$h(zy0aRK2bu}ZJXt%|BZ3b3*(&5lG#C@ABmg1uM;aWlG0cD*iU~tE>lT` zBpA_qop0X*Z_>D7{t)D{U6}9Dr@-sHbGg|}nP3*iO!FLkD<$b!&A0xjDuN9Xlyt|v zQ5;QRxYBGKG`J1~R@U2m8LN>mFTj*hU?S!#kiGLon-g*iQ76vsvG1uryS3HTayVVj){5H?Ml=wr%?58 zv?q>}z43)s@4*1{5sOGk8`BGeN!t9@1XT?dUn-gPD&5OX%SwYdzs)&^@#C3uf;mzn zY$@18c-Xo9xZZ}t)Y}GgXg?e!lKJ|1;2^wXkEsZk{bqcM`q2H)bOedSRh-qUPbMwQ zFi`#~ek1h$6)nD$N#-V+yu)I0C!<4}U?Do*;%XsCe$ZolXiX2yN_$&fRc0Oc@y6zK0)r!_BH2rd$v_%hRF3sHbA869W&_JFdMa;P%kCCOLptL37LA>Q>WygC>KlZ+jM*f|~BD zzWdq-Vc3t~e(!ksj`&i5vI(yrSGHT zq+;q~;1Uw{?e)@U8j;_@i{mUZnA&{T3t58cYNmB;J9(*maaKpJaSlM_e5j+nY%W#K zR1Wn`TL7e(>kxRnx~l^X*gkOJB_{?>4bTT?YNqEC`!MZQ(gO=+nWo`lM#{9~AwO$xi0AJ`V-E7iIMHaA!8WGBlF;OV**@_hooX7 zuP-xCn7$y?Rf^wqPQJ*F;!Lj5+(YL0RVf>$FESA<-x^ArZ5aj0 z*WV{>njL7Xg+7*Pn4>Iin&P$~uLdcfFbkVrHFj(`m4X-^p2Fg#kP7Ip zf~yTRN?njw;Q{6AQ!#Rb-&NN8Ux5A86gDxR!^wrcL?K=xd+<3vh$|`uP(A68H)zMU zJ3rVNbZsTtAY2}V{#-yN%#4{r^Zx5e=E;=T;Dy6_hFuay5^KJJ^)9%lDmyL_wkw;2 zpUYPu)0g;_x9QXFreUWUL-&O&=q&&G>$hgNPltbI%;4`P=s90Fa z?HQg!;^@GI%%fu9fM~M@7tmKo?R<&&a(%DAPCS8Elz1YE@l5i#EL~* zC%!$WW6>|Hx$08!avziOci)nRm~AEdVW4k;_)d8V;Xa*5OO`Z|#1=$!`Uba!>~!@t zwG2JNr8CeD?mD;(WBC zbO%w1j;$Ozo|}%8JZL9c`G`md!B@$~Y!C6gUW#9z$+YY+XlX&OMG7y+{>4n2;>jI~ zI2C4UBnHWbwc=7VToVrOFCM3)!(#%N!S>KPV`XabsyuqoTlA%&WezKkn>gl&09Wx%;z z4iwR_RXD;VQ?s*gY3;#Sx1(nNL9t1t7?k(g0fXP@Fz!+1VJkwb6py6b=s{_V4d_Y9 znl1-3YvD1G9dJVa1o)^wIsOiHoQiEAfT&3Q-3n=CKnu4E#>F=PZUtTRKQpB~)Q$+V ze}s))sMt%id{CkUW6S*8j|mLHr?J=4i9PQ;&98(yeh@lL5!{GJ4!4Eeu`7M(9|0vR zH5%bcl2Lznpfq=Uq1-GQF!1^rRZc2@Cpg#k*~< z&om_`dgLo;nkP(K)SaSzxrIOvA6jB2k6V59Q7&nC@$k8GDIS{Fp9y+EPTH<#jLc7t z!@NOIb~iqu0Bw~s)v(O(%B*e@qHH2gSfvE%zD{%7TVP%>J+BDPL8{c*W2j1Yfa}s!`@RsQh$&T=g93)DzZr%`2)y2^J@lmr_PNS1>&0 zH5aG(?rd0jS1g)GEt-E>SFV?*R_+fs2K9L0^SI12}=+=IP~jFUQzE&iLR%bvLVzgYdZQ| z<9yXWJ`Yu_E8U?(zw+Ut<-#snq_azE#_ycO+oiJV%U6>pEafvXbZ{CST@R*ylJQ^ql>e0EN%HkuOMtg@<+k|IhJ1+w3A1gS6K}x`(S76Ib`PtM=SK zQu(ysCkkF`jS@)Z6yQ4fj2pz=t#4Ylm@P7Waz?e^0M0V+B14{6k@hk29jV=Jjj}5D z`Fp_6@4zjTiYl7<{gTb*(Bq?d@w_JG)mq(X ztWPIi(VWn@^=UkYXydxvb>8#%A@*mZTOyhV3M9J}m`{g;ao*=zdJQfF9ntuBgFOI8 zVTgv>o)js2jXTBp%$D*|L%zZq0iyOM=Bo_o62#UaCH(ftp4qbFh(e7STg_-!40@|TA998=uYjm)sfkD z>0RpdJCkYfRmLp)C$e=lJPWrmGEVK8Ut+)LlX@&IDJ0rqd}`PgRBnqX8dYffaCD?} z++-fF*oC%Dc6{#YSs8YUs98CNR~!;D)7pLd)f>fpEI@LlTpvq1MWwa889i3+vmBc> z=-;?RT;Yi}R5}rmg}TsIF)Y|4%H1G!_x!Fk1Veu*KK?54FH!m^Se=OBiBgnI9!DE7 z|I}5+i+o}jtxx*Ej#H8B4x#WH+5af%@SZh=)t6ExH=REL6I__{>ZZ2 zYtR*^z8xiAw9z2p59JAGvVco=%ZaQvBzRbKoA61>m%E1j0(F#Ir;BgSh`glFAd*dJ zar>n7uy%tx%i7uH3p&pHgB}JX--ue;YP-RfrYCGGV_z1)&{ObipNq2miZ!l~ve<@W z_*a{*Ug@??z%Ofh;iZ|eCmXKoaL46sK|otx4US-rh*jRG5R>;QEmd#k{`Nf;O0$2O1s8gH@=SZQN! z{cV8_a&Wb@!qnM6ILWI}#KFI*)+Jq~h5LSx^evF8r&=DB8Z}8fiSEzh;H1@>*j48j z?RSU72;T#g6TY+wndjNtB{>94r0VrNM1qdms0%2UuXh&EoF1n$JL9(L&vPVp%i+g2|e^tO{cRcIY>&@$}A<9JuiF7lC@Nsdf(h1n$H%BZbPTfi%7 z5BR8Rz1r~>^{@5Lm9q}39jF~TKFHO&PIcy%0jYL{`DR;j>f(!iXRIsxPI=h4jw&_y zlWH+3ZKuu~o^P#Ucdc3stn;Q{-*=|uf4F;60-Ton7Ae$KD=-3NpLp7cm3vv73nw~B zwKclRk2-uEehG0Dpd{&O$Jq={OXgHw=ag*nIpAYxfC=#g<5W|t|5x2pz8)y|g`Ckn zRKV>b^mw`G=3DjpC;~B2GExF{yZk!#@bF7@Nee%pl7`wN!owUAjg}3^-N5Ij$ilnu zKro1hNdP?)z-VHpcJk)=A+t^D(RDQK`jN3J>haS3Wyw;m4=Q zH<&2xPICJgPwa_!cn-gSo0fF&^wC!zO$xbwf*I%6txIF|+v2+Fa}J*g^hVqlecDMB zv!^>JAzXh{?0h0P4%ehvNe^=eIcJ{S4e4?U4I-Xp3rV@q z&c~9hDTl=yypt7pY^152uM{XZ_PjyO&Cp4RTA!P-VV$Y~~AD!hB zfnM@?yTmCN;-M9AO3~`;vboU7b5`G%G5f7+SMJerrkbF*shRi`jToNK@Vx)lkDWsW zY8Fcxilc6nhxiD#Cv10Iu78C)k}*6|;!~t?=kvYo1N|lqFe;4Ai#5i!(M%}Q(kU*_ zqK`e8;;8ieBYe9QKK$X=9_0;h^*Jx<|S0_E6L6d?xcCY)S#~tF9x( zJQ$UuAAX^%nKYRE$+`j}Du%RWLtObm(ccC?ASJ?-B}i z&bN!UBif@QaEc`}0aco$k_H9#u_I?F2ls^^3g2UlT2}ma;{=%d)9ofXsSZb|tKka{ zEIc`U@UFO`BDH`J*~c5`vRR9OgSD%KaN^3BxvFl3*d#rRlQc}cgFI>!phz+T!3i$%uO0q$@k9Vv!y|nQ`(Y zha_#( zJ9!x!nfa72a5dq_Q7x`^#b}y#;Ys!aB}}Ut9r~0q-APevAKg%zdflIGQja_*1w;lG z9C;5lJh=MSa3JygoA!6F(7NmQwzoBp`w{ec*uo`kpRQseJwqRup5XA`P{KSJ%l>vR zBVr~Rhf3Y?>GzFI>#>#Ph>xvdV#=tvh~jNGi9BE>tnvVWj_ecB+P9j15@6 zFizZB>DH+9(ry1!V@rf28dfcSI^%JdXA$Gr^YJ$$z)d*PEKrXIqX208=-)*7+id>K`2kBk+d7UpB7H+B9^tiTgNno zeQU7H0#w25)p*w409HOKO06x6@G$Na{~uN`yieEpkJP4RtsK>+UW+yHDhUr43gTGs zQ&lE&gz)z+X+}N>Qr$=z?2(ZEj~2kMyo>0~-|=WTbv+epaMsrUsTf!(co*2WJsF7kD+TCaT`%Hu7MA3@)5cO2s1y8nJR z#DbY*k;tZkZ(A*?mHFoR<@eVWg@i@3iLz)>REYoGm6K+^wamn{89ptL)fwMs3gWxX zD|Un=YeEnmam7JT6Xk~JX(qYR_k=&OWQIyzp;6YEzNm+b!+ zSMME9b^rg5m&7r$MfN&onPu-02N@Yj97)5B?3u{kj-8Qo%#uPGks>SmWMpQ>k!*>= z_i?(e>;1X?e*avqKd$TCUgPY=IMtwu^eal6`v)_-4Y<6~@Sy;>$a>6hf|71ND}`QvkZ4Nw>zpFTuBqppuiTbPC!=+@FK6+iiUruv)hTwZ z1Ik^?WfgHLLW`FS@d;{Q7}F{`^~B0@wl(u)8dl~f+ETXND5PyFLd&;Dm`22QiMc;8 zKNWOqd(B~p<6fM3#CT`{1(if(zv?g4>u9Dp@34xL#hwF3v7E#ZS`0^CY&G?&O>9C5uCZ|sZgYJFn#55tyre zUg*bUER8(eJ#{(ckXaWY&~}X~A$lLXwP~nJ6hYeip#*Geu8P^d51Zb19ENd5r>C}z zyBAqu0~m|Zqp=Q{?dPJ~hc{TQs%^Gy=*+%u7l|@XmP2$3R45Ht!NSW6nK;s9 zHPWa0pz!ID1!?#?4vAMB@0jZghiVoYWp))seu$r0&4pC4C(l&VZmQv=jO(10@L3ON zmD|DE1py*dPAP@Ik>0@kV&j`sWhl2Zxf7p zGh@4}RV|6cGX&jae@^-^*Kn8H>hbwwF&%}vI0@NJ#kSuD)l~iwvDb?{Zz1Ibb5aPt zu6H4rBTNnEscXZaJ+S1L2REFPxY5KAi7z$$J3*sWoUa?Sfi5=n+v(Zg46FQ1+Nd0C zl|}PeA@aFr{7h2Eimu(Id7wXiobt+gAGo)N-m5cyQ?1>2VF?*O5}1QU1~rytG$e07 zN?m`lU<`4Smk@>mn{7-ZJgGTR)XnV@_b&mY{A0YvP!~6l?QMenc)eB~krl}|SFSDo z+?Fzbns-ZWN$5?hRN@lUm-2Qdw|;j^^?BOmp|4x z#?4kHim~m2nz^DMJlpG;OrycjC+Up@c?du?>iKs){`y{BM?6q9(2>`2KyVj7Ix9Dv z#?N5Di^=B?Io2Oq%62l5CyWGRWa5--s)%Qo_q2ZlVeC;$j%qVi?qO%MFSsD_UHJlm z!gKRE*x~}s7YW?f4+XQ_?w#8lj7~?@bTD2xYwr;*j^+`o77H^oN!2TIYNb*2q}(;) zACTy#P-|C6yq}d|oO0+_vYICvcpCn3!#nUbKs7b7gcT{N`ar#LU4)1A5`@dsc95a8 zv;R&GW}eK;TzRy9xx4G$CG~;QW%Us~cCoMKQOi>oP?DH;*FS{b@*a1Q+2=Az{P!myd zq+oc~Kby$uD8xq>6G=C!Rz~bV&tOw%AxwK_rZ47JQ0H(8g;J?)2yNVr)C=%%t@2&% zScu4IOTaL)tM?qKGmO|NYb}AVokm5M@s$+$D+!)?TFnk;-rQ<44yL+ zW0JSQZU0RGv>!`bjZ`~T!X%j!qL83;ccZ*yz=;PBacu13VAXR9=r`L+AYuQMxJj(9 z%a`j(YjPKr!Z49`LGOyit9nTW}-a)*7E-Fpt19JJJ}mr^1y$a-bN# zQz~VS$0U0`$OMV!HL#0%nwyC_Phb|1XtQd$o2^Asp4t3ddvA`eKCcNZ2^I{1B-Qe* zJL~fmT%X^ub3&-#r6-Y|km*%R6vV)WbyxnLuR-!dP{?0b@OQ07zV@d1 zNem~Eyg#%8Jw2J&C0@K=tsSH@T_+>DrGdLj*>}@Y`icO+$(4pD0aPu`zu7)d4F4h* za$z(dBEz|FJ}!=fm)on_YCahRoDm=FUi!7W_r9+Hi=r)&b1jN(ZwY3nED@yI=R0R2 zy5nKYoa{3e`woWsy%Z`yAJ$gfXogAiWW3k*fVKi1nQg?&cK|$zt{t?ox_V9$4PSFr z^0^OeKI^V`n(7>KT3Qa;pYC}wKM13H)Yq^9V}hUH5j-%wj!iMJ6virDGn6NZhNG0T3)65fqPeQ2>A4}85*<`cAp81q%$0m~r(~I^$@c{;RWq|Du zms7M{YyjMN&-gki3(+W#kvTN1%>O*5hrq#mOGO@`>h;&hNP!?q_9A?n(ce&sfdQBK z@eR&f7{f>s^!1ICwE6!fezx`oR!f%rk%)4@E@MTFL-Qz-AMK5X{9)K zf)oVgs}~Xvz`>kd?#Ixxk;~Zhm%8p{1QQu;oRV#8b}#^*H-Dfax9x7$LJ=|X#ka@d znBj0+Uog<+W0%y36628H57Ce&(3x~d&?4?~v1YT4ksJQ%zVPYsFXn23qI!SF zgIFXt@N3`;mFITK-&$k!41E#bfVyh=BlS$uHZ4XvZBSWzX6*vTQ?b!>JK`5W&}EL+ zuvDFn6Or!yBr0u>{R66d(}Pp4^7CwLTroM3OzgPDa4G>(Hn#^9h1&1_Z0a%bs{pa* z_1(#R&M&jJ-}2_#=G$W{W>?ExV%ntc<#-YS^ZNS}}$--PiuP?VC6;8__K-9Klm0V@i|nGLM8| zz4cBhSCS}71@;5jV9^eRY37cZE3&^8m55KDwJ;*^&bB@)Jllsv%&oqK3_vfxK4lS$ zy>~hiaG3u$myr!Xyro1MO>At^hT*rvZs!S+}j47xr0z6Hb7BD&!&n` z-AKR5r-b(5#Yg+lSE5S9(WaZ;^e7U(Tw9J7X`bkxQpP?mCCOM5HmbQ3(1rwl(BxxJ zbgh*a+w1bZ10fN$3=F*c;u3{-4XcX#_IoBNq0SJ3va$o{m4W^QKdv!A z7CSnE-|Q27qjQ6SNPPh>tI~aIBvm2+nz&iVbl0Ud;8We>n_FW2>-fx)=U{Y1GXc z&ll4o5q8_bumWv0+`$)yYrNHY;;s$5Np|ZIgR^qQ zLoD1|OXorD>chzeh(QHKL^zD}}RG7MuXd0;nad9J{Txz>{HT-gZ*8=jvJj7zq_rl;I} z^j5|x%LdO(7(XSOH%!8KE6$V|Q$n;B{`;Z2 zgKv0?(3y#piAabxd%iiSjlyjhm>|Tgq7T75fNtvkYQSX@uJ7OvQGsJTD7F1?u)1*u zbW4{HI<7w6eJ5~@y4J(cqbU-pc#&tKQ;k|1Jlfk7e~vAdZpp-vEvbG9Bf?6ODxHNwrLW4E& z9h3@k9`7F<{|$!8!%dn`euBy;V-2JYM+6PSFQDuk8Zg*hR02oX652}!IPPkT``kU~ zlHu+yNk4PMOmW!JWd`!ic0I-N$LmElkh>)+!1y7yRU*)M#+bJzP5l}TRm>e@ix`jf zVH11uMEQ?Q>WI4FR`*bf!}GC8yf(d<{71o@T?+1y>vmil zwHi}FENYUIN~^x(WT%RcT}jZ9e{FCVGk6WhSc>i#V#}yDl#k$aZzLiD@Dl?Oh}NsQF8dKPg~_(Pz-L!7ciz_{ux-W`l}uoUkj7=#jHf7yhh%9 zjYWmPgFI+1ndgniUfEm~u=ov`RU^ijr>EBlB9as(CdiV@{bys zI$W9XHNO)%9ZpKE{t4`f4RK^n5lgW9D(Qu1YvKRCfU5%{o7Ynqzw+d;U<^t`I=dDI;X7W7wMJRK@nO!S~jMF`c- zta)5Qv3f)6v+E=t<;jjoB2Q{r!gA5Ge;6+7biTKEe<31-7v1r-c$nC~jmdYb zUA=ejc$M3eI@6KX9r9J?V*|Xjr3sv|9_zCv0U;jEX`6ejyQH?OzDM*hRxtHxPmm(6 zBm|GMg?&Ty?LQLUJ06G4_;dPV%>%C8gJd}E-?@Y2XnWlLY5eBpg9F&c#%#f>p9I1;47YYdhnsH-}Wm^!A%_JZCZu?%QsLDc6}y9yj0O zjc<=k`H7g<5Kr3I8GDbYpMuYgWW}j#UTQRgdYA-_(6u#R2}6Ii7q2kcFc9f<$?7m% zF?wcR9$tqC;*_}Yv7Yy0TWXuR;ag)&&mK?bs5?LbAGn{`4kYSibhuWL`8;1xcc#RVaOH*cTzR16 zt`AT!i8ch5zaAd@1?Gvl^gBd-KsAkk0!|hfB?F6EO5R>`gy;_upvHKq2<$gptGP?D zRj7TkJ0%rMf7`(9=4Q`lZv6aHb=giCq-(|>`ws3sT=iWZX9aTjG89@D?Mvq=+V^I! z&RfyrexUaGvz=#S+%|p#4NRF-spbAFW;fkdc!H% zy&49|r@owN+j{|o7129IPp2=@RMjglVjEk=Mxb@vCPsTb*DC#KVi=9Bk{(-67FDD2 zDkS?}^j+SZarxqqKx$x8_*1mC~r7$+?7XC61q>wKA zPOrOmikjh9sHaJFV!w4+=I5e>VXOI7{$?e{$umreyo}u&MeTZ2D0!2CrGuXqFZM6K ziXbA@^_LG9QMrZ5Yqs##3Fn0}qgm|OwfoAn7ATxypv`_k$zG1)6%X1=i?J;ci(kMP z5inqrA3+-N&wN`LFAj635R0~ zhCd``Jny(7tW|MY=v|tAFi6)wZz8R1n~Js^ak*s^n*2tFT*>p9*xy2lDcf(bS5nGt zV0Ou%TB&iF5W(jtJ8B%EN{o=jaD0%J4&$Dt0d30RI81uR3sPrbe*WoghRP(~R{!(( zE^;7Bt}N8Og>S&e>E>bj{h?Q6;a^-8&(HdOKQ)ZXWnB;BDWPO7OTE#wjyBK?ywtFh9+6Z-&R_!Ubjv%Sw zF4N*dViGd^33TX#PhGElO)rgf5XixxHY{uFiV_TghC6kkFyhK%@m+|D?Ft{fA|SVo zRna(p)KA^Vex$&W;dP?GU`KUKdX?Xy9@`2cyd@y)o)znA5Q9Qwio1qPgee3-z;kE* zxxfw3U7rf|zMG23VVid{&mO0nxtV2ZWpMuBg2dXNVT^a2kqoP_91(QV5lA!xw}TsH=w*CF#&b_l(#P#N z&0#L#QXqQG?AJ=|BTz})9f{;lk|DOLRmj_R=fw{OKS{b3(jBGTVSTJao|L7<<8R?71d{d|8T5+i>S7D!&kk9#Q(lXhCF*gJarSV14N zMdGz*XsU{tI?uJVMHIS9LA8U5*oSmH3s=ZfLFy~hWkDcW3W(pUb5w#4>p^R=E!~2z0!Ki2qSzhQy;qY zF=i+E6jF)HK?`+0BqwVpN?P>=$cXct!bI%7|~XLpS*5 zrW)$FO@rqD%Quide?Je2L_a^YFIDP;rp^%1pS3~fwl^Mn6tIj7U)vP94Di6yIDjLG zq1CoKwLk8S3AB7?1s_1(2C|>gS1cw81&?A0;7ZNB|sO4!;p`g*dBML zrK%qr3JV0SmhGa~gCx48hg11AePTqEFiq%1-k0`9z=e9t!CO;i2;u#Y3&5?awOhp( z-?`$cAfiXihH9E6ck+9TOz^J9LQtVO0Fir;aCeWr?8Hrg4!*7eBlfH2u`lGu)dX%J zLi1vb*Ev5IY2e`5j5>e-@ON*vOvNpj=NH3LakEU}zl3g@jS=CfFne}-%7YLeH4Y&~ zd-Xs8-R=ja<49So`>R+qQcLN?OV6YbW1VYFr~Jx1XAjl2n>R&32?UtXPYvln|K;Q zHpV-u!^R?XqyJZ+W``y)@-q@dQ{>}r*Y3U`h?PWcinv+*jXD382#y1h%jq^CROW<| zCU)+neJlE7thbY-Ii(oA*h_(v<;RQ|}pZ=X?b)<(EDU{uIF`V8(c=(uO4kO{#pB1ZL=?-#fl>qSrj-G2!k zh+zV=#B4ofq)^sp9xnXz*G<^BHyZm@K6%f;JNV@X!H3l^pfplj13ci@7-%39=eL4> zjxG*^0%Ip0R>0(=a>zn4~M|`{MI8!S;)L2L|nbz{qrqbu(BQQr~YZInHa=Ku2jTh6o`GZ8o5eB zbKYKczkY`8KJ<*PyP%1hasy|7_CQGLySZ?t_xgTA9vv+z zQGZb%wGYp|s&%5y9YrwInCp~l<(=n5iyQ2EL;pN}G?-0Jgw0Sx=JV7H!P8<`1t#KZ` zOo;Zn%;yK9QzqN*)usdw=V!{lVbZpP(-W)flZJNOrEVeJ>@gvV?U7Qz8<9%#z4jD< zbctNxFy7y7!t?LfbU#+HA&AX@G^dJ0y!25P?A5)Pjl5m?}3%W zH70c8A8@1a2ce1?sAXJUwVr+?ZW}sm>2!{Xon~!@l+?198?3=!SZXL&NJ6fZ=J+>Z zFJeT~+F85`re4>-bdbrkcb^p{wm8{yG!_F6^C9nzU#xpG1dIt)-Wdblq z%p^&;?q`tI&LZuc$@{hg&b$)PfPG2!2Rue)5Nz|85w%P@f4~yODzi}lPjmMhL99G< zFKpVzXA;vbr^4AT&e?XHn1^7pVhBye%UDX){!%dWSUrO0s4`&NY@|AQy?{hqdU_A8 zYT@J_!Al!F$I1Xew+G#X{A?7jCurTzYT=kft(FcCA+j0|9`u87rdTD#fv2T!PfWMcZMENG_c3C6m8g z>+KYBK5080tA{*QF&OmP>u>T84L1>_duE?^;Mwe;jame-&RnZ(gGVEsyBEIx6nHXn zN)TZ%=GJn`>yuEiJsda*=QZ-UUnOm%nOmX=(x^uuz6P0&HUKN7RI<~@U`TrjoDz}= zq9d6puz+4`W4_>+y7i?3oCkW}0ThYy3>RCOhS-!s)l=ySfn* zpxy+&CEp3&8U!D=I7D1)EyCZJ_%7J2_I^*e8%Nd|;rx4#dxgd;>R0gL7UzY#6TU*2 z-mwU3&KEGc?dvfvxu^#ARSi-uB{@6~Y9b3RW`FG1xFVM;v@spT$4>jKH?A&;$+|mn zTSoLd%~zsnw$W7h?;lDogzSU3<3;e%VajFYCt*}))i4Hk9%i2~++!lkZwn8Zp{IWP zk6T}a>Q4j%Bg(Lv4S^>}kKoLb+w=qFnJmvFKzpaa%rTcJD>7#d(&Pv#CEi+wr{gd> z$-To`2ci);8pN2SmG8}JGO_e7CVc~FqAtn3VUn%=h`YfiXeW)g1tGVQ{EsBSPAScmU5a zuqKhbb8H>$Z-_hN3Uo=)vSVb6Sb}vP!3s6^gYA4rvS`CQBdDm2I>sCDJgV7^BYZtE z;aO{WtDUrLhBn(W$WzhR&$9ARgOqu(J1gbt<0QqUD|b!eKy9-F-~W$Mn9EoHh9knl zTQg{;IXoDMXm?vp5~P1q*gyNS}N$s13`y{o>AGgKmJctJe8KH8n_n5;AC04($ z(H~Q6<4%NqG+AKh-u?qqDq+>=-ai)!_q&R>o2dX$>xsX& zYqW`ANE1+c=f<`~=RF0iD1eZ=XUzlz*r{u%<9FX0)!endlGzi0gT$2bzbc|kddz(| z&&-lNH{TI#BM2;xeZT@?hPQF<3*u7o11m+;9p&clw84~lUWzLn7g=4fu$#0dZ^Ipp zCi^t}WadP~wtr9bQO?7*_i^&$pU0Mj5aQ;&Zm0^TLTygCu_DC!v9p?e+c)(lyP!>OY5WE{?YZav*uX^`$&h+X9KO5WB^Ub^M@&wZf~KoE^g zntSq-?*Mpl?phNFxnd(0_3&+i3hU)P@}_W<{LBxqdwEWwL7n2MKGEsYu4k~Mu(uwD zojcQRcPUxAVG6i^06+;jlgi!s1J3sE%b$WzkSIf5aOb&-7ekhRz6O~dOZ(axBoNt1 z18bC~WIU%ZO!cWna&4B7aKmeCBwsG$vty5Cy#-rCR>U>(!)OKHyop9q-qI~I$vQxx zG$ky!yHdHT9{x2w?jR#V*pShrUu)Oj8(E`83|8N%ez4p0Pf4)+v1QnYQVR`!>+f4J>a+PUQQn)X!44UK$1 znsA&YPNcQSifp+m2Fn_Hr}HE88*97L3m$rI>_wG-l~oHds;HE0_sP`D)=;ipo|OB{ zN^Fqi`5JqH?;!nzj&y1mS(3U%maZMjhqOFlOn0CAbI6LKMm{lZzTqy_E6Y>YuJ?>9N+3Kvn{-rPXBvn5vsj3B?yeN)9~2~u2WW!|5!9^<7;A-Z;^U^6PAb~p(5hhVs zNBMc||1M1aZ9U9eo#6a+9O-q;{I)C%Rx~0vT_yr~-EQ?K#0OU~Hsc(gdV9V(G30i5 zOD+7H9+I)>xE&SK9oQy^xL(>l7v5vgD85MSjj1jK!+@)=P;V{%ew2dj#K7@^Y1{~? z(MrK!Kn?c(%4cPVV6^QBCG2P5IaybW6kXnj^RF24OTRCB z)6_%7STeGn154Z+47%q=j;TTT%jZako5G~y5)rD=ye|!(=gu^~D!9X-`c&#+Cmpf< zj!xCs?kSpoUmE5j*DZ`e(*`{1i_jb3;HZB_pgHf*7B}s}iFCD^i@;n?urdHg4FZI% zvOT{A^;FA_NO9yoG%ZEY2_l;PpfYv>BP^%{Ese_|UTfF{+C)zxy!B?}iht4EMQfUlvX zHdPvX?Ei+0aMMT-p-}r^rv|=V3J%cT_)LvMVF?4KOE{3;7XaU^KRle?|B|t^&P1w^ ziIvXzMK0x>oM0$n3kZe>;rfKE@YM#mPy^8UJ|O_?IkYD0!m^EsbbHS@Bk4E0wW=J zDy;8eC$tB(smp+}C1gLYi`I-1yWP$VO+~}I{biBz%1^>$;G{H^f4t{Tx=w=tyWuW) zZqBbGcR4~#w`6d1(q98TYRn1zkbam7EXLq%AIwOtUn&ZKz_CdJiCJRC94ME+R;y$Z(KkD4rsfE}(vJ>D9zvwu4%A!n zl}E6DEx}l>|LAa6g|+}n4=_-5mv>j(o6sauO>dc5AN9oz_`r!si#|vd z?K!0%qe-6I9AJGRB@Dsqps@G8*#JJ4{=f#!RXc(C&U-?f!76a0wO6AND(Cw9tIWdU zmV*^GU$q$i5r7|lq}O9P8?J=U`3+Wu4p9F0rW}G3iG1Mi-LBASj1$uvp3(0j_x z5&z-q6AqdZ|Lrs!<89j@t7Z`^Y(8+Aa zQ%C9KCo_^Bi z!9hi_c-^p>Y@nU_*ak9=V0P(ar-j17jCD>C=w#&Ihsw0#hnh}?CPe1UHFSgF8iBnk zWw`=PKrh(7gXN`e(^*!fnm!zrjThc4oD)jAb$NpnF`62z5@i;l`Dl)6nyNV z@iOd^lf{Od+Ec6-9OtPBAU3J1LNe_LV1Oz=n|11yj6X3RNBFl}T)SF|F+o?8t2hkl!>=P+zdH3wXpg@X+Plf9K(3&#!0SgOeJkvuV!xS|5Hz| z5&$Oadd~p@>1fiu>+3>F8ARvBaCak)1O^X)iE9D_=Vxw&jm;B+rpVk+(YB`~L}q@P z>3}0=PDkFu7Y`u;yt%%s^kl?aKq?%8!56{(9iObtfsd*cnDO1-cxh6|M)w1$i!nG< zzKEbaMMx$3v7AXwtsFW)H1|R#U^@e zLV4WnsO2-&SuMwG|K^NBGUipnL-O_M^q`_2U)J%@bWTaU|Nc1X5{ySY^R9^b-Y0A2 z?|T&Z9TcPjmGf8TB-%|9+q3S^&NtGFQu_(8O>k-)D$s$3)QRu;V>Z9$vCbxel|OK5 zn}9CPT1SCc4*g3Z{5uz3SzGZi^YyT0SF(?eKe%#w0d^)&t=JYjT>h#;FT=_`I!gcj zTMn@}YLX;}4#kK>-%$Jj(W3TXPvs^Pj~?=uAWEJC7&}LkwDw~2ttlgh+=|1!fi%Bfx+U!9&_}EC9gCn8 zi_>%U=X}S}iz>EfBLUNQW)5*98h2`vDVh(mGjhNnyjdS$O|Uz00ec%WKJn=l*g%Yga%Vw$B zWc$Ml=MIiw2ecZHYnZ~)aDmgzVv_%5avjF^^a)pTiGo(Fq3*Fl-gh5EU6@{r*728| z%*r_JQax^Wgy>0R;>FWWrb)*EC`9}QL2le5`hG&XklV-skwY8Xjb{`&b|tc-I@31f z>!p9sVM@>{Ud9*<-D|GiI8^UXGDXRA|46#0!^6i;gvyi0vQ)SM4Qy7&KzeAb^TeW0 zOp7s?zq1)OLrkG##@mF*fR!(=R&xM3w@u>G&YAFOLYF~mdG-aTZ!cj>N~J&*o3TyZ zYgqN|>Aa%du?v2tv21<6C45Gap_ECa-;=uai8|Lcs?El_x%t-=AKxZ#OWo=9oSSQnh~uZ*tlc=TVc~%^1?Tq{wX-p+0%*jC_6KU&(&Py%z;a zi|tI0^vqlVJ~#Q*R}-e^efLs5K@f4q-hMA#r#mH&()xD;8_jg5dbYqm{n}~Ee)$i2 zvPbETPFN4*sVLfP6TSm$;c7PTo?&=J{hSM#nQAU5)L3%|6(#{8uW?=60%y|pZz&AU z-wCR^d_kM@odj>h9dKMZYgVeXx8CYQjP~hps-;11I9v^6x%60ha$(N|;hOCt7{6l( zT;#ytw^LyjlX(`pt*R+ z&2D$2)N*mbp>AVp^S+uV`QA7Bhj%XKnZ9!P_c7|Sg#gXPiI4a<_#%6owV3RDI?XFR z|BRYlevmOu&uq!?{-Ck;knb)1FQb39tnNR^`sUGXz{G_lcluCSHgfzG%9n z&!G*t3gkVXBpXYEO1th~;)OYrX3FV zb3{TZp6-o8e=a6?70|3YGYWm%A}c%sgIGt?R{-uDEnPx)JApV6#|ZdW$BX*&L~Ve* zQy)5_5J($no9aaO`cbsroQ~O<}Lm^g;03?eyy`tVCvr zet)+#i(5NiL(%hx59yH?(lu>6RP2I=Tg;qDNTz;uhG-w&Z~6S+uXaeluX#|qAy2vT zHDbKShnH!mTMyY#M{k}F=5M|$fZ?w0@Pkvz*>{ersV|nep(e44M1OgZAp}dS%a*J~dhC;Ch+#qI*V5RqaAFtbYy* z`P`p1S_$Gq``4`2-aS*(M$H^f`KAS3HQsfnl~1g!YSd^-;op2b?bET=`=l>IuVCMg zhf+t1jOhZlPj-i!CQipSqE|s~_#vBO<5{YM;3({zM$=as-;crZjA4Ni>CNs}m!y7I z{L}rzD|00l25$~K1E;DVH3AQM_=LeFQ#%|RZ=#D(y}KHH|q3 z17gADpZAQuyt;C)%--_f>W~@UqA4E=7-(U@3pR&B#=~1kGYXJU#E0r9x^;9g=N#+j-#IuUtG}^&81z%3>x8{VmeHyB7HJ?g@v_0D?Mx+lNFaV z>;2?X_-_FZe|hn&E}9Q9pOPW5PJ=LA7j~K4`!WN_miHk@*}O~czJU0JqkiZhkGdj7 zvwCTJkN0>|DpW|)_=*qT$5-X=Sl)X6>+!Ss+r^m^6Ots?Z=ojna_OEiyfb-zcx-Qy zzc5;rVQ5OvW1;Auq>~6$A?{-bAAnoS$gOrt_n(ue=J0M}hou`;0@ArdE>X7!K%J8b&< zhYuo3qotpKoPL;qFS4k!=6BF??WTPiGi`mLS!YN$rQ6WEplW|~F8UMRluJfPjMzM5 zTf^^Mr}@7nh7k(>#|rFZ?+;6Wl}_8RHm)Q3-z}d&DTUs+5k4Y##FB#qre+2y3)OOM99Q5tXaXs-7MoyxA}Jo}Fx{rk8h-mB0EYGVjm;0y1dvmqf^ej^#| zL?1mH)A1j04j00lB&z0Yq0lzl)pUP@eW%8`v{sc_oN8#TjdMp{&UXqzned$>_mBN* z{!Q*@VW72Ep~A?w01QX^#{{<*CemjX#R03g)|1At!D)9P{8~blUlS0y*gvU}lUk+FqwcUFs1uG5&ow z_HRUWzVqM9hupFrXi;XyA>I3>29yPE`I+;_0Vno5Hd@pnMC9Awlrku}{&B&xQj(=1 zz^ITx%&RYR*ByO)A^bF(BNRwd*7S?zpF03lx@D2YGRP({%51zM-D78 zV(XC>oz~(P1f2;!s#TIBq1wOrP(MUG_O6!K*J0nDaFwt7x_5f{rw!&#^OkdJG>mLYRX5BkaC7EJPm*x;=u~Ht-YeGr#pu6>5}#(9e;5bzkm9 z*RUxwu{X$G)GyZaTW?FE5?`L63>l=gKZi%66i8b;FRN5ZCa|$#sjc`O?o*{Z2d#J< zb38-k7mf|O;YB8WuI2S8=KrqwJ&m9r>`_3%Jv~W8(n{X(SraGDLH5>FQV4LmXr~h_$abog>_xzY5Mk@-Fe0u`h z=KM8d(-@=c%UURQWKdes?NfZlKMr2z3kNE=p78AbF`bOu!FD+k|)}B6AJ;?lWu0;(tytTBzA&rosxyZVK%UokX z9fUTRIgutmR_Z!$%C7NA7jtn@`%-pc9F0An!|gNW?dkuw0CMQr|Hi`v?jyM^JaiV&Ke4CKzK=3yrsllq~@E3uC4zk2z9pl!G)oioQR zIp+9Svp3IpU%yHqKt8XLnQPsl-Yit<^9@4^0D19-d(9m=17yyW5ZBT?g^90NGV*mf zHh^yc=W-MI;D%E-E79#govee>AUXc$HLp_>Q<3BP-<@}+JpPx^rY1@&Yl>Tc@H{xP zEBceYv;Sw4ei3wU+Ig<@3e8);ly6m|uj$Uv+H*1ocNiX(t}kbj{I>}_fFCuLhMN-! zINEx(Pl_xTC^b9V7o?`lf3`~QBC*T(REB2L)?$})(3_lQUL!r+ceN+&K@=4U4*y=w z-#@Ci2sc-`t8#zm8YyrqDPLc;#>t|rkwGqQ#o_NAU#aulA(7LquKIraVDWQvAC&=n z$Psb5jm}$NzMao2|9gR8w~q)p#TUdfU?Hs^P58}^GU7LO9;b)3ztR3UH|B=tR{gqV zi@8r0wFh+FwC$VI8~U#26~<_EPKB`dAW~V3yi@;sPB5f=*R0SQrV{1r%=&^D2r1~$ z>~!9=Y+|K>n&fTE1jrOh;q4bKSwT_npf9l9w=yzmj@d-E4<`H_yZ-wc^S{t?&2D?5 zcA4H56xpm2cr5{Odbdc(Q`kjIuTn7{`oPe<4U^Y3!&az#e(yKUjsoWFd{n*`$Ix`? zPlF*JAUp~a*OCZmUC508cQYqEG!!j(M~`VRA(e1cf&qlj>)>>8gQ|PGOs7Ohk-J=; zP1JsO>IIRb6IXg)mPzl5MWj8wLA_&*JSQAn;vDX$njen!LH@Wov*xEdUi7~!PUq@3 z#?@e^q*W;ibhT6StZ+IvwW=@g_U?YvlI5)XcET=5!Y8BpcG$ib;_~U|x#nT{=3k6t z+Lk$uAl<>4;oSNE1$9$~{Ne4F8(vuCLj}wSJ7&L1fnz?8HTTfIOXcBR zC%Om@$E!8+_yzJy6XPra}eHtYwR(h7|je0_7Yhwy0vc^?KnoCRDf_@Vy^^! zK6`~wCNNeOO5AOk{-C;a!EbgieeMKK=U&;`mXaUG;?rG4zeXF>m~!Hlxy+CyX6$3x zULqB{YPcVd(0w7I1O4z>_3M+Fwu`y%#}d81{;z!!CoWLC{?x*yAQ8zfgcn8C=#+^? zo4*YL*ftM)e?b4%(^NXRLp_HY_opI_T@+eLb%%NJ;n$BW+lHom5?)vO^V=(Fha}xd znHLWb_;1=OB6XO+Bbj2HybXw{njtX46?+Pl6|KFCcj>uth3aW47<6(QN+nnVd z^c=B1n14q;&ntzT0H1}s_|l4I4BOE^oJz7`dUD^mM3Z`}xPV!(-Oflb&d66i+lMT9 zdx)>+)5e5!;07;n0G51CH^C#K$4L_Hf6$!BQI0^BIv~0Z-H0MzK=Y z>Pt_h+y1jv6W+6*#&p7iR1=vfnqNhj7&$XZ*Y~Egz%&-QH&PhfdUxM7)Z2`%$ z3?r1E+9;OKB$24)5*@8G^-FR~lFvMU?MwgK%$=ORx4WFK?9am2 zE!Xv8EtJ2!eX>=rS1+`!(6}NrA3DK{f7yQrD|!96wz#R0)>jH+QXoM_whaHIieovP zGr(|=-REwdj_mh4m?Lk$&M?aLE63Y^8Xq3;=#414r1#Kdox*`~F7)diQj&~z^>(`3 zGS;}YSGrX;ZRDeY9Q$Ygd`(bWQn1VXJ4XHI%=n4uSIC8oM2>QZ8h7oxZ^8P6fv`!( zyiITHr4cEM*C1YxI~}X)?i$5d;>eGGd&5}xloD5@sar5lyvL_KqZqo&bzdp8h#HM9 zy}PxvyE~^NbaJ=hfzbR2#rzok?XmQRGy8EbU$%W%i+#8rcq9=_9U0%qAxR?6G3Osr z65+&GJw!KmTK$QZYt*#Q@CSdIj&tGYhU*O$0^0%156$d$XKp{~6Q}#byss3erfB>B zsCw^sD*Hcv{NTtjvLhK8$BK}>_d3dm3YC$pB$*jW6w2n1y^4$oQ9@Q`_R8KPoXVDw z^?RK@pU?OE{rz>{kNa`E&UL-7_w{UVC+D4U?Xg(U;TEir+a%B5EzCS|UpzDLA(ah@BZ3MW#hqJE}zjQ~f* zNE}QM&L4eT;#s>smhykja%CL5KbOCKS*+f0RSYit+Vmx$4^@n>y$fFAZ2Ck2StGzGS zC>aNiBS%q;`xjKt=yI#EKSceeqkqGkz8HS(V=g&jaE`x9>jmi9{RaThj`t0-S^4~4 zk{B+Ri!fwjeYTWfrBDC#0`Y6IqqCUA>vb1P8U%FSU@P#*ibJ}92WVZ=n_m?&IFzq_ z%?+(dxJA_OXYqUbHB;oh-2bi!y%NOSu%}U18s#DBQRwk!^pbt2F~wTIAd^||lP#w3 zq?lAVx6bW#prq-wwA`MZtRTaNMHnx#5crJ78oZ=gA4a)PiVgWhm4~1Gg^J;Q+Vj8J z@gY9R_IvCg&`t{{tSO<1Rjvg?L8-4>Z^xHw*K(gqJV}pw`AauV_~;U)0sAU$r1M|L&#TvRya&4EtfKNUV|eo1eeWp+EoMEj`k zLtY{iKg+`x|BVX^Byg$yucNm79Qcf=*EZ=Lu}ZybA35O{-J7RSg=pLoOYyuqCW8dW zmw)Atmtf$r5hgdswS@J5op?t0yCq`VlmI zFUOODA!St-b_d46OMz1f_pjYVdPo(;iC_3?z3p(K)4z{(`u0gwvi3i@g|ZIn8Vlwj zOm>FB1A1oVXK#|IP5TmfBK5tA>n(f!Z)t5R-=CO#kHD^@Vu#Jz`wjcUus473DWx6m zZeXXd-^=0xL?=%Na4P#h4v`Fxe#j?C@UdFn_Jidudg0mhCI;a`MZEw(k^9Po_)SeHFY+}oA& z-xs;Z46E;A{2b6R3b6Vo5+w!MP!b5?qC`!FjuLVEk;V!aUb`NsU@60BLcOn^c9=g) zcqUTW4MXpFP>XWT{L*|5D@3_D(x!i++Kzb_cWI?;KrWzt*t`w^I#E$w%_qb?94 zqa_G?nlBWe&_@3$B)KetxHvNRHYPjAMak>WJ~J^Fg%f_rxjV;u^J62?@o zSinu@nZVu$2+>GbT~!buBd0GvV>G%Dw?@B3TVqh$;eI{qKxfPZOJ%29e!F2J-$!4& z5Ferzr~-JftE95xhpEr+>Bk1P)^cV8ZzJOn)YQJSUiz0DXU5T(I_Jx`DdR1xuY8E#|Q=AppC(I-V>>BM~5HtK6Tc(20k-9yL$3Wr+c9>8Mc%1EX~Mm zTH>jlcyVD)4>)&`*{A=-BV{(4`uY9Xm~DAZ^A;nJ?V9iU^!Ak?VZ`0Rq{ppn+qo}p ztS6!U_-J<@w-t5LOCj5-0)9NVKYyWSjjeC<|9>I44Xu)nCl|mQsJ5}Z)==HDGIQ+U zn@RH``7>fi)@@bc=0Azu!OE3fC7RAp^)wPh!L+pOHpnYa!m8{+G}yr{k+% zyZR1qS-6YpFK=rk$6{F7^Rve(tv?W(q0KJfTrr+Dmm<>~Amw=rFuU#kaj}7sf29Dv z82vxSNt~K9te8e_Gv^~y{Zl+`-3$(ZAg0VT6H~wQ(+<8wWFFa%x zQ2b+9*nE=;BV{WVorcfDh}HZ<*Ru0jn8^dqzY1VDqtP#1z1~pV63Ke`ep}!spxnCv zi!`a!gV2&|{Hiq3dqEmZSi6@ zxe53ovLNN=*lnpPFEt>teELOK*Qd#h>kzK{F1J>l1t=P`ai_5JIzAxW^9SHNdEgjy z)BDFOy4CA%w#Yu^2PI3X_j~3AWS>CK#6Zq^>m1=_>I#kiN7%g0f37)< zmB7L-&0}Ki8#qtq0W?Fq=JDF@o1=*nNBC`bd^LTk}5Xuw8W6UC*c{#^na{CTO*uq*vN%vun=`d87gg0Zn zUux}&reu1nzC-xHs$(C4-i+16U==u!1%@6U%dkgwQGJ22o=TT=%xK^_zl8UGM|8u#Ozq2 za_t~x*aecLGfpXj#K>CISmbHF*%3n}>p=9J@0e+kcmBh-xQ8gT27{M$QbsyMCFRL9iDXOa&mJrO_eurO@wiLkpA(nsKu>AZXAB2BvBR2VEI8M zi%E6ITal(dOI~8p<)&G`{(fqOvfC%@wrL^u;5T8{!vQ=J){kbysQ>v%&(y2>af8}f zk`O`u%i8&9{?a(kAnPu}5Ohc&8AjXmf=*w<`5>~Lnrdn zX_YN5t2Ikic1bcz-cRce<|mT&Yj>a2R=O?jPo1vEA$Z2E6-)+QW86VgVk#+F7ljIN zW{(y@KLL(fa5Mm)c7vsd^Nm{R!!8ShUdAD~BE4*j<;{Wvbb07~3cs`z=swbE%hvn^ zYdoP$S~K0$?#scwt@AV5ucuXQy{KRr9zH90cdD+bQ~n&=z7=&eLFa zdv0<+%ULNb*YJ4np3o9v>3HgaZy&Iz_;_guRqK^dx5+XE5VaReRJ+9rW9TxEmjRYp zzC4htFL{#a;gBq3T8hMDRl6Z$t&Z+T0m*U7;+f)}&v)>2t_syfP=f?$Vd3g(e#3wAIm;St#dLH^X*LNul!x60tNNyoes_cR!P+FfgyQ>K*B|YRo)nFC992Dv z2c6WOKihphe8!lB)_CEy4>(|qmAFb8{7CJjpGu=-KYSy|41dL0(%Dn5?a2{6gNj3n z5F*Gs`aHTz*066cC)Dl(G8^M;Z|x^dZQ1+-qTRFA8FMVm-$gTrL%iswkQQFmRD|ay1m6%6@fJlkxZrZCU7{}gq zqa<(s(C+(MHOQdEQsoesk2w#RAD6}^8UZBH#V9c{eJ@>ssq^Q5wrum49E)2iZtpKf z^}myr_?S9*Q|LBQLGKRMRF$2BdM1p8xi0?Ek#pmUBf^64n*}({TRDnx(GW6eD1%ut z>ZcC}wJ2dN5AI_rFm4h>0s@i|Tg?FM4F}(6E2zVQ_e$%Tw;K3?DO6wWy%o-Q0Lf}A zV7c$z%=>VWnfxZTA(K|C25MQ)hwBM$EGt^JD==s_f?x458#ZZoLk56{vbwgaFf=6XWv* z^#Pp(p-J`hZKH)3NS8U8WbG0CTU!NcYa(t?&?8^KfjF%@x_ydz?22uj~eByCPUmm=xD>f}_$%_X5 z{{%dR?cD%bLkpkI{YmeIZ!~UtaM<88xL*Ht$j{FUuJIjFobK%zQ-OR zMKr=l{KX_Za?gx8s8T$Lnws!6M{ld_d*OivM^!z;Zpm1^zn68gV0Q%j_Ksv}u1Z+L1q*k5Y<;RGWUul|GX( zy{6yvj^aov1ksF*?_$OZ7PY>?^#@lWVpKS6?xU49}pK;iHsNWS$;JdL`f6^>7CMx_DuBpGy%$~X!mi>ZGH-Z}(=nspm z%07>JnQh0S7GcSyjI9OEX%ZMud&_bgbc3RT1ShV_CQvyT{eAWa@( z<|2Zz)i6Y)vrAHk>-~kUKZrxt;Ee_eWSwAjwtmI$erZ+qDfqLf-7}GIo^ax>B5xTr z(-D3q@@f;>ZX4q~+-Ind%0J7GWz+Xm4u1fg>e%K0INOVjg?^ zEplr`m{zjv_9913b|~ENJ+2vMY&Ti`Z;t~Yf7}7)!}dsWywvX}5pM5Eb|%?A-g&9i3s!U$=Snm~E(xMNp<)|=LoY?_pO zXLXVp#1stPEtctyKrC^_A7Fr!m%P{vI;I^9cKOC14i47pK6q_dO+e_#(f7_ovcXoB zDYb5U22q0y_{CC6px3$+=M7me2cFG|*CW2#7q&9{lH5i6{ev`ZpKI}Iu}BqmIe$BZ zJo$|9d9G`1^XWgE5ex{g{?@aXJvgH6QG3s_2g14&&h50NiQl7j7_^$yu>^zRJo6e^ zyxA|sIdK%2lk1x+)n)=q%y{wbd&kkziUsUtY!qI+IA?kll5EP_<(S`64&T33f7~Q~ z1g6A$0HwU5G}Zn}Afxy4F7O2K?wig)ft`VH(F|tv(Og=TTeS2e)4LExnnKSATv?mY zd39kHn7t?r$yk{?&Tv33vBozo;ePRSDksj|f&;h2h171}pVE?SePOIWUSLjAZ;yEV z{#$#8;?cHIoS>=b^|C5=+%t$!vt3ft>L5IQwb)$Y5NxRyM`~o>+e%(?(2?BS z18Swjqdb6GEUPB3%Oh_BxQ{?|>&&dg&U7d^JGqh?IOVrmi8p6S(BbTt}4Q z9ejap-1r#S2Q-22lL%gZFCveE*9w6@kSw z%_z3h*vDj;O(2;^Fq(UPJ*ZEnsI(aVM8v;6`US#<1%b_`rrj?bcXLFDHwqIoLx|zn_Yw1j}nl z;gr-ynp!VPCQ&5t?8o_q-Nl9IL8rStxiJ^jOVk}HfB*L1X$LKiQuBVlj=rm19^rzk zKEJMhps7EFIDhj1Ylhe+T$lEzahHFq@lTTk@6OVa(!QMucaq$NQ9KW>aLf1j1~_p6 z?P1v@7J5!RZn0hsfuy!Za)~dqAOF=?Y4@fMcr*08@+~XzjLM&EEPTH%{{F(+vM#kt z>5uCTRIql~ub}-pRqb^x&)}<fSn>+(ad?T>B2o;S2(!@Yi5+VLw{>mbBP$y!;|?IPS?G{4QI>>t`e~vgm+!_*ZIGA9bjD?n+X6 zu_~-Vu_(HbHgybXXp&1lRSyt-Zk5~{;1N3ph>EbJ0U`uv|w+wa_5AKV6QWXVzMvjcaI}Y#e_#Vx+>_`77N0nLUHS4 z|98e}d2Y%Jw~>XE6Fc;hd|3AMY*i$O$}oYnWlyVplVyYR?j3~Q=k6z+Mf!2JdVl+} zw64CtDY11p*TQY|e6c43hN`muI5i4#yJd;2CwqcsP*aVrFG$eyrly`S@Eanpzq^K+ zq6VFi;>yUUTla?wFQufyJVT<##>sF~Mr-W|SZ_(yUz7UHDt!Jp%#SXW)qn}TEsKr_ zwmagQrs{@F=eJy-rnUHztjlCv#de<_7OvfESngW)v1-sY{#>0JS&%q=&x%AF=1YVYq& zHk>}oHs9iMvuYQ-)eDC~?1$c+NxlD1csMbkH^J}F<|d}pEl$McLIYkunvcZM3zVBt z?!+SG^|B{Q*u0Al8O_>PLa1KuP|(D;1c-vkY9yW|8#pZsOhT*i!azEHJ(3*QY5wQl~y zlllOnuFI@#PoZbf6?Sgv;bhe(nHOx2eHznP`s3U|DlyobbRh@HbxJxTA*Ax4I9T{M zXyzo9ftGDm_Zsxa%}=24wK^6wqHXU=S4eqX6VRKu|v1yFW-#;Lo5C z6&X!0Grgwv{zNXMa$B42slch5rW}p)w}%zlx!s=RI4zB29NY|G)US+WwP6oFO8O$s z(h(!&D4e&IRM{x_Q{&D{QH9LNXp@?mznum)T3V5A3BS(P9bhK-3RdK;mqY~ozdY_0 zOY8Y6*sJGrhn2SdnYB{I;*96^4E=V}Ic2mdIWK=5a)ivk*@_i+_vl5UjOrJu@$(KQ z=`&GgttR?**rR=M1iCG<+NtiBbjIY_-mu@RosEB7atAL79zGs6VM&-bvR86(4xF;f zU0-D*Cz2v!Ch{+`nKHWFnp5;k8+*bi(!D`KQvWyv7d-=l3ssZ z!72~SxVG2(x8(1(P|TC&Fs25LYRhAempOQ@{;=f<;p7V8o2W+fFNsCnQ|$b+=oXUw zUFOBqSO^_&@`Rn88y20MLeMR<`sYp@wFf&5H!j=REtWOdxevAPoI|M&t&V@{QX%F9KJOw_jt!~tCOeA!!V=bYW*6kPu|v#4m(N9%Bx>> z$%lAncS*8JU+zy-PW+OM$=ljPG#Tt3&MWq4 zf1m7OkivL=+W~zITlsQ&tPg{=+e7uuU5c0`6ZB5Ehwo0zj1e@Y$rX+Ef4iwxV^FwP zi<-8XBJL?w&d+0e^gT_adpxwI)wY@Pn|yt`d%D?H=k?6}G`0T%^)-SdqbW7$kDgo? zX^VD$a?gFm7vAYy;nf$+t1Cu7T5i)zozrfw-2a7=Voz*n(lz&sl1_Jb3ao~7x8?b2 zV5Jx~z0IC73s1h{j(|C1EM*p0-^)$Ux=1e@X2?eS!k5d$1<9L{_z!s9;YPo%VVST@l%u zytF|aCmiCtVXgAn5}D*ZQ~0c-*R@u@bS8zaMbD~>Q8Scob#) zl5Vw!q(Q>wpolMWG{K~I{tC(BnN8vZ;UQn|w;~y7-dnzH^BswFK1@FewYKDAw(Z}% zubiU}D3rWZY?Z4;aizIM93xAvTe{AD%UBi;PtR|X3eDYOFHY?8Q)GI@@RCpsxpqpbX3GR(y}5Q|2i;#esC+O^irdNJ=(3yO2Ybb2ZxC zDY(C}dxNQTMO#_{H-TK_K}ww~wd-+`byz>}f4xBO=jrUm=^Q(fuhAgO8=egq61uP6 zerqEi8W*C(WCPG?-n&;+GL2Kpxx(|8c*Y8o$~tJ@IjI z5mA>#sDTCxG9EUmklCS$h;6mYB2MV_fR014kbm{$P5j!+y^i<2G)qp=c)aZKx;1t7 zg)hdXVH{Jw@2XSUC8CioWm%8dqW#9Gx~O@I>l;fLI#xA`%;Mwn=nOeSo7hQDi9v02 zsWZzKNs_+yoUW+8Xcwcr&m9x-kUNK)MmQ&}%9M%E%2 z_jdMnXLIhc?>$Q2fUuzm+ID$P-0RG2w?O4kRPTqce~Ei;=|u+Jn~4M4HqV3}exDcM z1D5@zO)@LM3Gn_#_1JV{t>yh6Iec4%Ne@{mv8&Xkny35j>gmfUbPLk9S9?17Vynei zCS+dhuf;iI-CH&NhMl<*rv<{}-*~1^p9jvQ#MLY4ZvhR{Wx=GFs#q>IFG?x9{U^%U zZrz)~s{=$mU13n{Bo7??`DOQ}blHrGK2o1TJ7?dlAtFi{gYjIFck(lM_Gyw1Gi-!G zA+`LEgqMhBENrv_(D;)5B`3bhXnHOj?5mQUkV+iPawm_y<~Ieud!VrKw&g&F%Isx} z48CUq`3N@HZDOe<$~2v<;Bb4kNJONtMce9`Mpvl5X@sWGT<WnqgSFN9QaNnwRLft2R-<5HMv-JrZ z`G$dZKkH`dkZyhZMyJApgkF@JPdO7|+Z!Fd3OTj)eZ!V6qS}#4i`7(_JuHS*dmTqW zb)CdqzZmt$a?iTt!$2t)L#syr-GHjaD+b7ZG%j3-bKmNftClJUPCfyrsz)iEp(5DZ zw#+{C%aYPtT3ePYxw(hW2Gif}IoFBkAG_2F{Sz;Lv=Cz?q`Z=RnoHcB7B{~H_TAq05exF4Vq+cvczU{JNf{uE%S4q%y`tGqJcP54JXd8X26A>2kP);OFiVSEZPFM{j4Ua7>pSKh z?hGXfhS$YfPqN^X8(myR(z&KQ4%#`(C;hCnN}&Jerdx5d#6|6y%v|Ra&)+skx)3Sy zCx&NPo1@(|U0sM0QgXMG#Vpbqd>?9Fj;R)tPeZ2;i|YEHS>+G7IFh*3E#WH3X7VvA zI|XOVl3}Jek`q~ZG_i16vtO-mlK<4VYl1!l8vRF`c5E3wrPIh*XU&#e@7j-{gHk3_ zWupGVPwoZ8F%WLNfL4<1@HMo8O}%>mfVUXVox}MjDjUXZ;tHPxueFq{7}02MiC|yG zXoRCf1AFh|ZPODsaLs!9O;;=a+-ZJ3Vef`!GH-3f5yJ3)tqQ zrp4GjE`<@}_{WFt#t!;x*0R%eD12vxrzhjnO)&O37vp{+WOLiTd+z>~3hkeyvlrWl zEHC+AMVRlzJM?S9v<3-nP6Yx+1w)>&Y%Ma=2mz#?Dmxn6U2yhUjpL}Ok%auUV#n&4 zuAx^z)zW{rmcQM;L2SC$eW9?s!OGvzX_Zrghb=6>;>aGf zbcUkzJM(xS&1>tXHl)+s;O1!*GYd#}XDGdVF#_(Dry~oa5U6||p-@QZ@Y(c)ZSDL5 z2XR(mI|JfqWsKlz`pp4S0uD5;NvVdD)uXs}9Z#HQXg{~&zvG3RUEF!c?M&(OfirxXU<>b67< zH7XSD*KCh8;3GBkUdcIF83{vz>fa-B2rJm?H=9JwhR6a+xO#`j)-NDu1P<(MUWx^( z_gB*OI9IyNx4ecyP0ovpTP&s@;s^ci557Ay=iaCEpy?$|&PB=)TakOv`^cy5WRS}L zv>j5r_|@)8N4oZMn<_@a;d?#4u6+^>Mrc}uPa^nX9X+Vj8KArTZLXj%mf9XMLx&)d zM`}|dPQ0|w3+Joq|2_Sv*;5$DZ3fM4>O4D-mzCfDxV?H6nn;RhlYLrS-gdANT!~@G z!Ss((mD_eD=iLB3(F8SIUlvKckXb0S9=zFdx1(>yY{w;Rfr^@#OvG=-RAGzSOy1D! z$HzS?WGz&LP(bwDY?%O_c%rb%gn)BS+WhTFq3%WE=XL}ml$mLaaT|G*f;peZv#Kx` zIcAKJd!9d{A2IZy?=9&&9VBh1=uQa>Tz#X?9qg5hb{y@0dzmqIAW`a}c?oq7_#9m6 zU|~R8rE{shF0<*d^_eJ579k&$es4EY;0a>LIW?359p<2`*=B@qTQ15ntiJY4Ke8(@ zE_S*(4we;@;mu?}C(zpOkEq;)Fl@LDn?zZ)&9sRQOLW?uzxe5g_62-o9@vV164MS7b<>}G@U8pGGy(Fa!qt76`G>y8j$nSJ) zyh3MjwunN&9<7wQemJX(Gu3V3xz;~`5(K#pzFRw9N7tQ(L{9tv8u%M0sdg;5fZ@jPD#JCq1T{&DHB&=6PIDUO3*kZf!AoP99$f;G?GumMr4)#7^GKix8 z7-nBJUv2S8`|lBgl3{~>4|L%zDZ8Ub_sX=<6pEKnYP zeiq~iIg&ePd6Gai2g|Vr5~0FS6T8g^*-;tO>if)&mc8nSaj_aFCJ|%u6to9pcaNbr zG!N=ZEgFnw)cX`XbY%EYE}=UI0p|LM7K{as0VoL$iDbJ~ZT>*YT_91r@~d+hl8Bp?zkYaUKI z)(F2fztKF9gj_)cVz=Q}_!K`E94x7(1$2{qymtt*u4MF6(=2A6N z^jK?JpX2n(U-Ve-#gbTY27wzC55_)z1!<43x`f?oYw{r+ZTt8^rCoY!(h20SHSGbS zpehNCh-t4#)~G*Vf9UWHKQZzl%%3c^32V!D8hrPP1BcISv3^dXR}$-6m6VIUVH}_v zH3qnrv-03i7VXF^B@U9w_e-+V4zF05m0Dvcz##M5{9C*9l+!Q*7H4ym!cf`vfL@Xd zd}_>BDotl*^a#6kk-_gsZV5ZlMo(pFD>_`{vH1VP?M--DPDKRU`{+CyN- zIl2@?AEt!tZjZmnoUxYQelIsIUgEu5we#U}Uls*Hdz_4$trPoYtH65b_w}qAsX$Gl z8Ai)HQ2LhfdXd6=jdaHB zU;%U*6lw~Wb?1y>ytY6}h>>lRBxPy)%!U55%~=QXoo#hlQfUjRvzzG9>PT~UtfCem z*~sl4rabY* zP3nQ-m!r?mkT6J})gO(tD<9ynB-j=|+-*(1u!64qjyD0ll#Bf?s-E)KZ6KiX&uW9+EOggeLA73L$~E}2 z*wd7G3&7v;DERO1bq?A|S91NH|8lpLQVnkg`hb%m(R?N_aZ4WSXs#di_~uRt8=|o< zEg8`*e}#yBvFTL>Nf9F#P2K@WkvVQ|G0}YWa9%2P6ZBa!&GNrW6aabq=5)3mJ>gZA z`VRCFwDy$>Eb9Cksm?3<4#8dOWk@|t_Z$yYxA|195Taf6d01=gZDc)rSV`Q+>U#d& zT$*RE*_B-}f|E%8xL;N-dcrAzWf<`+>4}H$(f&k^ggS4UO=izO;10XlbYPy)P&~f> z_3%uH@EVuaNP0JpvR*e+z^pa#{_kkx<1yVLT#VV0Y{Kw{51B%N=^9i7+TvQISswNTDA2mHQJGFezoFDskB;2+Ts`qfuKi(ns2071A1+% zZpUSDw$dyPJ-&LHRqE8OmD8kl_Ouqcs*F+twJu$44z}A@QX$x*7f`%HEeQ z=5qJO`Wg`~xu-F}zCIc%S!<>nb;Zi&W8Hn6Fpn@prrMn`fYOY16qEm=9mCnuxWce_ zQ!G6B_3|t`u6snVyrtJC*n8lyzU!4J1YQzO#Qtl*vA zQ#!PCe|oU;SvQVo!=3RUi}K@a?EzUW@ALm*0VWRYF~(uptqTut$C3rm)2v^>tPQ;% z*A=)?xNMxQ9fN@}WxL1T`fMsl9Y|(XquBrkGnqv`PxMJUa`|i6E5?*`v2wb*LNCS( zmWY`>m4eb+mi1`+(f#;!-Z~#%TtTcpGhjnn_rwZFMov^y@RMOaPDOkJBtJ zk$aJnz75!zEYNprOaBW;kx#BEs>dwkIQ{V|LCsO8kzG5Y?Jta!QwjzC*wIM(bhG-x zn9ogB$#rbWYkHvcMMW8cO-gWLj*aW=YNv{))>#8#O$q1sY4RS&ktw9#1MY0WW?zk| z^ULQzIwGsJ@gmoozX95P`Nq3zxTjD4ZtoX@g#F#krJg!pP}$*KU3NI55CnLQ-1tVR z_TI)nAI=b7rn)8gH*0_h6U9Tft+;*K!SH(oLajLIvxYH;l<5T9#zy&)d(D%KOV@65 zBCEp@1C(cLd$wa{YDy#TXTb94$&gp|(REqf$8q2U4K<5}$TL5@ks)O(s1mbFdDUb} zFT?_Uxf#c-7DCtkttF`~yliD~UOzdD$>}t62cKtP#^mHW(WudHx*hSVk7==o#q~zG z-H&|`tnCV%DMO6+zE;!SQ!1zwBT3a*JbSgoWnMFOSO1QOSNX@R^g?R=VtEhiJ(sSnlP}`@GRmAN)ZAa zmuN-2&`Ob3qPrc8NB2LlPtwv52*=>z%GdS)`TBxh(8T!$Sb<3I zHVzuV{vr{}y}?JwiDNT68&&Y9)U2)I4#gj96~18c%MD=&x0n09woY!EKPXcI#XhFY z4xmLNMII)d(ZJEE8nmz8GjP{Gq6`Et0DF5*av$S*jGw z)QpnEoG0a1Tf`vKj>qwP4N-QQhP?3-Rmz>U&Xh%YK~=`WV(EfJv5%?NvE_jU#LVNl zeX%t#6rLZoiMs>qx<-#cTC;ezHR0o^;mPgJ@tm^C^vXbv!>P(wDv4lhB=g(z%4r*4Um2N-2K6nGh zq`pGNMYn&!Ba4*7(=tQ(;Iax}hpD2QpMG+|#8n3B-|Lfqch{zuLHafFdb@)=L*r7} z%j^SRg1gy@9Sf!QjBd}fxVOj3){V35brb8iM6^PV7L(|@pV{$~7BrNNdD9#qtHL99 zJ#;J)HdWNx!~xKcFSenP_Q}O{y+ZR4!s1GDY!_~?b)R@1C|?k^Xbma$aB$il7(c|ua6 z&EjS|A|-1gm(`@ndpP7qlDN{EO3ki&D^bIhLY)rTH zZLZxYx?}FuW>jf1>_r$r{(H#o*KZW@g=P`Ha)qqiR3!>C&jn6|;9g5h$2*dl5biiy zMJ+h>mdHVYQ=`A;sBg-65`R~Vx+a+Z@h{wuX0m6V7p7{<1 zypqRncN+vOeHAx!@=?#~Wo}66%ii6alC1YQWI%BJZm2&9N~QjWkBUrSEIGVHxK85# z^O2vcm!^Vu9QlKXs}2YWP6-T4RL7K>)X2rY9OA+=p4XKK*AMtddg7joz3+!Q>Ca>L4?&D9-nYx<35j*74EY-GZnom^TU;RH zRity)r0m5K1MP~gZX!$13X(xDRdxbu%fQRA$PyzSP0|3cj<8zgf)X?-VLyT7*(AuARs(6WqIUT`SK0JY=#b6;V{ub zonuA?`I9h_!e1}dq~^R2HA6l<23C?Q#L51yJ|cQxGg*>yW!pVXg1BA}L~iH6Ohp{!{t3iVb z*9Qe<#@zzl7CS~vk96=k6_ghX!BBQZYoznFBho108}j+QShn#&!TY;|ip(*UUi(2xc`goA&QC%09(g-0ooco$&;8wNtnX zeF+dxH7z55z4x2C%qdc2{KDG&gdxGzF{YfR{tDv6=Q@u1&)m&N68#_s&;%pS?q zFY(9j)c~10JkT>rd>j87z6ex69%r<9slrF-SFx_u?3xGPYyAXRWD)=|_$ZN~6^dNK zOI)M~?C<<}T737Rd&&AOc^z)Vd7{Lkzl0kV)usH&@Jw2CD<7AB0wAml5OR?{QWl}w zRl*6nI^+Qc)Gy=cF2+@QL{e*i)|!ak2EFrE1b%KpvMtEHR21PCim)qg;0gsZ1noI9ZX?w52CDH>i6 z`@8?3CSg`aLb)Af-G+VJ0}rs)lPvM;JqZ=t?NzNp=%&ZzO=J9S3*iKj{i-v-^6k{WzsdyEEq-MyR4qTAIo+)LEoZ3b zXGQ6i7MKsrNFft-WZH`sg>qj`-w=-62E&y*m(HxR#eO;T6zekHS-H(SgDk4aQzFGVeU@OiTq`J4Wn87dpUSlU&L$C_iK zfn}wGi_g-x;>``(=ViZt8vpfSaDt0%`1((n9I*cvLk)Kbm*j*k!HMITx_^_ZtQ$e77>x-M#GgbC7;BmYpAbhvTM${`| z(+*o8Ec@45<1}i5!ZOA6&r!|Gesfp>Yh=->_41l~;~Ew4V}JqoS2jg-Aa0XcUZ!6h zpjTzrh3^hT2LQcoDh^%17e=a=;NR=6zrT5XzyIEpt*i?EF5#AyzoEXD$a?!CX1o#l z!M?Ac;K#@F^8`2CEQl@R`$-0<(u-cQz|-7|-iCIoyDsT52(CX!(e_zz(u+uSLb{p; z=`DNzOjs502*592{VkL@VF|K6W6JRI7=9`2P}>B(WQfOE=Uqy)kMi5J4IzCE~FWz9lB`$y)H)Agfp zs$80Xe{o4GQ^J4xcO=6lV@&+`EHswm`FTKR;Pyc>O;ML`xqqOmL03_u8F&QXi6U zjvUmANT*WO30^{J3-9GwqU&5ijF88~Y_CsUJ=Yb6+Abw~bA@OAWge_OtqV1RG&5bv>i1&VOGe9>Gr3T!l>G!e zY(3sE2|YdvQue|8%>WEew-Nv}o|^JMPzX`ZH+<_1LgbMMO)tZ*dq(fh`RmX32$}*K zL79-VzIXQtVpUgp+@=)26O>U+GWbZVBz3QUVQ#h&7afZV2I;{%toRWd&0G+}g92RsZeh-_*`8eJp-GSi_d9X4U-7l8Zh$ zY+j?9jy{J$sk7lnZg&fr43&X6@j3WED-=jW5L_dsZ+1PU5%n&Z77)?O<^^X~ilj@_ zc+k|ajY&U_n2TLUPu>@>+P-%x^Ah65BEcN^rD3^@9_fpW$c}0=y2aT%iZ^cvg349xeV({4=PR z5te}&^zlV-xxh04JBYKUM)dXFC6R?+1C`@o=ov-Zo4jZZOaH{vn7*W8=43l<$k62f zte7@EQU|d&#JQCATSzj*>hte#F?4kJ*4n~-Z%g}=ehuN9Pe&@8`!D&F{i)HA` zt%!p>CfEK5K=(wz_YtJrsi3E%F;r-J^`re&U=pJ~Py2n@zk=uGZv6e_IO=s<57gaL zpC0dn(}(2G!LX+!Ioegl={yMt6T24;WkGFGwf*MpWCR@1d8m@;+XLzn=8wo>-aT^$ z5hVC#ijUwyLYoUdMor=Exa*-`_HD+m1qvqwZ5zu`%fX6EO{_4xpe~6 zH6l>67Z@tGc&ND47E6MjdU~9+;9Cfs3XqJn^pmn`Lg5knZFkp|v?5vbYZj&PZjvmM z4!kMQnfmhM;=QH(X%c_AL8bj}LVi5hf|J9byJ!a(_zE%cX60lAsic-s&eVi{nvkUh z4RT?Wyw=%aWK4Ygv^!O%&91-W7=+nV=Fvlx7=SfPD1xgfejx7!6ppJOtTf!ZfPH;W zehvB!S}=og2H8gL*lpltSglS}E>;6SjS-HIuRwRUReTDz0({1iYiBq3IdQdS!}TS* zqBoA0WDtrw?==i>!|CLuk$J&?7tu*~HENhU-VDDh1NPM5&dy-<^nH&0{yDv2{=tfv z47hZVcg(=Nuodhx?7w*cMdLJP`omokAgDzE{`b!JysH(^M$td(4UCNcuf6w{&)iRJ806Wt=0FJ+hB2EBkw$^!|Q7 zkKgaV-@m_a|H(PG`+nW8ab3^r`Fvi+<7QinF&^OP*LU)R?jX z>s5uG8CcBu>g|-EGzE6>)8M_`8y$HEVUs%QG1W#!>Uv1+>s>oA2}FF5nRh&T4@H~n zpuPR^4!UOpZFJ!yNWESEEL!WPo;rB>Wji%G6L5_yGdc@?{D?`U%cO%6*|0-mu6