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.
- package/.claude/.musubix-managed +1 -1
- package/dist/assets/skills-manifest.json +1 -1
- package/dist/cli.js +191 -105
- package/dist/index.js +191 -105
- package/package.json +1 -1
package/.claude/.musubix-managed
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generator":"musubix2","version":"0.5.
|
|
1
|
+
{"generator":"musubix2","version":"0.5.8","timestamp":"2026-07-09T10:18:54.616Z"}
|
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("
|
|
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
|
|
13846
|
-
const
|
|
13847
|
-
|
|
13848
|
-
|
|
13849
|
-
|
|
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
|
|
13858
|
+
return fail("Core package not available");
|
|
13854
13859
|
}
|
|
13855
13860
|
}),
|
|
13856
|
-
tool("sdd.requirements.validate", "Validate requirements for
|
|
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
|
|
13859
|
-
const
|
|
13860
|
-
|
|
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
|
|
13874
|
+
return fail("Core package not available");
|
|
13863
13875
|
}
|
|
13864
13876
|
}),
|
|
13865
|
-
tool("sdd.requirements.list", "
|
|
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
|
|
13868
|
-
const
|
|
13869
|
-
return ok(
|
|
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
|
|
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
|
|
13880
|
-
const
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
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
|
|
13898
|
+
return fail("Core package not available");
|
|
13887
13899
|
}
|
|
13888
13900
|
}),
|
|
13889
|
-
tool("sdd.design.verify", "Verify design
|
|
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
|
|
13895
|
-
const
|
|
13896
|
-
|
|
13897
|
-
|
|
13898
|
-
|
|
13899
|
-
|
|
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
|
|
13914
|
+
return fail("Core package not available");
|
|
13902
13915
|
}
|
|
13903
13916
|
}),
|
|
13904
|
-
tool("sdd.codegen.generate", "Generate code from a
|
|
13905
|
-
param("
|
|
13906
|
-
param("
|
|
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
|
|
13910
|
-
const code =
|
|
13911
|
-
|
|
13912
|
-
|
|
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
|
|
13929
|
+
return ok(code);
|
|
13915
13930
|
} catch {
|
|
13916
|
-
return
|
|
13931
|
+
return fail("Core package not available");
|
|
13917
13932
|
}
|
|
13918
13933
|
}),
|
|
13919
|
-
tool("sdd.test.generate", "Generate
|
|
13920
|
-
param("
|
|
13921
|
-
param("
|
|
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
|
|
13925
|
-
const
|
|
13926
|
-
|
|
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
|
|
13943
|
+
return fail("Core package not available");
|
|
13932
13944
|
}
|
|
13933
13945
|
}),
|
|
13934
|
-
tool("sdd.trace.verify", "Verify
|
|
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
|
|
13937
|
-
const
|
|
13938
|
-
|
|
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
|
|
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", "
|
|
14428
|
-
param("
|
|
14429
|
-
param("
|
|
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
|
|
14433
|
-
const
|
|
14434
|
-
|
|
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
|
|
14510
|
+
return fail("Synthesis package not available");
|
|
14437
14511
|
}
|
|
14438
14512
|
}),
|
|
14439
|
-
tool("synthesis.synthesize", "Synthesize a
|
|
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
|
|
14445
|
-
const
|
|
14446
|
-
|
|
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
|
|
14523
|
+
return fail("Synthesis package not available");
|
|
14449
14524
|
}
|
|
14450
14525
|
}),
|
|
14451
|
-
tool("synthesis.version-space", "
|
|
14452
|
-
param("
|
|
14453
|
-
param("
|
|
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
|
|
14457
|
-
const
|
|
14458
|
-
|
|
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
|
|
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
|
|
14583
|
-
const
|
|
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
|
|
14673
|
+
return ok(adr);
|
|
14590
14674
|
} catch {
|
|
14591
|
-
return
|
|
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
|
|
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
|
|
14597
|
-
const
|
|
14598
|
-
|
|
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
|
|
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
|
|
14690
|
+
param("basePath", "string", "ADR base path", false, ".decisions")
|
|
14606
14691
|
], async (params) => {
|
|
14607
14692
|
try {
|
|
14608
|
-
const
|
|
14609
|
-
const
|
|
14610
|
-
|
|
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
|
|
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("
|
|
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
|
|
13846
|
-
const
|
|
13847
|
-
|
|
13848
|
-
|
|
13849
|
-
|
|
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
|
|
13858
|
+
return fail("Core package not available");
|
|
13854
13859
|
}
|
|
13855
13860
|
}),
|
|
13856
|
-
tool("sdd.requirements.validate", "Validate requirements for
|
|
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
|
|
13859
|
-
const
|
|
13860
|
-
|
|
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
|
|
13874
|
+
return fail("Core package not available");
|
|
13863
13875
|
}
|
|
13864
13876
|
}),
|
|
13865
|
-
tool("sdd.requirements.list", "
|
|
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
|
|
13868
|
-
const
|
|
13869
|
-
return ok(
|
|
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
|
|
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
|
|
13880
|
-
const
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
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
|
|
13898
|
+
return fail("Core package not available");
|
|
13887
13899
|
}
|
|
13888
13900
|
}),
|
|
13889
|
-
tool("sdd.design.verify", "Verify design
|
|
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
|
|
13895
|
-
const
|
|
13896
|
-
|
|
13897
|
-
|
|
13898
|
-
|
|
13899
|
-
|
|
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
|
|
13914
|
+
return fail("Core package not available");
|
|
13902
13915
|
}
|
|
13903
13916
|
}),
|
|
13904
|
-
tool("sdd.codegen.generate", "Generate code from a
|
|
13905
|
-
param("
|
|
13906
|
-
param("
|
|
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
|
|
13910
|
-
const code =
|
|
13911
|
-
|
|
13912
|
-
|
|
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
|
|
13929
|
+
return ok(code);
|
|
13915
13930
|
} catch {
|
|
13916
|
-
return
|
|
13931
|
+
return fail("Core package not available");
|
|
13917
13932
|
}
|
|
13918
13933
|
}),
|
|
13919
|
-
tool("sdd.test.generate", "Generate
|
|
13920
|
-
param("
|
|
13921
|
-
param("
|
|
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
|
|
13925
|
-
const
|
|
13926
|
-
|
|
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
|
|
13943
|
+
return fail("Core package not available");
|
|
13932
13944
|
}
|
|
13933
13945
|
}),
|
|
13934
|
-
tool("sdd.trace.verify", "Verify
|
|
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
|
|
13937
|
-
const
|
|
13938
|
-
|
|
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
|
|
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", "
|
|
14428
|
-
param("
|
|
14429
|
-
param("
|
|
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
|
|
14433
|
-
const
|
|
14434
|
-
|
|
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
|
|
14510
|
+
return fail("Synthesis package not available");
|
|
14437
14511
|
}
|
|
14438
14512
|
}),
|
|
14439
|
-
tool("synthesis.synthesize", "Synthesize a
|
|
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
|
|
14445
|
-
const
|
|
14446
|
-
|
|
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
|
|
14523
|
+
return fail("Synthesis package not available");
|
|
14449
14524
|
}
|
|
14450
14525
|
}),
|
|
14451
|
-
tool("synthesis.version-space", "
|
|
14452
|
-
param("
|
|
14453
|
-
param("
|
|
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
|
|
14457
|
-
const
|
|
14458
|
-
|
|
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
|
|
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
|
|
14583
|
-
const
|
|
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
|
|
14673
|
+
return ok(adr);
|
|
14590
14674
|
} catch {
|
|
14591
|
-
return
|
|
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
|
|
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
|
|
14597
|
-
const
|
|
14598
|
-
|
|
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
|
|
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
|
|
14690
|
+
param("basePath", "string", "ADR base path", false, ".decisions")
|
|
14606
14691
|
], async (params) => {
|
|
14607
14692
|
try {
|
|
14608
|
-
const
|
|
14609
|
-
const
|
|
14610
|
-
|
|
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
|
|
14698
|
+
return fail("Decisions package not available");
|
|
14613
14699
|
}
|
|
14614
14700
|
})
|
|
14615
14701
|
];
|