bmad-plus 0.4.0 → 0.4.1
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.
- package/CHANGELOG.md +18 -0
- package/README.md +12 -56
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +452 -452
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/dossier-template.md +116 -116
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +100 -100
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +130 -130
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/psychoprofile.md +69 -69
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +281 -281
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/mcp-client.py +136 -136
- package/package.json +1 -1
- package/readme-international/README.de.md +1 -1
- package/readme-international/README.es.md +1 -1
- package/readme-international/README.fr.md +1 -1
- package/tools/cli/commands/install.js +74 -46
- package/tools/cli/i18n.js +501 -0
- package/oveanet-pack/animated-website/DEPLOYMENT.md +0 -104
- package/oveanet-pack/animated-website/README.md +0 -63
- package/oveanet-pack/animated-website/agent/animated-website-agent.md +0 -325
- package/oveanet-pack/animated-website/agent.yaml +0 -63
- package/oveanet-pack/animated-website/templates/animated-website-workflow.md +0 -55
- package/oveanet-pack/seo-audit-360/DEPLOYMENT.md +0 -115
- package/oveanet-pack/seo-audit-360/README.md +0 -66
- package/oveanet-pack/seo-audit-360/SKILL.md +0 -171
- package/oveanet-pack/seo-audit-360/agent/seo-chief.md +0 -294
- package/oveanet-pack/seo-audit-360/agent/seo-judge.md +0 -241
- package/oveanet-pack/seo-audit-360/agent/seo-scout.md +0 -171
- package/oveanet-pack/seo-audit-360/agent.yaml +0 -70
- package/oveanet-pack/seo-audit-360/checklist.md +0 -140
- package/oveanet-pack/seo-audit-360/extensions/google-analytics/EXTENSION.md +0 -79
- package/oveanet-pack/seo-audit-360/extensions/google-analytics/ga4_client.py +0 -200
- package/oveanet-pack/seo-audit-360/extensions/google-analytics/requirements.txt +0 -4
- package/oveanet-pack/seo-audit-360/extensions/google-search-console/EXTENSION.md +0 -109
- package/oveanet-pack/seo-audit-360/extensions/google-search-console/gsc_client.py +0 -186
- package/oveanet-pack/seo-audit-360/extensions/google-search-console/requirements.txt +0 -4
- package/oveanet-pack/seo-audit-360/hooks/seo-check.sh +0 -95
- package/oveanet-pack/seo-audit-360/pagespeed-playbook.md +0 -320
- package/oveanet-pack/seo-audit-360/ref/audit-schema.json +0 -187
- package/oveanet-pack/seo-audit-360/ref/cwv-thresholds.md +0 -87
- package/oveanet-pack/seo-audit-360/ref/eeat-criteria.md +0 -123
- package/oveanet-pack/seo-audit-360/ref/geo-signals.md +0 -167
- package/oveanet-pack/seo-audit-360/ref/hreflang-rules.md +0 -153
- package/oveanet-pack/seo-audit-360/ref/quality-gates.md +0 -133
- package/oveanet-pack/seo-audit-360/ref/schema-catalog.md +0 -91
- package/oveanet-pack/seo-audit-360/ref/schema-templates.json +0 -356
- package/oveanet-pack/seo-audit-360/requirements.txt +0 -14
- package/oveanet-pack/seo-audit-360/scripts/__pycache__/seo_crawl.cpython-314.pyc +0 -0
- package/oveanet-pack/seo-audit-360/scripts/__pycache__/seo_parse.cpython-314.pyc +0 -0
- package/oveanet-pack/seo-audit-360/scripts/install.ps1 +0 -53
- package/oveanet-pack/seo-audit-360/scripts/install.sh +0 -48
- package/oveanet-pack/seo-audit-360/scripts/seo_apis.py +0 -464
- package/oveanet-pack/seo-audit-360/scripts/seo_crawl.py +0 -282
- package/oveanet-pack/seo-audit-360/scripts/seo_fetch.py +0 -231
- package/oveanet-pack/seo-audit-360/scripts/seo_parse.py +0 -255
- package/oveanet-pack/seo-audit-360/scripts/seo_report.py +0 -403
- package/oveanet-pack/seo-audit-360/scripts/seo_screenshot.py +0 -202
- package/oveanet-pack/seo-audit-360/templates/seo-audit-workflow.md +0 -241
- package/oveanet-pack/seo-audit-360/tests/__pycache__/test_crawl.cpython-314-pytest-9.0.2.pyc +0 -0
- package/oveanet-pack/seo-audit-360/tests/__pycache__/test_parse.cpython-314-pytest-9.0.2.pyc +0 -0
- package/oveanet-pack/seo-audit-360/tests/fixtures/sample_page.html +0 -62
- package/oveanet-pack/seo-audit-360/tests/test_apis.py +0 -75
- package/oveanet-pack/seo-audit-360/tests/test_crawl.py +0 -121
- package/oveanet-pack/seo-audit-360/tests/test_fetch.py +0 -70
- package/oveanet-pack/seo-audit-360/tests/test_parse.py +0 -184
- package/oveanet-pack/universal-backup/DEPLOYMENT.md +0 -80
- package/oveanet-pack/universal-backup/README.md +0 -58
- package/oveanet-pack/universal-backup/agent/backup-agent.md +0 -71
- package/oveanet-pack/universal-backup/agent.yaml +0 -45
- package/oveanet-pack/universal-backup/templates/backup-workflow.md +0 -51
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"meta": {
|
|
3
|
-
"author": "Laurent Rochetta",
|
|
4
|
-
"engine": "BMAD+ SEO Engine v2.0",
|
|
5
|
-
"schema_org_version": "29.4",
|
|
6
|
-
"last_updated": "2026-03-19"
|
|
7
|
-
},
|
|
8
|
-
"templates": [
|
|
9
|
-
{
|
|
10
|
-
"type": "Organization",
|
|
11
|
-
"use_case": "Company/brand homepage",
|
|
12
|
-
"template": {
|
|
13
|
-
"@context": "https://schema.org",
|
|
14
|
-
"@type": "Organization",
|
|
15
|
-
"name": "[Company Name]",
|
|
16
|
-
"url": "[Website URL]",
|
|
17
|
-
"logo": "[Logo URL]",
|
|
18
|
-
"description": "[Company description]",
|
|
19
|
-
"foundingDate": "[YYYY]",
|
|
20
|
-
"contactPoint": {
|
|
21
|
-
"@type": "ContactPoint",
|
|
22
|
-
"telephone": "[Phone]",
|
|
23
|
-
"contactType": "customer service",
|
|
24
|
-
"availableLanguage": ["English", "French"]
|
|
25
|
-
},
|
|
26
|
-
"sameAs": [
|
|
27
|
-
"[Facebook URL]",
|
|
28
|
-
"[LinkedIn URL]",
|
|
29
|
-
"[Twitter URL]",
|
|
30
|
-
"[YouTube URL]"
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"type": "LocalBusiness",
|
|
36
|
-
"use_case": "Physical business location",
|
|
37
|
-
"template": {
|
|
38
|
-
"@context": "https://schema.org",
|
|
39
|
-
"@type": "LocalBusiness",
|
|
40
|
-
"name": "[Business Name]",
|
|
41
|
-
"url": "[Website URL]",
|
|
42
|
-
"image": "[Photo URL]",
|
|
43
|
-
"telephone": "[Phone]",
|
|
44
|
-
"priceRange": "[$$]",
|
|
45
|
-
"address": {
|
|
46
|
-
"@type": "PostalAddress",
|
|
47
|
-
"streetAddress": "[Street]",
|
|
48
|
-
"addressLocality": "[City]",
|
|
49
|
-
"addressRegion": "[State/Region]",
|
|
50
|
-
"postalCode": "[ZIP]",
|
|
51
|
-
"addressCountry": "[Country Code]"
|
|
52
|
-
},
|
|
53
|
-
"geo": {
|
|
54
|
-
"@type": "GeoCoordinates",
|
|
55
|
-
"latitude": "[Lat]",
|
|
56
|
-
"longitude": "[Long]"
|
|
57
|
-
},
|
|
58
|
-
"openingHoursSpecification": [
|
|
59
|
-
{
|
|
60
|
-
"@type": "OpeningHoursSpecification",
|
|
61
|
-
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
|
62
|
-
"opens": "09:00",
|
|
63
|
-
"closes": "18:00"
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"type": "Article",
|
|
70
|
-
"use_case": "Blog posts, articles",
|
|
71
|
-
"template": {
|
|
72
|
-
"@context": "https://schema.org",
|
|
73
|
-
"@type": "Article",
|
|
74
|
-
"headline": "[Title - max 110 chars]",
|
|
75
|
-
"description": "[Summary]",
|
|
76
|
-
"author": {
|
|
77
|
-
"@type": "Person",
|
|
78
|
-
"name": "[Author Name]",
|
|
79
|
-
"url": "[Author Profile URL]"
|
|
80
|
-
},
|
|
81
|
-
"datePublished": "[YYYY-MM-DD]",
|
|
82
|
-
"dateModified": "[YYYY-MM-DD]",
|
|
83
|
-
"image": "[Featured Image URL]",
|
|
84
|
-
"publisher": {
|
|
85
|
-
"@type": "Organization",
|
|
86
|
-
"name": "[Publisher Name]",
|
|
87
|
-
"logo": {
|
|
88
|
-
"@type": "ImageObject",
|
|
89
|
-
"url": "[Logo URL]"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"mainEntityOfPage": {
|
|
93
|
-
"@type": "WebPage",
|
|
94
|
-
"@id": "[Page URL]"
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
"type": "Product",
|
|
100
|
-
"use_case": "E-commerce product pages",
|
|
101
|
-
"template": {
|
|
102
|
-
"@context": "https://schema.org",
|
|
103
|
-
"@type": "Product",
|
|
104
|
-
"name": "[Product Name]",
|
|
105
|
-
"image": "[Product Image URL]",
|
|
106
|
-
"description": "[Product Description]",
|
|
107
|
-
"sku": "[SKU]",
|
|
108
|
-
"brand": {
|
|
109
|
-
"@type": "Brand",
|
|
110
|
-
"name": "[Brand Name]"
|
|
111
|
-
},
|
|
112
|
-
"offers": {
|
|
113
|
-
"@type": "Offer",
|
|
114
|
-
"url": "[Product URL]",
|
|
115
|
-
"price": "[Price]",
|
|
116
|
-
"priceCurrency": "[Currency Code]",
|
|
117
|
-
"availability": "https://schema.org/InStock",
|
|
118
|
-
"seller": {
|
|
119
|
-
"@type": "Organization",
|
|
120
|
-
"name": "[Seller Name]"
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
"aggregateRating": {
|
|
124
|
-
"@type": "AggregateRating",
|
|
125
|
-
"ratingValue": "[4.5]",
|
|
126
|
-
"reviewCount": "[120]"
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"type": "WebSite",
|
|
132
|
-
"use_case": "Site-level with sitelinks search box",
|
|
133
|
-
"template": {
|
|
134
|
-
"@context": "https://schema.org",
|
|
135
|
-
"@type": "WebSite",
|
|
136
|
-
"name": "[Site Name]",
|
|
137
|
-
"url": "[Homepage URL]",
|
|
138
|
-
"potentialAction": {
|
|
139
|
-
"@type": "SearchAction",
|
|
140
|
-
"target": {
|
|
141
|
-
"@type": "EntryPoint",
|
|
142
|
-
"urlTemplate": "[Search URL]?q={search_term_string}"
|
|
143
|
-
},
|
|
144
|
-
"query-input": "required name=search_term_string"
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"type": "BreadcrumbList",
|
|
150
|
-
"use_case": "Navigation breadcrumbs",
|
|
151
|
-
"template": {
|
|
152
|
-
"@context": "https://schema.org",
|
|
153
|
-
"@type": "BreadcrumbList",
|
|
154
|
-
"itemListElement": [
|
|
155
|
-
{
|
|
156
|
-
"@type": "ListItem",
|
|
157
|
-
"position": 1,
|
|
158
|
-
"name": "Home",
|
|
159
|
-
"item": "[Homepage URL]"
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"@type": "ListItem",
|
|
163
|
-
"position": 2,
|
|
164
|
-
"name": "[Category]",
|
|
165
|
-
"item": "[Category URL]"
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
"@type": "ListItem",
|
|
169
|
-
"position": 3,
|
|
170
|
-
"name": "[Current Page]"
|
|
171
|
-
}
|
|
172
|
-
]
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"type": "Person",
|
|
177
|
-
"use_case": "Author/team member profiles (E-E-A-T)",
|
|
178
|
-
"template": {
|
|
179
|
-
"@context": "https://schema.org",
|
|
180
|
-
"@type": "Person",
|
|
181
|
-
"name": "[Full Name]",
|
|
182
|
-
"jobTitle": "[Job Title]",
|
|
183
|
-
"url": "[Profile URL]",
|
|
184
|
-
"image": "[Photo URL]",
|
|
185
|
-
"description": "[Professional bio]",
|
|
186
|
-
"worksFor": {
|
|
187
|
-
"@type": "Organization",
|
|
188
|
-
"name": "[Company Name]"
|
|
189
|
-
},
|
|
190
|
-
"sameAs": [
|
|
191
|
-
"[LinkedIn URL]",
|
|
192
|
-
"[Twitter URL]",
|
|
193
|
-
"[GitHub URL]"
|
|
194
|
-
]
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
"type": "Service",
|
|
199
|
-
"use_case": "Service business pages",
|
|
200
|
-
"template": {
|
|
201
|
-
"@context": "https://schema.org",
|
|
202
|
-
"@type": "Service",
|
|
203
|
-
"name": "[Service Name]",
|
|
204
|
-
"description": "[Service Description]",
|
|
205
|
-
"provider": {
|
|
206
|
-
"@type": "Organization",
|
|
207
|
-
"name": "[Provider Name]",
|
|
208
|
-
"url": "[Provider URL]"
|
|
209
|
-
},
|
|
210
|
-
"areaServed": {
|
|
211
|
-
"@type": "City",
|
|
212
|
-
"name": "[Service Area]"
|
|
213
|
-
},
|
|
214
|
-
"offers": {
|
|
215
|
-
"@type": "Offer",
|
|
216
|
-
"price": "[Starting Price]",
|
|
217
|
-
"priceCurrency": "[Currency]"
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
"type": "VideoObject",
|
|
223
|
-
"use_case": "Video content pages",
|
|
224
|
-
"template": {
|
|
225
|
-
"@context": "https://schema.org",
|
|
226
|
-
"@type": "VideoObject",
|
|
227
|
-
"name": "[Video Title]",
|
|
228
|
-
"description": "[Video Description]",
|
|
229
|
-
"thumbnailUrl": "[Thumbnail URL]",
|
|
230
|
-
"uploadDate": "[YYYY-MM-DD]",
|
|
231
|
-
"duration": "[PT1H30M]",
|
|
232
|
-
"contentUrl": "[Video File URL]",
|
|
233
|
-
"embedUrl": "[Embed URL]",
|
|
234
|
-
"publisher": {
|
|
235
|
-
"@type": "Organization",
|
|
236
|
-
"name": "[Publisher]"
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
"type": "Event",
|
|
242
|
-
"use_case": "Events and conferences",
|
|
243
|
-
"template": {
|
|
244
|
-
"@context": "https://schema.org",
|
|
245
|
-
"@type": "Event",
|
|
246
|
-
"name": "[Event Name]",
|
|
247
|
-
"description": "[Event Description]",
|
|
248
|
-
"startDate": "[YYYY-MM-DDTHH:MM]",
|
|
249
|
-
"endDate": "[YYYY-MM-DDTHH:MM]",
|
|
250
|
-
"location": {
|
|
251
|
-
"@type": "Place",
|
|
252
|
-
"name": "[Venue Name]",
|
|
253
|
-
"address": {
|
|
254
|
-
"@type": "PostalAddress",
|
|
255
|
-
"streetAddress": "[Street]",
|
|
256
|
-
"addressLocality": "[City]",
|
|
257
|
-
"addressCountry": "[Country]"
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
"organizer": {
|
|
261
|
-
"@type": "Organization",
|
|
262
|
-
"name": "[Organizer Name]",
|
|
263
|
-
"url": "[Organizer URL]"
|
|
264
|
-
},
|
|
265
|
-
"offers": {
|
|
266
|
-
"@type": "Offer",
|
|
267
|
-
"price": "[Price]",
|
|
268
|
-
"priceCurrency": "[Currency]",
|
|
269
|
-
"url": "[Ticket URL]",
|
|
270
|
-
"availability": "https://schema.org/InStock"
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
"type": "SoftwareApplication",
|
|
276
|
-
"use_case": "SaaS and app pages",
|
|
277
|
-
"template": {
|
|
278
|
-
"@context": "https://schema.org",
|
|
279
|
-
"@type": "SoftwareApplication",
|
|
280
|
-
"name": "[App Name]",
|
|
281
|
-
"description": "[App Description]",
|
|
282
|
-
"applicationCategory": "[Category]",
|
|
283
|
-
"operatingSystem": "[OS]",
|
|
284
|
-
"offers": {
|
|
285
|
-
"@type": "Offer",
|
|
286
|
-
"price": "[Price or 0]",
|
|
287
|
-
"priceCurrency": "[Currency]"
|
|
288
|
-
},
|
|
289
|
-
"aggregateRating": {
|
|
290
|
-
"@type": "AggregateRating",
|
|
291
|
-
"ratingValue": "[Rating]",
|
|
292
|
-
"ratingCount": "[Count]"
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
"type": "ProfilePage",
|
|
298
|
-
"use_case": "Author/creator profile pages (E-E-A-T)",
|
|
299
|
-
"template": {
|
|
300
|
-
"@context": "https://schema.org",
|
|
301
|
-
"@type": "ProfilePage",
|
|
302
|
-
"mainEntity": {
|
|
303
|
-
"@type": "Person",
|
|
304
|
-
"name": "[Author Name]",
|
|
305
|
-
"url": "[Profile URL]",
|
|
306
|
-
"description": "[Bio and expertise]",
|
|
307
|
-
"sameAs": ["[LinkedIn]", "[Twitter]"]
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
"type": "ProductGroup",
|
|
313
|
-
"use_case": "E-commerce product variants",
|
|
314
|
-
"template": {
|
|
315
|
-
"@context": "https://schema.org",
|
|
316
|
-
"@type": "ProductGroup",
|
|
317
|
-
"name": "[Product Name]",
|
|
318
|
-
"description": "[Group description]",
|
|
319
|
-
"productGroupID": "[Group ID]",
|
|
320
|
-
"variesBy": ["https://schema.org/size", "https://schema.org/color"],
|
|
321
|
-
"hasVariant": [
|
|
322
|
-
{
|
|
323
|
-
"@type": "Product",
|
|
324
|
-
"name": "[Variant Name]",
|
|
325
|
-
"sku": "[SKU]",
|
|
326
|
-
"color": "[Color]",
|
|
327
|
-
"size": "[Size]",
|
|
328
|
-
"offers": {
|
|
329
|
-
"@type": "Offer",
|
|
330
|
-
"price": "[Price]",
|
|
331
|
-
"priceCurrency": "[Currency]",
|
|
332
|
-
"availability": "https://schema.org/InStock"
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
]
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
"type": "Certification",
|
|
340
|
-
"use_case": "Product certifications (April 2025)",
|
|
341
|
-
"template": {
|
|
342
|
-
"@context": "https://schema.org",
|
|
343
|
-
"@type": "Product",
|
|
344
|
-
"name": "[Product Name]",
|
|
345
|
-
"hasCertification": {
|
|
346
|
-
"@type": "Certification",
|
|
347
|
-
"certificationIdentification": "[Certification Name]",
|
|
348
|
-
"issuedBy": {
|
|
349
|
-
"@type": "Organization",
|
|
350
|
-
"name": "[Issuing Organization]"
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
]
|
|
356
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# BMAD+ SEO Engine — Python Dependencies
|
|
2
|
-
# Install: pip install -r requirements.txt
|
|
3
|
-
# Author: Laurent Rochetta
|
|
4
|
-
|
|
5
|
-
# Core (required)
|
|
6
|
-
requests>=2.31.0
|
|
7
|
-
beautifulsoup4>=4.12.0
|
|
8
|
-
|
|
9
|
-
# Fast HTML parser (recommended)
|
|
10
|
-
lxml>=5.0.0
|
|
11
|
-
|
|
12
|
-
# Screenshot capture (optional — only for seo_screenshot.py)
|
|
13
|
-
# Uncomment and run: playwright install chromium
|
|
14
|
-
# playwright>=1.40.0
|
|
Binary file
|
|
Binary file
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# BMAD+ SEO Engine — Dependency Installer (Windows)
|
|
2
|
-
# Author: Laurent Rochetta
|
|
3
|
-
|
|
4
|
-
$ErrorActionPreference = "Stop"
|
|
5
|
-
|
|
6
|
-
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
7
|
-
$ParentDir = Split-Path -Parent $ScriptDir
|
|
8
|
-
|
|
9
|
-
Write-Host "🔧 BMAD+ SEO Engine — Installing dependencies..." -ForegroundColor Cyan
|
|
10
|
-
Write-Host ""
|
|
11
|
-
|
|
12
|
-
# Check Python
|
|
13
|
-
$Python = $null
|
|
14
|
-
if (Get-Command python -ErrorAction SilentlyContinue) {
|
|
15
|
-
$Python = "python"
|
|
16
|
-
} elseif (Get-Command py -ErrorAction SilentlyContinue) {
|
|
17
|
-
$Python = "py -3"
|
|
18
|
-
} else {
|
|
19
|
-
Write-Host "❌ Python not found. Please install Python 3.10+" -ForegroundColor Red
|
|
20
|
-
exit 1
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
Write-Host "Using: $(& $Python --version)"
|
|
24
|
-
|
|
25
|
-
# Create venv if not exists
|
|
26
|
-
$VenvPath = Join-Path $ParentDir ".venv"
|
|
27
|
-
if (-not (Test-Path $VenvPath)) {
|
|
28
|
-
Write-Host "📦 Creating virtual environment..."
|
|
29
|
-
& $Python -m venv $VenvPath
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
# Activate venv
|
|
33
|
-
$ActivateScript = Join-Path $VenvPath "Scripts\Activate.ps1"
|
|
34
|
-
if (Test-Path $ActivateScript) {
|
|
35
|
-
& $ActivateScript
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
# Install dependencies
|
|
39
|
-
Write-Host "📥 Installing core dependencies..."
|
|
40
|
-
$RequirementsPath = Join-Path $ParentDir "requirements.txt"
|
|
41
|
-
& $Python -m pip install --quiet -r $RequirementsPath
|
|
42
|
-
|
|
43
|
-
Write-Host ""
|
|
44
|
-
Write-Host "✅ Core dependencies installed!" -ForegroundColor Green
|
|
45
|
-
Write-Host ""
|
|
46
|
-
Write-Host "Optional: To enable screenshots (seo_screenshot.py):"
|
|
47
|
-
Write-Host " pip install playwright; playwright install chromium"
|
|
48
|
-
Write-Host ""
|
|
49
|
-
Write-Host "Set your Google API key for live data:"
|
|
50
|
-
Write-Host ' $env:GOOGLE_API_KEY = "your_key_here"'
|
|
51
|
-
Write-Host " Get one free: https://console.cloud.google.com/apis/credentials"
|
|
52
|
-
Write-Host ""
|
|
53
|
-
Write-Host "🚀 Ready! — BMAD+ SEO Engine by Laurent Rochetta" -ForegroundColor Cyan
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# BMAD+ SEO Engine — Dependency Installer (Linux/macOS)
|
|
3
|
-
# Author: Laurent Rochetta
|
|
4
|
-
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
-
PARENT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
9
|
-
|
|
10
|
-
echo "🔧 BMAD+ SEO Engine — Installing dependencies..."
|
|
11
|
-
echo ""
|
|
12
|
-
|
|
13
|
-
# Check Python
|
|
14
|
-
if command -v python3 &>/dev/null; then
|
|
15
|
-
PYTHON=python3
|
|
16
|
-
elif command -v python &>/dev/null; then
|
|
17
|
-
PYTHON=python
|
|
18
|
-
else
|
|
19
|
-
echo "❌ Python not found. Please install Python 3.10+"
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
echo "Using: $($PYTHON --version)"
|
|
24
|
-
|
|
25
|
-
# Create venv if not exists
|
|
26
|
-
if [ ! -d "$PARENT_DIR/.venv" ]; then
|
|
27
|
-
echo "📦 Creating virtual environment..."
|
|
28
|
-
$PYTHON -m venv "$PARENT_DIR/.venv"
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# Activate venv
|
|
32
|
-
source "$PARENT_DIR/.venv/bin/activate" 2>/dev/null || true
|
|
33
|
-
|
|
34
|
-
# Install core dependencies
|
|
35
|
-
echo "📥 Installing core dependencies..."
|
|
36
|
-
$PYTHON -m pip install --quiet -r "$PARENT_DIR/requirements.txt"
|
|
37
|
-
|
|
38
|
-
echo ""
|
|
39
|
-
echo "✅ Core dependencies installed!"
|
|
40
|
-
echo ""
|
|
41
|
-
echo "Optional: To enable screenshots (seo_screenshot.py):"
|
|
42
|
-
echo " pip install playwright && playwright install chromium"
|
|
43
|
-
echo ""
|
|
44
|
-
echo "Set your Google API key for live data:"
|
|
45
|
-
echo " export GOOGLE_API_KEY=your_key_here"
|
|
46
|
-
echo " Get one free: https://console.cloud.google.com/apis/credentials"
|
|
47
|
-
echo ""
|
|
48
|
-
echo "🚀 Ready! — BMAD+ SEO Engine by Laurent Rochetta"
|