@shin1ohno/sage 0.1.0 → 0.2.1

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.
Files changed (72) hide show
  1. package/README.md +79 -114
  2. package/dist/config/storage/storage-factory.d.ts +5 -1
  3. package/dist/config/storage/storage-factory.d.ts.map +1 -1
  4. package/dist/config/storage/storage-factory.js +12 -19
  5. package/dist/config/storage/storage-factory.js.map +1 -1
  6. package/dist/core/sage-core.d.ts +10 -5
  7. package/dist/core/sage-core.d.ts.map +1 -1
  8. package/dist/core/sage-core.js +28 -51
  9. package/dist/core/sage-core.js.map +1 -1
  10. package/dist/index.js +335 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/integrations/apple-reminders.d.ts +49 -0
  13. package/dist/integrations/apple-reminders.d.ts.map +1 -1
  14. package/dist/integrations/apple-reminders.js +229 -0
  15. package/dist/integrations/apple-reminders.js.map +1 -1
  16. package/dist/integrations/notion-mcp.d.ts +136 -1
  17. package/dist/integrations/notion-mcp.d.ts.map +1 -1
  18. package/dist/integrations/notion-mcp.js +449 -1
  19. package/dist/integrations/notion-mcp.js.map +1 -1
  20. package/dist/integrations/task-synchronizer.d.ts +124 -0
  21. package/dist/integrations/task-synchronizer.d.ts.map +1 -0
  22. package/dist/integrations/task-synchronizer.js +363 -0
  23. package/dist/integrations/task-synchronizer.js.map +1 -0
  24. package/dist/integrations/todo-list-manager.d.ts +185 -0
  25. package/dist/integrations/todo-list-manager.d.ts.map +1 -0
  26. package/dist/integrations/todo-list-manager.js +581 -0
  27. package/dist/integrations/todo-list-manager.js.map +1 -0
  28. package/dist/platform/adapter-factory.d.ts.map +1 -1
  29. package/dist/platform/adapter-factory.js +4 -8
  30. package/dist/platform/adapter-factory.js.map +1 -1
  31. package/dist/platform/adapters/mcp-adapter.js +1 -1
  32. package/dist/platform/adapters/mcp-adapter.js.map +1 -1
  33. package/dist/platform/adapters/remote-mcp-adapter.d.ts +34 -0
  34. package/dist/platform/adapters/remote-mcp-adapter.d.ts.map +1 -0
  35. package/dist/platform/adapters/remote-mcp-adapter.js +54 -0
  36. package/dist/platform/adapters/remote-mcp-adapter.js.map +1 -0
  37. package/dist/platform/detector.d.ts +5 -16
  38. package/dist/platform/detector.d.ts.map +1 -1
  39. package/dist/platform/detector.js +52 -108
  40. package/dist/platform/detector.js.map +1 -1
  41. package/dist/platform/index.d.ts +0 -2
  42. package/dist/platform/index.d.ts.map +1 -1
  43. package/dist/platform/index.js +0 -2
  44. package/dist/platform/index.js.map +1 -1
  45. package/dist/platform/types.d.ts +20 -62
  46. package/dist/platform/types.d.ts.map +1 -1
  47. package/dist/platform/types.js +6 -11
  48. package/dist/platform/types.js.map +1 -1
  49. package/dist/remote/cloud-config.d.ts +139 -0
  50. package/dist/remote/cloud-config.d.ts.map +1 -0
  51. package/dist/remote/cloud-config.js +229 -0
  52. package/dist/remote/cloud-config.js.map +1 -0
  53. package/dist/remote/hybrid-integration.d.ts +109 -0
  54. package/dist/remote/hybrid-integration.d.ts.map +1 -0
  55. package/dist/remote/hybrid-integration.js +230 -0
  56. package/dist/remote/hybrid-integration.js.map +1 -0
  57. package/dist/remote/remote-mcp-server.d.ts +244 -0
  58. package/dist/remote/remote-mcp-server.d.ts.map +1 -0
  59. package/dist/remote/remote-mcp-server.js +507 -0
  60. package/dist/remote/remote-mcp-server.js.map +1 -0
  61. package/dist/utils/priority.d.ts.map +1 -1
  62. package/dist/utils/priority.js +18 -5
  63. package/dist/utils/priority.js.map +1 -1
  64. package/dist/utils/stakeholders.d.ts +4 -0
  65. package/dist/utils/stakeholders.d.ts.map +1 -1
  66. package/dist/utils/stakeholders.js +45 -4
  67. package/dist/utils/stakeholders.js.map +1 -1
  68. package/dist/utils/task-splitter.d.ts.map +1 -1
  69. package/dist/utils/task-splitter.js +62 -11
  70. package/dist/utils/task-splitter.js.map +1 -1
  71. package/manifest.json +74 -0
  72. package/package.json +2 -1
