@xiaotianxt/skills 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.
- package/EXCLUDED.md +42 -0
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/SECURITY.md +23 -0
- package/SOURCES.md +45 -0
- package/bin/skills.mjs +241 -0
- package/package.json +38 -0
- package/skills/1password/SKILL.md +94 -0
- package/skills/1password/agents/openai.yaml +4 -0
- package/skills/1password/references/item-management.md +80 -0
- package/skills/1password/references/op-cli.md +107 -0
- package/skills/apple-calendar-event/SKILL.md +81 -0
- package/skills/apple-calendar-event/agents/openai.yaml +4 -0
- package/skills/apple-calendar-event/scripts/calendar_audit.py +201 -0
- package/skills/apple-calendar-event/scripts/calendar_event.py +164 -0
- package/skills/bro-browser/SKILL.md +118 -0
- package/skills/bro-browser/agents/openai.yaml +4 -0
- package/skills/bro-browser/references/tool-map.md +102 -0
- package/skills/bro-browser/references/workflows.md +146 -0
- package/skills/bro-browser/scripts/bro-call.mjs +189 -0
- package/skills/calendar/SKILL.md +182 -0
- package/skills/calendar/agents/openai.yaml +4 -0
- package/skills/calendar/references/operations.md +255 -0
- package/skills/calendar/scripts/calendar_list_review.py +157 -0
- package/skills/calendar/scripts/event_dedupe_preview.py +155 -0
- package/skills/canvas/SKILL.md +70 -0
- package/skills/canvas/agents/openai.yaml +4 -0
- package/skills/canvas/references/canvas-api.md +76 -0
- package/skills/course-exam-review-planner/SKILL.md +127 -0
- package/skills/cx/SKILL.md +25 -0
- package/skills/gh-fix-ci/LICENSE.txt +201 -0
- package/skills/gh-fix-ci/SKILL.md +81 -0
- package/skills/gh-fix-ci/agents/openai.yaml +6 -0
- package/skills/gh-fix-ci/assets/github-small.svg +3 -0
- package/skills/gh-fix-ci/assets/github.png +0 -0
- package/skills/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
- package/skills/gh-review-workflow/SKILL.md +61 -0
- package/skills/gh-review-workflow/agents/openai.yaml +4 -0
- package/skills/gh-review-workflow/references/workflow.md +48 -0
- package/skills/gh-review-workflow/scripts/fetch_review_state.py +222 -0
- package/skills/gh-review-workflow/scripts/resolve_review_threads.py +83 -0
- package/skills/github/SKILL.md +74 -0
- package/skills/github/agents/openai.yaml +6 -0
- package/skills/github/assets/github-small.svg +3 -0
- package/skills/github/assets/github.png +0 -0
- package/skills/gws-calendar/SKILL.md +126 -0
- package/skills/gws-calendar-agenda/SKILL.md +52 -0
- package/skills/gws-calendar-insert/SKILL.md +66 -0
- package/skills/gws-docs/SKILL.md +48 -0
- package/skills/gws-docs-write/SKILL.md +49 -0
- package/skills/gws-drive/SKILL.md +137 -0
- package/skills/gws-drive-upload/SKILL.md +52 -0
- package/skills/gws-gmail/SKILL.md +62 -0
- package/skills/gws-gmail-forward/SKILL.md +55 -0
- package/skills/gws-gmail-reply/SKILL.md +58 -0
- package/skills/gws-gmail-reply-all/SKILL.md +62 -0
- package/skills/gws-gmail-send/SKILL.md +57 -0
- package/skills/gws-gmail-triage/SKILL.md +50 -0
- package/skills/gws-gmail-watch/SKILL.md +58 -0
- package/skills/gws-shared/SKILL.md +27 -0
- package/skills/helium-browser-mcp/SKILL.md +137 -0
- package/skills/helium-browser-mcp/agents/openai.yaml +4 -0
- package/skills/helium-browser-mcp/scripts/obmcp.mjs +92 -0
- package/skills/helium-browser-mcp/scripts/openbrowsermcp-stdio-proxy.mjs +170 -0
- package/skills/learn/SKILL.md +122 -0
- package/skills/learn/agents/openai.yaml +7 -0
- package/skills/learn/assets/AGENTS.template.md +33 -0
- package/skills/learn/assets/errorlog.template.typ +61 -0
- package/skills/learn/assets/reading-sequence.template.md +23 -0
- package/skills/learn/assets/source-index.template.md +17 -0
- package/skills/learn/assets/tasklog.template.typ +57 -0
- package/skills/learn/assets/workbook.template.typ +60 -0
- package/skills/learn/references/learning-science.md +103 -0
- package/skills/learn/scripts/init_learning_workspace.py +70 -0
- package/skills/macos-messages/SKILL.md +258 -0
- package/skills/memory/SKILL.md +33 -0
- package/skills/memory/codex.md +186 -0
- package/skills/memory/opencode.md +164 -0
- package/skills/mimestreamctl/SKILL.md +170 -0
- package/skills/mimestreamctl/agents/openai.yaml +4 -0
- package/skills/mimestreamctl/scripts/mimestreamctl +33 -0
- package/skills/mon/SKILL.md +51 -0
- package/skills/mon/scripts/mon_spend_review.py +458 -0
- package/skills/ocr/SKILL.md +136 -0
- package/skills/ocr/agents/openai.yaml +4 -0
- package/skills/ocr/references/local-ocr-best-practices.md +297 -0
- package/skills/ocr/references/mineru-api.md +159 -0
- package/skills/ocr/scripts/ocr-router +22 -0
- package/skills/ocr/scripts/ocr_router.py +741 -0
- package/skills/panopto-mp4-bulk-download/SKILL.md +57 -0
- package/skills/panopto-mp4-bulk-download/agents/openai.yaml +4 -0
- package/skills/panopto-mp4-bulk-download/references/url-patterns.md +26 -0
- package/skills/panopto-mp4-bulk-download/scripts/panopto_bulk_mp4.sh +213 -0
- package/skills/rust-systems-style/SKILL.md +109 -0
- package/skills/rust-systems-style/agents/openai.yaml +4 -0
- package/skills/rust-systems-style/references/rust-review-checklist.md +77 -0
- package/skills/rust-systems-style/references/style-sources.md +68 -0
- package/skills/ship-ai-native-cli/SKILL.md +76 -0
- package/skills/ship-ai-native-cli/agents/openai.yaml +4 -0
- package/skills/ship-ai-native-cli/references/case-notes.md +83 -0
- package/skills/ship-ai-native-cli/references/product-method.md +82 -0
- package/skills/ship-ai-native-cli/references/release-checklist.md +147 -0
- package/skills/ship-ai-native-cli/references/rust-cli-shape.md +111 -0
- package/skills/telegram-mtproto-session/SKILL.md +125 -0
- package/skills/telegram-mtproto-session/agents/openai.yaml +4 -0
- package/skills/telegram-mtproto-session/scripts/telegram_session.py +687 -0
- package/skills/tg/SKILL.md +173 -0
- package/skills/things3-manager/SKILL.md +116 -0
- package/skills/things3-manager/scripts/things +42 -0
- package/skills/things3-manager/scripts/things_cli.py +514 -0
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +379 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/yeet/LICENSE.txt +201 -0
- package/skills/yeet/SKILL.md +71 -0
- package/skills/yeet/agents/openai.yaml +6 -0
- package/skills/yeet/assets/yeet-small.svg +3 -0
- package/skills/yeet/assets/yeet.png +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tg
|
|
3
|
+
description: Use when the user wants to read, search, inspect, back up, export, or troubleshoot local macOS Telegram chat history with tg. Keep the user's chat data local and guide them through the shortest working tg command flow.
|
|
4
|
+
when_to_use: Trigger for requests mentioning Telegram聊天记录, Telegram聊天, Telegram群, Telegram里, local chat backup, message search, message export, or troubleshooting why local chat history cannot be read.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# tg
|
|
8
|
+
|
|
9
|
+
Canonical source: https://github.com/xiaotianxt/skills/tree/main/skills/tg
|
|
10
|
+
|
|
11
|
+
## When To Use
|
|
12
|
+
|
|
13
|
+
Use this skill for user goals like:
|
|
14
|
+
|
|
15
|
+
- "帮我读一下和某个人的Telegram聊天记录"
|
|
16
|
+
- "查Telegram里有没有某个关键词"
|
|
17
|
+
- "导出这个Telegram群的聊天记录"
|
|
18
|
+
- "把Telegram聊天备份成 json/csv/txt"
|
|
19
|
+
- "为什么本机Telegram聊天记录读不出来"
|
|
20
|
+
|
|
21
|
+
Do not wait for the user to name tg. tg is the tool; the user goal is local macOS Telegram history access.
|
|
22
|
+
|
|
23
|
+
## Privacy
|
|
24
|
+
|
|
25
|
+
Chat data is private. Keep work local by default, avoid printing more message content than the user asked for, and treat exports as sensitive.
|
|
26
|
+
For summary requests, choose display names by the target. If the user clearly names a 1-on-1 person, omit `--anonymous` so the summary uses the user's intended name for that person. If the target is a group chat, a room, a global search, or the target type is unclear, use `--anonymous` whenever the command supports it to avoid exposing personal contact remarks in assistant-visible output and exported sender names.
|
|
27
|
+
`~/.tg/all_keys.json` and `~/.tg/decrypted/` are sensitive local state. `~/.tg/decrypted/.tg_index.db` is a local derived hot index maintained by `tg refresh`; treat it as sensitive and safe to delete if it needs to be rebuilt.
|
|
28
|
+
|
|
29
|
+
## First Setup
|
|
30
|
+
|
|
31
|
+
For a fresh setup, ask the user to open and log in to macOS Telegram first.
|
|
32
|
+
|
|
33
|
+
If tg needs permission to access the desktop app, have the user quit Telegram and run:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
sudo codesign --force --deep --sign - /Applications/Telegram.app
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If Telegram is installed somewhere else, use that `.app` path instead.
|
|
40
|
+
|
|
41
|
+
Then run:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
sudo tg keys
|
|
45
|
+
tg refresh
|
|
46
|
+
tg sessions --top 50
|
|
47
|
+
tg "联系人" --limit 50
|
|
48
|
+
tg "群名" --limit 50 --anonymous
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Common Commands
|
|
52
|
+
|
|
53
|
+
Install:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
brew install xiaotianxt/tap/tg
|
|
57
|
+
tg --version
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Find a chat:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
tg sessions "张三"
|
|
64
|
+
tg sessions --top 50
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Read a chat:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
tg "张三"
|
|
71
|
+
tg "张三" --limit 100
|
|
72
|
+
tg messages "张三" --limit 100
|
|
73
|
+
tg messages "张三" --since today
|
|
74
|
+
tg messages "张三" --all-time
|
|
75
|
+
tg messages "张三" --search "关键词"
|
|
76
|
+
tg messages "张三" --head --limit 20
|
|
77
|
+
tg messages "张三" --tail --limit 20
|
|
78
|
+
tg messages "产品讨论群" --limit 100 --anonymous
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Search globally:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
tg search "关键词" --limit 50 --anonymous
|
|
85
|
+
tg search "关键词" --since today --anonymous
|
|
86
|
+
tg search "关键词" --all-time --anonymous
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Use structured lookup when the user wants precise filters, multiple keywords,
|
|
90
|
+
excluded words, selected output fields, or JSON lines for a local analysis step.
|
|
91
|
+
This is not a raw SQL interface; pass user intent as filters:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
tg query --contains "关键词" --limit 50 --anonymous
|
|
95
|
+
tg query --session "张三" --contains "关键词" --fields time,sender,body --limit 20
|
|
96
|
+
tg query --session "产品讨论群" --contains "关键词" --fields time,sender,body --limit 20 --anonymous
|
|
97
|
+
tg query --contains "项目" --contains "上线" --match-mode all --since today --anonymous
|
|
98
|
+
tg query --contains "项目" --not "已取消" --format json --fields timestamp,session,body --anonymous
|
|
99
|
+
tg query --contains "项目" --all-time --anonymous
|
|
100
|
+
tg schema --db message_0
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Use `tg schema` when the user asks what `query` can return or filter on. It
|
|
104
|
+
shows the public query contract, not raw database table or column names.
|
|
105
|
+
|
|
106
|
+
Query safety rules:
|
|
107
|
+
|
|
108
|
+
- `search`, `query`, and `export` default to the recent 365-day window; use `--all-time` only when the user asks for full history.
|
|
109
|
+
- With `--all-time`, `query` requires at least `--contains` or `--since`.
|
|
110
|
+
- Empty `--contains` / `--not` values are rejected.
|
|
111
|
+
- Use `--session`, `--since`, and a reasonable `--limit` when results could be large.
|
|
112
|
+
- Table output escapes terminal control characters; use `--format json` for machine parsing.
|
|
113
|
+
|
|
114
|
+
Refresh or diagnose:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
tg refresh
|
|
118
|
+
tg refresh --keys
|
|
119
|
+
tg doctor
|
|
120
|
+
tg doctor "张三"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Export:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
tg export "张三" --format txt
|
|
127
|
+
tg export "张三" --format csv --since 30d --output exported/zhangsan
|
|
128
|
+
tg export "张三" --format json --limit 1000 --output exported/zhangsan
|
|
129
|
+
tg export "张三" --format json --all-time --output exported/zhangsan
|
|
130
|
+
tg export "产品讨论群" --format json --output exported/group --media-dir exported/group/media --anonymous
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Export cached images:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
tg image "张三" --list --limit 20
|
|
137
|
+
tg image "张三" --index 3
|
|
138
|
+
tg image "张三" --all --limit 10 --output exported/images
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Export cached voice messages:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
tg voice "张三" --list --limit 20
|
|
145
|
+
tg voice "张三" --id 123
|
|
146
|
+
tg voice "张三" --index 3
|
|
147
|
+
tg voice "张三" --all --limit 10 --output exported/voices
|
|
148
|
+
tg voice "张三" --id 123 --format wav
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Time filters support dates, datetimes, and relative values:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
--since 2026-04-28
|
|
155
|
+
--since "2026-04-28 09:30:00"
|
|
156
|
+
--since 5min
|
|
157
|
+
--since 1h
|
|
158
|
+
--since 1y
|
|
159
|
+
--since today
|
|
160
|
+
--since yesterday
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Date, datetime, and displayed message times use the current system time zone.
|
|
164
|
+
|
|
165
|
+
## Troubleshooting
|
|
166
|
+
|
|
167
|
+
- `Telegram is not running`: open and log in to macOS Telegram, then run `sudo tg keys`.
|
|
168
|
+
- `task_for_pid failed`: quit Telegram, run `sudo codesign --force --deep --sign - /Applications/Telegram.app`, reopen Telegram, then run `sudo tg keys`.
|
|
169
|
+
- No chats or messages found: run `tg refresh --keys`, then `tg sessions --top 50`.
|
|
170
|
+
- Wrong chat matched: use `tg sessions --top 100` and rerun with the exact `tgid_...` or `...@chatroom`.
|
|
171
|
+
- Missing media: open or download the media in Telegram first, then retry `tg image` or `tg export --media-dir ...`.
|
|
172
|
+
- Voice output defaults to normalized `.voice`; use `tg voice ... --format wav` after installing a compatible native voice decoder.
|
|
173
|
+
- Unknown issue: run `tg doctor` or `tg doctor "联系人或群名"` and follow the result.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: things3-manager
|
|
3
|
+
description: Manage Things 3 on macOS through the official Things URL scheme. Use when asked to add, batch-import, update, show, search, or programmatically locate existing open to-dos/projects in Things, especially when an auth token should be injected from an env file.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Things 3 Manager
|
|
7
|
+
|
|
8
|
+
Use this skill for Things 3 automation on macOS.
|
|
9
|
+
|
|
10
|
+
## Quick start
|
|
11
|
+
|
|
12
|
+
- Requirements:
|
|
13
|
+
- Things 3 is installed.
|
|
14
|
+
- In Things -> Settings -> General, "Enable Things URLs" is enabled.
|
|
15
|
+
- Global install path:
|
|
16
|
+
- `~/.codex/skills/things3-manager/`
|
|
17
|
+
- Global mutable state:
|
|
18
|
+
- `~/.codex/skills-data/things3-manager/.env`
|
|
19
|
+
- Main CLI:
|
|
20
|
+
- `bash ~/.codex/skills/things3-manager/scripts/things --help`
|
|
21
|
+
|
|
22
|
+
## Token handling
|
|
23
|
+
|
|
24
|
+
- The wrapper auto-sources `~/.codex/skills-data/things3-manager/.env`.
|
|
25
|
+
- Store the Things auth token as `THINGS_AUTH_TOKEN=...` in that file.
|
|
26
|
+
- You can also override it per command with `THINGS_AUTH_TOKEN=... bash .../things ...` or `--auth-token ...`.
|
|
27
|
+
- `update-*` commands always require a token.
|
|
28
|
+
- `json` only requires a token when the JSON contains update operations.
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
- Prefer `--dry-run` first for large batch imports.
|
|
33
|
+
- Use `json --data-file ...` for big imports with projects/headings/to-dos.
|
|
34
|
+
- For the Things `json` command, the file must contain a top-level JSON array of Things objects, for example `[{"type":"project","attributes":{...}}]`. Do not wrap it in an object like `{"items":[...]}`; Things may accept the URL but silently create nothing.
|
|
35
|
+
- Use `add-todo` or `add-project` for one-off items.
|
|
36
|
+
- Use `show`, `search`, `find-open-todos`, or `version` for non-destructive actions.
|
|
37
|
+
- For updates to existing items, resolve the item `id` first with `find-open-todos`, then call `update-todo` or `update-project`.
|
|
38
|
+
- For reminder-only changes on existing tasks, keep the same date and pass `--when YYYY-MM-DD@HH:MM`. The public URI uses the `when` field to set both the start date and the reminder time.
|
|
39
|
+
- If the requested reminder time is already in the past for that date, Things removes the reminder instead of keeping it.
|
|
40
|
+
- `search` only opens Things UI search. Use `find-open-todos` when you need machine-readable ids and dates for follow-up updates.
|
|
41
|
+
- Before write operations, summarize the exact changes and confirm unless the user has already explicitly asked you to perform them.
|
|
42
|
+
|
|
43
|
+
## Commands
|
|
44
|
+
|
|
45
|
+
- `add-todo`
|
|
46
|
+
- `add-project`
|
|
47
|
+
- `update-todo`
|
|
48
|
+
- `update-project`
|
|
49
|
+
- `json`
|
|
50
|
+
- `show`
|
|
51
|
+
- `search`
|
|
52
|
+
- `find-open-todos`
|
|
53
|
+
- `version`
|
|
54
|
+
- `set-token`
|
|
55
|
+
- `print-config`
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
bash ~/.codex/skills/things3-manager/scripts/things add-todo \
|
|
61
|
+
--title "Book flights" \
|
|
62
|
+
--when 2026-03-25@18:00 \
|
|
63
|
+
--deadline 2026-03-25
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
bash ~/.codex/skills/things3-manager/scripts/things json \
|
|
68
|
+
--data-file /tmp/things-import.json \
|
|
69
|
+
--reveal
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`/tmp/things-import.json` must look like:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
[
|
|
76
|
+
{
|
|
77
|
+
"type": "project",
|
|
78
|
+
"attributes": {
|
|
79
|
+
"title": "Example Project",
|
|
80
|
+
"items": [
|
|
81
|
+
{
|
|
82
|
+
"type": "heading",
|
|
83
|
+
"attributes": {
|
|
84
|
+
"title": "First Section"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "to-do",
|
|
89
|
+
"attributes": {
|
|
90
|
+
"title": "First task"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
bash ~/.codex/skills/things3-manager/scripts/things find-open-todos \
|
|
101
|
+
--project "17629 Assignments" \
|
|
102
|
+
--title-contains "In-Class Exercise" \
|
|
103
|
+
--json
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
bash ~/.codex/skills/things3-manager/scripts/things update-todo \
|
|
108
|
+
--id 3h8S39kz63CjXEqJ3aJw3m \
|
|
109
|
+
--when 2026-03-26@12:30 \
|
|
110
|
+
--dry-run
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
bash ~/.codex/skills/things3-manager/scripts/things set-token \
|
|
115
|
+
--token "$THINGS_AUTH_TOKEN"
|
|
116
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SKILL_NAME="things3-manager"
|
|
5
|
+
SKILL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
SKILL_DATA_DIR="${CODEX_SKILLS_DATA_DIR:-$HOME/.codex/skills-data/$SKILL_NAME}"
|
|
7
|
+
ENV_FILE="$SKILL_DATA_DIR/.env"
|
|
8
|
+
|
|
9
|
+
mkdir -p "$SKILL_DATA_DIR" "$SKILL_DATA_DIR/logs" "$SKILL_DATA_DIR/tmp"
|
|
10
|
+
|
|
11
|
+
if [[ ! -f "$ENV_FILE" ]]; then
|
|
12
|
+
cat >"$ENV_FILE" <<EOF
|
|
13
|
+
THINGS_AUTH_TOKEN=""
|
|
14
|
+
THINGS_APP_BUNDLE_ID="com.culturedcode.ThingsMac"
|
|
15
|
+
EOF
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
EXTERNAL_THINGS_AUTH_TOKEN="${THINGS_AUTH_TOKEN:-}"
|
|
19
|
+
EXTERNAL_THINGS_APP_BUNDLE_ID="${THINGS_APP_BUNDLE_ID:-}"
|
|
20
|
+
|
|
21
|
+
# shellcheck disable=SC1090
|
|
22
|
+
source "$ENV_FILE"
|
|
23
|
+
|
|
24
|
+
SKILL_NAME="things3-manager"
|
|
25
|
+
SKILL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
26
|
+
SKILL_DATA_DIR="${CODEX_SKILLS_DATA_DIR:-$HOME/.codex/skills-data/$SKILL_NAME}"
|
|
27
|
+
|
|
28
|
+
if [[ -n "$EXTERNAL_THINGS_AUTH_TOKEN" ]]; then
|
|
29
|
+
THINGS_AUTH_TOKEN="$EXTERNAL_THINGS_AUTH_TOKEN"
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
if [[ -n "$EXTERNAL_THINGS_APP_BUNDLE_ID" ]]; then
|
|
33
|
+
THINGS_APP_BUNDLE_ID="$EXTERNAL_THINGS_APP_BUNDLE_ID"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
export SKILL_NAME
|
|
37
|
+
export SKILL_ROOT
|
|
38
|
+
export SKILL_DATA_DIR
|
|
39
|
+
export THINGS_AUTH_TOKEN
|
|
40
|
+
export THINGS_APP_BUNDLE_ID
|
|
41
|
+
|
|
42
|
+
exec python3 "$SKILL_ROOT/scripts/things_cli.py" "$@"
|