zele 0.3.14 → 0.3.16
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 +25 -0
- package/dist/api-utils.d.ts +3 -0
- package/dist/api-utils.js +6 -0
- package/dist/api-utils.js.map +1 -1
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/calendar-time.js +6 -0
- package/dist/calendar-time.js.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/attachment.js +42 -2
- package/dist/commands/attachment.js.map +1 -1
- package/dist/commands/auth-cmd.js +1 -1
- package/dist/commands/auth-cmd.js.map +1 -1
- package/dist/commands/calendar.js +1 -1
- package/dist/commands/calendar.js.map +1 -1
- package/dist/commands/draft.js +2 -2
- package/dist/commands/draft.js.map +1 -1
- package/dist/commands/filter.d.ts +2 -0
- package/dist/commands/filter.js +59 -0
- package/dist/commands/filter.js.map +1 -0
- package/dist/commands/mail-actions.js +12 -2
- package/dist/commands/mail-actions.js.map +1 -1
- package/dist/commands/mail.js +176 -93
- package/dist/commands/mail.js.map +1 -1
- package/dist/db.js +24 -1
- package/dist/db.js.map +1 -1
- package/dist/gmail-client.d.ts +28 -0
- package/dist/gmail-client.js +168 -13
- package/dist/gmail-client.js.map +1 -1
- package/dist/mail-tui.js +34 -9
- package/dist/mail-tui.js.map +1 -1
- package/dist/output.d.ts +2 -0
- package/dist/output.js +4 -0
- package/dist/output.js.map +1 -1
- package/package.json +8 -3
- package/skills/zele/SKILL.md +112 -0
- package/src/api-utils.ts +7 -0
- package/src/app.log +9 -0
- package/src/auth.ts +1 -1
- package/src/calendar-time.test.ts +35 -0
- package/src/calendar-time.ts +5 -0
- package/src/cli.ts +6 -1
- package/src/commands/attachment.ts +47 -2
- package/src/commands/auth-cmd.ts +1 -1
- package/src/commands/calendar.ts +1 -1
- package/src/commands/draft.ts +2 -2
- package/src/commands/filter.ts +68 -0
- package/src/commands/mail-actions.ts +14 -2
- package/src/commands/mail.ts +186 -98
- package/src/db.ts +26 -1
- package/src/gmail-client.ts +202 -20
- package/src/mail-tui.test.ts +170 -0
- package/src/mail-tui.tsx +56 -9
- package/src/output.ts +8 -1
- package/src/opentui-react.d.ts +0 -9
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zele",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.16",
|
|
4
4
|
"description": "Gmail CLI — manage email from your terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@googleapis/gmail": "^16.1.1",
|
|
28
28
|
"@libsql/client": "^0.15.15",
|
|
29
|
+
"@opentui/core": "^0.1.88",
|
|
30
|
+
"@opentui/react": "^0.1.88",
|
|
29
31
|
"@prisma/adapter-libsql": "7.3.0",
|
|
30
32
|
"@prisma/client": "7.3.0",
|
|
31
|
-
"@termcast/utils": "^2.2.
|
|
33
|
+
"@termcast/utils": "^2.2.8",
|
|
32
34
|
"email-addresses": "^5.0.0",
|
|
33
35
|
"email-reply-parser": "^2.3.5",
|
|
34
36
|
"errore": "^0.11.0",
|
|
@@ -41,7 +43,7 @@
|
|
|
41
43
|
"picocolors": "^1.1.1",
|
|
42
44
|
"react": "^19.2.4",
|
|
43
45
|
"remark": "^15.0.1",
|
|
44
|
-
"termcast": "^1.3.
|
|
46
|
+
"termcast": "^1.3.54",
|
|
45
47
|
"ts-ics": "^2.4.0",
|
|
46
48
|
"tsdav": "^2.1.7",
|
|
47
49
|
"turndown": "^7.2.0",
|
|
@@ -63,17 +65,20 @@
|
|
|
63
65
|
"@types/turndown": "^5.0.5",
|
|
64
66
|
"prisma": "7.3.0",
|
|
65
67
|
"tsx": "^4.19.4",
|
|
68
|
+
"tuistory": "0.0.16",
|
|
66
69
|
"typescript": "^5.9.3",
|
|
67
70
|
"vitest": "^4.0.18"
|
|
68
71
|
},
|
|
69
72
|
"trustedDependencies": [
|
|
70
73
|
"@prisma/engines",
|
|
74
|
+
"node-pty",
|
|
71
75
|
"prisma"
|
|
72
76
|
],
|
|
73
77
|
"files": [
|
|
74
78
|
"dist",
|
|
75
79
|
"bin",
|
|
76
80
|
"src",
|
|
81
|
+
"skills",
|
|
77
82
|
"schema.prisma"
|
|
78
83
|
]
|
|
79
84
|
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zele
|
|
3
|
+
description: >
|
|
4
|
+
Control Gmail and Google Calendar via CLI. Read, search, send, reply, and forward
|
|
5
|
+
emails. Create, update, and delete calendar events. Manage drafts, labels, and attachments.
|
|
6
|
+
Supports multiple Google accounts. Use this skill whenever the user asks to check email,
|
|
7
|
+
send messages, schedule meetings, or manage their calendar.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# zele — Gmail & Google Calendar CLI
|
|
11
|
+
|
|
12
|
+
A multi-account Gmail and Google Calendar client. Output is YAML, pipe-friendly.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# install (requires bun)
|
|
18
|
+
bun install -g zele
|
|
19
|
+
|
|
20
|
+
# show connected accounts
|
|
21
|
+
zele whoami
|
|
22
|
+
|
|
23
|
+
# authenticate (opens browser, supports multiple accounts)
|
|
24
|
+
zele login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Remote/headless login:** `zele login` is interactive — it prints an authorization URL and waits for a redirect URL to be pasted back. In agent/headless environments, run it inside tmux so the process persists:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# start login in a tmux session
|
|
31
|
+
tmux new-session -d -s zele-login 'zele login'
|
|
32
|
+
|
|
33
|
+
# read the authorization URL from tmux output
|
|
34
|
+
tmux capture-pane -t zele-login -p
|
|
35
|
+
|
|
36
|
+
# after the user completes consent in their browser, paste the redirect URL
|
|
37
|
+
tmux send-keys -t zele-login 'http://localhost:...?code=...' Enter
|
|
38
|
+
|
|
39
|
+
# verify login succeeded
|
|
40
|
+
tmux capture-pane -t zele-login -p
|
|
41
|
+
tmux kill-session -t zele-login
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Important
|
|
45
|
+
|
|
46
|
+
**Always run `zele --help` before using.** The help output is the source of truth for all commands, options, and syntax. Run `zele <command> --help` for subcommand details (e.g. `zele mail send --help`). NEVER use head to truncate the output. read it fully.
|
|
47
|
+
|
|
48
|
+
Running `zele` with no subcommand launches a human-friendly TUI for browsing email. **Agents should not use the TUI** — always use the CLI subcommands (`zele mail list`, `zele cal events`, etc.) which output structured YAML.
|
|
49
|
+
|
|
50
|
+
## Capabilities
|
|
51
|
+
|
|
52
|
+
- **Mail:** list, search, read, send, reply, forward, star, archive, trash, label, watch for new emails, manage filters
|
|
53
|
+
- **Drafts:** list, create, get, send, delete
|
|
54
|
+
- **Calendar:** list calendars, list/search events, create/update/delete events, RSVP, free/busy
|
|
55
|
+
- **Labels:** list, create, delete, unread counts
|
|
56
|
+
- **Attachments:** list per thread, download
|
|
57
|
+
- **Multi-account:** all commands support `--account <email>` to filter; list/search merge across accounts
|
|
58
|
+
|
|
59
|
+
## Account discovery
|
|
60
|
+
|
|
61
|
+
When the user asks to check emails **for a specific account** (e.g. "check my work email", "what's new on my personal Gmail?"), always run `zele whoami` first to list the connected accounts and find the exact email address to pass to `--account`. Never guess the email — use the output of `zele whoami` to pick the right one.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# list connected accounts
|
|
65
|
+
zele whoami
|
|
66
|
+
|
|
67
|
+
# then use the email from the output
|
|
68
|
+
zele mail list --account user@work.com
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Examples
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# list inbox
|
|
75
|
+
zele mail list
|
|
76
|
+
|
|
77
|
+
# list only unread emails
|
|
78
|
+
zele mail list --filter "is:unread"
|
|
79
|
+
|
|
80
|
+
# list unread emails with attachments in inbox
|
|
81
|
+
zele mail list --filter "is:unread has:attachment"
|
|
82
|
+
|
|
83
|
+
# combine filter with folder
|
|
84
|
+
zele mail list --filter "from:github" --folder sent
|
|
85
|
+
|
|
86
|
+
# search mail
|
|
87
|
+
zele mail search "from:github subject:review"
|
|
88
|
+
|
|
89
|
+
# read a thread (thread IDs come from list/search output)
|
|
90
|
+
zele mail read <threadId>
|
|
91
|
+
|
|
92
|
+
# send an email with attachment
|
|
93
|
+
zele mail send --to alice@example.com --subject "Report" --body "See attached" --attach report.pdf
|
|
94
|
+
|
|
95
|
+
# reply all
|
|
96
|
+
zele mail reply <threadId> --body "Thanks!" --all
|
|
97
|
+
|
|
98
|
+
# watch inbox for new mail (polls every 15s)
|
|
99
|
+
zele mail watch
|
|
100
|
+
|
|
101
|
+
# today's calendar events across all accounts
|
|
102
|
+
zele cal events --today --all
|
|
103
|
+
|
|
104
|
+
# create a meeting with Google Meet
|
|
105
|
+
zele cal create --summary "Standup" --from tomorrow --to +30m --meet --attendees bob@example.com
|
|
106
|
+
|
|
107
|
+
# check free/busy
|
|
108
|
+
zele cal freebusy --from today --to +8h
|
|
109
|
+
|
|
110
|
+
# list Gmail filters
|
|
111
|
+
zele mail filter list
|
|
112
|
+
```
|
package/src/api-utils.ts
CHANGED
|
@@ -133,6 +133,13 @@ export function isAuthLikeError(err: unknown): boolean {
|
|
|
133
133
|
return msg.includes('Invalid credentials') || msg.includes('Unauthorized') || msg.includes('invalid_grant')
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/** Check if an error is specifically about missing OAuth scopes (not expired tokens or revoked access).
|
|
137
|
+
* When true, the user needs to `zele login` again to grant the new scope. */
|
|
138
|
+
export function isScopeError(err: unknown): boolean {
|
|
139
|
+
const msg = String(err)
|
|
140
|
+
return msg.includes('insufficient authentication scopes') || msg.includes('Insufficient Permission')
|
|
141
|
+
}
|
|
142
|
+
|
|
136
143
|
|
|
137
144
|
// ---------------------------------------------------------------------------
|
|
138
145
|
// Rate limit detection
|
package/src/app.log
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[2026-02-20T20:05:26.791Z] ERROR: No package.json found at: /Users/morse/.kimaki/projects/gtui/src/package.json
|
|
2
|
+
Error: No package.json found at: /Users/morse/.kimaki/projects/gtui/src/package.json
|
|
3
|
+
at startDevMode (/Users/morse/.kimaki/projects/gtui/node_modules/termcast/dist/extensions/dev.js:106:19)
|
|
4
|
+
at runDevAction (/Users/morse/.kimaki/projects/gtui/node_modules/termcast/dist/cli.js:36:15)
|
|
5
|
+
at <anonymous> (/Users/morse/.kimaki/projects/gtui/node_modules/termcast/dist/cli.js:141:11)
|
|
6
|
+
at parse (/Users/morse/.kimaki/projects/gtui/node_modules/goke/dist/goke.js:821:18)
|
|
7
|
+
at /Users/morse/.kimaki/projects/gtui/node_modules/termcast/dist/cli.js:609:5
|
|
8
|
+
at asyncModuleEvaluation (native:2)
|
|
9
|
+
at processTicksAndRejections (native:7:39)
|
package/src/auth.ts
CHANGED
|
@@ -59,7 +59,7 @@ const CLIENT_SECRET =
|
|
|
59
59
|
process.env.ZELE_CLIENT_SECRET ?? ACTIVE_CLIENT.clientSecret
|
|
60
60
|
|
|
61
61
|
const SCOPES = [
|
|
62
|
-
'https://mail.google.com/', // Gmail (full)
|
|
62
|
+
'https://mail.google.com/', // Gmail (full — covers settings, filters, etc.)
|
|
63
63
|
'https://www.googleapis.com/auth/calendar', // Calendar (full)
|
|
64
64
|
'https://www.googleapis.com/auth/userinfo.email', // Email identity
|
|
65
65
|
]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Tests for calendar time range resolution logic.
|
|
2
|
+
|
|
3
|
+
import { expect, test, describe } from 'vitest'
|
|
4
|
+
import { resolveTimeRange, parseTimeExpression, isDateOnly } from './calendar-time.js'
|
|
5
|
+
|
|
6
|
+
const tz = 'America/New_York'
|
|
7
|
+
|
|
8
|
+
describe('resolveTimeRange', () => {
|
|
9
|
+
test('same-day --from and --to produces full day range', () => {
|
|
10
|
+
const range = resolveTimeRange({ from: '2026-03-12', to: '2026-03-12' }, tz)
|
|
11
|
+
// --from date-only → start of day (00:00)
|
|
12
|
+
expect(range.timeMin).toMatch(/^2026-03-12T00:00:00/)
|
|
13
|
+
// --to date-only → end of day (23:59)
|
|
14
|
+
expect(range.timeMax).toMatch(/^2026-03-12T23:59:00/)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('--to date-only resolves to end of day', () => {
|
|
18
|
+
const range = resolveTimeRange({ from: '2026-03-10', to: '2026-03-14' }, tz)
|
|
19
|
+
expect(range.timeMin).toMatch(/^2026-03-10T00:00:00/)
|
|
20
|
+
expect(range.timeMax).toMatch(/^2026-03-14T23:59:00/)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('--to with explicit time is preserved', () => {
|
|
24
|
+
const range = resolveTimeRange({ from: '2026-03-12', to: '2026-03-12T14:00' }, tz)
|
|
25
|
+
expect(range.timeMin).toMatch(/^2026-03-12T00:00:00/)
|
|
26
|
+
expect(range.timeMax).toMatch(/^2026-03-12T14:00:00/)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
test('--to with duration is relative to --from', () => {
|
|
30
|
+
const range = resolveTimeRange({ from: '2026-03-12', to: '+2d' }, tz)
|
|
31
|
+
expect(range.timeMin).toMatch(/^2026-03-12T00:00:00/)
|
|
32
|
+
// 2 days after 2026-03-12T00:00
|
|
33
|
+
expect(range.timeMax).toMatch(/^2026-03-14/)
|
|
34
|
+
})
|
|
35
|
+
})
|
package/src/calendar-time.ts
CHANGED
|
@@ -278,6 +278,11 @@ export function resolveTimeRange(opts: TimeRangeOptions, tz: string): ResolvedTi
|
|
|
278
278
|
if (durationMs !== null) {
|
|
279
279
|
const fromDate = new Date(fromStr)
|
|
280
280
|
toStr = new Date(fromDate.getTime() + durationMs).toISOString()
|
|
281
|
+
} else if (isDateOnly(opts.to)) {
|
|
282
|
+
// Date-only --to means "through end of that day" (23:59),
|
|
283
|
+
// consistent with --today/--tomorrow/--week convenience flags.
|
|
284
|
+
const [y, m, d] = opts.to.split('-').map(Number)
|
|
285
|
+
toStr = dateToRfc3339(y!, m!, d!, 23, 59, tz)
|
|
281
286
|
} else {
|
|
282
287
|
toStr = parseTimeExpression(opts.to, tz)
|
|
283
288
|
}
|
package/src/cli.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// Entry point: registers all commands, global options, help, and version.
|
|
5
5
|
// Uses goke for command parsing with zod schemas for type-safe options.
|
|
6
6
|
|
|
7
|
+
import { createRequire } from 'node:module'
|
|
7
8
|
import { goke } from 'goke'
|
|
8
9
|
import { z } from 'zod'
|
|
9
10
|
import React from 'react'
|
|
@@ -17,6 +18,7 @@ import { registerAttachmentCommands } from './commands/attachment.js'
|
|
|
17
18
|
import { registerProfileCommands } from './commands/profile.js'
|
|
18
19
|
import { registerCalendarCommands } from './commands/calendar.js'
|
|
19
20
|
import { registerWatchCommands } from './commands/watch.js'
|
|
21
|
+
import { registerFilterCommands } from './commands/filter.js'
|
|
20
22
|
import { handleCommandError } from './output.js'
|
|
21
23
|
|
|
22
24
|
const cli = goke('zele')
|
|
@@ -79,13 +81,16 @@ registerLabelCommands(cli)
|
|
|
79
81
|
registerAttachmentCommands(cli)
|
|
80
82
|
registerCalendarCommands(cli)
|
|
81
83
|
registerWatchCommands(cli)
|
|
84
|
+
registerFilterCommands(cli)
|
|
82
85
|
|
|
83
86
|
// ---------------------------------------------------------------------------
|
|
84
87
|
// Help & version
|
|
85
88
|
// ---------------------------------------------------------------------------
|
|
86
89
|
|
|
87
90
|
cli.help()
|
|
88
|
-
|
|
91
|
+
const require = createRequire(import.meta.url)
|
|
92
|
+
const { version } = require('../package.json')
|
|
93
|
+
cli.version(version)
|
|
89
94
|
|
|
90
95
|
// ---------------------------------------------------------------------------
|
|
91
96
|
// Parse & run
|
|
@@ -61,9 +61,18 @@ export function registerAttachmentCommands(cli: Goke) {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
const meta = msg.attachments.find((a) => a.attachmentId === attachmentId)
|
|
64
|
-
const
|
|
64
|
+
const fallbackFilename = `${messageId}_${attachmentId.slice(0, 8)}`
|
|
65
|
+
const rawFilename = options.filename ?? meta?.filename
|
|
66
|
+
const filename = sanitizeFilename(rawFilename, fallbackFilename)
|
|
65
67
|
|
|
66
|
-
const
|
|
68
|
+
const outDir = path.resolve(options.outDir)
|
|
69
|
+
const outPath = path.join(outDir, filename)
|
|
70
|
+
|
|
71
|
+
// Security: verify the resolved path is within the output directory
|
|
72
|
+
if (!outPath.startsWith(outDir + path.sep) && outPath !== outDir) {
|
|
73
|
+
out.error(`Security error: filename "${rawFilename}" would write outside output directory`)
|
|
74
|
+
process.exit(1)
|
|
75
|
+
}
|
|
67
76
|
|
|
68
77
|
// Check if file already exists with same size (skip re-download)
|
|
69
78
|
if (fs.existsSync(outPath) && meta) {
|
|
@@ -101,3 +110,39 @@ function formatSize(bytes: number): string {
|
|
|
101
110
|
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`
|
|
102
111
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`
|
|
103
112
|
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Sanitize a filename to prevent path traversal and filesystem issues.
|
|
116
|
+
* - Strips directory components (path traversal prevention)
|
|
117
|
+
* - Removes null bytes and control characters
|
|
118
|
+
* - Replaces characters problematic on Windows/macOS/Linux
|
|
119
|
+
* - Handles Windows reserved names
|
|
120
|
+
* - Limits length to 255 characters
|
|
121
|
+
*/
|
|
122
|
+
function sanitizeFilename(name: string | undefined, fallback: string): string {
|
|
123
|
+
if (!name || name.trim().length === 0) return fallback
|
|
124
|
+
|
|
125
|
+
let sanitized = name
|
|
126
|
+
// Strip directory components (critical for path traversal prevention)
|
|
127
|
+
.split(/[/\\]/).pop() || ''
|
|
128
|
+
// Remove null bytes and control characters
|
|
129
|
+
.replace(/[\x00-\x1f]/g, '')
|
|
130
|
+
// Replace characters problematic across filesystems: < > : " / \ | ? *
|
|
131
|
+
.replace(/[<>:"/\\|?*]/g, '_')
|
|
132
|
+
// Trim leading/trailing spaces and dots (problematic on Windows)
|
|
133
|
+
.replace(/^[\s.]+|[\s.]+$/g, '')
|
|
134
|
+
|
|
135
|
+
// Handle Windows reserved names (CON, PRN, AUX, NUL, COM1-9, LPT1-9)
|
|
136
|
+
if (/^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i.test(sanitized)) {
|
|
137
|
+
sanitized = `_${sanitized}`
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Limit length (255 is common filesystem limit)
|
|
141
|
+
if (sanitized.length > 255) {
|
|
142
|
+
const ext = path.extname(sanitized)
|
|
143
|
+
const base = sanitized.slice(0, 255 - ext.length)
|
|
144
|
+
sanitized = base + ext
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return sanitized.length > 0 ? sanitized : fallback
|
|
148
|
+
}
|
package/src/commands/auth-cmd.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { handleCommandError } from '../output.js'
|
|
|
10
10
|
|
|
11
11
|
export function registerAuthCommands(cli: Goke) {
|
|
12
12
|
cli
|
|
13
|
-
.command('login', 'Authenticate with Google (opens browser).
|
|
13
|
+
.command('login', 'Authenticate with Google (opens browser). For headless/agent environments, run inside tmux: the command prints an authorization URL to open in a browser, then waits for the localhost redirect URL to be pasted back.')
|
|
14
14
|
.action(async () => {
|
|
15
15
|
const result = await login()
|
|
16
16
|
if (result instanceof Error) handleCommandError(result)
|
package/src/commands/calendar.ts
CHANGED
|
@@ -78,7 +78,7 @@ export function registerCalendarCommands(cli: Goke) {
|
|
|
78
78
|
.option('--all', 'Fetch from all calendars')
|
|
79
79
|
.option('--query <query>', 'Free text search')
|
|
80
80
|
.option('--max [max]', 'Max results (default: 20)')
|
|
81
|
-
.option('--page <page>', 'Pagination token')
|
|
81
|
+
.option('--page <page>', 'Pagination token (requires --account, only works for a single account)')
|
|
82
82
|
.action(async (options) => {
|
|
83
83
|
const max = options.max ? Number(options.max) : 20
|
|
84
84
|
const calendarId = options.calendar ?? 'primary'
|
package/src/commands/draft.ts
CHANGED
|
@@ -21,7 +21,7 @@ export function registerDraftCommands(cli: Goke) {
|
|
|
21
21
|
cli
|
|
22
22
|
.command('draft list', 'List drafts')
|
|
23
23
|
.option('--max <max>', z.number().default(20).describe('Max results'))
|
|
24
|
-
.option('--page <page>', z.string().describe('Pagination token'))
|
|
24
|
+
.option('--page <page>', z.string().describe('Pagination token (requires --account, only works for a single account)'))
|
|
25
25
|
.option('--query <query>', z.string().describe('Search query'))
|
|
26
26
|
.action(async (options) => {
|
|
27
27
|
const clients = await getClients(options.account)
|
|
@@ -72,7 +72,7 @@ export function registerDraftCommands(cli: Goke) {
|
|
|
72
72
|
subject: d.subject,
|
|
73
73
|
date: out.formatDate(d.date),
|
|
74
74
|
})),
|
|
75
|
-
{ summary: `${merged.length} draft(s)
|
|
75
|
+
{ summary: `${merged.length} draft(s)`, nextPage: allResults[0]?.result.nextPageToken },
|
|
76
76
|
)
|
|
77
77
|
})
|
|
78
78
|
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Filter commands: list, create, delete Gmail filters.
|
|
2
|
+
// Multi-account support via getClients/getClient like label.ts.
|
|
3
|
+
|
|
4
|
+
import type { Goke } from 'goke'
|
|
5
|
+
import { getClients } from '../auth.js'
|
|
6
|
+
import { AuthError, isScopeError } from '../api-utils.js'
|
|
7
|
+
import * as out from '../output.js'
|
|
8
|
+
|
|
9
|
+
export function registerFilterCommands(cli: Goke) {
|
|
10
|
+
// =========================================================================
|
|
11
|
+
// filter list
|
|
12
|
+
// =========================================================================
|
|
13
|
+
|
|
14
|
+
cli
|
|
15
|
+
.command('mail filter list', 'List all Gmail filters')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
const clients = await getClients(options.account)
|
|
18
|
+
|
|
19
|
+
const results = await Promise.all(
|
|
20
|
+
clients.map(async ({ email, client }) => {
|
|
21
|
+
const res = await client.listFilters()
|
|
22
|
+
if (res instanceof Error) return res
|
|
23
|
+
return { email, filters: res.parsed }
|
|
24
|
+
}),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
const allResults = results.filter((r): r is Exclude<typeof r, Error> => {
|
|
28
|
+
if (r instanceof AuthError) {
|
|
29
|
+
if (isScopeError(r)) {
|
|
30
|
+
out.error(`Missing required OAuth scopes. Run: zele login to grant updated permissions`)
|
|
31
|
+
} else {
|
|
32
|
+
out.error(`${r.message}. Try: zele login`)
|
|
33
|
+
}
|
|
34
|
+
return false
|
|
35
|
+
}
|
|
36
|
+
if (r instanceof Error) { out.error(`Failed to fetch filters: ${r.message}`); return false }
|
|
37
|
+
return true
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
const merged = allResults.flatMap(({ email, filters }) =>
|
|
41
|
+
filters.map((f) => ({ ...f, account: email })),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
if (merged.length === 0) {
|
|
45
|
+
out.hint('No filters found')
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const showAccount = clients.length > 1
|
|
50
|
+
for (const f of merged) {
|
|
51
|
+
out.printYaml({
|
|
52
|
+
...(showAccount ? { account: f.account } : {}),
|
|
53
|
+
id: f.id,
|
|
54
|
+
criteria: f.criteria,
|
|
55
|
+
action: f.action,
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
out.hint(`${merged.length} filter(s)`)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
// TODO: add `mail filter create` and `mail filter delete` commands once
|
|
63
|
+
// gmail.settings.basic scope is added to the GCP OAuth consent screen.
|
|
64
|
+
// The https://mail.google.com/ scope covers reading filters but Google
|
|
65
|
+
// enforces the narrower scope for write operations (create/delete).
|
|
66
|
+
// The gmail-client.ts methods (createFilter, deleteFilter, resolveLabel)
|
|
67
|
+
// are already implemented and ready to use.
|
|
68
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Mail action commands: star, unstar, archive, trash, untrash, mark read/unread, label modify.
|
|
1
|
+
// Mail action commands: star, unstar, archive, trash, untrash, mark read/unread, spam, unspam, label modify.
|
|
2
2
|
// Bulk operations on threads — cache invalidation is handled by the client methods.
|
|
3
3
|
|
|
4
4
|
import type { Goke } from 'goke'
|
|
@@ -66,7 +66,7 @@ export function registerMailActionCommands(cli: Goke) {
|
|
|
66
66
|
})
|
|
67
67
|
|
|
68
68
|
cli
|
|
69
|
-
.command('mail read-mark [...threadIds]', 'Mark threads as read')
|
|
69
|
+
.command('mail read-mark [...threadIds]', 'Mark threads as read (removes UNREAD label)')
|
|
70
70
|
.action(async (threadIds, options) => {
|
|
71
71
|
await bulkAction(threadIds, 'Marked as read', options.account, (c, ids) => c.markAsRead({ threadIds: ids }))
|
|
72
72
|
})
|
|
@@ -77,6 +77,18 @@ export function registerMailActionCommands(cli: Goke) {
|
|
|
77
77
|
await bulkAction(threadIds, 'Marked as unread', options.account, (c, ids) => c.markAsUnread({ threadIds: ids }))
|
|
78
78
|
})
|
|
79
79
|
|
|
80
|
+
cli
|
|
81
|
+
.command('mail spam [...threadIds]', 'Mark threads as spam')
|
|
82
|
+
.action(async (threadIds, options) => {
|
|
83
|
+
await bulkAction(threadIds, 'Marked as spam', options.account, (c, ids) => c.markAsSpam({ threadIds: ids }))
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
cli
|
|
87
|
+
.command('mail unspam [...threadIds]', 'Remove threads from spam')
|
|
88
|
+
.action(async (threadIds, options) => {
|
|
89
|
+
await bulkAction(threadIds, 'Removed from spam', options.account, (c, ids) => c.unmarkSpam({ threadIds: ids }))
|
|
90
|
+
})
|
|
91
|
+
|
|
80
92
|
cli
|
|
81
93
|
.command('mail label [...threadIds]', 'Add or remove labels from threads')
|
|
82
94
|
.option('--add <add>', z.string().describe('Labels to add (comma-separated)'))
|