oh-my-til 0.12.2 → 0.13.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 +11 -2
- package/README.md +11 -2
- package/dist/cli.js +121 -10
- package/main.js +121 -9
- package/manifest.json +1 -1
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -133,8 +133,11 @@ MCP 서버 연결 시 Claude Code에서 사용할 수 있는 도구:
|
|
|
133
133
|
| `vault_list_files` | 폴더 내 파일 목록 (필터링 가능) |
|
|
134
134
|
| `vault_search` | vault 전체 텍스트 검색 |
|
|
135
135
|
| `vault_get_active_file` | 현재 열린 파일 가져오기 |
|
|
136
|
-
| `til_list` | 카테고리별 TIL 파일 목록 |
|
|
136
|
+
| `til_list` | 카테고리별 TIL 파일 목록 (`search` 필터 지원) |
|
|
137
|
+
| `til_exists` | category + slug로 TIL 파일 존재 여부 확인 |
|
|
138
|
+
| `til_save_note` | frontmatter 형식/경로 규칙을 보장하는 TIL 노트 저장 |
|
|
137
139
|
| `til_backlog_status` | 백로그 진행률 요약 (체크박스 카운트) |
|
|
140
|
+
| `til_backlog_check` | 백로그 항목을 slug로 완료 처리 |
|
|
138
141
|
| `til_get_context` | 주제 관련 기존 학습 컨텍스트 (파일, 링크 관계, 미작성 주제) |
|
|
139
142
|
| `til_recent_context` | 최근 학습 활동을 날짜별로 조회 |
|
|
140
143
|
| `til_dashboard` | 학습 통계 요약 |
|
|
@@ -177,6 +180,10 @@ src/
|
|
|
177
180
|
│ ├── keyboard.ts # Shift+Enter → \n (멀티라인 지원)
|
|
178
181
|
│ ├── env.ts # macOS PATH 보정 (Homebrew)
|
|
179
182
|
│ ├── skills.ts # 버전 비교/플레이스홀더 치환 순수 함수
|
|
183
|
+
│ ├── cli.ts # CLI 인자 파싱 순수 함수
|
|
184
|
+
│ ├── config.ts # 설정 파일 파싱/로딩 순수 함수
|
|
185
|
+
│ ├── markdown.ts # 마크다운 → HTML 변환 (외부 의존성 없음)
|
|
186
|
+
│ ├── profile.ts # 정적 사이트 페이지 생성 (프로필, TIL 페이지, 카테고리 인덱스)
|
|
180
187
|
│ └── index.ts # barrel export
|
|
181
188
|
├── ports/ # 어댑터 인터페이스
|
|
182
189
|
│ ├── storage.ts # FileStorage 인터페이스
|
|
@@ -185,10 +192,12 @@ src/
|
|
|
185
192
|
│ ├── fs-adapter.ts # node:fs 기반 (standalone)
|
|
186
193
|
│ └── obsidian-adapter.ts # Obsidian App 기반
|
|
187
194
|
├── mcp/ # MCP 서버 (포트 의존, Obsidian 무관)
|
|
195
|
+
│ ├── context.ts # 학습 컨텍스트 도구 (topic 매칭, 카테고리 추출)
|
|
188
196
|
│ ├── server.ts # HTTP 서버 + Streamable HTTP 트랜스포트
|
|
189
197
|
│ └── tools.ts # MCP 도구 정의 (FileStorage + MetadataProvider 사용)
|
|
198
|
+
├── plugin-install.ts # 플러그인 에셋 자동 설치/업데이트 (skills, agents, CLAUDE.md 섹션)
|
|
190
199
|
├── cli/ # 독립 CLI 진입점
|
|
191
|
-
│ ├── index.ts # npx oh-my-til init / serve
|
|
200
|
+
│ ├── index.ts # npx oh-my-til init / serve / deploy
|
|
192
201
|
│ └── obsidian-install.ts # Obsidian 플러그인 자동 설치 (Electron 감지, node-pty 재빌드)
|
|
193
202
|
└── obsidian/ # Obsidian 플랫폼 어댑터
|
|
194
203
|
├── main.ts # 플러그인 진입점
|
package/README.md
CHANGED
|
@@ -133,8 +133,11 @@ When the MCP server is connected, Claude Code can use these tools:
|
|
|
133
133
|
| `vault_list_files` | List files in a folder with optional filtering |
|
|
134
134
|
| `vault_search` | Full-text search across the vault |
|
|
135
135
|
| `vault_get_active_file` | Get the currently open file |
|
|
136
|
-
| `til_list` | List TIL files grouped by category |
|
|
136
|
+
| `til_list` | List TIL files grouped by category (supports `search` filter) |
|
|
137
|
+
| `til_exists` | Check if a TIL file exists by category + slug |
|
|
138
|
+
| `til_save_note` | Save a TIL note with validated frontmatter and path conventions |
|
|
137
139
|
| `til_backlog_status` | Backlog progress summary with checkbox counts |
|
|
140
|
+
| `til_backlog_check` | Mark a backlog item as done by slug |
|
|
138
141
|
| `til_get_context` | Get existing knowledge context for a topic (files, links, unresolved mentions) |
|
|
139
142
|
| `til_recent_context` | Recent learning activity grouped by date |
|
|
140
143
|
| `til_dashboard` | Learning statistics summary |
|
|
@@ -177,6 +180,10 @@ src/
|
|
|
177
180
|
│ ├── keyboard.ts # Shift+Enter → \n (multiline support)
|
|
178
181
|
│ ├── env.ts # macOS PATH resolution (Homebrew)
|
|
179
182
|
│ ├── skills.ts # Version comparison / placeholder substitution
|
|
183
|
+
│ ├── cli.ts # CLI argument parsing (pure functions)
|
|
184
|
+
│ ├── config.ts # Config file parsing/loading (pure functions)
|
|
185
|
+
│ ├── markdown.ts # Markdown → HTML conversion (no external deps)
|
|
186
|
+
│ ├── profile.ts # Static site page generation (profile, TIL pages, category index)
|
|
180
187
|
│ └── index.ts # Barrel export
|
|
181
188
|
├── ports/ # Adapter interfaces
|
|
182
189
|
│ ├── storage.ts # FileStorage interface
|
|
@@ -185,10 +192,12 @@ src/
|
|
|
185
192
|
│ ├── fs-adapter.ts # node:fs based (standalone)
|
|
186
193
|
│ └── obsidian-adapter.ts # Obsidian App based
|
|
187
194
|
├── mcp/ # MCP server (port-dependent, Obsidian-free)
|
|
195
|
+
│ ├── context.ts # Learning context tools (topic matching, category extraction)
|
|
188
196
|
│ ├── server.ts # HTTP server + Streamable HTTP transport
|
|
189
197
|
│ └── tools.ts # MCP tool definitions (FileStorage + MetadataProvider)
|
|
198
|
+
├── plugin-install.ts # Plugin asset auto-install/update (skills, agents, CLAUDE.md section)
|
|
190
199
|
├── cli/ # Standalone CLI entry point
|
|
191
|
-
│ ├── index.ts # npx oh-my-til init / serve
|
|
200
|
+
│ ├── index.ts # npx oh-my-til init / serve / deploy
|
|
192
201
|
│ └── obsidian-install.ts # Auto-install Obsidian plugin (Electron detection, node-pty rebuild)
|
|
193
202
|
└── obsidian/ # Obsidian platform adapter
|
|
194
203
|
├── main.ts # Plugin entry point
|
package/dist/cli.js
CHANGED
|
@@ -38784,6 +38784,28 @@ function parseBacklogSections(content) {
|
|
|
38784
38784
|
}
|
|
38785
38785
|
return sections.filter((s) => s.items.length > 0);
|
|
38786
38786
|
}
|
|
38787
|
+
function checkBacklogItem(content, slug) {
|
|
38788
|
+
const lines = content.split("\n");
|
|
38789
|
+
let found = false;
|
|
38790
|
+
let alreadyDone = false;
|
|
38791
|
+
for (let i = 0; i < lines.length; i++) {
|
|
38792
|
+
const match = lines[i].match(/^(-\s+\[)([ xX])(\]\s+\[[^\[\]]*\]\()([^()]+)(\).*)/);
|
|
38793
|
+
if (!match)
|
|
38794
|
+
continue;
|
|
38795
|
+
const rawPath = match[4].trim();
|
|
38796
|
+
const pathSlug = rawPath.replace(/\.md$/, "").split("/").pop() ?? "";
|
|
38797
|
+
if (pathSlug !== slug)
|
|
38798
|
+
continue;
|
|
38799
|
+
found = true;
|
|
38800
|
+
if (match[2] !== " ") {
|
|
38801
|
+
alreadyDone = true;
|
|
38802
|
+
break;
|
|
38803
|
+
}
|
|
38804
|
+
lines[i] = `${match[1]}x${match[3]}${match[4]}${match[5]}`;
|
|
38805
|
+
break;
|
|
38806
|
+
}
|
|
38807
|
+
return { content: lines.join("\n"), found, alreadyDone };
|
|
38808
|
+
}
|
|
38787
38809
|
|
|
38788
38810
|
// src/core/stats.ts
|
|
38789
38811
|
var DAY_MS = 24 * 60 * 60 * 1e3;
|
|
@@ -39368,13 +39390,18 @@ ${text}` }] };
|
|
|
39368
39390
|
"til_list",
|
|
39369
39391
|
{
|
|
39370
39392
|
title: "List TILs",
|
|
39371
|
-
description: "TIL \uD30C\uC77C \uBAA9\uB85D\uACFC \uCE74\uD14C\uACE0\uB9AC\uBCC4 \uBD84\uB958\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
39393
|
+
description: "TIL \uD30C\uC77C \uBAA9\uB85D\uACFC \uCE74\uD14C\uACE0\uB9AC\uBCC4 \uBD84\uB958\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. search\uB85C \uD30C\uC77C\uBA85/\uACBD\uB85C \uD544\uD130\uB9C1 \uAC00\uB2A5.",
|
|
39372
39394
|
inputSchema: external_exports3.object({
|
|
39373
|
-
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1")
|
|
39395
|
+
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1"),
|
|
39396
|
+
search: external_exports3.string().optional().describe("\uD30C\uC77C \uACBD\uB85C/\uC774\uB984\uC5D0\uC11C \uAC80\uC0C9 (\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC)")
|
|
39374
39397
|
})
|
|
39375
39398
|
},
|
|
39376
|
-
async ({ category }) => {
|
|
39377
|
-
|
|
39399
|
+
async ({ category, search }) => {
|
|
39400
|
+
let filePaths = (await storage.listFiles()).filter((f) => f.path.startsWith(tilPath + "/") && f.extension === "md").map((f) => f.path);
|
|
39401
|
+
if (search) {
|
|
39402
|
+
const lowerSearch = search.toLowerCase();
|
|
39403
|
+
filePaths = filePaths.filter((p) => p.toLowerCase().includes(lowerSearch));
|
|
39404
|
+
}
|
|
39378
39405
|
const byCategory = groupFilesByCategory(filePaths, tilPath, category);
|
|
39379
39406
|
const totalCount = Object.values(byCategory).reduce((sum, paths) => sum + paths.length, 0);
|
|
39380
39407
|
const categories = Object.entries(byCategory).map(([cat, paths]) => ({
|
|
@@ -39674,6 +39701,90 @@ ${text}` }] };
|
|
|
39674
39701
|
};
|
|
39675
39702
|
}
|
|
39676
39703
|
);
|
|
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
|
+
server.registerTool(
|
|
39722
|
+
"til_save_note",
|
|
39723
|
+
{
|
|
39724
|
+
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.",
|
|
39726
|
+
inputSchema: external_exports3.object({
|
|
39727
|
+
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
39728
|
+
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)"),
|
|
39729
|
+
title: external_exports3.string().describe("\uB178\uD2B8 \uC81C\uBAA9"),
|
|
39730
|
+
content: external_exports3.string().describe("\uB178\uD2B8 \uBCF8\uBB38 (\uB9C8\uD06C\uB2E4\uC6B4)"),
|
|
39731
|
+
tags: external_exports3.array(external_exports3.string()).optional().describe('\uD0DC\uADF8 \uBAA9\uB85D (\uC608: ["typescript", "basics"])'),
|
|
39732
|
+
date: external_exports3.string().optional().describe("\uC791\uC131\uC77C (YYYY-MM-DD, \uC0DD\uB7B5 \uC2DC \uC624\uB298)"),
|
|
39733
|
+
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"])')
|
|
39735
|
+
})
|
|
39736
|
+
},
|
|
39737
|
+
async ({ category, slug, title, content, tags, date: date5, fmCategory, aliases }) => {
|
|
39738
|
+
const path6 = `${tilPath}/${category}/${slug}.md`;
|
|
39739
|
+
const noteDate = date5 || (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
39740
|
+
const fmLines = ["---", `title: "${title.replace(/"/g, '\\"')}"`, `date: ${noteDate}`];
|
|
39741
|
+
const effectiveCategory = fmCategory ?? category;
|
|
39742
|
+
fmLines.push(`category: ${effectiveCategory}`);
|
|
39743
|
+
if (tags && tags.length > 0) {
|
|
39744
|
+
fmLines.push("tags:");
|
|
39745
|
+
for (const tag of tags) {
|
|
39746
|
+
fmLines.push(` - ${tag}`);
|
|
39747
|
+
}
|
|
39748
|
+
}
|
|
39749
|
+
if (aliases && aliases.length > 0) {
|
|
39750
|
+
fmLines.push(`aliases: [${aliases.map((a) => `"${a.replace(/"/g, '\\"')}"`).join(", ")}]`);
|
|
39751
|
+
}
|
|
39752
|
+
fmLines.push("---", "");
|
|
39753
|
+
const fullContent = fmLines.join("\n") + content;
|
|
39754
|
+
await storage.mkdir(`${tilPath}/${category}`);
|
|
39755
|
+
const existed = await storage.exists(path6);
|
|
39756
|
+
await storage.writeFile(path6, fullContent);
|
|
39757
|
+
const data = { path: path6, created: !existed, category, slug, title };
|
|
39758
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
39759
|
+
}
|
|
39760
|
+
);
|
|
39761
|
+
server.registerTool(
|
|
39762
|
+
"til_backlog_check",
|
|
39763
|
+
{
|
|
39764
|
+
title: "Check Backlog Item",
|
|
39765
|
+
description: "\uBC31\uB85C\uADF8 \uD56D\uBAA9\uC744 \uC644\uB8CC([x]) \uCC98\uB9AC\uD569\uB2C8\uB2E4",
|
|
39766
|
+
inputSchema: external_exports3.object({
|
|
39767
|
+
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
39768
|
+
slug: external_exports3.string().describe("\uCCB4\uD06C\uD560 \uD56D\uBAA9\uC758 slug (\uC608: generics)")
|
|
39769
|
+
})
|
|
39770
|
+
},
|
|
39771
|
+
async ({ category, slug }) => {
|
|
39772
|
+
const backlogPath = `${tilPath}/${category}/backlog.md`;
|
|
39773
|
+
const content = await storage.readFile(backlogPath);
|
|
39774
|
+
if (content === null) {
|
|
39775
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: `\uBC31\uB85C\uADF8 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${backlogPath}` }) }], isError: true };
|
|
39776
|
+
}
|
|
39777
|
+
const result = checkBacklogItem(content, slug);
|
|
39778
|
+
if (!result.found) {
|
|
39779
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: `"${slug}" \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4`, backlogPath }) }], isError: true };
|
|
39780
|
+
}
|
|
39781
|
+
if (result.alreadyDone) {
|
|
39782
|
+
return { content: [{ type: "text", text: JSON.stringify({ alreadyDone: true, slug, backlogPath }) }] };
|
|
39783
|
+
}
|
|
39784
|
+
await storage.writeFile(backlogPath, result.content);
|
|
39785
|
+
return { content: [{ type: "text", text: JSON.stringify({ checked: true, slug, backlogPath }) }] };
|
|
39786
|
+
}
|
|
39787
|
+
);
|
|
39677
39788
|
}
|
|
39678
39789
|
|
|
39679
39790
|
// src/mcp/server.ts
|
|
@@ -39764,16 +39875,16 @@ var TILMcpServer = class {
|
|
|
39764
39875
|
};
|
|
39765
39876
|
|
|
39766
39877
|
// vault-assets/skills/til/SKILL.md
|
|
39767
|
-
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. `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\
|
|
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- `til_exists`: TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \uD655\uC778\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. `til_exists(category, slug)`\uB85C \uBE60\uB978 \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';
|
|
39768
39879
|
|
|
39769
39880
|
// vault-assets/skills/backlog/SKILL.md
|
|
39770
39881
|
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';
|
|
39771
39882
|
|
|
39772
39883
|
// vault-assets/skills/research/SKILL.md
|
|
39773
|
-
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## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC8FC\uC81C \uC870\uC0AC, \uD544\uC694 \uAC1C\uB150\xB7\uC6A9\uC5B4\xB7\uC120\uD589 \uC9C0\uC2DD \uD30C\uC545\
|
|
39884
|
+
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';
|
|
39774
39885
|
|
|
39775
39886
|
// vault-assets/skills/save/SKILL.md
|
|
39776
|
-
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- `vault_get_active_file`: \uC0AC\uC6A9\uC790 \uD30C\uC77C \uCEE8\uD14D\uC2A4\uD2B8\n\n## Step 1: \uCEE8\uD14D\uC2A4\uD2B8 \uD655\uC778\n\
|
|
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- `til_exists`: TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \uD655\uC778\n- `til_save_note`: TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uC11C\uBC84 \uBCF4\uC7A5)\n- `til_backlog_check`: \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC\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. `til_exists(category, slug)`\uB85C \uB3D9\uC77C \uC2AC\uB7EC\uADF8 \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \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)\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 `til_exists`\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_backlog_check(category, slug)` MCP \uB3C4\uAD6C\uB85C \uD574\uB2F9 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC\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';
|
|
39777
39888
|
|
|
39778
39889
|
// vault-assets/skills/migrate-links/SKILL.md
|
|
39779
39890
|
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';
|
|
@@ -39788,10 +39899,10 @@ var SKILL_default7 = '---\nname: setup-pages\ndescription: "(deprecated) /omt-se
|
|
|
39788
39899
|
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';
|
|
39789
39900
|
|
|
39790
39901
|
// vault-assets/skills/til-review/SKILL.md
|
|
39791
|
-
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- `vault_read_note`: \uCE74\uB4DC \uB0B4\uC6A9 \uC77D\uAE30\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (\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-
|
|
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- `vault_read_note`: \uCE74\uB4DC \uB0B4\uC6A9 \uC77D\uAE30\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (\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. `vault_read_note`\uB85C \uB0B4\uC6A9 \uC77D\uAE30\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';
|
|
39792
39903
|
|
|
39793
39904
|
// vault-assets/claude-md-section.md
|
|
39794
|
-
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- `vault_read_note` \u2014 \uB178\uD2B8 \uC77D\uAE30\n- `vault_list_files` \u2014 \uD30C\uC77C \uBAA9\uB85D\n- `vault_search` \u2014 \uD14D\uC2A4\uD2B8 \uAC80\uC0C9\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uD30C\uC77C\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uCEE8\uD14D\uC2A4\uD2B8\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984\n- `til_backlog_status` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589\uB960\n- `til_dashboard` \u2014 \uD559\uC2B5 \uD1B5\uACC4\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n### \uC5F0\uACB0\n\n```bash\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n```\n";
|
|
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- `vault_read_note` \u2014 \uB178\uD2B8 \uC77D\uAE30\n- `vault_list_files` \u2014 \uD30C\uC77C \uBAA9\uB85D\n- `vault_search` \u2014 \uD14D\uC2A4\uD2B8 \uAC80\uC0C9\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uD30C\uC77C\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958 (search \uD544\uD130 \uC9C0\uC6D0)\n- `til_exists` \u2014 TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778\n- `til_save_note` \u2014 TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uBCF4\uC7A5, category\xB7aliases \uC9C0\uC6D0)\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uCEE8\uD14D\uC2A4\uD2B8\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984\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\n- `til_dashboard` \u2014 \uD559\uC2B5 \uD1B5\uACC4\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n### \uC5F0\uACB0\n\n```bash\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n```\n";
|
|
39795
39906
|
|
|
39796
39907
|
// vault-assets/agents/til-fetcher.md
|
|
39797
39908
|
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';
|
|
@@ -41130,7 +41241,7 @@ function generateProfileHtml(config2, summaryCardsHtml, heatmapHtml, recentTilsH
|
|
|
41130
41241
|
// src/cli/index.ts
|
|
41131
41242
|
var path5 = __toESM(require("path"));
|
|
41132
41243
|
var fs4 = __toESM(require("fs"));
|
|
41133
|
-
var VERSION = true ? "0.12.
|
|
41244
|
+
var VERSION = true ? "0.12.3" : "0.0.0";
|
|
41134
41245
|
function printUsage() {
|
|
41135
41246
|
console.log(`oh-my-til v${VERSION}
|
|
41136
41247
|
|
package/main.js
CHANGED
|
@@ -21543,6 +21543,29 @@ function parseBacklogSections(content) {
|
|
|
21543
21543
|
}
|
|
21544
21544
|
return sections.filter((s) => s.items.length > 0);
|
|
21545
21545
|
}
|
|
21546
|
+
function checkBacklogItem(content, slug) {
|
|
21547
|
+
var _a4;
|
|
21548
|
+
const lines = content.split("\n");
|
|
21549
|
+
let found = false;
|
|
21550
|
+
let alreadyDone = false;
|
|
21551
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21552
|
+
const match = lines[i].match(/^(-\s+\[)([ xX])(\]\s+\[[^\[\]]*\]\()([^()]+)(\).*)/);
|
|
21553
|
+
if (!match)
|
|
21554
|
+
continue;
|
|
21555
|
+
const rawPath = match[4].trim();
|
|
21556
|
+
const pathSlug = (_a4 = rawPath.replace(/\.md$/, "").split("/").pop()) != null ? _a4 : "";
|
|
21557
|
+
if (pathSlug !== slug)
|
|
21558
|
+
continue;
|
|
21559
|
+
found = true;
|
|
21560
|
+
if (match[2] !== " ") {
|
|
21561
|
+
alreadyDone = true;
|
|
21562
|
+
break;
|
|
21563
|
+
}
|
|
21564
|
+
lines[i] = `${match[1]}x${match[3]}${match[4]}${match[5]}`;
|
|
21565
|
+
break;
|
|
21566
|
+
}
|
|
21567
|
+
return { content: lines.join("\n"), found, alreadyDone };
|
|
21568
|
+
}
|
|
21546
21569
|
function extractTopicFromPath(filePath, tilPath) {
|
|
21547
21570
|
const prefix = tilPath.endsWith("/") ? tilPath : tilPath + "/";
|
|
21548
21571
|
if (!filePath.startsWith(prefix))
|
|
@@ -47549,13 +47572,18 @@ ${text}` }] };
|
|
|
47549
47572
|
"til_list",
|
|
47550
47573
|
{
|
|
47551
47574
|
title: "List TILs",
|
|
47552
|
-
description: "TIL \uD30C\uC77C \uBAA9\uB85D\uACFC \uCE74\uD14C\uACE0\uB9AC\uBCC4 \uBD84\uB958\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4",
|
|
47575
|
+
description: "TIL \uD30C\uC77C \uBAA9\uB85D\uACFC \uCE74\uD14C\uACE0\uB9AC\uBCC4 \uBD84\uB958\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. search\uB85C \uD30C\uC77C\uBA85/\uACBD\uB85C \uD544\uD130\uB9C1 \uAC00\uB2A5.",
|
|
47553
47576
|
inputSchema: external_exports3.object({
|
|
47554
|
-
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1")
|
|
47577
|
+
category: external_exports3.string().optional().describe("\uD2B9\uC815 \uCE74\uD14C\uACE0\uB9AC\uB9CC \uD544\uD130\uB9C1"),
|
|
47578
|
+
search: external_exports3.string().optional().describe("\uD30C\uC77C \uACBD\uB85C/\uC774\uB984\uC5D0\uC11C \uAC80\uC0C9 (\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC)")
|
|
47555
47579
|
})
|
|
47556
47580
|
},
|
|
47557
|
-
async ({ category }) => {
|
|
47558
|
-
|
|
47581
|
+
async ({ category, search }) => {
|
|
47582
|
+
let filePaths = (await storage.listFiles()).filter((f) => f.path.startsWith(tilPath + "/") && f.extension === "md").map((f) => f.path);
|
|
47583
|
+
if (search) {
|
|
47584
|
+
const lowerSearch = search.toLowerCase();
|
|
47585
|
+
filePaths = filePaths.filter((p) => p.toLowerCase().includes(lowerSearch));
|
|
47586
|
+
}
|
|
47559
47587
|
const byCategory = groupFilesByCategory(filePaths, tilPath, category);
|
|
47560
47588
|
const totalCount = Object.values(byCategory).reduce((sum, paths) => sum + paths.length, 0);
|
|
47561
47589
|
const categories = Object.entries(byCategory).map(([cat, paths]) => ({
|
|
@@ -47860,6 +47888,90 @@ ${text}` }] };
|
|
|
47860
47888
|
};
|
|
47861
47889
|
}
|
|
47862
47890
|
);
|
|
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
|
+
server.registerTool(
|
|
47909
|
+
"til_save_note",
|
|
47910
|
+
{
|
|
47911
|
+
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.",
|
|
47913
|
+
inputSchema: external_exports3.object({
|
|
47914
|
+
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
47915
|
+
slug: external_exports3.string().describe("\uD30C\uC77C\uBA85 slug (\uC608: generics, hooks)"),
|
|
47916
|
+
title: external_exports3.string().describe("\uB178\uD2B8 \uC81C\uBAA9"),
|
|
47917
|
+
content: external_exports3.string().describe("\uB178\uD2B8 \uBCF8\uBB38 (\uB9C8\uD06C\uB2E4\uC6B4)"),
|
|
47918
|
+
tags: external_exports3.array(external_exports3.string()).optional().describe('\uD0DC\uADF8 \uBAA9\uB85D (\uC608: ["typescript", "basics"])'),
|
|
47919
|
+
date: external_exports3.string().optional().describe("\uC791\uC131\uC77C (YYYY-MM-DD, \uC0DD\uB7B5 \uC2DC \uC624\uB298)"),
|
|
47920
|
+
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"])')
|
|
47922
|
+
})
|
|
47923
|
+
},
|
|
47924
|
+
async ({ category, slug, title, content, tags, date: date7, fmCategory, aliases }) => {
|
|
47925
|
+
const path3 = `${tilPath}/${category}/${slug}.md`;
|
|
47926
|
+
const noteDate = date7 || (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
47927
|
+
const fmLines = ["---", `title: "${title.replace(/"/g, '\\"')}"`, `date: ${noteDate}`];
|
|
47928
|
+
const effectiveCategory = fmCategory != null ? fmCategory : category;
|
|
47929
|
+
fmLines.push(`category: ${effectiveCategory}`);
|
|
47930
|
+
if (tags && tags.length > 0) {
|
|
47931
|
+
fmLines.push("tags:");
|
|
47932
|
+
for (const tag of tags) {
|
|
47933
|
+
fmLines.push(` - ${tag}`);
|
|
47934
|
+
}
|
|
47935
|
+
}
|
|
47936
|
+
if (aliases && aliases.length > 0) {
|
|
47937
|
+
fmLines.push(`aliases: [${aliases.map((a) => `"${a.replace(/"/g, '\\"')}"`).join(", ")}]`);
|
|
47938
|
+
}
|
|
47939
|
+
fmLines.push("---", "");
|
|
47940
|
+
const fullContent = fmLines.join("\n") + content;
|
|
47941
|
+
await storage.mkdir(`${tilPath}/${category}`);
|
|
47942
|
+
const existed = await storage.exists(path3);
|
|
47943
|
+
await storage.writeFile(path3, fullContent);
|
|
47944
|
+
const data = { path: path3, created: !existed, category, slug, title };
|
|
47945
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
47946
|
+
}
|
|
47947
|
+
);
|
|
47948
|
+
server.registerTool(
|
|
47949
|
+
"til_backlog_check",
|
|
47950
|
+
{
|
|
47951
|
+
title: "Check Backlog Item",
|
|
47952
|
+
description: "\uBC31\uB85C\uADF8 \uD56D\uBAA9\uC744 \uC644\uB8CC([x]) \uCC98\uB9AC\uD569\uB2C8\uB2E4",
|
|
47953
|
+
inputSchema: external_exports3.object({
|
|
47954
|
+
category: external_exports3.string().describe("\uCE74\uD14C\uACE0\uB9AC (\uC608: typescript, react)"),
|
|
47955
|
+
slug: external_exports3.string().describe("\uCCB4\uD06C\uD560 \uD56D\uBAA9\uC758 slug (\uC608: generics)")
|
|
47956
|
+
})
|
|
47957
|
+
},
|
|
47958
|
+
async ({ category, slug }) => {
|
|
47959
|
+
const backlogPath = `${tilPath}/${category}/backlog.md`;
|
|
47960
|
+
const content = await storage.readFile(backlogPath);
|
|
47961
|
+
if (content === null) {
|
|
47962
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: `\uBC31\uB85C\uADF8 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${backlogPath}` }) }], isError: true };
|
|
47963
|
+
}
|
|
47964
|
+
const result = checkBacklogItem(content, slug);
|
|
47965
|
+
if (!result.found) {
|
|
47966
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: `"${slug}" \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4`, backlogPath }) }], isError: true };
|
|
47967
|
+
}
|
|
47968
|
+
if (result.alreadyDone) {
|
|
47969
|
+
return { content: [{ type: "text", text: JSON.stringify({ alreadyDone: true, slug, backlogPath }) }] };
|
|
47970
|
+
}
|
|
47971
|
+
await storage.writeFile(backlogPath, result.content);
|
|
47972
|
+
return { content: [{ type: "text", text: JSON.stringify({ checked: true, slug, backlogPath }) }] };
|
|
47973
|
+
}
|
|
47974
|
+
);
|
|
47863
47975
|
}
|
|
47864
47976
|
|
|
47865
47977
|
// src/mcp/server.ts
|
|
@@ -47952,16 +48064,16 @@ var TILMcpServer = class {
|
|
|
47952
48064
|
};
|
|
47953
48065
|
|
|
47954
48066
|
// vault-assets/skills/til/SKILL.md
|
|
47955
|
-
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. `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\
|
|
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- `til_exists`: TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \uD655\uC778\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. `til_exists(category, slug)`\uB85C \uBE60\uB978 \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';
|
|
47956
48068
|
|
|
47957
48069
|
// vault-assets/skills/backlog/SKILL.md
|
|
47958
48070
|
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';
|
|
47959
48071
|
|
|
47960
48072
|
// vault-assets/skills/research/SKILL.md
|
|
47961
|
-
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## Phase 1: \uC8FC\uC81C \uB9AC\uC11C\uCE58\n\n1. \uC6F9 \uAC80\uC0C9\uC73C\uB85C \uC8FC\uC81C \uC870\uC0AC, \uD544\uC694 \uAC1C\uB150\xB7\uC6A9\uC5B4\xB7\uC120\uD589 \uC9C0\uC2DD \uD30C\uC545\
|
|
48073
|
+
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';
|
|
47962
48074
|
|
|
47963
48075
|
// vault-assets/skills/save/SKILL.md
|
|
47964
|
-
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- `vault_get_active_file`: \uC0AC\uC6A9\uC790 \uD30C\uC77C \uCEE8\uD14D\uC2A4\uD2B8\n\n## Step 1: \uCEE8\uD14D\uC2A4\uD2B8 \uD655\uC778\n\
|
|
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- `til_exists`: TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \uD655\uC778\n- `til_save_note`: TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uC11C\uBC84 \uBCF4\uC7A5)\n- `til_backlog_check`: \uBC31\uB85C\uADF8 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC\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. `til_exists(category, slug)`\uB85C \uB3D9\uC77C \uC2AC\uB7EC\uADF8 \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uBE60\uB978 \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)\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 `til_exists`\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_backlog_check(category, slug)` MCP \uB3C4\uAD6C\uB85C \uD574\uB2F9 \uD56D\uBAA9 \uC644\uB8CC \uCC98\uB9AC\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';
|
|
47965
48077
|
|
|
47966
48078
|
// vault-assets/skills/migrate-links/SKILL.md
|
|
47967
48079
|
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';
|
|
@@ -47976,10 +48088,10 @@ var SKILL_default7 = '---\nname: setup-pages\ndescription: "(deprecated) /omt-se
|
|
|
47976
48088
|
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';
|
|
47977
48089
|
|
|
47978
48090
|
// vault-assets/skills/til-review/SKILL.md
|
|
47979
|
-
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- `vault_read_note`: \uCE74\uB4DC \uB0B4\uC6A9 \uC77D\uAE30\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (\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-
|
|
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- `vault_read_note`: \uCE74\uB4DC \uB0B4\uC6A9 \uC77D\uAE30\n\n## Step 1: \uBCF5\uC2B5 \uCE74\uB4DC \uB85C\uB4DC\n\n`til_review_list` \uD638\uCD9C (\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. `vault_read_note`\uB85C \uB0B4\uC6A9 \uC77D\uAE30\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';
|
|
47980
48092
|
|
|
47981
48093
|
// vault-assets/claude-md-section.md
|
|
47982
|
-
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- `vault_read_note` \u2014 \uB178\uD2B8 \uC77D\uAE30\n- `vault_list_files` \u2014 \uD30C\uC77C \uBAA9\uB85D\n- `vault_search` \u2014 \uD14D\uC2A4\uD2B8 \uAC80\uC0C9\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uD30C\uC77C\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uCEE8\uD14D\uC2A4\uD2B8\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984\n- `til_backlog_status` \u2014 \uBC31\uB85C\uADF8 \uC9C4\uD589\uB960\n- `til_dashboard` \u2014 \uD559\uC2B5 \uD1B5\uACC4\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n### \uC5F0\uACB0\n\n```bash\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n```\n";
|
|
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- `vault_read_note` \u2014 \uB178\uD2B8 \uC77D\uAE30\n- `vault_list_files` \u2014 \uD30C\uC77C \uBAA9\uB85D\n- `vault_search` \u2014 \uD14D\uC2A4\uD2B8 \uAC80\uC0C9\n- `vault_get_active_file` \u2014 \uD604\uC7AC \uD30C\uC77C\n- `til_list` \u2014 TIL \uBAA9\uB85D + \uCE74\uD14C\uACE0\uB9AC \uBD84\uB958 (search \uD544\uD130 \uC9C0\uC6D0)\n- `til_exists` \u2014 TIL \uD30C\uC77C \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778\n- `til_save_note` \u2014 TIL \uB178\uD2B8 \uC800\uC7A5 (frontmatter/\uACBD\uB85C \uADDC\uCE59 \uBCF4\uC7A5, category\xB7aliases \uC9C0\uC6D0)\n- `til_get_context` \u2014 \uC8FC\uC81C \uAD00\uB828 \uCEE8\uD14D\uC2A4\uD2B8\n- `til_recent_context` \u2014 \uCD5C\uADFC \uD559\uC2B5 \uD750\uB984\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\n- `til_dashboard` \u2014 \uD559\uC2B5 \uD1B5\uACC4\n- `til_review_list` \u2014 \uBCF5\uC2B5 \uB300\uC0C1 \uCE74\uB4DC \uBAA9\uB85D + \uD1B5\uACC4\n- `til_review_update` \u2014 \uBCF5\uC2B5 \uACB0\uACFC \uAE30\uB85D \uB610\uB294 \uBCF5\uC2B5 \uD574\uC81C\n\n### \uC5F0\uACB0\n\n```bash\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n```\n";
|
|
47983
48095
|
|
|
47984
48096
|
// vault-assets/agents/til-fetcher.md
|
|
47985
48097
|
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