musubix2 0.5.9 → 0.5.11
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 +224 -128
- package/dist/index.js +224 -128
- package/package.json +1 -1
package/.claude/.musubix-managed
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generator":"musubix2","version":"0.5.
|
|
1
|
+
{"generator":"musubix2","version":"0.5.11","timestamp":"2026-07-09T10:51:51.652Z"}
|
package/dist/cli.js
CHANGED
|
@@ -14431,93 +14431,129 @@ function researchTools() {
|
|
|
14431
14431
|
param("depth", "string", "Research depth: shallow | medium | deep", false, "medium")
|
|
14432
14432
|
], async (params) => {
|
|
14433
14433
|
try {
|
|
14434
|
-
const
|
|
14435
|
-
const
|
|
14436
|
-
|
|
14434
|
+
const { createResearchEngine: createResearchEngine2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14435
|
+
const sources = normalizeSources(params["sources"]);
|
|
14436
|
+
const result = createResearchEngine2().research({ topic: params["topic"] ?? "", depth: params["depth"] ?? "medium" }, sources);
|
|
14437
|
+
return ok(result);
|
|
14437
14438
|
} catch {
|
|
14438
|
-
return
|
|
14439
|
+
return fail("Deep-research package not available");
|
|
14439
14440
|
}
|
|
14440
14441
|
}),
|
|
14441
|
-
tool("research.iterative", "Perform iterative
|
|
14442
|
+
tool("research.iterative", "Perform iterative research with progressive refinement over provided sources", "research", [
|
|
14442
14443
|
param("topic", "string", "Research topic"),
|
|
14443
|
-
param("
|
|
14444
|
+
param("depth", "string", "Depth: shallow | medium | deep", false, "medium"),
|
|
14445
|
+
param("sources", "array", "Sources as {title,type,relevance,content} objects")
|
|
14444
14446
|
], async (params) => {
|
|
14445
14447
|
try {
|
|
14446
|
-
const
|
|
14447
|
-
const
|
|
14448
|
-
|
|
14448
|
+
const { createResearchEngine: createResearchEngine2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14449
|
+
const sources = normalizeSources(params["sources"]);
|
|
14450
|
+
const result = createResearchEngine2().researchIterative({ topic: params["topic"] ?? "", depth: params["depth"] ?? "medium" }, () => sources);
|
|
14451
|
+
return ok(result);
|
|
14449
14452
|
} catch {
|
|
14450
|
-
return
|
|
14453
|
+
return fail("Deep-research package not available");
|
|
14451
14454
|
}
|
|
14452
14455
|
}),
|
|
14453
|
-
tool("research.evidence", "
|
|
14454
|
-
param("
|
|
14455
|
-
param("sources", "array", "
|
|
14456
|
+
tool("research.evidence", "Accumulate research results and retrieve evidence for a topic", "research", [
|
|
14457
|
+
param("topic", "string", "Topic to gather evidence for"),
|
|
14458
|
+
param("sources", "array", "Sources as {title,type,relevance,content} objects")
|
|
14456
14459
|
], async (params) => {
|
|
14457
14460
|
try {
|
|
14458
|
-
const
|
|
14459
|
-
const
|
|
14460
|
-
|
|
14461
|
+
const { createResearchEngine: createResearchEngine2, createKnowledgeAccumulator: createKnowledgeAccumulator2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14462
|
+
const sources = normalizeSources(params["sources"]);
|
|
14463
|
+
const topic = params["topic"] ?? "";
|
|
14464
|
+
const result = createResearchEngine2().research({ topic, depth: "medium" }, sources);
|
|
14465
|
+
const acc = createKnowledgeAccumulator2();
|
|
14466
|
+
acc.accumulate(result);
|
|
14467
|
+
return ok({ evidence: acc.query(topic), summary: result.summary, confidence: result.confidence });
|
|
14461
14468
|
} catch {
|
|
14462
|
-
return
|
|
14469
|
+
return fail("Deep-research package not available");
|
|
14463
14470
|
}
|
|
14464
14471
|
})
|
|
14465
14472
|
];
|
|
14466
14473
|
}
|
|
14474
|
+
function normalizeSources(raw) {
|
|
14475
|
+
const valid = /* @__PURE__ */ new Set(["code", "documentation", "article", "api-reference"]);
|
|
14476
|
+
const arr = Array.isArray(raw) ? raw : [];
|
|
14477
|
+
return arr.map((s, i) => {
|
|
14478
|
+
const o = s ?? {};
|
|
14479
|
+
const t = String(o["type"] ?? "documentation");
|
|
14480
|
+
return {
|
|
14481
|
+
title: String(o["title"] ?? `source-${i + 1}`),
|
|
14482
|
+
type: valid.has(t) ? t : "documentation",
|
|
14483
|
+
relevance: typeof o["relevance"] === "number" ? o["relevance"] : 0.5,
|
|
14484
|
+
content: String(o["content"] ?? (typeof s === "string" ? s : ""))
|
|
14485
|
+
};
|
|
14486
|
+
});
|
|
14487
|
+
}
|
|
14467
14488
|
function neuralTools() {
|
|
14468
14489
|
return [
|
|
14469
|
-
tool("neural.search", "Neural similarity search
|
|
14490
|
+
tool("neural.search", "Neural (TF-IDF) similarity search over provided documents", "neural", [
|
|
14470
14491
|
param("query", "string", "Search query"),
|
|
14492
|
+
param("documents", "array", "Documents to index: strings or {id,text} objects"),
|
|
14471
14493
|
param("topK", "number", "Number of results", false, 10)
|
|
14472
14494
|
], async (params) => {
|
|
14473
14495
|
try {
|
|
14474
|
-
const
|
|
14475
|
-
const
|
|
14476
|
-
|
|
14496
|
+
const { createNeuralSearchEngine: createNeuralSearchEngine2, createTfIdfEmbeddingModel: createTfIdfEmbeddingModel2 } = await Promise.resolve().then(() => (init_dist14(), dist_exports14));
|
|
14497
|
+
const model = createTfIdfEmbeddingModel2();
|
|
14498
|
+
const engine = createNeuralSearchEngine2();
|
|
14499
|
+
const docs = params["documents"] ?? [];
|
|
14500
|
+
const texts = docs.map((d) => typeof d === "string" ? d : d.text ?? "");
|
|
14501
|
+
const model2 = createTfIdfEmbeddingModel2();
|
|
14502
|
+
if (typeof model2.fit === "function") {
|
|
14503
|
+
model2.fit(texts);
|
|
14504
|
+
}
|
|
14505
|
+
const embedder = typeof model2.fit === "function" ? model2 : model;
|
|
14506
|
+
for (let i = 0; i < docs.length; i++) {
|
|
14507
|
+
const d = docs[i];
|
|
14508
|
+
const id = typeof d === "string" ? `doc-${i}` : d.id ?? `doc-${i}`;
|
|
14509
|
+
engine.addDocument(id, await embedder.embed(texts[i]), { text: texts[i] });
|
|
14510
|
+
}
|
|
14511
|
+
const hits = engine.search(await embedder.embed(params["query"] ?? ""), params["topK"] ?? 10);
|
|
14512
|
+
return ok({ query: params["query"], hits });
|
|
14477
14513
|
} catch {
|
|
14478
|
-
return
|
|
14514
|
+
return fail("Neural-search package not available");
|
|
14479
14515
|
}
|
|
14480
14516
|
}),
|
|
14481
|
-
tool("neural.embed", "Generate
|
|
14517
|
+
tool("neural.embed", "Generate a TF-IDF embedding vector for text", "neural", [param("text", "string", "Text to embed")], async (params) => {
|
|
14482
14518
|
try {
|
|
14483
|
-
const
|
|
14484
|
-
const
|
|
14485
|
-
|
|
14519
|
+
const { createTfIdfEmbeddingModel: createTfIdfEmbeddingModel2 } = await Promise.resolve().then(() => (init_dist14(), dist_exports14));
|
|
14520
|
+
const model = createTfIdfEmbeddingModel2();
|
|
14521
|
+
const text = params["text"] ?? "";
|
|
14522
|
+
if (typeof model.fit === "function") {
|
|
14523
|
+
model.fit([text]);
|
|
14524
|
+
}
|
|
14525
|
+
const vector = await model.embed(text);
|
|
14526
|
+
return ok({ vector, dimensions: Array.isArray(vector) ? vector.length : vector.values?.length ?? 0 });
|
|
14486
14527
|
} catch {
|
|
14487
|
-
return
|
|
14528
|
+
return fail("Neural-search package not available");
|
|
14488
14529
|
}
|
|
14489
14530
|
}),
|
|
14490
|
-
tool("neural.patterns.extract", "Wake phase: extract patterns from
|
|
14491
|
-
param("source", "string", "Source code or data to extract patterns from"),
|
|
14492
|
-
param("type", "string", "Pattern type: structural | behavioral | api", false, "structural")
|
|
14493
|
-
], async (params) => {
|
|
14531
|
+
tool("neural.patterns.extract", "Wake phase: extract patterns from a list of items", "neural", [param("items", "array", "Items (strings) to process for pattern extraction")], async (params) => {
|
|
14494
14532
|
try {
|
|
14495
|
-
const
|
|
14496
|
-
const
|
|
14497
|
-
return ok(
|
|
14533
|
+
const { createWakePhase: createWakePhase2 } = await Promise.resolve().then(() => (init_dist15(), dist_exports15));
|
|
14534
|
+
const items = (params["items"] ?? []).map(String);
|
|
14535
|
+
return ok(createWakePhase2().process(items));
|
|
14498
14536
|
} catch {
|
|
14499
|
-
return
|
|
14537
|
+
return fail("Wake-sleep package not available");
|
|
14500
14538
|
}
|
|
14501
14539
|
}),
|
|
14502
|
-
tool("neural.patterns.consolidate", "Sleep phase: consolidate and compress learned patterns", "neural", [param("patterns", "array", "
|
|
14540
|
+
tool("neural.patterns.consolidate", "Sleep phase: consolidate and compress learned patterns", "neural", [param("patterns", "array", "Pattern strings to consolidate")], async (params) => {
|
|
14503
14541
|
try {
|
|
14504
|
-
const
|
|
14505
|
-
const
|
|
14506
|
-
return ok(
|
|
14542
|
+
const { createSleepPhase: createSleepPhase2 } = await Promise.resolve().then(() => (init_dist15(), dist_exports15));
|
|
14543
|
+
const patterns = (params["patterns"] ?? []).map(String);
|
|
14544
|
+
return ok(createSleepPhase2().consolidate(patterns));
|
|
14507
14545
|
} catch {
|
|
14508
|
-
return
|
|
14546
|
+
return fail("Wake-sleep package not available");
|
|
14509
14547
|
}
|
|
14510
14548
|
}),
|
|
14511
|
-
tool("neural.library.learn", "Learn patterns from
|
|
14512
|
-
param("library", "string", "Library name or path"),
|
|
14513
|
-
param("depth", "string", "Analysis depth: api | usage | deep", false, "api")
|
|
14514
|
-
], async (params) => {
|
|
14549
|
+
tool("neural.library.learn", "Learn reusable patterns from code snippets (E-graph library learning)", "neural", [param("snippets", "array", "Array of code snippet strings to learn from")], async (params) => {
|
|
14515
14550
|
try {
|
|
14516
|
-
const
|
|
14517
|
-
const
|
|
14518
|
-
|
|
14551
|
+
const { createLibraryLearner: createLibraryLearner2 } = await Promise.resolve().then(() => (init_dist11(), dist_exports11));
|
|
14552
|
+
const snippets = (params["snippets"] ?? []).map(String);
|
|
14553
|
+
const patterns = createLibraryLearner2().learn(snippets);
|
|
14554
|
+
return ok({ patterns, count: patterns.length });
|
|
14519
14555
|
} catch {
|
|
14520
|
-
return
|
|
14556
|
+
return fail("Library-learner package not available");
|
|
14521
14557
|
}
|
|
14522
14558
|
})
|
|
14523
14559
|
];
|
|
@@ -14613,110 +14649,156 @@ function synthesisTools() {
|
|
|
14613
14649
|
})
|
|
14614
14650
|
];
|
|
14615
14651
|
}
|
|
14652
|
+
async function buildSpecFromParams(params) {
|
|
14653
|
+
const text = params["text"] ?? params["requirement"] ?? params["spec"] ?? "";
|
|
14654
|
+
let pattern = params["pattern"];
|
|
14655
|
+
if (!pattern) {
|
|
14656
|
+
try {
|
|
14657
|
+
const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
|
|
14658
|
+
pattern = createEARSValidator2().analyze(text).pattern;
|
|
14659
|
+
} catch {
|
|
14660
|
+
pattern = "ubiquitous";
|
|
14661
|
+
}
|
|
14662
|
+
}
|
|
14663
|
+
return {
|
|
14664
|
+
id: params["id"] ?? "REQ-XXX-001",
|
|
14665
|
+
title: params["name"] ?? params["title"] ?? "requirement",
|
|
14666
|
+
text,
|
|
14667
|
+
pattern,
|
|
14668
|
+
trigger: params["trigger"],
|
|
14669
|
+
condition: params["condition"],
|
|
14670
|
+
action: params["action"] ?? text
|
|
14671
|
+
};
|
|
14672
|
+
}
|
|
14616
14673
|
function formalVerifyTools() {
|
|
14617
14674
|
return [
|
|
14618
|
-
tool("verify.ears-to-smt", "Convert EARS
|
|
14675
|
+
tool("verify.ears-to-smt", "Convert an EARS requirement to SMT-LIB2", "formal-verify", [
|
|
14676
|
+
param("text", "string", "EARS requirement text"),
|
|
14677
|
+
param("action", "string", "Requirement action clause", false)
|
|
14678
|
+
], async (params) => {
|
|
14619
14679
|
try {
|
|
14620
|
-
const
|
|
14621
|
-
|
|
14622
|
-
return ok(smt ?? { smtlib2: "", requirement: params["requirement"] });
|
|
14680
|
+
const { createEarsToSmtConverter: createEarsToSmtConverter2 } = await Promise.resolve().then(() => (init_dist16(), dist_exports16));
|
|
14681
|
+
return ok(createEarsToSmtConverter2().convert(await buildSpecFromParams(params)));
|
|
14623
14682
|
} catch {
|
|
14624
|
-
return
|
|
14683
|
+
return fail("Formal-verify package not available");
|
|
14625
14684
|
}
|
|
14626
14685
|
}),
|
|
14627
|
-
tool("verify.z3.solve", "Solve an SMT
|
|
14628
|
-
param("formula", "string", "SMT-LIB2 formula"),
|
|
14629
|
-
param("timeout", "number", "Timeout in milliseconds", false, 5e3)
|
|
14630
|
-
], async (params) => {
|
|
14686
|
+
tool("verify.z3.solve", "Solve an SMT-LIB2 script with the Z3 adapter", "formal-verify", [param("formula", "string", "SMT-LIB2 script")], async (params) => {
|
|
14631
14687
|
try {
|
|
14632
|
-
const
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
return ok({ satisfiable: false, model: null });
|
|
14688
|
+
const { createZ3Adapter: createZ3Adapter2 } = await Promise.resolve().then(() => (init_dist16(), dist_exports16));
|
|
14689
|
+
return ok(await createZ3Adapter2().solve(params["formula"] ?? ""));
|
|
14690
|
+
} catch (err) {
|
|
14691
|
+
return fail(`Z3 solve failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14637
14692
|
}
|
|
14638
14693
|
}),
|
|
14639
|
-
tool("verify.lean.convert", "Convert a specification to a Lean 4 theorem", "formal-verify", [
|
|
14640
|
-
param("
|
|
14694
|
+
tool("verify.lean.convert", "Convert a requirement specification to a Lean 4 theorem", "formal-verify", [
|
|
14695
|
+
param("text", "string", "Requirement text"),
|
|
14696
|
+
param("action", "string", "Requirement action clause", false),
|
|
14641
14697
|
param("name", "string", "Theorem name", false, "spec_theorem")
|
|
14642
14698
|
], async (params) => {
|
|
14643
14699
|
try {
|
|
14644
|
-
const
|
|
14645
|
-
|
|
14646
|
-
return ok(result ?? { lean4: "", name: params["name"] ?? "spec_theorem" });
|
|
14700
|
+
const { createEarsToLeanConverter: createEarsToLeanConverter2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14701
|
+
return ok(createEarsToLeanConverter2().convert(await buildSpecFromParams(params)));
|
|
14647
14702
|
} catch {
|
|
14648
|
-
return
|
|
14703
|
+
return fail("Lean package not available");
|
|
14649
14704
|
}
|
|
14650
14705
|
}),
|
|
14651
|
-
tool("verify.lean.run", "Run a Lean 4 proof", "formal-verify", [param("proof", "string", "Lean 4 proof code")], async (params) => {
|
|
14706
|
+
tool("verify.lean.run", "Run a Lean 4 proof (requires a Lean toolchain; reports availability otherwise)", "formal-verify", [param("proof", "string", "Lean 4 proof code")], async (params) => {
|
|
14652
14707
|
try {
|
|
14653
|
-
const
|
|
14654
|
-
|
|
14655
|
-
|
|
14656
|
-
|
|
14657
|
-
return ok({ verified: false, output: "" });
|
|
14708
|
+
const { createLeanProofRunner: createLeanProofRunner2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14709
|
+
return ok(await createLeanProofRunner2().runProof(params["proof"] ?? ""));
|
|
14710
|
+
} catch (err) {
|
|
14711
|
+
return fail(`Lean proof run failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14658
14712
|
}
|
|
14659
14713
|
}),
|
|
14660
|
-
tool("verify.hybrid", "Run hybrid verification
|
|
14661
|
-
param("
|
|
14662
|
-
param("
|
|
14714
|
+
tool("verify.hybrid", "Run hybrid (Z3 + Lean) verification on a requirement specification", "formal-verify", [
|
|
14715
|
+
param("text", "string", "Requirement text"),
|
|
14716
|
+
param("action", "string", "Requirement action clause", false)
|
|
14663
14717
|
], async (params) => {
|
|
14664
14718
|
try {
|
|
14665
|
-
const
|
|
14666
|
-
|
|
14667
|
-
|
|
14668
|
-
|
|
14669
|
-
return ok({ verified: false, strategy: params["strategy"] ?? "z3-first" });
|
|
14719
|
+
const { createHybridVerifier: createHybridVerifier2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14720
|
+
return ok(await createHybridVerifier2().verify(await buildSpecFromParams(params)));
|
|
14721
|
+
} catch (err) {
|
|
14722
|
+
return fail(`Hybrid verification failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14670
14723
|
}
|
|
14671
14724
|
})
|
|
14672
14725
|
];
|
|
14673
14726
|
}
|
|
14727
|
+
async function loadTracker(basePath) {
|
|
14728
|
+
const { createStateTracker: createStateTracker2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14729
|
+
const { existsSync: existsSync12, readFileSync: readFileSync7 } = await import("node:fs");
|
|
14730
|
+
const { join: join8 } = await import("node:path");
|
|
14731
|
+
const tracker = createStateTracker2();
|
|
14732
|
+
const file = join8(basePath, ".musubix", "workflow-state.json");
|
|
14733
|
+
try {
|
|
14734
|
+
if (existsSync12(file))
|
|
14735
|
+
tracker.restore(JSON.parse(readFileSync7(file, "utf-8")));
|
|
14736
|
+
} catch {
|
|
14737
|
+
}
|
|
14738
|
+
return { tracker, file };
|
|
14739
|
+
}
|
|
14740
|
+
async function saveTracker(tracker, file) {
|
|
14741
|
+
const { writeFileSync: writeFileSync4, mkdirSync: mkdirSync4 } = await import("node:fs");
|
|
14742
|
+
const { dirname: dirname4 } = await import("node:path");
|
|
14743
|
+
mkdirSync4(dirname4(file), { recursive: true });
|
|
14744
|
+
writeFileSync4(file, JSON.stringify(tracker.toJSON(), null, 2), "utf-8");
|
|
14745
|
+
}
|
|
14674
14746
|
function workflowTools() {
|
|
14675
14747
|
return [
|
|
14676
|
-
tool("workflow.phase.current", "Get the current SDD workflow phase", "workflow", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
|
|
14748
|
+
tool("workflow.phase.current", "Get the current SDD workflow phase and approvals", "workflow", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
|
|
14677
14749
|
try {
|
|
14678
|
-
const
|
|
14679
|
-
const
|
|
14680
|
-
const
|
|
14681
|
-
return ok(
|
|
14750
|
+
const { PHASE_ORDER: PHASE_ORDER2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14751
|
+
const { tracker } = await loadTracker(params["basePath"] ?? ".");
|
|
14752
|
+
const state = tracker.getState();
|
|
14753
|
+
return ok({
|
|
14754
|
+
currentPhase: state.currentPhase,
|
|
14755
|
+
approvals: PHASE_ORDER2.map((p) => ({ phase: p, approved: tracker.isApproved(p) }))
|
|
14756
|
+
});
|
|
14682
14757
|
} catch {
|
|
14683
|
-
return
|
|
14758
|
+
return fail("Workflow-engine package not available");
|
|
14684
14759
|
}
|
|
14685
14760
|
}),
|
|
14686
|
-
tool("workflow.phase.transition", "Transition to
|
|
14761
|
+
tool("workflow.phase.transition", "Transition to a target SDD workflow phase (persisted)", "workflow", [
|
|
14687
14762
|
param("targetPhase", "string", "Target phase to transition to"),
|
|
14688
14763
|
param("basePath", "string", "Project base path", false, ".")
|
|
14689
14764
|
], async (params) => {
|
|
14690
14765
|
try {
|
|
14691
|
-
const
|
|
14692
|
-
const
|
|
14693
|
-
const result =
|
|
14694
|
-
|
|
14766
|
+
const { createPhaseController: createPhaseController2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14767
|
+
const { tracker, file } = await loadTracker(params["basePath"] ?? ".");
|
|
14768
|
+
const result = await createPhaseController2(tracker).transitionTo(params["targetPhase"]);
|
|
14769
|
+
if (result.success)
|
|
14770
|
+
await saveTracker(tracker, file);
|
|
14771
|
+
return ok(result);
|
|
14695
14772
|
} catch {
|
|
14696
|
-
return
|
|
14773
|
+
return fail("Workflow-engine package not available");
|
|
14697
14774
|
}
|
|
14698
14775
|
}),
|
|
14699
|
-
tool("workflow.gate.check", "Check
|
|
14700
|
-
param("
|
|
14776
|
+
tool("workflow.gate.check", "Check whether the workflow can transition to a target phase (quality gates)", "workflow", [
|
|
14777
|
+
param("targetPhase", "string", "Target phase to check"),
|
|
14701
14778
|
param("basePath", "string", "Project base path", false, ".")
|
|
14702
14779
|
], async (params) => {
|
|
14703
14780
|
try {
|
|
14704
|
-
const
|
|
14705
|
-
const
|
|
14706
|
-
const
|
|
14707
|
-
|
|
14781
|
+
const { createPhaseController: createPhaseController2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14782
|
+
const { tracker } = await loadTracker(params["basePath"] ?? ".");
|
|
14783
|
+
const target = params["targetPhase"] ?? params["gate"];
|
|
14784
|
+
const canTransition = await createPhaseController2(tracker).canTransition(target);
|
|
14785
|
+
return ok({ targetPhase: target, canTransition });
|
|
14708
14786
|
} catch {
|
|
14709
|
-
return
|
|
14787
|
+
return fail("Workflow-engine package not available");
|
|
14710
14788
|
}
|
|
14711
14789
|
}),
|
|
14712
|
-
tool("workflow.
|
|
14790
|
+
tool("workflow.approve", "Approve the current (or a named) SDD phase (persisted)", "workflow", [
|
|
14791
|
+
param("phase", "string", "Phase to approve"),
|
|
14792
|
+
param("basePath", "string", "Project base path", false, ".")
|
|
14793
|
+
], async (params) => {
|
|
14713
14794
|
try {
|
|
14714
|
-
const
|
|
14715
|
-
const
|
|
14716
|
-
|
|
14717
|
-
|
|
14795
|
+
const { tracker, file } = await loadTracker(params["basePath"] ?? ".");
|
|
14796
|
+
const phase = params["phase"] ?? tracker.getState().currentPhase;
|
|
14797
|
+
tracker.approve(phase);
|
|
14798
|
+
await saveTracker(tracker, file);
|
|
14799
|
+
return ok({ phase, approved: true });
|
|
14718
14800
|
} catch {
|
|
14719
|
-
return
|
|
14801
|
+
return fail("Workflow-engine package not available");
|
|
14720
14802
|
}
|
|
14721
14803
|
})
|
|
14722
14804
|
];
|
|
@@ -14769,44 +14851,56 @@ function decisionsTools() {
|
|
|
14769
14851
|
})
|
|
14770
14852
|
];
|
|
14771
14853
|
}
|
|
14854
|
+
async function getSkillManager() {
|
|
14855
|
+
if (!_skillManager) {
|
|
14856
|
+
const { createSkillManager: createSkillManager2 } = await Promise.resolve().then(() => (init_dist7(), dist_exports7));
|
|
14857
|
+
_skillManager = createSkillManager2();
|
|
14858
|
+
}
|
|
14859
|
+
return _skillManager;
|
|
14860
|
+
}
|
|
14772
14861
|
function skillsTools() {
|
|
14773
14862
|
return [
|
|
14774
|
-
tool("skills.list", "List
|
|
14863
|
+
tool("skills.list", "List skills registered in the current server session", "skills", [], async () => {
|
|
14775
14864
|
try {
|
|
14776
|
-
const
|
|
14777
|
-
|
|
14778
|
-
return ok(skills ?? []);
|
|
14865
|
+
const mgr = await getSkillManager();
|
|
14866
|
+
return ok(mgr.getAvailableSkills().map((s) => ({ id: s.id, name: s.metadata.name, status: s.status })));
|
|
14779
14867
|
} catch {
|
|
14780
|
-
return
|
|
14868
|
+
return fail("Skill-manager package not available");
|
|
14781
14869
|
}
|
|
14782
14870
|
}),
|
|
14783
|
-
tool("skills.register", "Register a
|
|
14871
|
+
tool("skills.register", "Register a skill (echo-executor) for this server session", "skills", [
|
|
14784
14872
|
param("name", "string", "Skill name"),
|
|
14785
|
-
param("description", "string", "Skill description"),
|
|
14786
|
-
param("
|
|
14873
|
+
param("description", "string", "Skill description", false, ""),
|
|
14874
|
+
param("triggers", "array", "Trigger keywords", false)
|
|
14787
14875
|
], async (params) => {
|
|
14788
14876
|
try {
|
|
14789
|
-
const
|
|
14790
|
-
const
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
|
|
14794
|
-
|
|
14795
|
-
|
|
14877
|
+
const mgr = await getSkillManager();
|
|
14878
|
+
const name = params["name"] ?? "skill";
|
|
14879
|
+
const skill = mgr.loadFromMetadata({
|
|
14880
|
+
name,
|
|
14881
|
+
version: "1.0.0",
|
|
14882
|
+
description: params["description"] ?? "",
|
|
14883
|
+
triggers: params["triggers"] ?? []
|
|
14884
|
+
}, async (input) => ({ skill: name, output: input }));
|
|
14885
|
+
return ok({ id: skill.id, name, registered: true });
|
|
14796
14886
|
} catch {
|
|
14797
|
-
return
|
|
14887
|
+
return fail("Skill-manager package not available");
|
|
14798
14888
|
}
|
|
14799
14889
|
}),
|
|
14800
|
-
tool("skills.execute", "Execute a
|
|
14890
|
+
tool("skills.execute", "Execute a session skill by name (must be registered in this session first)", "skills", [
|
|
14801
14891
|
param("name", "string", "Skill name to execute"),
|
|
14802
14892
|
param("input", "object", "Skill input parameters", false, {})
|
|
14803
14893
|
], async (params) => {
|
|
14804
14894
|
try {
|
|
14805
|
-
const
|
|
14806
|
-
const
|
|
14807
|
-
|
|
14895
|
+
const mgr = await getSkillManager();
|
|
14896
|
+
const name = params["name"] ?? "";
|
|
14897
|
+
const match = mgr.getAvailableSkills().find((s) => s.metadata.name === name);
|
|
14898
|
+
if (!match)
|
|
14899
|
+
return fail(`Skill not registered in this session: ${name}`);
|
|
14900
|
+
const output = await match.execute(params["input"] ?? {});
|
|
14901
|
+
return ok({ executed: true, name, output });
|
|
14808
14902
|
} catch {
|
|
14809
|
-
return
|
|
14903
|
+
return fail("Skill-manager package not available");
|
|
14810
14904
|
}
|
|
14811
14905
|
})
|
|
14812
14906
|
];
|
|
@@ -14834,9 +14928,11 @@ function registerDefaultTools(server) {
|
|
|
14834
14928
|
server.registerBatch(category.tools);
|
|
14835
14929
|
}
|
|
14836
14930
|
}
|
|
14931
|
+
var _skillManager;
|
|
14837
14932
|
var init_catalog = __esm({
|
|
14838
14933
|
"../mcp-server/dist/catalog.js"() {
|
|
14839
14934
|
"use strict";
|
|
14935
|
+
_skillManager = null;
|
|
14840
14936
|
}
|
|
14841
14937
|
});
|
|
14842
14938
|
|
package/dist/index.js
CHANGED
|
@@ -14431,93 +14431,129 @@ function researchTools() {
|
|
|
14431
14431
|
param("depth", "string", "Research depth: shallow | medium | deep", false, "medium")
|
|
14432
14432
|
], async (params) => {
|
|
14433
14433
|
try {
|
|
14434
|
-
const
|
|
14435
|
-
const
|
|
14436
|
-
|
|
14434
|
+
const { createResearchEngine: createResearchEngine2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14435
|
+
const sources = normalizeSources(params["sources"]);
|
|
14436
|
+
const result = createResearchEngine2().research({ topic: params["topic"] ?? "", depth: params["depth"] ?? "medium" }, sources);
|
|
14437
|
+
return ok(result);
|
|
14437
14438
|
} catch {
|
|
14438
|
-
return
|
|
14439
|
+
return fail("Deep-research package not available");
|
|
14439
14440
|
}
|
|
14440
14441
|
}),
|
|
14441
|
-
tool("research.iterative", "Perform iterative
|
|
14442
|
+
tool("research.iterative", "Perform iterative research with progressive refinement over provided sources", "research", [
|
|
14442
14443
|
param("topic", "string", "Research topic"),
|
|
14443
|
-
param("
|
|
14444
|
+
param("depth", "string", "Depth: shallow | medium | deep", false, "medium"),
|
|
14445
|
+
param("sources", "array", "Sources as {title,type,relevance,content} objects")
|
|
14444
14446
|
], async (params) => {
|
|
14445
14447
|
try {
|
|
14446
|
-
const
|
|
14447
|
-
const
|
|
14448
|
-
|
|
14448
|
+
const { createResearchEngine: createResearchEngine2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14449
|
+
const sources = normalizeSources(params["sources"]);
|
|
14450
|
+
const result = createResearchEngine2().researchIterative({ topic: params["topic"] ?? "", depth: params["depth"] ?? "medium" }, () => sources);
|
|
14451
|
+
return ok(result);
|
|
14449
14452
|
} catch {
|
|
14450
|
-
return
|
|
14453
|
+
return fail("Deep-research package not available");
|
|
14451
14454
|
}
|
|
14452
14455
|
}),
|
|
14453
|
-
tool("research.evidence", "
|
|
14454
|
-
param("
|
|
14455
|
-
param("sources", "array", "
|
|
14456
|
+
tool("research.evidence", "Accumulate research results and retrieve evidence for a topic", "research", [
|
|
14457
|
+
param("topic", "string", "Topic to gather evidence for"),
|
|
14458
|
+
param("sources", "array", "Sources as {title,type,relevance,content} objects")
|
|
14456
14459
|
], async (params) => {
|
|
14457
14460
|
try {
|
|
14458
|
-
const
|
|
14459
|
-
const
|
|
14460
|
-
|
|
14461
|
+
const { createResearchEngine: createResearchEngine2, createKnowledgeAccumulator: createKnowledgeAccumulator2 } = await Promise.resolve().then(() => (init_dist10(), dist_exports10));
|
|
14462
|
+
const sources = normalizeSources(params["sources"]);
|
|
14463
|
+
const topic = params["topic"] ?? "";
|
|
14464
|
+
const result = createResearchEngine2().research({ topic, depth: "medium" }, sources);
|
|
14465
|
+
const acc = createKnowledgeAccumulator2();
|
|
14466
|
+
acc.accumulate(result);
|
|
14467
|
+
return ok({ evidence: acc.query(topic), summary: result.summary, confidence: result.confidence });
|
|
14461
14468
|
} catch {
|
|
14462
|
-
return
|
|
14469
|
+
return fail("Deep-research package not available");
|
|
14463
14470
|
}
|
|
14464
14471
|
})
|
|
14465
14472
|
];
|
|
14466
14473
|
}
|
|
14474
|
+
function normalizeSources(raw) {
|
|
14475
|
+
const valid = /* @__PURE__ */ new Set(["code", "documentation", "article", "api-reference"]);
|
|
14476
|
+
const arr = Array.isArray(raw) ? raw : [];
|
|
14477
|
+
return arr.map((s, i) => {
|
|
14478
|
+
const o = s ?? {};
|
|
14479
|
+
const t = String(o["type"] ?? "documentation");
|
|
14480
|
+
return {
|
|
14481
|
+
title: String(o["title"] ?? `source-${i + 1}`),
|
|
14482
|
+
type: valid.has(t) ? t : "documentation",
|
|
14483
|
+
relevance: typeof o["relevance"] === "number" ? o["relevance"] : 0.5,
|
|
14484
|
+
content: String(o["content"] ?? (typeof s === "string" ? s : ""))
|
|
14485
|
+
};
|
|
14486
|
+
});
|
|
14487
|
+
}
|
|
14467
14488
|
function neuralTools() {
|
|
14468
14489
|
return [
|
|
14469
|
-
tool("neural.search", "Neural similarity search
|
|
14490
|
+
tool("neural.search", "Neural (TF-IDF) similarity search over provided documents", "neural", [
|
|
14470
14491
|
param("query", "string", "Search query"),
|
|
14492
|
+
param("documents", "array", "Documents to index: strings or {id,text} objects"),
|
|
14471
14493
|
param("topK", "number", "Number of results", false, 10)
|
|
14472
14494
|
], async (params) => {
|
|
14473
14495
|
try {
|
|
14474
|
-
const
|
|
14475
|
-
const
|
|
14476
|
-
|
|
14496
|
+
const { createNeuralSearchEngine: createNeuralSearchEngine2, createTfIdfEmbeddingModel: createTfIdfEmbeddingModel2 } = await Promise.resolve().then(() => (init_dist14(), dist_exports14));
|
|
14497
|
+
const model = createTfIdfEmbeddingModel2();
|
|
14498
|
+
const engine = createNeuralSearchEngine2();
|
|
14499
|
+
const docs = params["documents"] ?? [];
|
|
14500
|
+
const texts = docs.map((d) => typeof d === "string" ? d : d.text ?? "");
|
|
14501
|
+
const model2 = createTfIdfEmbeddingModel2();
|
|
14502
|
+
if (typeof model2.fit === "function") {
|
|
14503
|
+
model2.fit(texts);
|
|
14504
|
+
}
|
|
14505
|
+
const embedder = typeof model2.fit === "function" ? model2 : model;
|
|
14506
|
+
for (let i = 0; i < docs.length; i++) {
|
|
14507
|
+
const d = docs[i];
|
|
14508
|
+
const id = typeof d === "string" ? `doc-${i}` : d.id ?? `doc-${i}`;
|
|
14509
|
+
engine.addDocument(id, await embedder.embed(texts[i]), { text: texts[i] });
|
|
14510
|
+
}
|
|
14511
|
+
const hits = engine.search(await embedder.embed(params["query"] ?? ""), params["topK"] ?? 10);
|
|
14512
|
+
return ok({ query: params["query"], hits });
|
|
14477
14513
|
} catch {
|
|
14478
|
-
return
|
|
14514
|
+
return fail("Neural-search package not available");
|
|
14479
14515
|
}
|
|
14480
14516
|
}),
|
|
14481
|
-
tool("neural.embed", "Generate
|
|
14517
|
+
tool("neural.embed", "Generate a TF-IDF embedding vector for text", "neural", [param("text", "string", "Text to embed")], async (params) => {
|
|
14482
14518
|
try {
|
|
14483
|
-
const
|
|
14484
|
-
const
|
|
14485
|
-
|
|
14519
|
+
const { createTfIdfEmbeddingModel: createTfIdfEmbeddingModel2 } = await Promise.resolve().then(() => (init_dist14(), dist_exports14));
|
|
14520
|
+
const model = createTfIdfEmbeddingModel2();
|
|
14521
|
+
const text = params["text"] ?? "";
|
|
14522
|
+
if (typeof model.fit === "function") {
|
|
14523
|
+
model.fit([text]);
|
|
14524
|
+
}
|
|
14525
|
+
const vector = await model.embed(text);
|
|
14526
|
+
return ok({ vector, dimensions: Array.isArray(vector) ? vector.length : vector.values?.length ?? 0 });
|
|
14486
14527
|
} catch {
|
|
14487
|
-
return
|
|
14528
|
+
return fail("Neural-search package not available");
|
|
14488
14529
|
}
|
|
14489
14530
|
}),
|
|
14490
|
-
tool("neural.patterns.extract", "Wake phase: extract patterns from
|
|
14491
|
-
param("source", "string", "Source code or data to extract patterns from"),
|
|
14492
|
-
param("type", "string", "Pattern type: structural | behavioral | api", false, "structural")
|
|
14493
|
-
], async (params) => {
|
|
14531
|
+
tool("neural.patterns.extract", "Wake phase: extract patterns from a list of items", "neural", [param("items", "array", "Items (strings) to process for pattern extraction")], async (params) => {
|
|
14494
14532
|
try {
|
|
14495
|
-
const
|
|
14496
|
-
const
|
|
14497
|
-
return ok(
|
|
14533
|
+
const { createWakePhase: createWakePhase2 } = await Promise.resolve().then(() => (init_dist15(), dist_exports15));
|
|
14534
|
+
const items = (params["items"] ?? []).map(String);
|
|
14535
|
+
return ok(createWakePhase2().process(items));
|
|
14498
14536
|
} catch {
|
|
14499
|
-
return
|
|
14537
|
+
return fail("Wake-sleep package not available");
|
|
14500
14538
|
}
|
|
14501
14539
|
}),
|
|
14502
|
-
tool("neural.patterns.consolidate", "Sleep phase: consolidate and compress learned patterns", "neural", [param("patterns", "array", "
|
|
14540
|
+
tool("neural.patterns.consolidate", "Sleep phase: consolidate and compress learned patterns", "neural", [param("patterns", "array", "Pattern strings to consolidate")], async (params) => {
|
|
14503
14541
|
try {
|
|
14504
|
-
const
|
|
14505
|
-
const
|
|
14506
|
-
return ok(
|
|
14542
|
+
const { createSleepPhase: createSleepPhase2 } = await Promise.resolve().then(() => (init_dist15(), dist_exports15));
|
|
14543
|
+
const patterns = (params["patterns"] ?? []).map(String);
|
|
14544
|
+
return ok(createSleepPhase2().consolidate(patterns));
|
|
14507
14545
|
} catch {
|
|
14508
|
-
return
|
|
14546
|
+
return fail("Wake-sleep package not available");
|
|
14509
14547
|
}
|
|
14510
14548
|
}),
|
|
14511
|
-
tool("neural.library.learn", "Learn patterns from
|
|
14512
|
-
param("library", "string", "Library name or path"),
|
|
14513
|
-
param("depth", "string", "Analysis depth: api | usage | deep", false, "api")
|
|
14514
|
-
], async (params) => {
|
|
14549
|
+
tool("neural.library.learn", "Learn reusable patterns from code snippets (E-graph library learning)", "neural", [param("snippets", "array", "Array of code snippet strings to learn from")], async (params) => {
|
|
14515
14550
|
try {
|
|
14516
|
-
const
|
|
14517
|
-
const
|
|
14518
|
-
|
|
14551
|
+
const { createLibraryLearner: createLibraryLearner2 } = await Promise.resolve().then(() => (init_dist11(), dist_exports11));
|
|
14552
|
+
const snippets = (params["snippets"] ?? []).map(String);
|
|
14553
|
+
const patterns = createLibraryLearner2().learn(snippets);
|
|
14554
|
+
return ok({ patterns, count: patterns.length });
|
|
14519
14555
|
} catch {
|
|
14520
|
-
return
|
|
14556
|
+
return fail("Library-learner package not available");
|
|
14521
14557
|
}
|
|
14522
14558
|
})
|
|
14523
14559
|
];
|
|
@@ -14613,110 +14649,156 @@ function synthesisTools() {
|
|
|
14613
14649
|
})
|
|
14614
14650
|
];
|
|
14615
14651
|
}
|
|
14652
|
+
async function buildSpecFromParams(params) {
|
|
14653
|
+
const text = params["text"] ?? params["requirement"] ?? params["spec"] ?? "";
|
|
14654
|
+
let pattern = params["pattern"];
|
|
14655
|
+
if (!pattern) {
|
|
14656
|
+
try {
|
|
14657
|
+
const { createEARSValidator: createEARSValidator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
|
|
14658
|
+
pattern = createEARSValidator2().analyze(text).pattern;
|
|
14659
|
+
} catch {
|
|
14660
|
+
pattern = "ubiquitous";
|
|
14661
|
+
}
|
|
14662
|
+
}
|
|
14663
|
+
return {
|
|
14664
|
+
id: params["id"] ?? "REQ-XXX-001",
|
|
14665
|
+
title: params["name"] ?? params["title"] ?? "requirement",
|
|
14666
|
+
text,
|
|
14667
|
+
pattern,
|
|
14668
|
+
trigger: params["trigger"],
|
|
14669
|
+
condition: params["condition"],
|
|
14670
|
+
action: params["action"] ?? text
|
|
14671
|
+
};
|
|
14672
|
+
}
|
|
14616
14673
|
function formalVerifyTools() {
|
|
14617
14674
|
return [
|
|
14618
|
-
tool("verify.ears-to-smt", "Convert EARS
|
|
14675
|
+
tool("verify.ears-to-smt", "Convert an EARS requirement to SMT-LIB2", "formal-verify", [
|
|
14676
|
+
param("text", "string", "EARS requirement text"),
|
|
14677
|
+
param("action", "string", "Requirement action clause", false)
|
|
14678
|
+
], async (params) => {
|
|
14619
14679
|
try {
|
|
14620
|
-
const
|
|
14621
|
-
|
|
14622
|
-
return ok(smt ?? { smtlib2: "", requirement: params["requirement"] });
|
|
14680
|
+
const { createEarsToSmtConverter: createEarsToSmtConverter2 } = await Promise.resolve().then(() => (init_dist16(), dist_exports16));
|
|
14681
|
+
return ok(createEarsToSmtConverter2().convert(await buildSpecFromParams(params)));
|
|
14623
14682
|
} catch {
|
|
14624
|
-
return
|
|
14683
|
+
return fail("Formal-verify package not available");
|
|
14625
14684
|
}
|
|
14626
14685
|
}),
|
|
14627
|
-
tool("verify.z3.solve", "Solve an SMT
|
|
14628
|
-
param("formula", "string", "SMT-LIB2 formula"),
|
|
14629
|
-
param("timeout", "number", "Timeout in milliseconds", false, 5e3)
|
|
14630
|
-
], async (params) => {
|
|
14686
|
+
tool("verify.z3.solve", "Solve an SMT-LIB2 script with the Z3 adapter", "formal-verify", [param("formula", "string", "SMT-LIB2 script")], async (params) => {
|
|
14631
14687
|
try {
|
|
14632
|
-
const
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
return ok({ satisfiable: false, model: null });
|
|
14688
|
+
const { createZ3Adapter: createZ3Adapter2 } = await Promise.resolve().then(() => (init_dist16(), dist_exports16));
|
|
14689
|
+
return ok(await createZ3Adapter2().solve(params["formula"] ?? ""));
|
|
14690
|
+
} catch (err) {
|
|
14691
|
+
return fail(`Z3 solve failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14637
14692
|
}
|
|
14638
14693
|
}),
|
|
14639
|
-
tool("verify.lean.convert", "Convert a specification to a Lean 4 theorem", "formal-verify", [
|
|
14640
|
-
param("
|
|
14694
|
+
tool("verify.lean.convert", "Convert a requirement specification to a Lean 4 theorem", "formal-verify", [
|
|
14695
|
+
param("text", "string", "Requirement text"),
|
|
14696
|
+
param("action", "string", "Requirement action clause", false),
|
|
14641
14697
|
param("name", "string", "Theorem name", false, "spec_theorem")
|
|
14642
14698
|
], async (params) => {
|
|
14643
14699
|
try {
|
|
14644
|
-
const
|
|
14645
|
-
|
|
14646
|
-
return ok(result ?? { lean4: "", name: params["name"] ?? "spec_theorem" });
|
|
14700
|
+
const { createEarsToLeanConverter: createEarsToLeanConverter2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14701
|
+
return ok(createEarsToLeanConverter2().convert(await buildSpecFromParams(params)));
|
|
14647
14702
|
} catch {
|
|
14648
|
-
return
|
|
14703
|
+
return fail("Lean package not available");
|
|
14649
14704
|
}
|
|
14650
14705
|
}),
|
|
14651
|
-
tool("verify.lean.run", "Run a Lean 4 proof", "formal-verify", [param("proof", "string", "Lean 4 proof code")], async (params) => {
|
|
14706
|
+
tool("verify.lean.run", "Run a Lean 4 proof (requires a Lean toolchain; reports availability otherwise)", "formal-verify", [param("proof", "string", "Lean 4 proof code")], async (params) => {
|
|
14652
14707
|
try {
|
|
14653
|
-
const
|
|
14654
|
-
|
|
14655
|
-
|
|
14656
|
-
|
|
14657
|
-
return ok({ verified: false, output: "" });
|
|
14708
|
+
const { createLeanProofRunner: createLeanProofRunner2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14709
|
+
return ok(await createLeanProofRunner2().runProof(params["proof"] ?? ""));
|
|
14710
|
+
} catch (err) {
|
|
14711
|
+
return fail(`Lean proof run failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14658
14712
|
}
|
|
14659
14713
|
}),
|
|
14660
|
-
tool("verify.hybrid", "Run hybrid verification
|
|
14661
|
-
param("
|
|
14662
|
-
param("
|
|
14714
|
+
tool("verify.hybrid", "Run hybrid (Z3 + Lean) verification on a requirement specification", "formal-verify", [
|
|
14715
|
+
param("text", "string", "Requirement text"),
|
|
14716
|
+
param("action", "string", "Requirement action clause", false)
|
|
14663
14717
|
], async (params) => {
|
|
14664
14718
|
try {
|
|
14665
|
-
const
|
|
14666
|
-
|
|
14667
|
-
|
|
14668
|
-
|
|
14669
|
-
return ok({ verified: false, strategy: params["strategy"] ?? "z3-first" });
|
|
14719
|
+
const { createHybridVerifier: createHybridVerifier2 } = await Promise.resolve().then(() => (init_dist17(), dist_exports17));
|
|
14720
|
+
return ok(await createHybridVerifier2().verify(await buildSpecFromParams(params)));
|
|
14721
|
+
} catch (err) {
|
|
14722
|
+
return fail(`Hybrid verification failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
14670
14723
|
}
|
|
14671
14724
|
})
|
|
14672
14725
|
];
|
|
14673
14726
|
}
|
|
14727
|
+
async function loadTracker(basePath) {
|
|
14728
|
+
const { createStateTracker: createStateTracker2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14729
|
+
const { existsSync: existsSync12, readFileSync: readFileSync7 } = await import("node:fs");
|
|
14730
|
+
const { join: join8 } = await import("node:path");
|
|
14731
|
+
const tracker = createStateTracker2();
|
|
14732
|
+
const file = join8(basePath, ".musubix", "workflow-state.json");
|
|
14733
|
+
try {
|
|
14734
|
+
if (existsSync12(file))
|
|
14735
|
+
tracker.restore(JSON.parse(readFileSync7(file, "utf-8")));
|
|
14736
|
+
} catch {
|
|
14737
|
+
}
|
|
14738
|
+
return { tracker, file };
|
|
14739
|
+
}
|
|
14740
|
+
async function saveTracker(tracker, file) {
|
|
14741
|
+
const { writeFileSync: writeFileSync4, mkdirSync: mkdirSync4 } = await import("node:fs");
|
|
14742
|
+
const { dirname: dirname4 } = await import("node:path");
|
|
14743
|
+
mkdirSync4(dirname4(file), { recursive: true });
|
|
14744
|
+
writeFileSync4(file, JSON.stringify(tracker.toJSON(), null, 2), "utf-8");
|
|
14745
|
+
}
|
|
14674
14746
|
function workflowTools() {
|
|
14675
14747
|
return [
|
|
14676
|
-
tool("workflow.phase.current", "Get the current SDD workflow phase", "workflow", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
|
|
14748
|
+
tool("workflow.phase.current", "Get the current SDD workflow phase and approvals", "workflow", [param("basePath", "string", "Project base path", false, ".")], async (params) => {
|
|
14677
14749
|
try {
|
|
14678
|
-
const
|
|
14679
|
-
const
|
|
14680
|
-
const
|
|
14681
|
-
return ok(
|
|
14750
|
+
const { PHASE_ORDER: PHASE_ORDER2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14751
|
+
const { tracker } = await loadTracker(params["basePath"] ?? ".");
|
|
14752
|
+
const state = tracker.getState();
|
|
14753
|
+
return ok({
|
|
14754
|
+
currentPhase: state.currentPhase,
|
|
14755
|
+
approvals: PHASE_ORDER2.map((p) => ({ phase: p, approved: tracker.isApproved(p) }))
|
|
14756
|
+
});
|
|
14682
14757
|
} catch {
|
|
14683
|
-
return
|
|
14758
|
+
return fail("Workflow-engine package not available");
|
|
14684
14759
|
}
|
|
14685
14760
|
}),
|
|
14686
|
-
tool("workflow.phase.transition", "Transition to
|
|
14761
|
+
tool("workflow.phase.transition", "Transition to a target SDD workflow phase (persisted)", "workflow", [
|
|
14687
14762
|
param("targetPhase", "string", "Target phase to transition to"),
|
|
14688
14763
|
param("basePath", "string", "Project base path", false, ".")
|
|
14689
14764
|
], async (params) => {
|
|
14690
14765
|
try {
|
|
14691
|
-
const
|
|
14692
|
-
const
|
|
14693
|
-
const result =
|
|
14694
|
-
|
|
14766
|
+
const { createPhaseController: createPhaseController2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14767
|
+
const { tracker, file } = await loadTracker(params["basePath"] ?? ".");
|
|
14768
|
+
const result = await createPhaseController2(tracker).transitionTo(params["targetPhase"]);
|
|
14769
|
+
if (result.success)
|
|
14770
|
+
await saveTracker(tracker, file);
|
|
14771
|
+
return ok(result);
|
|
14695
14772
|
} catch {
|
|
14696
|
-
return
|
|
14773
|
+
return fail("Workflow-engine package not available");
|
|
14697
14774
|
}
|
|
14698
14775
|
}),
|
|
14699
|
-
tool("workflow.gate.check", "Check
|
|
14700
|
-
param("
|
|
14776
|
+
tool("workflow.gate.check", "Check whether the workflow can transition to a target phase (quality gates)", "workflow", [
|
|
14777
|
+
param("targetPhase", "string", "Target phase to check"),
|
|
14701
14778
|
param("basePath", "string", "Project base path", false, ".")
|
|
14702
14779
|
], async (params) => {
|
|
14703
14780
|
try {
|
|
14704
|
-
const
|
|
14705
|
-
const
|
|
14706
|
-
const
|
|
14707
|
-
|
|
14781
|
+
const { createPhaseController: createPhaseController2 } = await Promise.resolve().then(() => (init_dist6(), dist_exports6));
|
|
14782
|
+
const { tracker } = await loadTracker(params["basePath"] ?? ".");
|
|
14783
|
+
const target = params["targetPhase"] ?? params["gate"];
|
|
14784
|
+
const canTransition = await createPhaseController2(tracker).canTransition(target);
|
|
14785
|
+
return ok({ targetPhase: target, canTransition });
|
|
14708
14786
|
} catch {
|
|
14709
|
-
return
|
|
14787
|
+
return fail("Workflow-engine package not available");
|
|
14710
14788
|
}
|
|
14711
14789
|
}),
|
|
14712
|
-
tool("workflow.
|
|
14790
|
+
tool("workflow.approve", "Approve the current (or a named) SDD phase (persisted)", "workflow", [
|
|
14791
|
+
param("phase", "string", "Phase to approve"),
|
|
14792
|
+
param("basePath", "string", "Project base path", false, ".")
|
|
14793
|
+
], async (params) => {
|
|
14713
14794
|
try {
|
|
14714
|
-
const
|
|
14715
|
-
const
|
|
14716
|
-
|
|
14717
|
-
|
|
14795
|
+
const { tracker, file } = await loadTracker(params["basePath"] ?? ".");
|
|
14796
|
+
const phase = params["phase"] ?? tracker.getState().currentPhase;
|
|
14797
|
+
tracker.approve(phase);
|
|
14798
|
+
await saveTracker(tracker, file);
|
|
14799
|
+
return ok({ phase, approved: true });
|
|
14718
14800
|
} catch {
|
|
14719
|
-
return
|
|
14801
|
+
return fail("Workflow-engine package not available");
|
|
14720
14802
|
}
|
|
14721
14803
|
})
|
|
14722
14804
|
];
|
|
@@ -14769,44 +14851,56 @@ function decisionsTools() {
|
|
|
14769
14851
|
})
|
|
14770
14852
|
];
|
|
14771
14853
|
}
|
|
14854
|
+
async function getSkillManager() {
|
|
14855
|
+
if (!_skillManager) {
|
|
14856
|
+
const { createSkillManager: createSkillManager2 } = await Promise.resolve().then(() => (init_dist7(), dist_exports7));
|
|
14857
|
+
_skillManager = createSkillManager2();
|
|
14858
|
+
}
|
|
14859
|
+
return _skillManager;
|
|
14860
|
+
}
|
|
14772
14861
|
function skillsTools() {
|
|
14773
14862
|
return [
|
|
14774
|
-
tool("skills.list", "List
|
|
14863
|
+
tool("skills.list", "List skills registered in the current server session", "skills", [], async () => {
|
|
14775
14864
|
try {
|
|
14776
|
-
const
|
|
14777
|
-
|
|
14778
|
-
return ok(skills ?? []);
|
|
14865
|
+
const mgr = await getSkillManager();
|
|
14866
|
+
return ok(mgr.getAvailableSkills().map((s) => ({ id: s.id, name: s.metadata.name, status: s.status })));
|
|
14779
14867
|
} catch {
|
|
14780
|
-
return
|
|
14868
|
+
return fail("Skill-manager package not available");
|
|
14781
14869
|
}
|
|
14782
14870
|
}),
|
|
14783
|
-
tool("skills.register", "Register a
|
|
14871
|
+
tool("skills.register", "Register a skill (echo-executor) for this server session", "skills", [
|
|
14784
14872
|
param("name", "string", "Skill name"),
|
|
14785
|
-
param("description", "string", "Skill description"),
|
|
14786
|
-
param("
|
|
14873
|
+
param("description", "string", "Skill description", false, ""),
|
|
14874
|
+
param("triggers", "array", "Trigger keywords", false)
|
|
14787
14875
|
], async (params) => {
|
|
14788
14876
|
try {
|
|
14789
|
-
const
|
|
14790
|
-
const
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
|
|
14794
|
-
|
|
14795
|
-
|
|
14877
|
+
const mgr = await getSkillManager();
|
|
14878
|
+
const name = params["name"] ?? "skill";
|
|
14879
|
+
const skill = mgr.loadFromMetadata({
|
|
14880
|
+
name,
|
|
14881
|
+
version: "1.0.0",
|
|
14882
|
+
description: params["description"] ?? "",
|
|
14883
|
+
triggers: params["triggers"] ?? []
|
|
14884
|
+
}, async (input) => ({ skill: name, output: input }));
|
|
14885
|
+
return ok({ id: skill.id, name, registered: true });
|
|
14796
14886
|
} catch {
|
|
14797
|
-
return
|
|
14887
|
+
return fail("Skill-manager package not available");
|
|
14798
14888
|
}
|
|
14799
14889
|
}),
|
|
14800
|
-
tool("skills.execute", "Execute a
|
|
14890
|
+
tool("skills.execute", "Execute a session skill by name (must be registered in this session first)", "skills", [
|
|
14801
14891
|
param("name", "string", "Skill name to execute"),
|
|
14802
14892
|
param("input", "object", "Skill input parameters", false, {})
|
|
14803
14893
|
], async (params) => {
|
|
14804
14894
|
try {
|
|
14805
|
-
const
|
|
14806
|
-
const
|
|
14807
|
-
|
|
14895
|
+
const mgr = await getSkillManager();
|
|
14896
|
+
const name = params["name"] ?? "";
|
|
14897
|
+
const match = mgr.getAvailableSkills().find((s) => s.metadata.name === name);
|
|
14898
|
+
if (!match)
|
|
14899
|
+
return fail(`Skill not registered in this session: ${name}`);
|
|
14900
|
+
const output = await match.execute(params["input"] ?? {});
|
|
14901
|
+
return ok({ executed: true, name, output });
|
|
14808
14902
|
} catch {
|
|
14809
|
-
return
|
|
14903
|
+
return fail("Skill-manager package not available");
|
|
14810
14904
|
}
|
|
14811
14905
|
})
|
|
14812
14906
|
];
|
|
@@ -14834,9 +14928,11 @@ function registerDefaultTools(server) {
|
|
|
14834
14928
|
server.registerBatch(category.tools);
|
|
14835
14929
|
}
|
|
14836
14930
|
}
|
|
14931
|
+
var _skillManager;
|
|
14837
14932
|
var init_catalog = __esm({
|
|
14838
14933
|
"../mcp-server/dist/catalog.js"() {
|
|
14839
14934
|
"use strict";
|
|
14935
|
+
_skillManager = null;
|
|
14840
14936
|
}
|
|
14841
14937
|
});
|
|
14842
14938
|
|