claude-code/claude-zh/commands/sessions.md

302 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sessions 指令
管理、列出及檢索過往的會話歷史。
## 使用方式
`/sessions [list|load|alias|info|aliases|help] [arguments]`
## 子指令
### 列出會話 (List Sessions)
顯示最近會話的列表。
```bash
/sessions list # 顯示最近 50 個會話
/sessions list --limit 10 # 僅顯示最近 10 個會話
/sessions list --date 2026-02-01 # 篩選特定日期的會話
```
**腳本:**
```bash
node -e "
const sm = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const result = sm.listSessions();
const aliasMap = aa.getAliasMap();
console.log('會話列表 (最近 ' + result.sessions.length + ' 個)');
console.log('');
console.log('ID 日期 時間 大小 行數 別名 (Alias)');
console.log('────────────────────────────────────────────────────');
for (const s of result.sessions) {
const alias = aliasMap[s.filename] || '';
const size = sm.getSessionSize(s.sessionPath);
const stats = sm.getSessionStats(s.sessionPath);
const id = s.shortId === 'no-id' ? '(無)' : s.shortId.slice(0, 8);
const time = s.modifiedTime.toTimeString().slice(0, 5);
console.log(id.padEnd(8) + ' ' + s.date + ' ' + time + ' ' + size.padEnd(7) + ' ' + String(stats.lineCount).padEnd(5) + ' ' + alias);
}
"
```
### 載入會話 (Load Session)
載入並顯示會話內容 (透過 ID 或別名)。
```bash
/sessions load <id|alias> # 載入會話
/sessions load 2026-02-01 # 依日期 (針對無 ID 的會話)
/sessions load a1b2c3d4 # 依短 ID
/sessions load my-alias # 依別名
```
**腳本:**
```bash
node -e "
const sm = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const id = process.argv[1];
// 首先嘗試解析為別名
const resolved = aa.resolveAlias(id);
const sessionId = resolved ? resolved.sessionPath : id;
const session = sm.getSessionById(sessionId, true);
if (!session) {
console.log('找不到會話:' + id);
process.exit(1);
}
const stats = sm.getSessionStats(session.sessionPath);
const size = sm.getSessionSize(session.sessionPath);
const aliases = aa.getAliasesForSession(session.filename);
console.log('會話:' + session.filename);
console.log('路徑:~/.claude/sessions/' + session.filename);
console.log('');
console.log('統計數據:');
console.log(' 行數:' + stats.lineCount);
console.log(' 總項目數:' + stats.totalItems);
console.log(' 已完成:' + stats.completedItems);
console.log(' 進行中:' + stats.inProgressItems);
console.log(' 大小:' + size);
console.log('');
if (aliases.length > 0) {
console.log('別名:' + aliases.map(a => a.name).join(', '));
console.log('');
}
if (session.metadata.title) {
console.log('標題:' + session.metadata.title);
console.log('');
}
if (session.metadata.started) {
console.log('開始時間:' + session.metadata.started);
}
if (session.metadata.lastUpdated) {
console.log('最後更新:' + session.metadata.lastUpdated);
}
" \"$ARGUMENTS\"
```
### 建立別名 (Create Alias)
為會話建立一個好記的別名。
```bash
/sessions alias <id> <name> # 建立別名
/sessions alias 2026-02-01 today-work # 建立名為 \"today-work\" 的別名
```
**腳本:**
```bash
node -e "
const sm = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const sessionId = process.argv[1];
const aliasName = process.argv[2];
if (!sessionId || !aliasName) {
console.log('用法:/sessions alias <id> <名稱>');
process.exit(1);
}
// 獲取會話檔名
const session = sm.getSessionById(sessionId);
if (!session) {
console.log('找不到會話:' + sessionId);
process.exit(1);
}
const result = aa.setAlias(aliasName, session.filename);
if (result.success) {
console.log('✓ 別名已建立:' + aliasName + ' → ' + session.filename);
} else {
console.log('✗ 錯誤:' + result.error);
process.exit(1);
}
" \"$ARGUMENTS\"
```
### 移除別名 (Remove Alias)
刪除現有的別名。
```bash
/sessions alias --remove <名稱> # 移除別名
/sessions unalias <名稱> # 同上
```
**腳本:**
```bash
node -e "
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const aliasName = process.argv[1];
if (!aliasName) {
console.log('用法:/sessions alias --remove <名稱>');
process.exit(1);
}
const result = aa.deleteAlias(aliasName);
if (result.success) {
console.log('✓ 別名已移除:' + aliasName);
} else {
console.log('✗ 錯誤:' + result.error);
process.exit(1);
}
" \"$ARGUMENTS\"
```
### 會話資訊 (Session Info)
顯示關於會話的詳細資訊。
```bash
/sessions info <id|alias> # 顯示會話詳情
```
**腳本:**
```bash
node -e "
const sm = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const id = process.argv[1];
const resolved = aa.resolveAlias(id);
const sessionId = resolved ? resolved.sessionPath : id;
const session = sm.getSessionById(sessionId, true);
if (!session) {
console.log('找不到會話:' + id);
process.exit(1);
}
const stats = sm.getSessionStats(session.sessionPath);
const size = sm.getSessionSize(session.sessionPath);
const aliases = aa.getAliasesForSession(session.filename);
console.log('會話資訊');
console.log('════════════════════');
console.log('ID: ' + (session.shortId === 'no-id' ? '(無)' : session.shortId));
console.log('檔案名稱: ' + session.filename);
console.log('日期: ' + session.date);
console.log('修改時間: ' + session.modifiedTime.toISOString().slice(0, 19).replace('T', ' '));
console.log('');
console.log('內容:');
console.log(' 行數: ' + stats.lineCount);
console.log(' 總項目數: ' + stats.totalItems);
console.log(' 已完成: ' + stats.completedItems);
console.log(' 進行中: ' + stats.inProgressItems);
console.log(' 大小: ' + size);
if (aliases.length > 0) {
console.log('別名: ' + aliases.map(a => a.name).join(', '));
}
" \"$ARGUMENTS\"
```
### 列出別名 (List Aliases)
顯示所有會話別名。
```bash
/sessions aliases # 列出所有別名
```
**腳本:**
```bash
node -e "
const aa = require((process.env.CLAUDE_PLUGIN_ROOT||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
const aliases = aa.listAliases();
console.log('會話別名 (' + aliases.length + ')');
console.log('');
if (aliases.length === 0) {
console.log('找不到別名。');
} else {
console.log('名稱 會話檔案 標題');
console.log('─────────────────────────────────────────────────────────────');
for (const a of aliases) {
const name = a.name.padEnd(12);
const file = (a.sessionPath.length > 30 ? a.sessionPath.slice(0, 27) + '...' : a.sessionPath).padEnd(30);
const title = a.title || '';
console.log(name + ' ' + file + ' ' + title);
}
}
"
```
## 參數說明 (Arguments)
$ARGUMENTS
- `list [options]` - 列出會話
- `--limit <n>` - 顯示的最大會話數 (預設50)
- `--date <YYYY-MM-DD>` - 依日期篩選
- `--search <pattern>` - 在會話 ID 中搜尋
- `load <id|alias>` - 載入會話內容
- `alias <id> <名稱>` - 為會話建立別名
- `alias --remove <名稱>` - 移除別名
- `unalias <名稱>` - 同 `--remove`
- `info <id|alias>` - 顯示會話統計數據
- `aliases` - 列出所有別名
- `help` - 顯示此說明
## 範例
```bash
# 列出所有會話
/sessions list
# 為今天的會話建立別名
/sessions alias 2026-02-01 today
# 透過別名載入會話
/sessions load today
# 顯示會話資訊
/sessions info today
# 移除別名
/sessions alias --remove today
# 列出所有別名
/sessions aliases
```
## 注意事項
- 會話以 Markdown 檔案形式儲存在 `~/.claude/sessions/`
- 別名儲存在 `~/.claude/session-aliases.json`
- 會話 ID 可以縮短 (前 4-8 個字元通常已足夠唯一)。
- 對於頻繁參考的會話,請使用別名。