@icaruk/zai-peak-hours 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +0 -38
- package/dist/plugin.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +41 -5
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# @icaruk/zai-peak-hours
|
|
2
2
|
|
|
3
|
-
OpenCode plugin that displays z.ai peak hours information with automatic timezone detection
|
|
3
|
+
OpenCode plugin that displays z.ai peak hours information with automatic timezone detection.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- 🌍 Automatic timezone detection (UTC+8 / Asia/Shanghai)
|
|
8
8
|
- ⏰ Real-time peak hours status (14:00-18:00 UTC+8)
|
|
9
9
|
- 📊 Time remaining until next peak/off-peak transition
|
|
10
|
-
- 💬 Zero-token slash commands (`/peak_hours
|
|
10
|
+
- 💬 Zero-token slash commands (`/peak_hours`) - no LLM invocation
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
@@ -26,9 +26,8 @@ Restart OpenCode to load the plugin.
|
|
|
26
26
|
Commands are automatically available after plugin installation:
|
|
27
27
|
|
|
28
28
|
- `/peak_hours` - Display current peak hours status
|
|
29
|
-
- `/peak_hours_status` - Display plugin diagnostics and configuration status
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
This command executes locally without invoking LLM (zero token usage) via `command.execute.before` hook.
|
|
32
31
|
|
|
33
32
|
## Configuration
|
|
34
33
|
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA4DlD,eAAO,MAAM,SAAS,EAAE,MA6DvB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -29,29 +29,6 @@ function loadConfig() {
|
|
|
29
29
|
}
|
|
30
30
|
return DEFAULT_CONFIG;
|
|
31
31
|
}
|
|
32
|
-
function renderCommandHeading(title) {
|
|
33
|
-
return `${title}\n${'='.repeat(title.length)}`;
|
|
34
|
-
}
|
|
35
|
-
function renderStatusReport(status, config) {
|
|
36
|
-
const currentTime = new Date().toISOString();
|
|
37
|
-
const lines = [
|
|
38
|
-
renderCommandHeading('Peak Hours Status'),
|
|
39
|
-
'',
|
|
40
|
-
'Configuration:',
|
|
41
|
-
`- enabled: ${config.enabled}`,
|
|
42
|
-
'',
|
|
43
|
-
'Current Status:',
|
|
44
|
-
`- current_time: ${currentTime}`,
|
|
45
|
-
`- in_peak_hours: ${status.inPeakHours}`,
|
|
46
|
-
`- transition: ${status.transitionType}`,
|
|
47
|
-
`- time_until_${status.transitionType}: ${status.timeUntilTransition}`,
|
|
48
|
-
'',
|
|
49
|
-
'Peak Hours (UTC+8):',
|
|
50
|
-
`- start: 14:00`,
|
|
51
|
-
`- end: 18:00`,
|
|
52
|
-
];
|
|
53
|
-
return lines.join('\n');
|
|
54
|
-
}
|
|
55
32
|
export const PeakHours = async ({ client }) => {
|
|
56
33
|
const config = loadConfig();
|
|
57
34
|
const typedClient = client;
|
|
@@ -83,14 +60,6 @@ export const PeakHours = async ({ client }) => {
|
|
|
83
60
|
const output = formatPeakHoursMessage(status);
|
|
84
61
|
return await injectCommandOutputAndHandle(input.sessionID, output);
|
|
85
62
|
}
|
|
86
|
-
async function handlePeakHoursStatusSlashCommand(input) {
|
|
87
|
-
if (!config.enabled) {
|
|
88
|
-
return await injectCommandOutputAndHandle(input.sessionID, 'Peak Hours plugin is disabled');
|
|
89
|
-
}
|
|
90
|
-
const status = getPeakHoursStatus();
|
|
91
|
-
const output = renderStatusReport(status, config);
|
|
92
|
-
return await injectCommandOutputAndHandle(input.sessionID, output);
|
|
93
|
-
}
|
|
94
63
|
return {
|
|
95
64
|
// Register built-in slash commands
|
|
96
65
|
config: async (input) => {
|
|
@@ -100,10 +69,6 @@ export const PeakHours = async ({ client }) => {
|
|
|
100
69
|
template: '/peak_hours',
|
|
101
70
|
description: 'Display current z.ai peak hours status and time until next transition',
|
|
102
71
|
};
|
|
103
|
-
cfg.command['peak_hours_status'] = {
|
|
104
|
-
template: '/peak_hours_status',
|
|
105
|
-
description: 'Display peak hours plugin diagnostics and configuration status',
|
|
106
|
-
};
|
|
107
72
|
},
|
|
108
73
|
// Intercept slash commands and handle them without LLM invocation
|
|
109
74
|
'command.execute.before': async (input) => {
|
|
@@ -112,9 +77,6 @@ export const PeakHours = async ({ client }) => {
|
|
|
112
77
|
if (cmd === 'peak_hours') {
|
|
113
78
|
return await handlePeakHoursSlashCommand(input);
|
|
114
79
|
}
|
|
115
|
-
if (cmd === 'peak_hours_status') {
|
|
116
|
-
return await handlePeakHoursStatusSlashCommand(input);
|
|
117
|
-
}
|
|
118
80
|
}
|
|
119
81
|
catch (err) {
|
|
120
82
|
// IMPORTANT: do not swallow command-handled sentinel errors.
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAwBlC,2BAA2B;AAC3B,MAAM,wBAAwB,GAAG,gCAAyC,CAAC;AAE3E,SAAS,OAAO;IACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO;aACxF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAW,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAmC,CAAC;IAExD,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,MAAc;QAC9D,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC/B,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;gBACvB,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBACvD;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,UAAU,4BAA4B,CAAC,SAAiB,EAAE,MAAsB;QACnF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,2BAA2B,CAAC,KAA0B;QACnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,4BAA4B,CAAC,KAAK,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,MAAM,4BAA4B,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,mCAAmC;QACnC,MAAM,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,KAA0B,CAAC;YACvC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC;YACnB,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG;gBAC1B,QAAQ,EAAE,aAAa;gBACvB,WAAW,EAAE,uEAAuE;aACrF,CAAC;QACJ,CAAC;QAED,kEAAkE;QAClE,wBAAwB,EAAE,KAAK,EAAE,KAA0B,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBAE1B,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;oBACzB,OAAO,MAAM,2BAA2B,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,6DAA6D;gBAC7D,0DAA0D;gBAC1D,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,KAAK,CAAC;CACjC;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAkDpD;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,KAAK,CAAC;CACjC;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAkDpD;AA6CD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAQtE"}
|
package/dist/utils.js
CHANGED
|
@@ -44,12 +44,48 @@ export function getPeakHoursStatus() {
|
|
|
44
44
|
transitionType
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
function formatGMTOffset(offsetMinutes) {
|
|
48
|
+
const offsetHours = Math.abs(Math.floor(offsetMinutes / 60));
|
|
49
|
+
const offsetMinutesRemainder = Math.abs(offsetMinutes % 60);
|
|
50
|
+
const sign = offsetMinutes <= 0 ? '+' : '-';
|
|
51
|
+
return `GMT${sign}${offsetHours}${offsetMinutesRemainder > 0 ? ':' + String(offsetMinutesRemainder).padStart(2, '0') : ''}`;
|
|
52
|
+
}
|
|
53
|
+
function formatLocalISODate(date) {
|
|
54
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
55
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
56
|
+
return `${hours}:${minutes}`;
|
|
57
|
+
}
|
|
58
|
+
function convertUTC8ToLocal(utc8Hour, utc8Minute) {
|
|
59
|
+
const now = new Date();
|
|
60
|
+
const offsetMinutes = now.getTimezoneOffset(); // Offset in minutes from UTC (negative for timezones ahead of UTC)
|
|
61
|
+
// UTC+8 time to UTC time
|
|
62
|
+
let utcHour = utc8Hour - 8;
|
|
63
|
+
if (utcHour < 0) {
|
|
64
|
+
utcHour += 24;
|
|
50
65
|
}
|
|
51
|
-
|
|
52
|
-
|
|
66
|
+
// UTC time to local time
|
|
67
|
+
const totalMinutes = utcHour * 60 + utc8Minute - offsetMinutes;
|
|
68
|
+
let localHour = Math.floor(totalMinutes / 60) % 24;
|
|
69
|
+
if (localHour < 0) {
|
|
70
|
+
localHour += 24;
|
|
53
71
|
}
|
|
72
|
+
const localMinute = totalMinutes % 60;
|
|
73
|
+
if (localMinute < 0) {
|
|
74
|
+
localMinute + 60;
|
|
75
|
+
}
|
|
76
|
+
return { hour: localHour, minute: Math.abs(localMinute) };
|
|
77
|
+
}
|
|
78
|
+
function formatPeakHoursRange() {
|
|
79
|
+
const start = convertUTC8ToLocal(14, 0);
|
|
80
|
+
const end = convertUTC8ToLocal(18, 0);
|
|
81
|
+
return `${String(start.hour).padStart(2, '0')}:${String(start.minute).padStart(2, '0')} - ${String(end.hour).padStart(2, '0')}:${String(end.minute).padStart(2, '0')}`;
|
|
82
|
+
}
|
|
83
|
+
export function formatPeakHoursMessage(status) {
|
|
84
|
+
const icon = status.inPeakHours ? '🔴' : '✅';
|
|
85
|
+
const peakHoursText = status.inPeakHours ? 'peak' : 'off-peak';
|
|
86
|
+
const offset = formatGMTOffset(new Date().getTimezoneOffset());
|
|
87
|
+
const currentTime = formatLocalISODate(new Date());
|
|
88
|
+
const peakHours = formatPeakHoursRange();
|
|
89
|
+
return `${icon} Currently in ${peakHoursText} hours.\n${status.timeUntilTransition} remaining.\n\nCurrent time: ${currentTime} (${offset})\nPeak hours: ${peakHours} (${offset})`;
|
|
54
90
|
}
|
|
55
91
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB;IAChC,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,iDAAiD;IACjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAEzC,IAAI,WAAoB,CAAC;IACzB,IAAI,cAAoB,CAAC;IACzB,IAAI,cAA+B,CAAC;IAEpC,IAAI,WAAW,IAAI,cAAc,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;QAChE,WAAW,GAAG,IAAI,CAAC;QACnB,cAAc,GAAG,KAAK,CAAC;QACvB,cAAc,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,KAAK,CAAC;QACpB,cAAc,GAAG,OAAO,CAAC;QAEzB,IAAI,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;YAChC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,cAAc,GAAG,aAAa,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,mBAA2B,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC7B,mBAAmB,GAAG,GAAG,KAAK,UAAU,OAAO,UAAU,CAAC;IAC5D,CAAC;SAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrB,mBAAmB,GAAG,GAAG,KAAK,QAAQ,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,mBAAmB,GAAG,GAAG,OAAO,UAAU,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,WAAW;QACX,mBAAmB;QACnB,cAAc;KACf,CAAC;AACJ,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|