Merge pull request 'feat: M0 將 hud 改名為 cockpit' (#7) from issue-2 into main

Reviewed-on: https://gitea.jsc.idv.tw/jiantw83/jsc-marketplace/pulls/7
This commit was merged in pull request #7.
This commit is contained in:
2026-10-12 05:31:48 +00:00
12 changed files with 64 additions and 31 deletions
+3 -3
View File
@@ -6,9 +6,9 @@
}, },
"plugins": [ "plugins": [
{ {
"name": "hud", "name": "cockpit",
"source": "./plugins/hud", "source": "./plugins/cockpit",
"description": "輸入框上方單行 HUD:模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟" "description": "Cockpit 外掛,內含 hud 模組(輸入框上方單行 HUD):模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟"
} }
] ]
} }
+8 -3
View File
@@ -4,7 +4,7 @@ JSC 自用 Claude Code mods。
| Mod | 說明 | | Mod | 說明 |
| --- | --- | | --- | --- |
| [hud](plugins/hud) | 輸入框上方單行 HUD:模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟 | | [cockpit](plugins/cockpit) | Cockpit 外掛,內含 hud 模組(輸入框上方單行 HUD):模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟 |
## 安裝 ## 安裝
@@ -12,16 +12,21 @@ JSC 自用 Claude Code mods。
```bash ```bash
claude plugin marketplace add /root/jsc-marketplace claude plugin marketplace add /root/jsc-marketplace
claude plugin install hud@jsc-marketplace claude plugin install cockpit@jsc-marketplace
``` ```
或透過 Gitea 遠端: 或透過 Gitea 遠端:
```bash ```bash
claude plugin marketplace add https://gitea.jsc.idv.tw/jiantw83/jsc-marketplace.git claude plugin marketplace add https://gitea.jsc.idv.tw/jiantw83/jsc-marketplace.git
claude plugin install hud@jsc-marketplace claude plugin install cockpit@jsc-marketplace
``` ```
## 指令
- `/cockpit hud on | off | compact`:切換狀態列
- `/hud on | off | compact`:上述指令的別名
## 授權 ## 授權
[MIT License](LICENSE) [MIT License](LICENSE)
@@ -0,0 +1,10 @@
{
"name": "cockpit",
"version": "0.1.0",
"description": "Cockpit 外掛,內含 hud 模組(輸入框上方單行 HUD):模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟",
"license": "MIT",
"types": "./types/index.d.ts",
"author": {
"name": "JSC"
}
}
@@ -0,0 +1,4 @@
import type { Register } from 'claude-code'
// companion 模組:目前為空殼,之後的階段再補內容
export const register: Register = () => {}
@@ -1,16 +1,16 @@
import { atom, read, update } from 'claude-code' import { atom, read, update } from 'claude-code'
import type { EngineInterface, Register, SessionContextUsage, SessionRateLimit } from 'claude-code' import type { EngineInterface, Register, SessionContextUsage, SessionRateLimit } from 'claude-code'
import type { Mode, Sys, Usage } from '../types' import type { Mode, Sys, Usage } from '../../types'
import { cpuPercent, fit, parseCpu, parseDf, parseGit, parseMem, parseOffset } from './format' import { cpuPercent, fit, parseCpu, parseDf, parseGit, parseMem, parseOffset } from './format'
import type { CpuSample } from './format' import type { CpuSample } from './format'
const usageAtom = atom({ plugin: 'hud', key: 'usage' } as const, {}) const usageAtom = atom({ plugin: 'cockpit', key: 'usage' } as const, {})
const gitAtom = atom({ plugin: 'hud', key: 'git' } as const, null) const gitAtom = atom({ plugin: 'cockpit', key: 'git' } as const, null)
const sysAtom = atom({ plugin: 'hud', key: 'sys' } as const, {}) const sysAtom = atom({ plugin: 'cockpit', key: 'sys' } as const, {})
const modeAtom = atom({ plugin: 'hud', key: 'mode' } as const, 'auto') const modeAtom = atom({ plugin: 'cockpit', key: 'mode' } as const, 'auto')
const alertedAtom = atom({ plugin: 'hud', key: 'alerted' } as const, []) const alertedAtom = atom({ plugin: 'cockpit', key: 'alerted' } as const, [])
const effortAtom = atom({ plugin: 'hud', key: 'effort' } as const, null) const effortAtom = atom({ plugin: 'cockpit', key: 'effort' } as const, null)
const SYS_MS = 3000 const SYS_MS = 3000
const GIT_MS = 15_000 const GIT_MS = 15_000
@@ -82,11 +82,26 @@ async function alert($: EngineInterface, rateLimits: SessionRateLimit[]) {
} }
} }
async function runHud($: EngineInterface, args: string) {
const arg = args.trim()
const mode: Mode = arg === 'off' ? 'off' : arg === 'compact' ? 'compact' : 'auto'
await update($, modeAtom, () => mode)
const said: Record<Mode, string> = { auto: '狀態列已開啟。', off: '狀態列已隱藏。', compact: '狀態列改用極窄版。' }
return { text: said[mode] }
}
export const register: Register = on => { export const register: Register = on => {
on('session.start', async ($, e, next) => { on('session.start', async ($, e, next) => {
await $.command.register({
name: 'cockpit',
description: 'Cockpit 控制:hud 狀態列',
argumentHint: 'hud on | off | compact',
})
// 別名:/hud <arg> 等同 /cockpit hud <arg>
await $.command.register({ await $.command.register({
name: 'hud', name: 'hud',
description: '切換輸入框上方的狀態列', description: '切換輸入框上方的狀態列(/cockpit hud 的別名)',
argumentHint: 'on | off | compact', argumentHint: 'on | off | compact',
}) })
home = await $.env.get('HOME') home = await $.env.get('HOME')
@@ -128,13 +143,13 @@ export const register: Register = on => {
return ran return ran
}) })
on('command.run', { command: 'hud' }, async ($, e) => { on('command.run', { command: 'hud' }, ($, e) => runHud($, e.args))
const arg = e.args.trim()
const mode: Mode = arg === 'off' ? 'off' : arg === 'compact' ? 'compact' : 'auto'
await update($, modeAtom, () => mode)
const said: Record<Mode, string> = { auto: '狀態列已開啟。', off: '狀態列已隱藏。', compact: '狀態列改用極窄版。' }
return { text: said[mode] } on('command.run', { command: 'cockpit' }, async ($, e, next) => {
const [sub, ...rest] = e.args.trim().split(/\s+/)
if (sub !== 'hud') return { text: '用法:/cockpit hud on | off | compact' }
return runHud($, rest.join(' '))
}) })
on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => { on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
+9
View File
@@ -0,0 +1,9 @@
import type { Register } from 'claude-code'
import { register as companion } from './companion'
import { register as hud } from './hud'
export const register: Register = on => {
hud(on)
companion(on)
}
@@ -16,7 +16,7 @@ export type Mode = 'auto' | 'compact' | 'off'
declare module 'claude-code' { declare module 'claude-code' {
interface PluginState { interface PluginState {
hud: { cockpit: {
usage: Usage usage: Usage
git: Git | null git: Git | null
sys: Sys sys: Sys
-10
View File
@@ -1,10 +0,0 @@
{
"name": "hud",
"version": "0.1.0",
"description": "輸入框上方單行 HUD:模型、目錄、分支、5h/7d 額度與重置、context、CPU/記憶體/磁碟",
"license": "MIT",
"types": "./types/index.d.ts",
"author": {
"name": "JSC"
}
}