6 Commits

Author SHA1 Message Date
Affaan Mustafa
6522ed493f Merge branch 'main' into fix/session-data-doc-sync 2026-04-14 19:29:38 -07:00
Affaan Mustafa
48a30b53c8 Merge pull request #1402 from affaan-m/docs/community-skill-highlights
docs: add community skill ecosystem notes
2026-04-14 19:28:57 -07:00
Affaan Mustafa
ecc5e0e2d6 Merge pull request #1432 from S1lverline/fix/harness-audit-marketplaces
fix(harness-audit): detect ECC plugin under marketplaces/ subdirectory
2026-04-14 19:13:24 -07:00
S1lverline
aa96279ecc fix(harness-audit): detect ECC plugin under marketplaces/ subdirectory
`findPluginInstall()` in `scripts/harness-audit.js` scans two candidate
roots:

  {rootDir}/.claude/plugins/
  {HOME}/.claude/plugins/

Current Claude Code marketplace installs live one directory deeper:

  {HOME}/.claude/plugins/marketplaces/{ecc,everything-claude-code}/...

As a result, running `node scripts/harness-audit.js repo` on any
consumer project reports `consumer-plugin-install: false` even when ECC
is fully installed via marketplace, costing 4 points from Tool Coverage.

Add the `marketplaces/` intermediate directory to `candidateRoots` so
both legacy and current install layouts are recognized. The change is
purely additive: existing candidate paths still resolve, and the new
ones only match when the marketplace layout is present.

Reproduction:
  1. Install ECC via Claude Code plugin marketplace
  2. cd into any consumer project
  3. node ~/.claude/plugins/marketplaces/everything-claude-code/scripts/harness-audit.js repo
  4. Observe consumer-plugin-install=false despite a working install
2026-04-14 23:37:10 +09:00
Affaan Mustafa
68ee51f1e3 docs: add community skill ecosystem notes 2026-04-13 00:45:51 -07:00
Affaan Mustafa
2814062393 docs: sync session storage paths across translations 2026-04-13 00:41:25 -07:00
9 changed files with 49 additions and 39 deletions

View File

