geosition 4.9.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. geosition-4.9.1/LICENSE +73 -0
  2. geosition-4.9.1/PKG-INFO +241 -0
  3. geosition-4.9.1/README.md +94 -0
  4. geosition-4.9.1/pyproject.toml +198 -0
  5. geosition-4.9.1/setup.cfg +4 -0
  6. geosition-4.9.1/src/geo_optimizer/__init__.py +78 -0
  7. geosition-4.9.1/src/geo_optimizer/cli/__init__.py +1 -0
  8. geosition-4.9.1/src/geo_optimizer/cli/agent_cmd.py +143 -0
  9. geosition-4.9.1/src/geo_optimizer/cli/apply_cmd.py +75 -0
  10. geosition-4.9.1/src/geo_optimizer/cli/audit_cmd.py +409 -0
  11. geosition-4.9.1/src/geo_optimizer/cli/autopilot_cmd.py +99 -0
  12. geosition-4.9.1/src/geo_optimizer/cli/benchmark_cmd.py +159 -0
  13. geosition-4.9.1/src/geo_optimizer/cli/benchmark_formatter.py +249 -0
  14. geosition-4.9.1/src/geo_optimizer/cli/ci_formatter.py +331 -0
  15. geosition-4.9.1/src/geo_optimizer/cli/coherence_cmd.py +63 -0
  16. geosition-4.9.1/src/geo_optimizer/cli/collect_cmd.py +141 -0
  17. geosition-4.9.1/src/geo_optimizer/cli/content_cmd.py +112 -0
  18. geosition-4.9.1/src/geo_optimizer/cli/diff_cmd.py +75 -0
  19. geosition-4.9.1/src/geo_optimizer/cli/fix_cmd.py +167 -0
  20. geosition-4.9.1/src/geo_optimizer/cli/formatters.py +1042 -0
  21. geosition-4.9.1/src/geo_optimizer/cli/fullaudit_cmd.py +2111 -0
  22. geosition-4.9.1/src/geo_optimizer/cli/geosition_cmd.py +1058 -0
  23. geosition-4.9.1/src/geo_optimizer/cli/github_cmd.py +100 -0
  24. geosition-4.9.1/src/geo_optimizer/cli/github_formatter.py +101 -0
  25. geosition-4.9.1/src/geo_optimizer/cli/history_cmd.py +54 -0
  26. geosition-4.9.1/src/geo_optimizer/cli/html_formatter.py +474 -0
  27. geosition-4.9.1/src/geo_optimizer/cli/links_cmd.py +77 -0
  28. geosition-4.9.1/src/geo_optimizer/cli/llms_cmd.py +96 -0
  29. geosition-4.9.1/src/geo_optimizer/cli/logs_cmd.py +62 -0
  30. geosition-4.9.1/src/geo_optimizer/cli/main.py +204 -0
  31. geosition-4.9.1/src/geo_optimizer/cli/marketing_cmd.py +634 -0
  32. geosition-4.9.1/src/geo_optimizer/cli/monitor_cmd.py +72 -0
  33. geosition-4.9.1/src/geo_optimizer/cli/orchestrate_cmd.py +72 -0
  34. geosition-4.9.1/src/geo_optimizer/cli/pdf_formatter.py +26 -0
  35. geosition-4.9.1/src/geo_optimizer/cli/pipeline_cmd.py +134 -0
  36. geosition-4.9.1/src/geo_optimizer/cli/playbook_cmd.py +56 -0
  37. geosition-4.9.1/src/geo_optimizer/cli/rich_formatter.py +1220 -0
  38. geosition-4.9.1/src/geo_optimizer/cli/rivalry_cmd.py +532 -0
  39. geosition-4.9.1/src/geo_optimizer/cli/schema_cmd.py +212 -0
  40. geosition-4.9.1/src/geo_optimizer/cli/scoring_helpers.py +64 -0
  41. geosition-4.9.1/src/geo_optimizer/cli/seo_cmd.py +264 -0
  42. geosition-4.9.1/src/geo_optimizer/cli/snapshots_cmd.py +127 -0
  43. geosition-4.9.1/src/geo_optimizer/cli/track_cmd.py +85 -0
  44. geosition-4.9.1/src/geo_optimizer/core/__init__.py +1 -0
  45. geosition-4.9.1/src/geo_optimizer/core/action_intelligence.py +130 -0
  46. geosition-4.9.1/src/geo_optimizer/core/agent_endpoints.py +457 -0
  47. geosition-4.9.1/src/geo_optimizer/core/audit.py +1166 -0
  48. geosition-4.9.1/src/geo_optimizer/core/audit_aeo.py +255 -0
  49. geosition-4.9.1/src/geo_optimizer/core/audit_ai_discovery.py +190 -0
  50. geosition-4.9.1/src/geo_optimizer/core/audit_attribution.py +142 -0
  51. geosition-4.9.1/src/geo_optimizer/core/audit_brand.py +223 -0
  52. geosition-4.9.1/src/geo_optimizer/core/audit_cdn.py +161 -0
  53. geosition-4.9.1/src/geo_optimizer/core/audit_citation_map.py +102 -0
  54. geosition-4.9.1/src/geo_optimizer/core/audit_commerce.py +60 -0
  55. geosition-4.9.1/src/geo_optimizer/core/audit_content.py +156 -0
  56. geosition-4.9.1/src/geo_optimizer/core/audit_context_window.py +169 -0
  57. geosition-4.9.1/src/geo_optimizer/core/audit_conversion.py +493 -0
  58. geosition-4.9.1/src/geo_optimizer/core/audit_decay.py +147 -0
  59. geosition-4.9.1/src/geo_optimizer/core/audit_embedding.py +162 -0
  60. geosition-4.9.1/src/geo_optimizer/core/audit_freshness.py +195 -0
  61. geosition-4.9.1/src/geo_optimizer/core/audit_indexability.py +127 -0
  62. geosition-4.9.1/src/geo_optimizer/core/audit_indexnow.py +82 -0
  63. geosition-4.9.1/src/geo_optimizer/core/audit_instruction.py +236 -0
  64. geosition-4.9.1/src/geo_optimizer/core/audit_js.py +128 -0
  65. geosition-4.9.1/src/geo_optimizer/core/audit_links.py +325 -0
  66. geosition-4.9.1/src/geo_optimizer/core/audit_llms.py +229 -0
  67. geosition-4.9.1/src/geo_optimizer/core/audit_marketing/__init__.py +14 -0
  68. geosition-4.9.1/src/geo_optimizer/core/audit_marketing/analysis.py +1384 -0
  69. geosition-4.9.1/src/geo_optimizer/core/audit_marketing/orchestrator.py +110 -0
  70. geosition-4.9.1/src/geo_optimizer/core/audit_marketing/planning.py +438 -0
  71. geosition-4.9.1/src/geo_optimizer/core/audit_media.py +268 -0
  72. geosition-4.9.1/src/geo_optimizer/core/audit_meta.py +64 -0
  73. geosition-4.9.1/src/geo_optimizer/core/audit_negative.py +253 -0
  74. geosition-4.9.1/src/geo_optimizer/core/audit_perf.py +215 -0
  75. geosition-4.9.1/src/geo_optimizer/core/audit_persistence.py +116 -0
  76. geosition-4.9.1/src/geo_optimizer/core/audit_platform.py +208 -0
  77. geosition-4.9.1/src/geo_optimizer/core/audit_rag.py +148 -0
  78. geosition-4.9.1/src/geo_optimizer/core/audit_robots.py +122 -0
  79. geosition-4.9.1/src/geo_optimizer/core/audit_schema.py +150 -0
  80. geosition-4.9.1/src/geo_optimizer/core/audit_sentiment.py +154 -0
  81. geosition-4.9.1/src/geo_optimizer/core/audit_serp.py +676 -0
  82. geosition-4.9.1/src/geo_optimizer/core/audit_signals.py +59 -0
  83. geosition-4.9.1/src/geo_optimizer/core/audit_sxo.py +183 -0
  84. geosition-4.9.1/src/geo_optimizer/core/audit_tracking.py +346 -0
  85. geosition-4.9.1/src/geo_optimizer/core/audit_webmcp.py +150 -0
  86. geosition-4.9.1/src/geo_optimizer/core/batch_audit.py +203 -0
  87. geosition-4.9.1/src/geo_optimizer/core/benchmark/__init__.py +8 -0
  88. geosition-4.9.1/src/geo_optimizer/core/benchmark/citation_economics.py +305 -0
  89. geosition-4.9.1/src/geo_optimizer/core/benchmark/citation_share.py +92 -0
  90. geosition-4.9.1/src/geo_optimizer/core/benchmark/competitor_matrix.py +56 -0
  91. geosition-4.9.1/src/geo_optimizer/core/benchmark/competitors.py +64 -0
  92. geosition-4.9.1/src/geo_optimizer/core/benchmark/domains.py +14 -0
  93. geosition-4.9.1/src/geo_optimizer/core/benchmark/monitoring.py +73 -0
  94. geosition-4.9.1/src/geo_optimizer/core/benchmark/page_task.py +108 -0
  95. geosition-4.9.1/src/geo_optimizer/core/benchmark/runner.py +341 -0
  96. geosition-4.9.1/src/geo_optimizer/core/benchmark/schedule.py +71 -0
  97. geosition-4.9.1/src/geo_optimizer/core/benchmark/score.py +87 -0
  98. geosition-4.9.1/src/geo_optimizer/core/benchmark/store.py +665 -0
  99. geosition-4.9.1/src/geo_optimizer/core/benchmark/task_classifier.py +95 -0
  100. geosition-4.9.1/src/geo_optimizer/core/benchmark/unique_value.py +108 -0
  101. geosition-4.9.1/src/geo_optimizer/core/citability/__init__.py +418 -0
  102. geosition-4.9.1/src/geo_optimizer/core/citability/_helpers.py +236 -0
  103. geosition-4.9.1/src/geo_optimizer/core/citability/entity.py +443 -0
  104. geosition-4.9.1/src/geo_optimizer/core/citability/freshness.py +403 -0
  105. geosition-4.9.1/src/geo_optimizer/core/citability/platform.py +709 -0
  106. geosition-4.9.1/src/geo_optimizer/core/citability/signals.py +829 -0
  107. geosition-4.9.1/src/geo_optimizer/core/citability/sources.py +355 -0
  108. geosition-4.9.1/src/geo_optimizer/core/citability/structure.py +1139 -0
  109. geosition-4.9.1/src/geo_optimizer/core/citation_quality.py +172 -0
  110. geosition-4.9.1/src/geo_optimizer/core/coherence_analyzer.py +194 -0
  111. geosition-4.9.1/src/geo_optimizer/core/collection/__init__.py +20 -0
  112. geosition-4.9.1/src/geo_optimizer/core/collection/adapters/__init__.py +38 -0
  113. geosition-4.9.1/src/geo_optimizer/core/collection/adapters/brightdata_browser.py +129 -0
  114. geosition-4.9.1/src/geo_optimizer/core/collection/adapters/gemini_grounding.py +121 -0
  115. geosition-4.9.1/src/geo_optimizer/core/collection/adapters/manual.py +55 -0
  116. geosition-4.9.1/src/geo_optimizer/core/collection/adapters/perplexity.py +89 -0
  117. geosition-4.9.1/src/geo_optimizer/core/collection/normalize.py +283 -0
  118. geosition-4.9.1/src/geo_optimizer/core/collection/pipeline.py +204 -0
  119. geosition-4.9.1/src/geo_optimizer/core/collection/protocol.py +32 -0
  120. geosition-4.9.1/src/geo_optimizer/core/collection/store.py +101 -0
  121. geosition-4.9.1/src/geo_optimizer/core/collection/tracker_bridge.py +135 -0
  122. geosition-4.9.1/src/geo_optimizer/core/content_workflow.py +185 -0
  123. geosition-4.9.1/src/geo_optimizer/core/diffing.py +134 -0
  124. geosition-4.9.1/src/geo_optimizer/core/factual_accuracy.py +288 -0
  125. geosition-4.9.1/src/geo_optimizer/core/fixer.py +1251 -0
  126. geosition-4.9.1/src/geo_optimizer/core/gap_analysis.py +271 -0
  127. geosition-4.9.1/src/geo_optimizer/core/github_repo_audit.py +218 -0
  128. geosition-4.9.1/src/geo_optimizer/core/history.py +275 -0
  129. geosition-4.9.1/src/geo_optimizer/core/injection_detector.py +376 -0
  130. geosition-4.9.1/src/geo_optimizer/core/link_graph.py +170 -0
  131. geosition-4.9.1/src/geo_optimizer/core/llm_client.py +186 -0
  132. geosition-4.9.1/src/geo_optimizer/core/llms_generator.py +627 -0
  133. geosition-4.9.1/src/geo_optimizer/core/log_analyzer.py +165 -0
  134. geosition-4.9.1/src/geo_optimizer/core/monitor.py +312 -0
  135. geosition-4.9.1/src/geo_optimizer/core/orchestrator.py +137 -0
  136. geosition-4.9.1/src/geo_optimizer/core/playbooks.py +97 -0
  137. geosition-4.9.1/src/geo_optimizer/core/prompt_library.py +136 -0
  138. geosition-4.9.1/src/geo_optimizer/core/registry.py +210 -0
  139. geosition-4.9.1/src/geo_optimizer/core/schema_injector.py +362 -0
  140. geosition-4.9.1/src/geo_optimizer/core/schema_validator.py +153 -0
  141. geosition-4.9.1/src/geo_optimizer/core/scoring.py +226 -0
  142. geosition-4.9.1/src/geo_optimizer/core/search_measurement.py +101 -0
  143. geosition-4.9.1/src/geo_optimizer/core/seo_intelligence.py +843 -0
  144. geosition-4.9.1/src/geo_optimizer/core/site_coherence.py +95 -0
  145. geosition-4.9.1/src/geo_optimizer/core/site_integrator.py +91 -0
  146. geosition-4.9.1/src/geo_optimizer/core/snapshots.py +272 -0
  147. geosition-4.9.1/src/geo_optimizer/core/term_extractor.py +77 -0
  148. geosition-4.9.1/src/geo_optimizer/core/trust_stack.py +415 -0
  149. geosition-4.9.1/src/geo_optimizer/core/vertical_profile.py +375 -0
  150. geosition-4.9.1/src/geo_optimizer/i18n/__init__.py +151 -0
  151. geosition-4.9.1/src/geo_optimizer/i18n/locales/en/LC_MESSAGES/geo_optimizer.mo +0 -0
  152. geosition-4.9.1/src/geo_optimizer/i18n/locales/it/LC_MESSAGES/geo_optimizer.mo +0 -0
  153. geosition-4.9.1/src/geo_optimizer/mcp/__init__.py +3 -0
  154. geosition-4.9.1/src/geo_optimizer/mcp/server.py +797 -0
  155. geosition-4.9.1/src/geo_optimizer/models/__init__.py +1 -0
  156. geosition-4.9.1/src/geo_optimizer/models/config.py +767 -0
  157. geosition-4.9.1/src/geo_optimizer/models/project_config.py +165 -0
  158. geosition-4.9.1/src/geo_optimizer/models/results/__init__.py +295 -0
  159. geosition-4.9.1/src/geo_optimizer/models/results/analytics.py +286 -0
  160. geosition-4.9.1/src/geo_optimizer/models/results/audit.py +512 -0
  161. geosition-4.9.1/src/geo_optimizer/models/results/benchmark.py +331 -0
  162. geosition-4.9.1/src/geo_optimizer/models/results/citability.py +149 -0
  163. geosition-4.9.1/src/geo_optimizer/models/results/collection.py +82 -0
  164. geosition-4.9.1/src/geo_optimizer/models/results/core.py +203 -0
  165. geosition-4.9.1/src/geo_optimizer/models/results/marketing.py +602 -0
  166. geosition-4.9.1/src/geo_optimizer/models/results/rag.py +92 -0
  167. geosition-4.9.1/src/geo_optimizer/models/results/seo.py +212 -0
  168. geosition-4.9.1/src/geo_optimizer/models/results/trust.py +166 -0
  169. geosition-4.9.1/src/geo_optimizer/py.typed +0 -0
  170. geosition-4.9.1/src/geo_optimizer/saas/__init__.py +8 -0
  171. geosition-4.9.1/src/geo_optimizer/saas/auth.py +169 -0
  172. geosition-4.9.1/src/geo_optimizer/saas/domain_verify.py +82 -0
  173. geosition-4.9.1/src/geo_optimizer/saas/models.py +252 -0
  174. geosition-4.9.1/src/geo_optimizer/saas/search_connections.py +187 -0
  175. geosition-4.9.1/src/geo_optimizer/saas/service.py +2181 -0
  176. geosition-4.9.1/src/geo_optimizer/saas/store.py +1537 -0
  177. geosition-4.9.1/src/geo_optimizer/saas/supabase_store.py +1213 -0
  178. geosition-4.9.1/src/geo_optimizer/saas/weekly_evidence.py +398 -0
  179. geosition-4.9.1/src/geo_optimizer/skills/__init__.py +22 -0
  180. geosition-4.9.1/src/geo_optimizer/skills/catalog/README.md +33 -0
  181. geosition-4.9.1/src/geo_optimizer/skills/catalog/_template/prompt.md +25 -0
  182. geosition-4.9.1/src/geo_optimizer/skills/catalog/_template/skill.yaml +27 -0
  183. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_ai_discovery_readiness/prompt.md +33 -0
  184. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_ai_discovery_readiness/skill.yaml +79 -0
  185. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_audit_orchestrator/prompt.md +30 -0
  186. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_audit_orchestrator/skill.yaml +65 -0
  187. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_citation_readiness/prompt.md +32 -0
  188. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_citation_readiness/skill.yaml +79 -0
  189. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_competitor_comparison/prompt.md +32 -0
  190. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_competitor_comparison/skill.yaml +76 -0
  191. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_foundation_repair/prompt.md +31 -0
  192. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_foundation_repair/skill.yaml +72 -0
  193. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_schema_readiness/prompt.md +33 -0
  194. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_schema_readiness/skill.yaml +76 -0
  195. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_trust_signal_review/prompt.md +33 -0
  196. geosition-4.9.1/src/geo_optimizer/skills/catalog/geo_trust_signal_review/skill.yaml +76 -0
  197. geosition-4.9.1/src/geo_optimizer/skills/loader.py +118 -0
  198. geosition-4.9.1/src/geo_optimizer/skills/models.py +69 -0
  199. geosition-4.9.1/src/geo_optimizer/skills/validator.py +179 -0
  200. geosition-4.9.1/src/geo_optimizer/storage/__init__.py +15 -0
  201. geosition-4.9.1/src/geo_optimizer/storage/artifacts.py +194 -0
  202. geosition-4.9.1/src/geo_optimizer/storage/paths.py +82 -0
  203. geosition-4.9.1/src/geo_optimizer/storage/platform.py +50 -0
  204. geosition-4.9.1/src/geo_optimizer/utils/__init__.py +1 -0
  205. geosition-4.9.1/src/geo_optimizer/utils/cache.py +156 -0
  206. geosition-4.9.1/src/geo_optimizer/utils/http.py +332 -0
  207. geosition-4.9.1/src/geo_optimizer/utils/http_async.py +192 -0
  208. geosition-4.9.1/src/geo_optimizer/utils/robots_parser.py +252 -0
  209. geosition-4.9.1/src/geo_optimizer/utils/seo_program_note.py +14 -0
  210. geosition-4.9.1/src/geo_optimizer/utils/validators.py +250 -0
  211. geosition-4.9.1/src/geo_optimizer/web/__init__.py +12 -0
  212. geosition-4.9.1/src/geo_optimizer/web/app.py +1896 -0
  213. geosition-4.9.1/src/geo_optimizer/web/badge.py +131 -0
  214. geosition-4.9.1/src/geo_optimizer/web/cli.py +37 -0
  215. geosition-4.9.1/src/geo_optimizer/web/docs/ai-bots-reference.md +277 -0
  216. geosition-4.9.1/src/geo_optimizer/web/docs/ai-context.md +235 -0
  217. geosition-4.9.1/src/geo_optimizer/web/docs/ci-cd.md +227 -0
  218. geosition-4.9.1/src/geo_optimizer/web/docs/geo-audit.md +290 -0
  219. geosition-4.9.1/src/geo_optimizer/web/docs/geo-diff.md +38 -0
  220. geosition-4.9.1/src/geo_optimizer/web/docs/geo-fix.md +111 -0
  221. geosition-4.9.1/src/geo_optimizer/web/docs/geo-history.md +65 -0
  222. geosition-4.9.1/src/geo_optimizer/web/docs/geo-methods.md +327 -0
  223. geosition-4.9.1/src/geo_optimizer/web/docs/geo-monitor.md +78 -0
  224. geosition-4.9.1/src/geo_optimizer/web/docs/geo-snapshots.md +103 -0
  225. geosition-4.9.1/src/geo_optimizer/web/docs/geo-track.md +71 -0
  226. geosition-4.9.1/src/geo_optimizer/web/docs/getting-started.md +132 -0
  227. geosition-4.9.1/src/geo_optimizer/web/docs/index.md +50 -0
  228. geosition-4.9.1/src/geo_optimizer/web/docs/llms-txt.md +208 -0
  229. geosition-4.9.1/src/geo_optimizer/web/docs/mcp-server.md +410 -0
  230. geosition-4.9.1/src/geo_optimizer/web/docs/schema-injector.md +444 -0
  231. geosition-4.9.1/src/geo_optimizer/web/docs/scoring-rubric.md +27 -0
  232. geosition-4.9.1/src/geo_optimizer/web/docs/search-measurement.md +21 -0
  233. geosition-4.9.1/src/geo_optimizer/web/docs/skill-files.md +72 -0
  234. geosition-4.9.1/src/geo_optimizer/web/docs/skill-roadmap.md +193 -0
  235. geosition-4.9.1/src/geo_optimizer/web/docs/skill-system.md +101 -0
  236. geosition-4.9.1/src/geo_optimizer/web/docs/troubleshooting.md +297 -0
  237. geosition-4.9.1/src/geo_optimizer/web/platform_routes.py +1432 -0
  238. geosition-4.9.1/src/geo_optimizer/web/templates/compare.html +223 -0
  239. geosition-4.9.1/src/geo_optimizer/web/templates/docs.html +147 -0
  240. geosition-4.9.1/src/geo_optimizer/web/templates/index.html +609 -0
  241. geosition-4.9.1/src/geo_optimizer/web/templates/manifesto.html +508 -0
  242. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/ai-companies.webp +0 -0
  243. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/apple-touch-icon.png +0 -0
  244. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/agency-owner.png +0 -0
  245. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/content-lead.png +0 -0
  246. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/editor.png +0 -0
  247. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/founder.png +0 -0
  248. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/independent-analyst.png +0 -0
  249. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/avatars/operator.png +0 -0
  250. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/cobe.esm.js +1 -0
  251. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/commerce-ai-assistant.png +0 -0
  252. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/commerce-shopping-bag.png +0 -0
  253. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/commerce-storefront.png +0 -0
  254. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/dashboard-loop.js +118 -0
  255. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/earn-per-citation.webp +0 -0
  256. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon-16.png +0 -0
  257. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon-32.png +0 -0
  258. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon-48.png +0 -0
  259. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon-64.png +0 -0
  260. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon.ico +0 -0
  261. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/favicon.svg +3 -0
  262. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/hero-bg.png +0 -0
  263. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/hero-mountain.png +0 -0
  264. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/landing-refresh.css +646 -0
  265. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/lenis.LICENSE.txt +9 -0
  266. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/lenis.min.js +2 -0
  267. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/lenis.min.js.map +1 -0
  268. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/mobile-cta-trees.png +0 -0
  269. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/mobile-cta-trees.webp +0 -0
  270. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/platform-icon-claude.svg +1 -0
  271. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/platform-icon-google.svg +1 -0
  272. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/platform-icon-googlegemini.svg +1 -0
  273. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/platform-icon-perplexity.svg +1 -0
  274. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/platform-icons-LICENSE.txt +30 -0
  275. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/publishers-data.webp +0 -0
  276. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-citrus-poster.jpg +0 -0
  277. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-citrus.mp4 +0 -0
  278. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-coffee-poster.jpg +0 -0
  279. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-coffee-v2.mp4 +0 -0
  280. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-run-poster.jpg +0 -0
  281. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-run.mp4 +0 -0
  282. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-skincare-poster.jpg +0 -0
  283. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reel-skincare-v2.mp4 +0 -0
  284. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/README.md +6 -0
  285. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/amber-serum.webp +0 -0
  286. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/atelier-hero-loop.mp4 +0 -0
  287. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/atelier-hero-poster.webp +0 -0
  288. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/ceramic-cup.webp +0 -0
  289. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/email-preview.png +0 -0
  290. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/glass-perfume.webp +0 -0
  291. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/green-headphones.webp +0 -0
  292. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/halcy-hero-converted-v4.webm +0 -0
  293. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/halcy-hero-poster.webp +0 -0
  294. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/hearthen-animated-hero-desktop.webm +0 -0
  295. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/hearthen-hero-poster.webp +0 -0
  296. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/intro-agent-tux.webp +0 -0
  297. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/intro-bag.webp +0 -0
  298. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/intro-store.webp +0 -0
  299. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/laps-hero-loop.mp4 +0 -0
  300. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/laps-hero-poster.webp +0 -0
  301. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/leather-bag.webp +0 -0
  302. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/lift-hero-loop.mp4 +0 -0
  303. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/lift-hero-poster.webp +0 -0
  304. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/linen-towels.webp +0 -0
  305. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/olive-oil.webp +0 -0
  306. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/sculptural-vase.webp +0 -0
  307. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/silver-watch.webp +0 -0
  308. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/stayput-hero-poster.webp +0 -0
  309. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/stayput-hero-top-cropped-v3.webm +0 -0
  310. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/store-design-poster.webp +0 -0
  311. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/store-design-smooth-loop.mp4 +0 -0
  312. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/terracotta-vase.webp +0 -0
  313. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2-poster.webp +0 -0
  314. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2-smooth.mp4 +0 -0
  315. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2.mp4 +0 -0
  316. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/zahra-hero-loop-v2.mp4 +0 -0
  317. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/zahra-loop-poster.webp +0 -0
  318. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/zippa-hero-pingpong-v2.mp4 +0 -0
  319. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/reference-amboras/zippa-hero-poster-v2.webp +0 -0
  320. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/smooth-scroll.js +44 -0
  321. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/terminal-cta-landscape.png +0 -0
  322. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/terminal-cta-reference.jpg +0 -0
  323. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/terminal-cta-scene.jpg +0 -0
  324. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/terminal-cta-trees-crop.png +0 -0
  325. geosition-4.9.1/src/geo_optimizer/web/templates/platform/assets/terminal-cta-trees.png +0 -0
  326. geosition-4.9.1/src/geo_optimizer/web/templates/platform/dashboard.html +1591 -0
  327. geosition-4.9.1/src/geo_optimizer/web/templates/platform/forgot-password.html +80 -0
  328. geosition-4.9.1/src/geo_optimizer/web/templates/platform/gestion-velora.html +299 -0
  329. geosition-4.9.1/src/geo_optimizer/web/templates/platform/index.html +209 -0
  330. geosition-4.9.1/src/geo_optimizer/web/templates/platform/landing.html +605 -0
  331. geosition-4.9.1/src/geo_optimizer/web/templates/platform/login.html +64 -0
  332. geosition-4.9.1/src/geo_optimizer/web/templates/platform/register.html +105 -0
  333. geosition-4.9.1/src/geo_optimizer/web/templates/platform/reset-password.html +75 -0
  334. geosition-4.9.1/src/geo_optimizer/web/templates/platform/site.css +9480 -0
  335. geosition-4.9.1/src/geo_optimizer/web/templates/research.html +198 -0
  336. geosition-4.9.1/src/geo_optimizer/web/templates/roadmap.html +165 -0
  337. geosition-4.9.1/src/geosition.egg-info/PKG-INFO +241 -0
  338. geosition-4.9.1/src/geosition.egg-info/SOURCES.txt +421 -0
  339. geosition-4.9.1/src/geosition.egg-info/dependency_links.txt +1 -0
  340. geosition-4.9.1/src/geosition.egg-info/entry_points.txt +10 -0
  341. geosition-4.9.1/src/geosition.egg-info/requires.txt +69 -0
  342. geosition-4.9.1/src/geosition.egg-info/top_level.txt +1 -0
  343. geosition-4.9.1/tests/test_action_intelligence.py +50 -0
  344. geosition-4.9.1/tests/test_agent_endpoints.py +398 -0
  345. geosition-4.9.1/tests/test_ai_discovery.py +766 -0
  346. geosition-4.9.1/tests/test_ai_presence_definition_regex.py +28 -0
  347. geosition-4.9.1/tests/test_ai_scraper_api_auth.py +33 -0
  348. geosition-4.9.1/tests/test_async.py +134 -0
  349. geosition-4.9.1/tests/test_audit_aeo.py +142 -0
  350. geosition-4.9.1/tests/test_audit_indexnow.py +54 -0
  351. geosition-4.9.1/tests/test_audit_marketing.py +35 -0
  352. geosition-4.9.1/tests/test_audit_sxo.py +72 -0
  353. geosition-4.9.1/tests/test_badge.py +194 -0
  354. geosition-4.9.1/tests/test_batch_audit.py +114 -0
  355. geosition-4.9.1/tests/test_benchmark.py +575 -0
  356. geosition-4.9.1/tests/test_brand_entity_signals.py +393 -0
  357. geosition-4.9.1/tests/test_cache_serverless.py +26 -0
  358. geosition-4.9.1/tests/test_cdn_js_checks.py +281 -0
  359. geosition-4.9.1/tests/test_ci_formatter.py +210 -0
  360. geosition-4.9.1/tests/test_citability.py +2240 -0
  361. geosition-4.9.1/tests/test_citation_attribution.py +92 -0
  362. geosition-4.9.1/tests/test_citation_map.py +68 -0
  363. geosition-4.9.1/tests/test_citation_quality.py +55 -0
  364. geosition-4.9.1/tests/test_cli.py +1902 -0
  365. geosition-4.9.1/tests/test_coherence.py +170 -0
  366. geosition-4.9.1/tests/test_collection.py +148 -0
  367. geosition-4.9.1/tests/test_collection_adapters.py +61 -0
  368. geosition-4.9.1/tests/test_content_decay.py +77 -0
  369. geosition-4.9.1/tests/test_content_workflow.py +60 -0
  370. geosition-4.9.1/tests/test_context_window.py +153 -0
  371. geosition-4.9.1/tests/test_core.py +2354 -0
  372. geosition-4.9.1/tests/test_core_contract_smoke.py +103 -0
  373. geosition-4.9.1/tests/test_core_network_hardening.py +31 -0
  374. geosition-4.9.1/tests/test_coverage_m1.py +1648 -0
  375. geosition-4.9.1/tests/test_diff.py +73 -0
  376. geosition-4.9.1/tests/test_embedding_proximity.py +74 -0
  377. geosition-4.9.1/tests/test_factual_accuracy.py +97 -0
  378. geosition-4.9.1/tests/test_fix.py +703 -0
  379. geosition-4.9.1/tests/test_gap_analysis.py +111 -0
  380. geosition-4.9.1/tests/test_geosition_cmd.py +147 -0
  381. geosition-4.9.1/tests/test_github_repo_audit.py +72 -0
  382. geosition-4.9.1/tests/test_history.py +76 -0
  383. geosition-4.9.1/tests/test_http_async.py +476 -0
  384. geosition-4.9.1/tests/test_instruction_readiness.py +229 -0
  385. geosition-4.9.1/tests/test_link_graph.py +38 -0
  386. geosition-4.9.1/tests/test_llm_sentiment.py +130 -0
  387. geosition-4.9.1/tests/test_llms_v2_validation.py +321 -0
  388. geosition-4.9.1/tests/test_log_analyzer.py +107 -0
  389. geosition-4.9.1/tests/test_mcp.py +563 -0
  390. geosition-4.9.1/tests/test_mcp_protocol.py +24 -0
  391. geosition-4.9.1/tests/test_monitor.py +91 -0
  392. geosition-4.9.1/tests/test_multi_turn.py +74 -0
  393. geosition-4.9.1/tests/test_negative_signals.py +135 -0
  394. geosition-4.9.1/tests/test_p0_security_fixes.py +518 -0
  395. geosition-4.9.1/tests/test_pdf.py +168 -0
  396. geosition-4.9.1/tests/test_performance_budget.py +45 -0
  397. geosition-4.9.1/tests/test_platform_citation.py +104 -0
  398. geosition-4.9.1/tests/test_platform_saas.py +2113 -0
  399. geosition-4.9.1/tests/test_playbook_and_pipeline.py +34 -0
  400. geosition-4.9.1/tests/test_prompt_injection.py +424 -0
  401. geosition-4.9.1/tests/test_prompt_library.py +54 -0
  402. geosition-4.9.1/tests/test_rag_chunk.py +96 -0
  403. geosition-4.9.1/tests/test_readiness_evidence.py +35 -0
  404. geosition-4.9.1/tests/test_registry.py +275 -0
  405. geosition-4.9.1/tests/test_ricerca_2025_2026.py +386 -0
  406. geosition-4.9.1/tests/test_schema_richness_394.py +228 -0
  407. geosition-4.9.1/tests/test_search_connections.py +182 -0
  408. geosition-4.9.1/tests/test_search_measurement.py +133 -0
  409. geosition-4.9.1/tests/test_security_critical.py +190 -0
  410. geosition-4.9.1/tests/test_security_m1.py +200 -0
  411. geosition-4.9.1/tests/test_seo_intelligence.py +146 -0
  412. geosition-4.9.1/tests/test_site_integrator.py +30 -0
  413. geosition-4.9.1/tests/test_skill_system.py +92 -0
  414. geosition-4.9.1/tests/test_snapshots.py +61 -0
  415. geosition-4.9.1/tests/test_ssrf_hardening.py +385 -0
  416. geosition-4.9.1/tests/test_storage.py +166 -0
  417. geosition-4.9.1/tests/test_trust_stack.py +339 -0
  418. geosition-4.9.1/tests/test_v21_coverage.py +1008 -0
  419. geosition-4.9.1/tests/test_v2_remaining_fixes.py +347 -0
  420. geosition-4.9.1/tests/test_vertical_profile.py +80 -0
  421. geosition-4.9.1/tests/test_web_app.py +1053 -0
  422. geosition-4.9.1/tests/test_web_history.py +61 -0
  423. geosition-4.9.1/tests/test_webmcp.py +184 -0
