sidebud 0.1.0 → 0.2.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/main.js +4725 -3310
  3. package/package.json +2 -2
  4. package/skills/widget-packs/SKILL.md +198 -0
  5. package/src/manage/guide/app-arrange.png +0 -0
  6. package/src/manage/guide/app-disk.png +0 -0
  7. package/src/manage/guide/app-open.png +0 -0
  8. package/src/manage/guide/app-thread.png +0 -0
  9. package/src/manage/guide/app-tiles.png +0 -0
  10. package/src/manage/guide/draft.png +0 -0
  11. package/src/manage/guide/layouts.png +0 -0
  12. package/src/manage/guide/library.png +0 -0
  13. package/src/manage/guide/pack-page.png +0 -0
  14. package/src/manage/guide/permissions.png +0 -0
  15. package/src/manage/guide/phone-home.png +0 -0
  16. package/src/manage/guide/phone-open.png +0 -0
  17. package/src/manage/guide/widget-voice.png +0 -0
  18. package/src/manage/guide.js +155 -0
  19. package/src/manage/guide.md +139 -0
  20. package/src/manage/index.html +10 -0
  21. package/src/manage/manage.css +744 -0
  22. package/src/manage/manage.js +66 -35
  23. package/src/manage/packs.js +340 -0
  24. package/src/manage/setup.js +12 -13
  25. package/packs/BRAND_ASSETS.md +0 -8
  26. package/packs/calendar/logo.png +0 -0
  27. package/packs/calendar/pack.json +0 -127
  28. package/packs/discord/pack.json +0 -107
  29. package/packs/filesystem/pack.json +0 -84
  30. package/packs/github/pack.json +0 -127
  31. package/packs/gmail/logo.png +0 -0
  32. package/packs/gmail/pack.json +0 -274
  33. package/packs/obsidian/pack.json +0 -88
  34. package/packs/t3-agents/logo.png +0 -0
  35. package/packs/t3-agents/pack.json +0 -492
  36. package/packs/telegram/pack.json +0 -137
  37. package/packs/trello/pack.json +0 -102
  38. package/packs/whatsapp/pack.json +0 -118
