geosition 4.9.1__py3-none-any.whl

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 (337) hide show
  1. geo_optimizer/__init__.py +78 -0
  2. geo_optimizer/cli/__init__.py +1 -0
  3. geo_optimizer/cli/agent_cmd.py +143 -0
  4. geo_optimizer/cli/apply_cmd.py +75 -0
  5. geo_optimizer/cli/audit_cmd.py +409 -0
  6. geo_optimizer/cli/autopilot_cmd.py +99 -0
  7. geo_optimizer/cli/benchmark_cmd.py +159 -0
  8. geo_optimizer/cli/benchmark_formatter.py +249 -0
  9. geo_optimizer/cli/ci_formatter.py +331 -0
  10. geo_optimizer/cli/coherence_cmd.py +63 -0
  11. geo_optimizer/cli/collect_cmd.py +141 -0
  12. geo_optimizer/cli/content_cmd.py +112 -0
  13. geo_optimizer/cli/diff_cmd.py +75 -0
  14. geo_optimizer/cli/fix_cmd.py +167 -0
  15. geo_optimizer/cli/formatters.py +1042 -0
  16. geo_optimizer/cli/fullaudit_cmd.py +2111 -0
  17. geo_optimizer/cli/geosition_cmd.py +1058 -0
  18. geo_optimizer/cli/github_cmd.py +100 -0
  19. geo_optimizer/cli/github_formatter.py +101 -0
  20. geo_optimizer/cli/history_cmd.py +54 -0
  21. geo_optimizer/cli/html_formatter.py +474 -0
  22. geo_optimizer/cli/links_cmd.py +77 -0
  23. geo_optimizer/cli/llms_cmd.py +96 -0
  24. geo_optimizer/cli/logs_cmd.py +62 -0
  25. geo_optimizer/cli/main.py +204 -0
  26. geo_optimizer/cli/marketing_cmd.py +634 -0
  27. geo_optimizer/cli/monitor_cmd.py +72 -0
  28. geo_optimizer/cli/orchestrate_cmd.py +72 -0
  29. geo_optimizer/cli/pdf_formatter.py +26 -0
  30. geo_optimizer/cli/pipeline_cmd.py +134 -0
  31. geo_optimizer/cli/playbook_cmd.py +56 -0
  32. geo_optimizer/cli/rich_formatter.py +1220 -0
  33. geo_optimizer/cli/rivalry_cmd.py +532 -0
  34. geo_optimizer/cli/schema_cmd.py +212 -0
  35. geo_optimizer/cli/scoring_helpers.py +64 -0
  36. geo_optimizer/cli/seo_cmd.py +264 -0
  37. geo_optimizer/cli/snapshots_cmd.py +127 -0
  38. geo_optimizer/cli/track_cmd.py +85 -0
  39. geo_optimizer/core/__init__.py +1 -0
  40. geo_optimizer/core/action_intelligence.py +130 -0
  41. geo_optimizer/core/agent_endpoints.py +457 -0
  42. geo_optimizer/core/audit.py +1166 -0
  43. geo_optimizer/core/audit_aeo.py +255 -0
  44. geo_optimizer/core/audit_ai_discovery.py +190 -0
  45. geo_optimizer/core/audit_attribution.py +142 -0
  46. geo_optimizer/core/audit_brand.py +223 -0
  47. geo_optimizer/core/audit_cdn.py +161 -0
  48. geo_optimizer/core/audit_citation_map.py +102 -0
  49. geo_optimizer/core/audit_commerce.py +60 -0
  50. geo_optimizer/core/audit_content.py +156 -0
  51. geo_optimizer/core/audit_context_window.py +169 -0
  52. geo_optimizer/core/audit_conversion.py +493 -0
  53. geo_optimizer/core/audit_decay.py +147 -0
  54. geo_optimizer/core/audit_embedding.py +162 -0
  55. geo_optimizer/core/audit_freshness.py +195 -0
  56. geo_optimizer/core/audit_indexability.py +127 -0
  57. geo_optimizer/core/audit_indexnow.py +82 -0
  58. geo_optimizer/core/audit_instruction.py +236 -0
  59. geo_optimizer/core/audit_js.py +128 -0
  60. geo_optimizer/core/audit_links.py +325 -0
  61. geo_optimizer/core/audit_llms.py +229 -0
  62. geo_optimizer/core/audit_marketing/__init__.py +14 -0
  63. geo_optimizer/core/audit_marketing/analysis.py +1384 -0
  64. geo_optimizer/core/audit_marketing/orchestrator.py +110 -0
  65. geo_optimizer/core/audit_marketing/planning.py +438 -0
  66. geo_optimizer/core/audit_media.py +268 -0
  67. geo_optimizer/core/audit_meta.py +64 -0
  68. geo_optimizer/core/audit_negative.py +253 -0
  69. geo_optimizer/core/audit_perf.py +215 -0
  70. geo_optimizer/core/audit_persistence.py +116 -0
  71. geo_optimizer/core/audit_platform.py +208 -0
  72. geo_optimizer/core/audit_rag.py +148 -0
  73. geo_optimizer/core/audit_robots.py +122 -0
  74. geo_optimizer/core/audit_schema.py +150 -0
  75. geo_optimizer/core/audit_sentiment.py +154 -0
  76. geo_optimizer/core/audit_serp.py +676 -0
  77. geo_optimizer/core/audit_signals.py +59 -0
  78. geo_optimizer/core/audit_sxo.py +183 -0
  79. geo_optimizer/core/audit_tracking.py +346 -0
  80. geo_optimizer/core/audit_webmcp.py +150 -0
  81. geo_optimizer/core/batch_audit.py +203 -0
  82. geo_optimizer/core/benchmark/__init__.py +8 -0
  83. geo_optimizer/core/benchmark/citation_economics.py +305 -0
  84. geo_optimizer/core/benchmark/citation_share.py +92 -0
  85. geo_optimizer/core/benchmark/competitor_matrix.py +56 -0
  86. geo_optimizer/core/benchmark/competitors.py +64 -0
  87. geo_optimizer/core/benchmark/domains.py +14 -0
  88. geo_optimizer/core/benchmark/monitoring.py +73 -0
  89. geo_optimizer/core/benchmark/page_task.py +108 -0
  90. geo_optimizer/core/benchmark/runner.py +341 -0
  91. geo_optimizer/core/benchmark/schedule.py +71 -0
  92. geo_optimizer/core/benchmark/score.py +87 -0
  93. geo_optimizer/core/benchmark/store.py +665 -0
  94. geo_optimizer/core/benchmark/task_classifier.py +95 -0
  95. geo_optimizer/core/benchmark/unique_value.py +108 -0
  96. geo_optimizer/core/citability/__init__.py +418 -0
  97. geo_optimizer/core/citability/_helpers.py +236 -0
  98. geo_optimizer/core/citability/entity.py +443 -0
  99. geo_optimizer/core/citability/freshness.py +403 -0
  100. geo_optimizer/core/citability/platform.py +709 -0
  101. geo_optimizer/core/citability/signals.py +829 -0
  102. geo_optimizer/core/citability/sources.py +355 -0
  103. geo_optimizer/core/citability/structure.py +1139 -0
  104. geo_optimizer/core/citation_quality.py +172 -0
  105. geo_optimizer/core/coherence_analyzer.py +194 -0
  106. geo_optimizer/core/collection/__init__.py +20 -0
  107. geo_optimizer/core/collection/adapters/__init__.py +38 -0
  108. geo_optimizer/core/collection/adapters/brightdata_browser.py +129 -0
  109. geo_optimizer/core/collection/adapters/gemini_grounding.py +121 -0
  110. geo_optimizer/core/collection/adapters/manual.py +55 -0
  111. geo_optimizer/core/collection/adapters/perplexity.py +89 -0
  112. geo_optimizer/core/collection/normalize.py +283 -0
  113. geo_optimizer/core/collection/pipeline.py +204 -0
  114. geo_optimizer/core/collection/protocol.py +32 -0
  115. geo_optimizer/core/collection/store.py +101 -0
  116. geo_optimizer/core/collection/tracker_bridge.py +135 -0
  117. geo_optimizer/core/content_workflow.py +185 -0
  118. geo_optimizer/core/diffing.py +134 -0
  119. geo_optimizer/core/factual_accuracy.py +288 -0
  120. geo_optimizer/core/fixer.py +1251 -0
  121. geo_optimizer/core/gap_analysis.py +271 -0
  122. geo_optimizer/core/github_repo_audit.py +218 -0
  123. geo_optimizer/core/history.py +275 -0
  124. geo_optimizer/core/injection_detector.py +376 -0
  125. geo_optimizer/core/link_graph.py +170 -0
  126. geo_optimizer/core/llm_client.py +186 -0
  127. geo_optimizer/core/llms_generator.py +627 -0
  128. geo_optimizer/core/log_analyzer.py +165 -0
  129. geo_optimizer/core/monitor.py +312 -0
  130. geo_optimizer/core/orchestrator.py +137 -0
  131. geo_optimizer/core/playbooks.py +97 -0
  132. geo_optimizer/core/prompt_library.py +136 -0
  133. geo_optimizer/core/registry.py +210 -0
  134. geo_optimizer/core/schema_injector.py +362 -0
  135. geo_optimizer/core/schema_validator.py +153 -0
  136. geo_optimizer/core/scoring.py +226 -0
  137. geo_optimizer/core/search_measurement.py +101 -0
  138. geo_optimizer/core/seo_intelligence.py +843 -0
  139. geo_optimizer/core/site_coherence.py +95 -0
  140. geo_optimizer/core/site_integrator.py +91 -0
  141. geo_optimizer/core/snapshots.py +272 -0
  142. geo_optimizer/core/term_extractor.py +77 -0
  143. geo_optimizer/core/trust_stack.py +415 -0
  144. geo_optimizer/core/vertical_profile.py +375 -0
  145. geo_optimizer/i18n/__init__.py +151 -0
  146. geo_optimizer/i18n/locales/en/LC_MESSAGES/geo_optimizer.mo +0 -0
  147. geo_optimizer/i18n/locales/it/LC_MESSAGES/geo_optimizer.mo +0 -0
  148. geo_optimizer/mcp/__init__.py +3 -0
  149. geo_optimizer/mcp/server.py +797 -0
  150. geo_optimizer/models/__init__.py +1 -0
  151. geo_optimizer/models/config.py +767 -0
  152. geo_optimizer/models/project_config.py +165 -0
  153. geo_optimizer/models/results/__init__.py +295 -0
  154. geo_optimizer/models/results/analytics.py +286 -0
  155. geo_optimizer/models/results/audit.py +512 -0
  156. geo_optimizer/models/results/benchmark.py +331 -0
  157. geo_optimizer/models/results/citability.py +149 -0
  158. geo_optimizer/models/results/collection.py +82 -0
  159. geo_optimizer/models/results/core.py +203 -0
  160. geo_optimizer/models/results/marketing.py +602 -0
  161. geo_optimizer/models/results/rag.py +92 -0
  162. geo_optimizer/models/results/seo.py +212 -0
  163. geo_optimizer/models/results/trust.py +166 -0
  164. geo_optimizer/py.typed +0 -0
  165. geo_optimizer/saas/__init__.py +8 -0
  166. geo_optimizer/saas/auth.py +169 -0
  167. geo_optimizer/saas/domain_verify.py +82 -0
  168. geo_optimizer/saas/models.py +252 -0
  169. geo_optimizer/saas/search_connections.py +187 -0
  170. geo_optimizer/saas/service.py +2181 -0
  171. geo_optimizer/saas/store.py +1537 -0
  172. geo_optimizer/saas/supabase_store.py +1213 -0
  173. geo_optimizer/saas/weekly_evidence.py +398 -0
  174. geo_optimizer/skills/__init__.py +22 -0
  175. geo_optimizer/skills/catalog/README.md +33 -0
  176. geo_optimizer/skills/catalog/_template/prompt.md +25 -0
  177. geo_optimizer/skills/catalog/_template/skill.yaml +27 -0
  178. geo_optimizer/skills/catalog/geo_ai_discovery_readiness/prompt.md +33 -0
  179. geo_optimizer/skills/catalog/geo_ai_discovery_readiness/skill.yaml +79 -0
  180. geo_optimizer/skills/catalog/geo_audit_orchestrator/prompt.md +30 -0
  181. geo_optimizer/skills/catalog/geo_audit_orchestrator/skill.yaml +65 -0
  182. geo_optimizer/skills/catalog/geo_citation_readiness/prompt.md +32 -0
  183. geo_optimizer/skills/catalog/geo_citation_readiness/skill.yaml +79 -0
  184. geo_optimizer/skills/catalog/geo_competitor_comparison/prompt.md +32 -0
  185. geo_optimizer/skills/catalog/geo_competitor_comparison/skill.yaml +76 -0
  186. geo_optimizer/skills/catalog/geo_foundation_repair/prompt.md +31 -0
  187. geo_optimizer/skills/catalog/geo_foundation_repair/skill.yaml +72 -0
  188. geo_optimizer/skills/catalog/geo_schema_readiness/prompt.md +33 -0
  189. geo_optimizer/skills/catalog/geo_schema_readiness/skill.yaml +76 -0
  190. geo_optimizer/skills/catalog/geo_trust_signal_review/prompt.md +33 -0
  191. geo_optimizer/skills/catalog/geo_trust_signal_review/skill.yaml +76 -0
  192. geo_optimizer/skills/loader.py +118 -0
  193. geo_optimizer/skills/models.py +69 -0
  194. geo_optimizer/skills/validator.py +179 -0
  195. geo_optimizer/storage/__init__.py +15 -0
  196. geo_optimizer/storage/artifacts.py +194 -0
  197. geo_optimizer/storage/paths.py +82 -0
  198. geo_optimizer/storage/platform.py +50 -0
  199. geo_optimizer/utils/__init__.py +1 -0
  200. geo_optimizer/utils/cache.py +156 -0
  201. geo_optimizer/utils/http.py +332 -0
  202. geo_optimizer/utils/http_async.py +192 -0
  203. geo_optimizer/utils/robots_parser.py +252 -0
  204. geo_optimizer/utils/seo_program_note.py +14 -0
  205. geo_optimizer/utils/validators.py +250 -0
  206. geo_optimizer/web/__init__.py +12 -0
  207. geo_optimizer/web/app.py +1896 -0
  208. geo_optimizer/web/badge.py +131 -0
  209. geo_optimizer/web/cli.py +37 -0
  210. geo_optimizer/web/docs/ai-bots-reference.md +277 -0
  211. geo_optimizer/web/docs/ai-context.md +235 -0
  212. geo_optimizer/web/docs/ci-cd.md +227 -0
  213. geo_optimizer/web/docs/geo-audit.md +290 -0
  214. geo_optimizer/web/docs/geo-diff.md +38 -0
  215. geo_optimizer/web/docs/geo-fix.md +111 -0
  216. geo_optimizer/web/docs/geo-history.md +65 -0
  217. geo_optimizer/web/docs/geo-methods.md +327 -0
  218. geo_optimizer/web/docs/geo-monitor.md +78 -0
  219. geo_optimizer/web/docs/geo-snapshots.md +103 -0
  220. geo_optimizer/web/docs/geo-track.md +71 -0
  221. geo_optimizer/web/docs/getting-started.md +132 -0
  222. geo_optimizer/web/docs/index.md +50 -0
  223. geo_optimizer/web/docs/llms-txt.md +208 -0
  224. geo_optimizer/web/docs/mcp-server.md +410 -0
  225. geo_optimizer/web/docs/schema-injector.md +444 -0
  226. geo_optimizer/web/docs/scoring-rubric.md +27 -0
  227. geo_optimizer/web/docs/search-measurement.md +21 -0
  228. geo_optimizer/web/docs/skill-files.md +72 -0
  229. geo_optimizer/web/docs/skill-roadmap.md +193 -0
  230. geo_optimizer/web/docs/skill-system.md +101 -0
  231. geo_optimizer/web/docs/troubleshooting.md +297 -0
  232. geo_optimizer/web/platform_routes.py +1432 -0
  233. geo_optimizer/web/templates/compare.html +223 -0
  234. geo_optimizer/web/templates/docs.html +147 -0
  235. geo_optimizer/web/templates/index.html +609 -0
  236. geo_optimizer/web/templates/manifesto.html +508 -0
  237. geo_optimizer/web/templates/platform/assets/ai-companies.webp +0 -0
  238. geo_optimizer/web/templates/platform/assets/apple-touch-icon.png +0 -0
  239. geo_optimizer/web/templates/platform/assets/avatars/agency-owner.png +0 -0
  240. geo_optimizer/web/templates/platform/assets/avatars/content-lead.png +0 -0
  241. geo_optimizer/web/templates/platform/assets/avatars/editor.png +0 -0
  242. geo_optimizer/web/templates/platform/assets/avatars/founder.png +0 -0
  243. geo_optimizer/web/templates/platform/assets/avatars/independent-analyst.png +0 -0
  244. geo_optimizer/web/templates/platform/assets/avatars/operator.png +0 -0
  245. geo_optimizer/web/templates/platform/assets/cobe.esm.js +1 -0
  246. geo_optimizer/web/templates/platform/assets/commerce-ai-assistant.png +0 -0
  247. geo_optimizer/web/templates/platform/assets/commerce-shopping-bag.png +0 -0
  248. geo_optimizer/web/templates/platform/assets/commerce-storefront.png +0 -0
  249. geo_optimizer/web/templates/platform/assets/dashboard-loop.js +118 -0
  250. geo_optimizer/web/templates/platform/assets/earn-per-citation.webp +0 -0
  251. geo_optimizer/web/templates/platform/assets/favicon-16.png +0 -0
  252. geo_optimizer/web/templates/platform/assets/favicon-32.png +0 -0
  253. geo_optimizer/web/templates/platform/assets/favicon-48.png +0 -0
  254. geo_optimizer/web/templates/platform/assets/favicon-64.png +0 -0
  255. geo_optimizer/web/templates/platform/assets/favicon.ico +0 -0
  256. geo_optimizer/web/templates/platform/assets/favicon.svg +3 -0
  257. geo_optimizer/web/templates/platform/assets/hero-bg.png +0 -0
  258. geo_optimizer/web/templates/platform/assets/hero-mountain.png +0 -0
  259. geo_optimizer/web/templates/platform/assets/landing-refresh.css +646 -0
  260. geo_optimizer/web/templates/platform/assets/lenis.LICENSE.txt +9 -0
  261. geo_optimizer/web/templates/platform/assets/lenis.min.js +2 -0
  262. geo_optimizer/web/templates/platform/assets/lenis.min.js.map +1 -0
  263. geo_optimizer/web/templates/platform/assets/mobile-cta-trees.png +0 -0
  264. geo_optimizer/web/templates/platform/assets/mobile-cta-trees.webp +0 -0
  265. geo_optimizer/web/templates/platform/assets/platform-icon-claude.svg +1 -0
  266. geo_optimizer/web/templates/platform/assets/platform-icon-google.svg +1 -0
  267. geo_optimizer/web/templates/platform/assets/platform-icon-googlegemini.svg +1 -0
  268. geo_optimizer/web/templates/platform/assets/platform-icon-perplexity.svg +1 -0
  269. geo_optimizer/web/templates/platform/assets/platform-icons-LICENSE.txt +30 -0
  270. geo_optimizer/web/templates/platform/assets/publishers-data.webp +0 -0
  271. geo_optimizer/web/templates/platform/assets/reel-citrus-poster.jpg +0 -0
  272. geo_optimizer/web/templates/platform/assets/reel-citrus.mp4 +0 -0
  273. geo_optimizer/web/templates/platform/assets/reel-coffee-poster.jpg +0 -0
  274. geo_optimizer/web/templates/platform/assets/reel-coffee-v2.mp4 +0 -0
  275. geo_optimizer/web/templates/platform/assets/reel-run-poster.jpg +0 -0
  276. geo_optimizer/web/templates/platform/assets/reel-run.mp4 +0 -0
  277. geo_optimizer/web/templates/platform/assets/reel-skincare-poster.jpg +0 -0
  278. geo_optimizer/web/templates/platform/assets/reel-skincare-v2.mp4 +0 -0
  279. geo_optimizer/web/templates/platform/assets/reference-amboras/README.md +6 -0
  280. geo_optimizer/web/templates/platform/assets/reference-amboras/amber-serum.webp +0 -0
  281. geo_optimizer/web/templates/platform/assets/reference-amboras/atelier-hero-loop.mp4 +0 -0
  282. geo_optimizer/web/templates/platform/assets/reference-amboras/atelier-hero-poster.webp +0 -0
  283. geo_optimizer/web/templates/platform/assets/reference-amboras/ceramic-cup.webp +0 -0
  284. geo_optimizer/web/templates/platform/assets/reference-amboras/email-preview.png +0 -0
  285. geo_optimizer/web/templates/platform/assets/reference-amboras/glass-perfume.webp +0 -0
  286. geo_optimizer/web/templates/platform/assets/reference-amboras/green-headphones.webp +0 -0
  287. geo_optimizer/web/templates/platform/assets/reference-amboras/halcy-hero-converted-v4.webm +0 -0
  288. geo_optimizer/web/templates/platform/assets/reference-amboras/halcy-hero-poster.webp +0 -0
  289. geo_optimizer/web/templates/platform/assets/reference-amboras/hearthen-animated-hero-desktop.webm +0 -0
  290. geo_optimizer/web/templates/platform/assets/reference-amboras/hearthen-hero-poster.webp +0 -0
  291. geo_optimizer/web/templates/platform/assets/reference-amboras/intro-agent-tux.webp +0 -0
  292. geo_optimizer/web/templates/platform/assets/reference-amboras/intro-bag.webp +0 -0
  293. geo_optimizer/web/templates/platform/assets/reference-amboras/intro-store.webp +0 -0
  294. geo_optimizer/web/templates/platform/assets/reference-amboras/laps-hero-loop.mp4 +0 -0
  295. geo_optimizer/web/templates/platform/assets/reference-amboras/laps-hero-poster.webp +0 -0
  296. geo_optimizer/web/templates/platform/assets/reference-amboras/leather-bag.webp +0 -0
  297. geo_optimizer/web/templates/platform/assets/reference-amboras/lift-hero-loop.mp4 +0 -0
  298. geo_optimizer/web/templates/platform/assets/reference-amboras/lift-hero-poster.webp +0 -0
  299. geo_optimizer/web/templates/platform/assets/reference-amboras/linen-towels.webp +0 -0
  300. geo_optimizer/web/templates/platform/assets/reference-amboras/olive-oil.webp +0 -0
  301. geo_optimizer/web/templates/platform/assets/reference-amboras/sculptural-vase.webp +0 -0
  302. geo_optimizer/web/templates/platform/assets/reference-amboras/silver-watch.webp +0 -0
  303. geo_optimizer/web/templates/platform/assets/reference-amboras/stayput-hero-poster.webp +0 -0
  304. geo_optimizer/web/templates/platform/assets/reference-amboras/stayput-hero-top-cropped-v3.webm +0 -0
  305. geo_optimizer/web/templates/platform/assets/reference-amboras/store-design-poster.webp +0 -0
  306. geo_optimizer/web/templates/platform/assets/reference-amboras/store-design-smooth-loop.mp4 +0 -0
  307. geo_optimizer/web/templates/platform/assets/reference-amboras/terracotta-vase.webp +0 -0
  308. geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2-poster.webp +0 -0
  309. geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2-smooth.mp4 +0 -0
  310. geo_optimizer/web/templates/platform/assets/reference-amboras/testing-v2.mp4 +0 -0
  311. geo_optimizer/web/templates/platform/assets/reference-amboras/zahra-hero-loop-v2.mp4 +0 -0
  312. geo_optimizer/web/templates/platform/assets/reference-amboras/zahra-loop-poster.webp +0 -0
  313. geo_optimizer/web/templates/platform/assets/reference-amboras/zippa-hero-pingpong-v2.mp4 +0 -0
  314. geo_optimizer/web/templates/platform/assets/reference-amboras/zippa-hero-poster-v2.webp +0 -0
  315. geo_optimizer/web/templates/platform/assets/smooth-scroll.js +44 -0
  316. geo_optimizer/web/templates/platform/assets/terminal-cta-landscape.png +0 -0
  317. geo_optimizer/web/templates/platform/assets/terminal-cta-reference.jpg +0 -0
  318. geo_optimizer/web/templates/platform/assets/terminal-cta-scene.jpg +0 -0
  319. geo_optimizer/web/templates/platform/assets/terminal-cta-trees-crop.png +0 -0
  320. geo_optimizer/web/templates/platform/assets/terminal-cta-trees.png +0 -0
  321. geo_optimizer/web/templates/platform/dashboard.html +1591 -0
  322. geo_optimizer/web/templates/platform/forgot-password.html +80 -0
  323. geo_optimizer/web/templates/platform/gestion-velora.html +299 -0
  324. geo_optimizer/web/templates/platform/index.html +209 -0
  325. geo_optimizer/web/templates/platform/landing.html +605 -0
  326. geo_optimizer/web/templates/platform/login.html +64 -0
  327. geo_optimizer/web/templates/platform/register.html +105 -0
  328. geo_optimizer/web/templates/platform/reset-password.html +75 -0
  329. geo_optimizer/web/templates/platform/site.css +9480 -0
  330. geo_optimizer/web/templates/research.html +198 -0
  331. geo_optimizer/web/templates/roadmap.html +165 -0
  332. geosition-4.9.1.dist-info/METADATA +241 -0
  333. geosition-4.9.1.dist-info/RECORD +337 -0
  334. geosition-4.9.1.dist-info/WHEEL +5 -0
  335. geosition-4.9.1.dist-info/entry_points.txt +10 -0
  336. geosition-4.9.1.dist-info/licenses/LICENSE +73 -0
  337. geosition-4.9.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,78 @@
