ma-agents 3.14.1 → 3.15.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +3 -3
  2. package/lib/agents.js +2 -2
  3. package/lib/bmad-customize/bmm-qa.customize.yaml +3 -3
  4. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +3 -3
  5. package/lib/bmad-extension/skills/bmad-knowledge/.gitkeep +0 -0
  6. package/lib/bmad-extension/skills/bmad-knowledge/SKILL.md +143 -0
  7. package/lib/{bmad-extension-plugin/skills/bmad-dev-epic → bmad-extension/skills/bmad-knowledge}/bmad-skill-manifest.yaml +1 -1
  8. package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +3 -3
  9. package/lib/bmad-extension/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
  10. package/lib/bmad-extension/skills/module-help.csv +2 -2
  11. package/lib/bmad-extension/skills/module.yaml +1 -1
  12. package/lib/bmad-extension/skills/sqa-audit/SKILL.md +2 -2
  13. package/lib/bmad-extension/skills/sqa-ieee12207/SKILL.md +3 -3
  14. package/lib/bmad-extension/skills/sqa-requirements-quality/SKILL.md +2 -2
  15. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +4 -4
  16. package/lib/bmad-extension-plugin/skills/bmad-knowledge/.gitkeep +0 -0
  17. package/lib/bmad-extension-plugin/skills/bmad-knowledge/SKILL.md +143 -0
  18. package/lib/{bmad-extension/skills/bmad-dev-epic → bmad-extension-plugin/skills/bmad-knowledge}/bmad-skill-manifest.yaml +1 -1
  19. package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +3 -3
  20. package/lib/bmad-extension-plugin/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
  21. package/lib/bmad-extension-plugin/skills/module-help.csv +2 -2
  22. package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
  23. package/lib/bmad-extension-plugin/skills/sqa-audit/SKILL.md +2 -2
  24. package/lib/bmad-extension-plugin/skills/sqa-ieee12207/SKILL.md +3 -3
  25. package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/SKILL.md +2 -2
  26. package/lib/bmad.js +15 -0
  27. package/lib/installer.js +88 -0
  28. package/lib/knowledge-atlas/dist/atlas.cjs +14435 -0
  29. package/lib/knowledge-atlas/src/cli.ts +55 -0
  30. package/lib/knowledge-atlas/src/extract/entities.ts +519 -0
  31. package/lib/knowledge-atlas/src/extract/frontmatter.ts +84 -0
  32. package/lib/knowledge-atlas/src/extract/slug.ts +91 -0
  33. package/lib/knowledge-atlas/src/generate.ts +441 -0
  34. package/lib/knowledge-atlas/src/graph/build.ts +344 -0
  35. package/lib/knowledge-atlas/src/graph/reconcile.ts +344 -0
  36. package/lib/knowledge-atlas/src/index.ts +11 -0
  37. package/lib/knowledge-atlas/src/manifest/incremental.ts +146 -0
  38. package/lib/knowledge-atlas/src/manifest/persist.ts +112 -0
  39. package/lib/knowledge-atlas/src/render/backlinks.ts +160 -0
  40. package/lib/knowledge-atlas/src/render/design-system.ts +632 -0
  41. package/lib/knowledge-atlas/src/render/diagrams.ts +776 -0
  42. package/lib/knowledge-atlas/src/render/document.ts +345 -0
  43. package/lib/knowledge-atlas/src/render/force-graph-umd.ts +22 -0
  44. package/lib/knowledge-atlas/src/render/graph.ts +866 -0
  45. package/lib/knowledge-atlas/src/render/layout.ts +182 -0
  46. package/lib/knowledge-atlas/src/render/linkify.ts +464 -0
  47. package/lib/knowledge-atlas/src/render/orphan.ts +562 -0
  48. package/lib/knowledge-atlas/src/render/paths.ts +134 -0
  49. package/lib/knowledge-atlas/src/render/search.ts +343 -0
  50. package/lib/knowledge-atlas/src/render/site.ts +318 -0
  51. package/lib/knowledge-atlas/src/scan/config.ts +252 -0
  52. package/lib/knowledge-atlas/src/scan/hash.ts +49 -0
  53. package/lib/knowledge-atlas/src/scan/scanner.ts +319 -0
  54. package/lib/knowledge-atlas/src/types.ts +279 -0
  55. package/lib/knowledge-atlas/tsconfig.json +22 -0
  56. package/package.json +70 -58
  57. package/scripts/build-atlas.js +253 -0
  58. package/skills/bmad-knowledge/SKILL.md +143 -0
  59. package/skills/bmad-knowledge/skill.json +7 -0
  60. package/lib/bmad-extension/skills/bmad-dev-epic/SKILL.md +0 -101
  61. package/lib/bmad-extension/skills/bmad-dev-epic/checklist.md +0 -44
  62. package/lib/bmad-extension/skills/bmad-dev-epic/customize.toml +0 -54
  63. package/lib/bmad-extension/skills/bmad-dev-epic/references/story-pipeline.md +0 -112
  64. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-01-intake.md +0 -59
  65. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-02-plan-waves.md +0 -56
  66. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-03-epic-branch.md +0 -35
  67. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-04-run-waves.md +0 -49
  68. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +0 -31
  69. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-06-release.md +0 -57
  70. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-07-report.md +0 -40
  71. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/SKILL.md +0 -101
  72. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/checklist.md +0 -44
  73. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/customize.toml +0 -54
  74. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/references/story-pipeline.md +0 -112
  75. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-01-intake.md +0 -59
  76. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-02-plan-waves.md +0 -56
  77. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-03-epic-branch.md +0 -35
  78. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-04-run-waves.md +0 -49
  79. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +0 -31
  80. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-06-release.md +0 -57
  81. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-07-report.md +0 -40
