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.
- package/README.md +3 -3
- package/lib/agents.js +2 -2
- package/lib/bmad-customize/bmm-qa.customize.yaml +3 -3
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +3 -3
- package/lib/bmad-extension/skills/bmad-knowledge/.gitkeep +0 -0
- package/lib/bmad-extension/skills/bmad-knowledge/SKILL.md +143 -0
- package/lib/{bmad-extension-plugin/skills/bmad-dev-epic → bmad-extension/skills/bmad-knowledge}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +3 -3
- package/lib/bmad-extension/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension/skills/module-help.csv +2 -2
- package/lib/bmad-extension/skills/module.yaml +1 -1
- package/lib/bmad-extension/skills/sqa-audit/SKILL.md +2 -2
- package/lib/bmad-extension/skills/sqa-ieee12207/SKILL.md +3 -3
- package/lib/bmad-extension/skills/sqa-requirements-quality/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +4 -4
- package/lib/bmad-extension-plugin/skills/bmad-knowledge/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/bmad-knowledge/SKILL.md +143 -0
- package/lib/{bmad-extension/skills/bmad-dev-epic → bmad-extension-plugin/skills/bmad-knowledge}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +3 -3
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/module-help.csv +2 -2
- package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/sqa-audit/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/skills/sqa-ieee12207/SKILL.md +3 -3
- package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/SKILL.md +2 -2
- package/lib/bmad.js +15 -0
- package/lib/installer.js +88 -0
- package/lib/knowledge-atlas/dist/atlas.cjs +14435 -0
- package/lib/knowledge-atlas/src/cli.ts +55 -0
- package/lib/knowledge-atlas/src/extract/entities.ts +519 -0
- package/lib/knowledge-atlas/src/extract/frontmatter.ts +84 -0
- package/lib/knowledge-atlas/src/extract/slug.ts +91 -0
- package/lib/knowledge-atlas/src/generate.ts +441 -0
- package/lib/knowledge-atlas/src/graph/build.ts +344 -0
- package/lib/knowledge-atlas/src/graph/reconcile.ts +344 -0
- package/lib/knowledge-atlas/src/index.ts +11 -0
- package/lib/knowledge-atlas/src/manifest/incremental.ts +146 -0
- package/lib/knowledge-atlas/src/manifest/persist.ts +112 -0
- package/lib/knowledge-atlas/src/render/backlinks.ts +160 -0
- package/lib/knowledge-atlas/src/render/design-system.ts +632 -0
- package/lib/knowledge-atlas/src/render/diagrams.ts +776 -0
- package/lib/knowledge-atlas/src/render/document.ts +345 -0
- package/lib/knowledge-atlas/src/render/force-graph-umd.ts +22 -0
- package/lib/knowledge-atlas/src/render/graph.ts +866 -0
- package/lib/knowledge-atlas/src/render/layout.ts +182 -0
- package/lib/knowledge-atlas/src/render/linkify.ts +464 -0
- package/lib/knowledge-atlas/src/render/orphan.ts +562 -0
- package/lib/knowledge-atlas/src/render/paths.ts +134 -0
- package/lib/knowledge-atlas/src/render/search.ts +343 -0
- package/lib/knowledge-atlas/src/render/site.ts +318 -0
- package/lib/knowledge-atlas/src/scan/config.ts +252 -0
- package/lib/knowledge-atlas/src/scan/hash.ts +49 -0
- package/lib/knowledge-atlas/src/scan/scanner.ts +319 -0
- package/lib/knowledge-atlas/src/types.ts +279 -0
- package/lib/knowledge-atlas/tsconfig.json +22 -0
- package/package.json +70 -58
- package/scripts/build-atlas.js +253 -0
- package/skills/bmad-knowledge/SKILL.md +143 -0
- package/skills/bmad-knowledge/skill.json +7 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/SKILL.md +0 -101
- package/lib/bmad-extension/skills/bmad-dev-epic/checklist.md +0 -44
- package/lib/bmad-extension/skills/bmad-dev-epic/customize.toml +0 -54
- package/lib/bmad-extension/skills/bmad-dev-epic/references/story-pipeline.md +0 -112
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-01-intake.md +0 -59
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-02-plan-waves.md +0 -56
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-03-epic-branch.md +0 -35
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-04-run-waves.md +0 -49
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +0 -31
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-06-release.md +0 -57
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-07-report.md +0 -40
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/SKILL.md +0 -101
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/checklist.md +0 -44
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/customize.toml +0 -54
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/references/story-pipeline.md +0 -112
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-01-intake.md +0 -59
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-02-plan-waves.md +0 -56
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-03-epic-branch.md +0 -35
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-04-run-waves.md +0 -49
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +0 -31
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-06-release.md +0 -57
- 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:**
|
|
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:**
|
|
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
|
|
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:**
|
|
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:**
|
|
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:**
|
|
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:**
|
|
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,
|