sidebud 0.1.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,492 @@
1
+ {
2
+ "$schema": "../../../../docs/schemas/pack-v2.schema.json",
3
+ "schemaVersion": 2,
4
+ "id": "app.sidebud.t3-agents",
5
+ "name": "T3 Agents",
6
+ "description": "Your T3 Code agents through the T3 MCP Gateway on this computer: see threads on the phone, and let the execution agent start, message, review, and control them. T3 Agents must be installed with its MCP Gateway enabled.",
7
+ "version": "1.3.1",
8
+ "author": {
9
+ "name": "Sidebud"
10
+ },
11
+ "license": "MIT",
12
+ "logo": {
13
+ "kind": "file",
14
+ "path": "logo.png"
15
+ },
16
+ "tile": {
17
+ "size": "medium"
18
+ },
19
+ "controls": [
20
+ {
21
+ "id": "status",
22
+ "kind": "prompt",
23
+ "label": "What's running",
24
+ "prompt": "Summarize what my T3 agents are working on and anything that needs me.",
25
+ "default": true
26
+ },
27
+ {
28
+ "id": "attention",
29
+ "kind": "prompt",
30
+ "label": "Needs me",
31
+ "prompt": "Which T3 threads are waiting on an approval or my input? Walk me through each one."
32
+ }
33
+ ],
34
+ "mcp": {
35
+ "transport": "stdio",
36
+ "command": "/Applications/T3 Agents.app/Contents/MacOS/T3 Agents",
37
+ "args": [
38
+ "/Applications/T3 Agents.app/Contents/Resources/t3-mcp-gateway.mjs"
39
+ ],
40
+ "env": {
41
+ "ELECTRON_RUN_AS_NODE": "1",
42
+ "T3CODE_HOME": "{{setting.t3Home}}",
43
+ "T3_MCP_BRIDGE_PORT": "{{setting.bridgePort}}",
44
+ "T3_MCP_BRIDGE_TOKEN": "{{secret.T3_MCP_BRIDGE_TOKEN}}"
45
+ }
46
+ },
47
+ "secrets": [
48
+ {
49
+ "name": "T3_MCP_BRIDGE_TOKEN",
50
+ "description": "The MCP Gateway bridge token from T3 Settings → MCP Gateway (also saved as T3_MCP_BRIDGE_TOKEN in ~/.config/t3code/mcp-gateway.env)."
51
+ }
52
+ ],
53
+ "settings": [
54
+ {
55
+ "id": "environmentId",
56
+ "label": "Environment ID",
57
+ "type": "text",
58
+ "required": true,
59
+ "description": "The T3 environment the phone widget shows (t3_list_environments lists them). The execution agent can reach every environment the gateway grants."
60
+ },
61
+ {
62
+ "id": "t3Home",
63
+ "label": "T3 data folder",
64
+ "type": "text",
65
+ "required": true,
66
+ "format": "directory",
67
+ "description": "The folder T3 Agents keeps its data in, usually ~/.t3 (absolute path). The gateway must use the same state as the running T3 app."
68
+ },
69
+ {
70
+ "id": "bridgePort",
71
+ "label": "Bridge port",
72
+ "type": "text",
73
+ "default": "47631",
74
+ "description": "T3 Settings → MCP Gateway → bridge port. Change only if you changed it in T3."
75
+ }
76
+ ],
77
+ "permissions": {
78
+ "tools": [
79
+ {
80
+ "name": "t3_get_agents_view",
81
+ "access": "read"
82
+ },
83
+ {
84
+ "name": "t3_get_approval_plan",
85
+ "access": "read"
86
+ },
87
+ {
88
+ "name": "t3_get_artifact",
89
+ "access": "read"
90
+ },
91
+ {
92
+ "name": "t3_get_diff",
93
+ "access": "read"
94
+ },
95
+ {
96
+ "name": "t3_get_environment_health",
97
+ "access": "read"
98
+ },
99
+ {
100
+ "name": "t3_get_environment_status",
101
+ "access": "read"
102
+ },
103
+ {
104
+ "name": "t3_get_gateway_health",
105
+ "access": "read"
106
+ },
107
+ {
108
+ "name": "t3_get_messages",
109
+ "access": "read"
110
+ },
111
+ {
112
+ "name": "t3_get_operation_history",
113
+ "access": "read"
114
+ },
115
+ {
116
+ "name": "t3_get_pr",
117
+ "access": "read"
118
+ },
119
+ {
120
+ "name": "t3_get_pr_checks",
121
+ "access": "read"
122
+ },
123
+ {
124
+ "name": "t3_get_thread",
125
+ "access": "read"
126
+ },
127
+ {
128
+ "name": "t3_get_thread_history",
129
+ "access": "read"
130
+ },
131
+ {
132
+ "name": "t3_git_status",
133
+ "access": "read"
134
+ },
135
+ {
136
+ "name": "t3_list_agents",
137
+ "access": "read"
138
+ },
139
+ {
140
+ "name": "t3_list_artifacts",
141
+ "access": "read"
142
+ },
143
+ {
144
+ "name": "t3_list_environments",
145
+ "access": "read"
146
+ },
147
+ {
148
+ "name": "t3_list_projects",
149
+ "access": "read"
150
+ },
151
+ {
152
+ "name": "t3_list_review_comments",
153
+ "access": "read"
154
+ },
155
+ {
156
+ "name": "t3_list_skills",
157
+ "access": "read"
158
+ },
159
+ {
160
+ "name": "t3_list_threads",
161
+ "access": "read"
162
+ },
163
+ {
164
+ "name": "t3_summarize_thread",
165
+ "access": "read"
166
+ },
167
+ {
168
+ "name": "t3_wait_for_thread_status",
169
+ "access": "read"
170
+ },
171
+ {
172
+ "name": "t3_apply_patch",
173
+ "access": "write"
174
+ },
175
+ {
176
+ "name": "t3_apply_review_fixes",
177
+ "access": "write"
178
+ },
179
+ {
180
+ "name": "t3_approve_actions",
181
+ "access": "write"
182
+ },
183
+ {
184
+ "name": "t3_cancel_thread",
185
+ "access": "write"
186
+ },
187
+ {
188
+ "name": "t3_commit_changes",
189
+ "access": "write"
190
+ },
191
+ {
192
+ "name": "t3_control_thread",
193
+ "access": "write"
194
+ },
195
+ {
196
+ "name": "t3_create_agent",
197
+ "access": "write"
198
+ },
199
+ {
200
+ "name": "t3_create_and_start_thread",
201
+ "access": "write"
202
+ },
203
+ {
204
+ "name": "t3_create_branch",
205
+ "access": "write"
206
+ },
207
+ {
208
+ "name": "t3_create_pr",
209
+ "access": "write"
210
+ },
211
+ {
212
+ "name": "t3_create_skill",
213
+ "access": "write"
214
+ },
215
+ {
216
+ "name": "t3_create_thread",
217
+ "access": "write"
218
+ },
219
+ {
220
+ "name": "t3_delete_agent",
221
+ "access": "write"
222
+ },
223
+ {
224
+ "name": "t3_delete_skill",
225
+ "access": "write"
226
+ },
227
+ {
228
+ "name": "t3_handoff_thread",
229
+ "access": "write"
230
+ },
231
+ {
232
+ "name": "t3_modify_actions",
233
+ "access": "write"
234
+ },
235
+ {
236
+ "name": "t3_open_agents",
237
+ "access": "write"
238
+ },
239
+ {
240
+ "name": "t3_open_thread",
241
+ "access": "write"
242
+ },
243
+ {
244
+ "name": "t3_pause_thread",
245
+ "access": "write"
246
+ },
247
+ {
248
+ "name": "t3_publish_pr",
249
+ "access": "write"
250
+ },
251
+ {
252
+ "name": "t3_reject_actions",
253
+ "access": "write"
254
+ },
255
+ {
256
+ "name": "t3_reply_review_comment",
257
+ "access": "write"
258
+ },
259
+ {
260
+ "name": "t3_respond_to_approval",
261
+ "access": "write"
262
+ },
263
+ {
264
+ "name": "t3_restart_thread",
265
+ "access": "write"
266
+ },
267
+ {
268
+ "name": "t3_resume_thread",
269
+ "access": "write"
270
+ },
271
+ {
272
+ "name": "t3_retry_thread",
273
+ "access": "write"
274
+ },
275
+ {
276
+ "name": "t3_send_message",
277
+ "access": "write"
278
+ },
279
+ {
280
+ "name": "t3_settle_thread",
281
+ "access": "write"
282
+ },
283
+ {
284
+ "name": "t3_stop_thread",
285
+ "access": "write"
286
+ },
287
+ {
288
+ "name": "t3_unsettle_thread",
289
+ "access": "write"
290
+ },
291
+ {
292
+ "name": "t3_update_agent",
293
+ "access": "write"
294
+ },
295
+ {
296
+ "name": "t3_update_pr",
297
+ "access": "write"
298
+ },
299
+ {
300
+ "name": "t3_update_skill",
301
+ "access": "write"
302
+ }
303
+ ]
304
+ },
305
+ "data": [
306
+ {
307
+ "id": "active",
308
+ "tool": "t3_list_threads",
309
+ "arguments": {
310
+ "environmentId": "{{setting.environmentId}}",
311
+ "state": "active"
312
+ },
313
+ "extract": "text-json",
314
+ "refreshSeconds": 10
315
+ },
316
+ {
317
+ "id": "running",
318
+ "tool": "t3_list_threads",
319
+ "arguments": {
320
+ "environmentId": "{{setting.environmentId}}",
321
+ "executionState": "running"
322
+ },
323
+ "extract": "text-json",
324
+ "refreshSeconds": 10
325
+ },
326
+ {
327
+ "id": "approvals",
328
+ "tool": "t3_list_threads",
329
+ "arguments": {
330
+ "environmentId": "{{setting.environmentId}}",
331
+ "executionState": "waiting-approval"
332
+ },
333
+ "extract": "text-json",
334
+ "refreshSeconds": 10
335
+ },
336
+ {
337
+ "id": "input",
338
+ "tool": "t3_list_threads",
339
+ "arguments": {
340
+ "environmentId": "{{setting.environmentId}}",
341
+ "executionState": "waiting-input"
342
+ },
343
+ "extract": "text-json",
344
+ "refreshSeconds": 10
345
+ }
346
+ ],
347
+ "glance": {
348
+ "stats": [
349
+ {
350
+ "label": "Running",
351
+ "value": "{{running/data/items|count}}",
352
+ "tone": "info"
353
+ },
354
+ {
355
+ "label": "Approvals",
356
+ "value": "{{approvals/data/items|count}}",
357
+ "tone": "warning"
358
+ }
359
+ ]
360
+ },
361
+ "blocks": [
362
+ {
363
+ "type": "stats",
364
+ "items": [
365
+ {
366
+ "label": "Running",
367
+ "value": "{{running/data/items|count}}",
368
+ "tone": "info"
369
+ },
370
+ {
371
+ "label": "Approvals",
372
+ "value": "{{approvals/data/items|count}}",
373
+ "tone": "warning"
374
+ },
375
+ {
376
+ "label": "Questions",
377
+ "value": "{{input/data/items|count}}",
378
+ "tone": "warning"
379
+ }
380
+ ]
381
+ },
382
+ {
383
+ "type": "list",
384
+ "items": "{{active/data/items|sort:pinOrderKey,-pinnedAt,-hasPendingApprovals,-hasPendingUserInput,-status=running,-updatedAt}}",
385
+ "item": {
386
+ "title": "{{item/title|truncate:60}}",
387
+ "subtitle": "{{item/profileSnapshot/profileName|default:T3}}",
388
+ "status": "{{item/status}}",
389
+ "statusTones": {
390
+ "running": "info",
391
+ "queued": "info",
392
+ "waiting-approval": "warning",
393
+ "waiting-input": "warning",
394
+ "completed": "success",
395
+ "failed": "danger",
396
+ "interrupted": "danger",
397
+ "stopped": "neutral",
398
+ "idle": "neutral"
399
+ },
400
+ "key": "{{item/id}}"
401
+ },
402
+ "limit": 8,
403
+ "emptyText": "No active threads"
404
+ }
405
+ ],
406
+ "detail": {
407
+ "tool": "t3_get_messages",
408
+ "arguments": {
409
+ "environmentId": "{{setting.environmentId}}",
410
+ "threadId": "{{item/id}}",
411
+ "limit": 20
412
+ },
413
+ "extract": "text-json",
414
+ "messages": "{{detail/data/items}}",
415
+ "message": {
416
+ "role": "{{item/role}}",
417
+ "text": "{{item/text}}",
418
+ "at": "{{item/createdAt}}"
419
+ }
420
+ },
421
+ "notify": [
422
+ {
423
+ "id": "threads",
424
+ "category": "agents",
425
+ "items": "{{active/data/items}}",
426
+ "key": "{{item/id}}",
427
+ "state": "{{item/status}}",
428
+ "rules": [
429
+ {
430
+ "state": "completed",
431
+ "priority": "finished",
432
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) finished.",
433
+ "withLatest": true
434
+ },
435
+ {
436
+ "state": "failed",
437
+ "priority": "failed",
438
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) failed.",
439
+ "withLatest": true
440
+ },
441
+ {
442
+ "state": "interrupted",
443
+ "priority": "failed",
444
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) was interrupted.",
445
+ "withLatest": true
446
+ },
447
+ {
448
+ "state": "waiting-approval",
449
+ "priority": "needs_you",
450
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) is waiting for your approval.",
451
+ "withLatest": true
452
+ },
453
+ {
454
+ "state": "waiting-input",
455
+ "priority": "needs_you",
456
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) has a question for you.",
457
+ "withLatest": true
458
+ }
459
+ ]
460
+ },
461
+ {
462
+ "id": "approvals",
463
+ "category": "agents",
464
+ "items": "{{active/data/items}}",
465
+ "key": "{{item/id}}",
466
+ "state": "{{item/hasPendingApprovals}}",
467
+ "rules": [
468
+ {
469
+ "state": "true",
470
+ "priority": "needs_you",
471
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) is waiting for your approval.",
472
+ "withLatest": true
473
+ }
474
+ ]
475
+ },
476
+ {
477
+ "id": "questions",
478
+ "category": "agents",
479
+ "items": "{{active/data/items}}",
480
+ "key": "{{item/id}}",
481
+ "state": "{{item/hasPendingUserInput}}",
482
+ "rules": [
483
+ {
484
+ "state": "true",
485
+ "priority": "needs_you",
486
+ "text": "“{{item/title}}” ({{item/profileSnapshot/profileName|default:T3}}) has a question for you.",
487
+ "withLatest": true
488
+ }
489
+ ]
490
+ }
491
+ ]
492
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "$schema": "../../../../docs/schemas/pack-v1.schema.json",
3
+ "schemaVersion": 1,
4
+ "id": "dev.remotevoiceagent.telegram",
5
+ "name": "Telegram",
6
+ "description": "Your Telegram account through chigwell/telegram-mcp, launched read-only. Unread chats on the phone, alerts when a chosen contact has unread messages, and chat reading and search.",
7
+ "version": "1.0.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": "uv",
22
+ "args": [
23
+ "--directory",
24
+ "{{setting.serverDir}}",
25
+ "run",
26
+ "main.py"
27
+ ],
28
+ "env": {
29
+ "TELEGRAM_API_ID": "{{secret.TELEGRAM_API_ID}}",
30
+ "TELEGRAM_API_HASH": "{{secret.TELEGRAM_API_HASH}}",
31
+ "TELEGRAM_SESSION_STRING": "{{secret.TELEGRAM_SESSION_STRING}}",
32
+ "TELEGRAM_EXPOSED_TOOLS": "read-only",
33
+ "MCP_TRANSPORT": "stdio"
34
+ }
35
+ },
36
+ "secrets": [
37
+ {
38
+ "name": "TELEGRAM_API_ID",
39
+ "description": "From my.telegram.org → API development tools"
40
+ },
41
+ {
42
+ "name": "TELEGRAM_API_HASH",
43
+ "description": "From my.telegram.org → API development tools"
44
+ },
45
+ {
46
+ "name": "TELEGRAM_SESSION_STRING",
47
+ "description": "Made once with the server's session_string_generator.py; it grants full account access, so it stays in the keychain"
48
+ }
49
+ ],
50
+ "permissions": {
51
+ "tools": [
52
+ {
53
+ "name": "list_chats",
54
+ "access": "read",
55
+ "description": "Chats and unread counts"
56
+ },
57
+ {
58
+ "name": "list_messages",
59
+ "access": "read",
60
+ "description": "Messages in one chat"
61
+ },
62
+ {
63
+ "name": "search_messages",
64
+ "access": "read",
65
+ "description": "Search one chat"
66
+ }
67
+ ]
68
+ },
69
+ "settings": [
70
+ {
71
+ "id": "serverDir",
72
+ "label": "telegram-mcp folder",
73
+ "type": "text",
74
+ "default": "",
75
+ "description": "Absolute path to a clone of chigwell/telegram-mcp (installed with uv)."
76
+ }
77
+ ],
78
+ "data": [
79
+ {
80
+ "id": "unread",
81
+ "tool": "list_chats",
82
+ "arguments": {
83
+ "unread_only": true,
84
+ "limit": 20
85
+ },
86
+ "extract": "text-json",
87
+ "refreshSeconds": 30
88
+ }
89
+ ],
90
+ "glance": {
91
+ "stats": [
92
+ {
93
+ "label": "Unread chats",
94
+ "value": "{{unread/results|count}}",
95
+ "tone": "info"
96
+ }
97
+ ]
98
+ },
99
+ "badge": {
100
+ "text": "{{unread/results|count}}",
101
+ "tone": "info"
102
+ },
103
+ "blocks": [
104
+ {
105
+ "type": "list",
106
+ "items": "{{unread/results}}",
107
+ "item": {
108
+ "title": "{{item/title}}{{item/name}}",
109
+ "status": "{{item/unread}}"
110
+ },
111
+ "limit": 8,
112
+ "emptyText": "No unread chats"
113
+ }
114
+ ],
115
+ "controls": [
116
+ {
117
+ "id": "summarize",
118
+ "kind": "prompt",
119
+ "label": "Summarize Telegram",
120
+ "prompt": "Which Telegram chats have unread messages, and what do they say?",
121
+ "default": true
122
+ }
123
+ ],
124
+ "alerts": [
125
+ {
126
+ "id": "unread",
127
+ "items": "{{unread/results}}",
128
+ "key": "{{item/chat_id}}:{{item/unread}}",
129
+ "sender": [
130
+ "{{item/username}}",
131
+ "{{item/title}}",
132
+ "{{item/name}}"
133
+ ],
134
+ "text": "{{item/unread}} unread message(s)"
135
+ }
136
+ ]
137
+ }