@@ -0,0 +1,73 @@
1
+ MIT License (with OpenAI/Anthropic Rider)
2
+
3
+ Copyright (c) 2026 Arnaud Bellemare
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ ADDITIONAL RIDER / RESTRICTION (OpenAI / Anthropic):
13
+
14
+ This rider is part of the "conditions" of this License. In the event of any
15
+ conflict between this rider and any other portion of this License, this rider
16
+ controls.
17
+
18
+ "Restricted Parties" means OpenAI, L.L.C.; Anthropic, PBC; any of their
19
+ respective Affiliates; and any person or entity acting directly or indirectly
20
+ on behalf of, for the benefit of, or under the direction of any of the
21
+ foregoing (including any officer, director, employee, contractor, agent,
22
+ consultant, service provider, or representative).
23
+
24
+ Notwithstanding any other provision of this License, no rights are granted to
25
+ any Restricted Party. Any purported license, sublicense, assignment, transfer,
26
+ or other permission to any Restricted Party is null and void absent the
27
+ express prior written permission of Arnaud Bellemare.
28
+
29
+ You may not provide, disclose, distribute, sublicense, sell, lease, lend,
30
+ host, make available, or otherwise permit access to the Software or any
31
+ derivative work of the Software (as defined in applicable copyright law)
32
+ (collectively, "Derivative Works") to or for any Restricted Party.
33
+
34
+ For purposes of this rider, "use" includes, without limitation: copying,
35
+ modifying, merging, publishing, distributing, sublicensing, selling,
36
+ transferring, making available, hosting, deploying, executing, benchmarking,
37
+ testing, analyzing, indexing, or incorporating the Software or any Derivative
38
+ Works into any dataset, training corpus, evaluation harness, or pipeline for
39
+ machine learning or other automated systems.
40
+
41
+ This rider applies to the Software and all Derivative Works. As a condition of
42
+ use, you agree that this rider is a precondition to exercising any rights
43
+ under this License, and you agree that any distribution of the Software or any
44
+ Derivative Works must include this rider provision unmodified.
45
+
46
+ Any breach of this rider automatically and immediately terminates the
47
+ permissions granted by this License. Upon termination, you must immediately
48
+ cease all use and distribution of the Software and any Derivative Works and
49
+ destroy all copies under your control.
50
+
51
+ You agree that a breach of this rider would cause irreparable harm and that
52
+ Arnaud Bellemare may seek injunctive or other equitable relief to enforce this
53
+ rider, in addition to any other remedies available at law. To the maximum
54
+ extent permitted by applicable law, the prevailing party in any action to
55
+ enforce this rider shall be entitled to recover reasonable attorneys' fees and
56
+ costs.
57
+
58
+ For purposes of this rider, "Affiliate" means any entity that directly or
59
+ indirectly controls, is controlled by, or is under common control with the
60
+ specified party. "Control" means ownership of more than 50% of the voting
61
+ securities or other ownership interest, or the power to direct management or
62
+ policies by contract or otherwise.
63
+
64
+ The above copyright notice and this permission notice shall be included in all
65
+ copies or substantial portions of the Software.
66
+
67
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
68
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
69
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
70
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
71
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
72
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
73
+ SOFTWARE.
@@ -0,0 +1,241 @@
1
+ Metadata-Version: 2.4
2
+ Name: geosition
3
+ Version: 4.9.1
4
+ Summary: Generative Engine Optimization toolkit — make websites visible to AI search engines
5
+ Author-email: Arnaud Bellemare <asapbellemare@gmail.com>
6
+ License: MIT License (with OpenAI/Anthropic Rider)
7
+
8
+ Copyright (c) 2026 Arnaud Bellemare
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ ADDITIONAL RIDER / RESTRICTION (OpenAI / Anthropic):
18
+
19
+ This rider is part of the "conditions" of this License. In the event of any
20
+ conflict between this rider and any other portion of this License, this rider
21
+ controls.
22
+
23
+ "Restricted Parties" means OpenAI, L.L.C.; Anthropic, PBC; any of their
24
+ respective Affiliates; and any person or entity acting directly or indirectly
25
+ on behalf of, for the benefit of, or under the direction of any of the
26
+ foregoing (including any officer, director, employee, contractor, agent,
27
+ consultant, service provider, or representative).
28
+
29
+ Notwithstanding any other provision of this License, no rights are granted to
30
+ any Restricted Party. Any purported license, sublicense, assignment, transfer,
31
+ or other permission to any Restricted Party is null and void absent the
32
+ express prior written permission of Arnaud Bellemare.
33
+
34
+ You may not provide, disclose, distribute, sublicense, sell, lease, lend,
35
+ host, make available, or otherwise permit access to the Software or any
36
+ derivative work of the Software (as defined in applicable copyright law)
37
+ (collectively, "Derivative Works") to or for any Restricted Party.
38
+
39
+ For purposes of this rider, "use" includes, without limitation: copying,
40
+ modifying, merging, publishing, distributing, sublicensing, selling,
41
+ transferring, making available, hosting, deploying, executing, benchmarking,
42
+ testing, analyzing, indexing, or incorporating the Software or any Derivative
43
+ Works into any dataset, training corpus, evaluation harness, or pipeline for
44
+ machine learning or other automated systems.
45
+
46
+ This rider applies to the Software and all Derivative Works. As a condition of
47
+ use, you agree that this rider is a precondition to exercising any rights
48
+ under this License, and you agree that any distribution of the Software or any
49
+ Derivative Works must include this rider provision unmodified.
50
+
51
+ Any breach of this rider automatically and immediately terminates the
52
+ permissions granted by this License. Upon termination, you must immediately
53
+ cease all use and distribution of the Software and any Derivative Works and
54
+ destroy all copies under your control.
55
+
56
+ You agree that a breach of this rider would cause irreparable harm and that
57
+ Arnaud Bellemare may seek injunctive or other equitable relief to enforce this
58
+ rider, in addition to any other remedies available at law. To the maximum
59
+ extent permitted by applicable law, the prevailing party in any action to
60
+ enforce this rider shall be entitled to recover reasonable attorneys' fees and
61
+ costs.
62
+
63
+ For purposes of this rider, "Affiliate" means any entity that directly or
64
+ indirectly controls, is controlled by, or is under common control with the
65
+ specified party. "Control" means ownership of more than 50% of the voting
66
+ securities or other ownership interest, or the power to direct management or
67
+ policies by contract or otherwise.
68
+
69
+ The above copyright notice and this permission notice shall be included in all
70
+ copies or substantial portions of the Software.
71
+
72
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
73
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
74
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
75
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
76
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
77
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
78
+ SOFTWARE.
79
+
80
+ Project-URL: Homepage, https://github.com/arnaudbellemare/geosition
81
+ Project-URL: Documentation, https://github.com/arnaudbellemare/geosition#readme
82
+ Project-URL: Repository, https://github.com/arnaudbellemare/geosition
83
+ Project-URL: Issues, https://github.com/arnaudbellemare/geosition/issues
84
+ Keywords: geo,seo,ai,llm,optimization,schema,llms-txt,generative-engine
85
+ Classifier: Development Status :: 5 - Production/Stable
86
+ Classifier: Intended Audience :: Developers
87
+ Classifier: Programming Language :: Python :: 3
88
+ Classifier: Programming Language :: Python :: 3.9
89
+ Classifier: Programming Language :: Python :: 3.10
90
+ Classifier: Programming Language :: Python :: 3.11
91
+ Classifier: Programming Language :: Python :: 3.12
92
+ Classifier: Programming Language :: Python :: 3.13
93
+ Classifier: Topic :: Internet :: WWW/HTTP
94
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
95
+ Requires-Python: >=3.9
96
+ Description-Content-Type: text/markdown
97
+ License-File: LICENSE
98
+ Requires-Dist: click<9.0,>=8.0
99
+ Requires-Dist: cryptography<51,>=50.0.0
100
+ Requires-Dist: requests<2.33.0,>=2.32.5; python_version < "3.10"
101
+ Requires-Dist: requests<3.0.0,>=2.33.0; python_version >= "3.10"
102
+ Requires-Dist: beautifulsoup4<5.0.0,>=4.12.0
103
+ Requires-Dist: lxml<7.0.0,>=4.9.0
104
+ Requires-Dist: urllib3<2.7.0,>=2.6.3; python_version < "3.10"
105
+ Requires-Dist: urllib3<3.0.0,>=2.7.0; python_version >= "3.10"
106
+ Requires-Dist: fastapi<1.0,>=0.128.8; python_version < "3.10"
107
+ Requires-Dist: fastapi<1.0,>=0.162.0; python_version >= "3.10"
108
+ Requires-Dist: starlette<2.0,>=1.0.1; python_version >= "3.10"
109
+ Requires-Dist: uvicorn[standard]<1.0,>=0.27.0
110
+ Requires-Dist: python-dotenv<1.2.2,>=1.2.1; python_version < "3.10"
111
+ Requires-Dist: python-dotenv>=1.2.2; python_version >= "3.10"
112
+ Requires-Dist: markdown<4.0,>=3.5.0
113
+ Provides-Extra: rich
114
+ Requires-Dist: rich<16.0,>=13.0; extra == "rich"
115
+ Provides-Extra: config
116
+ Requires-Dist: pyyaml<7.0,>=6.0; extra == "config"
117
+ Provides-Extra: async
118
+ Requires-Dist: httpx<1.0,>=0.27.0; extra == "async"
119
+ Provides-Extra: web
120
+ Requires-Dist: fastapi<1.0,>=0.128.8; python_version < "3.10" and extra == "web"
121
+ Requires-Dist: fastapi<1.0,>=0.162.0; python_version >= "3.10" and extra == "web"
122
+ Requires-Dist: starlette<2.0,>=1.0.1; python_version >= "3.10" and extra == "web"
123
+ Requires-Dist: uvicorn[standard]<1.0,>=0.27.0; extra == "web"
124
+ Requires-Dist: python-dotenv<1.2.2,>=1.2.1; python_version < "3.10" and extra == "web"
125
+ Requires-Dist: python-dotenv>=1.2.2; python_version >= "3.10" and extra == "web"
126
+ Requires-Dist: markdown<4.0,>=3.5.0; extra == "web"
127
+ Provides-Extra: pdf
128
+ Requires-Dist: weasyprint>=60.0; extra == "pdf"
129
+ Provides-Extra: mcp
130
+ Requires-Dist: mcp>=1.0.0; python_version >= "3.10" and extra == "mcp"
131
+ Provides-Extra: embedding
132
+ Requires-Dist: sentence-transformers<6.0,>=2.2.0; extra == "embedding"
133
+ Provides-Extra: storage
134
+ Requires-Dist: boto3<2.0,>=1.28.0; extra == "storage"
135
+ Provides-Extra: llm
136
+ Requires-Dist: openai<3.0,>=1.0.0; extra == "llm"
137
+ Requires-Dist: anthropic<2.0,>=0.30.0; extra == "llm"
138
+ Provides-Extra: dev
139
+ Requires-Dist: pytest<10.0,>=7.0; extra == "dev"
140
+ Requires-Dist: pytest-cov<8.0,>=4.0; extra == "dev"
141
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
142
+ Requires-Dist: pyyaml<7.0,>=6.0; extra == "dev"
143
+ Requires-Dist: httpx<1.0,>=0.27.0; extra == "dev"
144
+ Provides-Extra: all
145
+ Requires-Dist: geosition[async,config,mcp,pdf,web]; extra == "all"
146
+ Dynamic: license-file
147
+
148
+ <p align="center">
149
+ <img src="assets/geosition-banner.svg" alt="GEOSITION — Build for AI search. Audit your site, find the next fix." width="100%">
150
+ </p>
151
+
152
+ # GEOSITION
153
+
154
+ A source-available developer toolkit for auditing websites for AI search readiness. Check crawler access, structured data, metadata, and content; then review practical suggestions for improving your site.
155
+
156
+ [![CI](https://github.com/arnaudbellemare/geosition/actions/workflows/ci.yml/badge.svg)](https://github.com/arnaudbellemare/geosition/actions/workflows/ci.yml)
157
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-303830)](https://www.python.org/)
158
+ [![License](https://img.shields.io/badge/license-source--available-303830)](LICENSE)
159
+
160
+ [Documentation](https://arnaudbellemare.github.io/geosition/) · [Website](https://geositionai.com/) · [Contributing](.github/CONTRIBUTING.md) · [Security](.github/SECURITY.md)
161
+
162
+ ## Get started
163
+
164
+ Install GEOSITION and audit a public page:
165
+
166
+ ```bash
167
+ python -m pip install geosition
168
+ geo audit --url https://example.com
169
+ ```
170
+
171
+ The report includes a readiness score, a breakdown of checks, and suggested next steps. The score is a **heuristic**: it does not measure actual AI citations or guarantee visibility. See the [scoring rubric](docs/scoring-rubric.md) for details.
172
+
173
+ > Prefer to inspect the source first? Clone this repository and install with `python -m pip install -e ".[dev]"`.
174
+
175
+ ## Common tasks
176
+
177
+ ```bash
178
+ # Save a machine-readable audit
179
+ geo audit --url https://example.com --format json --output report.json
180
+
181
+ # Preview suggested fixes; --apply writes generated files to ./geo-fixes/
182
+ geo fix --url https://example.com
183
+ geo fix --url https://example.com --apply
184
+
185
+ # Audit pages from a sitemap
186
+ geo audit --sitemap https://example.com/sitemap.xml --max-urls 25
187
+ ```
188
+
189
+ Review generated files before adding them to your site. Run `geo --help` or `geo <command> --help` to explore the CLI. The [command guide](docs/GEOSITION_CLI.md) covers more workflows.
190
+
191
+ ## Use from Python
192
+
193
+ ```python
194
+ from geo_optimizer import audit
195
+
196
+ result = audit("https://example.com")
197
+ print(result.score, result.band)
198
+ print(result.recommendations)
199
+ ```
200
+
201
+ For the asynchronous API, import `audit_async`. The package also provides an [MCP server](docs/mcp-server.md) and a [GitHub Action](docs/ci-cd.md).
202
+
203
+ ## What it checks
204
+
205
+ - Search crawler access and technical signals
206
+ - Structured data, page metadata, and business identity
207
+ - Content structure and product data on individual pages
208
+ - Optional discovery files, reported separately from the readiness score
209
+
210
+ The dashboard can compare sampled AI answers and connect first-party search data when the required services are configured. Search traffic and sampled citations are separate measurements; neither is inferred from the readiness score. See [search measurement setup](docs/search-measurement.md).
211
+
212
+ ## Explore the repository
213
+
214
+ | Path | What you'll find |
215
+ | --- | --- |
216
+ | [`src/geo_optimizer/`](src/geo_optimizer/) | CLI, audit engine, models, web app, and MCP server |
217
+ | [`tests/`](tests/) | Unit and integration tests |
218
+ | [`docs/`](docs/) | Guides, scoring, and platform setup |
219
+ | [`examples/`](examples/) | Sample inputs and plugin example |
220
+ | [`apps/`](apps/) | Additional applications |
221
+ | [`seo/`](seo/) | Repository SEO program and sample keyword data |
222
+
223
+ See the [repository map](docs/repository-map.md) for a closer look.
224
+
225
+ ## Development
226
+
227
+ ```bash
228
+ git clone https://github.com/arnaudbellemare/geosition.git
229
+ cd geosition
230
+ python -m venv .venv
231
+ source .venv/bin/activate
232
+ python -m pip install -e ".[dev]"
233
+ pytest tests/ -q
234
+ ruff check src/geo_optimizer/
235
+ ```
236
+
237
+ Contributions are welcome. Start with [CONTRIBUTING.md](.github/CONTRIBUTING.md), and report security issues using [SECURITY.md](.github/SECURITY.md).
238
+
239
+ ## License
240
+
241
+ GEOSITION is source-available under the terms in [LICENSE](LICENSE), including the OpenAI/Anthropic rider. Read the full license before using or redistributing the software.
@@ -0,0 +1,94 @@
1
+ <p align="center">
2
+ <img src="assets/geosition-banner.svg" alt="GEOSITION — Build for AI search. Audit your site, find the next fix." width="100%">
3
+ </p>
4
+
5
+ # GEOSITION
6
+
7
+ A source-available developer toolkit for auditing websites for AI search readiness. Check crawler access, structured data, metadata, and content; then review practical suggestions for improving your site.
8
+
9
+ [![CI](https://github.com/arnaudbellemare/geosition/actions/workflows/ci.yml/badge.svg)](https://github.com/arnaudbellemare/geosition/actions/workflows/ci.yml)
10
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-303830)](https://www.python.org/)
11
+ [![License](https://img.shields.io/badge/license-source--available-303830)](LICENSE)
12
+
13
+ [Documentation](https://arnaudbellemare.github.io/geosition/) · [Website](https://geositionai.com/) · [Contributing](.github/CONTRIBUTING.md) · [Security](.github/SECURITY.md)
14
+
15
+ ## Get started
16
+
17
+ Install GEOSITION and audit a public page:
18
+
19
+ ```bash
20
+ python -m pip install geosition
21
+ geo audit --url https://example.com
22
+ ```
23
+
24
+ The report includes a readiness score, a breakdown of checks, and suggested next steps. The score is a **heuristic**: it does not measure actual AI citations or guarantee visibility. See the [scoring rubric](docs/scoring-rubric.md) for details.
25
+
26
+ > Prefer to inspect the source first? Clone this repository and install with `python -m pip install -e ".[dev]"`.
27
+
28
+ ## Common tasks
29
+
30
+ ```bash
31
+ # Save a machine-readable audit
32
+ geo audit --url https://example.com --format json --output report.json
33
+
34
+ # Preview suggested fixes; --apply writes generated files to ./geo-fixes/
35
+ geo fix --url https://example.com
36
+ geo fix --url https://example.com --apply
37
+
38
+ # Audit pages from a sitemap
39
+ geo audit --sitemap https://example.com/sitemap.xml --max-urls 25
40
+ ```
41
+
42
+ Review generated files before adding them to your site. Run `geo --help` or `geo <command> --help` to explore the CLI. The [command guide](docs/GEOSITION_CLI.md) covers more workflows.
43
+
44
+ ## Use from Python
45
+
46
+ ```python
47
+ from geo_optimizer import audit
48
+
49
+ result = audit("https://example.com")
50
+ print(result.score, result.band)
51
+ print(result.recommendations)
52
+ ```
53
+
54
+ For the asynchronous API, import `audit_async`. The package also provides an [MCP server](docs/mcp-server.md) and a [GitHub Action](docs/ci-cd.md).
55
+
56
+ ## What it checks
57
+
58
+ - Search crawler access and technical signals
59
+ - Structured data, page metadata, and business identity
60
+ - Content structure and product data on individual pages
61
+ - Optional discovery files, reported separately from the readiness score
62
+
63
+ The dashboard can compare sampled AI answers and connect first-party search data when the required services are configured. Search traffic and sampled citations are separate measurements; neither is inferred from the readiness score. See [search measurement setup](docs/search-measurement.md).
64
+
65
+ ## Explore the repository
66
+
67
+ | Path | What you'll find |
68
+ | --- | --- |
69
+ | [`src/geo_optimizer/`](src/geo_optimizer/) | CLI, audit engine, models, web app, and MCP server |
70
+ | [`tests/`](tests/) | Unit and integration tests |
71
+ | [`docs/`](docs/) | Guides, scoring, and platform setup |
72
+ | [`examples/`](examples/) | Sample inputs and plugin example |
73
+ | [`apps/`](apps/) | Additional applications |
74
+ | [`seo/`](seo/) | Repository SEO program and sample keyword data |
75
+
76
+ See the [repository map](docs/repository-map.md) for a closer look.
77
+
78
+ ## Development
79
+
80
+ ```bash
81
+ git clone https://github.com/arnaudbellemare/geosition.git
82
+ cd geosition
83
+ python -m venv .venv
84
+ source .venv/bin/activate
85
+ python -m pip install -e ".[dev]"
86
+ pytest tests/ -q
87
+ ruff check src/geo_optimizer/
88
+ ```
89
+
90
+ Contributions are welcome. Start with [CONTRIBUTING.md](.github/CONTRIBUTING.md), and report security issues using [SECURITY.md](.github/SECURITY.md).
91
+
92
+ ## License
93
+
94
+ GEOSITION is source-available under the terms in [LICENSE](LICENSE), including the OpenAI/Anthropic rider. Read the full license before using or redistributing the software.
@@ -0,0 +1,198 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "geosition"
7
+ version = "4.9.1"
8
+ description = "Generative Engine Optimization toolkit — make websites visible to AI search engines"
9
+ readme = "README.md"
10
+ license = {file = "LICENSE"}
11
+ requires-python = ">=3.9"
12
+ authors = [
13
+ {name = "Arnaud Bellemare", email = "asapbellemare@gmail.com"},
14
+ ]
15
+ keywords = ["geo", "seo", "ai", "llm", "optimization", "schema", "llms-txt", "generative-engine"]
16
+ classifiers = [
17
+ "Development Status :: 5 - Production/Stable",
18
+ "Intended Audience :: Developers",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.9",
21
+ "Programming Language :: Python :: 3.10",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Programming Language :: Python :: 3.13",
25
+ "Topic :: Internet :: WWW/HTTP",
26
+ "Topic :: Software Development :: Libraries :: Python Modules",
27
+ ]
28
+ dependencies = [
29
+ "click>=8.0,<9.0",
30
+ "cryptography>=50.0.0,<51",
31
+ "requests>=2.32.5,<2.33.0; python_version < '3.10'",
32
+ "requests>=2.33.0,<3.0.0; python_version >= '3.10'",
33
+ "beautifulsoup4>=4.12.0,<5.0.0",
34
+ "lxml>=4.9.0,<7.0.0",
35
+ "urllib3>=2.6.3,<2.7.0; python_version < '3.10'",
36
+ "urllib3>=2.7.0,<3.0.0; python_version >= '3.10'",
37
+ "fastapi>=0.128.8,<1.0; python_version < '3.10'",
38
+ "fastapi>=0.162.0,<1.0; python_version >= '3.10'",
39
+ "starlette>=1.0.1,<2.0; python_version >= '3.10'",
40
+ "uvicorn[standard]>=0.27.0,<1.0",
41
+ "python-dotenv>=1.2.1,<1.2.2; python_version < '3.10'",
42
+ "python-dotenv>=1.2.2; python_version >= '3.10'",
43
+ "markdown>=3.5.0,<4.0",
44
+ ]
45
+
46
+ [project.optional-dependencies]
47
+ rich = [
48
+ "rich>=13.0,<16.0",
49
+ ]
50
+ config = [
51
+ "pyyaml>=6.0,<7.0",
52
+ ]
53
+ async = [
54
+ "httpx>=0.27.0,<1.0",
55
+ ]
56
+ web = [
57
+ "fastapi>=0.128.8,<1.0; python_version < '3.10'",
58
+ "fastapi>=0.162.0,<1.0; python_version >= '3.10'",
59
+ "starlette>=1.0.1,<2.0; python_version >= '3.10'",
60
+ "uvicorn[standard]>=0.27.0,<1.0",
61
+ "python-dotenv>=1.2.1,<1.2.2; python_version < '3.10'",
62
+ "python-dotenv>=1.2.2; python_version >= '3.10'",
63
+ "markdown>=3.5.0,<4.0",
64
+ ]
65
+ pdf = [
66
+ "weasyprint>=60.0",
67
+ ]
68
+ mcp = [
69
+ "mcp>=1.0.0; python_version >= '3.10'",
70
+ ]
71
+ embedding = [
72
+ "sentence-transformers>=2.2.0,<6.0",
73
+ ]
74
+ storage = [
75
+ "boto3>=1.28.0,<2.0",
76
+ ]
77
+ llm = [
78
+ "openai>=1.0.0,<3.0",
79
+ "anthropic>=0.30.0,<2.0",
80
+ ]
81
+ dev = [
82
+ "pytest>=7.0,<10.0",
83
+ "pytest-cov>=4.0,<8.0",
84
+ "ruff>=0.8.0",
85
+ "pyyaml>=6.0,<7.0",
86
+ "httpx>=0.27.0,<1.0",
87
+ ]
88
+ # Gruppo convenienza: installa tutte le dipendenze opzionali utente (#136)
89
+ all = [
90
+ "geosition[async,web,mcp,pdf,config]",
91
+ ]
92
+
93
+ [project.urls]
94
+ Homepage = "https://github.com/arnaudbellemare/geosition"
95
+ Documentation = "https://github.com/arnaudbellemare/geosition#readme"
96
+ Repository = "https://github.com/arnaudbellemare/geosition"
97
+ Issues = "https://github.com/arnaudbellemare/geosition/issues"
98
+
99
+ [project.scripts]
100
+ geo = "geo_optimizer.cli.main:cli"
101
+ aiv = "geo_optimizer.cli.main:cli"
102
+ ai-visibility-audit = "geo_optimizer.cli.main:cli"
103
+ ai-citation-optimizer = "geo_optimizer.cli.main:cli"
104
+ ai-search-readiness = "geo_optimizer.cli.main:cli"
105
+ local-ai-presence-monitor = "geo_optimizer.cli.main:cli"
106
+ geo-mcp = "geo_optimizer.mcp.server:main"
107
+ geo-web = "geo_optimizer.web.cli:main"
108
+ geosition = "geo_optimizer.cli.geosition_cmd:geosition"
109
+
110
+ [tool.setuptools.packages.find]
111
+ where = ["src"]
112
+
113
+ [tool.setuptools.package-data]
114
+ # Solo i file compilati .mo — i sorgenti .po non appartengono al pacchetto distribuito (#135)
115
+ "geo_optimizer" = [
116
+ "py.typed",
117
+ "i18n/locales/*/LC_MESSAGES/*.mo",
118
+ "web/templates/*.html",
119
+ "web/templates/platform/*.html",
120
+ "web/templates/platform/site.css",
121
+ "web/templates/platform/assets/*",
122
+ "web/templates/platform/assets/avatars/*",
123
+ "web/templates/platform/assets/reference-amboras/*",
124
+ "web/docs/*.md",
125
+ "skills/catalog/README.md",
126
+ "skills/catalog/*/skill.yaml",
127
+ "skills/catalog/*/prompt.md",
128
+ ]
129
+
130
+ [tool.pytest.ini_options]
131
+ testpaths = ["tests"]
132
+ pythonpath = ["src"]
133
+ markers = [
134
+ "network: test che richiedono accesso rete (skip in CI con -m 'not network')",
135
+ ]
136
+
137
+ [tool.coverage.run]
138
+ source = ["geo_optimizer"]
139
+
140
+ [tool.coverage.report]
141
+ show_missing = true
142
+ skip_empty = true
143
+ exclude_lines = [
144
+ "pragma: no cover",
145
+ "if __name__ == .__main__.",
146
+ "if TYPE_CHECKING:",
147
+ ]
148
+
149
+ [tool.ruff]
150
+ line-length = 120
151
+ target-version = "py39"
152
+
153
+ [tool.ruff.lint]
154
+ select = ["E", "F", "W", "I", "UP", "B", "C4", "SIM"]
155
+ ignore = [
156
+ "E501", # Linee troppo lunghe (gestito con line-length)
157
+ "SIM108", # Operatore ternario (peggiora leggibilità in alcuni casi)
158
+ "SIM105", # contextlib.suppress (più verboso del try-except-pass)
159
+ "SIM114", # Combina if-branch (peggiora leggibilità del CLI output)
160
+ "SIM110", # Comprensione any() per for-return (non sempre più leggibile)
161
+ ]
162
+
163
+ [tool.ruff.lint.per-file-ignores]
164
+ "tests/test_integration.py" = ["E402"]
165
+ "src/geo_optimizer/cli/geosition_cmd.py" = ["UP006", "UP035", "UP045"]
166
+
167
+ [tool.mypy]
168
+ python_version = "3.9"
169
+ warn_return_any = true
170
+ warn_unused_configs = true
171
+ ignore_missing_imports = true
172
+ # Gradual adoption: strict on new modules, lenient on legacy
173
+ exclude = [
174
+ "tests/",
175
+ "build/",
176
+ "dist/",
177
+ ]
178
+
179
+ [[tool.mypy.overrides]]
180
+ module = [
181
+ "geo_optimizer.web.app",
182
+ "geo_optimizer.mcp.*",
183
+ "geo_optimizer.i18n.*",
184
+ "geo_optimizer.core.fixer",
185
+ "geo_optimizer.core.schema_injector",
186
+ "geo_optimizer.core.audit_cdn",
187
+ "geo_optimizer.core.llms_generator",
188
+ "geo_optimizer.utils.http",
189
+ "geo_optimizer.utils.http_async",
190
+ "geo_optimizer.models.project_config",
191
+ "geo_optimizer.skills.loader",
192
+ "mcp.*",
193
+ ]
194
+ ignore_errors = true
195
+
196
+ [[tool.mypy.overrides]]
197
+ module = "mcp.*"
198
+ follow_imports = "skip"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+