ma-agents 3.18.0-beta.2 → 3.18.0
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/README.md +2 -2
- package/bin/cli.js +29 -32
- package/docs/architecture.md +2 -2
- package/lib/bmad-cache/cache-manifest.json +0 -12
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad.js +33 -34
- package/package.json +1 -1
- package/scripts/build-bmad-cache.js +18 -9
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +0 -56
- package/lib/bmad-cache/gds/.markdownlint-cli2.yaml +0 -35
- package/lib/bmad-cache/gds/.nvmrc +0 -1
- package/lib/bmad-cache/gds/.prettierignore +0 -9
- package/lib/bmad-cache/gds/CNAME +0 -1
- package/lib/bmad-cache/gds/LICENSE +0 -26
- package/lib/bmad-cache/gds/README.md +0 -134
- package/lib/bmad-cache/gds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/gds/_git_preserved/config +0 -13
- package/lib/bmad-cache/gds/_git_preserved/description +0 -1
- package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/gds/eslint.config.mjs +0 -141
- package/lib/bmad-cache/gds/package.json +0 -91
- package/lib/bmad-cache/gds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/customize.toml +0 -57
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +0 -59
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +0 -129
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/gametest/qa-index.csv +0 -18
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -55
- package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +0 -65
- package/lib/bmad-cache/gds/src/module-help.csv +0 -30
- package/lib/bmad-cache/gds/src/module.yaml +0 -113
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/game-brain-methods.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +0 -116
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/game-types.csv +0 -25
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/genre-complexity.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +0 -99
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +0 -290
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +0 -84
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +0 -319
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +0 -101
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +0 -508
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +0 -428
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +0 -392
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/pattern-categories.csv +0 -13
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +0 -62
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/sprint-status-template.yaml +0 -55
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/documentation-requirements.csv +0 -12
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/templates/project-scan-report-schema.json +0 -160
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +0 -41
- package/lib/bmad-cache/gds/tools/build-docs.mjs +0 -450
- package/lib/bmad-cache/gds/website/astro.config.mjs +0 -142
- package/lib/bmad-cache/gds/website/public/favicon.ico +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-dark.png +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-light.png +0 -0
- package/lib/bmad-cache/gds/website/src/components/Banner.astro +0 -71
- package/lib/bmad-cache/gds/website/src/components/Header.astro +0 -94
- package/lib/bmad-cache/gds/website/src/components/MobileMenuFooter.astro +0 -33
- package/lib/bmad-cache/gds/website/src/content/config.ts +0 -6
- package/lib/bmad-cache/gds/website/src/content/docs +0 -1
- package/lib/bmad-cache/gds/website/src/lib/site-url.mjs +0 -25
- package/lib/bmad-cache/gds/website/src/rehype-base-paths.js +0 -88
- package/lib/bmad-cache/gds/website/src/rehype-markdown-links.js +0 -117
- package/lib/bmad-cache/gds/website/src/styles/custom.css +0 -503
- package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +0 -35
- package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +0 -38
- package/lib/bmad-cache/wds/.nvmrc +0 -1
- package/lib/bmad-cache/wds/.prettierignore +0 -9
- package/lib/bmad-cache/wds/LICENSE +0 -27
- package/lib/bmad-cache/wds/README.md +0 -139
- package/lib/bmad-cache/wds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/wds/_git_preserved/config +0 -13
- package/lib/bmad-cache/wds/_git_preserved/description +0 -1
- package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +0 -1
- package/lib/bmad-cache/wds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/wds/eslint.config.mjs +0 -152
- package/lib/bmad-cache/wds/package.json +0 -82
- package/lib/bmad-cache/wds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +0 -80
- package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +0 -52
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +0 -70
- package/lib/bmad-cache/wds/src/module-help.csv +0 -19
- package/lib/bmad-cache/wds/src/module.yaml +0 -173
- package/lib/bmad-cache/wds/src/scripts/README.md +0 -155
- package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +0 -202
- package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +0 -158
- package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +0 -229
- package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +0 -120
- package/lib/bmad-cache/wds/src/scripts/wds-nav.js +0 -201
- package/lib/bmad-cache/wds/src/scripts/wds-validate.js +0 -301
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-7-design-system/templates/catalog.template.html +0 -363
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +0 -450
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +0 -104
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +0 -192
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +0 -387
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +0 -164
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +0 -18
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +0 -430
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +0 -63
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +0 -465
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +0 -264
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +0 -363
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
import { defineConfig } from 'astro/config';
|
|
3
|
-
import starlight from '@astrojs/starlight';
|
|
4
|
-
import sitemap from '@astrojs/sitemap';
|
|
5
|
-
import rehypeMarkdownLinks from './src/rehype-markdown-links.js';
|
|
6
|
-
import rehypeBasePaths from './src/rehype-base-paths.js';
|
|
7
|
-
import { getSiteUrl } from './src/lib/site-url.mjs';
|
|
8
|
-
|
|
9
|
-
const siteUrl = getSiteUrl();
|
|
10
|
-
const urlParts = new URL(siteUrl);
|
|
11
|
-
// Normalize basePath: ensure trailing slash so links can use `${BASE_URL}path`
|
|
12
|
-
const basePath = urlParts.pathname === '/' ? '/' : urlParts.pathname.endsWith('/') ? urlParts.pathname : urlParts.pathname + '/';
|
|
13
|
-
|
|
14
|
-
export default defineConfig({
|
|
15
|
-
site: `${urlParts.origin}${basePath}`,
|
|
16
|
-
base: basePath,
|
|
17
|
-
outDir: '../build/site',
|
|
18
|
-
|
|
19
|
-
// Disable aggressive caching in dev mode
|
|
20
|
-
vite: {
|
|
21
|
-
optimizeDeps: {
|
|
22
|
-
force: true, // Always re-bundle dependencies
|
|
23
|
-
},
|
|
24
|
-
server: {
|
|
25
|
-
watch: {
|
|
26
|
-
usePolling: false, // Set to true if file changes aren't detected
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
markdown: {
|
|
32
|
-
rehypePlugins: [
|
|
33
|
-
[rehypeMarkdownLinks, { base: basePath }],
|
|
34
|
-
[rehypeBasePaths, { base: basePath }],
|
|
35
|
-
],
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
integrations: [
|
|
39
|
-
sitemap(),
|
|
40
|
-
starlight({
|
|
41
|
-
title: 'BMad Game Dev Studio',
|
|
42
|
-
tagline: 'Game development (Unity, Unreal, Godot) module for the BMad Method.',
|
|
43
|
-
|
|
44
|
-
favicon: '/favicon.ico',
|
|
45
|
-
|
|
46
|
-
// Social links
|
|
47
|
-
social: [
|
|
48
|
-
{ icon: 'discord', label: 'Discord', href: 'https://discord.gg/gk8jAdXWmj' },
|
|
49
|
-
{ icon: 'github', label: 'GitHub', href: 'https://github.com/bmad-code-org/bmad-module-game-dev-studio' },
|
|
50
|
-
{ icon: 'youtube', label: 'YouTube', href: 'https://www.youtube.com/@BMadCode' },
|
|
51
|
-
],
|
|
52
|
-
|
|
53
|
-
// Show last updated timestamps
|
|
54
|
-
lastUpdated: true,
|
|
55
|
-
|
|
56
|
-
// Custom head tags for LLM discovery
|
|
57
|
-
head: [
|
|
58
|
-
{
|
|
59
|
-
tag: 'meta',
|
|
60
|
-
attrs: {
|
|
61
|
-
name: 'ai-terms',
|
|
62
|
-
content: `AI-optimized documentation: ${siteUrl}/llms-full.txt (plain text). Index: ${siteUrl}/llms.txt`,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
tag: 'meta',
|
|
67
|
-
attrs: {
|
|
68
|
-
name: 'llms-full',
|
|
69
|
-
content: `${siteUrl}/llms-full.txt`,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
tag: 'meta',
|
|
74
|
-
attrs: {
|
|
75
|
-
name: 'llms',
|
|
76
|
-
content: `${siteUrl}/llms.txt`,
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
|
|
81
|
-
// Custom CSS
|
|
82
|
-
customCss: ['./src/styles/custom.css'],
|
|
83
|
-
|
|
84
|
-
// Sidebar configuration (Diataxis structure)
|
|
85
|
-
sidebar: [
|
|
86
|
-
{ label: 'Welcome', slug: 'index' },
|
|
87
|
-
{
|
|
88
|
-
label: 'Tutorials',
|
|
89
|
-
collapsed: false,
|
|
90
|
-
autogenerate: { directory: 'tutorials' },
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
label: 'How-To Guides',
|
|
94
|
-
collapsed: true,
|
|
95
|
-
autogenerate: { directory: 'how-to' },
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
label: 'Explanation',
|
|
99
|
-
collapsed: true,
|
|
100
|
-
autogenerate: { directory: 'explanation' },
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
label: 'Reference',
|
|
104
|
-
collapsed: true,
|
|
105
|
-
autogenerate: { directory: 'reference' },
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
label: 'BMad Ecosystem',
|
|
109
|
-
collapsed: false,
|
|
110
|
-
items: [
|
|
111
|
-
{ label: 'BMad Method', link: 'https://docs.bmad-method.org/', attrs: { target: '_blank' } },
|
|
112
|
-
{ label: 'BMad Builder', link: 'https://bmad-builder-docs.bmad-method.org/', attrs: { target: '_blank' } },
|
|
113
|
-
{ label: 'Creative Intelligence Suite', link: 'https://cis-docs.bmad-method.org/', attrs: { target: '_blank' } },
|
|
114
|
-
{
|
|
115
|
-
label: 'Test Architect (TEA)',
|
|
116
|
-
link: 'https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/',
|
|
117
|
-
attrs: { target: '_blank' },
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
|
|
123
|
-
// Credits in footer
|
|
124
|
-
credits: false,
|
|
125
|
-
|
|
126
|
-
// Pagination
|
|
127
|
-
pagination: false,
|
|
128
|
-
|
|
129
|
-
// Use our docs/404.md instead of Starlight's built-in 404
|
|
130
|
-
disable404Route: true,
|
|
131
|
-
|
|
132
|
-
// Custom components
|
|
133
|
-
components: {
|
|
134
|
-
Header: './src/components/Header.astro',
|
|
135
|
-
MobileMenuFooter: './src/components/MobileMenuFooter.astro',
|
|
136
|
-
},
|
|
137
|
-
|
|
138
|
-
// Table of contents
|
|
139
|
-
tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 3 },
|
|
140
|
-
}),
|
|
141
|
-
],
|
|
142
|
-
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { getSiteUrl } from '../lib/site-url.mjs';
|
|
3
|
-
|
|
4
|
-
const llmsFullUrl = `${getSiteUrl()}/llms-full.txt`;
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<div class="ai-banner">
|
|
8
|
-
<span>🤖 AI-optimized docs: <a href={llmsFullUrl}>llms-full.txt</a></span>
|
|
9
|
-
</div>
|
|
10
|
-
<div class="announce-banner">
|
|
11
|
-
<span>🚀 Build your own BMad modules and share them with the community! <a href="https://bmad-builder-docs.bmad-method.org/tutorials/build-your-first-module/">Get started</a> or <a href="https://bmad-builder-docs.bmad-method.org/how-to/distribute-your-module/">submit to the marketplace</a>.</span>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<style>
|
|
15
|
-
.ai-banner,
|
|
16
|
-
.announce-banner {
|
|
17
|
-
width: 100vw;
|
|
18
|
-
margin-left: calc(-50vw + 50%);
|
|
19
|
-
height: var(--ai-banner-height, 2.75rem);
|
|
20
|
-
background: #1a1a1a;
|
|
21
|
-
color: #a1a1a1;
|
|
22
|
-
padding: 0.5rem 1rem;
|
|
23
|
-
font-size: 0.875rem;
|
|
24
|
-
border-bottom: 1px solid #262626;
|
|
25
|
-
display: flex;
|
|
26
|
-
align-items: center;
|
|
27
|
-
justify-content: center;
|
|
28
|
-
box-sizing: border-box;
|
|
29
|
-
font-family: 'Inter', system-ui, sans-serif;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.ai-banner span,
|
|
33
|
-
.announce-banner span {
|
|
34
|
-
white-space: nowrap;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
text-overflow: ellipsis;
|
|
37
|
-
max-width: 100%;
|
|
38
|
-
}
|
|
39
|
-
.ai-banner a,
|
|
40
|
-
.announce-banner a {
|
|
41
|
-
color: #3b82f6;
|
|
42
|
-
text-decoration: none;
|
|
43
|
-
font-weight: 600;
|
|
44
|
-
}
|
|
45
|
-
.ai-banner a:hover,
|
|
46
|
-
.announce-banner a:hover {
|
|
47
|
-
color: #fafafa;
|
|
48
|
-
text-decoration: underline;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.announce-banner {
|
|
52
|
-
background: #1a2332;
|
|
53
|
-
border-bottom: 1px solid #1e3a5f;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@media (min-width: 50rem) {
|
|
57
|
-
.ai-banner,
|
|
58
|
-
.announce-banner {
|
|
59
|
-
padding-left: 2.5rem;
|
|
60
|
-
padding-right: 2.5rem;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@media (min-width: 72rem) {
|
|
65
|
-
.ai-banner,
|
|
66
|
-
.announce-banner {
|
|
67
|
-
padding-left: 3rem;
|
|
68
|
-
padding-right: 3rem;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
</style>
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import config from 'virtual:starlight/user-config';
|
|
3
|
-
import type { Props } from '@astrojs/starlight/props';
|
|
4
|
-
|
|
5
|
-
import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
|
|
6
|
-
import Search from 'virtual:starlight/components/Search';
|
|
7
|
-
import SiteTitle from 'virtual:starlight/components/SiteTitle';
|
|
8
|
-
import SocialIcons from 'virtual:starlight/components/SocialIcons';
|
|
9
|
-
import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
|
|
10
|
-
import Banner from './Banner.astro';
|
|
11
|
-
/**
|
|
12
|
-
* Render the `Search` component if Pagefind is enabled or the default search component has been overridden.
|
|
13
|
-
*/
|
|
14
|
-
const shouldRenderSearch =
|
|
15
|
-
config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro';
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
<Banner />
|
|
19
|
-
<div class="header sl-flex">
|
|
20
|
-
<div class="title-wrapper sl-flex">
|
|
21
|
-
<SiteTitle {...Astro.props} />
|
|
22
|
-
</div>
|
|
23
|
-
<div class="sl-flex print:hidden">
|
|
24
|
-
{shouldRenderSearch && <Search {...Astro.props} />}
|
|
25
|
-
</div>
|
|
26
|
-
<div class="sl-hidden md:sl-flex print:hidden right-group">
|
|
27
|
-
<div class="sl-flex social-icons">
|
|
28
|
-
<SocialIcons {...Astro.props} />
|
|
29
|
-
</div>
|
|
30
|
-
<ThemeSelect {...Astro.props} />
|
|
31
|
-
<LanguageSelect {...Astro.props} />
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<style>
|
|
36
|
-
.header {
|
|
37
|
-
gap: var(--sl-nav-gap);
|
|
38
|
-
justify-content: space-between;
|
|
39
|
-
align-items: center;
|
|
40
|
-
height: 100%;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.title-wrapper {
|
|
44
|
-
/* Prevent long titles overflowing and covering the search and menu buttons on narrow viewports. */
|
|
45
|
-
overflow: clip;
|
|
46
|
-
/* Avoid clipping focus ring around link inside title wrapper. */
|
|
47
|
-
padding: 0.25rem;
|
|
48
|
-
margin: -0.25rem;
|
|
49
|
-
min-width: 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.right-group,
|
|
53
|
-
.social-icons {
|
|
54
|
-
gap: 1rem;
|
|
55
|
-
align-items: center;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.social-icons::after {
|
|
59
|
-
content: '';
|
|
60
|
-
height: 2rem;
|
|
61
|
-
border-inline-end: 1px solid var(--sl-color-gray-5);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@media (min-width: 50rem) {
|
|
65
|
-
:global(:root[data-has-sidebar]) {
|
|
66
|
-
--__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
|
|
67
|
-
}
|
|
68
|
-
:global(:root:not([data-has-toc])) {
|
|
69
|
-
--__toc-width: 0rem;
|
|
70
|
-
}
|
|
71
|
-
.header {
|
|
72
|
-
--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));
|
|
73
|
-
--__main-column-fr: calc(
|
|
74
|
-
(
|
|
75
|
-
100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) -
|
|
76
|
-
(2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) -
|
|
77
|
-
var(--sl-content-width)
|
|
78
|
-
) / 2
|
|
79
|
-
);
|
|
80
|
-
display: grid;
|
|
81
|
-
grid-template-columns:
|
|
82
|
-
/* 1 (site title): runs up until the main content column's left edge or the width of the title, whichever is the largest */
|
|
83
|
-
minmax(
|
|
84
|
-
calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))),
|
|
85
|
-
auto
|
|
86
|
-
)
|
|
87
|
-
/* 2 (search box): all free space that is available. */
|
|
88
|
-
1fr
|
|
89
|
-
/* 3 (right items): use the space that these need. */
|
|
90
|
-
auto;
|
|
91
|
-
align-content: center;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
</style>
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
|
|
3
|
-
import SocialIcons from 'virtual:starlight/components/SocialIcons';
|
|
4
|
-
import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
|
|
5
|
-
import type { Props } from '@astrojs/starlight/props';
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<div class="mobile-preferences sl-flex">
|
|
9
|
-
<div class="sl-flex social-icons">
|
|
10
|
-
<SocialIcons {...Astro.props} />
|
|
11
|
-
</div>
|
|
12
|
-
<ThemeSelect {...Astro.props} />
|
|
13
|
-
<LanguageSelect {...Astro.props} />
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<style>
|
|
17
|
-
.social-icons {
|
|
18
|
-
gap: 1rem;
|
|
19
|
-
align-items: center;
|
|
20
|
-
padding-block: 1rem;
|
|
21
|
-
}
|
|
22
|
-
.social-icons:empty {
|
|
23
|
-
display: none;
|
|
24
|
-
}
|
|
25
|
-
.mobile-preferences {
|
|
26
|
-
justify-content: space-between;
|
|
27
|
-
flex-wrap: wrap;
|
|
28
|
-
border-top: 1px solid var(--sl-color-gray-6);
|
|
29
|
-
column-gap: 1rem;
|
|
30
|
-
padding: 0.5rem 0;
|
|
31
|
-
align-items: center;
|
|
32
|
-
}
|
|
33
|
-
</style>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
../../../docs
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolve the site's base URL using cascading environment defaults.
|
|
3
|
-
*
|
|
4
|
-
* Preference order: use SITE_URL if set; otherwise derive a GitHub Pages URL from GITHUB_REPOSITORY; otherwise use the local development URL.
|
|
5
|
-
* @returns {string} The resolved site URL (SITE_URL override, or `https://{owner}.github.io/{repo}`, or `http://localhost:3000`).
|
|
6
|
-
*/
|
|
7
|
-
export function getSiteUrl() {
|
|
8
|
-
// Explicit override (works in both local and GitHub Actions)
|
|
9
|
-
if (process.env.SITE_URL) {
|
|
10
|
-
return process.env.SITE_URL;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// GitHub Actions: compute from repository context
|
|
14
|
-
if (process.env.GITHUB_REPOSITORY) {
|
|
15
|
-
const parts = process.env.GITHUB_REPOSITORY.split('/');
|
|
16
|
-
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
17
|
-
throw new Error(`Invalid GITHUB_REPOSITORY format: "${process.env.GITHUB_REPOSITORY}". Expected "owner/repo".`);
|
|
18
|
-
}
|
|
19
|
-
const [owner, repo] = parts;
|
|
20
|
-
return `https://${owner}.github.io/${repo}`;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Local development: use dev server
|
|
24
|
-
return 'http://localhost:3000';
|
|
25
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rehype plugin to prepend base path to absolute URLs
|
|
3
|
-
*
|
|
4
|
-
* Transforms:
|
|
5
|
-
* /img/foo.png → /bmad-module-game-dev-studio/img/foo.png (when base is /bmad-module-game-dev-studio/)
|
|
6
|
-
* /llms.txt → /bmad-module-game-dev-studio/llms.txt
|
|
7
|
-
*
|
|
8
|
-
* Only affects absolute paths (/) - relative paths and external URLs are unchanged.
|
|
9
|
-
* Does NOT process .md links (those are handled by rehype-markdown-links).
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { visit } from 'unist-util-visit';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Create a rehype plugin that prepends the base path to absolute URLs.
|
|
16
|
-
*
|
|
17
|
-
* @param {Object} options - Plugin options
|
|
18
|
-
* @param {string} options.base - The base path to prepend (e.g., '/bmad-module-game-dev-studio/')
|
|
19
|
-
* @returns {function} A HAST tree transformer
|
|
20
|
-
*/
|
|
21
|
-
export default function rehypeBasePaths(options = {}) {
|
|
22
|
-
const base = options.base || '/';
|
|
23
|
-
|
|
24
|
-
// Normalize base: ensure it ends with / and doesn't have double slashes
|
|
25
|
-
const normalizedBase = base === '/' ? '/' : base.endsWith('/') ? base : base + '/';
|
|
26
|
-
|
|
27
|
-
return (tree) => {
|
|
28
|
-
visit(tree, 'element', (node) => {
|
|
29
|
-
// Process img tags with src attribute
|
|
30
|
-
if (node.tagName === 'img' && node.properties?.src) {
|
|
31
|
-
const src = node.properties.src;
|
|
32
|
-
|
|
33
|
-
if (typeof src === 'string' && src.startsWith('/') && !src.startsWith('//')) {
|
|
34
|
-
// Don't transform if already has the base path
|
|
35
|
-
if (normalizedBase !== '/' && !src.startsWith(normalizedBase)) {
|
|
36
|
-
node.properties.src = normalizedBase + src.slice(1);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Process iframe tags with src attribute
|
|
42
|
-
if (node.tagName === 'iframe' && node.properties?.src) {
|
|
43
|
-
const src = node.properties.src;
|
|
44
|
-
|
|
45
|
-
if (typeof src === 'string' && src.startsWith('/') && !src.startsWith('//')) {
|
|
46
|
-
// Don't transform if already has the base path
|
|
47
|
-
if (normalizedBase !== '/' && !src.startsWith(normalizedBase)) {
|
|
48
|
-
node.properties.src = normalizedBase + src.slice(1);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Process anchor tags with href attribute
|
|
54
|
-
if (node.tagName === 'a' && node.properties?.href) {
|
|
55
|
-
const href = node.properties.href;
|
|
56
|
-
|
|
57
|
-
if (typeof href !== 'string') {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Only transform absolute paths starting with / (but not //)
|
|
62
|
-
if (!href.startsWith('/') || href.startsWith('//')) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Skip if already has the base path
|
|
67
|
-
if (normalizedBase !== '/' && href.startsWith(normalizedBase)) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Skip .md links - those are handled by rehype-markdown-links
|
|
72
|
-
// Extract path portion (before ? and #)
|
|
73
|
-
const firstDelimiter = Math.min(
|
|
74
|
-
href.indexOf('?') === -1 ? Infinity : href.indexOf('?'),
|
|
75
|
-
href.indexOf('#') === -1 ? Infinity : href.indexOf('#'),
|
|
76
|
-
);
|
|
77
|
-
const pathPortion = firstDelimiter === Infinity ? href : href.substring(0, firstDelimiter);
|
|
78
|
-
|
|
79
|
-
if (pathPortion.endsWith('.md')) {
|
|
80
|
-
return; // Let rehype-markdown-links handle this
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Prepend base path
|
|
84
|
-
node.properties.href = normalizedBase + href.slice(1);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rehype plugin to transform markdown file links (.md) to page routes
|
|
3
|
-
*
|
|
4
|
-
* Transforms:
|
|
5
|
-
* ./path/to/file.md → ./path/to/file/
|
|
6
|
-
* ./path/index.md → ./path/ (index.md becomes directory root)
|
|
7
|
-
* ../path/file.md#anchor → ../path/file/#anchor
|
|
8
|
-
* ./file.md?query=param → ./file/?query=param
|
|
9
|
-
* /docs/absolute/path/file.md → {base}/absolute/path/file/
|
|
10
|
-
*
|
|
11
|
-
* For absolute paths starting with /docs/, the /docs prefix is stripped
|
|
12
|
-
* since the Astro site serves content from the docs directory as the root.
|
|
13
|
-
* The base path is prepended to absolute paths for subdirectory deployments.
|
|
14
|
-
*
|
|
15
|
-
* Affects relative links (./, ../) and absolute paths (/) - external links are unchanged
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { visit } from 'unist-util-visit';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Convert Markdown file links (.md) into equivalent page route-style links.
|
|
22
|
-
*
|
|
23
|
-
* The returned transformer walks the HTML tree and rewrites anchor `href` values that are relative paths (./, ../) or absolute paths (/) pointing to `.md` files. It preserves query strings and hash anchors, rewrites `.../index.md` to the directory root path (`.../`), and rewrites other `.md` file paths by removing the `.md` extension and ensuring a trailing slash. External links (http://, https://) and non-.md links are left unchanged.
|
|
24
|
-
*
|
|
25
|
-
* @param {Object} options - Plugin options
|
|
26
|
-
* @param {string} options.base - The base path to prepend to absolute URLs (e.g., '/bmad-module-game-dev-studio/')
|
|
27
|
-
* @returns {function} A HAST tree transformer that mutates `a` element `href` properties as described.
|
|
28
|
-
*/
|
|
29
|
-
export default function rehypeMarkdownLinks(options = {}) {
|
|
30
|
-
const base = options.base || '/';
|
|
31
|
-
// Normalize base: ensure it ends with / and doesn't have double slashes
|
|
32
|
-
const normalizedBase = base === '/' ? '' : base.endsWith('/') ? base.slice(0, -1) : base;
|
|
33
|
-
|
|
34
|
-
return (tree) => {
|
|
35
|
-
visit(tree, 'element', (node) => {
|
|
36
|
-
// Only process anchor tags with href
|
|
37
|
-
if (node.tagName !== 'a' || !node.properties?.href) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const href = node.properties.href;
|
|
42
|
-
|
|
43
|
-
// Skip if not a string (shouldn't happen, but be safe)
|
|
44
|
-
if (typeof href !== 'string') {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Skip external links (http://, https://, mailto:, etc.)
|
|
49
|
-
if (href.includes('://') || href.startsWith('mailto:') || href.startsWith('tel:')) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Only transform paths starting with ./, ../, or / (absolute)
|
|
54
|
-
if (!href.startsWith('./') && !href.startsWith('../') && !href.startsWith('/')) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Extract path portion (before ? and #) to check if it's a .md file
|
|
59
|
-
const firstDelimiter = Math.min(
|
|
60
|
-
href.indexOf('?') === -1 ? Infinity : href.indexOf('?'),
|
|
61
|
-
href.indexOf('#') === -1 ? Infinity : href.indexOf('#'),
|
|
62
|
-
);
|
|
63
|
-
const pathPortion = firstDelimiter === Infinity ? href : href.substring(0, firstDelimiter);
|
|
64
|
-
|
|
65
|
-
// Don't transform if path doesn't end with .md
|
|
66
|
-
if (!pathPortion.endsWith('.md')) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Split the URL into parts: path, anchor, and query
|
|
71
|
-
let urlPath = pathPortion;
|
|
72
|
-
let anchor = '';
|
|
73
|
-
let query = '';
|
|
74
|
-
|
|
75
|
-
// Extract query string and anchor from original href
|
|
76
|
-
if (firstDelimiter !== Infinity) {
|
|
77
|
-
const suffix = href.substring(firstDelimiter);
|
|
78
|
-
const anchorInSuffix = suffix.indexOf('#');
|
|
79
|
-
if (suffix.startsWith('?')) {
|
|
80
|
-
if (anchorInSuffix !== -1) {
|
|
81
|
-
query = suffix.substring(0, anchorInSuffix);
|
|
82
|
-
anchor = suffix.substring(anchorInSuffix);
|
|
83
|
-
} else {
|
|
84
|
-
query = suffix;
|
|
85
|
-
}
|
|
86
|
-
} else {
|
|
87
|
-
// starts with #
|
|
88
|
-
anchor = suffix;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Track if this was an absolute path (for base path prepending)
|
|
93
|
-
const isAbsolute = urlPath.startsWith('/');
|
|
94
|
-
|
|
95
|
-
// Strip /docs/ prefix from absolute paths (repo-relative → site-relative)
|
|
96
|
-
if (urlPath.startsWith('/docs/')) {
|
|
97
|
-
urlPath = urlPath.slice(5); // Remove '/docs' prefix, keeping the leading /
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Transform .md to /
|
|
101
|
-
// Special case: index.md → directory root (e.g., ./tutorials/index.md → ./tutorials/)
|
|
102
|
-
if (urlPath.endsWith('/index.md')) {
|
|
103
|
-
urlPath = urlPath.replace(/\/index\.md$/, '/');
|
|
104
|
-
} else {
|
|
105
|
-
urlPath = urlPath.replace(/\.md$/, '/');
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Prepend base path to absolute URLs for subdirectory deployments
|
|
109
|
-
if (isAbsolute && normalizedBase) {
|
|
110
|
-
urlPath = normalizedBase + urlPath;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Reconstruct the href
|
|
114
|
-
node.properties.href = urlPath + query + anchor;
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
}
|