connectry-architect-mcp 0.1.5 → 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 +127 -124
- 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,76 +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
|
-
'INSTRUCTION: Present the following options to the user using AskUserQuestion with header "Next step":',
|
|
785
|
-
'- "Study Plan" \u2014 Get personalized study recommendations based on your results',
|
|
786
|
-
'- "Practice Questions" \u2014 Start adaptive practice targeting your weak areas',
|
|
787
|
-
'- "Capstone Build" \u2014 Build your own project while learning all 30 task statements',
|
|
788
|
-
'- "Reference Projects" \u2014 Explore runnable code examples for each domain'
|
|
789
|
-
];
|
|
790
797
|
return {
|
|
791
|
-
content: [{ type: "text", text:
|
|
798
|
+
content: [{ type: "text", text: JSON.stringify(response2, null, 2) }]
|
|
792
799
|
};
|
|
793
800
|
}
|
|
794
801
|
const questionIndex = answeredSet.size;
|
|
795
|
-
const
|
|
796
|
-
const
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
"
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
`Submit this answer with submit_answer using questionId "${nextQuestion.id}" and answer "${selected}". Then call start_assessment again for the next question.`
|
|
818
|
-
].join("\n")
|
|
819
|
-
}]
|
|
820
|
-
};
|
|
821
|
-
}
|
|
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
|
+
};
|
|
822
824
|
return {
|
|
823
|
-
content: [{
|
|
824
|
-
type: "text",
|
|
825
|
-
text: [
|
|
826
|
-
questionText,
|
|
827
|
-
"",
|
|
828
|
-
"---",
|
|
829
|
-
"",
|
|
830
|
-
`Question ID: ${nextQuestion.id}`,
|
|
831
|
-
"",
|
|
832
|
-
"Submit your answer (A, B, C, or D) with submit_answer, then call start_assessment again for the next question."
|
|
833
|
-
].join("\n")
|
|
834
|
-
}]
|
|
825
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
|
|
835
826
|
};
|
|
836
827
|
}
|
|
837
828
|
);
|
|
@@ -1201,7 +1192,13 @@ function rowToExamAttempt(row) {
|
|
|
1201
1192
|
function registerStartPracticeExam(server2, db2, userConfig2) {
|
|
1202
1193
|
server2.tool(
|
|
1203
1194
|
"start_practice_exam",
|
|
1204
|
-
|
|
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.`,
|
|
1205
1202
|
{},
|
|
1206
1203
|
async () => {
|
|
1207
1204
|
const userId = userConfig2.userId;
|
|
@@ -1295,7 +1292,13 @@ import { z as z6 } from "zod";
|
|
|
1295
1292
|
function registerSubmitExamAnswer(server2, db2, userConfig2) {
|
|
1296
1293
|
server2.tool(
|
|
1297
1294
|
"submit_exam_answer",
|
|
1298
|
-
|
|
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.`,
|
|
1299
1302
|
{
|
|
1300
1303
|
examId: z6.number().describe("The practice exam ID"),
|
|
1301
1304
|
questionId: z6.string().describe("The question ID being answered"),
|
|
@@ -1657,7 +1660,7 @@ function registerFollowUp(server2, _db, _userConfig) {
|
|
|
1657
1660
|
import { z as z8 } from "zod";
|
|
1658
1661
|
|
|
1659
1662
|
// src/data/criteria.ts
|
|
1660
|
-
var
|
|
1663
|
+
var DOMAIN_NAMES2 = {
|
|
1661
1664
|
1: "Agentic Architecture & Orchestration",
|
|
1662
1665
|
2: "Tool Design & MCP Integration",
|
|
1663
1666
|
3: "Claude Code Configuration & Workflows",
|
|
@@ -1670,49 +1673,49 @@ var CRITERIA = [
|
|
|
1670
1673
|
id: "1.1",
|
|
1671
1674
|
title: "Design and implement agentic loops for autonomous task execution",
|
|
1672
1675
|
domain: 1,
|
|
1673
|
-
domainName:
|
|
1676
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1674
1677
|
description: "Understanding the agentic loop lifecycle: sending requests, inspecting stop_reason, executing tools, and returning results."
|
|
1675
1678
|
},
|
|
1676
1679
|
{
|
|
1677
1680
|
id: "1.2",
|
|
1678
1681
|
title: "Orchestrate multi-agent systems with coordinator-subagent patterns",
|
|
1679
1682
|
domain: 1,
|
|
1680
|
-
domainName:
|
|
1683
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1681
1684
|
description: "Hub-and-spoke architecture, isolated context, task decomposition, and result aggregation."
|
|
1682
1685
|
},
|
|
1683
1686
|
{
|
|
1684
1687
|
id: "1.3",
|
|
1685
1688
|
title: "Configure subagent invocation, context passing, and spawning",
|
|
1686
1689
|
domain: 1,
|
|
1687
|
-
domainName:
|
|
1690
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1688
1691
|
description: "Task tool, allowedTools, explicit context passing, parallel subagent execution."
|
|
1689
1692
|
},
|
|
1690
1693
|
{
|
|
1691
1694
|
id: "1.4",
|
|
1692
1695
|
title: "Implement multi-step workflows with enforcement and handoff patterns",
|
|
1693
1696
|
domain: 1,
|
|
1694
|
-
domainName:
|
|
1697
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1695
1698
|
description: "Programmatic enforcement vs prompt-based guidance, structured handoff protocols."
|
|
1696
1699
|
},
|
|
1697
1700
|
{
|
|
1698
1701
|
id: "1.5",
|
|
1699
1702
|
title: "Apply Agent SDK hooks for tool call interception and data normalization",
|
|
1700
1703
|
domain: 1,
|
|
1701
|
-
domainName:
|
|
1704
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1702
1705
|
description: "PostToolUse hooks, tool call interception, deterministic vs probabilistic compliance."
|
|
1703
1706
|
},
|
|
1704
1707
|
{
|
|
1705
1708
|
id: "1.6",
|
|
1706
1709
|
title: "Design task decomposition strategies for complex workflows",
|
|
1707
1710
|
domain: 1,
|
|
1708
|
-
domainName:
|
|
1711
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1709
1712
|
description: "Prompt chaining vs dynamic decomposition, per-file analysis vs cross-file integration."
|
|
1710
1713
|
},
|
|
1711
1714
|
{
|
|
1712
1715
|
id: "1.7",
|
|
1713
1716
|
title: "Manage session state, resumption, and forking",
|
|
1714
1717
|
domain: 1,
|
|
1715
|
-
domainName:
|
|
1718
|
+
domainName: DOMAIN_NAMES2[1],
|
|
1716
1719
|
description: "Named sessions, fork_session, structured summaries vs stale context."
|
|
1717
1720
|
},
|
|
1718
1721
|
// Domain 2: Tool Design & MCP Integration
|
|
@@ -1720,35 +1723,35 @@ var CRITERIA = [
|
|
|
1720
1723
|
id: "2.1",
|
|
1721
1724
|
title: "Design effective tool interfaces with clear descriptions and boundaries",
|
|
1722
1725
|
domain: 2,
|
|
1723
|
-
domainName:
|
|
1726
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1724
1727
|
description: "Tool descriptions as selection mechanism, disambiguation, splitting vs consolidating."
|
|
1725
1728
|
},
|
|
1726
1729
|
{
|
|
1727
1730
|
id: "2.2",
|
|
1728
1731
|
title: "Implement structured error responses for MCP tools",
|
|
1729
1732
|
domain: 2,
|
|
1730
|
-
domainName:
|
|
1733
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1731
1734
|
description: "isError flag, error categories, retryable vs non-retryable, structured metadata."
|
|
1732
1735
|
},
|
|
1733
1736
|
{
|
|
1734
1737
|
id: "2.3",
|
|
1735
1738
|
title: "Distribute tools appropriately across agents and configure tool choice",
|
|
1736
1739
|
domain: 2,
|
|
1737
|
-
domainName:
|
|
1740
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1738
1741
|
description: "Scoped tool access, tool_choice options, forced selection patterns."
|
|
1739
1742
|
},
|
|
1740
1743
|
{
|
|
1741
1744
|
id: "2.4",
|
|
1742
1745
|
title: "Integrate MCP servers into Claude Code and agent workflows",
|
|
1743
1746
|
domain: 2,
|
|
1744
|
-
domainName:
|
|
1747
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1745
1748
|
description: "Project vs user scope, .mcp.json, environment variable expansion, MCP resources."
|
|
1746
1749
|
},
|
|
1747
1750
|
{
|
|
1748
1751
|
id: "2.5",
|
|
1749
1752
|
title: "Select and apply built-in tools effectively",
|
|
1750
1753
|
domain: 2,
|
|
1751
|
-
domainName:
|
|
1754
|
+
domainName: DOMAIN_NAMES2[2],
|
|
1752
1755
|
description: "Grep vs Glob vs Read/Write/Edit, incremental codebase understanding."
|
|
1753
1756
|
},
|
|
1754
1757
|
// Domain 3: Claude Code Configuration & Workflows
|
|
@@ -1756,42 +1759,42 @@ var CRITERIA = [
|
|
|
1756
1759
|
id: "3.1",
|
|
1757
1760
|
title: "Configure CLAUDE.md files with appropriate hierarchy and scoping",
|
|
1758
1761
|
domain: 3,
|
|
1759
|
-
domainName:
|
|
1762
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1760
1763
|
description: "User-level, project-level, directory-level, @import syntax, .claude/rules/."
|
|
1761
1764
|
},
|
|
1762
1765
|
{
|
|
1763
1766
|
id: "3.2",
|
|
1764
1767
|
title: "Create and configure custom slash commands and skills",
|
|
1765
1768
|
domain: 3,
|
|
1766
|
-
domainName:
|
|
1769
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1767
1770
|
description: "Project vs user scope, context: fork, allowed-tools, argument-hint frontmatter."
|
|
1768
1771
|
},
|
|
1769
1772
|
{
|
|
1770
1773
|
id: "3.3",
|
|
1771
1774
|
title: "Apply path-specific rules for conditional convention loading",
|
|
1772
1775
|
domain: 3,
|
|
1773
|
-
domainName:
|
|
1776
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1774
1777
|
description: "YAML frontmatter paths, glob patterns, conditional activation."
|
|
1775
1778
|
},
|
|
1776
1779
|
{
|
|
1777
1780
|
id: "3.4",
|
|
1778
1781
|
title: "Determine when to use plan mode vs direct execution",
|
|
1779
1782
|
domain: 3,
|
|
1780
|
-
domainName:
|
|
1783
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1781
1784
|
description: "Complexity assessment, architectural decisions, Explore subagent."
|
|
1782
1785
|
},
|
|
1783
1786
|
{
|
|
1784
1787
|
id: "3.5",
|
|
1785
1788
|
title: "Apply iterative refinement techniques for progressive improvement",
|
|
1786
1789
|
domain: 3,
|
|
1787
|
-
domainName:
|
|
1790
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1788
1791
|
description: "Input/output examples, test-driven iteration, interview pattern."
|
|
1789
1792
|
},
|
|
1790
1793
|
{
|
|
1791
1794
|
id: "3.6",
|
|
1792
1795
|
title: "Integrate Claude Code into CI/CD pipelines",
|
|
1793
1796
|
domain: 3,
|
|
1794
|
-
domainName:
|
|
1797
|
+
domainName: DOMAIN_NAMES2[3],
|
|
1795
1798
|
description: "-p flag, --output-format json, --json-schema, session context isolation."
|
|
1796
1799
|
},
|
|
1797
1800
|
// Domain 4: Prompt Engineering & Structured Output
|
|
@@ -1799,42 +1802,42 @@ var CRITERIA = [
|
|
|
1799
1802
|
id: "4.1",
|
|
1800
1803
|
title: "Design prompts with explicit criteria to improve precision",
|
|
1801
1804
|
domain: 4,
|
|
1802
|
-
domainName:
|
|
1805
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1803
1806
|
description: "Explicit criteria vs vague instructions, false positive management."
|
|
1804
1807
|
},
|
|
1805
1808
|
{
|
|
1806
1809
|
id: "4.2",
|
|
1807
1810
|
title: "Apply few-shot prompting to improve output consistency",
|
|
1808
1811
|
domain: 4,
|
|
1809
|
-
domainName:
|
|
1812
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1810
1813
|
description: "Targeted examples, ambiguous case handling, format demonstration."
|
|
1811
1814
|
},
|
|
1812
1815
|
{
|
|
1813
1816
|
id: "4.3",
|
|
1814
1817
|
title: "Enforce structured output using tool use and JSON schemas",
|
|
1815
1818
|
domain: 4,
|
|
1816
|
-
domainName:
|
|
1819
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1817
1820
|
description: "tool_use with schemas, tool_choice options, nullable fields, enum patterns."
|
|
1818
1821
|
},
|
|
1819
1822
|
{
|
|
1820
1823
|
id: "4.4",
|
|
1821
1824
|
title: "Implement validation, retry, and feedback loops",
|
|
1822
1825
|
domain: 4,
|
|
1823
|
-
domainName:
|
|
1826
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1824
1827
|
description: "Retry-with-error-feedback, limits of retry, detected_pattern tracking."
|
|
1825
1828
|
},
|
|
1826
1829
|
{
|
|
1827
1830
|
id: "4.5",
|
|
1828
1831
|
title: "Design efficient batch processing strategies",
|
|
1829
1832
|
domain: 4,
|
|
1830
|
-
domainName:
|
|
1833
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1831
1834
|
description: "Message Batches API, latency tolerance, custom_id, failure handling."
|
|
1832
1835
|
},
|
|
1833
1836
|
{
|
|
1834
1837
|
id: "4.6",
|
|
1835
1838
|
title: "Design multi-instance and multi-pass review architectures",
|
|
1836
1839
|
domain: 4,
|
|
1837
|
-
domainName:
|
|
1840
|
+
domainName: DOMAIN_NAMES2[4],
|
|
1838
1841
|
description: "Self-review limitations, independent review instances, per-file + cross-file passes."
|
|
1839
1842
|
},
|
|
1840
1843
|
// Domain 5: Context Management & Reliability
|
|
@@ -1842,42 +1845,42 @@ var CRITERIA = [
|
|
|
1842
1845
|
id: "5.1",
|
|
1843
1846
|
title: "Manage conversation context to preserve critical information",
|
|
1844
1847
|
domain: 5,
|
|
1845
|
-
domainName:
|
|
1848
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1846
1849
|
description: "Progressive summarization risks, lost-in-the-middle, tool output trimming."
|
|
1847
1850
|
},
|
|
1848
1851
|
{
|
|
1849
1852
|
id: "5.2",
|
|
1850
1853
|
title: "Design effective escalation and ambiguity resolution patterns",
|
|
1851
1854
|
domain: 5,
|
|
1852
|
-
domainName:
|
|
1855
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1853
1856
|
description: "Escalation triggers, customer preferences, sentiment unreliability."
|
|
1854
1857
|
},
|
|
1855
1858
|
{
|
|
1856
1859
|
id: "5.3",
|
|
1857
1860
|
title: "Implement error propagation strategies across multi-agent systems",
|
|
1858
1861
|
domain: 5,
|
|
1859
|
-
domainName:
|
|
1862
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1860
1863
|
description: "Structured error context, access failures vs empty results, partial results."
|
|
1861
1864
|
},
|
|
1862
1865
|
{
|
|
1863
1866
|
id: "5.4",
|
|
1864
1867
|
title: "Manage context effectively in large codebase exploration",
|
|
1865
1868
|
domain: 5,
|
|
1866
|
-
domainName:
|
|
1869
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1867
1870
|
description: "Context degradation, scratchpad files, subagent delegation, /compact."
|
|
1868
1871
|
},
|
|
1869
1872
|
{
|
|
1870
1873
|
id: "5.5",
|
|
1871
1874
|
title: "Design human review workflows and confidence calibration",
|
|
1872
1875
|
domain: 5,
|
|
1873
|
-
domainName:
|
|
1876
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1874
1877
|
description: "Stratified sampling, field-level confidence, accuracy by document type."
|
|
1875
1878
|
},
|
|
1876
1879
|
{
|
|
1877
1880
|
id: "5.6",
|
|
1878
1881
|
title: "Preserve information provenance and handle uncertainty in synthesis",
|
|
1879
1882
|
domain: 5,
|
|
1880
|
-
domainName:
|
|
1883
|
+
domainName: DOMAIN_NAMES2[5],
|
|
1881
1884
|
description: "Claim-source mappings, conflict annotation, temporal data handling."
|
|
1882
1885
|
}
|
|
1883
1886
|
];
|