codex-skills-mcp 1.3.2 → 1.4.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.
Files changed (52) hide show
  1. package/README.md +61 -18
  2. package/dist/config.d.ts +2 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +12 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.js +26 -14
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/logger.d.ts +36 -0
  9. package/dist/lib/logger.d.ts.map +1 -0
  10. package/dist/lib/logger.js +143 -0
  11. package/dist/lib/logger.js.map +1 -0
  12. package/dist/lib/protocol.d.ts +21 -0
  13. package/dist/lib/protocol.d.ts.map +1 -0
  14. package/dist/lib/protocol.js +30 -0
  15. package/dist/lib/protocol.js.map +1 -0
  16. package/dist/loader/index.d.ts +11 -0
  17. package/dist/loader/index.d.ts.map +1 -1
  18. package/dist/loader/index.js +27 -0
  19. package/dist/loader/index.js.map +1 -1
  20. package/dist/remote/github.d.ts +24 -0
  21. package/dist/remote/github.d.ts.map +1 -1
  22. package/dist/remote/github.js +91 -14
  23. package/dist/remote/github.js.map +1 -1
  24. package/dist/tools/diagnostics.d.ts +6 -0
  25. package/dist/tools/diagnostics.d.ts.map +1 -0
  26. package/dist/tools/diagnostics.js +115 -0
  27. package/dist/tools/diagnostics.js.map +1 -0
  28. package/dist/tools/list-categories.d.ts.map +1 -1
  29. package/dist/tools/list-categories.js +4 -3
  30. package/dist/tools/list-categories.js.map +1 -1
  31. package/dist/tools/list-skill-files.d.ts.map +1 -1
  32. package/dist/tools/list-skill-files.js +9 -5
  33. package/dist/tools/list-skill-files.js.map +1 -1
  34. package/dist/tools/load-skill-file.d.ts.map +1 -1
  35. package/dist/tools/load-skill-file.js +8 -4
  36. package/dist/tools/load-skill-file.js.map +1 -1
  37. package/dist/tools/plan-workflow.d.ts +2 -1
  38. package/dist/tools/plan-workflow.d.ts.map +1 -1
  39. package/dist/tools/plan-workflow.js +23 -16
  40. package/dist/tools/plan-workflow.js.map +1 -1
  41. package/dist/tools/read-skill.d.ts.map +1 -1
  42. package/dist/tools/read-skill.js +43 -7
  43. package/dist/tools/read-skill.js.map +1 -1
  44. package/dist/tools/search-skills.d.ts +2 -1
  45. package/dist/tools/search-skills.d.ts.map +1 -1
  46. package/dist/tools/search-skills.js +12 -8
  47. package/dist/tools/search-skills.js.map +1 -1
  48. package/dist/tools/skill-status.d.ts +5 -0
  49. package/dist/tools/skill-status.d.ts.map +1 -0
  50. package/dist/tools/skill-status.js +70 -0
  51. package/dist/tools/skill-status.js.map +1 -0
  52. package/package.json +1 -1
package/README.md CHANGED
@@ -12,7 +12,10 @@
12
12
 
13
13
  | 特性 | 说明 |
14
14
  |------|------|
15
- | **6 个 MCP Tools** | search_skills, read_skill, load_skill_file, list_skill_files, list_categories, plan_workflow |
15
+ | **8 个 MCP Tools** | search_skills, read_skill, load_skill_file, list_skill_files, list_categories, plan_workflow, skill_status, diagnostics |
16
+ | **Agent 行为合约** | server instructions + 工具描述 + 返回体尾部三层强化同一套 5 步工作流(见 [docs/AGENT-PROTOCOL.md](docs/AGENT-PROTOCOL.md)) |
17
+ | **缓存状态可见** | search/plan 结果带 `[cached]` 徽标;read_skill 返回 `local_path`;skill_status 深度校验完整性 |
18
+ | **活动日志与诊断** | 全部工具调用/下载/错误落 JSONL 日志;diagnostics 一键审计 |
16
19
  | **三层渐进加载** | 检索(~500 tokens) → 阅读(~5K tokens) → 深入(按需) |
17
20
  | **中文搜索优化** | CJK bigram 分词 + Leading Words 权重 |
18
21
  | **零外部 AI 依赖** | 纯关键词搜索,不需要 embedding 模型 |
@@ -32,7 +35,7 @@ npx -y codex-skills-mcp@latest
32
35
 
33
36
  1. 从远端技能库拉取清单 `skills_manifest.json`(约 108KB,仅首次);
34
37
  2. 建立本地搜索索引(毫秒级);
