@shin1ohno/sage 0.7.9 → 0.8.4
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 +26 -8
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +30 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validation.d.ts +130 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +53 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/index.js +677 -214
- package/dist/index.js.map +1 -1
- package/dist/integrations/calendar-service.d.ts +6 -3
- package/dist/integrations/calendar-service.d.ts.map +1 -1
- package/dist/integrations/calendar-service.js +26 -4
- package/dist/integrations/calendar-service.js.map +1 -1
- package/dist/integrations/calendar-source-manager.d.ts +302 -0
- package/dist/integrations/calendar-source-manager.d.ts.map +1 -0
- package/dist/integrations/calendar-source-manager.js +862 -0
- package/dist/integrations/calendar-source-manager.js.map +1 -0
- package/dist/integrations/google-calendar-service.d.ts +176 -0
- package/dist/integrations/google-calendar-service.d.ts.map +1 -0
- package/dist/integrations/google-calendar-service.js +745 -0
- package/dist/integrations/google-calendar-service.js.map +1 -0
- package/dist/oauth/google-oauth-handler.d.ts +149 -0
- package/dist/oauth/google-oauth-handler.d.ts.map +1 -0
- package/dist/oauth/google-oauth-handler.js +365 -0
- package/dist/oauth/google-oauth-handler.js.map +1 -0
- package/dist/types/config.d.ts +15 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +21 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/google-calendar-types.d.ts +139 -0
- package/dist/types/google-calendar-types.d.ts.map +1 -0
- package/dist/types/google-calendar-types.js +46 -0
- package/dist/types/google-calendar-types.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +22 -4
- package/dist/version.js.map +1 -1
- package/package.json +4 -3
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Calendar API Type Definitions
|
|
3
|
+
* Requirement: 1, 2, 3, 4, 5, 6
|
|
4
|
+
* Design: .claude/specs/google-calendar-api/design.md (Data Models section)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Google Calendar Event (internal representation from Google Calendar API)
|
|
8
|
+
* Requirement: 2
|
|
9
|
+
*/
|
|
10
|
+
export interface GoogleCalendarEvent {
|
|
11
|
+
id: string;
|
|
12
|
+
summary: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
location?: string;
|
|
15
|
+
start: {
|
|
16
|
+
dateTime?: string;
|
|
17
|
+
date?: string;
|
|
18
|
+
timeZone?: string;
|
|
19
|
+
};
|
|
20
|
+
end: {
|
|
21
|
+
dateTime?: string;
|
|
22
|
+
date?: string;
|
|
23
|
+
timeZone?: string;
|
|
24
|
+
};
|
|
25
|
+
attendees?: Array<{
|
|
26
|
+
email: string;
|
|
27
|
+
responseStatus: 'needsAction' | 'declined' | 'tentative' | 'accepted';
|
|
28
|
+
}>;
|
|
29
|
+
reminders?: {
|
|
30
|
+
useDefault: boolean;
|
|
31
|
+
overrides?: Array<{
|
|
32
|
+
method: 'email' | 'popup';
|
|
33
|
+
minutes: number;
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
36
|
+
recurringEventId?: string;
|
|
37
|
+
iCalUID: string;
|
|
38
|
+
status?: 'confirmed' | 'tentative' | 'cancelled';
|
|
39
|
+
organizer?: {
|
|
40
|
+
email: string;
|
|
41
|
+
displayName?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* OAuth tokens for Google Calendar API
|
|
46
|
+
* Requirement: 1
|
|
47
|
+
*/
|
|
48
|
+
export interface OAuthTokens {
|
|
49
|
+
accessToken: string;
|
|
50
|
+
refreshToken: string;
|
|
51
|
+
expiresAt: string;
|
|
52
|
+
scope: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Calendar information from Google Calendar API
|
|
56
|
+
* Requirement: 2
|
|
57
|
+
*/
|
|
58
|
+
export interface CalendarInfo {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
source: 'eventkit' | 'google';
|
|
62
|
+
isPrimary: boolean;
|
|
63
|
+
color?: string;
|
|
64
|
+
accessRole?: 'owner' | 'writer' | 'reader';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sync result between EventKit and Google Calendar
|
|
68
|
+
* Requirement: 8 (optional feature)
|
|
69
|
+
*/
|
|
70
|
+
export interface SyncResult {
|
|
71
|
+
success: boolean;
|
|
72
|
+
eventsAdded: number;
|
|
73
|
+
eventsUpdated: number;
|
|
74
|
+
eventsDeleted: number;
|
|
75
|
+
conflicts: Array<{
|
|
76
|
+
eventId: string;
|
|
77
|
+
reason: string;
|
|
78
|
+
resolution: 'skipped' | 'merged' | 'duplicated';
|
|
79
|
+
}>;
|
|
80
|
+
errors: Array<{
|
|
81
|
+
source: 'eventkit' | 'google';
|
|
82
|
+
error: string;
|
|
83
|
+
}>;
|
|
84
|
+
timestamp: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sync status between calendar sources
|
|
88
|
+
* Requirement: 8 (optional feature)
|
|
89
|
+
*/
|
|
90
|
+
export interface SyncStatus {
|
|
91
|
+
lastSyncTime?: string;
|
|
92
|
+
nextSyncTime?: string;
|
|
93
|
+
isEnabled: boolean;
|
|
94
|
+
sources: {
|
|
95
|
+
eventkit: {
|
|
96
|
+
available: boolean;
|
|
97
|
+
lastError?: string;
|
|
98
|
+
};
|
|
99
|
+
google: {
|
|
100
|
+
available: boolean;
|
|
101
|
+
lastError?: string;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Extended Calendar Event with additional fields for Google Calendar integration
|
|
107
|
+
* Extends the base CalendarEvent from calendar-service.ts
|
|
108
|
+
* Requirement: 2, 3, 4, 5, 6
|
|
109
|
+
*/
|
|
110
|
+
export interface CalendarEvent {
|
|
111
|
+
id: string;
|
|
112
|
+
title: string;
|
|
113
|
+
start: string;
|
|
114
|
+
end: string;
|
|
115
|
+
isAllDay: boolean;
|
|
116
|
+
source: 'eventkit' | 'google';
|
|
117
|
+
calendar?: string;
|
|
118
|
+
location?: string;
|
|
119
|
+
description?: string;
|
|
120
|
+
attendees?: string[];
|
|
121
|
+
status?: 'confirmed' | 'tentative' | 'cancelled';
|
|
122
|
+
iCalUID?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Convert Google Calendar Event to unified CalendarEvent format
|
|
126
|
+
* Requirement: 2
|
|
127
|
+
* @param googleEvent Google Calendar API event object
|
|
128
|
+
* @returns Unified CalendarEvent object
|
|
129
|
+
*/
|
|
130
|
+
export declare function convertGoogleToCalendarEvent(googleEvent: GoogleCalendarEvent): CalendarEvent;
|
|
131
|
+
/**
|
|
132
|
+
* Check if two events are duplicates based on iCalUID or title+time matching
|
|
133
|
+
* Requirement: 7 (deduplication)
|
|
134
|
+
* @param event1 First calendar event
|
|
135
|
+
* @param event2 Second calendar event
|
|
136
|
+
* @returns true if events are duplicates
|
|
137
|
+
*/
|
|
138
|
+
export declare function areEventsDuplicate(event1: CalendarEvent, event2: CalendarEvent): boolean;
|
|
139
|
+
//# sourceMappingURL=google-calendar-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-calendar-types.d.ts","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Calendar API Type Definitions
|
|
3
|
+
* Requirement: 1, 2, 3, 4, 5, 6
|
|
4
|
+
* Design: .claude/specs/google-calendar-api/design.md (Data Models section)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert Google Calendar Event to unified CalendarEvent format
|
|
8
|
+
* Requirement: 2
|
|
9
|
+
* @param googleEvent Google Calendar API event object
|
|
10
|
+
* @returns Unified CalendarEvent object
|
|
11
|
+
*/
|
|
12
|
+
export function convertGoogleToCalendarEvent(googleEvent) {
|
|
13
|
+
return {
|
|
14
|
+
id: googleEvent.id,
|
|
15
|
+
title: googleEvent.summary,
|
|
16
|
+
start: googleEvent.start.dateTime || googleEvent.start.date || '',
|
|
17
|
+
end: googleEvent.end.dateTime || googleEvent.end.date || '',
|
|
18
|
+
isAllDay: !!googleEvent.start.date,
|
|
19
|
+
source: 'google',
|
|
20
|
+
calendar: googleEvent.organizer?.email,
|
|
21
|
+
location: googleEvent.location,
|
|
22
|
+
description: googleEvent.description,
|
|
23
|
+
attendees: googleEvent.attendees?.map((a) => a.email),
|
|
24
|
+
status: googleEvent.status,
|
|
25
|
+
iCalUID: googleEvent.iCalUID,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if two events are duplicates based on iCalUID or title+time matching
|
|
30
|
+
* Requirement: 7 (deduplication)
|
|
31
|
+
* @param event1 First calendar event
|
|
32
|
+
* @param event2 Second calendar event
|
|
33
|
+
* @returns true if events are duplicates
|
|
34
|
+
*/
|
|
35
|
+
export function areEventsDuplicate(event1, event2) {
|
|
36
|
+
// Method 1: iCalUID comparison (most reliable)
|
|
37
|
+
if (event1.iCalUID && event2.iCalUID && event1.iCalUID === event2.iCalUID) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Method 2: Title + start time + end time matching
|
|
41
|
+
const titleMatch = event1.title.toLowerCase() === event2.title.toLowerCase();
|
|
42
|
+
const startMatch = event1.start === event2.start;
|
|
43
|
+
const endMatch = event1.end === event2.end;
|
|
44
|
+
return titleMatch && startMatch && endMatch;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=google-calendar-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-calendar-types.js","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwHH;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,WAAgC;IAC3E,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,KAAK,EAAE,WAAW,CAAC,OAAO;QAC1B,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;QACjE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;QAC3D,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI;QAClC,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,WAAW,CAAC,SAAS,EAAE,KAAK;QACtC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqB,EAAE,MAAqB;IAC7E,+CAA+C;IAC/C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;IAE3C,OAAO,UAAU,IAAI,UAAU,IAAI,QAAQ,CAAC;AAC9C,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Version information for sage
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Reads version from package.json at runtime.
|
|
5
5
|
* Import this instead of hardcoding version strings.
|
|
6
6
|
*/
|
|
7
|
-
export declare const VERSION
|
|
7
|
+
export declare const VERSION: string;
|
|
8
8
|
export declare const SERVER_NAME = "sage";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,eAAO,MAAM,OAAO,QAAe,CAAC;AACpC,eAAO,MAAM,WAAW,SAAS,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Version information for sage
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Reads version from package.json at runtime.
|
|
5
5
|
* Import this instead of hardcoding version strings.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import { readFileSync, existsSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
// Fallback version - keep in sync with package.json
|
|
10
|
+
const FALLBACK_VERSION = '0.8.4';
|
|
11
|
+
function getVersion() {
|
|
12
|
+
// Try to find package.json from current working directory
|
|
13
|
+
const pkgPath = join(process.cwd(), 'package.json');
|
|
14
|
+
try {
|
|
15
|
+
if (existsSync(pkgPath)) {
|
|
16
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
17
|
+
if (pkg.name === '@shin1ohno/sage') {
|
|
18
|
+
return pkg.version;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Fall through to default
|
|
24
|
+
}
|
|
25
|
+
return FALLBACK_VERSION;
|
|
26
|
+
}
|
|
27
|
+
export const VERSION = getVersion();
|
|
10
28
|
export const SERVER_NAME = 'sage';
|
|
11
29
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,oDAAoD;AACpD,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,SAAS,UAAU;IACjB,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACnC,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shin1ohno/sage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "AI Task Management Assistant MCP Server for Claude Desktop and Claude Code",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"start": "node dist/index.js",
|
|
13
13
|
"dev": "tsx src/index.ts",
|
|
14
|
-
"test": "jest",
|
|
15
|
-
"test:coverage": "jest --coverage",
|
|
14
|
+
"test": "jest --forceExit",
|
|
15
|
+
"test:coverage": "jest --coverage --forceExit",
|
|
16
16
|
"lint": "eslint src/**/*.ts",
|
|
17
17
|
"clean": "rm -rf dist",
|
|
18
18
|
"prepublishOnly": "npm run build"
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"homepage": "https://github.com/shin1ohno/sage#readme",
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
50
|
+
"googleapis": "^134.0.0",
|
|
50
51
|
"run-applescript": "^7.1.0",
|
|
51
52
|
"zod": "^3.23.8"
|
|
52
53
|
},
|