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:
@@ -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/記憶體/磁碟"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) => {
|
||||||
@@ -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
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user