35
- 3. 技能文件按需下载,缓存在当前目录 `.codex-skills-cache/`。
38
+ 3. 技能文件按需下载,缓存在 `~/.codex-skills-cache/`(可用 `--cache-dir` / `CODEX_SKILLS_CACHE_DIR` 覆盖)。
36
39
 
37
40
  ### 2. 本地模式(可选)
38
41
 
@@ -144,10 +147,11 @@ ngrok http 3456
144
147
  ```mermaid
145
148
  flowchart LR
146
149
  A["启动 MCP"] --> B["拉取清单 manifest + 建本地索引"]
147
- B --> C["search_skills 秒出结果"]
148
- C --> D["read_skill 按需拉取技能全文"]
149
- D --> E["load_skill_file 按需读脚本/配置"]
150
- E --> F["Agent 在本机执行"]
150
+ B --> C["plan_workflow / search_skills<br/>DISCOVER([cached] 徽标)"]
151
+ C --> D["read_skill x N<br/>MATERIALIZE:完整下载+缓存"]
152
+ D --> E["skill_status 校验(可选)"]
153
+ E --> F[" SKILL.md 从 local_path 执行<br/>load_skill_file 按需补读"]
154
+ F --> G["diagnostics / 汇报"]
151
155
  ```
152
156
 
153
157
  | 阶段 | 行为 | 耗时 |
@@ -167,9 +171,26 @@ flowchart LR
167
171
 
168
172
  前一个节点失败时自动降级到下一个;全部失败才会报错。
169
173
 
174
+ ### Agent 标准工作流(行为合约)
175
+
176
+ 服务端通过 initialize instructions、工具描述、返回体尾部三层向 Agent 强化同一套协议(措辞单点维护于 `src/lib/protocol.ts`):
177
+
178
+ 1. **DISCOVER** — `plan_workflow` / `search_skills` 检索;`[cached]` 徽标 = 已在本地,分数相近优先选;
179
+ 2. **SELECT** — 选出覆盖任务的最小技能组合;
180
+ 3. **MATERIALIZE(必做)** — 对每个选定技能调用 `read_skill`,完整下载到本地并返回 `local_path`;
181
+ 4. **EXECUTE** — 严格按 SKILL.md 执行,脚本从 `local_path` 运行,禁止凭通用知识自行替代;
182
+ 5. **VERIFY & REPORT** — `skill_status` 校验缓存完整性;`diagnostics` 排障并审计。
183
+
184
+ ### 日志与诊断
185
+
186
+ - 活动日志:`~/.codex-skills-cache/logs/mcp-activity-YYYY-MM-DD.jsonl`(按天分文件,保留 14 天,best-effort 不影响主流程);
187
+ - 记录事件:`tool_call` / `tool_result` / `download_skill_start` / `download_skill_complete` / `tool_error` / `server_start`;
188
+ - `diagnostics` 工具返回:近期调用、近期错误、缓存统计(已缓存技能数/体积)、清单新鲜度与配置摘要;
189
+ - 本地模式(`--skills-dir`)不写文件日志,仅镜像到 stderr。
190
+
170
191
  ### 缓存与增量同步
171
192
 
172
- - 清单与技能文件缓存在当前目录 `.codex-skills-cache/`,二次启动秒级完成;
193
+ - 清单与技能文件缓存在 `~/.codex-skills-cache/`,二次启动秒级完成;
173
194
  - 每个技能带 `.codex-skills.tree.json` 标记(文件列表 + 完成状态);
174
195
  - 已完整下载的技能直接本地读取,不重复请求远端;
175
196
  - 中断的下载支持断点续传:按文件大小比对,只补拉缺失/不完整的文件;
@@ -180,7 +201,7 @@ flowchart LR
180
201
 
181
202
  ### 🔍 search_skills
182
203
 
183
- 搜索技能库,Agent 的主入口。
204
+ 搜索技能库,Agent 的主入口(协议 STEP 1)。结果带 `[cached]` 徽标与"下一步必须 read_skill 物化"的协议尾部。
184
205
 
185
206
  ```
186
207
  input: { query: "前端性能优化", category?: "01_代码工程与架构", limit?: 8 }
@@ -198,7 +219,7 @@ output: 14 个分类 + 各自的技能数量
198
219
 
199
220
  ### 📖 read_skill
200
221
 
201
- 读取技能的完整指令(SKILL.md)+ 文件结构 + 环境依赖 + 子技能。
222
+ 物化技能(协议 STEP 3,执行前必调):完整下载技能目录到本地缓存(已缓存则秒回),返回 SKILL.md 指令 + 文件结构 + 依赖 + **Cache & Execution 段(local_path / 完整性 / setup 命令)** + 子技能。
202
223
 
203
224
  ```
