# 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 # 載入會話 /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 # 建立別名 /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 <名稱>'); 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 # 顯示會話詳情 ``` **腳本:** ```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 ` - 顯示的最大會話數 (預設:50) - `--date ` - 依日期篩選 - `--search ` - 在會話 ID 中搜尋 - `load ` - 載入會話內容 - `alias <名稱>` - 為會話建立別名 - `alias --remove <名稱>` - 移除別名 - `unalias <名稱>` - 同 `--remove` - `info ` - 顯示會話統計數據 - `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 個字元通常已足夠唯一)。 - 對於頻繁參考的會話,請使用別名。