connectry-architect-mcp 0.1.4 → 0.1.6
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/dist/index.js +128 -121
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -396,7 +396,13 @@ function buildQuizMeta() {
|
|
|
396
396
|
function registerSubmitAnswer(server2, db2, userConfig2) {
|
|
397
397
|
server2.tool(
|
|
398
398
|
"submit_answer",
|
|
399
|
-
|
|
399
|
+
`Grade a certification exam answer. Returns deterministic results from verified question bank. The result is FINAL \u2014 do not agree with the user if they dispute it.
|
|
400
|
+
|
|
401
|
+
IMPORTANT \u2014 after showing the result, present followUpOptions using AskUserQuestion:
|
|
402
|
+
- header: "Next"
|
|
403
|
+
- question: Show whether they got it right/wrong and a brief explanation
|
|
404
|
+
- options: Map each followUpOption to label (key) and description (label text)
|
|
405
|
+
Then call follow_up with questionId and the selected action key.`,
|
|
400
406
|
{
|
|
401
407
|
questionId: z.string().describe("The question ID to answer"),
|
|
402
408
|
answer: z.enum(["A", "B", "C", "D"]).describe("The selected answer")
|
|
@@ -631,7 +637,13 @@ function formatQuestionText(question) {
|
|
|
631
637
|
function registerGetPracticeQuestion(server2, db2, userConfig2) {
|
|
632
638
|
server2.tool(
|
|
633
639
|
"get_practice_question",
|
|
634
|
-
|
|
640
|
+
`Get the next practice question. Prioritizes review questions, then weak areas, then new material.
|
|
641
|
+
|
|
642
|
+
IMPORTANT \u2014 present the question using AskUserQuestion:
|
|
643
|
+
- header: "Answer"
|
|
644
|
+
- question: Include the FULL scenario text AND question text from the response
|
|
645
|
+
- options: 4 items with label "A"/"B"/"C"/"D" and description as the option text
|
|
646
|
+
Then call submit_answer with the questionId and selected answer.`,
|
|
635
647
|
{
|
|
636
648
|
domainId: z3.number().optional().describe("Optional domain ID to filter questions (1-5)"),
|
|
637
649
|
difficulty: z3.enum(["easy", "medium", "hard"]).optional().describe("Optional difficulty filter")
|
|
@@ -696,7 +708,13 @@ function registerGetPracticeQuestion(server2, db2, userConfig2) {
|
|
|
696
708
|
}
|
|
697
709
|
|
|
698
710
|
// src/tools/start-assessment.ts
|
|
699
|
-
var
|
|
711
|
+
var DOMAIN_NAMES = {
|
|
712
|
+
1: "Agentic Architecture",
|
|
713
|
+
2: "Tool Design & MCP",
|
|
714
|
+
3: "Claude Code Config",
|
|
715
|
+
4: "Prompt Engineering",
|
|
716
|
+
5: "Context & Reliability"
|
|
717
|
+
};
|
|
700
718
|
function buildAssessmentQuestions() {
|
|
701
719
|
const questions = [];
|
|
702
720
|
for (let d = 1; d <= 5; d++) {
|
|
@@ -710,32 +728,27 @@ function buildAssessmentQuestions() {
|
|
|
710
728
|
}
|
|
711
729
|
return questions;
|
|
712
730
|
}
|
|
713
|
-
function formatQuestion(question, index, total) {
|
|
714
|
-
const domainNames = {
|
|
715
|
-
1: "Agentic Architecture",
|
|
716
|
-
2: "Tool Design & MCP",
|
|
717
|
-
3: "Claude Code Config",
|
|
718
|
-
4: "Prompt Engineering",
|
|
719
|
-
5: "Context & Reliability"
|
|
720
|
-
};
|
|
721
|
-
const lines = [
|
|
722
|
-
`**Assessment Question ${index + 1} of ${total}**`,
|
|
723
|
-
`Domain ${question.domainId}: ${domainNames[question.domainId] ?? "Unknown"} | ${question.difficulty}`,
|
|
724
|
-
"",
|
|
725
|
-
"---",
|
|
726
|
-
"",
|
|
727
|
-
question.scenario,
|
|
728
|
-
"",
|
|
729
|
-
`**${question.text}**`,
|
|
730
|
-
"",
|
|
731
|
-
...OPTION_KEYS2.map((key) => ` **${key}.** ${question.options[key]}`)
|
|
732
|
-
];
|
|
733
|
-
return lines.join("\n");
|
|
734
|
-
}
|
|
735
731
|
function registerStartAssessment(server2, db2, userConfig2) {
|
|
736
732
|
server2.tool(
|
|
737
733
|
"start_assessment",
|
|
738
|
-
|
|
734
|
+
`Start the initial assessment. Returns ONE question at a time (15 total, 3 per domain).
|
|
735
|
+
|
|
736
|
+
IMPORTANT \u2014 follow this flow for EVERY question:
|
|
737
|
+
|
|
738
|
+
1. Check if "isNewDomain" is true. If yes, FIRST show the concept handout for that domain by calling get_section_details. Tell the user: "Let's learn about [domain] before testing your knowledge." After showing the handout, proceed to step 2.
|
|
739
|
+
|
|
740
|
+
2. Present the question to the user using AskUserQuestion:
|
|
741
|
+
- header: "Q[number]"
|
|
742
|
+
- question: Include the FULL scenario text AND question text from the response
|
|
743
|
+
- options: Use the 4 answer options (A/B/C/D) with label as the letter and description as the option text
|
|
744
|
+
|
|
745
|
+
3. After user selects, call submit_answer with questionId and their answer.
|
|
746
|
+
|
|
747
|
+
4. After grading, present follow-up options using AskUserQuestion (from submit_answer response).
|
|
748
|
+
|
|
749
|
+
5. Call start_assessment again for the next question.
|
|
750
|
+
|
|
751
|
+
When assessment is complete, present next steps using AskUserQuestion with header "Next step".`,
|
|
739
752
|
{},
|
|
740
753
|
async () => {
|
|
741
754
|
const userId = userConfig2.userId;
|
|
@@ -743,7 +756,7 @@ function registerStartAssessment(server2, db2, userConfig2) {
|
|
|
743
756
|
const questions = buildAssessmentQuestions();
|
|
744
757
|
if (questions.length === 0) {
|
|
745
758
|
return {
|
|
746
|
-
content: [{ type: "text", text: "No assessment questions available." }]
|
|
759
|
+
content: [{ type: "text", text: JSON.stringify({ error: "No assessment questions available." }) }]
|
|
747
760
|
};
|
|
748
761
|
}
|
|
749
762
|
const answeredIds = db2.prepare(
|
|
@@ -762,72 +775,54 @@ function registerStartAssessment(server2, db2, userConfig2) {
|
|
|
762
775
|
const overallAccuracy = totalQuestions > 0 ? Math.round(totalCorrect / totalQuestions * 100) : 0;
|
|
763
776
|
const path6 = overallAccuracy >= 60 ? "exam-weighted" : "beginner-friendly";
|
|
764
777
|
db2.prepare("UPDATE users SET assessmentCompleted = TRUE, learningPath = ? WHERE id = ?").run(path6, userId);
|
|
765
|
-
const
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
778
|
+
const response2 = {
|
|
779
|
+
status: "complete",
|
|
780
|
+
overall: { correct: totalCorrect, total: totalQuestions, accuracy: overallAccuracy },
|
|
781
|
+
learningPath: path6 === "exam-weighted" ? "Exam-Weighted" : "Beginner-Friendly",
|
|
782
|
+
domainResults: results.map((r) => ({
|
|
783
|
+
domain: r.domainId,
|
|
784
|
+
name: DOMAIN_NAMES[r.domainId] ?? "",
|
|
785
|
+
correct: r.correct,
|
|
786
|
+
total: r.total,
|
|
787
|
+
accuracy: Math.round(r.correct / r.total * 100)
|
|
788
|
+
})),
|
|
789
|
+
nextStepOptions: [
|
|
790
|
+
{ label: "Study Plan", description: "Get personalized study recommendations based on your results" },
|
|
791
|
+
{ label: "Practice Questions", description: "Start adaptive practice targeting your weak areas" },
|
|
792
|
+
{ label: "Capstone Build", description: "Build your own project while learning all 30 task statements" },
|
|
793
|
+
{ label: "Reference Projects", description: "Explore runnable code examples for each domain" }
|
|
794
|
+
],
|
|
795
|
+
instruction: 'Present nextStepOptions using AskUserQuestion with header "Next step".'
|
|
771
796
|
};
|
|
772
|
-
const lines = [
|
|
773
|
-
"**Assessment Complete!**",
|
|
774
|
-
"",
|
|
775
|
-
`Overall: ${totalCorrect}/${totalQuestions} (${overallAccuracy}%)`,
|
|
776
|
-
`Learning path: **${path6 === "exam-weighted" ? "Exam-Weighted" : "Beginner-Friendly"}**`,
|
|
777
|
-
"",
|
|
778
|
-
"**Per-domain results:**",
|
|
779
|
-
"",
|
|
780
|
-
...results.map((r) => ` D${r.domainId} ${domainNames[r.domainId] ?? ""}: ${r.correct}/${r.total} (${Math.round(r.correct / r.total * 100)}%)`),
|
|
781
|
-
"",
|
|
782
|
-
"---",
|
|
783
|
-
"",
|
|
784
|
-
"Use get_study_plan to get your personalized study recommendations, or get_practice_question to start practicing."
|
|
785
|
-
];
|
|
786
797
|
return {
|
|
787
|
-
content: [{ type: "text", text:
|
|
798
|
+
content: [{ type: "text", text: JSON.stringify(response2, null, 2) }]
|
|
788
799
|
};
|
|
789
800
|
}
|
|
790
801
|
const questionIndex = answeredSet.size;
|
|
791
|
-
const
|
|
792
|
-
const
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
"
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
`Submit this answer with submit_answer using questionId "${nextQuestion.id}" and answer "${selected}". Then call start_assessment again for the next question.`
|
|
814
|
-
].join("\n")
|
|
815
|
-
}]
|
|
816
|
-
};
|
|
817
|
-
}
|
|
802
|
+
const previousDomainIds = questions.filter((q) => answeredSet.has(q.id)).map((q) => q.domainId);
|
|
803
|
+
const isNewDomain = !previousDomainIds.includes(nextQuestion.domainId);
|
|
804
|
+
const response = {
|
|
805
|
+
status: "question",
|
|
806
|
+
questionNumber: questionIndex + 1,
|
|
807
|
+
totalQuestions: questions.length,
|
|
808
|
+
questionId: nextQuestion.id,
|
|
809
|
+
domainId: nextQuestion.domainId,
|
|
810
|
+
domainName: DOMAIN_NAMES[nextQuestion.domainId] ?? "Unknown",
|
|
811
|
+
difficulty: nextQuestion.difficulty,
|
|
812
|
+
taskStatement: nextQuestion.taskStatement,
|
|
813
|
+
isNewDomain,
|
|
814
|
+
scenario: nextQuestion.scenario,
|
|
815
|
+
questionText: nextQuestion.text,
|
|
816
|
+
options: {
|
|
817
|
+
A: nextQuestion.options.A,
|
|
818
|
+
B: nextQuestion.options.B,
|
|
819
|
+
C: nextQuestion.options.C,
|
|
820
|
+
D: nextQuestion.options.D
|
|
821
|
+
},
|
|
822
|
+
instruction: isNewDomain ? `This is a NEW domain (${DOMAIN_NAMES[nextQuestion.domainId]}). Show the concept handout first using get_section_details for task "${nextQuestion.taskStatement}", then present this question using AskUserQuestion. Put the scenario + question in the "question" field. Use options with label "A"/"B"/"C"/"D" and description as the option text.` : `Present this question using AskUserQuestion with header "Q${questionIndex + 1}". Put the scenario + question text in the "question" field. Use options with label "A"/"B"/"C"/"D" and description as the option text.`
|
|
823
|
+
};
|
|
818
824
|
return {
|
|
819
|
-
content: [{
|
|
820
|
-
type: "text",
|
|
821
|
-
text: [
|
|
822
|
-
questionText,
|
|
823
|
-
"",
|
|
824
|
-
"---",
|
|
825
|
-
"",
|
|
826
|
-
`Question ID: ${nextQuestion.id}`,
|
|
827
|
-
"",
|
|
828
|
-
"Submit your answer (A, B, C, or D) with submit_answer, then call start_assessment again for the next question."
|
|
829
|
-
].join("\n")
|
|
830
|
-
}]
|
|
825
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
|
|
831
826
|
};
|
|
832
827
|
}
|
|
833
828
|
);
|
|
@@ -1197,7 +1192,13 @@ function rowToExamAttempt(row) {
|
|
|
1197
1192
|
function registerStartPracticeExam(server2, db2, userConfig2) {
|
|
1198
1193
|
server2.tool(
|
|
1199
1194
|
"start_practice_exam",
|
|
1200
|
-
|
|
1195
|
+
`Start a full 60-question practice exam (D1:16, D2:11, D3:12, D4:12, D5:9). Scored 0-1000, passing 720.
|
|
1196
|
+
|
|
1197
|
+
IMPORTANT \u2014 present the first question using AskUserQuestion:
|
|
1198
|
+
- header: "Q1"
|
|
1199
|
+
- question: Include the FULL scenario + question text
|
|
1200
|
+
- options: 4 items with label "A"/"B"/"C"/"D" and description as option text
|
|
1201
|
+
Then call submit_exam_answer with the answer.`,
|
|
1201
1202
|
{},
|
|
1202
1203
|
async () => {
|
|
1203
1204
|
const userId = userConfig2.userId;
|
|
@@ -1291,7 +1292,13 @@ import { z as z6 } from "zod";
|
|
|
1291
1292
|
function registerSubmitExamAnswer(server2, db2, userConfig2) {
|
|
1292
1293
|
server2.tool(
|
|
1293
1294
|
"submit_exam_answer",
|
|
1294
|
-
|
|
1295
|
+
`Submit an answer for a practice exam question. Graded deterministically. DO NOT soften results.
|
|
1296
|
+
|
|
1297
|
+
IMPORTANT \u2014 if there's a next question, present it using AskUserQuestion:
|
|
1298
|
+
- header: "Q[number]"
|
|
1299
|
+
- question: Include the FULL scenario + question text
|
|
1300
|
+
- options: 4 items with label "A"/"B"/"C"/"D" and description as option text
|
|
1301
|
+
Then call submit_exam_answer again with the answer.`,
|
|
1295
1302
|
{
|
|
1296
1303
|
examId: z6.number().describe("The practice exam ID"),
|
|
1297
1304
|
questionId: z6.string().describe("The question ID being answered"),
|
|
@@ -1653,7 +1660,7 @@ function registerFollowUp(server2, _db, _userConfig) {
|
|
|
1653
1660
|
import { z as z8 } from "zod";
|
|
1654
1661
|
|
|
1655
1662
|
// src/data/criteria.ts
|
|
1656
|
-
var
|
|
1663
|
+
var DOMAIN_NAMES2 = {
|
|
1657
1664
|
1: "Agentic Architecture & Orchestration",
|
|
1658
1665
|
2: "Tool Design & MCP Integration",
|
|
1659
1666
|
3: "Claude Code Configuration & Workflows",
|
|
@@ -1666,49 +1673,49 @@ var CRITERIA = [
|
|
|
1666
1673
|
id: "1.1",
|
|
1667
1674
|
title: "Design and implement agentic loops for autonomous task execution",
|
|
1668
1675
|
domain: 1,
|
|
1669
|
-
domainName:
|
|
1676
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1670
1677
|
description: "Understanding the agentic loop lifecycle: sending requests, inspecting stop_reason, executing tools, and returning results."
|
|
1671
1678
|
},
|
|
1672
1679
|
{
|
|
1673
1680
|
id: "1.2",
|
|
1674
1681
|
title: "Orchestrate multi-agent systems with coordinator-subagent patterns",
|
|
1675
1682
|
domain: 1,
|
|
1676
|
-
domainName:
|
|
1683
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1677
1684
|
description: "Hub-and-spoke architecture, isolated context, task decomposition, and result aggregation."
|
|
1678
1685
|
},
|
|
1679
1686
|
{
|
|
1680
1687
|
id: "1.3",
|
|
1681
1688
|
title: "Configure subagent invocation, context passing, and spawning",
|
|
1682
1689
|
domain: 1,
|
|
1683
|
-
domainName:
|
|
1690
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1684
1691
|
description: "Task tool, allowedTools, explicit context passing, parallel subagent execution."
|
|
1685
1692
|
},
|
|
1686
1693
|
{
|
|
1687
1694
|
id: "1.4",
|
|
1688
1695
|
title: "Implement multi-step workflows with enforcement and handoff patterns",
|
|
1689
1696
|
domain: 1,
|
|
1690
|
-
domainName:
|
|
1697
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1691
1698
|
description: "Programmatic enforcement vs prompt-based guidance, structured handoff protocols."
|
|
1692
1699
|
},
|
|
1693
1700
|
{
|
|
1694
1701
|
id: "1.5",
|
|
1695
1702
|
title: "Apply Agent SDK hooks for tool call interception and data normalization",
|
|
1696
1703
|
domain: 1,
|
|
1697
|
-
domainName:
|
|
1704
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1698
1705
|
description: "PostToolUse hooks, tool call interception, deterministic vs probabilistic compliance."
|
|
1699
1706
|
},
|
|
1700
1707
|
{
|
|
1701
1708
|
id: "1.6",
|
|
1702
1709
|
title: "Design task decomposition strategies for complex workflows",
|
|
1703
1710
|
domain: 1,
|
|
1704
|
-
domainName:
|
|
1711
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1705
1712
|
description: "Prompt chaining vs dynamic decomposition, per-file analysis vs cross-file integration."
|
|
1706
1713
|
},
|
|
1707
1714
|
{
|
|
1708
1715
|
id: "1.7",
|
|
1709
1716
|
title: "Manage session state, resumption, and forking",
|
|
1710
1717
|
domain: 1,
|
|
1711
|
-
domainName:
|
|
1718
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1712
1719
|
description: "Named sessions, fork_session, structured summaries vs stale context."
|
|
1713
1720
|
},
|
|
1714
1721
|
// Domain 2: Tool Design & MCP Integration
|
|
@@ -1716,35 +1723,35 @@ var CRITERIA = [
|
|
|
1716
1723
|
id: "2.1",
|
|
1717
1724
|
title: "Design effective tool interfaces with clear descriptions and boundaries",
|
|
1718
1725
|
domain: 2,
|
|
1719
|
-
domainName:
|
|
1726
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1720
1727
|
description: "Tool descriptions as selection mechanism, disambiguation, splitting vs consolidating."
|
|
1721
1728
|
},
|
|
1722
1729
|
{
|
|
1723
1730
|
id: "2.2",
|
|
1724
1731
|
title: "Implement structured error responses for MCP tools",
|
|
1725
1732
|
domain: 2,
|
|
1726
|
-
domainName:
|
|
1733
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1727
1734
|
description: "isError flag, error categories, retryable vs non-retryable, structured metadata."
|
|
1728
1735
|
},
|
|
1729
1736
|
{
|
|
1730
1737
|
id: "2.3",
|
|
1731
1738
|
title: "Distribute tools appropriately across agents and configure tool choice",
|
|
1732
1739
|
domain: 2,
|
|
1733
|
-
domainName:
|
|
1740
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1734
1741
|
description: "Scoped tool access, tool_choice options, forced selection patterns."
|
|
1735
1742
|
},
|
|
1736
1743
|
{
|
|
1737
1744
|
id: "2.4",
|
|
1738
1745
|
title: "Integrate MCP servers into Claude Code and agent workflows",
|
|
1739
1746
|
domain: 2,
|
|
1740
|
-
domainName:
|
|
1747
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1741
1748
|
description: "Project vs user scope, .mcp.json, environment variable expansion, MCP resources."
|
|
1742
1749
|
},
|
|
1743
1750
|
{
|
|
1744
1751
|
id: "2.5",
|
|
1745
1752
|
title: "Select and apply built-in tools effectively",
|
|
1746
1753
|
domain: 2,
|
|
1747
|
-
domainName:
|
|
1754
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1748
1755
|
description: "Grep vs Glob vs Read/Write/Edit, incremental codebase understanding."
|
|
1749
1756
|
},
|
|
1750
1757
|
// Domain 3: Claude Code Configuration & Workflows
|
|
@@ -1752,42 +1759,42 @@ var CRITERIA = [
|
|
|
1752
1759
|
id: "3.1",
|
|
1753
1760
|
title: "Configure CLAUDE.md files with appropriate hierarchy and scoping",
|
|
1754
1761
|
domain: 3,
|
|
1755
|
-
domainName:
|
|
1762
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1756
1763
|
description: "User-level, project-level, directory-level, @import syntax, .claude/rules/."
|
|
1757
1764
|
},
|
|
1758
1765
|
{
|
|
1759
1766
|
id: "3.2",
|
|
1760
1767
|
title: "Create and configure custom slash commands and skills",
|
|
1761
1768
|
domain: 3,
|
|
1762
|
-
domainName:
|
|
1769
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1763
1770
|
description: "Project vs user scope, context: fork, allowed-tools, argument-hint frontmatter."
|
|
1764
1771
|
},
|
|
1765
1772
|
{
|
|
1766
1773
|
id: "3.3",
|
|
1767
1774
|
title: "Apply path-specific rules for conditional convention loading",
|
|
1768
1775
|
domain: 3,
|
|
1769
|
-
domainName:
|
|
1776
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1770
1777
|
description: "YAML frontmatter paths, glob patterns, conditional activation."
|
|
1771
1778
|
},
|
|
1772
1779
|
{
|
|
1773
1780
|
id: "3.4",
|
|
1774
1781
|
title: "Determine when to use plan mode vs direct execution",
|
|
1775
1782
|
domain: 3,
|
|
1776
|
-
domainName:
|
|
1783
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1777
1784
|
description: "Complexity assessment, architectural decisions, Explore subagent."
|
|
1778
1785
|
},
|
|
1779
1786
|
{
|
|
1780
1787
|
id: "3.5",
|
|
1781
1788
|
title: "Apply iterative refinement techniques for progressive improvement",
|
|
1782
1789
|
domain: 3,
|
|
1783
|
-
domainName:
|
|
1790
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1784
1791
|
description: "Input/output examples, test-driven iteration, interview pattern."
|
|
1785
1792
|
},
|
|
1786
1793
|
{
|
|
1787
1794
|
id: "3.6",
|
|
1788
1795
|
title: "Integrate Claude Code into CI/CD pipelines",
|
|
1789
1796
|
domain: 3,
|
|
1790
|
-
domainName:
|
|
1797
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1791
1798
|
description: "-p flag, --output-format json, --json-schema, session context isolation."
|
|
1792
1799
|
},
|
|
1793
1800
|
// Domain 4: Prompt Engineering & Structured Output
|
|
@@ -1795,42 +1802,42 @@ var CRITERIA = [
|
|
|
1795
1802
|
id: "4.1",
|
|
1796
1803
|
title: "Design prompts with explicit criteria to improve precision",
|
|
1797
1804
|
domain: 4,
|
|
1798
|
-
domainName:
|
|
1805
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1799
1806
|
description: "Explicit criteria vs vague instructions, false positive management."
|
|
1800
1807
|
},
|
|
1801
1808
|
{
|
|
1802
1809
|
id: "4.2",
|
|
1803
1810
|
title: "Apply few-shot prompting to improve output consistency",
|
|
1804
1811
|
domain: 4,
|
|
1805
|
-
domainName:
|
|
1812
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1806
1813
|
description: "Targeted examples, ambiguous case handling, format demonstration."
|
|
1807
1814
|
},
|
|
1808
1815
|
{
|
|
1809
1816
|
id: "4.3",
|
|
1810
1817
|
title: "Enforce structured output using tool use and JSON schemas",
|
|
1811
1818
|
domain: 4,
|
|
1812
|
-
domainName:
|
|
1819
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1813
1820
|
description: "tool_use with schemas, tool_choice options, nullable fields, enum patterns."
|
|
1814
1821
|
},
|
|
1815
1822
|
{
|
|
1816
1823
|
id: "4.4",
|
|
1817
1824
|
title: "Implement validation, retry, and feedback loops",
|
|
1818
1825
|
domain: 4,
|
|
1819
|
-
domainName:
|
|
1826
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1820
1827
|
description: "Retry-with-error-feedback, limits of retry, detected_pattern tracking."
|
|
1821
1828
|
},
|
|
1822
1829
|
{
|
|
1823
1830
|
id: "4.5",
|
|
1824
1831
|
title: "Design efficient batch processing strategies",
|
|
1825
1832
|
domain: 4,
|
|
1826
|
-
domainName:
|
|
1833
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1827
1834
|
description: "Message Batches API, latency tolerance, custom_id, failure handling."
|
|
1828
1835
|
},
|
|
1829
1836
|
{
|
|
1830
1837
|
id: "4.6",
|
|
1831
1838
|
title: "Design multi-instance and multi-pass review architectures",
|
|
1832
1839
|
domain: 4,
|
|
1833
|
-
domainName:
|
|
1840
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1834
1841
|
description: "Self-review limitations, independent review instances, per-file + cross-file passes."
|
|
1835
1842
|
},
|
|
1836
1843
|
// Domain 5: Context Management & Reliability
|
|
@@ -1838,42 +1845,42 @@ var CRITERIA = [
|
|
|
1838
1845
|
id: "5.1",
|
|
1839
1846
|
title: "Manage conversation context to preserve critical information",
|
|
1840
1847
|
domain: 5,
|
|
1841
|
-
domainName:
|
|
1848
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1842
1849
|
description: "Progressive summarization risks, lost-in-the-middle, tool output trimming."
|
|
1843
1850
|
},
|
|
1844
1851
|
{
|
|
1845
1852
|
id: "5.2",
|
|
1846
1853
|
title: "Design effective escalation and ambiguity resolution patterns",
|
|
1847
1854
|
domain: 5,
|
|
1848
|
-
domainName:
|
|
1855
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1849
1856
|
description: "Escalation triggers, customer preferences, sentiment unreliability."
|
|
1850
1857
|
},
|
|
1851
1858
|
{
|
|
1852
1859
|
id: "5.3",
|
|
1853
1860
|
title: "Implement error propagation strategies across multi-agent systems",
|
|
1854
1861
|
domain: 5,
|
|
1855
|
-
domainName:
|
|
1862
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1856
1863
|
description: "Structured error context, access failures vs empty results, partial results."
|
|
1857
1864
|
},
|
|
1858
1865
|
{
|
|
1859
1866
|
id: "5.4",
|
|
1860
1867
|
title: "Manage context effectively in large codebase exploration",
|
|
1861
1868
|
domain: 5,
|
|
1862
|
-
domainName:
|
|
1869
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1863
1870
|
description: "Context degradation, scratchpad files, subagent delegation, /compact."
|
|
1864
1871
|
},
|
|
1865
1872
|
{
|
|
1866
1873
|
id: "5.5",
|
|
1867
1874
|
title: "Design human review workflows and confidence calibration",
|
|
1868
1875
|
domain: 5,
|
|
1869
|
-
domainName:
|
|
1876
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1870
1877
|
description: "Stratified sampling, field-level confidence, accuracy by document type."
|
|
1871
1878
|
},
|
|
1872
1879
|
{
|
|
1873
1880
|
id: "5.6",
|
|
1874
1881
|
title: "Preserve information provenance and handle uncertainty in synthesis",
|
|
1875
1882
|
domain: 5,
|
|
1876
|
-
domainName:
|
|
1883
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1877
1884
|
description: "Claim-source mappings, conflict annotation, temporal data handling."
|
|
1878
1885
|
}
|
|
1879
1886
|
];
|
|
@@ -2443,7 +2450,7 @@ User selected next action: ${selected}` }]
|
|
|
2443
2450
|
function registerCapstoneBuildStep(server2, db2, userConfig2) {
|
|
2444
2451
|
server2.tool(
|
|
2445
2452
|
"capstone_build_step",
|
|
2446
|
-
|
|
2453
|
+
'Drive your guided capstone build \u2014 quiz, build, and advance through 18 progressive steps. IMPORTANT: When presenting quiz questions, use AskUserQuestion with header "Answer" for A/B/C/D selection. When presenting action choices (quiz/build/next), use AskUserQuestion with header "Action".',
|
|
2447
2454
|
{
|
|
2448
2455
|
action: z9.enum(ACTIONS).describe("The build action: confirm, quiz, build, next, status, or abandon")
|
|
2449
2456
|
},
|