musubix2 0.5.7 → 0.5.8

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.
@@ -1 +1 @@
1
- {"generator":"musubix2","version":"0.5.7","timestamp":"2026-07-09T10:10:51.798Z"}
1
+ {"generator":"musubix2","version":"0.5.8","timestamp":"2026-07-09T10:18:54.616Z"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0",
3
- "generatedAt": "2026-07-09T10:10:51.826Z",
3
+ "generatedAt": "2026-07-09T10:18:54.648Z",
4
4
  "entries": [
5
5
  {
6
6
  "platform": "copilot",
package/dist/cli.js CHANGED
@@ -13836,108 +13836,139 @@ function fail(error) {
13836
13836
  }
13837
13837
  function sddCoreTools() {
13838
13838
  return [
13839
- tool("sdd.requirements.create", "Create an EARS requirement (Easy Approach to Requirements Syntax)", "sdd-core", [
13840
- param("pattern", "string", "EARS pattern: ubiquitous | event-driven | unwanted | state-driven | optional"),
13841
- param("text", "string", "Requirement text"),
13839
+ tool("sdd.requirements.create", "Create and classify an EARS requirement (Easy Approach to Requirements Syntax)", "sdd-core", [
13840
+ param("text", "string", "Requirement text (EARS sentence)"),
13842
13841
  param("id", "string", "Requirement ID", false)
13843
13842
  ], async (params) => {
13844
13843
  try {
13845
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13846
- const req = core.createRequirement?.({
13847
- pattern: params["pattern"],
13848
- text: params["text"],
13849
- id: params["id"]
13844
+ const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13845
+ const v = createEARSValidator2();
13846
+ const text = params["text"];
13847
+ const analysis = v.analyze(text);
13848
+ const validation = v.validate(text);
13849
+ return ok({
13850
+ id: params["id"] ?? "REQ-XXX-001",
13851
+ text,
13852
+ pattern: analysis.pattern,
13853
+ confidence: analysis.confidence,
13854
+ valid: validation.valid,
13855
+ issues: validation.issues
13850
13856
  });
13851
- return ok(req ?? { pattern: params["pattern"], text: params["text"], id: params["id"] ?? "REQ-001" });
13852
13857
  } catch {
13853
- return ok({ pattern: params["pattern"], text: params["text"], id: params["id"] ?? "REQ-001" });
13858
+ return fail("Core package not available");
13854
13859
  }
13855
13860
  }),
13856
- tool("sdd.requirements.validate", "Validate requirements for completeness and consistency", "sdd-core", [param("requirements", "array", "Array of requirement objects to validate")], async (params) => {
13861
+ tool("sdd.requirements.validate", "Validate requirements (EARS pattern + issues) for a list of requirement texts", "sdd-core", [param("requirements", "array", "Array of requirement texts or {text} objects")], async (params) => {
13857
13862
  try {
13858
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13859
- const result = core.validateRequirements?.(params["requirements"]);
13860
- return ok(result ?? { valid: true, issues: [] });
13863
+ const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13864
+ const v = createEARSValidator2();
13865
+ const items = params["requirements"] ?? [];
13866
+ const results = items.map((it) => {
13867
+ const text = typeof it === "string" ? it : it.text ?? "";
13868
+ const analysis = v.analyze(text);
13869
+ const validation = v.validate(text);
13870
+ return { text, pattern: analysis.pattern, valid: validation.valid, issues: validation.issues };
13871
+ });
13872
+ return ok({ results, allValid: results.every((r) => r.valid) });
13861
13873
  } catch {
13862
- return ok({ valid: true, issues: [] });
13874
+ return fail("Core package not available");
13863
13875
  }
13864
13876
  }),
13865
- tool("sdd.requirements.list", "List all requirements in the current project", "sdd-core", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
13877
+ tool("sdd.requirements.list", "Parse and list requirements from a Markdown requirements document", "sdd-core", [param("markdown", "string", "Requirements document contents (Markdown)")], async (params) => {
13866
13878
  try {
13867
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13868
- const list = core.listRequirements?.(params["basePath"] ?? ".");
13869
- return ok(list ?? []);
13879
+ const { MarkdownEARSParser: MarkdownEARSParser2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13880
+ const parsed = new MarkdownEARSParser2().parse(params["markdown"] ?? "");
13881
+ return ok(parsed.map((r) => ({ id: r.id, title: r.title, pattern: r.pattern, text: r.text })));
13870
13882
  } catch {
13871
- return ok([]);
13883
+ return fail("Core package not available");
13872
13884
  }
13873
13885
  }),
13874
- tool("sdd.design.generate", "Generate a design document from requirements", "sdd-core", [
13875
- param("requirements", "array", "Requirements to generate design from"),
13876
- param("format", "string", "Output format: markdown | json", false, "markdown")
13877
- ], async (params) => {
13886
+ tool("sdd.design.generate", "Generate a design document from parsed requirements", "sdd-core", [param("requirements", "array", "Requirements as {id,title,text,pattern} objects")], async (params) => {
13878
13887
  try {
13879
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13880
- const design = core.generateDesign?.({
13881
- requirements: params["requirements"],
13882
- format: params["format"] ?? "markdown"
13883
- });
13884
- return ok(design ?? { sections: [], format: params["format"] ?? "markdown" });
13888
+ const { createDesignGenerator: createDesignGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13889
+ const reqs = params["requirements"] ?? [];
13890
+ const mapped = reqs.map((r) => ({
13891
+ id: String(r["id"] ?? "REQ-XXX-001"),
13892
+ title: String(r["title"] ?? ""),
13893
+ text: String(r["text"] ?? ""),
13894
+ pattern: String(r["pattern"] ?? "ubiquitous")
13895
+ }));
13896
+ return ok(createDesignGenerator2().generate(mapped));
13885
13897
  } catch {
13886
- return ok({ sections: [], format: params["format"] ?? "markdown" });
13898
+ return fail("Core package not available");
13887
13899
  }
13888
13900
  }),
13889
- tool("sdd.design.verify", "Verify design traceability back to requirements", "sdd-core", [
13890
- param("design", "object", "Design document to verify"),
13891
- param("requirements", "array", "Requirements to trace against")
13892
- ], async (params) => {
13901
+ tool("sdd.design.verify", "Verify a design against SOLID principles", "sdd-core", [param("requirements", "array", "Requirements the design is generated from")], async (params) => {
13893
13902
  try {
13894
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13895
- const result = core.verifyTraceability?.({
13896
- design: params["design"],
13897
- requirements: params["requirements"]
13898
- });
13899
- return ok(result ?? { complete: true, gaps: [] });
13903
+ const { createDesignGenerator: createDesignGenerator2, createSOLIDValidator: createSOLIDValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13904
+ const reqs = params["requirements"] ?? [];
13905
+ const mapped = reqs.map((r) => ({
13906
+ id: String(r["id"] ?? "REQ-XXX-001"),
13907
+ title: String(r["title"] ?? ""),
13908
+ text: String(r["text"] ?? ""),
13909
+ pattern: String(r["pattern"] ?? "ubiquitous")
13910
+ }));
13911
+ const design = createDesignGenerator2().generate(mapped);
13912
+ return ok(createSOLIDValidator2().validate(design));
13900
13913
  } catch {
13901
- return ok({ complete: true, gaps: [] });
13914
+ return fail("Core package not available");
13902
13915
  }
13903
13916
  }),
13904
- tool("sdd.codegen.generate", "Generate code from a design document", "sdd-core", [
13905
- param("design", "object", "Design document"),
13906
- param("language", "string", "Target language: typescript | python", false, "typescript")
13917
+ tool("sdd.codegen.generate", "Generate a code skeleton (class/interface/function) from a name", "sdd-core", [
13918
+ param("name", "string", "Symbol name to generate"),
13919
+ param("templateType", "string", "class | interface | function | enum | type", false, "class"),
13920
+ param("description", "string", "Doc description", false)
13907
13921
  ], async (params) => {
13908
13922
  try {
13909
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13910
- const code = core.generateCode?.({
13911
- design: params["design"],
13912
- language: params["language"] ?? "typescript"
13923
+ const { createCodeGenerator: createCodeGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13924
+ const code = createCodeGenerator2().generate({
13925
+ templateType: params["templateType"] ?? "class",
13926
+ name: params["name"] ?? "Generated",
13927
+ description: params["description"]
13913
13928
  });
13914
- return ok(code ?? { files: [], language: params["language"] ?? "typescript" });
13929
+ return ok(code);
13915
13930
  } catch {
13916
- return ok({ files: [], language: params["language"] ?? "typescript" });
13931
+ return fail("Core package not available");
13917
13932
  }
13918
13933
  }),
13919
- tool("sdd.test.generate", "Generate tests from a design document", "sdd-core", [
13920
- param("design", "object", "Design document"),
13921
- param("framework", "string", "Test framework: vitest | jest | pytest", false, "vitest")
13934
+ tool("sdd.test.generate", "Generate a unit-test skeleton from source code", "sdd-core", [
13935
+ param("code", "string", "Source code to generate tests for"),
13936
+ param("style", "string", "Test style: unit | integration", false, "unit")
13922
13937
  ], async (params) => {
13923
13938
  try {
13924
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13925
- const tests = core.generateTests?.({
13926
- design: params["design"],
13927
- framework: params["framework"] ?? "vitest"
13928
- });
13929
- return ok(tests ?? { files: [], framework: params["framework"] ?? "vitest" });
13939
+ const { createUnitTestGenerator: createUnitTestGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13940
+ const suite = createUnitTestGenerator2().generate(params["code"] ?? "", params["style"] ?? "unit");
13941
+ return ok(suite);
13930
13942
  } catch {
13931
- return ok({ files: [], framework: params["framework"] ?? "vitest" });
13943
+ return fail("Core package not available");
13932
13944
  }
13933
13945
  }),
13934
- tool("sdd.trace.verify", "Verify full traceability matrix (requirements \u2192 design \u2192 code \u2192 tests)", "sdd-core", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
13946
+ tool("sdd.trace.verify", "Verify requirement \u2192 code coverage by scanning source references (REQ-XXX-NNN)", "sdd-core", [
13947
+ param("requirementIds", "array", 'Requirement IDs to check (e.g. ["REQ-AUT-001"])'),
13948
+ param("sources", "array", "Sources as {file, code} objects to scan for references")
13949
+ ], async (params) => {
13935
13950
  try {
13936
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13937
- const result = core.verifyTraceabilityMatrix?.(params["basePath"] ?? ".");
13938
- return ok(result ?? { complete: true, matrix: [], gaps: [] });
13951
+ const reqIds = [...new Set(params["requirementIds"] ?? [])];
13952
+ const sources = params["sources"] ?? [];
13953
+ const refRe = /REQ-[A-Z]{3}-\d{3}/g;
13954
+ const covered = /* @__PURE__ */ new Set();
13955
+ for (const s of sources) {
13956
+ for (const m of (s.code ?? "").matchAll(refRe)) {
13957
+ if (reqIds.includes(m[0]))
13958
+ covered.add(m[0]);
13959
+ }
13960
+ }
13961
+ const gaps = reqIds.filter((r) => !covered.has(r));
13962
+ const coverage = reqIds.length === 0 ? 0 : Math.round(covered.size / reqIds.length * 100);
13963
+ return ok({
13964
+ total: reqIds.length,
13965
+ covered: covered.size,
13966
+ coverage,
13967
+ gaps,
13968
+ complete: gaps.length === 0 && reqIds.length > 0
13969
+ });
13939
13970
  } catch {
13940
- return ok({ complete: true, matrix: [], gaps: [] });
13971
+ return fail("Trace verification failed");
13941
13972
  }
13942
13973
  }),
13943
13974
  // ── Requirements Interview tools ──
@@ -14424,40 +14455,91 @@ function neuralTools() {
14424
14455
  }
14425
14456
  function synthesisTools() {
14426
14457
  return [
14427
- tool("synthesis.dsl.build", "Build a DSL transformation from specification", "synthesis", [
14428
- param("spec", "object", "DSL specification"),
14429
- param("examples", "array", "Input/output examples", false)
14458
+ tool("synthesis.dsl.build", "Apply a DSL transform pipeline to an input string", "synthesis", [
14459
+ param("input", "string", "Input string to transform"),
14460
+ param("ops", "array", "Ops: trim | upper | lower | reverse | capitalize | camelCase | snakeCase | replace:from:to")
14430
14461
  ], async (params) => {
14431
14462
  try {
14432
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14433
- const result = syn.buildDSL?.(params["spec"], params["examples"]);
14434
- return ok(result ?? { dsl: null, spec: params["spec"] });
14463
+ const { createDSLBuilder: createDSLBuilder2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14464
+ const builder = createDSLBuilder2();
14465
+ const ops = params["ops"] ?? [];
14466
+ for (const op of ops) {
14467
+ const [name, ...a] = String(op).split(":");
14468
+ switch (name) {
14469
+ case "trim":
14470
+ builder.trim();
14471
+ break;
14472
+ case "upper":
14473
+ case "toUpperCase":
14474
+ builder.toUpperCase();
14475
+ break;
14476
+ case "lower":
14477
+ case "toLowerCase":
14478
+ builder.toLowerCase();
14479
+ break;
14480
+ case "reverse":
14481
+ builder.reverse();
14482
+ break;
14483
+ case "capitalize":
14484
+ builder.capitalize();
14485
+ break;
14486
+ case "camelCase":
14487
+ case "camel":
14488
+ builder.camelCase();
14489
+ break;
14490
+ case "snakeCase":
14491
+ case "snake":
14492
+ builder.snakeCase();
14493
+ break;
14494
+ case "replace":
14495
+ builder.replace(a[0] ?? "", a[1] ?? "");
14496
+ break;
14497
+ case "prefixRemove":
14498
+ builder.prefixRemove(a[0] ?? "");
14499
+ break;
14500
+ case "suffixAppend":
14501
+ builder.suffixAppend(a[0] ?? "");
14502
+ break;
14503
+ default:
14504
+ return fail(`Unknown DSL op: ${name}`);
14505
+ }
14506
+ }
14507
+ const result = builder.execute(params["input"] ?? "");
14508
+ return ok({ input: params["input"], ops, result });
14435
14509
  } catch {
14436
- return ok({ dsl: null, spec: params["spec"] });
14510
+ return fail("Synthesis package not available");
14437
14511
  }
14438
14512
  }),
14439
- tool("synthesis.synthesize", "Synthesize a program from input/output examples", "synthesis", [
14440
- param("examples", "array", "Input/output example pairs"),
14441
- param("constraints", "object", "Synthesis constraints", false)
14442
- ], async (params) => {
14513
+ tool("synthesis.synthesize", "Synthesize a transformation rule from input/output examples", "synthesis", [param("examples", "array", "Array of {input, output} example pairs")], async (params) => {
14443
14514
  try {
14444
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14445
- const result = syn.synthesize?.(params["examples"], params["constraints"]);
14446
- return ok(result ?? { program: null, confidence: 0 });
14515
+ const { createSynthesisEngine: createSynthesisEngine2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14516
+ const examples = (params["examples"] ?? []).map((e) => ({
14517
+ input: e.input ?? "",
14518
+ output: e.output ?? ""
14519
+ }));
14520
+ const rule = createSynthesisEngine2().synthesize(examples);
14521
+ return ok({ rule, synthesized: rule !== null });
14447
14522
  } catch {
14448
- return ok({ program: null, confidence: 0 });
14523
+ return fail("Synthesis package not available");
14449
14524
  }
14450
14525
  }),
14451
- tool("synthesis.version-space", "Manage version spaces for program synthesis", "synthesis", [
14452
- param("action", "string", "Action: create | update | query"),
14453
- param("examples", "array", "Examples for version space", false)
14526
+ tool("synthesis.version-space", "Build a version space from positive/negative examples and get consistent hypotheses", "synthesis", [
14527
+ param("name", "string", "Version space name", false, "default"),
14528
+ param("positive", "array", "Positive examples", false),
14529
+ param("negative", "array", "Negative examples", false)
14454
14530
  ], async (params) => {
14455
14531
  try {
14456
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14457
- const result = syn.versionSpace?.(params["action"], params["examples"]);
14458
- return ok(result ?? { action: params["action"], spaces: [] });
14532
+ const { createVersionSpaceManager: createVersionSpaceManager2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14533
+ const mgr = createVersionSpaceManager2();
14534
+ const name = params["name"] ?? "default";
14535
+ mgr.create(name);
14536
+ for (const p of params["positive"] ?? [])
14537
+ mgr.addPositive(name, p);
14538
+ for (const n of params["negative"] ?? [])
14539
+ mgr.addNegative(name, n);
14540
+ return ok({ name, hypotheses: mgr.getConsistentHypotheses(name), spaces: mgr.getSpaces().size });
14459
14541
  } catch {
14460
- return ok({ action: params["action"], spaces: [] });
14542
+ return fail("Synthesis package not available");
14461
14543
  }
14462
14544
  })
14463
14545
  ];
@@ -14579,37 +14661,41 @@ function decisionsTools() {
14579
14661
  param("consequences", "string", "Consequences of the decision", false)
14580
14662
  ], async (params) => {
14581
14663
  try {
14582
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14583
- const adr = dec.createADR?.({
14664
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14665
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14666
+ await mgr.load();
14667
+ const adr = await mgr.create({
14584
14668
  title: params["title"],
14585
- context: params["context"],
14586
- decision: params["decision"],
14587
- consequences: params["consequences"]
14669
+ context: params["context"] ?? "",
14670
+ decision: params["decision"] ?? "",
14671
+ consequences: params["consequences"] ?? ""
14588
14672
  });
14589
- return ok(adr ?? { title: params["title"], status: "proposed" });
14673
+ return ok(adr);
14590
14674
  } catch {
14591
- return ok({ title: params["title"], status: "proposed" });
14675
+ return fail("Decisions package not available");
14592
14676
  }
14593
14677
  }),
14594
- tool("decisions.list", "List all Architecture Decision Records", "decisions", [param("basePath", "string", "ADR directory path", false, ".")], async (params) => {
14678
+ tool("decisions.list", "List all Architecture Decision Records", "decisions", [param("basePath", "string", "ADR base path", false, ".decisions")], async (params) => {
14595
14679
  try {
14596
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14597
- const adrs = dec.listADRs?.(params["basePath"] ?? ".");
14598
- return ok(adrs ?? []);
14680
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14681
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14682
+ await mgr.load();
14683
+ return ok(await mgr.list());
14599
14684
  } catch {
14600
- return ok([]);
14685
+ return fail("Decisions package not available");
14601
14686
  }
14602
14687
  }),
14603
14688
  tool("decisions.search", "Search Architecture Decision Records by keyword", "decisions", [
14604
14689
  param("query", "string", "Search query"),
14605
- param("basePath", "string", "ADR directory path", false, ".")
14690
+ param("basePath", "string", "ADR base path", false, ".decisions")
14606
14691
  ], async (params) => {
14607
14692
  try {
14608
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14609
- const results = dec.searchADRs?.(params["query"], params["basePath"] ?? ".");
14610
- return ok(results ?? []);
14693
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14694
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14695
+ await mgr.load();
14696
+ return ok(await mgr.search(params["query"]));
14611
14697
  } catch {
14612
- return ok([]);
14698
+ return fail("Decisions package not available");
14613
14699
  }
14614
14700
  })
14615
14701
  ];
package/dist/index.js CHANGED
@@ -13836,108 +13836,139 @@ function fail(error) {
13836
13836
  }
13837
13837
  function sddCoreTools() {
13838
13838
  return [
13839
- tool("sdd.requirements.create", "Create an EARS requirement (Easy Approach to Requirements Syntax)", "sdd-core", [
13840
- param("pattern", "string", "EARS pattern: ubiquitous | event-driven | unwanted | state-driven | optional"),
13841
- param("text", "string", "Requirement text"),
13839
+ tool("sdd.requirements.create", "Create and classify an EARS requirement (Easy Approach to Requirements Syntax)", "sdd-core", [
13840
+ param("text", "string", "Requirement text (EARS sentence)"),
13842
13841
  param("id", "string", "Requirement ID", false)
13843
13842
  ], async (params) => {
13844
13843
  try {
13845
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13846
- const req = core.createRequirement?.({
13847
- pattern: params["pattern"],
13848
- text: params["text"],
13849
- id: params["id"]
13844
+ const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13845
+ const v = createEARSValidator2();
13846
+ const text = params["text"];
13847
+ const analysis = v.analyze(text);
13848
+ const validation = v.validate(text);
13849
+ return ok({
13850
+ id: params["id"] ?? "REQ-XXX-001",
13851
+ text,
13852
+ pattern: analysis.pattern,
13853
+ confidence: analysis.confidence,
13854
+ valid: validation.valid,
13855
+ issues: validation.issues
13850
13856
  });
13851
- return ok(req ?? { pattern: params["pattern"], text: params["text"], id: params["id"] ?? "REQ-001" });
13852
13857
  } catch {
13853
- return ok({ pattern: params["pattern"], text: params["text"], id: params["id"] ?? "REQ-001" });
13858
+ return fail("Core package not available");
13854
13859
  }
13855
13860
  }),
13856
- tool("sdd.requirements.validate", "Validate requirements for completeness and consistency", "sdd-core", [param("requirements", "array", "Array of requirement objects to validate")], async (params) => {
13861
+ tool("sdd.requirements.validate", "Validate requirements (EARS pattern + issues) for a list of requirement texts", "sdd-core", [param("requirements", "array", "Array of requirement texts or {text} objects")], async (params) => {
13857
13862
  try {
13858
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13859
- const result = core.validateRequirements?.(params["requirements"]);
13860
- return ok(result ?? { valid: true, issues: [] });
13863
+ const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13864
+ const v = createEARSValidator2();
13865
+ const items = params["requirements"] ?? [];
13866
+ const results = items.map((it) => {
13867
+ const text = typeof it === "string" ? it : it.text ?? "";
13868
+ const analysis = v.analyze(text);
13869
+ const validation = v.validate(text);
13870
+ return { text, pattern: analysis.pattern, valid: validation.valid, issues: validation.issues };
13871
+ });
13872
+ return ok({ results, allValid: results.every((r) => r.valid) });
13861
13873
  } catch {
13862
- return ok({ valid: true, issues: [] });
13874
+ return fail("Core package not available");
13863
13875
  }
13864
13876
  }),
13865
- tool("sdd.requirements.list", "List all requirements in the current project", "sdd-core", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
13877
+ tool("sdd.requirements.list", "Parse and list requirements from a Markdown requirements document", "sdd-core", [param("markdown", "string", "Requirements document contents (Markdown)")], async (params) => {
13866
13878
  try {
13867
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13868
- const list = core.listRequirements?.(params["basePath"] ?? ".");
13869
- return ok(list ?? []);
13879
+ const { MarkdownEARSParser: MarkdownEARSParser2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13880
+ const parsed = new MarkdownEARSParser2().parse(params["markdown"] ?? "");
13881
+ return ok(parsed.map((r) => ({ id: r.id, title: r.title, pattern: r.pattern, text: r.text })));
13870
13882
  } catch {
13871
- return ok([]);
13883
+ return fail("Core package not available");
13872
13884
  }
13873
13885
  }),
13874
- tool("sdd.design.generate", "Generate a design document from requirements", "sdd-core", [
13875
- param("requirements", "array", "Requirements to generate design from"),
13876
- param("format", "string", "Output format: markdown | json", false, "markdown")
13877
- ], async (params) => {
13886
+ tool("sdd.design.generate", "Generate a design document from parsed requirements", "sdd-core", [param("requirements", "array", "Requirements as {id,title,text,pattern} objects")], async (params) => {
13878
13887
  try {
13879
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13880
- const design = core.generateDesign?.({
13881
- requirements: params["requirements"],
13882
- format: params["format"] ?? "markdown"
13883
- });
13884
- return ok(design ?? { sections: [], format: params["format"] ?? "markdown" });
13888
+ const { createDesignGenerator: createDesignGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13889
+ const reqs = params["requirements"] ?? [];
13890
+ const mapped = reqs.map((r) => ({
13891
+ id: String(r["id"] ?? "REQ-XXX-001"),
13892
+ title: String(r["title"] ?? ""),
13893
+ text: String(r["text"] ?? ""),
13894
+ pattern: String(r["pattern"] ?? "ubiquitous")
13895
+ }));
13896
+ return ok(createDesignGenerator2().generate(mapped));
13885
13897
  } catch {
13886
- return ok({ sections: [], format: params["format"] ?? "markdown" });
13898
+ return fail("Core package not available");
13887
13899
  }
13888
13900
  }),
13889
- tool("sdd.design.verify", "Verify design traceability back to requirements", "sdd-core", [
13890
- param("design", "object", "Design document to verify"),
13891
- param("requirements", "array", "Requirements to trace against")
13892
- ], async (params) => {
13901
+ tool("sdd.design.verify", "Verify a design against SOLID principles", "sdd-core", [param("requirements", "array", "Requirements the design is generated from")], async (params) => {
13893
13902
  try {
13894
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13895
- const result = core.verifyTraceability?.({
13896
- design: params["design"],
13897
- requirements: params["requirements"]
13898
- });
13899
- return ok(result ?? { complete: true, gaps: [] });
13903
+ const { createDesignGenerator: createDesignGenerator2, createSOLIDValidator: createSOLIDValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13904
+ const reqs = params["requirements"] ?? [];
13905
+ const mapped = reqs.map((r) => ({
13906
+ id: String(r["id"] ?? "REQ-XXX-001"),
13907
+ title: String(r["title"] ?? ""),
13908
+ text: String(r["text"] ?? ""),
13909
+ pattern: String(r["pattern"] ?? "ubiquitous")
13910
+ }));
13911
+ const design = createDesignGenerator2().generate(mapped);
13912
+ return ok(createSOLIDValidator2().validate(design));
13900
13913
  } catch {
13901
- return ok({ complete: true, gaps: [] });
13914
+ return fail("Core package not available");
13902
13915
  }
13903
13916
  }),
13904
- tool("sdd.codegen.generate", "Generate code from a design document", "sdd-core", [
13905
- param("design", "object", "Design document"),
13906
- param("language", "string", "Target language: typescript | python", false, "typescript")
13917
+ tool("sdd.codegen.generate", "Generate a code skeleton (class/interface/function) from a name", "sdd-core", [
13918
+ param("name", "string", "Symbol name to generate"),
13919
+ param("templateType", "string", "class | interface | function | enum | type", false, "class"),
13920
+ param("description", "string", "Doc description", false)
13907
13921
  ], async (params) => {
13908
13922
  try {
13909
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13910
- const code = core.generateCode?.({
13911
- design: params["design"],
13912
- language: params["language"] ?? "typescript"
13923
+ const { createCodeGenerator: createCodeGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13924
+ const code = createCodeGenerator2().generate({
13925
+ templateType: params["templateType"] ?? "class",
13926
+ name: params["name"] ?? "Generated",
13927
+ description: params["description"]
13913
13928
  });
13914
- return ok(code ?? { files: [], language: params["language"] ?? "typescript" });
13929
+ return ok(code);
13915
13930
  } catch {
13916
- return ok({ files: [], language: params["language"] ?? "typescript" });
13931
+ return fail("Core package not available");
13917
13932
  }
13918
13933
  }),
13919
- tool("sdd.test.generate", "Generate tests from a design document", "sdd-core", [
13920
- param("design", "object", "Design document"),
13921
- param("framework", "string", "Test framework: vitest | jest | pytest", false, "vitest")
13934
+ tool("sdd.test.generate", "Generate a unit-test skeleton from source code", "sdd-core", [
13935
+ param("code", "string", "Source code to generate tests for"),
13936
+ param("style", "string", "Test style: unit | integration", false, "unit")
13922
13937
  ], async (params) => {
13923
13938
  try {
13924
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13925
- const tests = core.generateTests?.({
13926
- design: params["design"],
13927
- framework: params["framework"] ?? "vitest"
13928
- });
13929
- return ok(tests ?? { files: [], framework: params["framework"] ?? "vitest" });
13939
+ const { createUnitTestGenerator: createUnitTestGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
13940
+ const suite = createUnitTestGenerator2().generate(params["code"] ?? "", params["style"] ?? "unit");
13941
+ return ok(suite);
13930
13942
  } catch {
13931
- return ok({ files: [], framework: params["framework"] ?? "vitest" });
13943
+ return fail("Core package not available");
13932
13944
  }
13933
13945
  }),
13934
- tool("sdd.trace.verify", "Verify full traceability matrix (requirements \u2192 design \u2192 code \u2192 tests)", "sdd-core", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
13946
+ tool("sdd.trace.verify", "Verify requirement \u2192 code coverage by scanning source references (REQ-XXX-NNN)", "sdd-core", [
13947
+ param("requirementIds", "array", 'Requirement IDs to check (e.g. ["REQ-AUT-001"])'),
13948
+ param("sources", "array", "Sources as {file, code} objects to scan for references")
13949
+ ], async (params) => {
13935
13950
  try {
13936
- const core = await Promise.resolve().then(() => (init_dist(), dist_exports));
13937
- const result = core.verifyTraceabilityMatrix?.(params["basePath"] ?? ".");
13938
- return ok(result ?? { complete: true, matrix: [], gaps: [] });
13951
+ const reqIds = [...new Set(params["requirementIds"] ?? [])];
13952
+ const sources = params["sources"] ?? [];
13953
+ const refRe = /REQ-[A-Z]{3}-\d{3}/g;
13954
+ const covered = /* @__PURE__ */ new Set();
13955
+ for (const s of sources) {
13956
+ for (const m of (s.code ?? "").matchAll(refRe)) {
13957
+ if (reqIds.includes(m[0]))
13958
+ covered.add(m[0]);
13959
+ }
13960
+ }
13961
+ const gaps = reqIds.filter((r) => !covered.has(r));
13962
+ const coverage = reqIds.length === 0 ? 0 : Math.round(covered.size / reqIds.length * 100);
13963
+ return ok({
13964
+ total: reqIds.length,
13965
+ covered: covered.size,
13966
+ coverage,
13967
+ gaps,
13968
+ complete: gaps.length === 0 && reqIds.length > 0
13969
+ });
13939
13970
  } catch {
13940
- return ok({ complete: true, matrix: [], gaps: [] });
13971
+ return fail("Trace verification failed");
13941
13972
  }
13942
13973
  }),
13943
13974
  // ── Requirements Interview tools ──
@@ -14424,40 +14455,91 @@ function neuralTools() {
14424
14455
  }
14425
14456
  function synthesisTools() {
14426
14457
  return [
14427
- tool("synthesis.dsl.build", "Build a DSL transformation from specification", "synthesis", [
14428
- param("spec", "object", "DSL specification"),
14429
- param("examples", "array", "Input/output examples", false)
14458
+ tool("synthesis.dsl.build", "Apply a DSL transform pipeline to an input string", "synthesis", [
14459
+ param("input", "string", "Input string to transform"),
14460
+ param("ops", "array", "Ops: trim | upper | lower | reverse | capitalize | camelCase | snakeCase | replace:from:to")
14430
14461
  ], async (params) => {
14431
14462
  try {
14432
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14433
- const result = syn.buildDSL?.(params["spec"], params["examples"]);
14434
- return ok(result ?? { dsl: null, spec: params["spec"] });
14463
+ const { createDSLBuilder: createDSLBuilder2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14464
+ const builder = createDSLBuilder2();
14465
+ const ops = params["ops"] ?? [];
14466
+ for (const op of ops) {
14467
+ const [name, ...a] = String(op).split(":");
14468
+ switch (name) {
14469
+ case "trim":
14470
+ builder.trim();
14471
+ break;
14472
+ case "upper":
14473
+ case "toUpperCase":
14474
+ builder.toUpperCase();
14475
+ break;
14476
+ case "lower":
14477
+ case "toLowerCase":
14478
+ builder.toLowerCase();
14479
+ break;
14480
+ case "reverse":
14481
+ builder.reverse();
14482
+ break;
14483
+ case "capitalize":
14484
+ builder.capitalize();
14485
+ break;
14486
+ case "camelCase":
14487
+ case "camel":
14488
+ builder.camelCase();
14489
+ break;
14490
+ case "snakeCase":
14491
+ case "snake":
14492
+ builder.snakeCase();
14493
+ break;
14494
+ case "replace":
14495
+ builder.replace(a[0] ?? "", a[1] ?? "");
14496
+ break;
14497
+ case "prefixRemove":
14498
+ builder.prefixRemove(a[0] ?? "");
14499
+ break;
14500
+ case "suffixAppend":
14501
+ builder.suffixAppend(a[0] ?? "");
14502
+ break;
14503
+ default:
14504
+ return fail(`Unknown DSL op: ${name}`);
14505
+ }
14506
+ }
14507
+ const result = builder.execute(params["input"] ?? "");
14508
+ return ok({ input: params["input"], ops, result });
14435
14509
  } catch {
14436
- return ok({ dsl: null, spec: params["spec"] });
14510
+ return fail("Synthesis package not available");
14437
14511
  }
14438
14512
  }),
14439
- tool("synthesis.synthesize", "Synthesize a program from input/output examples", "synthesis", [
14440
- param("examples", "array", "Input/output example pairs"),
14441
- param("constraints", "object", "Synthesis constraints", false)
14442
- ], async (params) => {
14513
+ tool("synthesis.synthesize", "Synthesize a transformation rule from input/output examples", "synthesis", [param("examples", "array", "Array of {input, output} example pairs")], async (params) => {
14443
14514
  try {
14444
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14445
- const result = syn.synthesize?.(params["examples"], params["constraints"]);
14446
- return ok(result ?? { program: null, confidence: 0 });
14515
+ const { createSynthesisEngine: createSynthesisEngine2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14516
+ const examples = (params["examples"] ?? []).map((e) => ({
14517
+ input: e.input ?? "",
14518
+ output: e.output ?? ""
14519
+ }));
14520
+ const rule = createSynthesisEngine2().synthesize(examples);
14521
+ return ok({ rule, synthesized: rule !== null });
14447
14522
  } catch {
14448
- return ok({ program: null, confidence: 0 });
14523
+ return fail("Synthesis package not available");
14449
14524
  }
14450
14525
  }),
14451
- tool("synthesis.version-space", "Manage version spaces for program synthesis", "synthesis", [
14452
- param("action", "string", "Action: create | update | query"),
14453
- param("examples", "array", "Examples for version space", false)
14526
+ tool("synthesis.version-space", "Build a version space from positive/negative examples and get consistent hypotheses", "synthesis", [
14527
+ param("name", "string", "Version space name", false, "default"),
14528
+ param("positive", "array", "Positive examples", false),
14529
+ param("negative", "array", "Negative examples", false)
14454
14530
  ], async (params) => {
14455
14531
  try {
14456
- const syn = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14457
- const result = syn.versionSpace?.(params["action"], params["examples"]);
14458
- return ok(result ?? { action: params["action"], spaces: [] });
14532
+ const { createVersionSpaceManager: createVersionSpaceManager2 } = await Promise.resolve().then(() => (init_dist12(), dist_exports12));
14533
+ const mgr = createVersionSpaceManager2();
14534
+ const name = params["name"] ?? "default";
14535
+ mgr.create(name);
14536
+ for (const p of params["positive"] ?? [])
14537
+ mgr.addPositive(name, p);
14538
+ for (const n of params["negative"] ?? [])
14539
+ mgr.addNegative(name, n);
14540
+ return ok({ name, hypotheses: mgr.getConsistentHypotheses(name), spaces: mgr.getSpaces().size });
14459
14541
  } catch {
14460
- return ok({ action: params["action"], spaces: [] });
14542
+ return fail("Synthesis package not available");
14461
14543
  }
14462
14544
  })
14463
14545
  ];
@@ -14579,37 +14661,41 @@ function decisionsTools() {
14579
14661
  param("consequences", "string", "Consequences of the decision", false)
14580
14662
  ], async (params) => {
14581
14663
  try {
14582
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14583
- const adr = dec.createADR?.({
14664
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14665
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14666
+ await mgr.load();
14667
+ const adr = await mgr.create({
14584
14668
  title: params["title"],
14585
- context: params["context"],
14586
- decision: params["decision"],
14587
- consequences: params["consequences"]
14669
+ context: params["context"] ?? "",
14670
+ decision: params["decision"] ?? "",
14671
+ consequences: params["consequences"] ?? ""
14588
14672
  });
14589
- return ok(adr ?? { title: params["title"], status: "proposed" });
14673
+ return ok(adr);
14590
14674
  } catch {
14591
- return ok({ title: params["title"], status: "proposed" });
14675
+ return fail("Decisions package not available");
14592
14676
  }
14593
14677
  }),
14594
- tool("decisions.list", "List all Architecture Decision Records", "decisions", [param("basePath", "string", "ADR directory path", false, ".")], async (params) => {
14678
+ tool("decisions.list", "List all Architecture Decision Records", "decisions", [param("basePath", "string", "ADR base path", false, ".decisions")], async (params) => {
14595
14679
  try {
14596
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14597
- const adrs = dec.listADRs?.(params["basePath"] ?? ".");
14598
- return ok(adrs ?? []);
14680
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14681
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14682
+ await mgr.load();
14683
+ return ok(await mgr.list());
14599
14684
  } catch {
14600
- return ok([]);
14685
+ return fail("Decisions package not available");
14601
14686
  }
14602
14687
  }),
14603
14688
  tool("decisions.search", "Search Architecture Decision Records by keyword", "decisions", [
14604
14689
  param("query", "string", "Search query"),
14605
- param("basePath", "string", "ADR directory path", false, ".")
14690
+ param("basePath", "string", "ADR base path", false, ".decisions")
14606
14691
  ], async (params) => {
14607
14692
  try {
14608
- const dec = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14609
- const results = dec.searchADRs?.(params["query"], params["basePath"] ?? ".");
14610
- return ok(results ?? []);
14693
+ const { createDecisionManager: createDecisionManager2 } = await Promise.resolve().then(() => (init_dist9(), dist_exports9));
14694
+ const mgr = createDecisionManager2(params["basePath"] ?? ".decisions");
14695
+ await mgr.load();
14696
+ return ok(await mgr.search(params["query"]));
14611
14697
  } catch {
14612
- return ok([]);
14698
+ return fail("Decisions package not available");
14613
14699
  }
14614
14700
  })
14615
14701
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musubix2",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "description": "MUSUBIX2 — Specification Driven Development System",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",