204
225
  input: { name: "MediaCrawler" }
@@ -227,28 +248,48 @@ output: 目录树
227
248
 
228
249
  ### 🔗 plan_workflow
229
250
 
230
- 给定任务描述,推荐可组合使用的技能。
251
+ 给定任务描述,产出可组合技能的**有序执行计划草稿**(带 `[cached]` 徽标),并强制"先 read_skill 全部选定技能再开工"。
231
252
 
232
253
  ```
233
254
  input: { task_description: "把技术博客做成小红书图文" }
234
255
  output: 推荐技能列表 + 分类分组
235
256
  ```
236
257
 
237
- ## 使用流程
258
+ ### ✅ skill_status
259
+
260
+ 深度校验一个或多个技能的本地缓存完整性(逐文件大小核对,只读不下载)。
261
+
262
+ ``
263
+ input: { names: "KrillinAI, videocut-skills" }
264
+ output: cached/complete/local_path/files_total/files_missing/completed_at
265
+ ```
266
+
267
+ ### 🩺 diagnostics
268
+
269
+ 审计与排障:近期工具调用、近期错误(活动日志)、缓存统计、清单新鲜度、配置摘要。
270
+
271
+ ``
272
+ input: { include_log?: true, log_lines?: 20 }
273
+ output: Server / Manifest / Local skill cache / Recent errors / Recent tool calls
274
+ ```
275
+
276
+ ## 使用流程(示例)
238
277
 
239
278
  ```
240
279
  用户: "帮我把这个视频翻译成中文字幕"
241
280
 
242
- Agent → search_skills("视频字幕翻译")
243
- 命中: KrillinAI, videocut-skills, VideoClaw
281
+ Agent → plan_workflow("把视频翻译成中文字幕") # DISCOVER:拿到组合计划
282
+ Agent search_skills("视频字幕翻译") # DISCOVER:精确定位
283
+ → 命中: KrillinAI, videocut-skills, VideoClaw # [cached] 徽标优先
244
284
 
245
- Agent → read_skill("KrillinAI")
246
- 获取 SKILL.md 指令,了解怎么用
285
+ Agent → read_skill("KrillinAI") # MATERIALIZE:完整下载
286
+ 返回 SKILL.md + local_path + 依赖
287
+ Agent → read_skill("videocut-skills") # 每个选定技能都要物化
247
288
 
248
- Agent → load_skill_file("KrillinAI", "README.md")
249
- → 获取详细配置参数
289
+ Agent → skill_status("KrillinAI, videocut-skills") # VERIFY:确认缓存完整
250
290
 
251
- Agent → 按 SKILL.md 指令执行任务
291
+ Agent → 按 SKILL.md 从 local_path 执行任务 # EXECUTE:严格遵循指令
292
+ → 需要补充文件时 load_skill_file(...)
252
293
  ```
253
294
 
254
295
  ## 配置参考
@@ -275,6 +316,8 @@ Agent → 按 SKILL.md 指令执行任务
275
316
 
276
317
  | 问题 | 处理 |
277
318
  |------|------|
319
+ | Agent 读了 SKILL.md 却不按指令执行 | v1.4.0 起三层合约强制 5 步协议;仍异常时用 `diagnostics` 审计该 Agent 实际调用序列 |
320
+ | 想看 Agent 到底做了什么 | `diagnostics` 或直接读 `~/.codex-skills-cache/logs/mcp-activity-*.jsonl` |
278
321
  | npx 首次运行较慢 | 首次需下载 npm 包 + 拉取清单,属正常;之后走缓存 |
279
322
  | 日志出现 `Network warning` | 当前加速节点失败,自动降级到下一个,可忽略 |
280
323
  | 想强制更新技能内容 | 删除 `.codex-skills-cache/` 后重启,或设 `--manifest-ttl 60` 让清单自动高频刷新 |
package/dist/config.d.ts CHANGED
@@ -10,6 +10,8 @@ export interface Config {
10
10
  downloadConcurrency: number;
11
11
  /** Manifest cache TTL in milliseconds. Default 24 hours. 0 = never refresh. */
12
12
  manifestTTL: number;
13
+ /** Base download timeout for skill files in milliseconds. Default: 30000 (30s). */
14
+ downloadTimeout: number;
13
15
  }
