@shin1ohno/sage 0.5.3 → 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.
@@ -0,0 +1,237 @@
1
+ /**
2
+ * WorkingCadenceService
3
+ *
4
+ * Provides user's working rhythm information including:
5
+ * - Working hours
6
+ * - Deep work days and meeting-heavy days
7
+ * - Deep work blocks
8
+ * - Scheduling recommendations
9
+ */
10
+ import { ConfigLoader } from '../config/loader.js';
11
+ const VALID_DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
12
+ const ALL_DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
13
+ const DAY_MAP = {
14
+ Monday: '月',
15
+ Tuesday: '火',
16
+ Wednesday: '水',
17
+ Thursday: '木',
18
+ Friday: '金',
19
+ Saturday: '土',
20
+ Sunday: '日',
21
+ };
22
+ export class WorkingCadenceService {
23
+ /**
24
+ * Get working cadence information
25
+ */
26
+ async getWorkingCadence(request) {
27
+ let config;
28
+ try {
29
+ // Validate request parameters first
30
+ if (request?.dayOfWeek && !VALID_DAYS.includes(request.dayOfWeek)) {
31
+ return this.errorResult(`無効な曜日が指定されました: ${request.dayOfWeek}`);
32
+ }
33
+ if (request?.date && !this.isValidDate(request.date)) {
34
+ return this.errorResult(`無効な日付形式です: ${request.date}`);
35
+ }
36
+ // Load config or use defaults
37
+ if (await ConfigLoader.exists()) {
38
+ config = await ConfigLoader.load();
39
+ }
40
+ else {
41
+ config = ConfigLoader.getDefaultConfig();
42
+ }
43
+ }
44
+ catch {
45
+ config = ConfigLoader.getDefaultConfig();
46
+ }
47
+ // Calculate working hours
48
+ const workingHours = this.calculateWorkingHours(config.calendar.workingHours);
49
+ // Build weekly pattern
50
+ const weeklyPattern = this.buildWeeklyPattern(config.calendar);
51
+ // Transform deep work blocks
52
+ const deepWorkBlocks = this.transformDeepWorkBlocks(config.calendar.deepWorkBlocks);
53
+ // Generate recommendations
54
+ const recommendations = this.generateRecommendations(config.calendar);
55
+ // Build specific day info if requested
56
+ let specificDay;
57
+ if (request?.dayOfWeek || request?.date) {
58
+ const dayOfWeek = request.dayOfWeek || this.getDayOfWeek(request.date);
59
+ specificDay = this.buildSpecificDayInfo(dayOfWeek, request.date, config.calendar, deepWorkBlocks);
60
+ }
61
+ // Generate summary
62
+ const summary = this.generateSummary(workingHours, weeklyPattern, config.reminders.weeklyReview);
63
+ return {
64
+ success: true,
65
+ user: {
66
+ name: config.user.name,
67
+ timezone: config.user.timezone,
68
+ },
69
+ workingHours,
70
+ weeklyPattern,
71
+ deepWorkBlocks,
72
+ weeklyReview: config.reminders.weeklyReview,
73
+ specificDay,
74
+ recommendations,
75
+ summary,
76
+ };
77
+ }
78
+ /**
79
+ * Get the type of day (deep-work, meeting-heavy, or normal)
80
+ */
81
+ getDayType(dayOfWeek, calendarConfig) {
82
+ if (calendarConfig.deepWorkDays.includes(dayOfWeek)) {
83
+ return 'deep-work';
84
+ }
85
+ if (calendarConfig.meetingHeavyDays.includes(dayOfWeek)) {
86
+ return 'meeting-heavy';
87
+ }
88
+ return 'normal';
89
+ }
90
+ /**
91
+ * Get day of week from ISO date string
92
+ */
93
+ getDayOfWeek(date) {
94
+ const d = new Date(date);
95
+ const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
96
+ return days[d.getDay()];
97
+ }
98
+ /**
99
+ * Generate scheduling recommendations based on calendar config
100
+ */
101
+ generateRecommendations(config) {
102
+ const recommendations = [];
103
+ if (config.deepWorkDays.length > 0) {
104
+ recommendations.push({
105
+ type: 'deep-work',
106
+ recommendation: `複雑なタスクは${this.formatDays(config.deepWorkDays)}にスケジュールしてください`,
107
+ bestDays: config.deepWorkDays,
108
+ reason: 'これらの日はDeep Work日として設定されており、集中作業に適しています',
109
+ });
110
+ }
111
+ if (config.meetingHeavyDays.length > 0) {
112
+ recommendations.push({
113
+ type: 'meeting',
114
+ recommendation: `ミーティングは${this.formatDays(config.meetingHeavyDays)}に集中させることを推奨します`,
115
+ bestDays: config.meetingHeavyDays,
116
+ reason: 'これらの日はミーティング集中日として設定されています',
117
+ });
118
+ }
119
+ // Quick task recommendation
120
+ if (config.meetingHeavyDays.length > 0) {
121
+ recommendations.push({
122
+ type: 'quick-task',
123
+ recommendation: `短時間タスクは${this.formatDays(config.meetingHeavyDays)}のミーティング合間に処理できます`,
124
+ bestDays: config.meetingHeavyDays,
125
+ reason: 'ミーティング日の合間は短いタスクに適しています',
126
+ });
127
+ }
128
+ return recommendations;
129
+ }
130
+ /**
131
+ * Calculate working hours info from config
132
+ */
133
+ calculateWorkingHours(workingHours) {
134
+ const startMinutes = this.timeToMinutes(workingHours.start);
135
+ const endMinutes = this.timeToMinutes(workingHours.end);
136
+ const totalMinutes = Math.max(0, endMinutes - startMinutes);
137
+ return {
138
+ start: workingHours.start,
139
+ end: workingHours.end,
140
+ totalMinutes,
141
+ };
142
+ }
143
+ /**
144
+ * Transform deep work blocks to include formatted times and duration
145
+ */
146
+ transformDeepWorkBlocks(blocks) {
147
+ return blocks.map((block) => ({
148
+ day: block.day,
149
+ startHour: block.startHour,
150
+ endHour: block.endHour,
151
+ startTime: this.formatHour(block.startHour),
152
+ endTime: this.formatHour(block.endHour),
153
+ durationMinutes: (block.endHour - block.startHour) * 60,
154
+ description: block.description,
155
+ }));
156
+ }
157
+ /**
158
+ * Format array of English days to Japanese
159
+ */
160
+ formatDays(days) {
161
+ if (days.length === 0)
162
+ return '';
163
+ return days.map((d) => DAY_MAP[d] || d).join('・');
164
+ }
165
+ // Private helper methods
166
+ buildWeeklyPattern(config) {
167
+ const normalDays = ALL_DAYS.filter((day) => !config.deepWorkDays.includes(day) && !config.meetingHeavyDays.includes(day));
168
+ return {
169
+ deepWorkDays: config.deepWorkDays,
170
+ meetingHeavyDays: config.meetingHeavyDays,
171
+ normalDays,
172
+ };
173
+ }
174
+ buildSpecificDayInfo(dayOfWeek, date, calendarConfig, allDeepWorkBlocks) {
175
+ const dayType = this.getDayType(dayOfWeek, calendarConfig);
176
+ const dayBlocks = allDeepWorkBlocks.filter((block) => block.day === dayOfWeek);
177
+ const recommendations = [];
178
+ if (dayType === 'deep-work') {
179
+ recommendations.push('この日は集中作業に適しています。複雑なタスクをスケジュールしてください。');
180
+ if (dayBlocks.length > 0) {
181
+ const times = dayBlocks.map((b) => `${b.startTime}-${b.endTime}`).join(', ');
182
+ recommendations.push(`Deep Workブロック: ${times}`);
183
+ }
184
+ }
185
+ else if (dayType === 'meeting-heavy') {
186
+ recommendations.push('この日はミーティングが多い日です。ミーティングの合間に短いタスクを処理してください。');
187
+ }
188
+ else {
189
+ recommendations.push('この日は特別な設定がありません。自由にスケジュールを組めます。');
190
+ }
191
+ return {
192
+ date,
193
+ dayOfWeek,
194
+ dayType,
195
+ deepWorkBlocks: dayBlocks,
196
+ recommendations,
197
+ };
198
+ }
199
+ generateSummary(workingHours, weeklyPattern, weeklyReview) {
200
+ const lines = [];
201
+ lines.push(`勤務時間: ${workingHours.start}-${workingHours.end} (${Math.floor(workingHours.totalMinutes / 60)}時間)`);
202
+ if (weeklyPattern.deepWorkDays.length > 0) {
203
+ lines.push(`Deep Work日: ${this.formatDays(weeklyPattern.deepWorkDays)}`);
204
+ }
205
+ if (weeklyPattern.meetingHeavyDays.length > 0) {
206
+ lines.push(`ミーティング集中日: ${this.formatDays(weeklyPattern.meetingHeavyDays)}`);
207
+ }
208
+ if (weeklyReview?.enabled) {
209
+ lines.push(`週次レビュー: ${DAY_MAP[weeklyReview.day] || weeklyReview.day}曜 ${weeklyReview.time}`);
210
+ }
211
+ return lines.join('\n');
212
+ }
213
+ timeToMinutes(time) {
214
+ const [hours, minutes] = time.split(':').map(Number);
215
+ return hours * 60 + minutes;
216
+ }
217
+ formatHour(hour) {
218
+ return `${hour.toString().padStart(2, '0')}:00`;
219
+ }
220
+ isValidDate(dateStr) {
221
+ const date = new Date(dateStr);
222
+ return !isNaN(date.getTime());
223
+ }
224
+ errorResult(error) {
225
+ return {
226
+ success: false,
227
+ error,
228
+ user: { name: '', timezone: '' },
229
+ workingHours: { start: '', end: '', totalMinutes: 0 },
230
+ weeklyPattern: { deepWorkDays: [], meetingHeavyDays: [], normalDays: [] },
231
+ deepWorkBlocks: [],
232
+ recommendations: [],
233
+ summary: '',
234
+ };
235
+ }
236
+ }
237
+ //# sourceMappingURL=working-cadence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-cadence.js","sourceRoot":"","sources":["../../src/services/working-cadence.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -4,6 +4,6 @@
4
4
  * Single source of truth for version number.
5
5
  * Import this instead of hardcoding version strings.
6
6
  */
7
- export declare const VERSION = "0.5.3";
7
+ export declare const VERSION = "0.6.0";
8
8
  export declare const SERVER_NAME = "sage";
9
9
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -6,6 +6,6 @@
6
6
  */
7
7
  // Version is updated by npm version command and build process
8
8
  // Keep in sync with package.json
9
- export const VERSION = '0.5.3';
9
+ export const VERSION = '0.6.0';
10
10
  export const SERVER_NAME = 'sage';
11
11
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shin1ohno/sage",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "AI Task Management Assistant MCP Server for Claude Desktop and Claude Code",
5
5
  "main": "dist/index.js",
6
6
  "bin": {