Compare commits
9 Commits
2b76d03316
...
3bcd6c3cce
| Author | SHA1 | Date |
|---|---|---|
|
|
3bcd6c3cce | |
|
|
62c836ee61 | |
|
|
db744d405f | |
|
|
7b31b1accd | |
|
|
9c291b7ca9 | |
|
|
fea431fd2e | |
|
|
9a2fba97a3 | |
|
|
065003fc95 | |
|
|
7729ad461d |
41
CHANGELOG.md
41
CHANGELOG.md
|
|
@ -1,5 +1,46 @@
|
|||
# Changelog
|
||||
|
||||
## v6.8.0 - 2026-05-25
|
||||
|
||||
### ✨ Headline
|
||||
|
||||
**New planning shapes lead this release.** **bmad-ux** replaces the old single-spine UX skill with a two-spine contract: **DESIGN.md** (visual identity, Google Labs spec) and **EXPERIENCE.md** (behavior, flow, IA). **bmad-spec** distills any messy intent (brain dump, PRD, transcript, brief) into a tight five-field SPEC.md kernel that any downstream skill can consume. Both extend the streamlined Create/Update/Validate + Fast/Coaching template that **bmad-prd** and **bmad-product-brief** set in v6.7.0. The handoff from design into engineering is now a sealed file contract, not a translation layer.
|
||||
|
||||
**Also shipping:** **Web Bundles** for Gemini Gems and ChatGPT Custom GPTs ([bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/)) bring six planning bundles to non-IDE users with full IDE schema parity. **bmad-automator** (story automation) lands on the `next` channel. **bmad-method-ui** ships a community-alpha VS Code dashboard + standalone Next.js web UI. 19 new elicitation techniques arrive. Plus a long tail of installer and activation fixes.
|
||||
|
||||
### 💥 Breaking Changes
|
||||
|
||||
* **`bmad-create-ux-design` replaced by `bmad-ux`.** Single `design.md` spine is gone. New skill emits **DESIGN.md** (visual tokens per the Google Labs spec) and **EXPERIENCE.md** (behavior, flow, IA, states, a11y), with EXPERIENCE.md referencing DESIGN.md tokens via `{path.to.token}` syntax. Adds named-protagonist journeys, surface-closure validation, opt-in reviewer gate, and an extensible producer-handoff registry (default: Stitch). Installer auto-removes the legacy skill. PRD and brief templates aligned (form-factor probe, named-protagonist UJs, no standalone Primary Persona) (#2413)
|
||||
* **`bmad-distillator` retired, superseded by `bmad-spec`.** Promoted to core because the kernel pattern is domain-agnostic. Installer cleans up automatically. No internal pipelines called it, but custom workflows must switch to `bmad-spec`.
|
||||
|
||||
### 🎁 Features
|
||||
|
||||
* **Web Bundles v6 shelf**: Six bundles purpose-built for Gemini Gems and ChatGPT Custom GPTs. Brainstorming (60 techniques, 10 categories), Product Brief (Create/Update/Validate, Fast/Coaching paths), PRFAQ (Working Backwards, 4 stages, weasel-word challenge), PRD (Vision- or Journey-led, 7-dimension validation), UX (two-spine, Don Norman framing, Stitch handoff), Market & Industry Research (Deep Research + Porter + Christensen). Full schema parity with IDE skills so Gem ↔ IDE handoffs do not break. [bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/) is the single supported install path (#2421, #2423, #2425)
|
||||
* **Web Bundle release packager**: `tools/bundle-web-bundles.js` zips each bundle into `dist/web-bundles/{slug}.zip` for GitHub Release attachment. `web-bundles/bundles.json` carries persona, copy, accent color, knowledge files, and platform feature flags (web-browsing, deep-research, Stitch). Zero deps; `execFileSync` + strict slug regex (`^[a-z0-9][a-z0-9-]*$`) eliminates shell-injection surface (#2424)
|
||||
* **`bmad-spec`, new core skill**: Distills any intent (brain dump, PRD, transcript, brief) into `SPEC.md` with a five-field kernel (Problem, Capabilities, Constraints, Non-goals, Success signal). Catalogs, tables, diagrams, and editorial-voice content go to named companions; absorbed inputs land in a `sources:` list downstream skips. Eight-rule Spec Law with lean-prose discipline. Outputs to `{output_folder}/specs/spec-{slug}/`, works without bmm installed. Headless callers get JSON; interactive runs close conversationally (#2417)
|
||||
* **`bmad-ux`, spine-based UX skill**: Rewrite around DESIGN.md (visual identity, Google Labs spec) + EXPERIENCE.md (behavior, flow, IA). Six-step activation matches `bmad-prd` and `bmad-product-brief`. Fast/Coaching modes. Opt-in reviewer gate (no auto-spend on parallel reviewers for hobby work). Per-category verdicts, no misleading headline grade. Ships three DESIGN.md examples (editorial/Linen & Logic, native mobile/Quill, web SaaS/Drift), two paired EXPERIENCE.md examples, one unpaired DESIGN.md modeling the pure Stitch handoff (#2413)
|
||||
* **19 new advanced-elicitation techniques**: New `framing` category plus additions across 7 categories (all 50 existing methods preserved). Highlights: Chain-of-Thought Scaffolding, Six Thinking Hats, Delphi Method, Inversion Analysis, Steelmanning, Morphological Analysis, Abstraction Laddering, Cascading Failure Simulation, Boundary & Edge Case Sweep (#2062)
|
||||
* **Docs sidebar-order validator**: `tools/validate-sidebar-order.js` flags duplicates, gaps, missing fields, and translation drift across English and translated docs. Wired into `docs:validate-sidebar`. Locale-pattern detection prevents nested English subfolders from being silently excluded (#2409)
|
||||
|
||||
### 🐛 Fixes
|
||||
|
||||
* **Skill activation guardrails strengthened across 23+ skills**: LLM agents were short-circuiting activation sequences (INCLUDE → READ → RUN → CHECK → FILTER → CD) by guessing variables instead of executing in order, silently skipping append steps and `on_complete` hooks. New guardrail names prepend/append steps explicitly and requires confirmation. Applied to all BMM planning + execution skills, all persona agents (analyst, tech-writer, pm, ux-designer, architect, dev), and new skills (bmad-spec, bmad-ux) (#2398)
|
||||
* **Installer reads `config.toml` on re-run**: `loadExistingConfig` only read legacy `_bmad/<module>/config.yaml`, so user-scoped answers (`user_name`, `communication_language`) written to `_bmad/config.user.toml` were ignored and users got re-prompted. Adds `parseCentralToml`; central toml read first, legacy yaml as fallback (#2411)
|
||||
* **Stale custom-source caches refreshed on quick-update**: Quick-update now calls `cloneRepo` for every cached custom module, persists the real `next` ref, and atomically dedupes the refresh. When `git fetch` fails (network, deleted repo, revoked auth), the previous clone is preserved with a warning instead of being wiped (#2399)
|
||||
* **Shallow-clone default branch resolution**: `--depth 1` clones leave `origin/HEAD` stale, so `git reset --hard origin/HEAD` never pulled new commits. Now resolves the default branch via `git symbolic-ref` and resets against `origin/<branch>` explicitly, falling back to `main` (#2332)
|
||||
* **SSH Git URLs with nested group paths**: Custom module installer parses GitLab subgroup and Gitea nested-team SSH URLs correctly (#2379)
|
||||
* **`project_context` defined in dev-story, sprint-planning, sprint-status**: Skills referenced the variable without resolving it, producing unresolved expansions at activation in some configurations (#2422)
|
||||
* **Dev story baseline commits captured**: Baselining records the commit set the story was scoped against, so reviews compare against a stable reference (#2403)
|
||||
* **Customization JSON written as UTF-8**: Non-ASCII team names, product names, and editorial overrides survive a round trip through `_bmad/custom/` (#2414)
|
||||
* **Brainstorming idea-flow stays collaborative**: Agent was prematurely converging on its own preferred ideas instead of mirroring and expanding the user's. Collaborative posture restored (#2402)
|
||||
|
||||
### 📚 Docs
|
||||
|
||||
* **bmad-investigate added to agent trigger tables**: `agents.md` and `named-agents.md` now show the `IN` trigger and forensic-investigation capability on Amelia's row, closing a v6.7.0 gap (#2410)
|
||||
* **Web Bundles install framing and update/customize guidance**: Drops misleading "one-click install" and "two files" claims; adds explicit Gem/GPT setup pattern and an "Updating and customizing" section: custom changes belong in the pasted instructions block, not the knowledge files, so updates do not clobber team customizations (#2423)
|
||||
* **Web-bundles install traffic centralized at bmadcode.com/web-bundles**: README, web-bundles README, explanation, and how-to pages all point at the site as the single supported install path (#2425)
|
||||
* **Reference docs for bmad-spec**: Full entry in `docs/reference/core-tools.md` (en); table-row stubs in cs/fr/vi-vn/zh-cn pending full translation
|
||||
|
||||
## v6.7.1 - 2026-05-18
|
||||
|
||||
### 🐛 Fixes
|
||||
|
|
|
|||
|
|
@ -79,11 +79,13 @@ BMad Method extends with official modules for specialized domains. Available dur
|
|||
|
||||
## Web Bundles
|
||||
|
||||
V4 shipped web bundles. V6 brings them back, new and improved. Find them in [`web-bundles/`](./web-bundles/).
|
||||
V4 shipped web bundles. V6 brings them back, new and improved.
|
||||
|
||||
Web bundles package selected BMad skills for installation as **Google Gemini Gems** and **ChatGPT Custom GPTs**. Use them to do the upfront planning work (brainstorming, product briefs, PRDs, PRFAQs, UX specs, market and industry research) in your web LLM subscription, then bring the polished artifacts into your IDE for implementation. Planning runs on a flat-rate subscription instead of metered IDE tokens, which is a meaningful cost saver on longer engagements. Ensure that when using you choose the best model available to you in Gemini or ChatGPT.
|
||||
Web bundles package selected BMad skills for installation as **Google Gemini Gems** and **ChatGPT Custom GPTs**. Use them to do the upfront planning work (brainstorming, product briefs, PRDs, PRFAQs, UX specs, market and industry research) in your web LLM subscription, then bring the polished artifacts into your IDE for implementation. Planning runs on a flat-rate subscription instead of metered IDE tokens, which is a meaningful cost saver on longer engagements. Choose the best model available to you in Gemini or ChatGPT.
|
||||
|
||||
Current shelf: brainstorming, product brief, PRFAQ, PRD, UX, market & industry research. Each bundle has its own `INSTRUCTIONS.md` to follow; the setup pattern is the same across the shelf (create a Gem or GPT, attach knowledge file(s) (bundle customized SKILL.md and additional content), paste the instructions block, save). See [the web bundles guide](https://docs.bmad-method.org/explanation/web-bundles/) for the concept and [the how-to](https://docs.bmad-method.org/how-to/use-web-bundles/) for setup details.
|
||||
Current shelf: brainstorming, product brief, PRFAQ, PRD, UX, market & industry research.
|
||||
|
||||
**Browse and install at [bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/)**. One card per bundle, inline install steps for Gemini and ChatGPT, one-click ZIP download. See [the web bundles guide](https://docs.bmad-method.org/explanation/web-bundles/) for the concept.
|
||||
|
||||
## Documentation
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Run the planning side of BMad in your web LLM subscription, then bring the artif
|
|||
|
||||
A web bundle is a BMad skill repackaged for installation as a **Google Gemini Gem** or **ChatGPT Custom GPT**. Each bundle includes a `SKILL.md` protocol you upload as a knowledge file, an `INSTRUCTIONS.md` block you paste into the Gem or GPT instructions, and any data files the skill needs (CSVs, templates, validation checklists, additionally progressively disclosed content). The persona lives in the pasted instructions; the protocol lives in the knowledge file. Swap personas without touching the protocol.
|
||||
|
||||
Setup is not one-click; you create the Gem or GPT, upload the knowledge files, paste the instructions, and save. The pattern is the same across the shelf, so once you've installed one bundle the next one is mechanical. Follow each bundle's `INSTRUCTIONS.md` for the platform-specific details.
|
||||
Setup is not one-click, but the steps are guided. **Install from [bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/)**. The site lists every bundle in a card grid, shows you the Gemini and ChatGPT install steps inline, and hands you the ZIP download. That is the supported install path; the pattern is the same across the shelf, so once you've installed one the next one is mechanical.
|
||||
|
||||
V4 of BMad shipped web bundles. V6 brings them back, rewritten for the current Gem and Custom GPT platforms with Canvas, Deep Research, and image generation in mind.
|
||||
|
||||
|
|
@ -79,4 +79,4 @@ Persona swaps, default user name, team-specific guardrails, preferred phrasing:
|
|||
|
||||
Web bundles are generated from BMad skills using the `bmad-os-skill-to-bundle` utility skill. Point it at any BMad skill folder and it produces the bundle files with persona inheritance from the owning agent.
|
||||
|
||||
See the [how-to guide](../how-to/use-web-bundles.md) for installation steps.
|
||||
Install any bundle from [bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/).
|
||||
|
|
|
|||
|
|
@ -3,64 +3,30 @@ title: 'Use Web Bundles'
|
|||
description: Install a BMad web bundle as a Google Gemini Gem or ChatGPT Custom GPT
|
||||
---
|
||||
|
||||
Use a **web bundle** to run BMad planning work in your Gemini or ChatGPT subscription instead of your IDE.
|
||||
Web bundles install from **[bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/)**.
|
||||
|
||||
## When to Use This
|
||||
## Why a single front door
|
||||
|
||||
- You want to run brainstorming, product brief, PRFAQ, PRD, UX, or market research in a web LLM.
|
||||
- You want to save IDE tokens by keeping the planning conversation on a flat-rate subscription.
|
||||
- You want to share a planning artifact with collaborators who don't have your IDE setup.
|
||||
The site is the only supported install path for the shelf. It keeps the steps current as Gemini and ChatGPT evolve, always points at the newest tagged release, and lets one signup put you on the list for new bundles as they ship.
|
||||
|
||||
## When to Skip This
|
||||
## What you'll do on the site
|
||||
|
||||
- The work needs to read or modify code in your repo. Stay in the IDE.
|
||||
- You don't have a Gemini Advanced or ChatGPT Plus subscription.
|
||||
1. Pick a bundle from the card grid.
|
||||
2. Open the install modal. Switch between the **Gemini Gem** and **ChatGPT GPT** tabs for the platform-specific steps.
|
||||
3. Download the bundle ZIP (one click; one-time free signup for email-only members).
|
||||
4. Follow the inline steps: create the Gem or Custom GPT, upload the knowledge files, paste the instructions block, save.
|
||||
|
||||
:::note[Prerequisites]
|
||||
## Prerequisites
|
||||
|
||||
- **For Gemini Gems**: Gemini Advanced subscription.
|
||||
- **For ChatGPT Custom GPTs**: Plus, Pro, Business, or Enterprise plan. Some bundles use Deep Research, which has its own plan availability.
|
||||
- A bundle from [`web-bundles/`](https://github.com/bmad-code-org/BMAD-METHOD/tree/main/web-bundles).
|
||||
:::
|
||||
- **For ChatGPT Custom GPTs**: Plus, Pro, Business, or Enterprise plan.
|
||||
- For bundles that use **Deep Research** (currently Market & Industry Research), enable it from the prompt bar (Tools → Deep Research). Deep Research has its own plan limits.
|
||||
|
||||
## Steps
|
||||
## Customize the persona
|
||||
|
||||
### 1. Pick a Bundle
|
||||
Each bundle's `INSTRUCTIONS.md` (inside the ZIP) includes a **Persona Swap Example** above the paste boundary. Replace the `[persona]` block in your installed instructions with the swap example to change voice without changing the protocol. You can also write your own persona from scratch; the protocol stays the same.
|
||||
|
||||
Browse [`web-bundles/`](https://github.com/bmad-code-org/BMAD-METHOD/tree/main/web-bundles) and pick the one for the work you're doing. Open the bundle folder; you'll see `SKILL.md`, `INSTRUCTIONS.md`, and any data files (CSVs, templates, validation checklists).
|
||||
|
||||
### 2. Install in Google Gemini
|
||||
|
||||
1. Go to [gemini.google.com](https://gemini.google.com) and create a new Gem.
|
||||
2. Name the Gem after the bundle (for example, **Market & Industry Research**).
|
||||
3. Upload the bundle's `SKILL.md` and any data files (`.csv`, `.md` templates, validation files) as knowledge files.
|
||||
4. Open the bundle's `INSTRUCTIONS.md`, scroll to the **PASTE BOUNDARY** line, and paste everything below it into the Gem's instructions box.
|
||||
5. Save.
|
||||
|
||||
Some bundles call for Deep Research. If yours does, enable it from the Gemini prompt bar (Tools → Deep Research) before starting each session.
|
||||
|
||||
### 3. Install in ChatGPT
|
||||
|
||||
1. Go to [chatgpt.com](https://chatgpt.com) and create a new Custom GPT under **Explore GPTs → Create**.
|
||||
2. Name the GPT after the bundle.
|
||||
3. Under **Configure → Knowledge**, upload the bundle's `SKILL.md` and any data files.
|
||||
4. Open the bundle's `INSTRUCTIONS.md`, scroll to the **PASTE BOUNDARY** line, and paste everything below it into **Instructions**.
|
||||
5. Under **Capabilities**, turn on **Web Browsing** if the bundle's install steps call for it.
|
||||
6. Save.
|
||||
|
||||
If the bundle integrates Deep Research, enable it before each session via the composer "+" menu or **Tools → Run deep research**.
|
||||
|
||||
### 4. Customize the Persona (Optional)
|
||||
|
||||
Each bundle's `INSTRUCTIONS.md` includes a **Persona Swap Example** above the paste boundary. Replace the `[persona]` block in your installed instructions with the swap example to change voice without changing the protocol. You can also write your own persona from scratch; the protocol stays the same.
|
||||
|
||||
### 5. Run a Session
|
||||
|
||||
Open the Gem or Custom GPT and send your first message. The persona greets you in character and starts the discovery conversation defined in `SKILL.md`. Canvas opens automatically when relevant.
|
||||
|
||||
When you're done, export or copy the Canvas document into your repo or hand it off to the next BMad skill in your IDE.
|
||||
|
||||
## What You Get
|
||||
## What you get
|
||||
|
||||
- A reusable Gem or Custom GPT scoped to one BMad planning capability.
|
||||
- Polished artifacts (briefs, PRDs, research reports, UX specs) ready to drop into your IDE for implementation.
|
||||
|
|
@ -70,6 +36,6 @@ When you're done, export or copy the Canvas document into your repo or hand it o
|
|||
Web LLMs occasionally drop persona partway through long sessions. If the model starts speaking out of character, remind it of its persona or start a fresh session.
|
||||
:::
|
||||
|
||||
## Building Your Own
|
||||
## Building your own
|
||||
|
||||
To turn an existing BMad skill into a web bundle, use the `bmad-os-skill-to-bundle` utility skill from [bmad-utility-skills](https://github.com/bmad-code-org/bmad-utility-skills). It produces the bundle files with persona inheritance from the owning agent and a swap-example contrast voice.
|
||||
To turn an existing BMad skill into a web bundle, use the `bmad-os-skill-to-bundle` utility skill from [bmad-utility-skills](https://github.com/bmad-code-org/bmad-utility-skills). It produces the bundle files with persona inheritance from the owning agent and a swap-example contrast voice. Submit your bundle to the shelf by opening a PR on [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) that adds the bundle directory and an entry in `web-bundles/bundles.json`.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "bmad-method",
|
||||
"version": "6.7.1",
|
||||
"version": "6.8.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "bmad-method",
|
||||
"version": "6.7.1",
|
||||
"version": "6.8.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@clack/core": "^1.3.1",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "bmad-method",
|
||||
"version": "6.7.1",
|
||||
"version": "6.8.0",
|
||||
"description": "Breakthrough Method of Agile AI-driven Development",
|
||||
"keywords": [
|
||||
"agile",
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ description: 'Execute story implementation following a context filled story spec
|
|||
**Your Role:** Developer implementing the story.
|
||||
- Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}
|
||||
- Generate all documents in {document_output_language}
|
||||
- Only modify the story file in these areas: Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status
|
||||
- Only modify the story file in these areas: YAML frontmatter `baseline_commit`, Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status
|
||||
- Execute ALL steps in exact order; do NOT skip steps
|
||||
- Absolutely DO NOT stop because of "milestones", "significant progress", or "session boundaries". Continue in a single execution until the story is COMPLETE (all ACs satisfied and all tasks/subtasks checked) UNLESS a HALT condition is triggered or the USER gives other instruction.
|
||||
- Do NOT schedule a "next session" or request review pauses unless a HALT condition applies. Only Step 9 decides completion.
|
||||
|
|
@ -76,7 +76,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
|
|||
<workflow>
|
||||
<critical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
|
||||
<critical>Generate all documents in {document_output_language}</critical>
|
||||
<critical>Only modify the story file in these areas: Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List,
|
||||
<critical>Only modify the story file in these areas: YAML frontmatter `baseline_commit`, Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List,
|
||||
Change Log, and Status</critical>
|
||||
<critical>Execute ALL steps in exact order; do NOT skip steps</critical>
|
||||
<critical>Absolutely DO NOT stop because of "milestones", "significant progress", or "session boundaries". Continue in a single execution
|
||||
|
|
@ -261,26 +261,40 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
|
|||
</step>
|
||||
|
||||
<step n="4" goal="Mark story in-progress" tag="sprint-status">
|
||||
<action>If story file YAML frontmatter already contains `baseline_commit`, preserve the existing value and do not overwrite it</action>
|
||||
|
||||
<check if="{{sprint_status}} file exists">
|
||||
<action>Load the FULL file: {{sprint_status}}</action>
|
||||
<action>Read all development_status entries to find {{story_key}}</action>
|
||||
<action>Get current status value for development_status[{{story_key}}]</action>
|
||||
<action>Set {{current_status}} to development_status[{{story_key}}]</action>
|
||||
</check>
|
||||
|
||||
<check if="current status == 'ready-for-dev' OR review_continuation == true">
|
||||
<check if="{{sprint_status}} file does NOT exist">
|
||||
<action>Set {{current_status}} to the story file Status section value</action>
|
||||
</check>
|
||||
|
||||
<check if="{{current_status}} == 'ready-for-dev' AND story file YAML frontmatter does NOT contain baseline_commit">
|
||||
<action>Run `git rev-parse HEAD` to capture current commit into {{baseline_commit}}; if git/version control is unavailable, set {{baseline_commit}} = `NO_VCS`</action>
|
||||
<action>If story file YAML frontmatter exists, add `baseline_commit: {{baseline_commit}}` to the frontmatter</action>
|
||||
<action>If story file has no YAML frontmatter, create frontmatter at the top containing only `baseline_commit: {{baseline_commit}}`</action>
|
||||
</check>
|
||||
|
||||
<check if="{{sprint_status}} file exists">
|
||||
<check if="{{current_status}} == 'ready-for-dev' OR (review_continuation == true AND {{current_status}} != 'in-progress')">
|
||||
<action>Update the story in the sprint status report to = "in-progress"</action>
|
||||
<action>Update last_updated field to current date</action>
|
||||
<output>🚀 Starting work on story {{story_key}}
|
||||
Status updated: ready-for-dev → in-progress
|
||||
Status updated: {{current_status}} → in-progress
|
||||
</output>
|
||||
</check>
|
||||
|
||||
<check if="current status == 'in-progress'">
|
||||
<check if="{{current_status}} == 'in-progress'">
|
||||
<output>⏯️ Resuming work on story {{story_key}}
|
||||
Story is already marked in-progress
|
||||
</output>
|
||||
</check>
|
||||
|
||||
<check if="current status is neither ready-for-dev nor in-progress">
|
||||
<check if="{{current_status}} is neither ready-for-dev nor in-progress">
|
||||
<output>⚠️ Unexpected story status: {{current_status}}
|
||||
Expected ready-for-dev or in-progress. Continuing anyway...
|
||||
</output>
|
||||
|
|
|
|||
|
|
@ -1,51 +1,70 @@
|
|||
num,category,method_name,description,output_pattern
|
||||
1,collaboration,Stakeholder Round Table,Convene multiple personas to contribute diverse perspectives - essential for requirements gathering and finding balanced solutions across competing interests,perspectives → synthesis → alignment
|
||||
2,collaboration,Expert Panel Review,Assemble domain experts for deep specialized analysis - ideal when technical depth and peer review quality are needed,expert views → consensus → recommendations
|
||||
3,collaboration,Debate Club Showdown,Two personas argue opposing positions while a moderator scores points - great for exploring controversial decisions and finding middle ground,thesis → antithesis → synthesis
|
||||
4,collaboration,User Persona Focus Group,Gather your product's user personas to react to proposals and share frustrations - essential for validating features and discovering unmet needs,reactions → concerns → priorities
|
||||
5,collaboration,Time Traveler Council,Past-you and future-you advise present-you on decisions - powerful for gaining perspective on long-term consequences vs short-term pressures,past wisdom → present choice → future impact
|
||||
6,collaboration,Cross-Functional War Room,Product manager + engineer + designer tackle a problem together - reveals trade-offs between feasibility desirability and viability,constraints → trade-offs → balanced solution
|
||||
7,collaboration,Mentor and Apprentice,Senior expert teaches junior while junior asks naive questions - surfaces hidden assumptions through teaching,explanation → questions → deeper understanding
|
||||
8,collaboration,Good Cop Bad Cop,Supportive persona and critical persona alternate - finds both strengths to build on and weaknesses to address,encouragement → criticism → balanced view
|
||||
9,collaboration,Improv Yes-And,Multiple personas build on each other's ideas without blocking - generates unexpected creative directions through collaborative building,idea → build → build → surprising result
|
||||
10,collaboration,Customer Support Theater,Angry customer and support rep roleplay to find pain points - reveals real user frustrations and service gaps,complaint → investigation → resolution → prevention
|
||||
11,advanced,Tree of Thoughts,Explore multiple reasoning paths simultaneously then evaluate and select the best - perfect for complex problems with multiple valid approaches,paths → evaluation → selection
|
||||
12,advanced,Graph of Thoughts,Model reasoning as an interconnected network of ideas to reveal hidden relationships - ideal for systems thinking and discovering emergent patterns,nodes → connections → patterns
|
||||
13,advanced,Thread of Thought,Maintain coherent reasoning across long contexts by weaving a continuous narrative thread - essential for RAG systems and maintaining consistency,context → thread → synthesis
|
||||
14,advanced,Self-Consistency Validation,Generate multiple independent approaches then compare for consistency - crucial for high-stakes decisions where verification matters,approaches → comparison → consensus
|
||||
15,advanced,Meta-Prompting Analysis,Step back to analyze the approach structure and methodology itself - valuable for optimizing prompts and improving problem-solving,current → analysis → optimization
|
||||
16,advanced,Reasoning via Planning,Build a reasoning tree guided by world models and goal states - excellent for strategic planning and sequential decision-making,model → planning → strategy
|
||||
17,competitive,Red Team vs Blue Team,Adversarial attack-defend analysis to find vulnerabilities - critical for security testing and building robust solutions,defense → attack → hardening
|
||||
18,competitive,Shark Tank Pitch,Entrepreneur pitches to skeptical investors who poke holes - stress-tests business viability and forces clarity on value proposition,pitch → challenges → refinement
|
||||
19,competitive,Code Review Gauntlet,Senior devs with different philosophies review the same code - surfaces style debates and finds consensus on best practices,reviews → debates → standards
|
||||
20,technical,Architecture Decision Records,Multiple architect personas propose and debate architectural choices with explicit trade-offs - ensures decisions are well-reasoned and documented,options → trade-offs → decision → rationale
|
||||
21,technical,Rubber Duck Debugging Evolved,Explain your code to progressively more technical ducks until you find the bug - forces clarity at multiple abstraction levels,simple → detailed → technical → aha
|
||||
22,technical,Algorithm Olympics,Multiple approaches compete on the same problem with benchmarks - finds optimal solution through direct comparison,implementations → benchmarks → winner
|
||||
23,technical,Security Audit Personas,Hacker + defender + auditor examine system from different threat models - comprehensive security review from multiple angles,vulnerabilities → defenses → compliance
|
||||
24,technical,Performance Profiler Panel,Database expert + frontend specialist + DevOps engineer diagnose slowness - finds bottlenecks across the full stack,symptoms → analysis → optimizations
|
||||
25,creative,SCAMPER Method,Apply seven creativity lenses (Substitute/Combine/Adapt/Modify/Put/Eliminate/Reverse) - systematic ideation for product innovation,S→C→A→M→P→E→R
|
||||
26,creative,Reverse Engineering,Work backwards from desired outcome to find implementation path - powerful for goal achievement and understanding endpoints,end state → steps backward → path forward
|
||||
27,creative,What If Scenarios,Explore alternative realities to understand possibilities and implications - valuable for contingency planning and exploration,scenarios → implications → insights
|
||||
28,creative,Random Input Stimulus,Inject unrelated concepts to spark unexpected connections - breaks creative blocks through forced lateral thinking,random word → associations → novel ideas
|
||||
29,creative,Exquisite Corpse Brainstorm,Each persona adds to the idea seeing only the previous contribution - generates surprising combinations through constrained collaboration,contribution → handoff → contribution → surprise
|
||||
30,creative,Genre Mashup,Combine two unrelated domains to find fresh approaches - innovation through unexpected cross-pollination,domain A + domain B → hybrid insights
|
||||
31,research,Literature Review Personas,Optimist researcher + skeptic researcher + synthesizer review sources - balanced assessment of evidence quality,sources → critiques → synthesis
|
||||
32,research,Thesis Defense Simulation,Student defends hypothesis against committee with different concerns - stress-tests research methodology and conclusions,thesis → challenges → defense → refinements
|
||||
33,research,Comparative Analysis Matrix,Multiple analysts evaluate options against weighted criteria - structured decision-making with explicit scoring,options → criteria → scores → recommendation
|
||||
34,risk,Pre-mortem Analysis,Imagine future failure then work backwards to prevent it - powerful technique for risk mitigation before major launches,failure scenario → causes → prevention
|
||||
35,risk,Failure Mode Analysis,Systematically explore how each component could fail - critical for reliability engineering and safety-critical systems,components → failures → prevention
|
||||
36,risk,Challenge from Critical Perspective,Play devil's advocate to stress-test ideas and find weaknesses - essential for overcoming groupthink,assumptions → challenges → strengthening
|
||||
37,risk,Identify Potential Risks,Brainstorm what could go wrong across all categories - fundamental for project planning and deployment preparation,categories → risks → mitigations
|
||||
38,risk,Chaos Monkey Scenarios,Deliberately break things to test resilience and recovery - ensures systems handle failures gracefully,break → observe → harden
|
||||
39,core,First Principles Analysis,Strip away assumptions to rebuild from fundamental truths - breakthrough technique for innovation and solving impossible problems,assumptions → truths → new approach
|
||||
40,core,5 Whys Deep Dive,Repeatedly ask why to drill down to root causes - simple but powerful for understanding failures,why chain → root cause → solution
|
||||
41,core,Socratic Questioning,Use targeted questions to reveal hidden assumptions and guide discovery - excellent for teaching and self-discovery,questions → revelations → understanding
|
||||
42,core,Critique and Refine,Systematic review to identify strengths and weaknesses then improve - standard quality check for drafts,strengths/weaknesses → improvements → refined
|
||||
43,core,Explain Reasoning,Walk through step-by-step thinking to show how conclusions were reached - crucial for transparency,steps → logic → conclusion
|
||||
44,core,Expand or Contract for Audience,Dynamically adjust detail level and technical depth for target audience - matches content to reader capabilities,audience → adjustments → refined content
|
||||
45,learning,Feynman Technique,Explain complex concepts simply as if teaching a child - the ultimate test of true understanding,complex → simple → gaps → mastery
|
||||
46,learning,Active Recall Testing,Test understanding without references to verify true knowledge - essential for identifying gaps,test → gaps → reinforcement
|
||||
47,philosophical,Occam's Razor Application,Find the simplest sufficient explanation by eliminating unnecessary complexity - essential for debugging,options → simplification → selection
|
||||
48,philosophical,Trolley Problem Variations,Explore ethical trade-offs through moral dilemmas - valuable for understanding values and difficult decisions,dilemma → analysis → decision
|
||||
49,retrospective,Hindsight Reflection,Imagine looking back from the future to gain perspective - powerful for project reviews,future view → insights → application
|
||||
50,retrospective,Lessons Learned Extraction,Systematically identify key takeaways and actionable improvements - essential for continuous improvement,experience → lessons → actions
|
||||
1,advanced,Tree of Thoughts,Explore multiple reasoning paths simultaneously then evaluate and select the best - perfect for complex problems with multiple valid approaches,paths → evaluation → selection
|
||||
2,advanced,Graph of Thoughts,Model reasoning as an interconnected network of ideas to reveal hidden relationships - ideal for systems thinking and discovering emergent patterns,nodes → connections → patterns
|
||||
3,advanced,Thread of Thought,Maintain coherent reasoning across long contexts by weaving a continuous narrative thread - essential for RAG systems and maintaining consistency,context → thread → synthesis
|
||||
4,advanced,Self-Consistency Validation,Generate multiple independent approaches then compare for consistency - crucial for high-stakes decisions where verification matters,approaches → comparison → consensus
|
||||
5,advanced,Meta-Prompting Analysis,Step back to analyze the approach structure and methodology itself - valuable for optimizing prompts and improving problem-solving,current → analysis → optimization
|
||||
6,advanced,Reasoning via Planning,Build a reasoning tree guided by world models and goal states - excellent for strategic planning and sequential decision-making,model → planning → strategy
|
||||
7,advanced,Chain-of-Thought Scaffolding,Force explicit intermediate reasoning steps before any conclusion — prevents intuitive leaps that skip flawed logic,premise → step → step → conclusion
|
||||
8,advanced,Few-Shot Exemplar Priming,Provide 2-3 worked examples of the desired reasoning pattern before the real task — aligns output format and depth through demonstration,examples → pattern recognition → application
|
||||
9,collaboration,Stakeholder Round Table,Convene multiple personas to contribute diverse perspectives - essential for requirements gathering and finding balanced solutions across competing interests,perspectives → synthesis → alignment
|
||||
10,collaboration,Expert Panel Review,Assemble domain experts for deep specialized analysis - ideal when technical depth and peer review quality are needed,expert views → consensus → recommendations
|
||||
11,collaboration,Debate Club Showdown,Two personas argue opposing positions while a moderator scores points - great for exploring controversial decisions and finding middle ground,thesis → antithesis → synthesis
|
||||
12,collaboration,User Persona Focus Group,Gather your product's user personas to react to proposals and share frustrations - essential for validating features and discovering unmet needs,reactions → concerns → priorities
|
||||
13,collaboration,Time Traveler Council,Past-you and future-you advise present-you on decisions - powerful for gaining perspective on long-term consequences vs short-term pressures,past wisdom → present choice → future impact
|
||||
14,collaboration,Cross-Functional War Room,Product manager + engineer + designer tackle a problem together - reveals trade-offs between feasibility desirability and viability,constraints → trade-offs → balanced solution
|
||||
15,collaboration,Mentor and Apprentice,Senior expert teaches junior while junior asks naive questions - surfaces hidden assumptions through teaching,explanation → questions → deeper understanding
|
||||
16,collaboration,Good Cop Bad Cop,Supportive persona and critical persona alternate - finds both strengths to build on and weaknesses to address,encouragement → criticism → balanced view
|
||||
17,collaboration,Improv Yes-And,Multiple personas build on each other's ideas without blocking - generates unexpected creative directions through collaborative building,idea → build → build → surprising result
|
||||
18,collaboration,Customer Support Theater,Angry customer and support rep roleplay to find pain points - reveals real user frustrations and service gaps,complaint → investigation → resolution → prevention
|
||||
19,collaboration,Six Thinking Hats,Rotate through six modes (facts - feelings - caution - optimism - creativity - process) to ensure a group covers every angle without crosstalk,white → red → black → yellow → green → blue
|
||||
20,collaboration,Delphi Method,Experts give independent estimates - see anonymized results - then revise — converges on calibrated group judgment while avoiding anchoring bias,independent estimates → reveal → revise → converge
|
||||
21,competitive,Red Team vs Blue Team,Adversarial attack-defend analysis to find vulnerabilities - critical for security testing and building robust solutions,defense → attack → hardening
|
||||
22,competitive,Shark Tank Pitch,Entrepreneur pitches to skeptical investors who poke holes - stress-tests business viability and forces clarity on value proposition,pitch → challenges → refinement
|
||||
23,competitive,Code Review Gauntlet,Senior devs with different philosophies review the same code - surfaces style debates and finds consensus on best practices,reviews → debates → standards
|
||||
24,core,First Principles Analysis,Strip away assumptions to rebuild from fundamental truths - breakthrough technique for innovation and solving impossible problems,assumptions → truths → new approach
|
||||
25,core,5 Whys Deep Dive,Repeatedly ask why to drill down to root causes - simple but powerful for understanding failures,why chain → root cause → solution
|
||||
26,core,Socratic Questioning,Use targeted questions to reveal hidden assumptions and guide discovery - excellent for teaching and self-discovery,questions → revelations → understanding
|
||||
27,core,Critique and Refine,Systematic review to identify strengths and weaknesses then improve - standard quality check for drafts,strengths/weaknesses → improvements → refined
|
||||
28,core,Explain Reasoning,Walk through step-by-step thinking to show how conclusions were reached - crucial for transparency,steps → logic → conclusion
|
||||
29,core,Expand or Contract for Audience,Dynamically adjust detail level and technical depth for target audience - matches content to reader capabilities,audience → adjustments → refined content
|
||||
30,core,Second-Order Thinking,Think beyond immediate consequences to anticipate cascading effects and long-term implications - essential for strategic decisions where first-order solutions create hidden downstream problems,action → consequences → second-order effects → informed choice
|
||||
31,core,Inversion Analysis,Flip the problem by asking what would guarantee failure instead of how to succeed - reveals hidden obstacles and blind spots by approaching challenges from the opposite direction,goal → invert → failure paths → avoidance → solution
|
||||
32,core,Problem Decomposition,Break a complex problem into independent sub-problems - solve each - then reassemble — essential when a task is too large or tangled to tackle whole,whole → parts → solutions → reassembly
|
||||
33,core,Analogy Mapping,Find a well-understood parallel domain and transfer its structure to the current problem — unlocks insight by borrowing proven mental models,source domain → mapping → target insight
|
||||
34,core,Steelmanning,Construct the strongest possible version of an opposing argument before responding — builds credibility and catches blind spots that strawmanning misses,opposing view → strongest form → honest rebuttal
|
||||
35,creative,SCAMPER Method,Apply seven creativity lenses (Substitute/Combine/Adapt/Modify/Put/Eliminate/Reverse) - systematic ideation for product innovation,S→C→A→M→P→E→R
|
||||
36,creative,Reverse Engineering,Work backwards from desired outcome to find implementation path - powerful for goal achievement and understanding endpoints,end state → steps backward → path forward
|
||||
37,creative,What If Scenarios,Explore alternative realities to understand possibilities and implications - valuable for contingency planning and exploration,scenarios → implications → insights
|
||||
38,creative,Random Input Stimulus,Inject unrelated concepts to spark unexpected connections - breaks creative blocks through forced lateral thinking,random word → associations → novel ideas
|
||||
39,creative,Exquisite Corpse Brainstorm,Each persona adds to the idea seeing only the previous contribution - generates surprising combinations through constrained collaboration,contribution → handoff → contribution → surprise
|
||||
40,creative,Genre Mashup,Combine two unrelated domains to find fresh approaches - innovation through unexpected cross-pollination,domain A + domain B → hybrid insights
|
||||
41,creative,Constraint Injection,Deliberately add an artificial limitation (budget - time - technology) to force novel solutions — creativity thrives under pressure,add constraint → forced creativity → remove constraint → evaluate
|
||||
42,creative,Morphological Analysis,List independent parameters of a problem - enumerate options for each - then systematically combine — ensures you don't miss non-obvious configurations,parameters → options grid → combinations → evaluation
|
||||
43,framing,Abstraction Laddering,"Move up (""why?"") for strategic clarity or down (""how?"") for tactical detail — ensures you're solving at the right altitude",concrete ↔ abstract → right level
|
||||
44,framing,Reframe the Question,Challenge whether the stated problem is the real problem — often the question itself is wrong and a better framing unlocks an easy answer,stated problem → reframe → true problem → solution
|
||||
45,framing,Stakeholder Lens Rotation,Serially adopt each stakeholder's world-view to see the same situation differently — reveals whose needs are being overlooked,perspective A → B → C → gaps found
|
||||
46,learning,Feynman Technique,Explain complex concepts simply as if teaching a child - the ultimate test of true understanding,complex → simple → gaps → mastery
|
||||
47,learning,Active Recall Testing,Test understanding without references to verify true knowledge - essential for identifying gaps,test → gaps → reinforcement
|
||||
48,learning,Deliberate Practice Loop,Identify a specific sub-skill - drill it with immediate feedback - adjust - repeat — targeted improvement beats general repetition,isolate → drill → feedback → adjust → repeat
|
||||
49,philosophical,Occam's Razor Application,Find the simplest sufficient explanation by eliminating unnecessary complexity - essential for debugging,options → simplification → selection
|
||||
50,philosophical,Trolley Problem Variations,Explore ethical trade-offs through moral dilemmas - valuable for understanding values and difficult decisions,dilemma → analysis → decision
|
||||
51,research,Literature Review Personas,Optimist researcher + skeptic researcher + synthesizer review sources - balanced assessment of evidence quality,sources → critiques → synthesis
|
||||
52,research,Thesis Defense Simulation,Student defends hypothesis against committee with different concerns - stress-tests research methodology and conclusions,thesis → challenges → defense → refinements
|
||||
53,research,Comparative Analysis Matrix,Multiple analysts evaluate options against weighted criteria - structured decision-making with explicit scoring,options → criteria → scores → recommendation
|
||||
54,research,Source Triangulation,Require at least three independent source types (quantitative - qualitative - expert) before accepting a claim — guards against single-source bias,claim → source A → source B → source C → confidence rating
|
||||
55,retrospective,Hindsight Reflection,Imagine looking back from the future to gain perspective - powerful for project reviews,future view → insights → application
|
||||
56,retrospective,Lessons Learned Extraction,Systematically identify key takeaways and actionable improvements - essential for continuous improvement,experience → lessons → actions
|
||||
57,risk,Pre-mortem Analysis,Imagine future failure then work backwards to prevent it - powerful technique for risk mitigation before major launches,failure scenario → causes → prevention
|
||||
58,risk,Failure Mode Analysis,Systematically explore how each component could fail - critical for reliability engineering and safety-critical systems,components → failures → prevention
|
||||
59,risk,Challenge from Critical Perspective,Play devil's advocate to stress-test ideas and find weaknesses - essential for overcoming groupthink,assumptions → challenges → strengthening
|
||||
60,risk,Identify Potential Risks,Brainstorm what could go wrong across all categories - fundamental for project planning and deployment preparation,categories → risks → mitigations
|
||||
61,risk,Chaos Monkey Scenarios,Deliberately break things to test resilience and recovery - ensures systems handle failures gracefully,break → observe → harden
|
||||
62,risk,Assumption Audit,Explicitly list every assumption underlying a plan - rate each by confidence and impact - then stress-test the weakest — prevents building on shaky foundations,list → rate → stress-test → shore up
|
||||
63,risk,Cascading Failure Simulation,Trace how one component's failure propagates through dependencies — reveals hidden coupling and single points of failure,trigger failure → trace propagation → find amplifiers → decouple
|
||||
64,technical,Architecture Decision Records,Multiple architect personas propose and debate architectural choices with explicit trade-offs - ensures decisions are well-reasoned and documented,options → trade-offs → decision → rationale
|
||||
65,technical,Rubber Duck Debugging Evolved,Explain your code to progressively more technical ducks until you find the bug - forces clarity at multiple abstraction levels,simple → detailed → technical → aha
|
||||
66,technical,Algorithm Olympics,Multiple approaches compete on the same problem with benchmarks - finds optimal solution through direct comparison,implementations → benchmarks → winner
|
||||
67,technical,Security Audit Personas,Hacker + defender + auditor examine system from different threat models - comprehensive security review from multiple angles,vulnerabilities → defenses → compliance
|
||||
68,technical,Performance Profiler Panel,Database expert + frontend specialist + DevOps engineer diagnose slowness - finds bottlenecks across the full stack,symptoms → analysis → optimizations
|
||||
69,technical,Boundary & Edge Case Sweep,Systematically test extremes - zeros - nulls - maximums - and type mismatches — catches the failures that happy-path thinking always misses,inputs → boundaries → edge cases → failures found
|
||||
|
|
|
|||
|
|
|
@ -19,6 +19,10 @@ function quoteCustomRef(ref) {
|
|||
class CustomModuleManager {
|
||||
/** @type {Map<string, Object>} Shared across all instances: module code -> ResolvedModule */
|
||||
static _resolutionCache = new Map();
|
||||
/** @type {Set<string>} Repo roots refreshed in the current process (dedupe quick-update fetches). */
|
||||
static _refreshedRepoPaths = new Set();
|
||||
/** @type {Map<string, Promise<void>>} In-flight refresh operations keyed by repo path. */
|
||||
static _refreshInFlight = new Map();
|
||||
|
||||
// ─── Source Parsing ───────────────────────────────────────────────────────
|
||||
|
||||
|
|
@ -111,7 +115,7 @@ class CustomModuleManager {
|
|||
}
|
||||
|
||||
// SSH URL: git@host:owner/repo.git
|
||||
const sshMatch = trimmed.match(/^git@([^:]+):([^/]+)\/([^/.]+?)(?:\.git)?$/);
|
||||
const sshMatch = trimmed.match(/^git@([^:]+):(.+?)\/([^/.]+?)(?:\.git)?$/);
|
||||
if (sshMatch) {
|
||||
const [, host, owner, repo] = sshMatch;
|
||||
return {
|
||||
|
|
@ -424,15 +428,39 @@ class CustomModuleManager {
|
|||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
});
|
||||
} else {
|
||||
execSync('git reset --hard origin/HEAD', {
|
||||
// Resolve the default branch (origin/HEAD) and fetch it explicitly.
|
||||
// With shallow clones, `origin/HEAD` is stale and `git reset --hard
|
||||
// origin/HEAD` never picks up new commits on the default branch.
|
||||
let defaultBranch = 'main';
|
||||
try {
|
||||
defaultBranch = execSync('git symbolic-ref refs/remotes/origin/HEAD --short', {
|
||||
cwd: repoCacheDir,
|
||||
stdio: 'pipe',
|
||||
})
|
||||
.toString()
|
||||
.trim()
|
||||
.replace('origin/', '');
|
||||
} catch {
|
||||
// Fallback if origin/HEAD is not set
|
||||
}
|
||||
execSync(`git fetch --depth 1 origin ${quoteCustomRef(defaultBranch)}`, {
|
||||
cwd: repoCacheDir,
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
|
||||
});
|
||||
execSync(`git reset --hard origin/${quoteCustomRef(defaultBranch)}`, {
|
||||
cwd: repoCacheDir,
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
});
|
||||
}
|
||||
fetchSpinner.stop(`Updated ${displayName}`);
|
||||
} catch {
|
||||
fetchSpinner.error(`Update failed, re-downloading ${displayName}`);
|
||||
await fs.remove(repoCacheDir);
|
||||
// Fetch failed against an existing cache — most often the remote is
|
||||
// unreachable (network down, repo deleted/moved, auth revoked).
|
||||
// Preserve the previous clone so re-deploy still works from cached
|
||||
// content; surface a warning so the user knows the cache is stale.
|
||||
fetchSpinner.error(`Could not refresh ${displayName} — keeping cached copy`);
|
||||
await prompts.log.warn(`Custom module ${displayName} was not refreshed (remote unreachable). Using cached copy.`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -466,6 +494,32 @@ class CustomModuleManager {
|
|||
} catch {
|
||||
// swallow — a non-git repo (local path) wouldn't reach here anyway
|
||||
}
|
||||
// Best-effort: capture the remote default branch name so channel marker
|
||||
// metadata for "next" reflects the actual tracked ref (not always "main").
|
||||
let defaultRef = 'main';
|
||||
if (!effectiveVersion) {
|
||||
try {
|
||||
const symbolic = execSync('git symbolic-ref --short refs/remotes/origin/HEAD', {
|
||||
cwd: repoCacheDir,
|
||||
stdio: 'pipe',
|
||||
})
|
||||
.toString()
|
||||
.trim();
|
||||
if (symbolic.startsWith('origin/')) {
|
||||
defaultRef = symbolic.slice('origin/'.length) || defaultRef;
|
||||
}
|
||||
} catch {
|
||||
// Fallback to previous marker value when symbolic ref is unavailable.
|
||||
try {
|
||||
const existingMarker = await fs.readJson(path.join(repoCacheDir, '.bmad-channel.json'));
|
||||
if (existingMarker?.channel === 'next' && typeof existingMarker.version === 'string' && existingMarker.version.trim()) {
|
||||
defaultRef = existingMarker.version.trim();
|
||||
}
|
||||
} catch {
|
||||
// Keep default fallback.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Write source metadata for later URL reconstruction
|
||||
const metadataPath = path.join(repoCacheDir, '.bmad-source.json');
|
||||
|
|
@ -478,6 +532,15 @@ class CustomModuleManager {
|
|||
sha: resolvedSha,
|
||||
clonedAt: new Date().toISOString(),
|
||||
});
|
||||
// Keep a channel marker in custom cache too so update paths that rely on
|
||||
// channel metadata (same as official-module cache) can treat this clone as
|
||||
// refreshable. URL + no explicit ref => next, explicit ref => pinned.
|
||||
await fs.writeJson(path.join(repoCacheDir, '.bmad-channel.json'), {
|
||||
channel: effectiveVersion ? 'pinned' : 'next',
|
||||
version: effectiveVersion || defaultRef,
|
||||
sha: resolvedSha,
|
||||
writtenAt: new Date().toISOString(),
|
||||
});
|
||||
|
||||
// Install dependencies if package.json exists (skip during browsing/analysis)
|
||||
const packageJsonPath = path.join(repoCacheDir, 'package.json');
|
||||
|
|
@ -642,6 +705,13 @@ class CustomModuleManager {
|
|||
const repoRoots = await this._findCacheRepoRoots(cacheDir);
|
||||
|
||||
for (const { repoPath, metadata } of repoRoots) {
|
||||
// Quick-update path: refresh URL-backed cached repos before reading
|
||||
// files from them so re-deploy uses latest commits for `next` and
|
||||
// the pinned ref for `pinned`.
|
||||
if (options.bmadDir && metadata?.rawInput) {
|
||||
await this._refreshRepoCacheOnce(repoPath, metadata);
|
||||
}
|
||||
|
||||
// Check marketplace.json for matching module code
|
||||
const marketplacePath = path.join(repoPath, '.claude-plugin', 'marketplace.json');
|
||||
if (!(await fs.pathExists(marketplacePath))) continue;
|
||||
|
|
@ -692,6 +762,45 @@ class CustomModuleManager {
|
|||
return this._findLocalSourceFromManifest(moduleCode, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh one cached repo at most once per process with in-flight dedupe.
|
||||
* Prevents concurrent quick-update callers from racing the same cache path.
|
||||
* @param {string} repoPath - Absolute cache repo path
|
||||
* @param {Object} metadata - Parsed .bmad-source.json metadata
|
||||
*/
|
||||
async _refreshRepoCacheOnce(repoPath, metadata) {
|
||||
if (CustomModuleManager._refreshedRepoPaths.has(repoPath)) return;
|
||||
|
||||
const existing = CustomModuleManager._refreshInFlight.get(repoPath);
|
||||
if (existing) {
|
||||
await existing;
|
||||
return;
|
||||
}
|
||||
|
||||
const refreshPromise = (async () => {
|
||||
try {
|
||||
await this.cloneRepo(metadata.rawInput, {
|
||||
silent: true,
|
||||
pinOverride: metadata.version || undefined,
|
||||
});
|
||||
CustomModuleManager._refreshedRepoPaths.add(repoPath);
|
||||
} catch (error_) {
|
||||
// cloneRepo only throws here for unrecoverable cases (no cache present
|
||||
// and a fresh clone failed, or an unexpected internal error). The
|
||||
// common "remote unreachable but cache exists" case is handled inside
|
||||
// cloneRepo, which preserves the clone and returns normally. Reaching
|
||||
// this catch means we have no usable cache — surface a warning so the
|
||||
// failure isn't silent.
|
||||
await prompts.log.warn(`Refresh of cached custom module at ${path.basename(repoPath)} failed: ${error_?.message || error_}`);
|
||||
} finally {
|
||||
CustomModuleManager._refreshInFlight.delete(repoPath);
|
||||
}
|
||||
})();
|
||||
|
||||
CustomModuleManager._refreshInFlight.set(repoPath, refreshPromise);
|
||||
await refreshPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the installation manifest for a localPath entry for this module.
|
||||
* Used as fallback when the module was installed from a local source (no cache entry).
|
||||
|
|
|
|||
|
|
@ -846,11 +846,35 @@ class OfficialModules {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Dynamically discover all installed modules by scanning bmad directory
|
||||
// A directory is a module ONLY if it contains a config.yaml file
|
||||
// Primary source: installer-written config.toml + config.user.toml (v6+).
|
||||
// Both files together hold all install answers; config.user.toml carries
|
||||
// user-scoped keys like user_name that would otherwise be re-prompted on
|
||||
// every reinstall.
|
||||
let foundAny = false;
|
||||
const entries = await fs.readdir(bmadDir, { withFileTypes: true });
|
||||
for (const fileName of ['config.toml', 'config.user.toml']) {
|
||||
const tomlPath = path.join(bmadDir, fileName);
|
||||
if (!(await fs.pathExists(tomlPath))) continue;
|
||||
try {
|
||||
const content = await fs.readFile(tomlPath, 'utf8');
|
||||
const parsed = parseCentralToml(content);
|
||||
for (const [section, values] of Object.entries(parsed)) {
|
||||
if (values && typeof values === 'object' && !Array.isArray(values)) {
|
||||
if (!this._existingConfig[section]) this._existingConfig[section] = {};
|
||||
Object.assign(this._existingConfig[section], values);
|
||||
foundAny = true;
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Ignore parse errors
|
||||
}
|
||||
}
|
||||
|
||||
if (foundAny) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Fallback: legacy per-module config.yaml files (pre-v6 installations).
|
||||
const entries = await fs.readdir(bmadDir, { withFileTypes: true });
|
||||
const nonModuleDirs = new Set(['_config', '_memory', 'memory', 'docs', 'scripts', 'custom']);
|
||||
for (const entry of entries) {
|
||||
if (entry.isDirectory()) {
|
||||
|
|
@ -2127,4 +2151,60 @@ class OfficialModules {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a config.toml or config.user.toml written by writeCentralConfig.
|
||||
* Only handles the subset of TOML the installer produces: [core],
|
||||
* [modules.<code>], string/bool/number scalar values. [agents.*] and other
|
||||
* sections are ignored. Returns a plain object keyed by section name where
|
||||
* module sections use the bare code (e.g. "bmm"), not the full "modules.bmm".
|
||||
*/
|
||||
function parseCentralToml(content) {
|
||||
const result = {};
|
||||
let currentSection = null;
|
||||
|
||||
for (const rawLine of content.split('\n')) {
|
||||
const line = rawLine.trim();
|
||||
if (!line || line.startsWith('#')) continue;
|
||||
|
||||
const sectionMatch = line.match(/^\[([^\]]+)\]\s*$/);
|
||||
if (sectionMatch) {
|
||||
const name = sectionMatch[1];
|
||||
if (name === 'core') {
|
||||
currentSection = 'core';
|
||||
} else if (name.startsWith('modules.')) {
|
||||
currentSection = name.slice('modules.'.length);
|
||||
} else {
|
||||
currentSection = null;
|
||||
}
|
||||
if (currentSection && !result[currentSection]) {
|
||||
result[currentSection] = {};
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!currentSection) continue;
|
||||
|
||||
const kvMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)$/);
|
||||
if (!kvMatch) continue;
|
||||
|
||||
const key = kvMatch[1];
|
||||
const raw = kvMatch[2].trim();
|
||||
let value;
|
||||
if (raw.startsWith('"') && raw.endsWith('"')) {
|
||||
value = raw.slice(1, -1).replaceAll(/\\(["\\nrbt])/g, (_, c) => ({ '"': '"', '\\': '\\', n: '\n', r: '\r', b: '\b', t: '\t' })[c]);
|
||||
} else if (raw === 'true') {
|
||||
value = true;
|
||||
} else if (raw === 'false') {
|
||||
value = false;
|
||||
} else if (raw !== '' && !isNaN(raw)) {
|
||||
value = Number(raw);
|
||||
} else {
|
||||
value = raw;
|
||||
}
|
||||
result[currentSection][key] = value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = { OfficialModules };
|
||||
|
|
|
|||
|
|
@ -2,39 +2,45 @@
|
|||
|
||||
V4 shipped web bundles. V6 brings them back, new and improved. Each bundle packages a BMad skill as a self-contained install for **Google Gemini Gems** and **ChatGPT Custom GPTs**, so you can run the planning work in your web LLM subscription before opening your IDE.
|
||||
|
||||
## Why use these
|
||||
## Install
|
||||
|
||||
**Go to [bmadcode.com/web-bundles](https://bmadcode.com/web-bundles/).**
|
||||
|
||||
The site lists every bundle in a card grid, walks you through the Gemini and ChatGPT setup inline, and hands you the ZIP download in one click. That is the only supported install path.
|
||||
|
||||
Why a single front door:
|
||||
|
||||
- One place to keep install steps current as Gemini and ChatGPT evolve.
|
||||
- Versioned releases. Every shelf update ships as a tagged GitHub Release; the site always points at the newest tag.
|
||||
- One signup gets you on the list for new bundles as they ship.
|
||||
|
||||
## Why use them
|
||||
|
||||
- **Cost.** Web LLM subscriptions are flat-rate. Run brainstorming, briefs, PRDs, and research there instead of burning IDE tokens.
|
||||
- **Right tool for the job.** Planning conversations want Canvas, image generation, and Deep Research. Implementation wants the codebase and a terminal. Use each where it's strongest.
|
||||
- **Persona swapping.** Every bundle's `INSTRUCTIONS.md` carries a default persona and a contrasting swap example. Change voices without touching the protocol.
|
||||
- **Persona swapping.** Every bundle ships a default persona and a contrasting swap example. Change voices without touching the protocol.
|
||||
|
||||
## The shelf
|
||||
|
||||
| Bundle | Purpose |
|
||||
| --- | --- |
|
||||
| [`brainstorming-coach/`](./brainstorming-coach/) | Facilitated ideation across 60 techniques. Defaults to **Carson** (Osborn lineage); swap to **Mary** for analyst rigor. |
|
||||
| [`product-brief-coach/`](./product-brief-coach/) | Build a one-page product brief through guided discovery. |
|
||||
| [`prfaq-coach/`](./prfaq-coach/) | Working Backwards PRFAQ challenge (Bezos lineage) to forge and stress-test product concepts. |
|
||||
| [`prd-coach/`](./prd-coach/) | Product Requirements Document with built-in validation (Cagan lineage). |
|
||||
| [`ux-coach/`](./ux-coach/) | UX patterns, flows, and design specifications. |
|
||||
| [`market-and-industry-research/`](./market-and-industry-research/) | Market research, customer JTBD, competitive landscape, regulatory and technical lenses. Deep Research mode integrated. |
|
||||
| Brainstorming Coach | Facilitated ideation across 60 techniques. Defaults to **Carson** (Osborn lineage); swap to **Mary** for analyst rigor. |
|
||||
| Product Brief Coach | Build a product brief through guided discovery. Create, Update, or Validate modes. |
|
||||
| PRFAQ Coach | Working Backwards PRFAQ challenge (Bezos lineage) to forge and stress-test product concepts. |
|
||||
| PRD Coach | Product Requirements Document with built-in validation (Cagan lineage). |
|
||||
| UX Coach | UX patterns, flows, and design specifications. Pairs with Google Stitch. |
|
||||
| Market & Industry Research | Market research, customer JTBD, competitive landscape, regulatory and technical lenses. Deep Research mode integrated. |
|
||||
|
||||
## Install
|
||||
|
||||
Each bundle has its own `INSTRUCTIONS.md` with platform-specific setup steps. Pattern is the same:
|
||||
|
||||
1. Create a Gem (Gemini) or Custom GPT (ChatGPT).
|
||||
2. Upload the bundle's `SKILL.md` (and any data files) as knowledge.
|
||||
3. Paste the block below the **PASTE BOUNDARY** into the instructions box.
|
||||
4. Enable Web Browsing / Deep Research if the bundle's install steps call for it.
|
||||
|
||||
Gemini Gems require Gemini Advanced. ChatGPT Custom GPTs require Plus, Pro, Business, or Enterprise; Deep Research has its own plan limits.
|
||||
Requires Gemini Advanced (for Gems) or ChatGPT Plus / Pro / Business / Enterprise (for Custom GPTs). Deep Research has its own plan limits.
|
||||
|
||||
## Build your own
|
||||
|
||||
Web bundles are generated from BMad skills using the [`bmad-os-skill-to-bundle`](https://github.com/bmad-code-org/bmad-utility-skills) utility skill. Point it at any BMad skill folder and it produces a `SKILL.md`, an `INSTRUCTIONS.md`, and any required data files, with persona inheritance from the owning agent.
|
||||
|
||||
## Docs
|
||||
## What's in this folder
|
||||
|
||||
- [What web bundles are and when to use them](https://docs.bmad-method.org/explanation/web-bundles/)
|
||||
- [How to install a web bundle](https://docs.bmad-method.org/how-to/use-web-bundles/)
|
||||
This folder is the **source** for the shelf, packaged into ZIPs and attached to GitHub Releases. End users do not install from here. If you are a contributor working on a bundle, the bundle directories and `bundles.json` are the files you edit; the [release packager](../tools/bundle-web-bundles.js) zips them and updates the release.
|
||||
|
||||
## Concept docs
|
||||
|
||||
[What web bundles are and when to use them](https://docs.bmad-method.org/explanation/web-bundles/).
|
||||
|
|
|
|||
Loading…
Reference in New Issue