@ksm0709/context 0.0.23 → 0.0.26
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/cli/index.js +4 -3
- package/dist/index.js +4 -3
- package/dist/mcp.js +74 -39
- package/dist/omx/index.mjs +12 -6
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -27,7 +27,7 @@ function resolveContextDir(projectDir) {
|
|
|
27
27
|
// package.json
|
|
28
28
|
var package_default = {
|
|
29
29
|
name: "@ksm0709/context",
|
|
30
|
-
version: "0.0.
|
|
30
|
+
version: "0.0.26",
|
|
31
31
|
author: {
|
|
32
32
|
name: "TaehoKang",
|
|
33
33
|
email: "ksm07091@gmail.com"
|
|
@@ -318,13 +318,14 @@ turn_id={{turnId}}
|
|
|
318
318
|
`;
|
|
319
319
|
var DEFAULT_DAILY_NOTE_GUIDE = `# \uB370\uC77C\uB9AC \uB178\uD2B8 \uAE30\uB85D \uAC00\uC774\uB4DC
|
|
320
320
|
|
|
321
|
-
- [ ] \`
|
|
321
|
+
- [ ] \`context-mcp_append_daily_note\` \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC5EC \uAE30\uB85D\uC744 \uCD94\uAC00\uD558\uC138\uC694.
|
|
322
322
|
- [ ] **\uC8FC\uC758**: \uB370\uC77C\uB9AC \uB178\uD2B8\uC758 \uAE30\uC874 \uB0B4\uC6A9\uC740 \uC808\uB300 \uC218\uC815\uD558\uAC70\uB098 \uC0AD\uC81C\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
323
|
-
- [ ] \
|
|
323
|
+
- [ ] \uAE30\uB85D\uC740 \uB2E4\uC74C\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uCD94\uAC00\uB429\uB2C8\uB2E4:
|
|
324
324
|
\`[{{currentTimestamp}}] <\uAE30\uC5B5 \uD560 \uB0B4\uC6A9>\`
|
|
325
325
|
- [ ] \`<\uAE30\uC5B5 \uD560 \uB0B4\uC6A9>\`\uC5D0\uB294 \uC644\uBCBD\uD55C \uCEE8\uD14D\uC2A4\uD2B8 \uC778\uACC4\uB97C \uC704\uD574 \uC624\uB298 \uC644\uB8CC\uD55C \uD575\uC2EC \uC791\uC5C5 \uC694\uC57D, \uBBF8\uD574\uACB0 \uC774\uC288(TODO), \uC911\uC694 \uBA54\uBAA8, \uC9C0\uC2DD \uB178\uD2B8 \`[[wikilink]]\` \uB4F1\uC744 \uD3EC\uD568\uD558\uC138\uC694.`;
|
|
326
326
|
var DEFAULT_NOTE_GUIDE = `# \uC9C0\uC2DD \uB178\uD2B8 \uC791\uC131 \uBC0F \uAD00\uB9AC \uAC00\uC774\uB4DC
|
|
327
327
|
|
|
328
|
+
- [ ] **\uB178\uD2B8 \uC0DD\uC131**: \`context-mcp_create_knowledge_note\` \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC5EC \uC0DD\uC131\uD558\uC138\uC694.
|
|
328
329
|
- [ ] \uC81C\uD154\uCE74\uC2A4\uD150(Zettelkasten) 3\uB300 \uC6D0\uCE59 \uC900\uC218:
|
|
329
330
|
- [ ] \uC6D0\uC790\uC131: \uD55C \uB178\uD2B8\uB2F9 \uD55C \uC8FC\uC81C
|
|
330
331
|
- [ ] \uC5F0\uACB0: \uACE0\uB9BD\uB41C \uB178\uD2B8 \uBC29\uC9C0
|
package/dist/index.js
CHANGED
|
@@ -25,7 +25,7 @@ import { join as join2 } from "path";
|
|
|
25
25
|
// package.json
|
|
26
26
|
var package_default = {
|
|
27
27
|
name: "@ksm0709/context",
|
|
28
|
-
version: "0.0.
|
|
28
|
+
version: "0.0.26",
|
|
29
29
|
author: {
|
|
30
30
|
name: "TaehoKang",
|
|
31
31
|
email: "ksm07091@gmail.com"
|
|
@@ -316,13 +316,14 @@ turn_id={{turnId}}
|
|
|
316
316
|
`;
|
|
317
317
|
var DEFAULT_DAILY_NOTE_GUIDE = `# \uB370\uC77C\uB9AC \uB178\uD2B8 \uAE30\uB85D \uAC00\uC774\uB4DC
|
|
318
318
|
|
|
319
|
-
- [ ] \`
|
|
319
|
+
- [ ] \`context-mcp_append_daily_note\` \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC5EC \uAE30\uB85D\uC744 \uCD94\uAC00\uD558\uC138\uC694.
|
|
320
320
|
- [ ] **\uC8FC\uC758**: \uB370\uC77C\uB9AC \uB178\uD2B8\uC758 \uAE30\uC874 \uB0B4\uC6A9\uC740 \uC808\uB300 \uC218\uC815\uD558\uAC70\uB098 \uC0AD\uC81C\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
321
|
-
- [ ] \
|
|
321
|
+
- [ ] \uAE30\uB85D\uC740 \uB2E4\uC74C\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uCD94\uAC00\uB429\uB2C8\uB2E4:
|
|
322
322
|
\`[{{currentTimestamp}}] <\uAE30\uC5B5 \uD560 \uB0B4\uC6A9>\`
|
|
323
323
|
- [ ] \`<\uAE30\uC5B5 \uD560 \uB0B4\uC6A9>\`\uC5D0\uB294 \uC644\uBCBD\uD55C \uCEE8\uD14D\uC2A4\uD2B8 \uC778\uACC4\uB97C \uC704\uD574 \uC624\uB298 \uC644\uB8CC\uD55C \uD575\uC2EC \uC791\uC5C5 \uC694\uC57D, \uBBF8\uD574\uACB0 \uC774\uC288(TODO), \uC911\uC694 \uBA54\uBAA8, \uC9C0\uC2DD \uB178\uD2B8 \`[[wikilink]]\` \uB4F1\uC744 \uD3EC\uD568\uD558\uC138\uC694.`;
|
|
324
324
|
var DEFAULT_NOTE_GUIDE = `# \uC9C0\uC2DD \uB178\uD2B8 \uC791\uC131 \uBC0F \uAD00\uB9AC \uAC00\uC774\uB4DC
|
|
325
325
|
|
|
326
|
+
- [ ] **\uB178\uD2B8 \uC0DD\uC131**: \`context-mcp_create_knowledge_note\` \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC5EC \uC0DD\uC131\uD558\uC138\uC694.
|
|
326
327
|
- [ ] \uC81C\uD154\uCE74\uC2A4\uD150(Zettelkasten) 3\uB300 \uC6D0\uCE59 \uC900\uC218:
|
|
327
328
|
- [ ] \uC6D0\uC790\uC131: \uD55C \uB178\uD2B8\uB2F9 \uD55C \uC8FC\uC81C
|
|
328
329
|
- [ ] \uC5F0\uACB0: \uACE0\uB9BD\uB41C \uB178\uD2B8 \uBC29\uC9C0
|
package/dist/mcp.js
CHANGED
|
@@ -32650,12 +32650,13 @@ function startMcpServer() {
|
|
|
32650
32650
|
server.registerTool("search_knowledge", {
|
|
32651
32651
|
description: "Search .md files in docs/ and .context/ directories for a keyword or regex",
|
|
32652
32652
|
inputSchema: {
|
|
32653
|
-
query: exports_external.string().describe("The keyword or regex to search for")
|
|
32653
|
+
query: exports_external.string().describe("The keyword or regex to search for"),
|
|
32654
|
+
limit: exports_external.number().optional().default(50).describe("Maximum number of results to return")
|
|
32654
32655
|
}
|
|
32655
|
-
}, async ({ query }) => {
|
|
32656
|
+
}, async ({ query, limit = 50 }) => {
|
|
32656
32657
|
const searchDirs = ["docs", ".context"];
|
|
32657
32658
|
const results = [];
|
|
32658
|
-
const maxResults =
|
|
32659
|
+
const maxResults = limit;
|
|
32659
32660
|
const snippetLength = 100;
|
|
32660
32661
|
try {
|
|
32661
32662
|
const regex = new RegExp(query, "i");
|
|
@@ -32769,11 +32770,18 @@ Snippet: ${r.snippet}`).join(`
|
|
|
32769
32770
|
const year = date6.getFullYear();
|
|
32770
32771
|
const month = String(date6.getMonth() + 1).padStart(2, "0");
|
|
32771
32772
|
const day = String(date6.getDate()).padStart(2, "0");
|
|
32773
|
+
const hours = String(date6.getHours()).padStart(2, "0");
|
|
32774
|
+
const minutes = String(date6.getMinutes()).padStart(2, "0");
|
|
32775
|
+
const seconds = String(date6.getSeconds()).padStart(2, "0");
|
|
32772
32776
|
const dateString = `${year}-${month}-${day}`;
|
|
32777
|
+
const timestamp = `[${year}-${month}-${day} ${hours}:${minutes}:${seconds}]`;
|
|
32773
32778
|
const dirPath = path.resolve(process.cwd(), ".context/memory/daily");
|
|
32774
32779
|
const filePath = path.join(dirPath, `${dateString}.md`);
|
|
32775
32780
|
await fs.mkdir(dirPath, { recursive: true });
|
|
32776
32781
|
let textToAppend = content;
|
|
32782
|
+
if (!content.startsWith(`[${year}-${month}-${day}`)) {
|
|
32783
|
+
textToAppend = `${timestamp} ${content}`;
|
|
32784
|
+
}
|
|
32777
32785
|
try {
|
|
32778
32786
|
const existingContent = await fs.readFile(filePath, "utf-8");
|
|
32779
32787
|
if (existingContent.length > 0 && !existingContent.endsWith(`
|
|
@@ -32781,7 +32789,7 @@ Snippet: ${r.snippet}`).join(`
|
|
|
32781
32789
|
textToAppend = `
|
|
32782
32790
|
` + textToAppend;
|
|
32783
32791
|
}
|
|
32784
|
-
} catch
|
|
32792
|
+
} catch {}
|
|
32785
32793
|
if (!textToAppend.endsWith(`
|
|
32786
32794
|
`)) {
|
|
32787
32795
|
textToAppend += `
|
|
@@ -32866,40 +32874,57 @@ Snippet: ${r.snippet}`).join(`
|
|
|
32866
32874
|
}
|
|
32867
32875
|
});
|
|
32868
32876
|
server.registerTool("create_knowledge_note", {
|
|
32869
|
-
description: "Create a new Zettelkasten knowledge note with frontmatter and wikilinks",
|
|
32877
|
+
description: "Create a new Zettelkasten knowledge note with frontmatter and wikilinks. You can optionally use a template by providing the `template` parameter. Available templates: adr (Architecture Decision Records), pattern (Design patterns), bug (Bug reports and analysis), gotcha (Pitfalls and gotchas), decision (General decisions), context (General context and background), runbook (Procedures and runbooks), insight (Insights and learnings).",
|
|
32870
32878
|
inputSchema: {
|
|
32871
32879
|
title: exports_external.string().describe("The title of the note"),
|
|
32872
32880
|
content: exports_external.string().describe("The main content of the note"),
|
|
32873
32881
|
tags: exports_external.array(exports_external.string()).optional().describe("Optional tags for the note"),
|
|
32874
|
-
linked_notes: exports_external.array(exports_external.string()).optional().describe("Optional list of related note titles to link to")
|
|
32882
|
+
linked_notes: exports_external.array(exports_external.string()).optional().describe("Optional list of related note titles to link to"),
|
|
32883
|
+
template: exports_external.enum(["adr", "pattern", "bug", "gotcha", "decision", "context", "runbook", "insight"]).optional().describe("Optional template to use for the note")
|
|
32875
32884
|
}
|
|
32876
|
-
}, async ({ title, content, tags, linked_notes }) => {
|
|
32885
|
+
}, async ({ title, content, tags, linked_notes, template }) => {
|
|
32877
32886
|
try {
|
|
32878
32887
|
const filename = title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "") + ".md";
|
|
32879
32888
|
const dirPath = path.resolve(process.cwd(), ".context/memory");
|
|
32880
32889
|
const filePath = path.join(dirPath, filename);
|
|
32881
32890
|
await fs.mkdir(dirPath, { recursive: true });
|
|
32882
32891
|
const date6 = new Date().toISOString().split("T")[0];
|
|
32883
|
-
let fileContent =
|
|
32892
|
+
let fileContent = "";
|
|
32893
|
+
if (template) {
|
|
32894
|
+
const templatePath = path.resolve(process.cwd(), `.context/templates/${template}.md`);
|
|
32895
|
+
try {
|
|
32896
|
+
fileContent = await fs.readFile(templatePath, "utf-8");
|
|
32897
|
+
fileContent = fileContent.replace(/\[\uC81C\uBAA9\]/g, title);
|
|
32898
|
+
fileContent += `
|
|
32899
|
+
|
|
32900
|
+
${content}`;
|
|
32901
|
+
} catch (err) {
|
|
32902
|
+
fileContent = `Error loading template: ${err instanceof Error ? err.message : String(err)}
|
|
32903
|
+
|
|
32904
|
+
${content}`;
|
|
32905
|
+
}
|
|
32906
|
+
} else {
|
|
32907
|
+
fileContent = `---
|
|
32884
32908
|
`;
|
|
32885
|
-
|
|
32909
|
+
fileContent += `title: ${title}
|
|
32886
32910
|
`;
|
|
32887
|
-
|
|
32911
|
+
fileContent += `date: ${date6}
|
|
32888
32912
|
`;
|
|
32889
|
-
|
|
32890
|
-
|
|
32913
|
+
if (tags && tags.length > 0) {
|
|
32914
|
+
fileContent += `tags:
|
|
32891
32915
|
${tags.map((t) => ` - ${t}`).join(`
|
|
32892
32916
|
`)}
|
|
32893
32917
|
`;
|
|
32894
|
-
|
|
32895
|
-
|
|
32918
|
+
}
|
|
32919
|
+
fileContent += `---
|
|
32896
32920
|
|
|
32897
32921
|
`;
|
|
32898
|
-
|
|
32922
|
+
fileContent += `# ${title}
|
|
32899
32923
|
|
|
32900
32924
|
`;
|
|
32901
|
-
|
|
32925
|
+
fileContent += `${content}
|
|
32902
32926
|
`;
|
|
32927
|
+
}
|
|
32903
32928
|
if (linked_notes && linked_notes.length > 0) {
|
|
32904
32929
|
fileContent += `
|
|
32905
32930
|
## Related Notes
|
|
@@ -32957,7 +32982,7 @@ ${tags.map((t) => ` - ${t}`).join(`
|
|
|
32957
32982
|
textToAppend = `
|
|
32958
32983
|
` + textToAppend;
|
|
32959
32984
|
}
|
|
32960
|
-
} catch
|
|
32985
|
+
} catch {}
|
|
32961
32986
|
if (!textToAppend.endsWith(`
|
|
32962
32987
|
`)) {
|
|
32963
32988
|
textToAppend += `
|
|
@@ -32990,36 +33015,43 @@ ${tags.map((t) => ` - ${t}`).join(`
|
|
|
32990
33015
|
server.registerTool("submit_turn_complete", {
|
|
32991
33016
|
description: "Mark the current turn as complete after verifying all required steps",
|
|
32992
33017
|
inputSchema: {
|
|
32993
|
-
|
|
32994
|
-
|
|
32995
|
-
|
|
32996
|
-
|
|
32997
|
-
|
|
33018
|
+
daily_note_update_proof: exports_external.string().min(5).optional().describe("Provide the file path of the updated daily note, or explicitly write 'skipped' if no update was needed."),
|
|
33019
|
+
knowledge_note_proof: exports_external.string().min(5).optional().describe("Provide the file path of the created knowledge note, or explicitly write 'skipped' if no note was created."),
|
|
33020
|
+
quality_check_output: exports_external.string().min(20).describe("Provide the last 5 lines of the `mise run lint && mise run test` execution output to prove quality checks passed."),
|
|
33021
|
+
checkpoint_commit_hashes: exports_external.string().min(7).describe("Provide the output of `git log -1 --oneline` or an explanation if the task was too small for checkpoints."),
|
|
33022
|
+
scope_review_notes: exports_external.string().min(10).describe("Provide a brief sentence confirming the scope check and that the work did not exceed the intended boundaries.")
|
|
32998
33023
|
}
|
|
32999
33024
|
}, async ({
|
|
33000
|
-
|
|
33001
|
-
|
|
33002
|
-
|
|
33003
|
-
|
|
33004
|
-
|
|
33025
|
+
daily_note_update_proof,
|
|
33026
|
+
knowledge_note_proof,
|
|
33027
|
+
quality_check_output,
|
|
33028
|
+
checkpoint_commit_hashes,
|
|
33029
|
+
scope_review_notes
|
|
33005
33030
|
}) => {
|
|
33006
33031
|
const missingSteps = [];
|
|
33007
|
-
|
|
33008
|
-
|
|
33009
|
-
|
|
33010
|
-
|
|
33011
|
-
|
|
33012
|
-
|
|
33013
|
-
if (!
|
|
33014
|
-
|
|
33015
|
-
if (
|
|
33016
|
-
missingSteps.push("
|
|
33032
|
+
const warnings = [];
|
|
33033
|
+
if (!daily_note_update_proof || daily_note_update_proof.toLowerCase() === "skipped") {
|
|
33034
|
+
warnings.push("Warning: Daily note was skipped. This is allowed, but ensure no important context is lost.");
|
|
33035
|
+
} else if (daily_note_update_proof.length < 5) {
|
|
33036
|
+
missingSteps.push("daily_note_update_proof (too short)");
|
|
33037
|
+
}
|
|
33038
|
+
if (!knowledge_note_proof || knowledge_note_proof.toLowerCase() === "skipped") {
|
|
33039
|
+
warnings.push("Warning: Knowledge note was skipped. This is allowed, but ensure no important context is lost.");
|
|
33040
|
+
} else if (knowledge_note_proof.length < 5) {
|
|
33041
|
+
missingSteps.push("knowledge_note_proof (too short)");
|
|
33042
|
+
}
|
|
33043
|
+
if (!quality_check_output || quality_check_output.length < 20)
|
|
33044
|
+
missingSteps.push("quality_check_output");
|
|
33045
|
+
if (!checkpoint_commit_hashes || checkpoint_commit_hashes.length < 7)
|
|
33046
|
+
missingSteps.push("checkpoint_commit_hashes");
|
|
33047
|
+
if (!scope_review_notes || scope_review_notes.length < 10)
|
|
33048
|
+
missingSteps.push("scope_review_notes");
|
|
33017
33049
|
if (missingSteps.length > 0) {
|
|
33018
33050
|
return {
|
|
33019
33051
|
content: [
|
|
33020
33052
|
{
|
|
33021
33053
|
type: "text",
|
|
33022
|
-
text: `Error: The following required steps were not completed: ${missingSteps.join(", ")}. You must
|
|
33054
|
+
text: `Error: The following required steps were not completed or provided insufficient proof: ${missingSteps.join(", ")}. You must provide valid proof for all steps before finishing the turn.`
|
|
33023
33055
|
}
|
|
33024
33056
|
],
|
|
33025
33057
|
isError: true
|
|
@@ -33036,7 +33068,10 @@ ${tags.map((t) => ` - ${t}`).join(`
|
|
|
33036
33068
|
content: [
|
|
33037
33069
|
{
|
|
33038
33070
|
type: "text",
|
|
33039
|
-
text:
|
|
33071
|
+
text: `Turn successfully marked as complete.${warnings.length > 0 ? `
|
|
33072
|
+
|
|
33073
|
+
` + warnings.join(`
|
|
33074
|
+
`) : ""}`
|
|
33040
33075
|
}
|
|
33041
33076
|
]
|
|
33042
33077
|
};
|
package/dist/omx/index.mjs
CHANGED
|
@@ -95,7 +95,7 @@ import { join as join3 } from "node:path";
|
|
|
95
95
|
// package.json
|
|
96
96
|
var package_default = {
|
|
97
97
|
name: "@ksm0709/context",
|
|
98
|
-
version: "0.0.
|
|
98
|
+
version: "0.0.26",
|
|
99
99
|
author: {
|
|
100
100
|
name: "TaehoKang",
|
|
101
101
|
email: "ksm07091@gmail.com"
|
|
@@ -386,13 +386,14 @@ turn_id={{turnId}}
|
|
|
386
386
|
`;
|
|
387
387
|
var DEFAULT_DAILY_NOTE_GUIDE = `# 데일리 노트 기록 가이드
|
|
388
388
|
|
|
389
|
-
- [ ] \`
|
|
389
|
+
- [ ] \`context-mcp_append_daily_note\` 도구를 사용하여 기록을 추가하세요.
|
|
390
390
|
- [ ] **주의**: 데일리 노트의 기존 내용은 절대 수정하거나 삭제하지 마세요.
|
|
391
|
-
- [ ]
|
|
391
|
+
- [ ] 기록은 다음과 같은 형식으로 추가됩니다:
|
|
392
392
|
\`[{{currentTimestamp}}] <기억 할 내용>\`
|
|
393
393
|
- [ ] \`<기억 할 내용>\`에는 완벽한 컨텍스트 인계를 위해 오늘 완료한 핵심 작업 요약, 미해결 이슈(TODO), 중요 메모, 지식 노트 \`[[wikilink]]\` 등을 포함하세요.`;
|
|
394
394
|
var DEFAULT_NOTE_GUIDE = `# 지식 노트 작성 및 관리 가이드
|
|
395
395
|
|
|
396
|
+
- [ ] **노트 생성**: \`context-mcp_create_knowledge_note\` 도구를 사용하여 생성하세요.
|
|
396
397
|
- [ ] 제텔카스텐(Zettelkasten) 3대 원칙 준수:
|
|
397
398
|
- [ ] 원자성: 한 노트당 한 주제
|
|
398
399
|
- [ ] 연결: 고립된 노트 방지
|
|
@@ -636,10 +637,15 @@ var STATIC_KNOWLEDGE_CONTEXT = `## Knowledge Context
|
|
|
636
637
|
2. **연결** -- 모든 노트는 [[wikilink]]로 관련 노트에 연결. 고립된 노트는 발견되지 않습니다.
|
|
637
638
|
3. **자기 언어** -- 복사-붙여넣기가 아닌, 핵심을 이해하고 간결하게 서술하세요.
|
|
638
639
|
|
|
640
|
+
### MCP Tools
|
|
641
|
+
- **지식 관리**: \`context-mcp_search_knowledge\`, \`context-mcp_read_knowledge\`, \`context-mcp_create_knowledge_note\`, \`context-mcp_update_knowledge_note\`
|
|
642
|
+
- **데일리 노트**: \`context-mcp_read_daily_note\`, \`context-mcp_append_daily_note\`
|
|
643
|
+
- **작업 완료**: \`context-mcp_submit_turn_complete\` (작업 종료 시 필수 호출)
|
|
644
|
+
|
|
639
645
|
### 작업 전 필수
|
|
640
|
-
- **데일리 노트 확인**: 가장 최근의 데일리 노트를 읽고 이전 세션의 컨텍스트와 미해결 이슈를 파악하세요.
|
|
646
|
+
- **데일리 노트 확인**: 가장 최근의 데일리 노트를 읽고 이전 세션의 컨텍스트와 미해결 이슈를 파악하세요.
|
|
641
647
|
- **작업 의도 선언**: 작업 시작 전, 현재 세션의 목표와 작업 의도를 명확히 파악하고 선언하세요.
|
|
642
|
-
- **지식 검색**: 작업과 관련된 문서를 **직접 먼저** 검색하고 읽으세요.
|
|
648
|
+
- **지식 검색**: 작업과 관련된 문서를 **직접 먼저** 검색하고 읽으세요.
|
|
643
649
|
- 지식 파일에 기록된 아키텍처 결정, 패턴, 제약사항을 반드시 따르세요.
|
|
644
650
|
|
|
645
651
|
### 개발 원칙
|
|
@@ -650,7 +656,7 @@ var STATIC_KNOWLEDGE_CONTEXT = `## Knowledge Context
|
|
|
650
656
|
### 우선순위
|
|
651
657
|
- AGENTS.md의 지시사항이 항상 최우선
|
|
652
658
|
- 지식 노트의 결정사항 > 일반적 관행
|
|
653
|
-
- 지식 노트에 없는 새로운 결정이나 반복 가치가 있는 발견은 작업 메모나 지식 노트 후보로
|
|
659
|
+
- 지식 노트에 없는 새로운 결정이나 반복 가치가 있는 발견은 작업 메모나 지식 노트 후보로 기록하세요.`;
|
|
654
660
|
async function onSessionStart(event, sdk) {
|
|
655
661
|
const projectDir = resolveProjectDir(event);
|
|
656
662
|
scaffoldIfNeeded(projectDir);
|