14
16
  /**
15
17
  * Parse config from CLI args and env vars.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;CACrB;AAuBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CA0GlD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAGlE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;CACzB;AAuBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAsHlD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAGlE"}
package/dist/config.js CHANGED
@@ -102,6 +102,16 @@ export function parseConfig(args) {
102
102
  console.error("Error: --download-concurrency must be a positive integer");
103
103
  process.exit(1);
104
104
  }
105
+ // Base download timeout for skill files (default 30 seconds). Configurable via
106
+ // --download-timeout <seconds> or CODEX_SKILLS_DOWNLOAD_TIMEOUT env var.
107
+ const timeoutArg = getArg("--download-timeout");
108
+ const timeoutEnv = process.env.CODEX_SKILLS_DOWNLOAD_TIMEOUT;
109
+ const downloadTimeoutSeconds = parseInt(timeoutArg || timeoutEnv || "30", 10);
110
+ if (!Number.isInteger(downloadTimeoutSeconds) || downloadTimeoutSeconds < 1) {
111
+ console.error("Error: --download-timeout must be a positive integer");
112
+ process.exit(1);
113
+ }
114
+ const downloadTimeout = downloadTimeoutSeconds * 1000;
105
115
  return {
106
116
  skillsDir,
107
117
  manifestPath,
@@ -112,7 +122,8 @@ export function parseConfig(args) {
112
122
  githubToken,
113
123
  useCnMirror,
114
124
  downloadConcurrency,
115
- manifestTTL
125
+ manifestTTL,
126
+ downloadTimeout
116
127
  };
117
128
  }
118
129
  export function loadManifest(manifestPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,37 +23,45 @@ import { createRequire } from "node:module";
23
23
  import { parseConfig, loadManifest } from "./config.js";
24
24
  import { SkillSearchEngine } from "./search/index.js";
25
25
  import { SkillLoader } from "./loader/index.js";
26
+ import { SERVER_INSTRUCTIONS } from "./lib/protocol.js";
27
+ import { initLogger, logEvent } from "./lib/logger.js";
26
28
  import { registerSearchSkills } from "./tools/search-skills.js";
27
29
  import { registerListCategories } from "./tools/list-categories.js";
28
30
  import { registerReadSkill } from "./tools/read-skill.js";
29
31
  import { registerLoadSkillFile } from "./tools/load-skill-file.js";
30
32
  import { registerListSkillFiles } from "./tools/list-skill-files.js";
31
33
  import { registerPlanWorkflow } from "./tools/plan-workflow.js";
34
+ import { registerSkillStatus } from "./tools/skill-status.js";
35
+ import { registerDiagnostics } from "./tools/diagnostics.js";
32
36
  // Single source of truth for the version: read package.json instead of
33
37
  // hardcoding it here, so releasing a new version only requires one bump.
34
38
  const require = createRequire(import.meta.url);
35
39
  const PKG_VERSION = require("../package.json").version;
36
- function createServer(searchEngine, loader) {
37
- const server = new McpServer({
38
- name: "codex-skills",
39
- version: PKG_VERSION,
40
+ function createServer(config, searchEngine, loader) {
41
+ const server = new McpServer({ name: "codex-skills", version: PKG_VERSION }, {
42
+ // The agent-facing behavioral contract (docs/AGENT-PROTOCOL.md) is
43
+ // returned to clients in the initialize result and reinforced in every
44
+ // tool description and result footer.
45
+ instructions: SERVER_INSTRUCTIONS,
40
46
  });
41
- registerSearchSkills(server, searchEngine);
47
+ registerSearchSkills(server, searchEngine, loader);
42
48
  registerListCategories(server, searchEngine);
43
49
  registerReadSkill(server, searchEngine, loader);
44
50
  registerLoadSkillFile(server, searchEngine, loader);
45
51
  registerListSkillFiles(server, searchEngine, loader);
46
- registerPlanWorkflow(server, searchEngine);
52
+ registerPlanWorkflow(server, searchEngine, loader);
53
+ registerSkillStatus(server, searchEngine, loader);
54
+ registerDiagnostics(server, config, searchEngine, loader, PKG_VERSION);
47
55
  return server;
48
56
  }
49
- async function startStdio(searchEngine, loader) {
50
- const server = createServer(searchEngine, loader);
51
- console.error("[codex-skills-mcp] 6 tools registered, starting stdio server...");
57
+ async function startStdio(config, searchEngine, loader) {
58
+ const server = createServer(config, searchEngine, loader);
59
+ console.error("[codex-skills-mcp] 8 tools registered, starting stdio server...");
52
60
  const transport = new StdioServerTransport();
53
61
  await server.connect(transport);
54
62
  console.error("[codex-skills-mcp] Server running on stdio");
55
63
  }
56
- async function startHTTP(searchEngine, loader, port) {
64
+ async function startHTTP(config, searchEngine, loader, port) {
57
65
  // Dynamic import to avoid loading express in stdio mode
58
66
  const { default: express } = await import("express");
59
67
  const app = express();
@@ -104,7 +112,7 @@ async function startHTTP(searchEngine, loader, port) {
104
112
  sessions.delete(sid);
105
113
  };
106
114
  // Each session gets its own server instance
107
- const server = createServer(searchEngine, loader);
115
+ const server = createServer(config, searchEngine, loader);
108
116
  await server.connect(transport);
109
117
  }
110
118
  await transport.handleRequest(req, res, req.body);
@@ -142,7 +150,7 @@ async function startHTTP(searchEngine, loader, port) {
142
150
  activeSessions: sessions.size,
143
151
  });
144
152
  });
145
- console.error("[codex-skills-mcp] 6 tools registered, starting HTTP server...");
153
+ console.error("[codex-skills-mcp] 8 tools registered, starting HTTP server...");
146
154
  app.listen(port, () => {
147
155
  console.error(`[codex-skills-mcp] HTTP server running at http://localhost:${port}/mcp`);
148
156
  console.error(`[codex-skills-mcp] Health check: http://localhost:${port}/health`);
@@ -154,6 +162,10 @@ async function main() {
154
162
  // Parse configuration
155
163
  const config = parseConfig(args);
156
164
  if (config.isRemote) {
165
+ // Activity log lives under <cacheDir>/logs (remote mode only, so local
166
+ // skill libraries are never polluted). See docs/IMPROVEMENT-PLAN.md §7.
167
+ initLogger(config.skillsDir);
168
+ logEvent("info", "server_start", { detail: `v${PKG_VERSION} remote mode` });
157
169
  const { initRemote, fetchManifest } = await import("./remote/github.js");
158
170
  console.error("[codex-skills-mcp] Initializing remote GitHub fetching...");
159
171
  await initRemote(config);
@@ -176,10 +188,10 @@ async function main() {
176
188
  // Parse port
177
189
  const portIdx = args.indexOf("--port");
178
190
  const port = portIdx !== -1 && args[portIdx + 1] ? parseInt(args[portIdx + 1], 10) : 3456;
179
- await startHTTP(searchEngine, loader, port);
191
+ await startHTTP(config, searchEngine, loader, port);
180
192
  }
181
193
  else {
182
- await startStdio(searchEngine, loader);
194
+ await startStdio(config, searchEngine, loader);
183
195
  }
184
196
  }
185
197
  main().catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export type LogLevel = "info" | "warn" | "error";
2
+ export interface LogEvent {
3
+ ts: string;
4
+ level: LogLevel;
5
+ event: string;
6
+ tool?: string;
7
+ skill?: string;
8
+ duration_ms?: number;
9
+ ok?: boolean;
10
+ detail?: string;
11
+ error?: string;
12
+ }
13
+ /** Enable file logging under <cacheDir>/logs. Safe to call once at startup. */
14
+ export declare function initLogger(cacheDir: string): void;
15
+ /** True when file logging is active (used by diagnostics output). */
16
+ export declare function loggerActive(): boolean;
17
+ /** Log dir path (for diagnostics output). */
18
+ export declare function logDirPath(): string | null;
19
+ /** Append one event. Mirrors to stderr; never throws. */
20
+ export declare function logEvent(level: LogLevel, event: string, fields?: Omit<LogEvent, "ts" | "level" | "event">): void;
21
+ /**
22
+ * Read recent events across log files (newest first), optionally filtered by
23
+ * level and/or event type. Returns at most `limit` entries. Never throws.
24
+ */
25
+ export declare function readRecentEvents(options?: {
26
+ limit?: number;
27
+ level?: LogLevel;
28
+ event?: string;
29
+ }): LogEvent[];
30
+ /**
31
+ * Wrap a tool handler with call/result/error logging. Handlers that return
32
+ * error-text instead of throwing should additionally call logEvent themselves
33
+ * in their catch block (see tools/*).
34
+ */
35
+ export declare function withToolLogging<R>(tool: string, argSummary: Record<string, unknown>, fn: () => Promise<R>): Promise<R>;
36
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOjD;AAED,qEAAqE;AACrE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,6CAA6C;AAC7C,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C;AAgBD,yDAAyD;AACzD,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,CAAM,GACpD,IAAI,CA2BN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,QAAQ,EAAE,CAiC/G;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAgBZ"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Best-effort JSONL activity logger.
3
+ *
4
+ * - File per day: <cacheDir>/logs/mcp-activity-YYYY-MM-DD.jsonl
5
+ * - Retention: last 14 files swept at most once per day per process.
6
+ * - NEVER throws: every fs operation is wrapped; logging must not break tools.
7
+ * - Key events are mirrored to stderr for local debugging (MCP-safe: stderr,
8
+ * never stdout).
9
+ */
10
+ import { appendFileSync, mkdirSync, readdirSync, readFileSync, unlinkSync } from "node:fs";
11
+ import { join } from "node:path";
12
+ const LOG_FILE_PREFIX = "mcp-activity-";
13
+ const RETENTION_FILES = 14;
14
+ /** Active log directory; null = file logging disabled (e.g. local mode). */
15
+ let logDir = null;
16
+ let lastSweep = 0;
17
+ /** Enable file logging under <cacheDir>/logs. Safe to call once at startup. */
18
+ export function initLogger(cacheDir) {
19
+ try {
20
+ logDir = join(cacheDir, "logs");
21
+ mkdirSync(logDir, { recursive: true });
22
+ }
23
+ catch {
24
+ logDir = null;
25
+ }
26
+ }
27
+ /** True when file logging is active (used by diagnostics output). */
28
+ export function loggerActive() {
29
+ return logDir !== null;
30
+ }
31
+ /** Log dir path (for diagnostics output). */
32
+ export function logDirPath() {
33
+ return logDir;
34
+ }
35
+ function sweep() {
36
+ if (!logDir)
37
+ return;
38
+ try {
39
+ const files = readdirSync(logDir)
40
+ .filter((f) => f.startsWith(LOG_FILE_PREFIX) && f.endsWith(".jsonl"))
41
+ .sort();
42
+ while (files.length > RETENTION_FILES) {
43
+ unlinkSync(join(logDir, files.shift()));
44
+ }
45
+ }
46
+ catch {
47
+ // best-effort
48
+ }
49
+ }
50
+ /** Append one event. Mirrors to stderr; never throws. */
51
+ export function logEvent(level, event, fields = {}) {
52
+ const entry = { ts: new Date().toISOString(), level, event, ...fields };
53
+ const mirror = [
54
+ `[codex-skills-mcp] ${level} ${event}`,
55
+ fields.tool ? ` tool=${fields.tool}` : "",
56
+ fields.skill ? ` skill=${fields.skill}` : "",
57
+ fields.error ? ` error=${fields.error}` : "",
58
+ ].join("");
59
+ console.error(mirror);
60
+ if (!logDir)
61
+ return;
62
+ try {
63
+ const day = entry.ts.slice(0, 10);
64
+ appendFileSync(join(logDir, `${LOG_FILE_PREFIX}${day}.jsonl`), JSON.stringify(entry) + "\n", "utf-8");
65
+ const now = Date.now();
66
+ if (now - lastSweep > 24 * 3600 * 1000) {
67
+ lastSweep = now;
68
+ sweep();
69
+ }
70
+ }
71
+ catch {
72
+ // best-effort: ignore disk errors entirely
73
+ }
74
+ }
75
+ /**
76
+ * Read recent events across log files (newest first), optionally filtered by
77
+ * level and/or event type. Returns at most `limit` entries. Never throws.
78
+ */
79
+ export function readRecentEvents(options = {}) {
80
+ const { limit = 20, level, event } = options;
81
+ if (!logDir || limit <= 0)
82
+ return [];
83
+ const out = [];
84
+ try {
85
+ const files = readdirSync(logDir)
86
+ .filter((f) => f.startsWith(LOG_FILE_PREFIX) && f.endsWith(".jsonl"))
87
+ .sort()
88
+ .reverse();
89
+ outer: for (const file of files) {
90
+ let lines;
91
+ try {
92
+ lines = readFileSync(join(logDir, file), "utf-8").split("\n").filter(Boolean);
93
+ }
94
+ catch {
95
+ continue;
96
+ }
97
+ for (let i = lines.length - 1; i >= 0; i--) {
98
+ let parsed;
99
+ try {
100
+ parsed = JSON.parse(lines[i]);
101
+ }
102
+ catch {
103
+ continue;
104
+ }
105
+ if (level && parsed.level !== level)
106
+ continue;
107
+ if (event && parsed.event !== event)
108
+ continue;
109
+ out.push(parsed);
110
+ if (out.length >= limit)
111
+ break outer;
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // best-effort
117
+ }
118
+ return out;
119
+ }
120
+ /**
121
+ * Wrap a tool handler with call/result/error logging. Handlers that return
122
+ * error-text instead of throwing should additionally call logEvent themselves
123
+ * in their catch block (see tools/*).
124
+ */
125
+ export async function withToolLogging(tool, argSummary, fn) {
126
+ const startedAt = Date.now();
127
+ logEvent("info", "tool_call", { tool, detail: JSON.stringify(argSummary) });
128
+ try {
129
+ const result = await fn();
130
+ logEvent("info", "tool_result", { tool, ok: true, duration_ms: Date.now() - startedAt });
131
+ return result;
132
+ }
133
+ catch (err) {
134
+ logEvent("error", "tool_result", {
135
+ tool,
136
+ ok: false,
137
+ duration_ms: Date.now() - startedAt,
138
+ error: err instanceof Error ? err.message : String(err),
139
+ });
140
+ throw err;
141
+ }
142
+ }
143
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Agent protocol texts — the single source of truth for the behavioral
3
+ * contract enforced across three surfaces: server `instructions`, tool
4
+ * descriptions, and tool-result footers. Keep the wording consistent here so
5
+ * every surface reinforces the same 5-step protocol (docs/AGENT-PROTOCOL.md).
6
+ */
7
+ /** Server-level instructions returned in the MCP initialize result. */
8
+ export declare const SERVER_INSTRUCTIONS = "Codex-Skills: 190+ expert skills fetched on demand \u2014 no pre-install needed. Daily use progressively caches skills locally.\n\nMANDATORY 5-step protocol for any task a skill could help with:\n1. DISCOVER \u2014 plan_workflow(task) and/or search_skills(query). \"[cached]\" means the skill is already on local disk; prefer cached skills when scores are close.\n2. SELECT \u2014 choose the smallest set of skills that together cover the task.\n3. MATERIALIZE \u2014 call read_skill(name) for EVERY selected skill BEFORE starting work. Each call downloads the COMPLETE skill (SKILL.md, scripts, configs, references) into the local cache and returns the instructions plus local_path. Never skip or partial-skip this step.\n4. EXECUTE \u2014 follow each loaded SKILL.md verbatim and run its scripts from local_path (run its Setup command first if one is listed). NEVER improvise a substitute for a loaded skill. load_skill_file is only for reading extra files.\n5. VERIFY & REPORT \u2014 skill_status(names) confirms cache completeness; report which skills you used. On failures, use diagnostics.\n\nForbidden anti-patterns: reading SKILL.md and then doing the task from general knowledge; starting before every selected skill is materialized; rewriting a loaded skill's logic yourself.";
9
+ /** search_skills result footer. */
10
+ export declare const FOOTER_SEARCH = "\u25B6 PROTOCOL STEP 3 (required): call read_skill(name) for EVERY skill you select \u2014 each call downloads the complete skill to local disk (cached skills return instantly). Do NOT start the task until all selected skills are loaded; then execute strictly per each SKILL.md.";
11
+ /** plan_workflow result footer. */
12
+ export declare const FOOTER_PLAN = "\u25B6 PROTOCOL STEP 3 (required): call read_skill for EVERY skill in your final plan before starting \u2014 each call downloads the complete skill to local disk (cached skills return instantly). Then execute in the planned order, strictly following each SKILL.md, and report which skills you used.";
13
+ /** read_skill result footer (after the Cache & Execution section). */
14
+ export declare const FOOTER_READ = "\u25B6 PROTOCOL STEP 4: Execute the task by following the Instructions above exactly \u2014 run scripts from local_path. Do NOT improvise a substitute for this skill. Use load_skill_file only when you need additional files.";
15
+ /** skill_status result footer. */
16
+ export declare const FOOTER_STATUS = "\u25B6 If all selected skills are complete, proceed to EXECUTE from each local_path. Incomplete skills: re-call read_skill to resume the download.";
17
+ /** diagnostics result footer. */
18
+ export declare const FOOTER_DIAGNOSTICS = "\u25B6 Fix the reported errors (network failures are often transient \u2014 retry read_skill), then resume the protocol at the failed step.";
19
+ /** Cached badge used in search/plan results. */
20
+ export declare const CACHED_BADGE = "[cached]";
21
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/lib/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,0wCAS2J,CAAC;AAE5L,mCAAmC;AACnC,eAAO,MAAM,aAAa,2RAAiR,CAAC;AAE5S,mCAAmC;AACnC,eAAO,MAAM,WAAW,+SAAqS,CAAC;AAE9T,sEAAsE;AACtE,eAAO,MAAM,WAAW,oOAA0N,CAAC;AAEnP,kCAAkC;AAClC,eAAO,MAAM,aAAa,uJAAkJ,CAAC;AAE7K,iCAAiC;AACjC,eAAO,MAAM,kBAAkB,gJAAsI,CAAC;AAEtK,gDAAgD;AAChD,eAAO,MAAM,YAAY,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Agent protocol texts — the single source of truth for the behavioral
3
+ * contract enforced across three surfaces: server `instructions`, tool
4
+ * descriptions, and tool-result footers. Keep the wording consistent here so
5
+ * every surface reinforces the same 5-step protocol (docs/AGENT-PROTOCOL.md).
6
+ */
7
+ /** Server-level instructions returned in the MCP initialize result. */
8
+ export const SERVER_INSTRUCTIONS = `Codex-Skills: 190+ expert skills fetched on demand — no pre-install needed. Daily use progressively caches skills locally.
9
+
10
+ MANDATORY 5-step protocol for any task a skill could help with:
11
+ 1. DISCOVER — plan_workflow(task) and/or search_skills(query). "[cached]" means the skill is already on local disk; prefer cached skills when scores are close.
12
+ 2. SELECT — choose the smallest set of skills that together cover the task.
13
+ 3. MATERIALIZE — call read_skill(name) for EVERY selected skill BEFORE starting work. Each call downloads the COMPLETE skill (SKILL.md, scripts, configs, references) into the local cache and returns the instructions plus local_path. Never skip or partial-skip this step.
14
+ 4. EXECUTE — follow each loaded SKILL.md verbatim and run its scripts from local_path (run its Setup command first if one is listed). NEVER improvise a substitute for a loaded skill. load_skill_file is only for reading extra files.
15
+ 5. VERIFY & REPORT — skill_status(names) confirms cache completeness; report which skills you used. On failures, use diagnostics.
16
+
17
+ Forbidden anti-patterns: reading SKILL.md and then doing the task from general knowledge; starting before every selected skill is materialized; rewriting a loaded skill's logic yourself.`;
18
+ /** search_skills result footer. */
19
+ export const FOOTER_SEARCH = `▶ PROTOCOL STEP 3 (required): call read_skill(name) for EVERY skill you select — each call downloads the complete skill to local disk (cached skills return instantly). Do NOT start the task until all selected skills are loaded; then execute strictly per each SKILL.md.`;
20
+ /** plan_workflow result footer. */
21
+ export const FOOTER_PLAN = `▶ PROTOCOL STEP 3 (required): call read_skill for EVERY skill in your final plan before starting — each call downloads the complete skill to local disk (cached skills return instantly). Then execute in the planned order, strictly following each SKILL.md, and report which skills you used.`;
22
+ /** read_skill result footer (after the Cache & Execution section). */
23
+ export const FOOTER_READ = `▶ PROTOCOL STEP 4: Execute the task by following the Instructions above exactly — run scripts from local_path. Do NOT improvise a substitute for this skill. Use load_skill_file only when you need additional files.`;
24
+ /** skill_status result footer. */
25
+ export const FOOTER_STATUS = `▶ If all selected skills are complete, proceed to EXECUTE from each local_path. Incomplete skills: re-call read_skill to resume the download.`;
26
+ /** diagnostics result footer. */
27
+ export const FOOTER_DIAGNOSTICS = `▶ Fix the reported errors (network failures are often transient — retry read_skill), then resume the protocol at the failed step.`;
28
+ /** Cached badge used in search/plan results. */
29
+ export const CACHED_BADGE = "[cached]";
30
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/lib/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;2LASwJ,CAAC;AAE5L,mCAAmC;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,8QAA8Q,CAAC;AAE5S,mCAAmC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,kSAAkS,CAAC;AAE9T,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,uNAAuN,CAAC;AAEnP,kCAAkC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,+IAA+I,CAAC;AAE7K,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,mIAAmI,CAAC;AAEtK,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ManifestEntry, Config } from "../config.js";
2
2
  import type { ProgressCallback } from "../remote/github.js";
3
+ import { type SkillCacheState } from "../remote/github.js";
3
4
  export interface SkillStructure {
4
5
  files: FileNode[];
5
6
  sub_skills: SubSkillInfo[];
@@ -68,5 +69,15 @@ export declare class SkillLoader {
68
69
  * List files in a subdirectory of a skill.
69
70
  */
70
71
  listSkillFiles(entry: ManifestEntry, subPath?: string, maxDepth?: number): Promise<FileNode[]>;
72
+ /**
73
+ * Deep cache-state check for one skill. Read-only: never triggers a
74
+ * download. In local mode every skill is on disk by definition.
75
+ */
76
+ cacheState(entry: ManifestEntry): SkillCacheState;
77
+ /**
78
+ * Light cache check (marker + completedAt only) for [cached] badges in
79
+ * search results. In local mode always true.
80
+ */
81
+ isCached(entry: ManifestEntry): boolean;
71
82
  }
72
83
  //# sourceMappingURL=index.d.ts.map