@@ -172,7 +172,7 @@ After running all selected dimensions, compile a full audit report.
172
172
  ```
173
173
  # SQA Audit Report
174
174
  **Date:** {today's date}
175
- **Auditor:** Gadi (SQA Agent)
175
+ **Auditor:** Gad (SQA Agent)
176
176
  **Scope:** {list of audited dimensions}
177
177
  **Overall Status:** PASS | WARNING | FAIL
178
178
 
@@ -246,7 +246,7 @@ If yes, generate and save a remediation plan to:
246
246
  ```
247
247
  # SQA Remediation Plan
248
248
  **Date:** {today's date}
249
- **Auditor:** Gadi (SQA Agent)
249
+ **Auditor:** Gad (SQA Agent)
250
250
  **Source Report:** sqa-audit-report-{YYYY-MM-DD}.md
251
251
  **Scope:** {audited dimensions}
252
252
 
@@ -193,7 +193,7 @@ Evaluate each selected process group. For each process area, assign a compliance
193
193
 
194
194
  ### Group 4 — Organizational Project-Enabling Processes
195
195
 
196
- Note to Gadi: For Group 4 items, briefly assess based on available evidence only. These are primarily organizational-scope and marked accordingly.
196
+ Note to Gad: For Group 4 items, briefly assess based on available evidence only. These are primarily organizational-scope and marked accordingly.
197
197
 
198
198
  #### 4.1 Life Cycle Model Management (6.2.1)
199
199
  - Is a defined software life cycle model being followed?
@@ -216,7 +216,7 @@ Compile the full compliance report.
216
216
  ```
217
217
  # IEEE/ISO/IEC 12207:2017 Compliance Report
218
218
  **Date:** {today's date}
219
- **Auditor:** Gadi (SQA Agent)
219
+ **Auditor:** Gad (SQA Agent)
220
220
  **Standard:** IEEE/ISO/IEC 12207:2017 — Systems and software engineering — Software life cycle processes
221
221
  **Scope:** {selected process groups}
222
222
  **Overall Compliance Level:** COMPLIANT | PARTIAL | NON-COMPLIANT
@@ -332,7 +332,7 @@ If yes, generate and save a remediation plan to:
332
332
  ```
333
333
  # IEEE/ISO/IEC 12207 Remediation Plan
334
334
  **Date:** {today's date}
335
- **Auditor:** Gadi (SQA Agent)
335
+ **Auditor:** Gad (SQA Agent)
336
336
  **Source Report:** sqa-ieee12207-report-{YYYY-MM-DD}.md
337
337
  **Standard:** IEEE/ISO/IEC 12207:2017
338
338
 
@@ -157,7 +157,7 @@ Compile the full report in this structure:
157
157
  ```
158
158
  # Requirements Quality Audit Report
159
159
  **Date:** {today's date}
160
- **Auditor:** Gadi (SQA Agent)
160
+ **Auditor:** Gad (SQA Agent)
161
161
  **Scope:** {selected document sources}
162
162
  **Requirements Audited:** {total count}
163
163
  **Overall Quality Score:** {X}/{Y} ({P}%)
@@ -216,7 +216,7 @@ If yes, save a remediation plan to:
216
216
  ```
217
217
  # Requirements Quality Remediation Plan
218
218
  **Date:** {today's date}
219
- **Auditor:** Gadi (SQA Agent)
219
+ **Auditor:** Gad (SQA Agent)
220
220
  **Source Report:** sqa-requirements-quality-report-{YYYY-MM-DD}.md
221
221
 
222
222
  ---
package/lib/bmad.js CHANGED
@@ -307,6 +307,21 @@ function ensurePluginStageGitignoredForProject(projectRoot) {
307
307
  );
308
308
  }
309
309
  }
310
+
311
+ // Story 29.1 — ensure the Knowledge Atlas site output directory is gitignored.
312
+ // `_bmad-output/knowledge-site/` is transient (regenerated on each skill run)
313
+ // and must not be committed. `_bmad-output/` itself remains tracked.
314
+ if (typeof installer.ensureKnowledgeSiteIgnored === 'function') {
315
+ try {
316
+ installer.ensureKnowledgeSiteIgnored(projectRoot);
317
+ } catch (err) {
318
+ console.warn(
319
+ chalk.yellow(
320
+ ` Warning: could not update ${path.join(projectRoot, '.gitignore')} with knowledge-site/ entry: ${err.message}`
321
+ )
322
+ );
323
+ }
324
+ }
310
325
  }