1
+ """
2
+ GEOSITION — Generative Engine Optimization Toolkit
3
+
4
+ Make websites visible and citable by AI search engines
5
+ (ChatGPT, Perplexity, Claude, Gemini).
6
+
7
+ Based on the Princeton KDD 2024 research paper (arxiv.org/abs/2311.09735).
8
+
9
+ Programmatic usage::
10
+
11
+ from geo_optimizer import audit, AuditResult
12
+ result = audit("https://example.com")
13
+ print(result.score, result.band)
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import warnings
19
+
20
+ # Suppress persistent urllib3 LibreSSL runtime warning in CLI contexts.
21
+ warnings.filterwarnings(
22
+ "ignore",
23
+ message=r"urllib3 v2 only supports OpenSSL 1\.1\.1\+.*",
24
+ category=Warning,
25
+ )
26
+
27
+ __version__ = "4.9.1"
28
+
29
+ # ─── Public API ──────────────────────────────────────────────────────────────
30
+
31
+ from geo_optimizer.core.audit import run_full_audit as audit # noqa: E402
32
+ from geo_optimizer.core.audit import run_full_audit_async as audit_async # noqa: E402
33
+ from geo_optimizer.core.registry import AuditCheck, CheckRegistry, CheckResult # noqa: E402
34
+ from geo_optimizer.models.results import ( # noqa: E402
35
+ AuditResult,
36
+ CitabilityResult,
37
+ ContentResult,
38
+ FixItem,
39
+ FixPlan,
40
+ LlmsTxtResult,
41
+ MetaResult,
42
+ MethodScore,
43
+ NextAction,
44
+ RobotsResult,
45
+ SchemaAnalysis,
46
+ SchemaResult,
47
+ SitemapUrl,
48
+ VerticalAuditResult,
49
+ VerticalSignal,
50
+ )
51
+
52
+ __all__ = [
53
+ # Version
54
+ "__version__",
55
+ # Main functions
56
+ "audit",
57
+ "audit_async",
58
+ # Plugin system
59
+ "CheckRegistry",
60
+ "AuditCheck",
61
+ "CheckResult",
62
+ # Result dataclasses
63
+ "AuditResult",
64
+ "RobotsResult",
65
+ "LlmsTxtResult",
66
+ "SchemaResult",
67
+ "MetaResult",
68
+ "ContentResult",
69
+ "CitabilityResult",
70
+ "MethodScore",
71
+ "NextAction",
72
+ "FixPlan",
73
+ "FixItem",
74
+ "SchemaAnalysis",
75
+ "SitemapUrl",
76
+ "VerticalAuditResult",
77
+ "VerticalSignal",
78
+ ]
@@ -0,0 +1 @@
1
+ from __future__ import annotations
@@ -0,0 +1,143 @@
1
+ """
2
+ CLI command: geo agent
3
+
4
+ Generates WebMCP / tool-calling ready endpoints so AI agents can use your
5
+ site as a tool. Future-proofs for the agent era.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ import click
14
+
15
+ from geo_optimizer.core.agent_endpoints import run_agent_endpoint_generator
16
+ from geo_optimizer.utils.validators import validate_public_url
17
+
18
+
19
+ @click.command("agent")
20
+ @click.option("--url", required=True, help="URL of the site to prepare for AI agents")
21
+ @click.option(
22
+ "--output-dir",
23
+ default="./agent-endpoints",
24
+ show_default=True,
25
+ help="Directory to write generated endpoint files",
26
+ )
27
+ @click.option(
28
+ "--apply",
29
+ "do_apply",
30
+ is_flag=True,
31
+ help="Write files to output directory (default: preview only)",
32
+ )
33
+ def agent_cmd(url: str, output_dir: str, do_apply: bool) -> None:
34
+ """Generate WebMCP / tool-calling endpoints for AI agent access.
35
+
36
+ Makes your site callable as a tool by AI agents (Claude, ChatGPT,
37
+ Perplexity, etc.). Generates the full endpoint stack:
38
+
39
+ \b
40
+ .well-known/ai.txt — agent declaration
41
+ ai/summary.json — machine-readable site identity
42
+ ai/faq.json — answers agents can surface directly
43
+ ai/service.json — service capabilities
44
+ ai/tools.json — WebMCP tool definitions
45
+ + potentialAction JSON-LD and WebMCP HTML snippets
46
+
47
+ \b
48
+ Examples:
49
+ geo agent --url https://yoursite.com
50
+ geo agent --url https://yoursite.com --apply
51
+ geo agent --url https://yoursite.com --apply --output-dir ./public
52
+ """
53
+ # Validate URL
54
+ safe, reason = validate_public_url(url)
55
+ safe_url = url.rstrip("/")
56
+ if not safe:
57
+ click.echo(f"\n❌ Unsafe URL: {reason}", err=True)
58
+ sys.exit(1)
59
+
60
+ click.echo(f"🤖 Checking agent readiness for {safe_url} ...", err=True)
61
+
62
+ result = run_agent_endpoint_generator(safe_url)
63
+
64
+ # Status summary
65
+ click.echo(f"\n📊 Agent Readiness — {result.endpoints_present}/5 endpoints present\n")
66
+
67
+ checks = [
68
+ ("/.well-known/ai.txt", result.has_well_known_ai),
69
+ ("/ai/summary.json", result.has_summary),
70
+ ("/ai/faq.json", result.has_faq),
71
+ ("/ai/service.json", result.has_service),
72
+ ("/ai/tools.json", result.has_tools),
73
+ ]
74
+ for path, present in checks:
75
+ icon = "✅" if present else "❌"
76
+ click.echo(f" {icon} {path}")
77
+
78
+ if result.agent_ready:
79
+ click.echo("\n✅ Site is agent-ready!\n")
80
+ else:
81
+ click.echo(f"\n⚠️ {5 - result.endpoints_present} endpoint(s) missing — generating now...\n")
82
+
83
+ if not result.files:
84
+ click.echo("Nothing to generate — all endpoints already present.")
85
+ _show_snippets(result)
86
+ return
87
+
88
+ # List what will be generated
89
+ click.echo(f"📋 {len(result.files)} file(s) to generate:\n")
90
+ for f in result.files:
91
+ click.echo(f" → {f.path}")
92
+ click.echo(f" {f.description}\n")
93
+
94
+ if not do_apply:
95
+ # Preview mode
96
+ click.echo("=" * 60)
97
+ click.echo("PREVIEW (use --apply to write the files)")
98
+ click.echo("=" * 60)
99
+ for f in result.files:
100
+ click.echo(f"\n{'─' * 40}")
101
+ click.echo(f"📄 {f.path}")
102
+ click.echo(f"{'─' * 40}")
103
+ lines = f.content.splitlines()
104
+ if len(lines) > 25:
105
+ click.echo("\n".join(lines[:25]))
106
+ click.echo(f"\n ... ({len(lines) - 25} more lines)")
107
+ else:
108
+ click.echo(f.content)
109
+
110
+ click.echo(f"\n💡 Run: geo agent --url {url} --apply")
111
+ else:
112
+ # Write files
113
+ out = Path(output_dir)
114
+ out.mkdir(parents=True, exist_ok=True)
115
+ for f in result.files:
116
+ dest = out / f.path
117
+ dest.parent.mkdir(parents=True, exist_ok=True)
118
+ dest.write_text(f.content, encoding="utf-8")
119
+ click.echo(f" ✅ {dest}")
120
+
121
+ click.echo(f"\n✅ {len(result.files)} file(s) written to {out}/")
122
+ click.echo("\n📁 Deploy these files to your web root so agents can reach them at:")
123
+ for f in result.files:
124
+ click.echo(f" {safe_url}/{f.path}")
125
+
126
+ _show_snippets(result)
127
+
128
+
129
+ def _show_snippets(result) -> None:
130
+ """Print developer snippets (always shown, not written to disk)."""
131
+ if not result.snippets:
132
+ return
133
+
134
+ click.echo("\n" + "=" * 60)
135
+ click.echo("DEVELOPER SNIPPETS — add these to your site code")
136
+ click.echo("=" * 60)
137
+
138
+ for s in result.snippets:
139
+ click.echo(f"\n{'─' * 40}")
140
+ click.echo(f"📎 {s.path}")
141
+ click.echo(f" {s.description}")
142
+ click.echo(f"{'─' * 40}")
143
+ click.echo(s.content)
@@ -0,0 +1,75 @@
1
+ """
2
+ CLI command: geo apply
3
+
4
+ Apply generated GEO fixes directly to a local repository with stack-aware routing.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from pathlib import Path
10
+
11
+ import click
12
+
13
+
14
+ @click.command(name="apply")
15
+ @click.option("--url", required=True, help="Site URL to audit and generate fixes from")
16
+ @click.option("--repo", "repo_path", default=".", show_default=True, help="Local repo path to apply fixes into")
17
+ @click.option(
18
+ "--only",
19
+ default=None,
20
+ help="Filter categories: robots,llms,schema,meta,ai_discovery,content,vertical",
21
+ )
22
+ @click.option(
23
+ "--vertical",
24
+ default="auto",
25
+ type=click.Choice(
26
+ [
27
+ "auto",
28
+ "generic",
29
+ "ecommerce-retail",
30
+ "travel-hospitality",
31
+ "healthcare-dental",
32
+ "real-estate-proptech",
33
+ "legal-professional-services",
34
+ "manufacturing-industrial-b2b",
35
+ "financial-services-insurance",
36
+ "saas-technology",
37
+ "education-edtech-k12",
38
+ "local-home-services",
39
+ ],
40
+ case_sensitive=False,
41
+ ),
42
+ show_default=True,
43
+ )
44
+ @click.option(
45
+ "--market-locale",
46
+ default="en",
47
+ type=click.Choice(["en", "fr", "en-fr"], case_sensitive=False),
48
+ show_default=True,
49
+ )
50
+ def apply_cmd(url, repo_path, only, vertical, market_locale):
51
+ """Run audit+fix and apply file-safe fixes to a local project."""
52
+ from geo_optimizer.core.audit import run_full_audit
53
+ from geo_optimizer.core.fixer import run_all_fixes
54
+ from geo_optimizer.core.site_integrator import apply_fix_plan_to_repo
55
+
56
+ only_set = {c.strip().lower() for c in only.split(",")} if only else None
57
+
58
+ click.echo("⏳ Running audit and generating fix plan...", err=True)
59
+ result = run_full_audit(url, vertical=vertical, market_locale=market_locale)
60
+ plan = run_all_fixes(url=url, audit_result=result, only=only_set)
61
+
62
+ if not plan.fixes:
63
+ click.echo("✅ No applicable fixes generated.")
64
+ return
65
+
66
+ repo = Path(repo_path).resolve()
67
+ outcome = apply_fix_plan_to_repo(repo, plan.fixes)
68
+
69
+ click.echo(f"✅ Applied GEO fixes into: {repo}")
70
+ click.echo(f"Stack detected: {outcome.stack}")
71
+ click.echo(f"Applied files: {len(outcome.applied_files)}")
72
+ for p in outcome.applied_files[:20]:
73
+ click.echo(f" - {p}")
74
+ if outcome.manual_steps:
75
+ click.echo("⚠️ Manual snippet steps recorded in geo-manual-steps.md")