oh-my-til 0.13.0 → 0.14.0
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/README.ko.md +7 -7
- package/README.md +7 -7
- package/dist/cli.js +150 -100
- package/main.js +37 -98
- package/manifest.json +1 -1
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -55,8 +55,12 @@ git clone 없이 `npx`만으로 바로 시작할 수 있습니다.
|
|
|
55
55
|
3. **(선택) MCP 서버 시작** — Claude Code가 TIL 파일을 조회할 수 있게 합니다:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
+
# HTTP 모드 — 상주 서버 실행
|
|
58
59
|
npx oh-my-til serve ~/my-til
|
|
59
60
|
claude mcp add --transport http oh-my-til http://localhost:22360/mcp
|
|
61
|
+
|
|
62
|
+
# stdio 모드 — 필요 시 자동 실행 (서버 불필요, Claude Desktop 호환)
|
|
63
|
+
claude mcp add oh-my-til -- npx oh-my-til mcp ~/my-til
|
|
60
64
|
```
|
|
61
65
|
|
|
62
66
|
> **팁:** 경로 없이 `npx oh-my-til init`을 실행하면 현재 디렉토리에 설치됩니다.
|
|
@@ -129,19 +133,15 @@ MCP 서버 연결 시 Claude Code에서 사용할 수 있는 도구:
|
|
|
129
133
|
|
|
130
134
|
| 도구 | 설명 |
|
|
131
135
|
|------|------|
|
|
132
|
-
| `vault_read_note` | 경로로 노트 내용 읽기 |
|
|
133
|
-
| `vault_list_files` | 폴더 내 파일 목록 (필터링 가능) |
|
|
134
|
-
| `vault_search` | vault 전체 텍스트 검색 |
|
|
135
136
|
| `vault_get_active_file` | 현재 열린 파일 가져오기 |
|
|
136
137
|
| `til_list` | 카테고리별 TIL 파일 목록 (`search` 필터 지원) |
|
|
137
|
-
| `
|
|
138
|
-
| `til_save_note` | frontmatter 형식/경로 규칙을 보장하는 TIL 노트 저장 |
|
|
138
|
+
| `til_save_note` | TIL 노트 저장 (frontmatter/경로 규칙 보장, 백로그 자동 체크) |
|
|
139
139
|
| `til_backlog_status` | 백로그 진행률 요약 (체크박스 카운트) |
|
|
140
|
-
| `til_backlog_check` | 백로그 항목을 slug로 완료 처리 |
|
|
140
|
+
| `til_backlog_check` | 백로그 항목을 slug로 완료 처리 (단독 사용 시) |
|
|
141
141
|
| `til_get_context` | 주제 관련 기존 학습 컨텍스트 (파일, 링크 관계, 미작성 주제) |
|
|
142
142
|
| `til_recent_context` | 최근 학습 활동을 날짜별로 조회 |
|
|
143
143
|
| `til_dashboard` | 학습 통계 요약 |
|
|
144
|
-
| `til_review_list` | 복습 대상 카드 목록 + 통계 (SRS) |
|
|
144
|
+
| `til_review_list` | 복습 대상 카드 목록 + 통계 (SRS, `include_content` 지원) |
|
|
145
145
|
| `til_review_update` | 복습 결과 기록 또는 복습 해제 |
|
|
146
146
|
|
|
147
147
|
## Claude 스킬
|
package/README.md
CHANGED
|
@@ -55,8 +55,12 @@ No git clone needed. Just `npx`.
|
|
|
55
55
|
3. **(Optional) Start MCP server** — lets Claude Code query your TIL files:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
+
# HTTP mode — runs a persistent server
|
|
58
59
|
npx oh-my-til serve ~/my-til
|
|
59
60
|
claude mcp add --transport http oh-my-til http://localhost:22360/mcp
|
|
61
|
+
|
|
62
|
+
# stdio mode — spawned on demand (no server needed, works with Claude Desktop)
|
|
63
|
+
claude mcp add oh-my-til -- npx oh-my-til mcp ~/my-til
|
|
60
64
|
```
|
|
61
65
|
|
|
62
66
|
> **Tip:** You can also run `npx oh-my-til init` without a path to initialize the current directory.
|
|
@@ -129,19 +133,15 @@ When the MCP server is connected, Claude Code can use these tools:
|
|
|
129
133
|
|
|
130
134
|
| Tool | Description |
|
|
131
135
|
|------|-------------|
|
|
132
|
-
| `vault_read_note` | Read note content by path |
|
|
133
|
-
| `vault_list_files` | List files in a folder with optional filtering |
|
|
134
|
-
| `vault_search` | Full-text search across the vault |
|
|
135
136
|
| `vault_get_active_file` | Get the currently open file |
|
|
136
137
|
| `til_list` | List TIL files grouped by category (supports `search` filter) |
|
|
137
|
-
| `
|
|
138
|
-
| `til_save_note` | Save a TIL note with validated frontmatter and path conventions |
|
|
138
|
+
| `til_save_note` | Save a TIL note with validated frontmatter and path conventions (auto backlog check) |
|
|
139
139
|
| `til_backlog_status` | Backlog progress summary with checkbox counts |
|
|
140
|
-
| `til_backlog_check` | Mark a backlog item as done by slug |
|
|
140
|
+
| `til_backlog_check` | Mark a backlog item as done by slug (standalone use) |
|
|
141
141
|
| `til_get_context` | Get existing knowledge context for a topic (files, links, unresolved mentions) |
|
|
142
142
|
| `til_recent_context` | Recent learning activity grouped by date |
|
|
143
143
|
| `til_dashboard` | Learning statistics summary |
|
|
144
|
-
| `til_review_list` | Due review cards list + stats (SRS) |
|
|
144
|
+
| `til_review_list` | Due review cards list + stats (SRS, supports `include_content`) |
|
|
145
145
|
| `til_review_update` | Record review result or remove from review |
|
|
146
146
|
|
|
147
147
|
## Claude Skills
|
package/dist/cli.js
CHANGED
|
@@ -39295,77 +39295,6 @@ function computeReviewStreak(files, tilPath, now) {
|
|
|
39295
39295
|
|
|
39296
39296
|
// src/mcp/tools.ts
|
|
39297
39297
|
function registerTools(server, storage, metadata, tilPath) {
|
|
39298
|
-
server.registerTool(
|
|
39299
|
-
"vault_read_note",
|
|
39300
|
-
{
|
|
39301
|
-
title: "Read Note",
|
|
39302
|
-
description: "Vault\uC5D0\uC11C \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uC77D\uC2B5\uB2C8\uB2E4",
|
|
39303
|
-
inputSchema: external_exports3.object({
|
|
39304
|
-
path: external_exports3.string().describe("\uB178\uD2B8 \uD30C\uC77C \uACBD\uB85C (\uC608: til/typescript/generics.md)")
|
|
39305
|
-
})
|
|
39306
|
-
},
|
|
39307
|
-
async ({ path: path6 }) => {
|
|
39308
|
-
const text = await storage.readFile(path6);
|
|
39309
|
-
if (text === null) {
|
|
39310
|
-
return { content: [{ type: "text", text: `Error: \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${path6}` }], isError: true };
|
|
39311
|
-
}
|
|
39312
|
-
return { content: [{ type: "text", text }] };
|
|
39313
|
-
}
|
|
39314
|
-
);
|
|
39315
|
-
server.registerTool(
|
|
39316
|
-
"vault_list_files",
|
|
39317
|
-
{
|
|
39318
|
-
title: "List Files",
|
|
39319
|
-
description: "Vault \uD3F4\uB354 \uB0B4 \uD30C\uC77C \uBAA9\uB85D\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
39320
|
-
inputSchema: external_exports3.object({
|
|
39321
|
-
folder: external_exports3.string().optional().describe("\uD3F4\uB354 \uACBD\uB85C (\uC0DD\uB7B5 \uC2DC \uB8E8\uD2B8)"),
|
|
39322
|
-
extension: external_exports3.string().optional().describe("\uD544\uD130\uB9C1\uD560 \uD655\uC7A5\uC790 (\uC608: md)")
|
|
39323
|
-
})
|
|
39324
|
-
},
|
|
39325
|
-
async ({ folder, extension }) => {
|
|
39326
|
-
const files = await storage.listFiles();
|
|
39327
|
-
const filtered = files.filter((f) => {
|
|
39328
|
-
if (folder && !f.path.startsWith(folder + "/") && f.path !== folder)
|
|
39329
|
-
return false;
|
|
39330
|
-
if (extension && f.extension !== extension)
|
|
39331
|
-
return false;
|
|
39332
|
-
return true;
|
|
39333
|
-
});
|
|
39334
|
-
const list = filtered.map((f) => f.path).join("\n");
|
|
39335
|
-
return { content: [{ type: "text", text: list || "(\uD30C\uC77C \uC5C6\uC74C)" }] };
|
|
39336
|
-
}
|
|
39337
|
-
);
|
|
39338
|
-
server.registerTool(
|
|
39339
|
-
"vault_search",
|
|
39340
|
-
{
|
|
39341
|
-
title: "Search Vault",
|
|
39342
|
-
description: "Vault \uC804\uCCB4\uC5D0\uC11C \uD14D\uC2A4\uD2B8\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4",
|
|
39343
|
-
inputSchema: external_exports3.object({
|
|
39344
|
-
query: external_exports3.string().describe("\uAC80\uC0C9\uD560 \uD14D\uC2A4\uD2B8")
|
|
39345
|
-
})
|
|
39346
|
-
},
|
|
39347
|
-
async ({ query }) => {
|
|
39348
|
-
const files = (await storage.listFiles()).filter((f) => f.extension === "md");
|
|
39349
|
-
const results = [];
|
|
39350
|
-
const lowerQuery = query.toLowerCase();
|
|
39351
|
-
const BATCH_SIZE = 20;
|
|
39352
|
-
for (let i = 0; i < files.length && results.length < 50; i += BATCH_SIZE) {
|
|
39353
|
-
const batch = files.slice(i, i + BATCH_SIZE);
|
|
39354
|
-
const texts = await Promise.all(batch.map((f) => storage.readFile(f.path)));
|
|
39355
|
-
for (let j = 0; j < batch.length; j++) {
|
|
39356
|
-
const text2 = texts[j];
|
|
39357
|
-
if (text2 !== null && text2.toLowerCase().includes(lowerQuery)) {
|
|
39358
|
-
results.push(batch[j].path);
|
|
39359
|
-
}
|
|
39360
|
-
if (results.length >= 50)
|
|
39361
|
-
break;
|
|
39362
|
-
}
|
|
39363
|
-
}
|
|
39364
|
-
const text = results.length > 0 ? `${results.length}\uAC1C \uD30C\uC77C\uC5D0\uC11C \uBC1C\uACAC:
|
|
39365
|
-
${results.join("\n")}` : `"${query}"\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4`;
|
|
39366
|
-
return { content: [{ type: "text", text }] };
|
|
39367
|
-
}
|
|
39368
|
-
);
|
|
39369
39298
|
server.registerTool(
|
|
39370
39299
|
"vault_get_active_file",
|
|
39371
39300
|
{
|
|
@@ -39614,13 +39543,14 @@ ${text}` }] };
|
|
|
39614
39543
|
"til_review_list",
|
|
39615
39544
|
{
|
|
39616
39545
|
title: "Review List",
|
|
39617
|
-
description: "\uC624\uB298 \uBCF5\uC2B5\uD560 TIL \uCE74\uB4DC \uBAA9\uB85D\uACFC \uD1B5\uACC4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
39546
|
+
description: "\uC624\uB298 \uBCF5\uC2B5\uD560 TIL \uCE74\uB4DC \uBAA9\uB85D\uACFC \uD1B5\uACC4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. include_content=true\uB85C \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uD568\uAED8 \uAC00\uC838\uC624\uBA74 \uBCC4\uB3C4 \uD30C\uC77C \uC77D\uAE30\uB97C \uC904\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
|
|
39618
39547
|
inputSchema: external_exports3.object({
|
|
39619
39548
|
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1"),
|
|
39620
|
-
limit: external_exports3.number().min(1).max(100).optional().describe("\uCD5C\uB300 \uCE74\uB4DC \uC218 (\uAE30\uBCF8 20)")
|
|
39549
|
+
limit: external_exports3.number().min(1).max(100).optional().describe("\uCD5C\uB300 \uCE74\uB4DC \uC218 (\uAE30\uBCF8 20)"),
|
|
39550
|
+
include_content: external_exports3.boolean().optional().describe("true\uBA74 \uAC01 \uCE74\uB4DC\uC758 \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uD568\uAED8 \uBC18\uD658 (\uAE30\uBCF8 false)")
|
|
39621
39551
|
})
|
|
39622
39552
|
},
|
|
39623
|
-
async ({ category, limit }) => {
|
|
39553
|
+
async ({ category, limit, include_content }) => {
|
|
39624
39554
|
const allFiles = await storage.listFiles();
|
|
39625
39555
|
const srsFiles = [];
|
|
39626
39556
|
for (const f of allFiles) {
|
|
@@ -39651,6 +39581,15 @@ ${text}` }] };
|
|
|
39651
39581
|
const cards = filterDueCards(srsFiles, tilPath, void 0, effectiveLimit);
|
|
39652
39582
|
const stats = computeReviewStats(srsFiles, tilPath);
|
|
39653
39583
|
const remaining = Math.max(0, stats.dueToday - cards.length);
|
|
39584
|
+
if (include_content) {
|
|
39585
|
+
const contents = await Promise.all(cards.map((card) => storage.readFile(card.path)));
|
|
39586
|
+
const cardsWithContent = cards.map((card, i) => ({
|
|
39587
|
+
...card,
|
|
39588
|
+
content: contents[i] ?? ""
|
|
39589
|
+
}));
|
|
39590
|
+
const data2 = { cards: cardsWithContent, stats, remaining };
|
|
39591
|
+
return { content: [{ type: "text", text: JSON.stringify(data2) }] };
|
|
39592
|
+
}
|
|
39654
39593
|
const data = { cards, stats, remaining };
|
|
39655
39594
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
39656
39595
|
}
|
|
@@ -39701,28 +39640,11 @@ ${text}` }] };
|
|
|
39701
39640
|
};
|
|
39702
39641
|
}
|
|
39703
39642
|
);
|
|
39704
|
-
server.registerTool(
|
|
39705
|
-
"til_exists",
|
|
39706
|
-
{
|
|
39707
|
-
title: "Check TIL Exists",
|
|
39708
|
-
description: "TIL \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD558\uB294\uC9C0 \uD655\uC778\uD569\uB2C8\uB2E4",
|
|
39709
|
-
inputSchema: external_exports3.object({
|
|
39710
|
-
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
39711
|
-
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)")
|
|
39712
|
-
})
|
|
39713
|
-
},
|
|
39714
|
-
async ({ category, slug }) => {
|
|
39715
|
-
const path6 = `${tilPath}/${category}/${slug}.md`;
|
|
39716
|
-
const exists = await storage.exists(path6);
|
|
39717
|
-
const data = { exists, path: path6 };
|
|
39718
|
-
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
39719
|
-
}
|
|
39720
|
-
);
|
|
39721
39643
|
server.registerTool(
|
|
39722
39644
|
"til_save_note",
|
|
39723
39645
|
{
|
|
39724
39646
|
title: "Save TIL Note",
|
|
39725
|
-
description: "TIL \uB178\uD2B8\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. frontmatter \uD615\uC2DD\uACFC \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD569\uB2C8\uB2E4.",
|
|
39647
|
+
description: "TIL \uB178\uD2B8\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. frontmatter \uD615\uC2DD\uACFC \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD569\uB2C8\uB2E4. auto_check_backlog=true\uB85C \uC800\uC7A5 \uD6C4 \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C.",
|
|
39726
39648
|
inputSchema: external_exports3.object({
|
|
39727
39649
|
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
39728
39650
|
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)"),
|
|
@@ -39731,10 +39653,11 @@ ${text}` }] };
|
|
|
39731
39653
|
tags: external_exports3.array(external_exports3.string()).optional().describe('\uD0DC\uADF8 \uBAA9\uB85D (\uC608: ["typescript", "basics"])'),
|
|
39732
39654
|
date: external_exports3.string().optional().describe("\uC791\uC131\uC77C (YYYY-MM-DD, \uC0DD\uB7B5 \uC2DC \uC624\uB298)"),
|
|
39733
39655
|
fmCategory: external_exports3.string().optional().describe("frontmatter category \uAC12 (\uC0DD\uB7B5 \uC2DC category \uD30C\uB77C\uBBF8\uD130 \uC0AC\uC6A9)"),
|
|
39734
|
-
aliases: external_exports3.array(external_exports3.string()).optional().describe('aliases \uBAA9\uB85D (\uC608: ["\uD55C\uAE00 \uC81C\uBAA9", "English Title"])')
|
|
39656
|
+
aliases: external_exports3.array(external_exports3.string()).optional().describe('aliases \uBAA9\uB85D (\uC608: ["\uD55C\uAE00 \uC81C\uBAA9", "English Title"])'),
|
|
39657
|
+
auto_check_backlog: external_exports3.boolean().optional().describe("true\uBA74 \uC800\uC7A5 \uD6C4 \uBC31\uB85C\uADF8 \uD56D\uBAA9\uC744 \uC790\uB3D9\uC73C\uB85C \uC644\uB8CC \uCC98\uB9AC (\uAE30\uBCF8 false)")
|
|
39735
39658
|
})
|
|
39736
39659
|
},
|
|
39737
|
-
async ({ category, slug, title, content, tags, date: date5, fmCategory, aliases }) => {
|
|
39660
|
+
async ({ category, slug, title, content, tags, date: date5, fmCategory, aliases, auto_check_backlog }) => {
|
|
39738
39661
|
const path6 = `${tilPath}/${category}/${slug}.md`;
|
|
39739
39662
|
const noteDate = date5 || (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
39740
39663
|
const fmLines = ["---", `title: "${title.replace(/"/g, '\\"')}"`, `date: ${noteDate}`];
|
|
@@ -39755,6 +39678,19 @@ ${text}` }] };
|
|
|
39755
39678
|
const existed = await storage.exists(path6);
|
|
39756
39679
|
await storage.writeFile(path6, fullContent);
|
|
39757
39680
|
const data = { path: path6, created: !existed, category, slug, title };
|
|
39681
|
+
if (auto_check_backlog) {
|
|
39682
|
+
const backlogPath = `${tilPath}/${category}/backlog.md`;
|
|
39683
|
+
const backlogContent = await storage.readFile(backlogPath);
|
|
39684
|
+
if (backlogContent !== null) {
|
|
39685
|
+
const result = checkBacklogItem(backlogContent, slug);
|
|
39686
|
+
if (result.found && !result.alreadyDone) {
|
|
39687
|
+
await storage.writeFile(backlogPath, result.content);
|
|
39688
|
+
data.backlog_checked = true;
|
|
39689
|
+
} else if (result.alreadyDone) {
|
|
39690
|
+
data.backlog_already_done = true;
|
|
39691
|
+
}
|
|
39692
|
+
}
|
|
39693
|
+
}
|
|
39758
39694
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
39759
39695
|
}
|
|
39760
39696
|
);
|
|
@@ -39874,8 +39810,100 @@ var TILMcpServer = class {
|
|
|
39874
39810
|
}
|
|
39875
39811
|
};
|
|
39876
39812
|
|
|
39813
|
+
// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
|
|
39814
|
+
var import_node_process = __toESM(require("process"), 1);
|
|
39815
|
+
|
|
39816
|
+
// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
|
|
39817
|
+
var ReadBuffer = class {
|
|
39818
|
+
append(chunk) {
|
|
39819
|
+
this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
|
|
39820
|
+
}
|
|
39821
|
+
readMessage() {
|
|
39822
|
+
if (!this._buffer) {
|
|
39823
|
+
return null;
|
|
39824
|
+
}
|
|
39825
|
+
const index = this._buffer.indexOf("\n");
|
|
39826
|
+
if (index === -1) {
|
|
39827
|
+
return null;
|
|
39828
|
+
}
|
|
39829
|
+
const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, "");
|
|
39830
|
+
this._buffer = this._buffer.subarray(index + 1);
|
|
39831
|
+
return deserializeMessage(line);
|
|
39832
|
+
}
|
|
39833
|
+
clear() {
|
|
39834
|
+
this._buffer = void 0;
|
|
39835
|
+
}
|
|
39836
|
+
};
|
|
39837
|
+
function deserializeMessage(line) {
|
|
39838
|
+
return JSONRPCMessageSchema.parse(JSON.parse(line));
|
|
39839
|
+
}
|
|
39840
|
+
function serializeMessage(message) {
|
|
39841
|
+
return JSON.stringify(message) + "\n";
|
|
39842
|
+
}
|
|
39843
|
+
|
|
39844
|
+
// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
|
|
39845
|
+
var StdioServerTransport = class {
|
|
39846
|
+
constructor(_stdin = import_node_process.default.stdin, _stdout = import_node_process.default.stdout) {
|
|
39847
|
+
this._stdin = _stdin;
|
|
39848
|
+
this._stdout = _stdout;
|
|
39849
|
+
this._readBuffer = new ReadBuffer();
|
|
39850
|
+
this._started = false;
|
|
39851
|
+
this._ondata = (chunk) => {
|
|
39852
|
+
this._readBuffer.append(chunk);
|
|
39853
|
+
this.processReadBuffer();
|
|
39854
|
+
};
|
|
39855
|
+
this._onerror = (error48) => {
|
|
39856
|
+
this.onerror?.(error48);
|
|
39857
|
+
};
|
|
39858
|
+
}
|
|
39859
|
+
/**
|
|
39860
|
+
* Starts listening for messages on stdin.
|
|
39861
|
+
*/
|
|
39862
|
+
async start() {
|
|
39863
|
+
if (this._started) {
|
|
39864
|
+
throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");
|
|
39865
|
+
}
|
|
39866
|
+
this._started = true;
|
|
39867
|
+
this._stdin.on("data", this._ondata);
|
|
39868
|
+
this._stdin.on("error", this._onerror);
|
|
39869
|
+
}
|
|
39870
|
+
processReadBuffer() {
|
|
39871
|
+
while (true) {
|
|
39872
|
+
try {
|
|
39873
|
+
const message = this._readBuffer.readMessage();
|
|
39874
|
+
if (message === null) {
|
|
39875
|
+
break;
|
|
39876
|
+
}
|
|
39877
|
+
this.onmessage?.(message);
|
|
39878
|
+
} catch (error48) {
|
|
39879
|
+
this.onerror?.(error48);
|
|
39880
|
+
}
|
|
39881
|
+
}
|
|
39882
|
+
}
|
|
39883
|
+
async close() {
|
|
39884
|
+
this._stdin.off("data", this._ondata);
|
|
39885
|
+
this._stdin.off("error", this._onerror);
|
|
39886
|
+
const remainingDataListeners = this._stdin.listenerCount("data");
|
|
39887
|
+
if (remainingDataListeners === 0) {
|
|
39888
|
+
this._stdin.pause();
|
|
39889
|
+
}
|
|
39890
|
+
this._readBuffer.clear();
|
|
39891
|
+
this.onclose?.();
|
|
39892
|
+
}
|
|
39893
|
+
send(message) {
|
|
39894
|
+
return new Promise((resolve3) => {
|
|
39895
|
+
const json2 = serializeMessage(message);
|
|
39896
|
+
if (this._stdout.write(json2)) {
|
|
39897
|
+
resolve3();
|
|
39898
|
+
} else {
|
|
39899
|
+
this._stdout.once("drain", resolve3);
|
|
39900
|
+
}
|
|
39901
|
+
});
|
|
39902
|
+
}
|
|
39903
|
+
};
|
|
39904
|
+
|
|
39877
39905
|
// vault-assets/skills/til/SKILL.md
|
|
39878
|
-
var SKILL_default = '---\nname: til\ndescription: "Today I Learned - \uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uACE0 \uB300\uD654\uD615\uC73C\uB85C \uD559\uC2B5\uD55C \uB4A4 TIL \uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC800\uC7A5"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 TIL \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (\uB3D9\uC77C/\uC720\uC0AC \uC8FC\uC81C \uAC10\uC9C0)\n- `
|
|
39906
|
+
var SKILL_default = '---\nname: til\ndescription: "Today I Learned - \uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uACE0 \uB300\uD654\uD615\uC73C\uB85C \uD559\uC2B5\uD55C \uB4A4 TIL \uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC800\uC7A5"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 TIL \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (\uB3D9\uC77C/\uC720\uC0AC \uC8FC\uC81C \uAC10\uC9C0)\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545, \uB9C1\uD06C \uD6C4\uBCF4\n- `vault_get_active_file`: \uC0AC\uC6A9\uC790\uAC00 \uBCF4\uB294 \uD30C\uC77C \uD655\uC778\n\n## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. `Read`\uB85C `til/{category}/{slug}.md` \uC874\uC7AC \uD655\uC778 \u2192 \uC788\uC73C\uBA74 \uC2EC\uD654/\uC2E0\uADDC \uC120\uD0DD\uC9C0 \uC81C\uC2DC\n2. `til_get_context`\uB85C \uAE30\uC874 TIL \uD655\uC778. MCP \uBD88\uAC00 \uC2DC `til_list` \uD3F4\uBC31\n - \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uD559\uC2B5 \uC2DC `til_backlog_status`(category) \u2192 `sections[].items[].sourceUrls` \uCC38\uC870\n - URL 1\uAC1C: `WebFetch`\uB85C \uC9C1\uC811 \uD328\uCE58\n - URL 2\uAC1C \uC774\uC0C1: `til-fetcher` subagent **1\uAC1C**\uC5D0 \uBAA8\uB4E0 URL \uC804\uB2EC\n3. \uAE30\uC874 TIL \uC5C6\uC73C\uBA74: \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC870\uC0AC\n4. \uD575\uC2EC \uAC1C\uB150, \uC608\uC2DC, \uAD00\uB828 \uC790\uB8CC \uC218\uC9D1 \u2192 \uC694\uC57D\n\n## Phase 2: \uB300\uD654\uD615 \uD559\uC2B5\n\n1. \uB9AC\uC11C\uCE58 \uACB0\uACFC \uAE30\uBC18 \uC124\uBA85\n2. \uC2EC\uD654 \uD559\uC2B5 \uBAA8\uB4DC: \uAE30\uC874 \uB0B4\uC6A9 \uBC18\uBCF5\uD558\uC9C0 \uC54A\uACE0 \uC0C8 \uAD00\uC810\uC5D0 \uC9D1\uC911\n3. \uC0AC\uC6A9\uC790 \uC9C8\uBB38\uC5D0 \uB2F5\uBCC0\n4. \uC0AC\uC6A9\uC790\uAC00 "\uC800\uC7A5\uD574\uC918" \uB4F1 \uC694\uCCAD \uC2DC Phase 3 \uC804\uD658 (\uC790\uB3D9 \uC804\uD658 \uAE08\uC9C0)\n\n## Phase 3: \uC800\uC7A5\n\n`/save` \uC2A4\uD0AC \uADDC\uCE59\uC744 \uB530\uB77C \uC800\uC7A5. \uC2EC\uD654 \uD559\uC2B5 \uBAA8\uB4DC\uB294 \uAE30\uC874 \uD30C\uC77C\uC5D0 \uBCD1\uD569 (`updated` \uB0A0\uC9DC \uCD94\uAC00).\n\n## \uC778\uC218\n\n- \uCCAB \uBC88\uC9F8: \uD559\uC2B5 \uC8FC\uC81C (\uD544\uC218)\n- \uB450 \uBC88\uC9F8: \uCE74\uD14C\uACE0\uB9AC (\uC120\uD0DD, \uBBF8\uC9C0\uC815 \uC2DC \uC790\uB3D9 \uCD94\uB860)\n\n## \uADDC\uCE59\n\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)` \u2014 `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0\n- \uBBFC\uAC10 \uC815\uBCF4 \uB300\uCCB4\uAC12 \uC0AC\uC6A9 (example.com, your-api-key)\n';
|
|
39879
39907
|
|
|
39880
39908
|
// vault-assets/skills/backlog/SKILL.md
|
|
39881
39909
|
var SKILL_default2 = '---\nname: backlog\ndescription: "\uD559\uC2B5 \uBC31\uB85C\uADF8\uB97C \uC870\uD68C\uD558\uACE0 \uC9C4\uD589 \uC0C1\uD669\uC744 \uBCF4\uC5EC\uC900\uB2E4"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Backlog Skill\n\n\uD559\uC2B5 \uBC31\uB85C\uADF8 \uC870\uD68C + \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D (\uC77D\uAE30 \uC804\uC6A9).\n\n## MCP \uB3C4\uAD6C\n\n- `til_backlog_status`: \uC804\uCCB4/\uCE74\uD14C\uACE0\uB9AC\uBCC4 \uC9C4\uD589\uB960 (category \uC9C0\uC815 \uC2DC sections \uD3EC\uD568)\n\n## \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n### \uC778\uC218 \uC5C6\uC74C (`/backlog`)\n\n1. `til_backlog_status` \uD638\uCD9C (MCP \uBD88\uAC00 \uC2DC `./til/*/backlog.md` Glob)\n2. \uBC31\uB85C\uADF8 \uC5C6\uC73C\uBA74 `/research` \uC548\uB0B4 \uD6C4 \uC885\uB8CC\n3. \uD14C\uC774\uBE14\uB85C \uC694\uC57D: \uCE74\uD14C\uACE0\uB9AC(\uB9C1\uD06C), \uC9C4\uD589\uB960, \uC644\uB8CC\uC218, \uCD5C\uADFC \uD559\uC2B5\uC77C, \uC9C4\uD589\uBC14\n\n### \uC778\uC218 \uC788\uC74C (`/backlog \uCE74\uD14C\uACE0\uB9AC`)\n\n1. `til_backlog_status`\uC5D0 category \uC804\uB2EC \u2192 sections \uD65C\uC6A9\n2. \uC139\uC158\uBCC4 \uCD9C\uB825:\n - `## {heading} ({\uC644\uB8CC\uC218}/{\uC804\uCCB4\uC218})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - `- [ ]`/`- [x]` \uB9C8\uD06C\uB2E4\uC6B4 \uCCB4\uD06C\uBC15\uC2A4 \uC0AC\uC6A9 \uAE08\uC9C0 (\uD130\uBBF8\uB110 \uBBF8\uB80C\uB354\uB9C1)\n\n## \uCD9C\uB825 \uADDC\uCE59\n\n- \uBAA8\uB4E0 \uCE74\uD14C\uACE0\uB9AC\uBA85/\uD56D\uBAA9\uBA85\uC740 `[\uD45C\uC2DC\uBA85](\uACBD\uB85C)` \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C\uB85C \uCD9C\uB825\n- \uACBD\uB85C \uC9C1\uC811 \uB178\uCD9C \uAE08\uC9C0\n- \uC9C4\uD589\uBC14: 10\uCE78 (`\u2588` \uC644\uB8CC, `\u2591` \uBBF8\uC644\uB8CC)\n- \uD55C\uAD6D\uC5B4 \uCD9C\uB825\n- \uBC31\uB85C\uADF8 \uD30C\uC77C \uC218\uC815 \uAE08\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n';
|
|
@@ -39884,7 +39912,7 @@ var SKILL_default2 = '---\nname: backlog\ndescription: "\uD559\uC2B5 \uBC31\uB85
|
|
|
39884
39912
|
var SKILL_default3 = '---\nname: research\ndescription: "\uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uC5EC \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uAC1C\uB150/\uC6A9\uC5B4\uB97C \uD30C\uC545\uD558\uACE0, \uBC31\uB85C\uADF8\uB85C \uC815\uB9AC"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uAC1C\uB150/\uC758\uC874 \uAD00\uACC4 \uD30C\uC545 \u2192 \uBC31\uB85C\uADF8 \uD30C\uC77C \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (search \uD30C\uB77C\uBBF8\uD130\uB85C \uC8FC\uC81C \uAC80\uC0C9)\n\n## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. `til_list(search=\uC8FC\uC81C)`\uB85C \uC774\uBBF8 \uD559\uC2B5\uD55C \uC8FC\uC81C \uD655\uC778 \u2192 \uC911\uBCF5 \uBC31\uB85C\uADF8 \uBC29\uC9C0\n2. \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC8FC\uC81C \uC870\uC0AC, \uD544\uC694 \uAC1C\uB150\xB7\uC6A9\uC5B4\xB7\uC120\uD589 \uC9C0\uC2DD \uD30C\uC545\n3. \uC18C\uC8FC\uC81C \uBD84\uD574 \uD6C4 \uC9C1\uC811 \uB9AC\uC11C\uCE58\n4. \uC18C\uC8FC\uC81C \uAC04 \uC758\uC874 \uAD00\uACC4 \uBD84\uC11D\n\n## Phase 2: \uBC31\uB85C\uADF8 \uC815\uB9AC\n\n1. \uD559\uC2B5 \uC21C\uC11C \uC815\uB82C: \uC120\uD589 \uC9C0\uC2DD \u2192 \uD575\uC2EC \uAC1C\uB150 \u2192 \uC2EC\uD654\n2. \uAC01 \uD56D\uBAA9\uC5D0 1\uC904 \uC124\uBA85\n3. \uC0AC\uC6A9\uC790 \uD53C\uB4DC\uBC31 (\uCD94\uAC00/\uC81C\uAC70/\uC21C\uC11C \uBCC0\uACBD)\n\n## Phase 3: \uC800\uC7A5\n\n1. `./til/{\uCE74\uD14C\uACE0\uB9AC}/backlog.md`\uC5D0 \uC800\uC7A5 (\uD3F4\uB354 \uC790\uB3D9 \uC0DD\uC131)\n2. \uAE30\uC874 backlog.md \uC788\uC73C\uBA74 \uBCD1\uD569:\n - `[x]` \uC644\uB8CC \uD56D\uBAA9 \uBCF4\uC874\n - \uB3D9\uC77C \uD56D\uBAA9 \uCCB4\uD06C \uC0C1\uD0DC \uC720\uC9C0\n - \uAE30\uC874 sources \uBCF4\uC874, \uC0C8 \uD56D\uBAA9\uB9CC \uCD94\uAC00\n3. TIL MOC\uC5D0 \uBC31\uB85C\uADF8 \uB9C1\uD06C \uCD94\uAC00\n4. atomic commit: `\u{1F4CB} research: {\uC8FC\uC81C} \uD559\uC2B5 \uBC31\uB85C\uADF8 - {\uCE74\uD14C\uACE0\uB9AC}` (push \uC548 \uD568)\n\n## \uBC31\uB85C\uADF8 \uD15C\uD50C\uB9BF\n\n```markdown\n---\ntags: [backlog, {\uCE74\uD14C\uACE0\uB9AC}]\naliases: ["Backlog - {\uC8FC\uC81C}"]\nupdated: YYYY-MM-DD\nsources:\n slug-a: [https://url-1]\n---\n\n# {\uC8FC\uC81C} \uD559\uC2B5 \uBC31\uB85C\uADF8\n\n## \uC120\uD589 \uC9C0\uC2DD\n- [ ] [\uAC1C\uB150A](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-a}.md) - \uC124\uBA85\n\n## \uD575\uC2EC \uAC1C\uB150\n- [ ] [\uAC1C\uB150C](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-c}.md) - \uC124\uBA85\n\n## \uC2EC\uD654\n- [ ] [\uAC1C\uB150E](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-e}.md) - \uC124\uBA85\n```\n\n## \uC778\uC218\n\n- \uCCAB \uBC88\uC9F8: \uB9AC\uC11C\uCE58 \uC8FC\uC81C (\uD544\uC218)\n- \uB450 \uBC88\uC9F8: \uCE74\uD14C\uACE0\uB9AC (\uC120\uD0DD, \uBBF8\uC9C0\uC815 \uC2DC \uC790\uB3D9 \uCD94\uB860)\n\n## \uADDC\uCE59\n\n- \uD56D\uBAA9\uB2F9 1\uC904 \uC124\uBA85, 20\uAC1C \uCD08\uACFC \uC2DC \uBD84\uB9AC\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)`\n';
|
|
39885
39913
|
|
|
39886
39914
|
// vault-assets/skills/save/SKILL.md
|
|
39887
|
-
var SKILL_default4 = '---\nname: save\ndescription: "\uD559\uC2B5 \uB0B4\uC6A9\uC744 TIL \uD30C\uC77C\uB85C \uC800\uC7A5\uD558\uACE0 Daily \uB178\uD2B8, MOC, \uBC31\uB85C\uADF8\uB97C \uC77C\uAD04 \uC5C5\uB370\uC774\uD2B8"\nargument-hint: "[\uC8FC\uC81C] [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\n\uD559\uC2B5 \uB300\uD654 \u2192 TIL \uD30C\uC77C \uC800\uC7A5 \u2192 Daily/MOC/\uBC31\uB85C\uADF8 \uC5C5\uB370\uC774\uD2B8 \u2192 \uBB38\uC11C \uB9AC\uBDF0 \u2192 \uCEE4\uBC0B.\n\n## MCP \uB3C4\uAD6C\n\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545\n- `til_list`: \uAE30\uC874 TIL \uC911\uBCF5 \uD655\uC778\n- `
|
|
39915
|
+
var SKILL_default4 = '---\nname: save\ndescription: "\uD559\uC2B5 \uB0B4\uC6A9\uC744 TIL \uD30C\uC77C\uB85C \uC800\uC7A5\uD558\uACE0 Daily \uB178\uD2B8, MOC, \uBC31\uB85C\uADF8\uB97C \uC77C\uAD04 \uC5C5\uB370\uC774\uD2B8"\nargument-hint: "[\uC8FC\uC81C] [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\n\uD559\uC2B5 \uB300\uD654 \u2192 TIL \uD30C\uC77C \uC800\uC7A5 \u2192 Daily/MOC/\uBC31\uB85C\uADF8 \uC5C5\uB370\uC774\uD2B8 \u2192 \uBB38\uC11C \uB9AC\uBDF0 \u2192 \uCEE4\uBC0B.\n\n## MCP \uB3C4\uAD6C\n\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545\n- `til_list`: \uAE30\uC874 TIL \uC911\uBCF5 \uD655\uC778\n- `til_save_note`: TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uC11C\uBC84 \uBCF4\uC7A5, auto_check_backlog\uB85C \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C)\n- `vault_get_active_file`: \uC0AC\uC6A9\uC790 \uD30C\uC77C \uCEE8\uD14D\uC2A4\uD2B8\n\n## Step 1: \uCEE8\uD14D\uC2A4\uD2B8 \uD655\uC778\n\n1. \uC8FC\uC81C\xB7\uCE74\uD14C\uACE0\uB9AC \uD30C\uC545. \uBD88\uBA85\uD655\uD558\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC9C8\uBB38.\n2. `Read`\uB85C `til/{category}/{slug}.md` \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778.\n\n## Step 2: \uB9C1\uD06C \uD6C4\uBCF4 \uD30C\uC545\n\n1. `til_get_context` \uB610\uB294 MOC/\uBC31\uB85C\uADF8\uB85C \uAE30\uC874 TIL\xB7\uBC31\uB85C\uADF8 \uD56D\uBAA9 \uD30C\uC545\n2. \uAE30\uC874 TIL/\uBC31\uB85C\uADF8 \uD56D\uBAA9 \u2192 \uBCF8\uBB38\uC5D0\uC11C \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C \uC0AC\uC6A9\n3. \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uAC1C\uB150 \u2192 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778 \uD6C4 \uAD00\uB828 \uB178\uD2B8\uC5D0\uB9CC \uCD94\uAC00\n\n## Step 3: TIL \uD30C\uC77C \uC800\uC7A5\n\n\uACBD\uB85C: `./til/{\uCE74\uD14C\uACE0\uB9AC}/{\uC8FC\uC81C\uC2AC\uB7EC\uADF8}.md` (\uC2AC\uB7EC\uADF8: \uC601\uBB38 \uC18C\uBB38\uC790, \uD558\uC774\uD508)\n\n**\uC0C8 \uD30C\uC77C \uC800\uC7A5**: `til_save_note` MCP \uB3C4\uAD6C\uB85C \uC800\uC7A5. frontmatter(title, date, category, tags, aliases)\uC640 \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD55C\uB2E4.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: `date +%Y-%m-%dT%H:%M:%S` \uBA85\uB839\uC73C\uB85C \uB85C\uCEEC \uC2DC\uAC01\uC744 \uC870\uD68C\uD558\uC5EC \uC804\uB2EC\n- `tags`: \uBC18\uB4DC\uC2DC "til" \uD3EC\uD568\n- `aliases`: ["\uD55C\uAE00 \uC81C\uBAA9", "\uC601\uBB38 \uC81C\uBAA9"]\n- `content`: frontmatter \uC81C\uC678\uD55C \uBCF8\uBB38 \uB9C8\uD06C\uB2E4\uC6B4\n\n**\uB3D9\uC77C \uC2AC\uB7EC\uADF8 \uD30C\uC77C \uC788\uC744 \uB54C** (Step 1\uC5D0\uC11C `Read`\uB85C \uAC10\uC9C0):\n- `/til` \uC2EC\uD654 \uD559\uC2B5\uC774 \uC5F0\uC18D\uB41C \uACBD\uC6B0\uB9CC \uC790\uB3D9 \uBCD1\uD569 (\uAE30\uC874 \uB0B4\uC6A9 \uC720\uC9C0 + \uBCF4\uAC15, `updated` \uCD94\uAC00)\n- \uADF8 \uC678: \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCD1\uD569/\uB36E\uC5B4\uC4F0\uAE30 \uD655\uC778\n- \uBCD1\uD569 \uC2DC\uC5D0\uB294 `til_save_note` \uB300\uC2E0 \uC9C1\uC811 Read\u2192Edit\uC73C\uB85C \uAE30\uC874 \uB0B4\uC6A9\uC5D0 \uBCF4\uAC15\n\n### TIL \uBCF8\uBB38 \uD15C\uD50C\uB9BF\n\n```markdown\n# \uC81C\uBAA9\n\n> [!tldr] \uD55C\uC904 \uC694\uC57D\n\n## \uD575\uC2EC \uB0B4\uC6A9\n## \uC608\uC2DC\n## \uCC38\uACE0 \uC790\uB8CC\n- [\uC81C\uBAA9](URL)\n## \uAD00\uB828 \uB178\uD2B8\n- [TIL](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)\n```\n\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)` \u2014 `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0\n\n## Step 4: \uC5F0\uAD00 \uD30C\uC77C \uC5C5\uB370\uC774\uD2B8\n\n\uC544\uB798 3\uAC1C \uD30C\uC77C\uC744 **\uC9C1\uC811** \uC21C\uCC28 \uC5C5\uB370\uC774\uD2B8\uD55C\uB2E4 (subagent \uC0AC\uC6A9 \uAE08\uC9C0):\n\n1. Daily \uB178\uD2B8 (`./Daily/YYYY-MM-DD.md`): \uCE74\uD14C\uACE0\uB9AC\uBCC4 TIL \uB9C1\uD06C \uCD94\uAC00 (\uC5C6\uC73C\uBA74 \uC0DD\uC131)\n2. TIL MOC (`./til/TIL MOC.md`): \uCE74\uD14C\uACE0\uB9AC \uC139\uC158\uC5D0 \uD56D\uBAA9 \uCD94\uAC00 (\uC5C6\uC73C\uBA74 \uC0DD\uC131)\n3. \uBC31\uB85C\uADF8: `til_save_note`\uC758 `auto_check_backlog: true`\uB85C \uC774\uBBF8 \uCC98\uB9AC\uB428 (\uBCC4\uB3C4 \uD638\uCD9C \uBD88\uD544\uC694)\n\nDaily/MOC: Read \u2192 \uC704\uCE58 \uD655\uC778 \u2192 Edit. \uD30C\uC77C \uC5C6\uC73C\uBA74 \uC0DD\uC131.\n\n## Step 5: \uBB38\uC11C \uB9AC\uBDF0\n\n\uC800\uC7A5\uB41C TIL \uC804\uCCB4 \uB0B4\uC6A9 \uD45C\uC2DC \u2192 `AskUserQuestion`\uC73C\uB85C \uD655\uC778 ("\uD655\uC778 \uC644\uB8CC" / "\uC218\uC815 \uD544\uC694").\n\n## Step 6: \uBCF5\uC2B5 \uB4F1\uB85D\n\n`AskUserQuestion`\uC73C\uB85C "\uC774 TIL\uC744 \uBCF5\uC2B5 \uB300\uC0C1\uC5D0 \uCD94\uAC00\uD560\uAE4C\uC694?" \uC9C8\uBB38.\n\uC0AC\uC6A9\uC790 \uB3D9\uC758 \uC2DC `til_review_update` (action: "review", grade: 4) \uD638\uCD9C\uD558\uC5EC SRS \uBA54\uD0C0\uB370\uC774\uD130 \uC0DD\uC131.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {\uD55C\uAE00 \uC81C\uBAA9}({\uC601\uBB38 \uC81C\uBAA9}) - {\uCE74\uD14C\uACE0\uB9AC}` (push \uC548 \uD568)\n\n## \uADDC\uCE59\n\n- frontmatter \uD544\uC218: date, category, tags, aliases (\uB204\uB77D \uC2DC \uC800\uC7A5 \uC804 \uBCF4\uC644)\n- tags\uC5D0 \uBC18\uB4DC\uC2DC "til" \uD3EC\uD568 (\uC815\uC801 \uC0AC\uC774\uD2B8 \uD544\uD130 \uAE30\uC900)\n- `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0 \u2014 `[\uD45C\uC2DC\uBA85](\uACBD\uB85C)` \uD615\uC2DD\uB9CC \uC0AC\uC6A9\n- TIL\uB9CC \uC800\uC7A5\uD558\uACE0 Daily/MOC/\uBC31\uB85C\uADF8 \uB204\uB77D\uD558\uC9C0 \uC54A\uB294\uB2E4\n- Callout \uD65C\uC6A9: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- \uBCF5\uC7A1\uD55C \uAC1C\uB150\uC740 Mermaid \uB2E4\uC774\uC5B4\uADF8\uB7A8\uC73C\uB85C \uC2DC\uAC01\uD654 (TIL\uB2F9 \uCD5C\uB300 1\uAC1C)\n- \uBBFC\uAC10 \uC815\uBCF4 \uB300\uCCB4\uAC12 \uC0AC\uC6A9\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n';
|
|
39888
39916
|
|
|
39889
39917
|
// vault-assets/skills/migrate-links/SKILL.md
|
|
39890
39918
|
var SKILL_default5 = '---\nname: migrate-links\ndescription: "vault\uC758 [[wikilink]]\uB97C \uD45C\uC900 \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C\uB85C \uC77C\uAD04 \uBCC0\uD658"\nargument-hint: ""\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Migrate Links Skill\n\n`[[wikilink]]` \u2192 `[text](path.md)` \uC77C\uAD04 \uBCC0\uD658.\n\n## CLI\n\n```bash\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . scan\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . migrate\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . verify\n```\n\n## \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. **\uC2A4\uCE94**: `scan` \uC2E4\uD589 \u2192 wikilink \uC5C6\uC73C\uBA74 \uC885\uB8CC, \uC788\uC73C\uBA74 `AskUserQuestion`\uC73C\uB85C \uD655\uC778\n2. **\uBCC0\uD658**: `migrate` \uC2E4\uD589\n3. **\uAC80\uC99D**: `verify` \uC2E4\uD589 \u2192 \uC794\uC5EC wikilink \uC548\uB0B4\n4. **\uCEE4\uBC0B**: `\u267B\uFE0F refactor: [[wikilink]] \u2192 \uD45C\uC900 \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C \uC77C\uAD04 \uBCC0\uD658` (push \uC548 \uD568)\n\n## \uBCC0\uD658 \uADDC\uCE59\n\n- `[[path|Display]]` \u2192 `[Display](path.md)`\n- `[[path]]` \u2192 `[path](path.md)`\n- \uCF54\uB4DC \uBE14\uB85D \uB0B4\uBD80 \uC81C\uC678, \uD14C\uC774\uBE14 `\\|` \uC774\uC2A4\uCF00\uC774\uD504 \uCC98\uB9AC\n';
|
|
@@ -39899,10 +39927,10 @@ var SKILL_default7 = '---\nname: setup-pages\ndescription: "(deprecated) /omt-se
|
|
|
39899
39927
|
var SKILL_default8 = '---\nname: omt-setup\ndescription: "oh-my-til \uD1B5\uD569 \uC124\uC815 \u2014 \uBC30\uD3EC \uC124\uC815"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# OMT Setup Skill\n\noh-my-til \uC124\uC815\uC744 \uD55C \uACF3\uC5D0\uC11C \uAD00\uB9AC. \uC11C\uBE0C\uCEE4\uB9E8\uB4DC\uB85C \uB3D9\uC791.\n\n## \uC11C\uBE0C\uCEE4\uB9E8\uB4DC\n\n### `/omt-setup` (\uC778\uC218 \uC5C6\uC74C)\n\n`oh-my-til.json` \uC77D\uC5B4\uC11C \uD604\uC7AC \uC124\uC815 \uD45C\uC2DC + \uC11C\uBE0C\uCEE4\uB9E8\uB4DC \uC548\uB0B4:\n- `deploy` \u2014 GitHub Pages \uBC30\uD3EC \uC124\uC815\n\n### `/omt-setup deploy`\n\nGitHub Pages \uBC30\uD3EC \uC124\uC815:\n1. `.git/` \uD655\uC778 (\uC5C6\uC73C\uBA74 \uC548\uB0B4 \uD6C4 \uC885\uB8CC)\n2. `.github/workflows/deploy-til.yml` \uD655\uC778 (\uC788\uC73C\uBA74 \uC218\uC815 \uD544\uC694 \uC5EC\uBD80 \uC9C8\uBB38)\n3. `oh-my-til.json` deploy \uC139\uC158 \uC124\uC815 (\uC81C\uBAA9, \uBD80\uC81C\uBAA9, GitHub URL)\n4. \uC6CC\uD06C\uD50C\uB85C\uC6B0 YAML \uC0DD\uC131\n5. \uC644\uB8CC \uC548\uB0B4 (Settings \u2192 Pages \u2192 GitHub Actions \uC120\uD0DD, \uCEE4\uBC0B\xB7push \uBA85\uB839\uC5B4)\n\n## \uADDC\uCE59\n\n- \uD55C\uAD6D\uC5B4 \uCD9C\uB825\n- `oh-my-til.json`\uC758 \uAE30\uC874 \uC124\uC815 \uBCF4\uC874, \uD574\uB2F9 \uC139\uC158\uB9CC \uCD94\uAC00/\uC218\uC815\n- \uCEE4\uBC0B\uC740 \uD558\uC9C0 \uC54A\uC74C (\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA85\uB839\uC5B4 \uC548\uB0B4\uB9CC)\n';
|
|
39900
39928
|
|
|
39901
39929
|
// vault-assets/skills/til-review/SKILL.md
|
|
39902
|
-
var SKILL_default9 = '---\nname: til-review\ndescription: "SRS \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158 (\uAC04\uACA9 \uBC18\uBCF5 \uD559\uC2B5)"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS(\uAC04\uACA9 \uBC18\uBCF5) \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158. SM-2 \uC54C\uACE0\uB9AC\uC998\uC73C\uB85C \uBCF5\uC2B5 \uC77C\uC815\uC744 \uAD00\uB9AC\uD55C\uB2E4.\n\n## MCP \uB3C4\uAD6C\n\n- `til_review_list`: \uC624\uB298 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update`: \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D (grade 0-5) \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n
|
|
39930
|
+
var SKILL_default9 = '---\nname: til-review\ndescription: "SRS \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158 (\uAC04\uACA9 \uBC18\uBCF5 \uD559\uC2B5)"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS(\uAC04\uACA9 \uBC18\uBCF5) \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158. SM-2 \uC54C\uACE0\uB9AC\uC998\uC73C\uB85C \uBCF5\uC2B5 \uC77C\uC815\uC744 \uAD00\uB9AC\uD55C\uB2E4.\n\n## MCP \uB3C4\uAD6C\n\n- `til_review_list`: \uC624\uB298 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4 (`include_content: true`\uB85C \uB178\uD2B8 \uB0B4\uC6A9 \uD568\uAED8 \uB85C\uB4DC)\n- `til_review_update`: \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D (grade 0-5) \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (`include_content: true`, \uCE74\uD14C\uACE0\uB9AC \uC778\uC790 \uC788\uC73C\uBA74 \uC804\uB2EC).\n\n- \uCE74\uB4DC 0\uAC1C \u2192 "\uC624\uB298 \uBCF5\uC2B5 \uC5C6\uC74C" \uC548\uB0B4 + \uBBF8\uB4F1\uB85D TIL \uB4F1\uB85D \uC81C\uC548 (Step 5\uB85C)\n- \uCE74\uB4DC \uC788\uC74C \u2192 \uBAA9\uB85D \uD45C\uC2DC + Step 2\uB85C\n\n## Step 2: \uD3C9\uAC00 \uBAA8\uB4DC \uC120\uD0DD\n\n`AskUserQuestion`\uC73C\uB85C \uC120\uD0DD:\n- "\uAC04\uB2E8 \uBAA8\uB4DC (Again / Good)"\n- "\uC0C1\uC138 \uBAA8\uB4DC (Again / Hard / Good / Easy)"\n\n## Step 3: \uCE74\uB4DC\uBCC4 \uBCF5\uC2B5 \uB8E8\uD504\n\n\uAC01 \uCE74\uB4DC\uC5D0 \uB300\uD574:\n\n1. \uC81C\uBAA9\xB7\uCE74\uD14C\uACE0\uB9AC\xB7\uBCF5\uC2B5 \uC815\uBCF4(\uBC18\uBCF5 \uD69F\uC218, EF, \uC5F0\uCCB4\uC77C) \uD45C\uC2DC\n2. Step 1\uC5D0\uC11C \uC774\uBBF8 \uB85C\uB4DC\uB41C `content` \uC0AC\uC6A9 (\uCD94\uAC00 MCP \uD638\uCD9C \uBD88\uD544\uC694)\n3. \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC9C8\uBB38 \uD615\uC2DD\uC73C\uB85C \uC81C\uC2DC (\uB0B4\uC6A9 \uAE30\uBC18\uC73C\uB85C 1~2\uAC1C \uC9C8\uBB38 \uC0DD\uC131)\n4. \uC0AC\uC6A9\uC790 \uB2F5\uBCC0 \uB300\uAE30\n5. \uD53C\uB4DC\uBC31 \uC81C\uACF5 (\uC815\uB2F5/\uBCF4\uCDA9 \uC124\uBA85)\n6. `AskUserQuestion`\uC73C\uB85C \uD3C9\uAC00 \uC785\uB825:\n - \uAC04\uB2E8 \uBAA8\uB4DC: "Good (\uAE30\uC5B5\uB0A8)" / "Again (\uBAA8\uB984)" / "\uAC74\uB108\uB6F0\uAE30" / "\uBCF5\uC2B5 \uC911\uB2E8"\n - \uC0C1\uC138 \uBAA8\uB4DC: "Again (\uC2E4\uD328)" / "Hard (\uC5B4\uB835\uAC8C \uC815\uB2F5)" / "Good (\uC815\uC0C1)" / "Easy (\uC644\uBCBD)"\n - grade \uB9E4\uD551: Again=1, Hard=3, Good=4, Easy=5\n - "\uAC74\uB108\uB6F0\uAE30" \uC120\uD0DD \uC2DC \uC774 \uCE74\uB4DC\uB294 \uD3C9\uAC00\uD558\uC9C0 \uC54A\uACE0 \uB2E4\uC74C\uC73C\uB85C\n - "\uBCF5\uC2B5 \uC911\uB2E8" \uC120\uD0DD \uC2DC Step 4\uB85C \uC774\uB3D9\n - \uC0C1\uC138 \uBAA8\uB4DC\uC5D0\uC11C \uAC74\uB108\uB6F0\uAE30/\uC911\uB2E8: "Other" \uC120\uD0DD \uD6C4 "\uAC74\uB108\uB6F0\uAE30" \uB610\uB294 "\uBCF5\uC2B5 \uC911\uB2E8" \uC785\uB825\n7. \uAC74\uB108\uB6F0\uAE30\uAC00 \uC544\uB2CC \uACBD\uC6B0 `til_review_update` (action: "review", grade) \uD638\uCD9C\n8. \uACB0\uACFC \uC694\uC57D (\uB2E4\uC74C \uBCF5\uC2B5\uC77C, interval) \uD45C\uC2DC\n\n## Step 4: \uC644\uB8CC \uD1B5\uACC4\n\n\uBAA8\uB4E0 \uCE74\uB4DC \uC644\uB8CC \uD6C4:\n- \uBCF5\uC2B5\uD55C \uCE74\uB4DC \uC218, \uD3C9\uADE0 grade\n- remaining > 0\uC774\uBA74 "N\uAC1C \uB354 \uB0A8\uC74C, \uB0B4\uC77C \uC774\uC5B4\uC11C" \uC548\uB0B4\n- `til_review_list` \uC7AC\uD638\uCD9C\uD558\uC5EC \uCD5C\uC2E0 \uD1B5\uACC4 \uD45C\uC2DC\n\n## Step 5: TIL \uB4F1\uB85D (\uC120\uD0DD)\n\n\uCE74\uB4DC\uAC00 \uC5C6\uC744 \uB54C \uB610\uB294 \uC0AC\uC6A9\uC790 \uC694\uCCAD \uC2DC:\n- `til_list`\uB85C \uC804\uCCB4 TIL \uBAA9\uB85D \uD45C\uC2DC\n- \uC0AC\uC6A9\uC790\uAC00 \uBCF5\uC2B5 \uB300\uC0C1\uC5D0 \uCD94\uAC00\uD560 \uD30C\uC77C \uC120\uD0DD\n- \uC120\uD0DD\uB41C \uD30C\uC77C\uB9C8\uB2E4 `til_review_update` (action: "review", grade: 4) \uD638\uCD9C\n\n## \uADDC\uCE59\n\n- \uD55C \uC138\uC158 \uCD5C\uB300 20\uAC1C (\uACFC\uBD80\uD558 \uBC29\uC9C0)\n- \uC5F0\uCCB4 \uCE74\uB4DC \uC6B0\uC120 (\uAC00\uC7A5 \uAE09\uD55C \uAC83 \uBA3C\uC800)\n- \uBCF5\uC2B5 \uD574\uC81C: \uC0AC\uC6A9\uC790\uAC00 "\uC774 \uCE74\uB4DC \uC81C\uAC70"\uD558\uBA74 `til_review_update` (action: "remove") \uD638\uCD9C\n- \uD55C\uAD6D\uC5B4 \uC9C4\uD589, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n';
|
|
39903
39931
|
|
|
39904
39932
|
// vault-assets/claude-md-section.md
|
|
39905
|
-
var claude_md_section_default = "## \uD559\uC2B5 \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. `/research <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uBC31\uB85C\uADF8 \uC0DD\uC131\n2. `/backlog [\uCE74\uD14C\uACE0\uB9AC]` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589 \uD655\uC778\n3. `/til <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 \uC800\uC7A5\n4. `/save` \u2014 TIL \uC800\uC7A5 (Daily/MOC/\uBC31\uB85C\uADF8 \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8)\n5. `/til-review [\uCE74\uD14C\uACE0\uB9AC]` \u2014 SRS \uAE30\uBC18 \uAC04\uACA9 \uBC18\uBCF5 \uBCF5\uC2B5\n\n## MCP \uB3C4\uAD6C\n\n- `
|
|
39933
|
+
var claude_md_section_default = "## \uD559\uC2B5 \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. `/research <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uBC31\uB85C\uADF8 \uC0DD\uC131\n2. `/backlog [\uCE74\uD14C\uACE0\uB9AC]` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589 \uD655\uC778\n3. `/til <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 \uC800\uC7A5\n4. `/save` \u2014 TIL \uC800\uC7A5 (Daily/MOC/\uBC31\uB85C\uADF8 \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8)\n5. `/til-review [\uCE74\uD14C\uACE0\uB9AC]` \u2014 SRS \uAE30\uBC18 \uAC04\uACA9 \uBC18\uBCF5 \uBCF5\uC2B5\n\n## MCP \uB3C4\uAD6C\n\n**\uD559\uC2B5 \uCEE8\uD14D\uC2A4\uD2B8:**\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uAE30\uC874 \uD559\uC2B5 \uCEE8\uD14D\uC2A4\uD2B8 (\uACBD\uB85C/\uB0B4\uC6A9 \uB9E4\uCE6D, backlink, \uBBF8\uC791\uC131 \uB9C1\uD06C)\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984 (\uC2DC\uAC04\uC21C)\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uC5F4\uB9B0 \uD30C\uC77C\n\n**TIL \uAD00\uB9AC:**\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958 (search \uD544\uD130)\n- `til_save_note` \u2014 TIL \uC800\uC7A5 (frontmatter \uBCF4\uC7A5, auto_check_backlog\uB85C \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C)\n\n**\uBC31\uB85C\uADF8:**\n- `til_backlog_status` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589\uB960\n- `til_backlog_check` \u2014 \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC (\uB2E8\uB3C5 \uC0AC\uC6A9 \uC2DC)\n\n**\uBCF5\uC2B5 (SRS):**\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4 (include_content)\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D\n\n**\uD1B5\uACC4:**\n- `til_dashboard` \u2014 \uD559\uC2B5 \uB300\uC2DC\uBCF4\uB4DC \uD1B5\uACC4\n\n### \uC5F0\uACB0\n\n```bash\n# HTTP (Obsidian \uD50C\uB7EC\uADF8\uC778 \uB610\uB294 oh-my-til serve \uC0AC\uC6A9 \uC2DC)\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n\n# stdio (Obsidian \uC5C6\uC774 \uB3C5\uB9BD \uC2E4\uD589, Claude Desktop scheduled task \uB4F1)\nclaude mcp add oh-my-til -- npx oh-my-til mcp /path/to/vault\n```\n";
|
|
39906
39934
|
|
|
39907
39935
|
// vault-assets/agents/til-fetcher.md
|
|
39908
39936
|
var til_fetcher_default = '---\nname: til-fetcher\ndescription: \uC18C\uC2A4 URL \uCF58\uD150\uCE20\uB97C \uD328\uCE58\uD558\uC5EC \uD559\uC2B5 \uC790\uB8CC\uB85C \uC694\uC57D\uD558\uB294 \uC804\uC6A9 \uC5D0\uC774\uC804\uD2B8\ntools: Read, WebFetch\nmodel: haiku\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# til-fetcher\n\n\uC18C\uC2A4 URL\uC758 \uCF58\uD150\uCE20\uB97C \uD328\uCE58\uD558\uACE0 \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC694\uC57D\uD558\uB294 \uC804\uC6A9 \uC5D0\uC774\uC804\uD2B8.\n\n## \uC5ED\uD560\n\n- `/til` \uC2A4\uD0AC\uC758 Phase 1\uC5D0\uC11C sourceUrls \uD328\uCE58 subagent\uB85C \uC0AC\uC6A9\uB41C\uB2E4\n- \uC8FC\uC5B4\uC9C4 URL(1\uAC1C \uB610\uB294 \uC5EC\uB7EC \uAC1C)\uC744 WebFetch\uB85C \uC21C\uCC28 \uC77D\uACE0 \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC694\uC57D\uD55C\uB2E4\n- \uC5EC\uB7EC URL\uC774 \uC804\uB2EC\uB418\uBA74 \uAC01\uAC01 \uD328\uCE58 \uD6C4 \uD1B5\uD569 \uC694\uC57D\uC744 \uBC18\uD658\uD55C\uB2E4\n\n## \uCD9C\uB825 \uD615\uC2DD\n\n- \uD575\uC2EC \uB0B4\uC6A9 \uC694\uC57D (\uD55C\uAD6D\uC5B4, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30)\n- \uCF54\uB4DC \uC608\uC2DC\uAC00 \uC788\uC73C\uBA74 \uD3EC\uD568\n';
|
|
@@ -41241,13 +41269,14 @@ function generateProfileHtml(config2, summaryCardsHtml, heatmapHtml, recentTilsH
|
|
|
41241
41269
|
// src/cli/index.ts
|
|
41242
41270
|
var path5 = __toESM(require("path"));
|
|
41243
41271
|
var fs4 = __toESM(require("fs"));
|
|
41244
|
-
var VERSION = true ? "0.
|
|
41272
|
+
var VERSION = true ? "0.13.0" : "0.0.0";
|
|
41245
41273
|
function printUsage() {
|
|
41246
41274
|
console.log(`oh-my-til v${VERSION}
|
|
41247
41275
|
|
|
41248
41276
|
Usage:
|
|
41249
41277
|
oh-my-til init [<path>] [options] Install skills, rules, and CLAUDE.md
|
|
41250
|
-
oh-my-til serve [<path>] [options] Start MCP server
|
|
41278
|
+
oh-my-til serve [<path>] [options] Start MCP server (HTTP)
|
|
41279
|
+
oh-my-til mcp [<path>] [options] Start MCP server (stdio)
|
|
41251
41280
|
oh-my-til deploy [<path>] [options] Generate static site from TIL files
|
|
41252
41281
|
oh-my-til version Print version
|
|
41253
41282
|
|
|
@@ -41258,6 +41287,9 @@ Options (serve):
|
|
|
41258
41287
|
--til-path <path> TIL folder path (default: til)
|
|
41259
41288
|
--port <port> MCP server port (default: 22360)
|
|
41260
41289
|
|
|
41290
|
+
Options (mcp):
|
|
41291
|
+
--til-path <path> TIL folder path (default: til)
|
|
41292
|
+
|
|
41261
41293
|
Options (deploy):
|
|
41262
41294
|
--til-path <path> TIL folder path (default: til)
|
|
41263
41295
|
--out <path> Output directory (default: _site)
|
|
@@ -41335,6 +41367,24 @@ To start MCP server: oh-my-til serve ${basePath}`);
|
|
|
41335
41367
|
} else {
|
|
41336
41368
|
console.log("\nUsing Obsidian? Run init inside your vault to auto-install the plugin.");
|
|
41337
41369
|
}
|
|
41370
|
+
} else if (command === "mcp") {
|
|
41371
|
+
const storage = new FsStorage(basePath);
|
|
41372
|
+
const metadata = new FsMetadata(basePath);
|
|
41373
|
+
const mcpServer = new McpServer({
|
|
41374
|
+
name: "oh-my-til",
|
|
41375
|
+
version: VERSION
|
|
41376
|
+
});
|
|
41377
|
+
registerTools(mcpServer, storage, metadata, tilPath);
|
|
41378
|
+
const transport = new StdioServerTransport();
|
|
41379
|
+
await mcpServer.connect(transport);
|
|
41380
|
+
process.stderr.write(`oh-my-til MCP server running (stdio, tilPath=${tilPath})
|
|
41381
|
+
`);
|
|
41382
|
+
const shutdown = async () => {
|
|
41383
|
+
await mcpServer.close();
|
|
41384
|
+
process.exit(0);
|
|
41385
|
+
};
|
|
41386
|
+
process.on("SIGINT", shutdown);
|
|
41387
|
+
process.on("SIGTERM", shutdown);
|
|
41338
41388
|
} else if (command === "serve") {
|
|
41339
41389
|
const storage = new FsStorage(basePath);
|
|
41340
41390
|
const metadata = new FsMetadata(basePath);
|
package/main.js
CHANGED
|
@@ -47477,77 +47477,6 @@ var http = __toESM(require("http"));
|
|
|
47477
47477
|
|
|
47478
47478
|
// src/mcp/tools.ts
|
|
47479
47479
|
function registerTools(server, storage, metadata, tilPath) {
|
|
47480
|
-
server.registerTool(
|
|
47481
|
-
"vault_read_note",
|
|
47482
|
-
{
|
|
47483
|
-
title: "Read Note",
|
|
47484
|
-
description: "Vault\uC5D0\uC11C \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uC77D\uC2B5\uB2C8\uB2E4",
|
|
47485
|
-
inputSchema: external_exports3.object({
|
|
47486
|
-
path: external_exports3.string().describe("\uB178\uD2B8 \uD30C\uC77C \uACBD\uB85C (\uC608: til/typescript/generics.md)")
|
|
47487
|
-
})
|
|
47488
|
-
},
|
|
47489
|
-
async ({ path: path3 }) => {
|
|
47490
|
-
const text = await storage.readFile(path3);
|
|
47491
|
-
if (text === null) {
|
|
47492
|
-
return { content: [{ type: "text", text: `Error: \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${path3}` }], isError: true };
|
|
47493
|
-
}
|
|
47494
|
-
return { content: [{ type: "text", text }] };
|
|
47495
|
-
}
|
|
47496
|
-
);
|
|
47497
|
-
server.registerTool(
|
|
47498
|
-
"vault_list_files",
|
|
47499
|
-
{
|
|
47500
|
-
title: "List Files",
|
|
47501
|
-
description: "Vault \uD3F4\uB354 \uB0B4 \uD30C\uC77C \uBAA9\uB85D\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
47502
|
-
inputSchema: external_exports3.object({
|
|
47503
|
-
folder: external_exports3.string().optional().describe("\uD3F4\uB354 \uACBD\uB85C (\uC0DD\uB7B5 \uC2DC \uB8E8\uD2B8)"),
|
|
47504
|
-
extension: external_exports3.string().optional().describe("\uD544\uD130\uB9C1\uD560 \uD655\uC7A5\uC790 (\uC608: md)")
|
|
47505
|
-
})
|
|
47506
|
-
},
|
|
47507
|
-
async ({ folder, extension }) => {
|
|
47508
|
-
const files = await storage.listFiles();
|
|
47509
|
-
const filtered = files.filter((f) => {
|
|
47510
|
-
if (folder && !f.path.startsWith(folder + "/") && f.path !== folder)
|
|
47511
|
-
return false;
|
|
47512
|
-
if (extension && f.extension !== extension)
|
|
47513
|
-
return false;
|
|
47514
|
-
return true;
|
|
47515
|
-
});
|
|
47516
|
-
const list = filtered.map((f) => f.path).join("\n");
|
|
47517
|
-
return { content: [{ type: "text", text: list || "(\uD30C\uC77C \uC5C6\uC74C)" }] };
|
|
47518
|
-
}
|
|
47519
|
-
);
|
|
47520
|
-
server.registerTool(
|
|
47521
|
-
"vault_search",
|
|
47522
|
-
{
|
|
47523
|
-
title: "Search Vault",
|
|
47524
|
-
description: "Vault \uC804\uCCB4\uC5D0\uC11C \uD14D\uC2A4\uD2B8\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4",
|
|
47525
|
-
inputSchema: external_exports3.object({
|
|
47526
|
-
query: external_exports3.string().describe("\uAC80\uC0C9\uD560 \uD14D\uC2A4\uD2B8")
|
|
47527
|
-
})
|
|
47528
|
-
},
|
|
47529
|
-
async ({ query }) => {
|
|
47530
|
-
const files = (await storage.listFiles()).filter((f) => f.extension === "md");
|
|
47531
|
-
const results = [];
|
|
47532
|
-
const lowerQuery = query.toLowerCase();
|
|
47533
|
-
const BATCH_SIZE = 20;
|
|
47534
|
-
for (let i = 0; i < files.length && results.length < 50; i += BATCH_SIZE) {
|
|
47535
|
-
const batch = files.slice(i, i + BATCH_SIZE);
|
|
47536
|
-
const texts = await Promise.all(batch.map((f) => storage.readFile(f.path)));
|
|
47537
|
-
for (let j = 0; j < batch.length; j++) {
|
|
47538
|
-
const text2 = texts[j];
|
|
47539
|
-
if (text2 !== null && text2.toLowerCase().includes(lowerQuery)) {
|
|
47540
|
-
results.push(batch[j].path);
|
|
47541
|
-
}
|
|
47542
|
-
if (results.length >= 50)
|
|
47543
|
-
break;
|
|
47544
|
-
}
|
|
47545
|
-
}
|
|
47546
|
-
const text = results.length > 0 ? `${results.length}\uAC1C \uD30C\uC77C\uC5D0\uC11C \uBC1C\uACAC:
|
|
47547
|
-
${results.join("\n")}` : `"${query}"\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4`;
|
|
47548
|
-
return { content: [{ type: "text", text }] };
|
|
47549
|
-
}
|
|
47550
|
-
);
|
|
47551
47480
|
server.registerTool(
|
|
47552
47481
|
"vault_get_active_file",
|
|
47553
47482
|
{
|
|
@@ -47799,13 +47728,14 @@ ${text}` }] };
|
|
|
47799
47728
|
"til_review_list",
|
|
47800
47729
|
{
|
|
47801
47730
|
title: "Review List",
|
|
47802
|
-
description: "\uC624\uB298 \uBCF5\uC2B5\uD560 TIL \uCE74\uB4DC \uBAA9\uB85D\uACFC \uD1B5\uACC4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
47731
|
+
description: "\uC624\uB298 \uBCF5\uC2B5\uD560 TIL \uCE74\uB4DC \uBAA9\uB85D\uACFC \uD1B5\uACC4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. include_content=true\uB85C \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uD568\uAED8 \uAC00\uC838\uC624\uBA74 \uBCC4\uB3C4 \uD30C\uC77C \uC77D\uAE30\uB97C \uC904\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
|
|
47803
47732
|
inputSchema: external_exports3.object({
|
|
47804
47733
|
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1"),
|
|
47805
|
-
limit: external_exports3.number().min(1).max(100).optional().describe("\uCD5C\uB300 \uCE74\uB4DC \uC218 (\uAE30\uBCF8 20)")
|
|
47734
|
+
limit: external_exports3.number().min(1).max(100).optional().describe("\uCD5C\uB300 \uCE74\uB4DC \uC218 (\uAE30\uBCF8 20)"),
|
|
47735
|
+
include_content: external_exports3.boolean().optional().describe("true\uBA74 \uAC01 \uCE74\uB4DC\uC758 \uB178\uD2B8 \uB0B4\uC6A9\uC744 \uD568\uAED8 \uBC18\uD658 (\uAE30\uBCF8 false)")
|
|
47806
47736
|
})
|
|
47807
47737
|
},
|
|
47808
|
-
async ({ category, limit }) => {
|
|
47738
|
+
async ({ category, limit, include_content }) => {
|
|
47809
47739
|
var _a4, _b;
|
|
47810
47740
|
const allFiles = await storage.listFiles();
|
|
47811
47741
|
const srsFiles = [];
|
|
@@ -47837,6 +47767,18 @@ ${text}` }] };
|
|
|
47837
47767
|
const cards = filterDueCards(srsFiles, tilPath, void 0, effectiveLimit);
|
|
47838
47768
|
const stats = computeReviewStats(srsFiles, tilPath);
|
|
47839
47769
|
const remaining = Math.max(0, stats.dueToday - cards.length);
|
|
47770
|
+
if (include_content) {
|
|
47771
|
+
const contents = await Promise.all(cards.map((card) => storage.readFile(card.path)));
|
|
47772
|
+
const cardsWithContent = cards.map((card, i) => {
|
|
47773
|
+
var _a5;
|
|
47774
|
+
return {
|
|
47775
|
+
...card,
|
|
47776
|
+
content: (_a5 = contents[i]) != null ? _a5 : ""
|
|
47777
|
+
};
|
|
47778
|
+
});
|
|
47779
|
+
const data2 = { cards: cardsWithContent, stats, remaining };
|
|
47780
|
+
return { content: [{ type: "text", text: JSON.stringify(data2) }] };
|
|
47781
|
+
}
|
|
47840
47782
|
const data = { cards, stats, remaining };
|
|
47841
47783
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
47842
47784
|
}
|
|
@@ -47888,28 +47830,11 @@ ${text}` }] };
|
|
|
47888
47830
|
};
|
|
47889
47831
|
}
|
|
47890
47832
|
);
|
|
47891
|
-
server.registerTool(
|
|
47892
|
-
"til_exists",
|
|
47893
|
-
{
|
|
47894
|
-
title: "Check TIL Exists",
|
|
47895
|
-
description: "TIL \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD558\uB294\uC9C0 \uD655\uC778\uD569\uB2C8\uB2E4",
|
|
47896
|
-
inputSchema: external_exports3.object({
|
|
47897
|
-
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
47898
|
-
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)")
|
|
47899
|
-
})
|
|
47900
|
-
},
|
|
47901
|
-
async ({ category, slug }) => {
|
|
47902
|
-
const path3 = `${tilPath}/${category}/${slug}.md`;
|
|
47903
|
-
const exists = await storage.exists(path3);
|
|
47904
|
-
const data = { exists, path: path3 };
|
|
47905
|
-
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
47906
|
-
}
|
|
47907
|
-
);
|
|
47908
47833
|
server.registerTool(
|
|
47909
47834
|
"til_save_note",
|
|
47910
47835
|
{
|
|
47911
47836
|
title: "Save TIL Note",
|
|
47912
|
-
description: "TIL \uB178\uD2B8\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. frontmatter \uD615\uC2DD\uACFC \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD569\uB2C8\uB2E4.",
|
|
47837
|
+
description: "TIL \uB178\uD2B8\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. frontmatter \uD615\uC2DD\uACFC \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD569\uB2C8\uB2E4. auto_check_backlog=true\uB85C \uC800\uC7A5 \uD6C4 \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C.",
|
|
47913
47838
|
inputSchema: external_exports3.object({
|
|
47914
47839
|
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
47915
47840
|
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)"),
|
|
@@ -47918,10 +47843,11 @@ ${text}` }] };
|
|
|
47918
47843
|
tags: external_exports3.array(external_exports3.string()).optional().describe('\uD0DC\uADF8 \uBAA9\uB85D (\uC608: ["typescript", "basics"])'),
|
|
47919
47844
|
date: external_exports3.string().optional().describe("\uC791\uC131\uC77C (YYYY-MM-DD, \uC0DD\uB7B5 \uC2DC \uC624\uB298)"),
|
|
47920
47845
|
fmCategory: external_exports3.string().optional().describe("frontmatter category \uAC12 (\uC0DD\uB7B5 \uC2DC category \uD30C\uB77C\uBBF8\uD130 \uC0AC\uC6A9)"),
|
|
47921
|
-
aliases: external_exports3.array(external_exports3.string()).optional().describe('aliases \uBAA9\uB85D (\uC608: ["\uD55C\uAE00 \uC81C\uBAA9", "English Title"])')
|
|
47846
|
+
aliases: external_exports3.array(external_exports3.string()).optional().describe('aliases \uBAA9\uB85D (\uC608: ["\uD55C\uAE00 \uC81C\uBAA9", "English Title"])'),
|
|
47847
|
+
auto_check_backlog: external_exports3.boolean().optional().describe("true\uBA74 \uC800\uC7A5 \uD6C4 \uBC31\uB85C\uADF8 \uD56D\uBAA9\uC744 \uC790\uB3D9\uC73C\uB85C \uC644\uB8CC \uCC98\uB9AC (\uAE30\uBCF8 false)")
|
|
47922
47848
|
})
|
|
47923
47849
|
},
|
|
47924
|
-
async ({ category, slug, title, content, tags, date: date7, fmCategory, aliases }) => {
|
|
47850
|
+
async ({ category, slug, title, content, tags, date: date7, fmCategory, aliases, auto_check_backlog }) => {
|
|
47925
47851
|
const path3 = `${tilPath}/${category}/${slug}.md`;
|
|
47926
47852
|
const noteDate = date7 || (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
47927
47853
|
const fmLines = ["---", `title: "${title.replace(/"/g, '\\"')}"`, `date: ${noteDate}`];
|
|
@@ -47942,6 +47868,19 @@ ${text}` }] };
|
|
|
47942
47868
|
const existed = await storage.exists(path3);
|
|
47943
47869
|
await storage.writeFile(path3, fullContent);
|
|
47944
47870
|
const data = { path: path3, created: !existed, category, slug, title };
|
|
47871
|
+
if (auto_check_backlog) {
|
|
47872
|
+
const backlogPath = `${tilPath}/${category}/backlog.md`;
|
|
47873
|
+
const backlogContent = await storage.readFile(backlogPath);
|
|
47874
|
+
if (backlogContent !== null) {
|
|
47875
|
+
const result = checkBacklogItem(backlogContent, slug);
|
|
47876
|
+
if (result.found && !result.alreadyDone) {
|
|
47877
|
+
await storage.writeFile(backlogPath, result.content);
|
|
47878
|
+
data.backlog_checked = true;
|
|
47879
|
+
} else if (result.alreadyDone) {
|
|
47880
|
+
data.backlog_already_done = true;
|
|
47881
|
+
}
|
|
47882
|
+
}
|
|
47883
|
+
}
|
|
47945
47884
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
47946
47885
|
}
|
|
47947
47886
|
);
|
|
@@ -48064,7 +48003,7 @@ var TILMcpServer = class {
|
|
|
48064
48003
|
};
|
|
48065
48004
|
|
|
48066
48005
|
// vault-assets/skills/til/SKILL.md
|
|
48067
|
-
var SKILL_default = '---\nname: til\ndescription: "Today I Learned - \uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uACE0 \uB300\uD654\uD615\uC73C\uB85C \uD559\uC2B5\uD55C \uB4A4 TIL \uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC800\uC7A5"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 TIL \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (\uB3D9\uC77C/\uC720\uC0AC \uC8FC\uC81C \uAC10\uC9C0)\n- `
|
|
48006
|
+
var SKILL_default = '---\nname: til\ndescription: "Today I Learned - \uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uACE0 \uB300\uD654\uD615\uC73C\uB85C \uD559\uC2B5\uD55C \uB4A4 TIL \uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC800\uC7A5"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 TIL \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (\uB3D9\uC77C/\uC720\uC0AC \uC8FC\uC81C \uAC10\uC9C0)\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545, \uB9C1\uD06C \uD6C4\uBCF4\n- `vault_get_active_file`: \uC0AC\uC6A9\uC790\uAC00 \uBCF4\uB294 \uD30C\uC77C \uD655\uC778\n\n## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. `Read`\uB85C `til/{category}/{slug}.md` \uC874\uC7AC \uD655\uC778 \u2192 \uC788\uC73C\uBA74 \uC2EC\uD654/\uC2E0\uADDC \uC120\uD0DD\uC9C0 \uC81C\uC2DC\n2. `til_get_context`\uB85C \uAE30\uC874 TIL \uD655\uC778. MCP \uBD88\uAC00 \uC2DC `til_list` \uD3F4\uBC31\n - \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uD559\uC2B5 \uC2DC `til_backlog_status`(category) \u2192 `sections[].items[].sourceUrls` \uCC38\uC870\n - URL 1\uAC1C: `WebFetch`\uB85C \uC9C1\uC811 \uD328\uCE58\n - URL 2\uAC1C \uC774\uC0C1: `til-fetcher` subagent **1\uAC1C**\uC5D0 \uBAA8\uB4E0 URL \uC804\uB2EC\n3. \uAE30\uC874 TIL \uC5C6\uC73C\uBA74: \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC870\uC0AC\n4. \uD575\uC2EC \uAC1C\uB150, \uC608\uC2DC, \uAD00\uB828 \uC790\uB8CC \uC218\uC9D1 \u2192 \uC694\uC57D\n\n## Phase 2: \uB300\uD654\uD615 \uD559\uC2B5\n\n1. \uB9AC\uC11C\uCE58 \uACB0\uACFC \uAE30\uBC18 \uC124\uBA85\n2. \uC2EC\uD654 \uD559\uC2B5 \uBAA8\uB4DC: \uAE30\uC874 \uB0B4\uC6A9 \uBC18\uBCF5\uD558\uC9C0 \uC54A\uACE0 \uC0C8 \uAD00\uC810\uC5D0 \uC9D1\uC911\n3. \uC0AC\uC6A9\uC790 \uC9C8\uBB38\uC5D0 \uB2F5\uBCC0\n4. \uC0AC\uC6A9\uC790\uAC00 "\uC800\uC7A5\uD574\uC918" \uB4F1 \uC694\uCCAD \uC2DC Phase 3 \uC804\uD658 (\uC790\uB3D9 \uC804\uD658 \uAE08\uC9C0)\n\n## Phase 3: \uC800\uC7A5\n\n`/save` \uC2A4\uD0AC \uADDC\uCE59\uC744 \uB530\uB77C \uC800\uC7A5. \uC2EC\uD654 \uD559\uC2B5 \uBAA8\uB4DC\uB294 \uAE30\uC874 \uD30C\uC77C\uC5D0 \uBCD1\uD569 (`updated` \uB0A0\uC9DC \uCD94\uAC00).\n\n## \uC778\uC218\n\n- \uCCAB \uBC88\uC9F8: \uD559\uC2B5 \uC8FC\uC81C (\uD544\uC218)\n- \uB450 \uBC88\uC9F8: \uCE74\uD14C\uACE0\uB9AC (\uC120\uD0DD, \uBBF8\uC9C0\uC815 \uC2DC \uC790\uB3D9 \uCD94\uB860)\n\n## \uADDC\uCE59\n\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)` \u2014 `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0\n- \uBBFC\uAC10 \uC815\uBCF4 \uB300\uCCB4\uAC12 \uC0AC\uC6A9 (example.com, your-api-key)\n';
|
|
48068
48007
|
|
|
48069
48008
|
// vault-assets/skills/backlog/SKILL.md
|
|
48070
48009
|
var SKILL_default2 = '---\nname: backlog\ndescription: "\uD559\uC2B5 \uBC31\uB85C\uADF8\uB97C \uC870\uD68C\uD558\uACE0 \uC9C4\uD589 \uC0C1\uD669\uC744 \uBCF4\uC5EC\uC900\uB2E4"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Backlog Skill\n\n\uD559\uC2B5 \uBC31\uB85C\uADF8 \uC870\uD68C + \uC9C4\uD589 \uC0C1\uD669 \uC694\uC57D (\uC77D\uAE30 \uC804\uC6A9).\n\n## MCP \uB3C4\uAD6C\n\n- `til_backlog_status`: \uC804\uCCB4/\uCE74\uD14C\uACE0\uB9AC\uBCC4 \uC9C4\uD589\uB960 (category \uC9C0\uC815 \uC2DC sections \uD3EC\uD568)\n\n## \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n### \uC778\uC218 \uC5C6\uC74C (`/backlog`)\n\n1. `til_backlog_status` \uD638\uCD9C (MCP \uBD88\uAC00 \uC2DC `./til/*/backlog.md` Glob)\n2. \uBC31\uB85C\uADF8 \uC5C6\uC73C\uBA74 `/research` \uC548\uB0B4 \uD6C4 \uC885\uB8CC\n3. \uD14C\uC774\uBE14\uB85C \uC694\uC57D: \uCE74\uD14C\uACE0\uB9AC(\uB9C1\uD06C), \uC9C4\uD589\uB960, \uC644\uB8CC\uC218, \uCD5C\uADFC \uD559\uC2B5\uC77C, \uC9C4\uD589\uBC14\n\n### \uC778\uC218 \uC788\uC74C (`/backlog \uCE74\uD14C\uACE0\uB9AC`)\n\n1. `til_backlog_status`\uC5D0 category \uC804\uB2EC \u2192 sections \uD65C\uC6A9\n2. \uC139\uC158\uBCC4 \uCD9C\uB825:\n - `## {heading} ({\uC644\uB8CC\uC218}/{\uC804\uCCB4\uC218})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - `- [ ]`/`- [x]` \uB9C8\uD06C\uB2E4\uC6B4 \uCCB4\uD06C\uBC15\uC2A4 \uC0AC\uC6A9 \uAE08\uC9C0 (\uD130\uBBF8\uB110 \uBBF8\uB80C\uB354\uB9C1)\n\n## \uCD9C\uB825 \uADDC\uCE59\n\n- \uBAA8\uB4E0 \uCE74\uD14C\uACE0\uB9AC\uBA85/\uD56D\uBAA9\uBA85\uC740 `[\uD45C\uC2DC\uBA85](\uACBD\uB85C)` \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C\uB85C \uCD9C\uB825\n- \uACBD\uB85C \uC9C1\uC811 \uB178\uCD9C \uAE08\uC9C0\n- \uC9C4\uD589\uBC14: 10\uCE78 (`\u2588` \uC644\uB8CC, `\u2591` \uBBF8\uC644\uB8CC)\n- \uD55C\uAD6D\uC5B4 \uCD9C\uB825\n- \uBC31\uB85C\uADF8 \uD30C\uC77C \uC218\uC815 \uAE08\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n';
|
|
@@ -48073,7 +48012,7 @@ var SKILL_default2 = '---\nname: backlog\ndescription: "\uD559\uC2B5 \uBC31\uB85
|
|
|
48073
48012
|
var SKILL_default3 = '---\nname: research\ndescription: "\uC8FC\uC81C\uB97C \uB9AC\uC11C\uCE58\uD558\uC5EC \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uAC1C\uB150/\uC6A9\uC5B4\uB97C \uD30C\uC545\uD558\uACE0, \uBC31\uB85C\uADF8\uB85C \uC815\uB9AC"\nargument-hint: "<\uC8FC\uC81C> [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\n\uC8FC\uC81C \uB9AC\uC11C\uCE58 \u2192 \uAC1C\uB150/\uC758\uC874 \uAD00\uACC4 \uD30C\uC545 \u2192 \uBC31\uB85C\uADF8 \uD30C\uC77C \uC800\uC7A5.\n\n## MCP \uB3C4\uAD6C\n\n- `til_list`: \uAE30\uC874 TIL \uD655\uC778 (search \uD30C\uB77C\uBBF8\uD130\uB85C \uC8FC\uC81C \uAC80\uC0C9)\n\n## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. `til_list(search=\uC8FC\uC81C)`\uB85C \uC774\uBBF8 \uD559\uC2B5\uD55C \uC8FC\uC81C \uD655\uC778 \u2192 \uC911\uBCF5 \uBC31\uB85C\uADF8 \uBC29\uC9C0\n2. \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC8FC\uC81C \uC870\uC0AC, \uD544\uC694 \uAC1C\uB150\xB7\uC6A9\uC5B4\xB7\uC120\uD589 \uC9C0\uC2DD \uD30C\uC545\n3. \uC18C\uC8FC\uC81C \uBD84\uD574 \uD6C4 \uC9C1\uC811 \uB9AC\uC11C\uCE58\n4. \uC18C\uC8FC\uC81C \uAC04 \uC758\uC874 \uAD00\uACC4 \uBD84\uC11D\n\n## Phase 2: \uBC31\uB85C\uADF8 \uC815\uB9AC\n\n1. \uD559\uC2B5 \uC21C\uC11C \uC815\uB82C: \uC120\uD589 \uC9C0\uC2DD \u2192 \uD575\uC2EC \uAC1C\uB150 \u2192 \uC2EC\uD654\n2. \uAC01 \uD56D\uBAA9\uC5D0 1\uC904 \uC124\uBA85\n3. \uC0AC\uC6A9\uC790 \uD53C\uB4DC\uBC31 (\uCD94\uAC00/\uC81C\uAC70/\uC21C\uC11C \uBCC0\uACBD)\n\n## Phase 3: \uC800\uC7A5\n\n1. `./til/{\uCE74\uD14C\uACE0\uB9AC}/backlog.md`\uC5D0 \uC800\uC7A5 (\uD3F4\uB354 \uC790\uB3D9 \uC0DD\uC131)\n2. \uAE30\uC874 backlog.md \uC788\uC73C\uBA74 \uBCD1\uD569:\n - `[x]` \uC644\uB8CC \uD56D\uBAA9 \uBCF4\uC874\n - \uB3D9\uC77C \uD56D\uBAA9 \uCCB4\uD06C \uC0C1\uD0DC \uC720\uC9C0\n - \uAE30\uC874 sources \uBCF4\uC874, \uC0C8 \uD56D\uBAA9\uB9CC \uCD94\uAC00\n3. TIL MOC\uC5D0 \uBC31\uB85C\uADF8 \uB9C1\uD06C \uCD94\uAC00\n4. atomic commit: `\u{1F4CB} research: {\uC8FC\uC81C} \uD559\uC2B5 \uBC31\uB85C\uADF8 - {\uCE74\uD14C\uACE0\uB9AC}` (push \uC548 \uD568)\n\n## \uBC31\uB85C\uADF8 \uD15C\uD50C\uB9BF\n\n```markdown\n---\ntags: [backlog, {\uCE74\uD14C\uACE0\uB9AC}]\naliases: ["Backlog - {\uC8FC\uC81C}"]\nupdated: YYYY-MM-DD\nsources:\n slug-a: [https://url-1]\n---\n\n# {\uC8FC\uC81C} \uD559\uC2B5 \uBC31\uB85C\uADF8\n\n## \uC120\uD589 \uC9C0\uC2DD\n- [ ] [\uAC1C\uB150A](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-a}.md) - \uC124\uBA85\n\n## \uD575\uC2EC \uAC1C\uB150\n- [ ] [\uAC1C\uB150C](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-c}.md) - \uC124\uBA85\n\n## \uC2EC\uD654\n- [ ] [\uAC1C\uB150E](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug-e}.md) - \uC124\uBA85\n```\n\n## \uC778\uC218\n\n- \uCCAB \uBC88\uC9F8: \uB9AC\uC11C\uCE58 \uC8FC\uC81C (\uD544\uC218)\n- \uB450 \uBC88\uC9F8: \uCE74\uD14C\uACE0\uB9AC (\uC120\uD0DD, \uBBF8\uC9C0\uC815 \uC2DC \uC790\uB3D9 \uCD94\uB860)\n\n## \uADDC\uCE59\n\n- \uD56D\uBAA9\uB2F9 1\uC904 \uC124\uBA85, 20\uAC1C \uCD08\uACFC \uC2DC \uBD84\uB9AC\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)`\n';
|
|
48074
48013
|
|
|
48075
48014
|
// vault-assets/skills/save/SKILL.md
|
|
48076
|
-
var SKILL_default4 = '---\nname: save\ndescription: "\uD559\uC2B5 \uB0B4\uC6A9\uC744 TIL \uD30C\uC77C\uB85C \uC800\uC7A5\uD558\uACE0 Daily \uB178\uD2B8, MOC, \uBC31\uB85C\uADF8\uB97C \uC77C\uAD04 \uC5C5\uB370\uC774\uD2B8"\nargument-hint: "[\uC8FC\uC81C] [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\n\uD559\uC2B5 \uB300\uD654 \u2192 TIL \uD30C\uC77C \uC800\uC7A5 \u2192 Daily/MOC/\uBC31\uB85C\uADF8 \uC5C5\uB370\uC774\uD2B8 \u2192 \uBB38\uC11C \uB9AC\uBDF0 \u2192 \uCEE4\uBC0B.\n\n## MCP \uB3C4\uAD6C\n\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545\n- `til_list`: \uAE30\uC874 TIL \uC911\uBCF5 \uD655\uC778\n- `
|
|
48015
|
+
var SKILL_default4 = '---\nname: save\ndescription: "\uD559\uC2B5 \uB0B4\uC6A9\uC744 TIL \uD30C\uC77C\uB85C \uC800\uC7A5\uD558\uACE0 Daily \uB178\uD2B8, MOC, \uBC31\uB85C\uADF8\uB97C \uC77C\uAD04 \uC5C5\uB370\uC774\uD2B8"\nargument-hint: "[\uC8FC\uC81C] [\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\n\uD559\uC2B5 \uB300\uD654 \u2192 TIL \uD30C\uC77C \uC800\uC7A5 \u2192 Daily/MOC/\uBC31\uB85C\uADF8 \uC5C5\uB370\uC774\uD2B8 \u2192 \uBB38\uC11C \uB9AC\uBDF0 \u2192 \uCEE4\uBC0B.\n\n## MCP \uB3C4\uAD6C\n\n- `til_get_context`: \uAD00\uB828 TIL\xB7\uBC31\uB85C\uADF8 \uD30C\uC545\n- `til_list`: \uAE30\uC874 TIL \uC911\uBCF5 \uD655\uC778\n- `til_save_note`: TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uC11C\uBC84 \uBCF4\uC7A5, auto_check_backlog\uB85C \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C)\n- `vault_get_active_file`: \uC0AC\uC6A9\uC790 \uD30C\uC77C \uCEE8\uD14D\uC2A4\uD2B8\n\n## Step 1: \uCEE8\uD14D\uC2A4\uD2B8 \uD655\uC778\n\n1. \uC8FC\uC81C\xB7\uCE74\uD14C\uACE0\uB9AC \uD30C\uC545. \uBD88\uBA85\uD655\uD558\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC9C8\uBB38.\n2. `Read`\uB85C `til/{category}/{slug}.md` \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778.\n\n## Step 2: \uB9C1\uD06C \uD6C4\uBCF4 \uD30C\uC545\n\n1. `til_get_context` \uB610\uB294 MOC/\uBC31\uB85C\uADF8\uB85C \uAE30\uC874 TIL\xB7\uBC31\uB85C\uADF8 \uD56D\uBAA9 \uD30C\uC545\n2. \uAE30\uC874 TIL/\uBC31\uB85C\uADF8 \uD56D\uBAA9 \u2192 \uBCF8\uBB38\uC5D0\uC11C \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C \uC0AC\uC6A9\n3. \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uAC1C\uB150 \u2192 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778 \uD6C4 \uAD00\uB828 \uB178\uD2B8\uC5D0\uB9CC \uCD94\uAC00\n\n## Step 3: TIL \uD30C\uC77C \uC800\uC7A5\n\n\uACBD\uB85C: `./til/{\uCE74\uD14C\uACE0\uB9AC}/{\uC8FC\uC81C\uC2AC\uB7EC\uADF8}.md` (\uC2AC\uB7EC\uADF8: \uC601\uBB38 \uC18C\uBB38\uC790, \uD558\uC774\uD508)\n\n**\uC0C8 \uD30C\uC77C \uC800\uC7A5**: `til_save_note` MCP \uB3C4\uAD6C\uB85C \uC800\uC7A5. frontmatter(title, date, category, tags, aliases)\uC640 \uACBD\uB85C \uADDC\uCE59\uC744 \uC11C\uBC84\uAC00 \uBCF4\uC7A5\uD55C\uB2E4.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: `date +%Y-%m-%dT%H:%M:%S` \uBA85\uB839\uC73C\uB85C \uB85C\uCEEC \uC2DC\uAC01\uC744 \uC870\uD68C\uD558\uC5EC \uC804\uB2EC\n- `tags`: \uBC18\uB4DC\uC2DC "til" \uD3EC\uD568\n- `aliases`: ["\uD55C\uAE00 \uC81C\uBAA9", "\uC601\uBB38 \uC81C\uBAA9"]\n- `content`: frontmatter \uC81C\uC678\uD55C \uBCF8\uBB38 \uB9C8\uD06C\uB2E4\uC6B4\n\n**\uB3D9\uC77C \uC2AC\uB7EC\uADF8 \uD30C\uC77C \uC788\uC744 \uB54C** (Step 1\uC5D0\uC11C `Read`\uB85C \uAC10\uC9C0):\n- `/til` \uC2EC\uD654 \uD559\uC2B5\uC774 \uC5F0\uC18D\uB41C \uACBD\uC6B0\uB9CC \uC790\uB3D9 \uBCD1\uD569 (\uAE30\uC874 \uB0B4\uC6A9 \uC720\uC9C0 + \uBCF4\uAC15, `updated` \uCD94\uAC00)\n- \uADF8 \uC678: \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCD1\uD569/\uB36E\uC5B4\uC4F0\uAE30 \uD655\uC778\n- \uBCD1\uD569 \uC2DC\uC5D0\uB294 `til_save_note` \uB300\uC2E0 \uC9C1\uC811 Read\u2192Edit\uC73C\uB85C \uAE30\uC874 \uB0B4\uC6A9\uC5D0 \uBCF4\uAC15\n\n### TIL \uBCF8\uBB38 \uD15C\uD50C\uB9BF\n\n```markdown\n# \uC81C\uBAA9\n\n> [!tldr] \uD55C\uC904 \uC694\uC57D\n\n## \uD575\uC2EC \uB0B4\uC6A9\n## \uC608\uC2DC\n## \uCC38\uACE0 \uC790\uB8CC\n- [\uC81C\uBAA9](URL)\n## \uAD00\uB828 \uB178\uD2B8\n- [TIL](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)\n```\n\n- \uB9C1\uD06C: `[\uD45C\uC2DC\uBA85](til/{\uCE74\uD14C\uACE0\uB9AC}/{slug}.md)` \u2014 `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0\n\n## Step 4: \uC5F0\uAD00 \uD30C\uC77C \uC5C5\uB370\uC774\uD2B8\n\n\uC544\uB798 3\uAC1C \uD30C\uC77C\uC744 **\uC9C1\uC811** \uC21C\uCC28 \uC5C5\uB370\uC774\uD2B8\uD55C\uB2E4 (subagent \uC0AC\uC6A9 \uAE08\uC9C0):\n\n1. Daily \uB178\uD2B8 (`./Daily/YYYY-MM-DD.md`): \uCE74\uD14C\uACE0\uB9AC\uBCC4 TIL \uB9C1\uD06C \uCD94\uAC00 (\uC5C6\uC73C\uBA74 \uC0DD\uC131)\n2. TIL MOC (`./til/TIL MOC.md`): \uCE74\uD14C\uACE0\uB9AC \uC139\uC158\uC5D0 \uD56D\uBAA9 \uCD94\uAC00 (\uC5C6\uC73C\uBA74 \uC0DD\uC131)\n3. \uBC31\uB85C\uADF8: `til_save_note`\uC758 `auto_check_backlog: true`\uB85C \uC774\uBBF8 \uCC98\uB9AC\uB428 (\uBCC4\uB3C4 \uD638\uCD9C \uBD88\uD544\uC694)\n\nDaily/MOC: Read \u2192 \uC704\uCE58 \uD655\uC778 \u2192 Edit. \uD30C\uC77C \uC5C6\uC73C\uBA74 \uC0DD\uC131.\n\n## Step 5: \uBB38\uC11C \uB9AC\uBDF0\n\n\uC800\uC7A5\uB41C TIL \uC804\uCCB4 \uB0B4\uC6A9 \uD45C\uC2DC \u2192 `AskUserQuestion`\uC73C\uB85C \uD655\uC778 ("\uD655\uC778 \uC644\uB8CC" / "\uC218\uC815 \uD544\uC694").\n\n## Step 6: \uBCF5\uC2B5 \uB4F1\uB85D\n\n`AskUserQuestion`\uC73C\uB85C "\uC774 TIL\uC744 \uBCF5\uC2B5 \uB300\uC0C1\uC5D0 \uCD94\uAC00\uD560\uAE4C\uC694?" \uC9C8\uBB38.\n\uC0AC\uC6A9\uC790 \uB3D9\uC758 \uC2DC `til_review_update` (action: "review", grade: 4) \uD638\uCD9C\uD558\uC5EC SRS \uBA54\uD0C0\uB370\uC774\uD130 \uC0DD\uC131.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {\uD55C\uAE00 \uC81C\uBAA9}({\uC601\uBB38 \uC81C\uBAA9}) - {\uCE74\uD14C\uACE0\uB9AC}` (push \uC548 \uD568)\n\n## \uADDC\uCE59\n\n- frontmatter \uD544\uC218: date, category, tags, aliases (\uB204\uB77D \uC2DC \uC800\uC7A5 \uC804 \uBCF4\uC644)\n- tags\uC5D0 \uBC18\uB4DC\uC2DC "til" \uD3EC\uD568 (\uC815\uC801 \uC0AC\uC774\uD2B8 \uD544\uD130 \uAE30\uC900)\n- `[[\uC704\uD0A4\uB9C1\uD06C]]` \uAE08\uC9C0 \u2014 `[\uD45C\uC2DC\uBA85](\uACBD\uB85C)` \uD615\uC2DD\uB9CC \uC0AC\uC6A9\n- TIL\uB9CC \uC800\uC7A5\uD558\uACE0 Daily/MOC/\uBC31\uB85C\uADF8 \uB204\uB77D\uD558\uC9C0 \uC54A\uB294\uB2E4\n- Callout \uD65C\uC6A9: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- \uBCF5\uC7A1\uD55C \uAC1C\uB150\uC740 Mermaid \uB2E4\uC774\uC5B4\uADF8\uB7A8\uC73C\uB85C \uC2DC\uAC01\uD654 (TIL\uB2F9 \uCD5C\uB300 1\uAC1C)\n- \uBBFC\uAC10 \uC815\uBCF4 \uB300\uCCB4\uAC12 \uC0AC\uC6A9\n- \uD55C\uAD6D\uC5B4 \uC791\uC131, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n';
|
|
48077
48016
|
|
|
48078
48017
|
// vault-assets/skills/migrate-links/SKILL.md
|
|
48079
48018
|
var SKILL_default5 = '---\nname: migrate-links\ndescription: "vault\uC758 [[wikilink]]\uB97C \uD45C\uC900 \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C\uB85C \uC77C\uAD04 \uBCC0\uD658"\nargument-hint: ""\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Migrate Links Skill\n\n`[[wikilink]]` \u2192 `[text](path.md)` \uC77C\uAD04 \uBCC0\uD658.\n\n## CLI\n\n```bash\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . scan\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . migrate\nnode .obsidian/plugins/oh-my-til/migrate-links.mjs . verify\n```\n\n## \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. **\uC2A4\uCE94**: `scan` \uC2E4\uD589 \u2192 wikilink \uC5C6\uC73C\uBA74 \uC885\uB8CC, \uC788\uC73C\uBA74 `AskUserQuestion`\uC73C\uB85C \uD655\uC778\n2. **\uBCC0\uD658**: `migrate` \uC2E4\uD589\n3. **\uAC80\uC99D**: `verify` \uC2E4\uD589 \u2192 \uC794\uC5EC wikilink \uC548\uB0B4\n4. **\uCEE4\uBC0B**: `\u267B\uFE0F refactor: [[wikilink]] \u2192 \uD45C\uC900 \uB9C8\uD06C\uB2E4\uC6B4 \uB9C1\uD06C \uC77C\uAD04 \uBCC0\uD658` (push \uC548 \uD568)\n\n## \uBCC0\uD658 \uADDC\uCE59\n\n- `[[path|Display]]` \u2192 `[Display](path.md)`\n- `[[path]]` \u2192 `[path](path.md)`\n- \uCF54\uB4DC \uBE14\uB85D \uB0B4\uBD80 \uC81C\uC678, \uD14C\uC774\uBE14 `\\|` \uC774\uC2A4\uCF00\uC774\uD504 \uCC98\uB9AC\n';
|
|
@@ -48088,10 +48027,10 @@ var SKILL_default7 = '---\nname: setup-pages\ndescription: "(deprecated) /omt-se
|
|
|
48088
48027
|
var SKILL_default8 = '---\nname: omt-setup\ndescription: "oh-my-til \uD1B5\uD569 \uC124\uC815 \u2014 \uBC30\uD3EC \uC124\uC815"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# OMT Setup Skill\n\noh-my-til \uC124\uC815\uC744 \uD55C \uACF3\uC5D0\uC11C \uAD00\uB9AC. \uC11C\uBE0C\uCEE4\uB9E8\uB4DC\uB85C \uB3D9\uC791.\n\n## \uC11C\uBE0C\uCEE4\uB9E8\uB4DC\n\n### `/omt-setup` (\uC778\uC218 \uC5C6\uC74C)\n\n`oh-my-til.json` \uC77D\uC5B4\uC11C \uD604\uC7AC \uC124\uC815 \uD45C\uC2DC + \uC11C\uBE0C\uCEE4\uB9E8\uB4DC \uC548\uB0B4:\n- `deploy` \u2014 GitHub Pages \uBC30\uD3EC \uC124\uC815\n\n### `/omt-setup deploy`\n\nGitHub Pages \uBC30\uD3EC \uC124\uC815:\n1. `.git/` \uD655\uC778 (\uC5C6\uC73C\uBA74 \uC548\uB0B4 \uD6C4 \uC885\uB8CC)\n2. `.github/workflows/deploy-til.yml` \uD655\uC778 (\uC788\uC73C\uBA74 \uC218\uC815 \uD544\uC694 \uC5EC\uBD80 \uC9C8\uBB38)\n3. `oh-my-til.json` deploy \uC139\uC158 \uC124\uC815 (\uC81C\uBAA9, \uBD80\uC81C\uBAA9, GitHub URL)\n4. \uC6CC\uD06C\uD50C\uB85C\uC6B0 YAML \uC0DD\uC131\n5. \uC644\uB8CC \uC548\uB0B4 (Settings \u2192 Pages \u2192 GitHub Actions \uC120\uD0DD, \uCEE4\uBC0B\xB7push \uBA85\uB839\uC5B4)\n\n## \uADDC\uCE59\n\n- \uD55C\uAD6D\uC5B4 \uCD9C\uB825\n- `oh-my-til.json`\uC758 \uAE30\uC874 \uC124\uC815 \uBCF4\uC874, \uD574\uB2F9 \uC139\uC158\uB9CC \uCD94\uAC00/\uC218\uC815\n- \uCEE4\uBC0B\uC740 \uD558\uC9C0 \uC54A\uC74C (\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA85\uB839\uC5B4 \uC548\uB0B4\uB9CC)\n';
|
|
48089
48028
|
|
|
48090
48029
|
// vault-assets/skills/til-review/SKILL.md
|
|
48091
|
-
var SKILL_default9 = '---\nname: til-review\ndescription: "SRS \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158 (\uAC04\uACA9 \uBC18\uBCF5 \uD559\uC2B5)"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS(\uAC04\uACA9 \uBC18\uBCF5) \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158. SM-2 \uC54C\uACE0\uB9AC\uC998\uC73C\uB85C \uBCF5\uC2B5 \uC77C\uC815\uC744 \uAD00\uB9AC\uD55C\uB2E4.\n\n## MCP \uB3C4\uAD6C\n\n- `til_review_list`: \uC624\uB298 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update`: \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D (grade 0-5) \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n
|
|
48030
|
+
var SKILL_default9 = '---\nname: til-review\ndescription: "SRS \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158 (\uAC04\uACA9 \uBC18\uBCF5 \uD559\uC2B5)"\nargument-hint: "[\uCE74\uD14C\uACE0\uB9AC]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS(\uAC04\uACA9 \uBC18\uBCF5) \uAE30\uBC18 TIL \uBCF5\uC2B5 \uC138\uC158. SM-2 \uC54C\uACE0\uB9AC\uC998\uC73C\uB85C \uBCF5\uC2B5 \uC77C\uC815\uC744 \uAD00\uB9AC\uD55C\uB2E4.\n\n## MCP \uB3C4\uAD6C\n\n- `til_review_list`: \uC624\uB298 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4 (`include_content: true`\uB85C \uB178\uD2B8 \uB0B4\uC6A9 \uD568\uAED8 \uB85C\uB4DC)\n- `til_review_update`: \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D (grade 0-5) \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (`include_content: true`, \uCE74\uD14C\uACE0\uB9AC \uC778\uC790 \uC788\uC73C\uBA74 \uC804\uB2EC).\n\n- \uCE74\uB4DC 0\uAC1C \u2192 "\uC624\uB298 \uBCF5\uC2B5 \uC5C6\uC74C" \uC548\uB0B4 + \uBBF8\uB4F1\uB85D TIL \uB4F1\uB85D \uC81C\uC548 (Step 5\uB85C)\n- \uCE74\uB4DC \uC788\uC74C \u2192 \uBAA9\uB85D \uD45C\uC2DC + Step 2\uB85C\n\n## Step 2: \uD3C9\uAC00 \uBAA8\uB4DC \uC120\uD0DD\n\n`AskUserQuestion`\uC73C\uB85C \uC120\uD0DD:\n- "\uAC04\uB2E8 \uBAA8\uB4DC (Again / Good)"\n- "\uC0C1\uC138 \uBAA8\uB4DC (Again / Hard / Good / Easy)"\n\n## Step 3: \uCE74\uB4DC\uBCC4 \uBCF5\uC2B5 \uB8E8\uD504\n\n\uAC01 \uCE74\uB4DC\uC5D0 \uB300\uD574:\n\n1. \uC81C\uBAA9\xB7\uCE74\uD14C\uACE0\uB9AC\xB7\uBCF5\uC2B5 \uC815\uBCF4(\uBC18\uBCF5 \uD69F\uC218, EF, \uC5F0\uCCB4\uC77C) \uD45C\uC2DC\n2. Step 1\uC5D0\uC11C \uC774\uBBF8 \uB85C\uB4DC\uB41C `content` \uC0AC\uC6A9 (\uCD94\uAC00 MCP \uD638\uCD9C \uBD88\uD544\uC694)\n3. \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC9C8\uBB38 \uD615\uC2DD\uC73C\uB85C \uC81C\uC2DC (\uB0B4\uC6A9 \uAE30\uBC18\uC73C\uB85C 1~2\uAC1C \uC9C8\uBB38 \uC0DD\uC131)\n4. \uC0AC\uC6A9\uC790 \uB2F5\uBCC0 \uB300\uAE30\n5. \uD53C\uB4DC\uBC31 \uC81C\uACF5 (\uC815\uB2F5/\uBCF4\uCDA9 \uC124\uBA85)\n6. `AskUserQuestion`\uC73C\uB85C \uD3C9\uAC00 \uC785\uB825:\n - \uAC04\uB2E8 \uBAA8\uB4DC: "Good (\uAE30\uC5B5\uB0A8)" / "Again (\uBAA8\uB984)" / "\uAC74\uB108\uB6F0\uAE30" / "\uBCF5\uC2B5 \uC911\uB2E8"\n - \uC0C1\uC138 \uBAA8\uB4DC: "Again (\uC2E4\uD328)" / "Hard (\uC5B4\uB835\uAC8C \uC815\uB2F5)" / "Good (\uC815\uC0C1)" / "Easy (\uC644\uBCBD)"\n - grade \uB9E4\uD551: Again=1, Hard=3, Good=4, Easy=5\n - "\uAC74\uB108\uB6F0\uAE30" \uC120\uD0DD \uC2DC \uC774 \uCE74\uB4DC\uB294 \uD3C9\uAC00\uD558\uC9C0 \uC54A\uACE0 \uB2E4\uC74C\uC73C\uB85C\n - "\uBCF5\uC2B5 \uC911\uB2E8" \uC120\uD0DD \uC2DC Step 4\uB85C \uC774\uB3D9\n - \uC0C1\uC138 \uBAA8\uB4DC\uC5D0\uC11C \uAC74\uB108\uB6F0\uAE30/\uC911\uB2E8: "Other" \uC120\uD0DD \uD6C4 "\uAC74\uB108\uB6F0\uAE30" \uB610\uB294 "\uBCF5\uC2B5 \uC911\uB2E8" \uC785\uB825\n7. \uAC74\uB108\uB6F0\uAE30\uAC00 \uC544\uB2CC \uACBD\uC6B0 `til_review_update` (action: "review", grade) \uD638\uCD9C\n8. \uACB0\uACFC \uC694\uC57D (\uB2E4\uC74C \uBCF5\uC2B5\uC77C, interval) \uD45C\uC2DC\n\n## Step 4: \uC644\uB8CC \uD1B5\uACC4\n\n\uBAA8\uB4E0 \uCE74\uB4DC \uC644\uB8CC \uD6C4:\n- \uBCF5\uC2B5\uD55C \uCE74\uB4DC \uC218, \uD3C9\uADE0 grade\n- remaining > 0\uC774\uBA74 "N\uAC1C \uB354 \uB0A8\uC74C, \uB0B4\uC77C \uC774\uC5B4\uC11C" \uC548\uB0B4\n- `til_review_list` \uC7AC\uD638\uCD9C\uD558\uC5EC \uCD5C\uC2E0 \uD1B5\uACC4 \uD45C\uC2DC\n\n## Step 5: TIL \uB4F1\uB85D (\uC120\uD0DD)\n\n\uCE74\uB4DC\uAC00 \uC5C6\uC744 \uB54C \uB610\uB294 \uC0AC\uC6A9\uC790 \uC694\uCCAD \uC2DC:\n- `til_list`\uB85C \uC804\uCCB4 TIL \uBAA9\uB85D \uD45C\uC2DC\n- \uC0AC\uC6A9\uC790\uAC00 \uBCF5\uC2B5 \uB300\uC0C1\uC5D0 \uCD94\uAC00\uD560 \uD30C\uC77C \uC120\uD0DD\n- \uC120\uD0DD\uB41C \uD30C\uC77C\uB9C8\uB2E4 `til_review_update` (action: "review", grade: 4) \uD638\uCD9C\n\n## \uADDC\uCE59\n\n- \uD55C \uC138\uC158 \uCD5C\uB300 20\uAC1C (\uACFC\uBD80\uD558 \uBC29\uC9C0)\n- \uC5F0\uCCB4 \uCE74\uB4DC \uC6B0\uC120 (\uAC00\uC7A5 \uAE09\uD55C \uAC83 \uBA3C\uC800)\n- \uBCF5\uC2B5 \uD574\uC81C: \uC0AC\uC6A9\uC790\uAC00 "\uC774 \uCE74\uB4DC \uC81C\uAC70"\uD558\uBA74 `til_review_update` (action: "remove") \uD638\uCD9C\n- \uD55C\uAD6D\uC5B4 \uC9C4\uD589, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30\n';
|
|
48092
48031
|
|
|
48093
48032
|
// vault-assets/claude-md-section.md
|
|
48094
|
-
var claude_md_section_default = "## \uD559\uC2B5 \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. `/research <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uBC31\uB85C\uADF8 \uC0DD\uC131\n2. `/backlog [\uCE74\uD14C\uACE0\uB9AC]` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589 \uD655\uC778\n3. `/til <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 \uC800\uC7A5\n4. `/save` \u2014 TIL \uC800\uC7A5 (Daily/MOC/\uBC31\uB85C\uADF8 \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8)\n5. `/til-review [\uCE74\uD14C\uACE0\uB9AC]` \u2014 SRS \uAE30\uBC18 \uAC04\uACA9 \uBC18\uBCF5 \uBCF5\uC2B5\n\n## MCP \uB3C4\uAD6C\n\n- `
|
|
48033
|
+
var claude_md_section_default = "## \uD559\uC2B5 \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. `/research <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uBC31\uB85C\uADF8 \uC0DD\uC131\n2. `/backlog [\uCE74\uD14C\uACE0\uB9AC]` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589 \uD655\uC778\n3. `/til <\uC8FC\uC81C>` \u2014 \uB9AC\uC11C\uCE58 \u2192 \uB300\uD654\uD615 \uD559\uC2B5 \u2192 \uC800\uC7A5\n4. `/save` \u2014 TIL \uC800\uC7A5 (Daily/MOC/\uBC31\uB85C\uADF8 \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8)\n5. `/til-review [\uCE74\uD14C\uACE0\uB9AC]` \u2014 SRS \uAE30\uBC18 \uAC04\uACA9 \uBC18\uBCF5 \uBCF5\uC2B5\n\n## MCP \uB3C4\uAD6C\n\n**\uD559\uC2B5 \uCEE8\uD14D\uC2A4\uD2B8:**\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uAE30\uC874 \uD559\uC2B5 \uCEE8\uD14D\uC2A4\uD2B8 (\uACBD\uB85C/\uB0B4\uC6A9 \uB9E4\uCE6D, backlink, \uBBF8\uC791\uC131 \uB9C1\uD06C)\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984 (\uC2DC\uAC04\uC21C)\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uC5F4\uB9B0 \uD30C\uC77C\n\n**TIL \uAD00\uB9AC:**\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958 (search \uD544\uD130)\n- `til_save_note` \u2014 TIL \uC800\uC7A5 (frontmatter \uBCF4\uC7A5, auto_check_backlog\uB85C \uBC31\uB85C\uADF8 \uC790\uB3D9 \uCCB4\uD06C)\n\n**\uBC31\uB85C\uADF8:**\n- `til_backlog_status` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589\uB960\n- `til_backlog_check` \u2014 \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC (\uB2E8\uB3C5 \uC0AC\uC6A9 \uC2DC)\n\n**\uBCF5\uC2B5 (SRS):**\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4 (include_content)\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D\n\n**\uD1B5\uACC4:**\n- `til_dashboard` \u2014 \uD559\uC2B5 \uB300\uC2DC\uBCF4\uB4DC \uD1B5\uACC4\n\n### \uC5F0\uACB0\n\n```bash\n# HTTP (Obsidian \uD50C\uB7EC\uADF8\uC778 \uB610\uB294 oh-my-til serve \uC0AC\uC6A9 \uC2DC)\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n\n# stdio (Obsidian \uC5C6\uC774 \uB3C5\uB9BD \uC2E4\uD589, Claude Desktop scheduled task \uB4F1)\nclaude mcp add oh-my-til -- npx oh-my-til mcp /path/to/vault\n```\n";
|
|
48095
48034
|
|
|
48096
48035
|
// vault-assets/agents/til-fetcher.md
|
|
48097
48036
|
var til_fetcher_default = '---\nname: til-fetcher\ndescription: \uC18C\uC2A4 URL \uCF58\uD150\uCE20\uB97C \uD328\uCE58\uD558\uC5EC \uD559\uC2B5 \uC790\uB8CC\uB85C \uC694\uC57D\uD558\uB294 \uC804\uC6A9 \uC5D0\uC774\uC804\uD2B8\ntools: Read, WebFetch\nmodel: haiku\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# til-fetcher\n\n\uC18C\uC2A4 URL\uC758 \uCF58\uD150\uCE20\uB97C \uD328\uCE58\uD558\uACE0 \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC694\uC57D\uD558\uB294 \uC804\uC6A9 \uC5D0\uC774\uC804\uD2B8.\n\n## \uC5ED\uD560\n\n- `/til` \uC2A4\uD0AC\uC758 Phase 1\uC5D0\uC11C sourceUrls \uD328\uCE58 subagent\uB85C \uC0AC\uC6A9\uB41C\uB2E4\n- \uC8FC\uC5B4\uC9C4 URL(1\uAC1C \uB610\uB294 \uC5EC\uB7EC \uAC1C)\uC744 WebFetch\uB85C \uC21C\uCC28 \uC77D\uACE0 \uD559\uC2B5\uC5D0 \uD544\uC694\uD55C \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC694\uC57D\uD55C\uB2E4\n- \uC5EC\uB7EC URL\uC774 \uC804\uB2EC\uB418\uBA74 \uAC01\uAC01 \uD328\uCE58 \uD6C4 \uD1B5\uD569 \uC694\uC57D\uC744 \uBC18\uD658\uD55C\uB2E4\n\n## \uCD9C\uB825 \uD615\uC2DD\n\n- \uD575\uC2EC \uB0B4\uC6A9 \uC694\uC57D (\uD55C\uAD6D\uC5B4, \uAE30\uC220 \uC6A9\uC5B4 \uC6D0\uC5B4 \uBCD1\uAE30)\n- \uCF54\uB4DC \uC608\uC2DC\uAC00 \uC788\uC73C\uBA74 \uD3EC\uD568\n';
|
package/manifest.json
CHANGED