From 4811fef4d26d6406f5cd3e2d15b414d77998b717 Mon Sep 17 00:00:00 2001 From: v6ole Date: Thu, 18 Jun 2026 15:50:18 +0800 Subject: [PATCH] fix: use relative PNG paths for idle state, transparent SVG for active --- .../manifest.json | 73 +++++++++++++----- .../plugin/index.js | 35 +++++---- .../static/img/ai.png | Bin 0 -> 11176 bytes .../static/img/claude.png | Bin 0 -> 5246 bytes .../static/img/codex.png | Bin 0 -> 4493 bytes .../static/img/opencode.png | Bin 0 -> 1280 bytes 6 files changed, 74 insertions(+), 34 deletions(-) create mode 100644 com.streamdock.ai-monitor.sdPlugin/static/img/ai.png create mode 100644 com.streamdock.ai-monitor.sdPlugin/static/img/claude.png create mode 100644 com.streamdock.ai-monitor.sdPlugin/static/img/codex.png create mode 100644 com.streamdock.ai-monitor.sdPlugin/static/img/opencode.png diff --git a/com.streamdock.ai-monitor.sdPlugin/manifest.json b/com.streamdock.ai-monitor.sdPlugin/manifest.json index eed5056..ef17825 100644 --- a/com.streamdock.ai-monitor.sdPlugin/manifest.json +++ b/com.streamdock.ai-monitor.sdPlugin/manifest.json @@ -2,13 +2,22 @@ "Actions": [ { "UUID": "com.streamdock.ai-monitor.codex", - "Icon": "static/img/codex-icon.svg", + "Icon": "static/img/codex.png", "Name": "Codex Desktop", "States": [ - { "Image": "static/img/codex-icon.svg", "TitleAlignment": "center", "FontSize": "11" } + { + "Image": "static/img/codex.png", + "TitleAlignment": "center", + "FontSize": "11" + } + ], + "Settings": { + "pollInterval": 1000 + }, + "Controllers": [ + "Keypad", + "Information" ], - "Settings": { "pollInterval": 1000 }, - "Controllers": ["Keypad", "Information"], "UserTitleEnabled": true, "SupportedInMultiActions": true, "Tooltip": "Codex Desktop 工作流状态监控", @@ -16,13 +25,22 @@ }, { "UUID": "com.streamdock.ai-monitor.claude", - "Icon": "static/img/claude-icon.svg", + "Icon": "static/img/claude.png", "Name": "Claude Desktop", "States": [ - { "Image": "static/img/claude-icon.svg", "TitleAlignment": "center", "FontSize": "11" } + { + "Image": "static/img/claude.png", + "TitleAlignment": "center", + "FontSize": "11" + } + ], + "Settings": { + "pollInterval": 1000 + }, + "Controllers": [ + "Keypad", + "Information" ], - "Settings": { "pollInterval": 1000 }, - "Controllers": ["Keypad", "Information"], "UserTitleEnabled": true, "SupportedInMultiActions": true, "Tooltip": "Claude Desktop 工作流状态监控", @@ -30,13 +48,22 @@ }, { "UUID": "com.streamdock.ai-monitor.opencode", - "Icon": "static/img/opencode-icon.svg", + "Icon": "static/img/opencode.png", "Name": "opencode", "States": [ - { "Image": "static/img/opencode-icon.svg", "TitleAlignment": "center", "FontSize": "11" } + { + "Image": "static/img/opencode.png", + "TitleAlignment": "center", + "FontSize": "11" + } + ], + "Settings": { + "pollInterval": 1000 + }, + "Controllers": [ + "Keypad", + "Information" ], - "Settings": { "pollInterval": 1000 }, - "Controllers": ["Keypad", "Information"], "UserTitleEnabled": true, "SupportedInMultiActions": true, "Tooltip": "opencode 工作流状态监控", @@ -46,18 +73,28 @@ "SDKVersion": 1, "Author": "StreamDock", "Name": "AI Monitor", - "Icon": "static/img/codex-icon.svg", + "Icon": "static/img/ai.png", "Category": "AI Monitor", - "CategoryIcon": "static/img/codex-icon.svg", + "CategoryIcon": "static/img/ai.png", "CodePathWin": "plugin/index.js", "CodePathMac": "plugin/index.js", "Description": "监控 Codex / Claude / opencode AI 工作流状态", "Version": "2.0.0", "URL": "http://10.10.10.14:18003/v6ole/streamdock-ai-monitor", "OS": [ - { "Platform": "windows", "MinimumVersion": "7" }, - { "Platform": "mac", "MinimumVersion": "10.11" } + { + "Platform": "windows", + "MinimumVersion": "7" + }, + { + "Platform": "mac", + "MinimumVersion": "10.11" + } ], - "Software": { "MinimumVersion": "3.10.188.226" }, - "Nodejs": { "Version": "20" } + "Software": { + "MinimumVersion": "3.10.188.226" + }, + "Nodejs": { + "Version": "20" + } } \ No newline at end of file diff --git a/com.streamdock.ai-monitor.sdPlugin/plugin/index.js b/com.streamdock.ai-monitor.sdPlugin/plugin/index.js index e152f2e..a111226 100644 --- a/com.streamdock.ai-monitor.sdPlugin/plugin/index.js +++ b/com.streamdock.ai-monitor.sdPlugin/plugin/index.js @@ -13,7 +13,7 @@ var AGENTS = { codex: { label: 'Codex', scanDir: path.join(HOME, '.codex', 'sessions'), - logoFile: 'codex-icon.svg', + logoFile: 'codex.png', normalize: function(obj) { var t = obj.type || '', pt = (obj.payload || {}).type || '', it = ((obj.payload || {}).item || {}).type || ''; if (t === 'event_msg') { @@ -40,7 +40,7 @@ var AGENTS = { claude: { label: 'Claude', scanDir: path.join(HOME, '.claude', 'projects'), - logoFile: 'claude-icon.svg', + logoFile: 'claude.png', normalize: function(obj) { var t = obj.type || ''; if (t === 'user') return 'prompt'; @@ -61,7 +61,7 @@ var AGENTS = { opencode: { label: 'opencode', scanDir: path.join(HOME, '.opencode', 'sessions'), - logoFile: 'opencode-icon.svg', + logoFile: 'opencode.png', normalize: function(obj) { var t = obj.type || ''; if (t === 'user') return 'prompt'; @@ -75,13 +75,6 @@ var AGENTS = { } }; -// Load logos as data URIs -var LOGOS = {}; -function loadLogo(filename) { - try { return 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(fs.readFileSync(path.join(__dirname, '..', 'static', 'img', filename), 'utf-8')); } - catch (_) { return ''; } -} -Object.keys(AGENTS).forEach(function(k) { LOGOS[k] = loadLogo(AGENTS[k].logoFile); }); // Shared display machinery var STATUS = { @@ -100,15 +93,26 @@ function makeSvg(fill, label, blink, breathe) { var anim = ''; if (blink) anim = ''; else if (breathe) anim = ''; - return '' + anim + '' + label + ''; + return '' + anim + '' + label + ''; } function setDisplay(ctx, state) { var d = STATUS[state] || STATUS['idle']; var ss = states[ctx]; - plugin.setTitle(ctx, d.title); - if (state === 'idle' && ss && ss.logoUri) { plugin.setTitle(ctx, ''); plugin.setImage(ctx, ss.logoUri); } - else plugin.setImage(ctx, 'data:image/svg+xml;charset=utf-8,' + makeSvg(d.fill, d.title, d.blink, d.breathe)); + if (state === 'idle' && ss && ss.agent) { + // Use relative PNG path for idle + plugin.setTitle(ctx, ''); + plugin.setImage(ctx, 'static/img/' + ss.agent.logoFile); + } else { + plugin.setTitle(ctx, d.title); + var svg = ''; + var anim = ''; + if (d.blink) anim = ''; + else if (d.breathe) anim = ''; + svg += '' + anim + ''; + svg += '' + d.title + ''; + plugin.setImage(ctx, 'data:image/svg+xml;charset=utf-8,' + svg); + } } function setState(ctx, state) { @@ -174,8 +178,7 @@ function makeActionFn(agentKey) { default: { pollInterval: POLL_INTERVAL }, _willAppear: function(data) { var ctx = data.context; - var logoUri = LOGOS[agentKey] || ''; - states[ctx] = { agent: agent, currentState: 'idle', lastActivity: Date.now(), offsets: {}, timer: null, logoUri: logoUri }; + states[ctx] = { agent: agent, currentState: 'idle', lastActivity: Date.now(), offsets: {}, timer: null }; setDisplay(ctx, 'idle'); poll(ctx); states[ctx].timer = setInterval(function() { poll(ctx); }, POLL_INTERVAL); diff --git a/com.streamdock.ai-monitor.sdPlugin/static/img/ai.png b/com.streamdock.ai-monitor.sdPlugin/static/img/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..0a530e834367e5c100e53c7adcfc7200eaf2916b GIT binary patch literal 11176 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 JIr7@A{{Y8xTK@n5 literal 0 HcmV?d00001 diff --git a/com.streamdock.ai-monitor.sdPlugin/static/img/codex.png b/com.streamdock.ai-monitor.sdPlugin/static/img/codex.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4ddb812ce1ba3c8eaef7a93db38910e0029bb8 GIT binary patch literal 4493 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 CLi8>G literal 0 HcmV?d00001 diff --git a/com.streamdock.ai-monitor.sdPlugin/static/img/opencode.png b/com.streamdock.ai-monitor.sdPlugin/static/img/opencode.png new file mode 100644 index 0000000000000000000000000000000000000000..fb62860a6afdd4734911386f40b9e458cd139421 GIT binary patch literal 1280 zcmaJ<`%4s26rMGyMG&Nds0goPR7N|m)pcjsP1l{>T584CB_)U&XRbQf%pGU0?J7iC zK?OxcM1MgL2)#(?0X;0TezBk^=!Hd8gb?%~D1z>+yJpflFmunn^L^j>&bjAsOY?^E zvSnoyMU^Ku$|7*@irND)=zv|i8Kys9zexjK3)5|NNiJzcVYj|< zz=o{@&1rR@M-?@?VLb?CB_d!ztbnYs%XFk{n9k`+BzBKk8ss3jCrnS7YEQO+D6%2o zIfnD89LIrrka2*ghp^oM1Sx)frg2V?U-VgE*O)}bAr<9W8`Fvy-rn@n= zB$mx&GEBzLAiIm@MNuRItRVOZ!sqmxSjqZKr@EjZLr1lB3+u=PuAFo2#=NHTOH7*`}bLY{e{bx>ny>PU5`53i6%{2-jR2G$Ad%PWsRE^?R`Ssd! zbu>rydUMp05|?^lu+gPffi=G0C$5ZS#$SFMT2cDshBH2V`-Aj8v|Y((ng#zyX-+$H z^Y5=^kwhfmCa(?i!CGO^-uI@V4^HKqwoT3 iW>2a>Ma7O0FGsDtx9H@