@@ -1,107 +0,0 @@
1
- {
2
- "$schema": "../../../../docs/schemas/pack-v2.schema.json",
3
- "schemaVersion": 2,
4
- "id": "dev.remotevoiceagent.discord",
5
- "name": "Discord",
6
- "description": "A Discord channel through a bot (barryyip0625/mcp-discord). Bots see only servers they are in and DMs sent to the bot, never your personal DMs. Read-only here.",
7
- "version": "1.1.0",
8
- "author": {
9
- "name": "Sidebud"
10
- },
11
- "license": "MIT",
12
- "logo": {
13
- "kind": "icon",
14
- "name": "chat"
15
- },
16
- "tile": {
17
- "size": "small"
18
- },
19
- "mcp": {
20
- "transport": "stdio",
21
- "command": "npx",
22
- "args": [
23
- "-y",
24
- "mcp-discord@1.5.1"
25
- ],
26
- "env": {
27
- "DISCORD_TOKEN": "{{secret.DISCORD_TOKEN}}"
28
- }
29
- },
30
- "secrets": [
31
- {
32
- "name": "DISCORD_TOKEN",
33
- "description": "A bot token from the Discord Developer Portal (never a user token: that breaks Discord's terms)"
34
- }
35
- ],
36
- "permissions": {
37
- "tools": [
38
- {
39
- "name": "discord_read_messages",
40
- "access": "read",
41
- "description": "Messages in a channel",
42
- "argumentSettings": {
43
- "channelId": "channelId"
44
- }
45
- }
46
- ]
47
- },
48
- "settings": [
49
- {
50
- "id": "channelId",
51
- "label": "Channel id",
52
- "type": "text",
53
- "default": "",
54
- "description": "The channel (or bot DM channel) to watch; enable Developer Mode in Discord and copy the channel id.",
55
- "required": true
56
- }
57
- ],
58
- "data": [
59
- {
60
- "id": "recent",
61
- "tool": "discord_read_messages",
62
- "arguments": {
63
- "channelId": "{{setting.channelId}}",
64
- "limit": 20
65
- },
66
- "extract": "text-json",
67
- "refreshSeconds": 30
68
- }
69
- ],
70
- "glance": {
71
- "line": "{{recent/messages/0/author/username|default:No messages}}: {{recent/messages/0/content|truncate:50}}"
72
- },
73
- "blocks": [
74
- {
75
- "type": "list",
76
- "items": "{{recent/messages}}",
77
- "item": {
78
- "title": "{{item/author/username}}",
79
- "subtitle": "{{item/content|truncate:120}}"
80
- },
81
- "limit": 8,
82
- "emptyText": "No messages"
83
- }
84
- ],
85
- "controls": [
86
- {
87
- "id": "summarize",
88
- "kind": "prompt",
89
- "label": "Summarize the channel",
90
- "prompt": "Summarize the recent messages in my Discord channel.",
91
- "default": true
92
- }
93
- ],
94
- "alerts": [
95
- {
96
- "id": "incoming",
97
- "items": "{{recent/messages}}",
98
- "key": "{{item/id}}",
99
- "sender": [
100
- "{{item/author/username}}",
101
- "{{item/author/id}}"
102
- ],
103
- "text": "{{item/content}}",
104
- "fromMe": "{{item/author/bot}}"
105
- }
106
- ]
107
- }
@@ -1,84 +0,0 @@
1
- {
2
- "$schema": "../../../../docs/schemas/pack-v2.schema.json",
3
- "schemaVersion": 2,
4
- "id": "app.sidebud.filesystem",
5
- "name": "Filesystem",
6
- "description": "Read and search one explicitly selected folder on this computer. This baseline exposes no write tools.",
7
- "version": "1.0.0",
8
- "author": {
9
- "name": "Sidebud"
10
- },
11
- "license": "MIT",
12
- "logo": {
13
- "kind": "emoji",
14
- "value": "\ud83d\udcc1"
15
- },
16
- "controls": [
17
- {
18
- "id": "summarize",
19
- "kind": "prompt",
20
- "label": "Summarize",
21
- "prompt": "Summarize the information available through my Filesystem integration.",
22
- "default": true
23
- }
24
- ],
25
- "mcp": {
26
- "transport": "stdio",
27
- "command": "npx",
28
- "args": [
29
- "-y",
30
- "@modelcontextprotocol/server-filesystem@2026.8.31",
31
- "{{setting.folder}}"
32
- ]
33
- },
34
- "settings": [
35
- {
36
- "id": "folder",
37
- "label": "Allowed folder",
38
- "type": "text",
39
- "required": true,
40
- "format": "directory",
41
- "description": "An existing absolute folder. Select the smallest folder needed; do not select your home or disk root."
42
- }
43
- ],
44
- "permissions": {
45
- "tools": [
46
- {
47
- "name": "read_text_file",
48
- "access": "read"
49
- },
50
- {
51
- "name": "list_directory",
52
- "access": "read"
53
- },
54
- {
55
- "name": "search_files",
56
- "access": "read"
57
- },
58
- {
59
- "name": "get_file_info",
60
- "access": "read"
61
- }
62
- ]
63
- },
64
- "data": [
65
- {
66
- "id": "files",
67
- "tool": "list_directory",
68
- "arguments": {
69
- "path": "{{setting.folder}}"
70
- },
71
- "extract": "text",
72
- "refreshSeconds": 300
73
- }
74
- ],
75
- "glance": {
76
- "line": "{{setting.folder}}"
77
- },
78
- "blocks": [
79
- {
80
- "type": "text",
81
- "text": "{{files|truncate:550}}"
82
- }
83
- ]
84
- }
@@ -1,127 +0,0 @@
1
- {
2
- "$schema": "../../../../docs/schemas/pack-v2.schema.json",
3
- "schemaVersion": 2,
4
- "id": "app.sidebud.github",
5
- "name": "GitHub",
6
- "description": "Read issues, pull requests, and files in one selected repository through GitHub\u2019s official hosted MCP server.",
7
- "version": "1.0.0",
8
- "author": {
9
- "name": "Sidebud"
10
- },
11
- "license": "MIT",
12
- "logo": {
13
- "kind": "emoji",
14
- "value": "\ud83d\udc19"
15
- },
16
- "controls": [
17
- {
18
- "id": "summarize",
19
- "kind": "prompt",
20
- "label": "Summarize",
21
- "prompt": "Summarize the information available through my GitHub integration.",
22
- "default": true
23
- }
24
- ],
25
- "mcp": {
26
- "transport": "http",
27
- "url": "https://api.githubcopilot.com/mcp/readonly",
28
- "headers": {
29
- "Authorization": "Bearer {{secret.GITHUB_TOKEN}}"
30
- }
31
- },
32
- "secrets": [
33
- {
34
- "name": "GITHUB_TOKEN",
35
- "description": "Fine-grained token restricted to the selected repository, with read access to contents, issues, and pull requests."
36
- }
37
- ],
38
- "settings": [
39
- {
40
- "id": "owner",
41
- "label": "Repository owner",
42
- "type": "text",
43
- "required": true
44
- },
45
- {
46
- "id": "repo",
47
- "label": "Repository name",
48
- "type": "text",
49
- "required": true
50
- }
51
- ],
52
- "permissions": {
53
- "network": [
54
- "api.githubcopilot.com"
55
- ],
56
- "tools": [
57
- {
58
- "name": "list_issues",
59
- "access": "read",
60
- "argumentSettings": {
61
- "owner": "owner",
62
- "repo": "repo"
63
- }
64
- },
65
- {
66
- "name": "list_pull_requests",
67
- "access": "read",
68
- "argumentSettings": {
69
- "owner": "owner",
70
- "repo": "repo"
71
- }
72
- },
73
- {
74
- "name": "issue_read",
75
- "access": "read",
76
- "argumentSettings": {
77
- "owner": "owner",
78
- "repo": "repo"
79
- }
80
- },
81
- {
82
- "name": "pull_request_read",
83
- "access": "read",
84
- "argumentSettings": {
85
- "owner": "owner",
86
- "repo": "repo"
87
- }
88
- },
89
- {
90
- "name": "get_file_contents",
91
- "access": "read",
92
- "argumentSettings": {
93
- "owner": "owner",
94
- "repo": "repo"
95
- }
96
- }
97
- ]
98
- },
99
- "data": [
100
- {
101
- "id": "issues",
102
- "tool": "list_issues",
103
- "arguments": {
104
- "owner": "{{setting.owner}}",
105
- "repo": "{{setting.repo}}",
106
- "state": "OPEN",
107
- "perPage": 8
108
- },
109
- "refreshSeconds": 300
110
- }
111
- ],
112
- "glance": {
113
- "line": "{{setting.owner}}/{{setting.repo}}"
114
- },
115
- "blocks": [
116
- {
117
- "type": "list",
118
- "items": "{{issues/issues}}",
119
- "item": {
120
- "title": "{{item/title}}",
121
- "subtitle": "#{{item/number}}"
122
- },
123
- "limit": 8,
124
- "emptyText": "No open issues"
125
- }
126
- ]
127
- }
Binary file
@@ -1,274 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "id": "dev.remotevoiceagent.gmail",
4
- "name": "Gmail",
5
- "description": "Unread and VIP mail, with inbox clean-up controls. Google API access and tokens stay on your companion computer.",
6
- "version": "2.4.1",
7
- "author": {
8
- "name": "Sidebud"
9
- },
10
- "license": "MIT",
11
- "logo": {
12
- "kind": "file",
13
- "path": "logo.png"
14
- },
15
- "tile": {
16
- "size": "small"
17
- },
18
- "refreshSeconds": 60,
19
- "mcp": {
20
- "transport": "builtin",
21
- "service": "gmail"
22
- },
23
- "auth": {
24
- "type": "oauth2",
25
- "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth",
26
- "tokenUrl": "https://oauth2.googleapis.com/token",
27
- "scopes": [
28
- "https://www.googleapis.com/auth/gmail.modify"
29
- ],
30
- "clientIdSecret": "GOOGLE_OAUTH_CLIENT_ID",
31
- "clientSecretSecret": "GOOGLE_OAUTH_CLIENT_SECRET",
32
- "authorizationParams": {
33
- "access_type": "offline",
34
- "prompt": "consent"
35
- }
36
- },
37
- "secrets": [
38
- {
39
- "name": "GOOGLE_OAUTH_CLIENT_ID",
40
- "description": "Desktop OAuth client ID from your Google Cloud project with Gmail API enabled"
41
- },
42
- {
43
- "name": "GOOGLE_OAUTH_CLIENT_SECRET",
44
- "description": "That OAuth client's secret"
45
- }
46
- ],
47
- "permissions": {
48
- "tools": [
49
- {
50
- "name": "search_threads",
51
- "access": "read",
52
- "description": "Search threads with Gmail query syntax"
53
- },
54
- {
55
- "name": "get_thread",
56
- "access": "read",
57
- "description": "Read one thread"
58
- },
59
- {
60
- "name": "list_labels",
61
- "access": "read",
62
- "description": "List labels"
63
- },
64
- {
65
- "name": "unlabel_thread",
66
- "access": "write",
67
- "description": "Remove labels from a thread (archive = remove INBOX, mark read = remove UNREAD)"
68
- }
69
- ],
70
- "network": [
71
- "gmail.googleapis.com",
72
- "accounts.google.com",
73
- "oauth2.googleapis.com"
74
- ]
75
- },
76
- "settings": [
77
- {
78
- "id": "scope",
79
- "label": "Mailbox",
80
- "type": "select",
81
- "default": "in:inbox",
82
- "options": [
83
- {
84
- "id": "in:inbox",
85
- "label": "Inbox"
86
- },
87
- {
88
- "id": "label:important",
89
- "label": "Important"
90
- },
91
- {
92
- "id": "in:anywhere",
93
- "label": "All mail"
94
- }
95
- ]
96
- },
97
- {
98
- "id": "vipQuery",
99
- "label": "VIP senders",
100
- "type": "text",
101
- "default": "is:starred",
102
- "description": "A Gmail search for VIP mail, e.g. from:(boss@example.com OR partner@example.com)"
103
- }
104
- ],
105
- "data": [
106
- {
107
- "id": "unread",
108
- "tool": "search_threads",
109
- "arguments": {
110
- "query": "is:unread {{setting.scope}}",
111
- "pageSize": 50,
112
- "view": "THREAD_VIEW_IDS"
113
- },
114
- "refreshSeconds": 60
115
- },
116
- {
117
- "id": "recent",
118
- "tool": "search_threads",
119
- "arguments": {
120
- "query": "is:unread {{setting.scope}}",
121
- "pageSize": 8,
122
- "view": "THREAD_VIEW_MINIMAL"
123
- },
124
- "refreshSeconds": 60
125
- },
126
- {
127
- "id": "vip",
128
- "tool": "search_threads",
129
- "arguments": {
130
- "query": "is:unread {{setting.vipQuery}}",
131
- "pageSize": 20,
132
- "view": "THREAD_VIEW_MINIMAL"
133
- },
134
- "refreshSeconds": 60
135
- },
136
- {
137
- "id": "newsletters",
138
- "tool": "search_threads",
139
- "arguments": {
140
- "query": "is:unread category:promotions in:inbox",
141
- "pageSize": 50,
142
- "view": "THREAD_VIEW_IDS"
143
- },
144
- "refreshSeconds": 60
145
- }
146
- ],
147
- "glance": {
148
- "stats": [
149
- {
150
- "label": "Unread",
151
- "value": "{{unread/threads|count}}",
152
- "tone": "warning"
153
- },
154
- {
155
- "label": "VIP",
156
- "value": "{{vip/threads|count}}",
157
- "tone": "info"
158
- }
159
- ]
160
- },
161
- "blocks": [
162
- {
163
- "type": "stats",
164
- "items": [
165
- {
166
- "label": "Unread",
167
- "value": "{{unread/threads|count}}",
168
- "tone": "warning"
169
- },
170
- {
171
- "label": "VIP unread",
172
- "value": "{{vip/threads|count}}",
173
- "tone": "info"
174
- },
175
- {
176
- "label": "Newsletters",
177
- "value": "{{newsletters/threads|count}}"
178
- }
179
- ]
180
- },
181
- {
182
- "type": "list",
183
- "items": "{{vip/threads}}",
184
- "item": {
185
- "title": "{{item/messages/0/subject}}",
186
- "subtitle": "{{item/messages/0/sender}}",
187
- "status": "VIP",
188
- "statusTone": "info"
189
- },
190
- "limit": 5,
191
- "emptyText": "No unread VIP mail."
192
- },
193
- {
194
- "type": "list",
195
- "items": "{{recent/threads}}",
196
- "item": {
197
- "title": "{{item/messages/0/subject}}",
198
- "subtitle": "{{item/messages/0/sender}}"
199
- },
200
- "limit": 8,
201
- "emptyText": "Inbox zero."
202
- }
203
- ],
204
- "controls": [
205
- {
206
- "id": "clean",
207
- "kind": "prompt",
208
- "label": "Clean up my inbox",
209
- "prompt": "Clean up my inbox: archive the newsletters and tell me what needs a reply.",
210
- "default": true
211
- },
212
- {
213
- "id": "summarize",
214
- "kind": "prompt",
215
- "label": "Summarize unread",
216
- "prompt": "Summarize my unread email.",
217
- "default": true
218
- },
219
- {
220
- "id": "vip",
221
- "kind": "prompt",
222
- "label": "Unread from VIPs",
223
- "prompt": "Read me my unread emails from VIPs.",
224
- "default": false
225
- },
226
- {
227
- "id": "archive-newsletters",
228
- "kind": "tool",
229
- "label": "Archive newsletters",
230
- "tool": "unlabel_thread",
231
- "forEach": "{{newsletters/threads}}",
232
- "arguments": {
233
- "threadId": "{{item/id}}",
234
- "labelIds": [
235
- "INBOX"
236
- ]
237
- },
238
- "effect": "consequential",
239
- "confirm": "Archive {{newsletters/threads|count}} unread newsletter threads?",
240
- "default": false
241
- },
242
- {
243
- "id": "mark-all-read",
244
- "kind": "tool",
245
- "label": "Mark all read",
246
- "tool": "unlabel_thread",
247
- "forEach": "{{unread/threads}}",
248
- "arguments": {
249
- "threadId": "{{item/id}}",
250
- "labelIds": [
251
- "UNREAD"
252
- ]
253
- },
254
- "effect": "consequential",
255
- "confirm": "Mark {{unread/threads|count}} threads as read?",
256
- "default": false
257
- }
258
- ],
259
- "notify": [
260
- {
261
- "id": "vip",
262
- "category": "mail",
263
- "items": "{{vip/threads}}",
264
- "key": "{{item/id}}",
265
- "rules": [
266
- {
267
- "new": true,
268
- "priority": "update",
269
- "text": "New mail from {{item/messages/0/sender}}: {{item/messages/0/subject}}"
270
- }
271
- ]
272
- }
273
- ]
274
- }
@@ -1,88 +0,0 @@
1
- {
2
- "$schema": "../../../../docs/schemas/pack-v2.schema.json",
3
- "schemaVersion": 2,
4
- "id": "app.sidebud.obsidian",
5
- "name": "Obsidian",
6
- "description": "Read and search your open Obsidian vault through MCP Connector by istefox. Obsidian and its plugin must be running.",
7
- "version": "1.0.1",
8
- "author": {
9
- "name": "Sidebud"
10
- },
11
- "license": "MIT",
12
- "logo": {
13
- "kind": "emoji",
14
- "value": "📓"
15
- },
16
- "controls": [
17
- {
18
- "id": "summarize",
19
- "kind": "prompt",
20
- "label": "Summarize",
21
- "prompt": "Summarize the information available through my Obsidian integration.",
22
- "default": true
23
- }
24
- ],
25
- "mcp": {
26
- "transport": "http",
27
- "url": "{{setting.endpoint}}",
28
- "headers": {
29
- "Authorization": "Bearer {{secret.OBSIDIAN_TOKEN}}"
30
- }
31
- },
32
- "secrets": [
33
- {
34
- "name": "OBSIDIAN_TOKEN",
35
- "description": "A dedicated Sidebud token from MCP Connector → Access control. Allow only the declared read tools."
36
- }
37
- ],
38
- "settings": [
39
- {
40
- "id": "endpoint",
41
- "label": "MCP endpoint",
42
- "type": "text",
43
- "required": true,
44
- "format": "http-url",
45
- "description": "Copy the local HTTP endpoint from MCP Connector settings. No API key in this field."
46
- }
47
- ],
48
- "permissions": {
49
- "tools": [
50
- {
51
- "name": "get_recent_files",
52
- "access": "read"
53
- },
54
- {
55
- "name": "get_vault_file",
56
- "access": "read"
57
- },
58
- {
59
- "name": "search_vault_simple",
60
- "access": "read"
61
- }
62
- ]
63
- },
64
- "data": [
65
- {
66
- "id": "recent",
67
- "tool": "get_recent_files",
68
- "arguments": {
69
- "limit": 8
70
- },
71
- "refreshSeconds": 120
72
- }
73
- ],
74
- "glance": {
75
- "line": "{{recent/totalFiles|default:0}} notes"
76
- },
77
- "blocks": [
78
- {
79
- "type": "list",
80
- "items": "{{recent/files}}",
81
- "item": {
82
- "title": "{{item/path}}"
83
- },
84
- "limit": 8,
85
- "emptyText": "No recent notes"
86
- }
87
- ]
88
- }
Binary file