311
326
 
312
327
  /**
package/lib/installer.js CHANGED
@@ -487,6 +487,93 @@ function ensureBmadDirIgnored(projectRoot) {
487
487
  );
488
488
  }
489
489
 
490
+ // Story 29.1 — Knowledge Atlas site output is generated into
491
+ // `_bmad-output/knowledge-site/` on every skill invocation. This directory is
492
+ // transient (regenerated each run) and should never be committed. It is gitignored
493
+ // by the same append-only, idempotent policy as the plugin stage and _bmad/ tree.
494
+ //
495
+ // IMPORTANT: `_bmad-output/` itself is intentionally kept tracked (project knowledge
496
+ // artifacts live there). Only the nested `knowledge-site/` subdirectory is ignored.
497
+ const KNOWLEDGE_SITE_DIR_NAME = '_bmad-output/knowledge-site';
498
+ const KNOWLEDGE_SITE_PATTERNS = [
499
+ KNOWLEDGE_SITE_DIR_NAME, // _bmad-output/knowledge-site
500
+ `${KNOWLEDGE_SITE_DIR_NAME}/`, // _bmad-output/knowledge-site/
501
+ `/${KNOWLEDGE_SITE_DIR_NAME}`, // /_bmad-output/knowledge-site
502
+ `/${KNOWLEDGE_SITE_DIR_NAME}/`, // /_bmad-output/knowledge-site/
503
+ ];
504
+ const KNOWLEDGE_SITE_CANONICAL_ENTRY = `${KNOWLEDGE_SITE_DIR_NAME}/`;
505
+
506
+ /**
507
+ * Ensure `_bmad-output/knowledge-site/` is present in the target project's
508
+ * `.gitignore`. Mirrors the append-only, idempotent, EOL-preserving contract
509
+ * of `ensurePluginStageIgnored` and `ensureBmadDirIgnored`.
510
+ *
511
+ * - If `.gitignore` is absent, create it with the single canonical entry.
512
+ * - If any active (non-comment) line already matches any KNOWLEDGE_SITE_PATTERNS
513
+ * variant, do nothing (idempotent).
514
+ * - Otherwise, append `KNOWLEDGE_SITE_CANONICAL_ENTRY` preserving the file's
515
+ * existing EOL style.
516
+ *
517
+ * Non-fatal: EACCES / EROFS are swallowed by the caller in lib/bmad.js so an
518
+ * unwritable .gitignore never aborts the install. This function throws on other
519
+ * I/O errors so the caller can decide whether to swallow.
520
+ *
521
+ * Defensive: no-op on falsy / non-string projectRoot.
522
+ *
523
+ * @param {string} projectRoot - Absolute path to the target project root.
524
+ */
525
+ function ensureKnowledgeSiteIgnored(projectRoot) {
526
+ if (typeof projectRoot !== 'string' || projectRoot.length === 0) {
527
+ return;
528
+ }
529
+
530
+ const gitignorePath = path.join(projectRoot, '.gitignore');
531
+
532
+ let content = '';
533
+ let fileExists = true;
534
+ try {
535
+ content = fs.readFileSync(gitignorePath, 'utf-8');
536
+ } catch (err) {
537
+ if (err.code !== 'ENOENT') throw err;
538
+ fileExists = false;
539
+ }
540
+
541
+ if (fileExists) {
542
+ const alreadyPresent = content.split(/\r?\n/).some(rawLine => {
543
+ const line = rawLine.trim();
544
+ if (!line || line.startsWith('#')) return false; // skip blanks & comments
545
+ // Exact match on any canonical variant.
546
+ if (KNOWLEDGE_SITE_PATTERNS.includes(line)) return true;
547
+ // Broader coverage: if a parent entry (`_bmad-output` / `_bmad-output/`,
548
+ // optionally anchored with a leading slash) is already ignored, then the
549
+ // nested `knowledge-site/` is implicitly covered — appending our entry
550
+ // would be redundant. Match the directory form precisely so we never
551
+ // mistake an unrelated entry like `_bmad-output-archive` for a parent.
552
+ const normalized = line.replace(/^\//, '').replace(/\/$/, '');
553
+ if (normalized === '_bmad-output') return true;
554
+ return false;
555
+ });
556
+ if (alreadyPresent) return; // idempotent no-op
557
+ }
558
+
559
+ // Preserve the file's existing line-ending style; default to LF for new files.
560
+ const usesCrlf = fileExists && /\r\n/.test(content);
561
+ const eol = usesCrlf ? '\r\n' : '\n';
562
+
563
+ let next = content;
564
+ if (next && !next.endsWith('\n') && !next.endsWith('\r\n')) {
565
+ next += eol; // ensure the append lands on its own line
566
+ }
567
+ next += KNOWLEDGE_SITE_CANONICAL_ENTRY + eol;
568
+
569
+ fs.writeFileSync(gitignorePath, next, 'utf-8');
570
+ console.log(
571
+ chalk.green(
572
+ `${KNOWLEDGE_SITE_CANONICAL_ENTRY} added to .gitignore (Knowledge Atlas site output — regenerated on each run)`
573
+ )
574
+ );
575
+ }
576
+
490
577
  function ensureManifest(installPath, agentId, scope) {
491
578
  let manifest = readManifest(installPath);
492
579
  if (!manifest) {
@@ -2260,6 +2347,7 @@ module.exports = {
2260
2347
  ensureBmadOutputTracked,
2261
2348
  ensurePluginStageIgnored,
2262
2349
  ensureBmadDirIgnored,
2350
+ ensureKnowledgeSiteIgnored,
2263
2351
  reconcileAgentsSharedSkills,
2264
2352
  getAgentsSharedSkillAgentIds,
2265
2353
  generateSkillsManifest,