@@ -1013,6 +1013,14 @@ Please contribute! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
- Testing strategies (different frameworks, visual regression)
- Domain-specific knowledge (ML, data engineering, mobile)
### Community Ecosystem Notes
These are not bundled with ECC and are not audited by this repo, but they are worth knowing about if you are exploring the broader Claude Code skills ecosystem:
- [claude-seo](https://github.com/AgriciDaniel/claude-seo) — SEO-focused skill and agent collection
- [claude-ads](https://github.com/AgriciDaniel/claude-ads) — Ad-audit and paid-growth workflow collection
- [claude-cybersecurity](https://github.com/AgriciDaniel/claude-cybersecurity) — Security-oriented skill and agent collection
---
## Cursor IDE Support

View File

@@ -1,6 +1,6 @@
# Sessionsコマンド
Claude Codeセッション履歴を管理 - `~/.claude/sessions/` に保存されたセッションのリスト表示、読み込み、エイリアス設定、編集を行います。
Claude Codeセッション履歴を管理 - `~/.claude/session-data/` に保存されたセッションのリスト表示、読み込み、エイリアス設定、編集を行います。`~/.claude/sessions/` のファイルも後方互換のために読み取ります。
## 使用方法
@@ -81,7 +81,7 @@ const size = sm.getSessionSize(session.sessionPath);
const aliases = aa.getAliasesForSession(session.filename);
console.log('Session: ' + session.filename);
console.log('Path: ~/.claude/sessions/' + session.filename);
console.log('Path: ' + session.sessionPath);
console.log('');
console.log('Statistics:');
console.log(' Lines: ' + stats.lineCount);
@@ -299,7 +299,7 @@ $ARGUMENTS:
## 備考
- セッションは `~/.claude/sessions/` にMarkdownファイルとして保存されます
- セッションは `~/.claude/session-data/` にMarkdownファイルとして保存され、旧 `~/.claude/sessions/` のファイルも引き続き読み取られます
- エイリアスは `~/.claude/session-aliases.json` に保存されます
- セッションIDは短縮できます通常、最初の4〜8文字で一意になります
- 頻繁に参照するセッションにはエイリアスを使用してください

View File

@@ -4,7 +4,7 @@ description: Claude Code session geçmişini, aliasları ve session metadata'sı
# Sessions Komutu
Claude Code session geçmişini yönet - `~/.claude/sessions/` dizininde saklanan session'ları listele, yükle, alias ata ve düzenle.
Claude Code session geçmişini yönet - `~/.claude/session-data/` dizininde saklanan session'ları listele, yükle, alias ata ve düzenle; eski `~/.claude/sessions/` dosyalarını da geriye dönük uyumluluk için okuyun.
## Kullanım
@@ -89,7 +89,7 @@ const size = sm.getSessionSize(session.sessionPath);
const aliases = aa.getAliasesForSession(session.filename);
console.log('Session: ' + session.filename);
console.log('Path: ~/.claude/sessions/' + session.filename);
console.log('Path: ' + session.sessionPath);
console.log('');
console.log('Statistics:');
console.log(' Lines: ' + stats.lineCount);
@@ -287,7 +287,7 @@ $ARGUMENTS:
## Notlar
- Session'lar `~/.claude/sessions/` dizininde markdown dosyaları olarak saklanır
- Session'lar `~/.claude/session-data/` dizininde markdown dosyaları olarak saklanır; eski `~/.claude/sessions/` dosyaları da okunmaya devam eder
- Aliaslar `~/.claude/session-aliases.json` dosyasında saklanır
- Session ID'leri kısaltılabilir (ilk 4-8 karakter genellikle yeterince benzersizdir)
- Sık referans verilen session'lar için aliasları kullanın

View File

@@ -1,5 +1,5 @@
---
description: 从 ~/.claude/sessions/ 加载最新的会话文件,并从上次会话结束的地方恢复工作,保留完整上下文。
description: 从 ~/.claude/session-data/ 加载最新的会话文件,并从上次会话结束的地方恢复工作,保留完整上下文。
---
# 恢复会话命令
@@ -17,10 +17,10 @@ description: 从 ~/.claude/sessions/ 加载最新的会话文件,并从上次
## 用法
```
/resume-session # 加载 ~/.claude/sessions/ 目录下最新的文件
/resume-session # 加载 ~/.claude/session-data/ 目录下最新的文件
/resume-session 2024-01-15 # 加载该日期最新的会话
/resume-session ~/.claude/sessions/2024-01-15-session.tmp # 加载特定的旧格式文件
/resume-session ~/.claude/sessions/2024-01-15-abc123de-session.tmp # 加载当前短ID格式的会话文件
/resume-session ~/.claude/session-data/2024-01-15-abc123de-session.tmp # 加载当前短ID格式的会话文件
```
## 流程
@@ -29,18 +29,18 @@ description: 从 ~/.claude/sessions/ 加载最新的会话文件,并从上次
如果未提供参数:
1. 检查 `~/.claude/sessions/`
1. 检查 `~/.claude/session-data/`
2. 选择最近修改的 `*-session.tmp` 文件
3. 如果文件夹不存在或没有匹配的文件,告知用户:
```
在 ~/.claude/sessions/ 中未找到会话文件。
在 ~/.claude/session-data/ 中未找到会话文件。
请在会话结束时运行 /save-session 来创建一个。
```
然后停止。
如果提供了参数:
* 如果看起来像日期 (`YYYY-MM-DD`),则在 `~/.claude/sessions/` 中搜索匹配
* 如果看起来像日期 (`YYYY-MM-DD`),则在 `~/.claude/session-data/` 中搜索,再回退到旧的 `~/.claude/sessions/`匹配
`YYYY-MM-DD-session.tmp`(旧格式)或 `YYYY-MM-DD-<shortid>-session.tmp`(当前格式)的文件,
并加载该日期最近修改的版本
* 如果看起来像文件路径,则直接读取该文件
@@ -114,7 +114,7 @@ PASS: 已完成:[数量] 项已确认
## 示例输出
```
SESSION LOADED: /Users/you/.claude/sessions/2024-01-15-abc123de-session.tmp
SESSION LOADED: /Users/you/.claude/session-data/2024-01-15-abc123de-session.tmp
════════════════════════════════════════════════
项目my-app — JWT 认证

View File

@@ -1,5 +1,5 @@
---
description: 将当前会话状态保存到 ~/.claude/sessions/ 目录下带日期的文件中,以便在未来的会话中恢复完整上下文并继续工作。
description: 将当前会话状态保存到 ~/.claude/session-data/ 目录下带日期的文件中,以便在未来的会话中恢复完整上下文并继续工作。
---
# 保存会话命令
@@ -29,12 +29,12 @@ description: 将当前会话状态保存到 ~/.claude/sessions/ 目录下带日
在用户的 Claude 主目录中创建规范的会话文件夹:
```bash
mkdir -p ~/.claude/sessions
mkdir -p ~/.claude/session-data
```
### 步骤 3写入会话文件
创建 `~/.claude/sessions/YYYY-MM-DD-<short-id>-session.tmp`,使用今天的实际日期和一个满足 `session-manager.js``SESSION_FILENAME_REGEX` 强制规则的短 ID
创建 `~/.claude/session-data/YYYY-MM-DD-<short-id>-session.tmp`,使用今天的实际日期和一个满足 `session-manager.js``SESSION_FILENAME_REGEX` 强制规则的短 ID
* 允许的字符:小写 `a-z`,数字 `0-9`,连字符 `-`
* 最小长度8 个字符
@@ -248,5 +248,5 @@ mkdir -p ~/.claude/sessions
* “什么没有成功”部分是最关键的——没有它,未来的会话将盲目地重试失败的方法
* 如果用户要求中途保存会话(而不仅仅是在结束时),则保存目前已知的内容,并清楚地标记进行中的项目
* 该文件旨在通过 `/resume-session` 在下次会话开始时由 Claude 读取
* 使用规范的全局会话存储:`~/.claude/sessions/`
* 使用规范的全局会话存储:`~/.claude/session-data/`
* 对于任何新的会话文件,首选短 ID 文件名形式(`YYYY-MM-DD-<short-id>-session.tmp`

View File

@@ -4,7 +4,7 @@ description: 管理Claude Code会话历史、别名和会话元数据。
# Sessions 命令
管理 Claude Code 会话历史 - 列出、加载、设置别名和编辑存储在 `~/.claude/sessions/` 中的会话。
管理 Claude Code 会话历史 - 列出、加载、设置别名和编辑存储在 `~/.claude/session-data/` 中的会话,同时兼容读取旧的 `~/.claude/sessions/` 文件
## 用法
@@ -91,7 +91,7 @@ const size = sm.getSessionSize(session.sessionPath);
const aliases = aa.getAliasesForSession(session.filename);
console.log('Session: ' + session.filename);
console.log('Path: ~/.claude/sessions/' + session.filename);
console.log('Path: ' + session.sessionPath);
console.log('');
console.log('Statistics:');
console.log(' Lines: ' + stats.lineCount);
@@ -334,7 +334,7 @@ $ARGUMENTS:
## 备注
* 会话以 Markdown 文件形式存储在 `~/.claude/sessions/`
* 会话以 Markdown 文件形式存储在 `~/.claude/session-data/`,并继续兼容读取旧的 `~/.claude/sessions/`
* 别名存储在 `~/.claude/session-aliases.json`
* 会话 ID 可以缩短(通常前 4-8 个字符就足够唯一)
* 为经常引用的会话使用别名

View File

@@ -259,11 +259,11 @@
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@opencode-ai/plugin": "^1.4.3",
"@opencode-ai/plugin": "^1.0.0",
"@types/node": "^20.19.24",
"c8": "^11.0.0",
"eslint": "^9.39.2",
"globals": "^17.5.0",
"globals": "^17.4.0",
"markdownlint-cli": "^0.48.0",
"typescript": "^5.9.3"
},

View File

@@ -196,7 +196,9 @@ function findPluginInstall(rootDir) {
];
const candidateRoots = [
path.join(rootDir, '.claude', 'plugins'),
path.join(rootDir, '.claude', 'plugins', 'marketplaces'),
homeDir && path.join(homeDir, '.claude', 'plugins'),
homeDir && path.join(homeDir, '.claude', 'plugins', 'marketplaces'),
].filter(Boolean);
const candidates = candidateRoots.flatMap((pluginsDir) =>
pluginDirs.flatMap((pluginDir) => [

View File

@@ -169,30 +169,30 @@ __metadata:
languageName: node
linkType: hard
"@opencode-ai/plugin@npm:^1.4.3":
version: 1.4.3
resolution: "@opencode-ai/plugin@npm:1.4.3"
"@opencode-ai/plugin@npm:^1.0.0":
version: 1.3.15
resolution: "@opencode-ai/plugin@npm:1.3.15"
dependencies:
"@opencode-ai/sdk": "npm:1.4.3"
"@opencode-ai/sdk": "npm:1.3.15"
zod: "npm:4.1.8"
peerDependencies:
"@opentui/core": ">=0.1.97"
"@opentui/solid": ">=0.1.97"
"@opentui/core": ">=0.1.96"
"@opentui/solid": ">=0.1.96"
peerDependenciesMeta:
"@opentui/core":
optional: true
"@opentui/solid":
optional: true
checksum: 10c0/a20328a691a674638e4718c1fb911ea68b60fc7560f1bf314324114ccdcabbddc12e98c4fc9f3aad69e92aaaac7edbd44216bf036955ec5d1f50282430ab06ae
checksum: 10c0/1a662ff700812223310612f3c8c7fd4465eda5763d726ec4d29d0eae26babf344ef176c9b987d79fe1e29c8a498178881a47d7080bb9f4db3e70dad59eb8cd9e
languageName: node
linkType: hard
"@opencode-ai/sdk@npm:1.4.3":
version: 1.4.3
resolution: "@opencode-ai/sdk@npm:1.4.3"
"@opencode-ai/sdk@npm:1.3.15":
version: 1.3.15
resolution: "@opencode-ai/sdk@npm:1.3.15"
dependencies:
cross-spawn: "npm:7.0.6"
checksum: 10c0/edba27ef01ecfb6fde7df2348f953aab64f2e7b99e9cd5b155474e7e02cc0db62da242d9edcd5b704110b9ef82bc16633d99d25eaa812d4279badede71ae419f
checksum: 10c0/3957ae62e0ec1e339d9493e03a2440c95afdd64a608a2dc9db8383338650318a294280b2142305db5b0147badacbefa0d07e949d31167e5a4a49c9d057d016fa
languageName: node
linkType: hard
@@ -548,12 +548,12 @@ __metadata:
dependencies:
"@eslint/js": "npm:^9.39.2"
"@iarna/toml": "npm:^2.2.5"
"@opencode-ai/plugin": "npm:^1.4.3"
"@opencode-ai/plugin": "npm:^1.0.0"
"@types/node": "npm:^20.19.24"
ajv: "npm:^8.18.0"
c8: "npm:^11.0.0"
eslint: "npm:^9.39.2"
globals: "npm:^17.5.0"
globals: "npm:^17.4.0"
markdownlint-cli: "npm:^0.48.0"
sql.js: "npm:^1.14.1"
typescript: "npm:^5.9.3"
@@ -834,10 +834,10 @@ __metadata:
languageName: node
linkType: hard
"globals@npm:^17.5.0":
version: 17.5.0
resolution: "globals@npm:17.5.0"
checksum: 10c0/92828102ed2f5637907725f0478038bed02fc83e9fc89300bb753639ba7c022b6c02576fc772117302b431b204591db1f2fa909d26f3f0a9852cc856a941df3f
"globals@npm:^17.4.0":
version: 17.4.0
resolution: "globals@npm:17.4.0"
checksum: 10c0/2be9e8c2b9035836f13d420b22f0247a328db82967d3bebfc01126d888ed609305f06c05895914e969653af5c6ba35fd7a0920f3e6c869afa60666c810630feb
languageName: node
linkType: hard