Skip to content

Releases: l17728/skill_manager

v2.3.0 — Manual Viewer

Choose a tag to compare

@l17728 l17728 released this 28 Feb 12:38

新功能

  • 新增「? 手册」按钮(右上角),点击在独立窗口渲染 manual.md
  • IPC:manual:open(单例/聚焦)、manual:getContent(fs + marked)
  • 手册窗口:暗色主题,支持标题、表格、代码块等 Markdown 元素
  • 打包后从 resources/manual.md 读取,已验证安装包正常显示

测试

  • 新增 8 个单元测试(manual-ipc.test.js)
  • 新增 5 个 E2E 测试(TC-M-001~005)
  • 全量:341 单元测试 + 68 E2E 测试通过

v2.2.0 — Fix: workspace in ASAR read-only (Windows silent launch)

Choose a tag to compare

@l17728 l17728 released this 28 Feb 08:57

v2.2.0 — Critical Fix: App silently fails to launch on Windows

Root Cause (Now Fixed)

The packaged .exe writes workspace data to __dirname/../../workspace, but in a
packaged Electron app __dirname points inside the read-only ASAR archive.
Every mkdirSync call in initWorkspace() throws ENOTDIR, the
uncaughtException handler exits after 200ms — createWindow() was never called,
so the window never appears. The only visible symptom was Can't find filter element
(harmless Chromium GPU-init messages) before the silent exit.

Fix: when app.isPackaged === true, workspace is now redirected to:

C:\Users\<user>\AppData\Roaming\SkillManager\workspace

Also Included

  • app.disableHardwareAcceleration() — prevents GPU-related renderer crashes
  • app.requestSingleInstanceLock() — prevents zombie-process silent exits
  • 15-second fallback show timer — guarantees window appears if ready-to-show is delayed
  • NSIS oneClick: false — installer lets you choose install directory

Service Layer: CLI Error Handling (333 unit tests)

Four gaps in how Claude CLI failures propagate through the service layer were fixed:

1. Test loop crash guard (test-service.js)
_runLoop previously had no .catch() on the background setImmediate. Any unexpected error (disk-full on checkpoint write, a throwing progress callback, etc.) left the project silently stuck in status: 'running' with no way to recover short of restarting the app.
Now: crash guard sets status: 'interrupted' on disk, clears in-memory state, and delivers a final onProgress event with projectStatus: 'interrupted' so the UI can react immediately.

2. Structured task error field (test-service.js)
Task result error field used err.message || err.code — picking only one. It now captures both:
"CLI_NOT_AVAILABLE: Claude not found" / "CLI_TIMEOUT" / "CLI_EXECUTION_ERROR: ...".

3. Analysis & recompose error detail (analysis-service.js, recompose-service.js)
catch blocks previously called String(err) which drops err.code on plain error objects. Both now use [errCode, errMsg].filter(Boolean).join(': ') so onComplete({ status: 'failed', error }) contains a meaningful, code-bearing string. recompose-service catch also corrected from logService.info → logService.error.

4. generateBaselineCases CLI guard (cli-lite-service.js)
ENOENT / timeout errors from the CLI call propagated as raw unstructured throws with no context. Wrapped with try-catch that rethrows { code, message: 'generateBaselineCases: <detail>' }.

14 new unit tests covering all fixed paths:

Test What it verifies
UC6-6a onProgress throws → crash guard marks project interrupted, delivers final callback
UC6-6b CLI_NOT_AVAILABLE with message → result.error contains both code and message
UC6-6c CLI_TIMEOUT → result.error contains CLI_TIMEOUT
UC7-5a Analysis CLI_TIMEOUT → onComplete status:failed, error contains code
UC7-5b Analysis CLI_NOT_AVAILABLE → error contains code + message
UC7-5c Analysis CLI_EXECUTION_ERROR → onComplete called, no report file written
UC8-5a Recompose CLI_TIMEOUT → onComplete status:failed
UC8-5b Recompose CLI_NOT_AVAILABLE → error contains code + message
UC8-5c Recompose RATE_LIMITED → error contains RATE_LIMITED
generateBaselineCases success Valid cases array and rawOutput returned
generateBaselineCases CLI_NOT_AVAILABLE ENOENT rethrown with generateBaselineCases: prefix
generateBaselineCases CLI_EXECUTION_ERROR Non-zero exit code propagated with context prefix
generateBaselineCases OUTPUT_PARSE_FAILED Missing cases field throws structured error
generateBaselineCases model arg Custom model argument passed through to spawn args

63 E2E Tests (4 skipped — require live Claude CLI)

Previously 59; 4 new tests added this release:

Test ID Description
TC-019 Empty skill workspace shows guide card with quick-import button
TC-020 Hovering a skill list item shows the hover-preview card
TC-B-014 Empty baseline workspace shows guide card with quick-import button
TC-R-013 Clicking a skill test badge navigates to Rankings and pre-fills the search field

Also fixed an E2E reliability issue on Windows: _waitForPortFree timeout raised
from 8 s → 75 s to handle TCP TIME_WAIT after Electron exits (previously caused
intermittent CDP-unavailable failures when two Electron instances launched back-to-back).


Documentation

  • manual.md bumped to v2.2; FAQ §Problem 3 now lists specific CLI error codes (CLI_TIMEOUT, CLI_NOT_AVAILABLE, RATE_LIMITED, CLI_EXECUTION_ERROR) with remediation hints — users no longer need to dig into logs to identify the failure cause.

SkillManager v2.1.0

Choose a tag to compare

@l17728 l17728 released this 28 Feb 07:28

SkillManager v2.1.0

新功能

  • Skill / Agent 类型区分:导入和编辑时可选类型,列表显示彩色 badge(S 蓝 / A 紫)
  • 工作流进度指示器:项目详情顶部显示 4 步进度条(① Test → ② Analysis → ③ Recompose → ④ Iteration)
  • 前置条件横幅:Analysis / Recompose 标签页在条件未满足时显示提示横幅,含一键跳转链接
  • 克隆项目:一键复制项目配置,新项目名称自动加"-副本"后缀
  • 重组保存自动预填:保存弹窗自动填入最优 Skill 的 Name / Purpose / Provider
  • 空列表引导卡:Skills / Baselines / Projects 列表为空时显示引导卡和快速创建按钮
  • 输入框智能提示:Purpose / Provider 字段支持已有值的下拉补全
  • JSON 模板下载:Baselines 导入页支持下载 JSON 格式模板
  • 用例展开明细:测试结果行展开后可查看每条用例的单独得分和 AI 输出
  • 版本号 badge:Skill 列表条目内联显示当前版本号(v1 / v2…)
  • 策略名中文化:迭代报告中策略名以中文显示(全面强化 / 聚焦维度 / 片段探索等)

测试覆盖

  • 319 单元测试 + 41 e2e 测试全部通过

安装说明

  1. 下载 SkillManager Setup 1.0.0.exe,双击安装(无需管理员权限)
  2. 安装 Claude Code CLI:npm install -g @anthropic-ai/claude-code
  3. 完成授权:claude auth login
  4. 启动应用

⚠️ 首次运行可能出现 Windows SmartScreen 警告(未签名),点击"仍要运行"即可。