package/README.md CHANGED
@@ -1,155 +1,120 @@
1
1
  # sage (賢者)
2
2
 
3
- AI Task Management Assistant MCP Server for Claude Desktop and Claude Code.
3
+ AI Task Management Assistant - MCP Server for Claude Desktop, Claude Code, and Remote clients.
4
4
 
5
- ## Features
6
-
7
- - **Task Analysis**: Automatic priority assignment (P0-P3), time estimation, stakeholder extraction
8
- - **Task Splitting**: Break complex tasks into actionable subtasks
9
- - **Apple Reminders Integration**: Create reminders via AppleScript (macOS) or native API (iOS/iPadOS)
10
- - **Notion Integration**: Sync long-term tasks (8+ days) to Notion via MCP
11
- - **Calendar Integration**: Find available time slots based on your schedule
12
- - **Smart Routing**: Automatically route tasks to Apple Reminders (≤7 days) or Notion (8+ days)
5
+ [![npm version](https://badge.fury.io/js/@shin1ohno%2Fsage.svg)](https://www.npmjs.com/package/@shin1ohno/sage)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
13
7
 
14
- ## Installation
8
+ ## Overview
15
9
 
16
- ### Claude Desktop
10
+ sage is an intelligent task management assistant that helps you:
17
11
 
18
- Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):
12
+ - **Analyze tasks** - Automatically assign priorities (P0-P3), estimate time, and extract stakeholders
13
+ - **Split complex tasks** - Break down large tasks into actionable subtasks
14
+ - **Smart routing** - Route tasks to Apple Reminders (≤7 days) or Notion (8+ days)
15
+ - **Calendar awareness** - Find available time slots based on your schedule
19
16
 
20
- ```json
21
- {
22
- "mcpServers": {
23
- "sage": {
24
- "command": "npx",
25
- "args": ["-y", "@shin1ohno/sage"]
26
- }
27
- }
28
- }
29
- ```
17
+ ## Quick Start
30
18
 
31
- ### Claude Code
19
+ ### For Claude Desktop / Claude Code (Local MCP)
32
20
 
33
21
  ```bash
22
+ # Claude Code - one command setup
34
23
  claude mcp add sage -- npx -y @shin1ohno/sage
35
24
  ```
36
25
 
37
- ### Manual Installation
26
+ For Claude Desktop, see [Local MCP Setup Guide](docs/SETUP-LOCAL.md).
38
27
 
39
- ```bash
40
- npm install -g @shin1ohno/sage
41
- ```
28
+ ### For iOS / iPadOS / Web (Remote MCP)
42
29
 
43
- ## Setup
30
+ See [Remote MCP Setup Guide](docs/SETUP-REMOTE.md).
44
31
 
45
- On first use, sage will guide you through setup:
32
+ ## Documentation
46
33
 
47
- 1. Run `check_setup_status` to see if configuration is needed
48
- 2. Run `start_setup_wizard` to begin interactive setup
49
- 3. Answer questions about your preferences (name, working hours, team, etc.)
50
- 4. Run `save_config` to save your configuration
34
+ | Document | Description |
35
+ |----------|-------------|
36
+ | [Local MCP Setup](docs/SETUP-LOCAL.md) | Step-by-step guide for Claude Desktop/Code |
37
+ | [Remote MCP Setup](docs/SETUP-REMOTE.md) | Step-by-step guide for iOS/iPadOS/Web |
38
+ | [Configuration Guide](docs/CONFIGURATION.md) | Detailed configuration options |
39
+ | [Architecture](docs/ARCHITECTURE.md) | System design and components |
40
+ | [Troubleshooting](docs/TROUBLESHOOTING.md) | Common issues and solutions |
51
41
 
52
- Configuration is stored at `~/.sage/config.json`.
42
+ ## Features
53
43
 
54
- ## Tools
44
+ ### Task Analysis
55
45
 
56
- ### Setup & Configuration
46
+ Analyze text input (emails, meeting notes, etc.) and get structured task information:
57
47
 
58
- | Tool | Description |
59
- |------|-------------|
60
- | `check_setup_status` | Check if sage has been configured |
61
- | `start_setup_wizard` | Start the interactive setup wizard |
62
- | `answer_wizard_question` | Answer a setup wizard question |
63
- | `save_config` | Save configuration after setup |
64
- | `update_config` | Update sage configuration |
48
+ ```
49
+ User: analyze_tasks with input: "田中さんからの依頼: 明日までに報告書を提出。来週の会議資料も準備してください。"
65
50
 
66
- ### Task Management
51
+ sage:
52
+ Task 1: 報告書を提出
53
+ - Priority: P0 (due tomorrow)
54
+ - Estimated: 50 minutes
55
+ - Stakeholder: 田中さん
67
56
 
68
- | Tool | Description |
69
- |------|-------------|
70
- | `analyze_tasks` | Analyze tasks for priority, time estimation, and stakeholders |
71
- | `set_reminder` | Set a reminder in Apple Reminders or Notion |
72
- | `find_available_slots` | Find available time slots in calendar |
73
- | `sync_to_notion` | Sync a task to Notion database |
57
+ Task 2: 会議資料を準備
58
+ - Priority: P2 (due next week)
59
+ - Estimated: 90 minutes
60
+ ```
74
61
 
75
- ## Example Usage
62
+ ### Smart Reminder Routing
76
63
 
77
- ### Analyze Tasks
64
+ Tasks are automatically routed to the appropriate system:
78
65
 
79
- ```
80
- analyze_tasks with tasks:
81
- - title: "Review PR from Alice"
82
- deadline: "2025-01-02T17:00:00"
83
- - title: "Prepare quarterly report"
84
- description: "Q4 summary for manager"
85
- ```
66
+ | Deadline | Destination | Reason |
67
+ |----------|-------------|--------|
68
+ | 7 days | Apple Reminders | Short-term, actionable |
69
+ | 8+ days | Notion | Long-term planning |
86
70
 
87
- ### Set Reminder
71
+ ### Platform Support
88
72
 
89
- ```
90
- set_reminder with:
91
- - taskTitle: "Submit expense report"
92
- - dueDate: "2025-01-03T12:00:00"
93
- - priority: "P1"
94
- ```
73
+ | クライアント | サーバー | Apple Reminders | Calendar | Notion |
74
+ |--------------|----------|----------------|----------|--------|
75
+ | Claude Desktop/Code | macOS (直接) | AppleScript | AppleScript | MCP |
76
+ | Claude iOS/iPadOS | macOS (Remote MCP) | AppleScript | AppleScript | MCP |
77
+ | Claude Web | macOS (Remote MCP) | AppleScript | AppleScript | MCP |
95
78
 
96
- ### Find Available Slots
79
+ **すべてのケースで macOS が必要です**(AppleScript のため)。
97
80
 
98
- ```
99
- find_available_slots with:
100
- - durationMinutes: 60
101
- - preferDeepWork: true
102
- ```
81
+ ## Tools
103
82
 
104
- ## Platform Support
105
-
106
- | Platform | Apple Reminders | Calendar | Notion |
107
- |----------|----------------|----------|--------|
108
- | macOS | AppleScript | AppleScript | MCP |
109
- | iOS/iPadOS | Native API | Native API | Fallback |
110
- | Windows/Linux | Fallback text | Manual input | MCP |
111
-
112
- ## Configuration
113
-
114
- Example `~/.sage/config.json`:
115
-
116
- ```json
117
- {
118
- "user": {
119
- "name": "Your Name",
120
- "timezone": "Asia/Tokyo"
121
- },
122
- "calendar": {
123
- "workingHours": {
124
- "start": "09:00",
125
- "end": "18:00"
126
- },
127
- "deepWorkDays": ["Tuesday", "Thursday"],
128
- "meetingHeavyDays": ["Monday", "Friday"]
129
- },
130
- "integrations": {
131
- "appleReminders": {
132
- "enabled": true,
133
- "defaultList": "Reminders"
134
- },
135
- "notion": {
136
- "enabled": true,
137
- "databaseId": "your-database-id",
138
- "threshold": 8
139
- }
140
- }
141
- }
142
- ```
83
+ ### Setup & Configuration
84
+
85
+ | Tool | Description |
86
+ |------|-------------|
87
+ | `check_setup_status` | Check if sage is configured |
88
+ | `start_setup_wizard` | Start interactive setup |
89
+ | `save_config` | Save configuration |
90
+ | `update_config` | Update configuration |
91
+
92
+ ### Task Management
93
+
94
+ | Tool | Description |
95
+ |------|-------------|
96
+ | `analyze_tasks` | Analyze tasks for priority, time, stakeholders |
97
+ | `set_reminder` | Create a reminder |
98
+ | `list_todos` | List all tasks from all sources |
99
+ | `update_task_status` | Update task status |
100
+ | `find_available_slots` | Find free time in calendar |
101
+ | `sync_to_notion` | Sync task to Notion |
143
102
 
144
103
  ## Requirements
145
104
 
105
+ - **macOS** (必須 - AppleScript で Apple Reminders/Calendar と統合)
146
106
  - Node.js >= 18.0.0
147
- - macOS (for Apple Reminders/Calendar integration)
148
- - Notion MCP server (for Notion integration)
107
+ - Notion MCP server (任意、Notion 統合用)
108
+
109
+ **注意**: sage は macOS 専用です。Remote MCP Server を使用する場合も、サーバーは macOS 上で実行する必要があります。
149
110
 
150
111
  ## Development
151
112
 
152
113
  ```bash
114
+ # Clone repository
115
+ git clone https://github.com/shin1ohno/sage.git
116
+ cd sage
117
+
153
118
  # Install dependencies
154
119
  npm install
155
120
 
@@ -165,4 +130,4 @@ npm run build
165
130
 
166
131
  ## License
167
132
 
168
- MIT
133
+ MIT - see [LICENSE](LICENSE) for details.
@@ -2,12 +2,16 @@
2
2
  * Config Storage Factory
3
3
  * Creates appropriate storage based on platform
4
4
  * Requirements: 1.1, 1.5, 10.1
5
+ *
6
+ * 実装:
7
+ * - desktop_mcp: ファイルベースストレージ
8
+ * - remote_mcp: クラウドストレージ(セッションフォールバック)
5
9
  */
6
10
  import type { ConfigStorage, PlatformType } from '../../platform/types.js';
7
11
  /**
8
12
  * Storage type enumeration
9
13
  */
10
- export type StorageType = 'file' | 'session' | 'icloud';
14
+ export type StorageType = 'file' | 'session' | 'cloud';
11
15
  /**
12
16
  * Factory for creating platform-specific config storage
13
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"storage-factory.d.ts","sourceRoot":"","sources":["../../../src/config/storage/storage-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI3E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa;IAmBxD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,GAAG,WAAW;IAgB9D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAgBxD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;CAcjE"}
1
+ {"version":3,"file":"storage-factory.d.ts","sourceRoot":"","sources":["../../../src/config/storage/storage-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI3E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa;IAcxD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,GAAG,WAAW;IAa9D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAcxD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;CAYjE"}
@@ -2,6 +2,10 @@
2
2
  * Config Storage Factory
3
3
  * Creates appropriate storage based on platform
4
4
  * Requirements: 1.1, 1.5, 10.1
5
+ *
6
+ * 実装:
7
+ * - desktop_mcp: ファイルベースストレージ
8
+ * - remote_mcp: クラウドストレージ(セッションフォールバック)
5
9
  */
6
10
  import { FileConfigStorage } from './file-storage.js';
7
11
  import { SessionConfigStorage } from './session-storage.js';
@@ -16,12 +20,8 @@ export class ConfigStorageFactory {
16
20
  switch (platformType) {
17
21
  case 'desktop_mcp':
18
22
  return new FileConfigStorage();
19
- case 'ios_skills':
20
- case 'ipados_skills':
21
- // For now, use session storage
22
- // In future, could implement iCloud sync
23
- return new SessionConfigStorage();
24
- case 'web_skills':
23
+ case 'remote_mcp':
24
+ // Remote MCP uses cloud storage (session fallback for now)
25
25
  return new SessionConfigStorage();
26
26
  default:
27
27
  return new SessionConfigStorage();
@@ -34,11 +34,8 @@ export class ConfigStorageFactory {
34
34
  switch (platformType) {
35
35
  case 'desktop_mcp':
36
36
  return 'file';
37
- case 'ios_skills':
38
- case 'ipados_skills':
39
- // iCloud sync planned for future
40
- return 'session';
41
- case 'web_skills':
37
+ case 'remote_mcp':
38
+ return 'cloud';
42
39
  default:
43
40
  return 'session';
44
41
  }
@@ -50,11 +47,9 @@ export class ConfigStorageFactory {
50
47
  switch (platformType) {
51
48
  case 'desktop_mcp':
52
49
  return true;
53
- case 'ios_skills':
54
- case 'ipados_skills':
55
- // iCloud sync makes it persistent
50
+ case 'remote_mcp':
51
+ // Cloud storage is persistent
56
52
  return true;
57
- case 'web_skills':
58
53
  default:
59
54
  return false;
60
55
  }
@@ -66,10 +61,8 @@ export class ConfigStorageFactory {
66
61
  switch (platformType) {
67
62
  case 'desktop_mcp':
68
63
  return '設定は ~/.sage/config.json に永続保存されます';
69
- case 'ios_skills':
70
- case 'ipados_skills':
71
- return '設定はセッションに保存され、将来的にはiCloud同期が可能になります';
72
- case 'web_skills':
64
+ case 'remote_mcp':
65
+ return '設定はクラウドストレージに同期されます';
73
66
  default:
74
67
  return '設定はセッション終了時に消去されます。次回使用時に再設定が必要です';
75
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-factory.js","sourceRoot":"","sources":["../../../src/config/storage/storage-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAO5D;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,YAA0B;QACtC,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;YAEjC,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe;gBAClB,+BAA+B;gBAC/B,yCAAyC;gBACzC,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAEpC,KAAK,YAAY;gBACf,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAEpC;gBACE,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAA0B;QAC9C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC;YAEhB,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe;gBAClB,iCAAiC;gBACjC,OAAO,SAAS,CAAC;YAEnB,KAAK,YAAY,CAAC;YAClB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,YAA0B;QAC5C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC;YAEd,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe;gBAClB,kCAAkC;gBAClC,OAAO,IAAI,CAAC;YAEd,KAAK,YAAY,CAAC;YAClB;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAA0B;QACrD,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,mCAAmC,CAAC;YAE7C,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe;gBAClB,OAAO,qCAAqC,CAAC;YAE/C,KAAK,YAAY,CAAC;YAClB;gBACE,OAAO,mCAAmC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"storage-factory.js","sourceRoot":"","sources":["../../../src/config/storage/storage-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAO5D;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,YAA0B;QACtC,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;YAEjC,KAAK,YAAY;gBACf,2DAA2D;gBAC3D,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAEpC;gBACE,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAA0B;QAC9C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC;YAEhB,KAAK,YAAY;gBACf,OAAO,OAAO,CAAC;YAEjB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,YAA0B;QAC5C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC;YAEd,KAAK,YAAY;gBACf,8BAA8B;gBAC9B,OAAO,IAAI,CAAC;YAEd;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAA0B;QACrD,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,mCAAmC,CAAC;YAE7C,KAAK,YAAY;gBACf,OAAO,qBAAqB,CAAC;YAE/B;gBACE,OAAO,mCAAmC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
@@ -1,24 +1,29 @@
1
1
  /**
2
2
  * SageCore
3
- * Platform-independent core logic for sage task management
3
+ * Core logic for sage task management
4
4
  * Requirements: 2.1, 2.2, 11.1, 7.3, 7.4
5
+ *
6
+ * sage は macOS 専用で、以下の方式で動作します:
7
+ * - desktop_mcp: Claude Desktop/Code から直接実行(AppleScript統合)
8
+ * - remote_mcp: macOS 上の Remote MCP Server 経由でアクセス(iOS/Web クライアント用)
9
+ *
10
+ * 注意: Remote MCP Server も macOS 上で実行する必要があります(AppleScript のため)
5
11
  */
6
12
  import type { PlatformAdapter, PlatformInfo, FeatureSet } from '../platform/types.js';
7
13
  import type { Task, UserConfig } from '../types/index.js';
8
14
  import type { AnalysisResult } from '../tools/analyze-tasks.js';
9
15
  /**
10
- * Integration recommendation for a specific platform
16
+ * Integration recommendation for the platform
11
17
  */
12
18
  export interface IntegrationRecommendation {
13
19
  integration: 'reminders' | 'calendar' | 'notion';
14
20
  available: boolean;
15
- method: 'native' | 'applescript' | 'mcp' | 'connector' | 'manual_copy';
16
- fallback?: string;
21
+ method: 'applescript' | 'mcp' | 'remote';
17
22
  description: string;
18
23
  }
19
24
  /**
20
25
  * SageCore - The main entry point for sage functionality
21
- * Works with any platform adapter to provide consistent task management
26
+ * Works with platform adapters to provide task management
22
27
  */
23
28
  export declare class SageCore {
24
29
  private adapter;
@@ -1 +1 @@
1
- {"version":3,"file":"sage-core.d.ts","sourceRoot":"","sources":["../../src/core/sage-core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,aAAa,CAAC;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,oBAAoB,IAAI,UAAU;IAIlC;;OAEG;IACH,SAAS,IAAI,UAAU;IAKvB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAK1D;;;OAGG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK7D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAI5C;;;OAGG;IACH,6BAA6B,IAAI,yBAAyB,EAAE;IAqF5D;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIlD;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
1
+ {"version":3,"file":"sage-core.d.ts","sourceRoot":"","sources":["../../src/core/sage-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,oBAAoB,IAAI,UAAU;IAIlC;;OAEG;IACH,SAAS,IAAI,UAAU;IAKvB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAK1D;;;OAGG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK7D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAI5C;;;OAGG;IACH,6BAA6B,IAAI,yBAAyB,EAAE;IA2D5D;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIlD;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
@@ -1,13 +1,19 @@
1
1
  /**
2
2
  * SageCore
3
- * Platform-independent core logic for sage task management
3
+ * Core logic for sage task management
4
4
  * Requirements: 2.1, 2.2, 11.1, 7.3, 7.4
5
+ *
6
+ * sage は macOS 専用で、以下の方式で動作します:
7
+ * - desktop_mcp: Claude Desktop/Code から直接実行(AppleScript統合)
8
+ * - remote_mcp: macOS 上の Remote MCP Server 経由でアクセス(iOS/Web クライアント用)
9
+ *
10
+ * 注意: Remote MCP Server も macOS 上で実行する必要があります(AppleScript のため)
5
11
  */
6
12
  import { TaskAnalyzer } from '../tools/analyze-tasks.js';
7
13
  import { DEFAULT_CONFIG } from '../types/config.js';
8
14
  /**
9
15
  * SageCore - The main entry point for sage functionality
10
- * Works with any platform adapter to provide consistent task management
16
+ * Works with platform adapters to provide task management
11
17
  */
12
18
  export class SageCore {
13
19
  adapter;
@@ -94,80 +100,51 @@ export class SageCore {
94
100
  if (platformType === 'desktop_mcp') {
95
101
  recommendations.push({
96
102
  integration: 'reminders',
97
- available: true,
103
+ available: features.appleReminders,
98
104
  method: 'applescript',
99
105
  description: 'AppleScript経由でApple Remindersに連携',
100
106
  });
101
107
  }
102
- else if (platformType === 'ios_skills' || platformType === 'ipados_skills') {
108
+ else if (platformType === 'remote_mcp') {
103
109
  recommendations.push({
104
110
  integration: 'reminders',
105
- available: true,
106
- method: 'native',
107
- description: 'ネイティブAPIでApple Remindersに直接連携',
108
- });
109
- }
110
- else {
111
- recommendations.push({
112
- integration: 'reminders',
113
- available: false,
114
- method: 'manual_copy',
115
- fallback: 'manual_copy',
116
- description: 'Apple Remindersへは手動コピーで追加してください',
111
+ available: features.appleReminders,
112
+ method: 'remote',
113
+ description: 'Remote MCP Server経由でApple Remindersに連携',
117
114
  });
118
115
  }
119
116
  // Calendar integration
120
117
  if (platformType === 'desktop_mcp') {
121
118
  recommendations.push({
122
119
  integration: 'calendar',
123
- available: true,
120
+ available: features.calendarIntegration,
124
121
  method: 'applescript',
125
122
  description: 'AppleScript経由でCalendar.appから予定を取得',
126
123
  });
127
124
  }
128
- else if (platformType === 'ios_skills' || platformType === 'ipados_skills') {
125
+ else if (platformType === 'remote_mcp') {
129
126
  recommendations.push({
130
127
  integration: 'calendar',
131
- available: true,
132
- method: 'native',
133
- description: 'ネイティブAPIでカレンダーイベントを取得',
128
+ available: features.calendarIntegration,
129
+ method: 'remote',
130
+ description: 'Remote MCP Server経由でカレンダーイベントを取得',
134
131
  });
135
132
  }
136
- else {
133
+ // Notion integration
134
+ if (platformType === 'desktop_mcp') {
137
135
  recommendations.push({
138
- integration: 'calendar',
139
- available: false,
140
- method: 'manual_copy',
141
- fallback: 'manual_input',
142
- description: 'カレンダー情報は手動で入力してください',
136
+ integration: 'notion',
137
+ available: features.notionIntegration,
138
+ method: 'mcp',
139
+ description: 'MCP経由でNotionデータベースに連携',
143
140
  });
144
141
  }
145
- // Notion integration
146
- if (features.notionIntegration) {
147
- if (platformType === 'desktop_mcp') {
148
- recommendations.push({
149
- integration: 'notion',
150
- available: true,
151
- method: 'mcp',
152
- description: 'MCP経由でNotionデータベースに連携',
153
- });
154
- }
155
- else if (platformType === 'ios_skills' || platformType === 'ipados_skills') {
156
- recommendations.push({
157
- integration: 'notion',
158
- available: true,
159
- method: 'connector',
160
- description: 'Notion Connector経由でNotionデータベースに連携',
161
- });
162
- }
163
- }
164
- else {
142
+ else if (platformType === 'remote_mcp') {
165
143
  recommendations.push({
166
144
  integration: 'notion',
167
- available: false,
168
- method: 'manual_copy',
169
- fallback: 'manual_copy',
170
- description: 'Notionへは手動コピーで追加してください',
145
+ available: features.notionIntegration,
146
+ method: 'remote',
147
+ description: 'Remote MCP Server経由でNotionデータベースに連携',
171
148
  });
172
149
  }
173
150
  return recommendations;
@@ -1 +1 @@
1
- {"version":3,"file":"sage-core.js","sourceRoot":"","sources":["../../src/core/sage-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sage-core.js","sourceRoot":"","sources":["../../src/core/sage-core.ts"],"names":[],"mappings":"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"}