@heylemon/lemonade 0.2.4 → 0.2.5
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/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/package.json +1 -1
- package/skills/apple-notes/SKILL.md +0 -50
- package/skills/apple-reminders/SKILL.md +0 -67
- package/skills/goplaces/SKILL.md +0 -30
- package/skills/local-places/SERVER_README.md +0 -101
- package/skills/local-places/SKILL.md +0 -91
- package/skills/local-places/pyproject.toml +0 -27
- package/skills/local-places/src/local_places/__init__.py +0 -2
- package/skills/local-places/src/local_places/google_places.py +0 -314
- package/skills/local-places/src/local_places/main.py +0 -65
- package/skills/local-places/src/local_places/schemas.py +0 -107
- package/skills/messages/SKILL.md +0 -125
- package/skills/openai-image-gen/SKILL.md +0 -71
- package/skills/openai-image-gen/scripts/gen.py +0 -255
- package/skills/ordercli/SKILL.md +0 -47
- package/skills/spotify-player/SKILL.md +0 -38
- package/skills/youtube-watcher/SKILL.md +0 -51
- package/skills/youtube-watcher/scripts/get_transcript.py +0 -81
- /package/skills/eightctl/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/nano-banana-pro/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/openai-whisper-api/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/openhue/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/sag/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/sherpa-onnx-tts/{SKILL.md → SKILL.md.disabled} +0 -0
- /package/skills/sonoscli/{SKILL.md → SKILL.md.disabled} +0 -0
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
f7aff81ae06daba57524cebf957881ed76d554113073508696e255d618aa3b03
|
package/package.json
CHANGED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: apple-notes
|
|
3
|
-
description: Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks Lemonade to add a note, list notes, search notes, or manage note folders.
|
|
4
|
-
homepage: https://github.com/antoniorodr/memo
|
|
5
|
-
metadata: {"lemonade":{"emoji":"📝","os":["darwin"],"requires":{"bins":["memo"]},"install":[{"id":"brew","kind":"brew","formula":"antoniorodr/memo/memo","bins":["memo"],"label":"Install memo via Homebrew"}]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Apple Notes CLI
|
|
9
|
-
|
|
10
|
-
Use `memo notes` to manage Apple Notes directly from the terminal. Create, view, edit, delete, search, move notes between folders, and export to HTML/Markdown.
|
|
11
|
-
|
|
12
|
-
Setup
|
|
13
|
-
- Install (Homebrew): `brew tap antoniorodr/memo && brew install antoniorodr/memo/memo`
|
|
14
|
-
- Manual (pip): `pip install .` (after cloning the repo)
|
|
15
|
-
- macOS-only; if prompted, grant Automation access to Notes.app.
|
|
16
|
-
|
|
17
|
-
View Notes
|
|
18
|
-
- List all notes: `memo notes`
|
|
19
|
-
- Filter by folder: `memo notes -f "Folder Name"`
|
|
20
|
-
- Search notes (fuzzy): `memo notes -s "query"`
|
|
21
|
-
|
|
22
|
-
Create Notes
|
|
23
|
-
- Add a new note: `memo notes -a`
|
|
24
|
-
- Opens an interactive editor to compose the note.
|
|
25
|
-
- Quick add with title: `memo notes -a "Note Title"`
|
|
26
|
-
|
|
27
|
-
Edit Notes
|
|
28
|
-
- Edit existing note: `memo notes -e`
|
|
29
|
-
- Interactive selection of note to edit.
|
|
30
|
-
|
|
31
|
-
Delete Notes
|
|
32
|
-
- Delete a note: `memo notes -d`
|
|
33
|
-
- Interactive selection of note to delete.
|
|
34
|
-
|
|
35
|
-
Move Notes
|
|
36
|
-
- Move note to folder: `memo notes -m`
|
|
37
|
-
- Interactive selection of note and destination folder.
|
|
38
|
-
|
|
39
|
-
Export Notes
|
|
40
|
-
- Export to HTML/Markdown: `memo notes -ex`
|
|
41
|
-
- Exports selected note; uses Mistune for markdown processing.
|
|
42
|
-
|
|
43
|
-
Limitations
|
|
44
|
-
- Cannot edit notes containing images or attachments.
|
|
45
|
-
- Interactive prompts may require terminal access.
|
|
46
|
-
|
|
47
|
-
Notes
|
|
48
|
-
- macOS-only.
|
|
49
|
-
- Requires Apple Notes.app to be accessible.
|
|
50
|
-
- For automation, grant permissions in System Settings > Privacy & Security > Automation.
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: apple-reminders
|
|
3
|
-
description: Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.
|
|
4
|
-
homepage: https://github.com/steipete/remindctl
|
|
5
|
-
metadata: {"lemonade":{"emoji":"⏰","os":["darwin"],"requires":{"bins":["remindctl"]},"install":[{"id":"brew","kind":"brew","formula":"steipete/tap/remindctl","bins":["remindctl"],"label":"Install remindctl via Homebrew"}]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Apple Reminders CLI (remindctl)
|
|
9
|
-
|
|
10
|
-
Use `remindctl` to manage Apple Reminders directly from the terminal. It supports list filtering, date-based views, and scripting output.
|
|
11
|
-
|
|
12
|
-
Setup
|
|
13
|
-
- Install (Homebrew): `brew install steipete/tap/remindctl`
|
|
14
|
-
- From source: `pnpm install && pnpm build` (binary at `./bin/remindctl`)
|
|
15
|
-
- macOS-only; grant Reminders permission when prompted.
|
|
16
|
-
|
|
17
|
-
Permissions
|
|
18
|
-
- Check status: `remindctl status`
|
|
19
|
-
- Request access: `remindctl authorize`
|
|
20
|
-
|
|
21
|
-
View Reminders
|
|
22
|
-
- Default (today): `remindctl`
|
|
23
|
-
- Today: `remindctl today`
|
|
24
|
-
- Tomorrow: `remindctl tomorrow`
|
|
25
|
-
- Week: `remindctl week`
|
|
26
|
-
- Overdue: `remindctl overdue`
|
|
27
|
-
- Upcoming: `remindctl upcoming`
|
|
28
|
-
- Completed: `remindctl completed`
|
|
29
|
-
- All: `remindctl all`
|
|
30
|
-
- Specific date: `remindctl 2026-01-04`
|
|
31
|
-
|
|
32
|
-
Manage Lists
|
|
33
|
-
- List all lists: `remindctl list`
|
|
34
|
-
- Show list: `remindctl list Work`
|
|
35
|
-
- Create list: `remindctl list Projects --create`
|
|
36
|
-
- Rename list: `remindctl list Work --rename Office`
|
|
37
|
-
- Delete list: `remindctl list Work --delete`
|
|
38
|
-
|
|
39
|
-
Create Reminders
|
|
40
|
-
- Quick add: `remindctl add "Buy milk"`
|
|
41
|
-
- With list + due: `remindctl add --title "Call mom" --list Personal --due tomorrow`
|
|
42
|
-
|
|
43
|
-
Edit Reminders
|
|
44
|
-
- Edit title/due: `remindctl edit 1 --title "New title" --due 2026-01-04`
|
|
45
|
-
|
|
46
|
-
Complete Reminders
|
|
47
|
-
- Complete by id: `remindctl complete 1 2 3`
|
|
48
|
-
|
|
49
|
-
Delete Reminders
|
|
50
|
-
- Delete by id: `remindctl delete 4A83 --force`
|
|
51
|
-
|
|
52
|
-
Output Formats
|
|
53
|
-
- JSON (scripting): `remindctl today --json`
|
|
54
|
-
- Plain TSV: `remindctl today --plain`
|
|
55
|
-
- Counts only: `remindctl today --quiet`
|
|
56
|
-
|
|
57
|
-
Date Formats
|
|
58
|
-
Accepted by `--due` and date filters:
|
|
59
|
-
- `today`, `tomorrow`, `yesterday`
|
|
60
|
-
- `YYYY-MM-DD`
|
|
61
|
-
- `YYYY-MM-DD HH:mm`
|
|
62
|
-
- ISO 8601 (`2026-01-04T12:34:56Z`)
|
|
63
|
-
|
|
64
|
-
Notes
|
|
65
|
-
- macOS-only.
|
|
66
|
-
- If access is denied, enable Terminal/remindctl in System Settings → Privacy & Security → Reminders.
|
|
67
|
-
- If running over SSH, grant access on the Mac that runs the command.
|
package/skills/goplaces/SKILL.md
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: goplaces
|
|
3
|
-
description: Query Google Places API (New) via the goplaces CLI for text search, place details, resolve, and reviews. Use for human-friendly place lookup or JSON output for scripts.
|
|
4
|
-
homepage: https://github.com/steipete/goplaces
|
|
5
|
-
metadata: {"lemonade":{"emoji":"📍","requires":{"bins":["goplaces"],"env":["GOOGLE_PLACES_API_KEY"]},"primaryEnv":"GOOGLE_PLACES_API_KEY","install":[{"id":"brew","kind":"brew","formula":"steipete/tap/goplaces","bins":["goplaces"],"label":"Install goplaces (brew)"}]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# goplaces
|
|
9
|
-
|
|
10
|
-
Modern Google Places API (New) CLI. Human output by default, `--json` for scripts.
|
|
11
|
-
|
|
12
|
-
Install
|
|
13
|
-
- Homebrew: `brew install steipete/tap/goplaces`
|
|
14
|
-
|
|
15
|
-
Config
|
|
16
|
-
- `GOOGLE_PLACES_API_KEY` required.
|
|
17
|
-
- Optional: `GOOGLE_PLACES_BASE_URL` for testing/proxying.
|
|
18
|
-
|
|
19
|
-
Common commands
|
|
20
|
-
- Search: `goplaces search "coffee" --open-now --min-rating 4 --limit 5`
|
|
21
|
-
- Bias: `goplaces search "pizza" --lat 40.8 --lng -73.9 --radius-m 3000`
|
|
22
|
-
- Pagination: `goplaces search "pizza" --page-token "NEXT_PAGE_TOKEN"`
|
|
23
|
-
- Resolve: `goplaces resolve "Soho, London" --limit 5`
|
|
24
|
-
- Details: `goplaces details <place_id> --reviews`
|
|
25
|
-
- JSON: `goplaces search "sushi" --json`
|
|
26
|
-
|
|
27
|
-
Notes
|
|
28
|
-
- `--no-color` or `NO_COLOR` disables ANSI color.
|
|
29
|
-
- Price levels: 0..4 (free → very expensive).
|
|
30
|
-
- Type filter sends only the first `--type` value (API accepts one).
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# Local Places
|
|
2
|
-
|
|
3
|
-
This repo is a fusion of two pieces:
|
|
4
|
-
|
|
5
|
-
- A FastAPI server that exposes endpoints for searching and resolving places via the Google Maps Places API.
|
|
6
|
-
- A companion agent skill that explains how to use the API and can call it to find places efficiently.
|
|
7
|
-
|
|
8
|
-
Together, the skill and server let an agent turn natural-language place queries into structured results quickly.
|
|
9
|
-
|
|
10
|
-
## Run locally
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
# copy skill definition into the relevant folder (where the agent looks for it)
|
|
14
|
-
# then run the server
|
|
15
|
-
|
|
16
|
-
uv venv
|
|
17
|
-
uv pip install -e ".[dev]"
|
|
18
|
-
uv run --env-file .env uvicorn local_places.main:app --host 0.0.0.0 --reload
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Open the API docs at http://127.0.0.1:8000/docs.
|
|
22
|
-
|
|
23
|
-
## Places API
|
|
24
|
-
|
|
25
|
-
Set the Google Places API key before running:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
export GOOGLE_PLACES_API_KEY="your-key"
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Endpoints:
|
|
32
|
-
|
|
33
|
-
- `POST /places/search` (free-text query + filters)
|
|
34
|
-
- `GET /places/{place_id}` (place details)
|
|
35
|
-
- `POST /locations/resolve` (resolve a user-provided location string)
|
|
36
|
-
|
|
37
|
-
Example search request:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"query": "italian restaurant",
|
|
42
|
-
"filters": {
|
|
43
|
-
"types": ["restaurant"],
|
|
44
|
-
"open_now": true,
|
|
45
|
-
"min_rating": 4.0,
|
|
46
|
-
"price_levels": [1, 2]
|
|
47
|
-
},
|
|
48
|
-
"limit": 10
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Notes:
|
|
53
|
-
|
|
54
|
-
- `filters.types` supports a single type (mapped to Google `includedType`).
|
|
55
|
-
|
|
56
|
-
Example search request (curl):
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
curl -X POST http://127.0.0.1:8000/places/search \
|
|
60
|
-
-H "Content-Type: application/json" \
|
|
61
|
-
-d '{
|
|
62
|
-
"query": "italian restaurant",
|
|
63
|
-
"location_bias": {
|
|
64
|
-
"lat": 40.8065,
|
|
65
|
-
"lng": -73.9719,
|
|
66
|
-
"radius_m": 3000
|
|
67
|
-
},
|
|
68
|
-
"filters": {
|
|
69
|
-
"types": ["restaurant"],
|
|
70
|
-
"open_now": true,
|
|
71
|
-
"min_rating": 4.0,
|
|
72
|
-
"price_levels": [1, 2, 3]
|
|
73
|
-
},
|
|
74
|
-
"limit": 10
|
|
75
|
-
}'
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Example resolve request (curl):
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
curl -X POST http://127.0.0.1:8000/locations/resolve \
|
|
82
|
-
-H "Content-Type: application/json" \
|
|
83
|
-
-d '{
|
|
84
|
-
"location_text": "Riverside Park, New York",
|
|
85
|
-
"limit": 5
|
|
86
|
-
}'
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Test
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
uv run pytest
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## OpenAPI
|
|
96
|
-
|
|
97
|
-
Generate the OpenAPI schema:
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
uv run python scripts/generate_openapi.py
|
|
101
|
-
```
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: local-places
|
|
3
|
-
description: Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
|
|
4
|
-
homepage: https://github.com/Hyaxia/local_places
|
|
5
|
-
metadata: {"lemonade":{"emoji":"📍","requires":{"bins":["uv"],"env":["GOOGLE_PLACES_API_KEY"]},"primaryEnv":"GOOGLE_PLACES_API_KEY"}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# 📍 Local Places
|
|
9
|
-
|
|
10
|
-
*Find places, Go fast*
|
|
11
|
-
|
|
12
|
-
Search for nearby places using a local Google Places API proxy. Two-step flow: resolve location first, then search.
|
|
13
|
-
|
|
14
|
-
## Setup
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
cd {baseDir}
|
|
18
|
-
echo "GOOGLE_PLACES_API_KEY=your-key" > .env
|
|
19
|
-
uv venv && uv pip install -e ".[dev]"
|
|
20
|
-
uv run --env-file .env uvicorn local_places.main:app --host 127.0.0.1 --port 8000
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Requires `GOOGLE_PLACES_API_KEY` in `.env` or environment.
|
|
24
|
-
|
|
25
|
-
## Quick Start
|
|
26
|
-
|
|
27
|
-
1. **Check server:** `curl http://127.0.0.1:8000/ping`
|
|
28
|
-
|
|
29
|
-
2. **Resolve location:**
|
|
30
|
-
```bash
|
|
31
|
-
curl -X POST http://127.0.0.1:8000/locations/resolve \
|
|
32
|
-
-H "Content-Type: application/json" \
|
|
33
|
-
-d '{"location_text": "Soho, London", "limit": 5}'
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
3. **Search places:**
|
|
37
|
-
```bash
|
|
38
|
-
curl -X POST http://127.0.0.1:8000/places/search \
|
|
39
|
-
-H "Content-Type: application/json" \
|
|
40
|
-
-d '{
|
|
41
|
-
"query": "coffee shop",
|
|
42
|
-
"location_bias": {"lat": 51.5137, "lng": -0.1366, "radius_m": 1000},
|
|
43
|
-
"filters": {"open_now": true, "min_rating": 4.0},
|
|
44
|
-
"limit": 10
|
|
45
|
-
}'
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
4. **Get details:**
|
|
49
|
-
```bash
|
|
50
|
-
curl http://127.0.0.1:8000/places/{place_id}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Conversation Flow
|
|
54
|
-
|
|
55
|
-
1. If user says "near me" or gives vague location → resolve it first
|
|
56
|
-
2. If multiple results → show numbered list, ask user to pick
|
|
57
|
-
3. Ask for preferences: type, open now, rating, price level
|
|
58
|
-
4. Search with `location_bias` from chosen location
|
|
59
|
-
5. Present results with name, rating, address, open status
|
|
60
|
-
6. Offer to fetch details or refine search
|
|
61
|
-
|
|
62
|
-
## Filter Constraints
|
|
63
|
-
|
|
64
|
-
- `filters.types`: exactly ONE type (e.g., "restaurant", "cafe", "gym")
|
|
65
|
-
- `filters.price_levels`: integers 0-4 (0=free, 4=very expensive)
|
|
66
|
-
- `filters.min_rating`: 0-5 in 0.5 increments
|
|
67
|
-
- `filters.open_now`: boolean
|
|
68
|
-
- `limit`: 1-20 for search, 1-10 for resolve
|
|
69
|
-
- `location_bias.radius_m`: must be > 0
|
|
70
|
-
|
|
71
|
-
## Response Format
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"results": [
|
|
76
|
-
{
|
|
77
|
-
"place_id": "ChIJ...",
|
|
78
|
-
"name": "Coffee Shop",
|
|
79
|
-
"address": "123 Main St",
|
|
80
|
-
"location": {"lat": 51.5, "lng": -0.1},
|
|
81
|
-
"rating": 4.6,
|
|
82
|
-
"price_level": 2,
|
|
83
|
-
"types": ["cafe", "food"],
|
|
84
|
-
"open_now": true
|
|
85
|
-
}
|
|
86
|
-
],
|
|
87
|
-
"next_page_token": "..."
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Use `next_page_token` as `page_token` in next request for more results.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "my-api"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
description = "FastAPI server"
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
requires-python = ">=3.11"
|
|
7
|
-
dependencies = [
|
|
8
|
-
"fastapi>=0.110.0",
|
|
9
|
-
"httpx>=0.27.0",
|
|
10
|
-
"uvicorn[standard]>=0.29.0",
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
[project.optional-dependencies]
|
|
14
|
-
dev = [
|
|
15
|
-
"pytest>=8.0.0",
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
[build-system]
|
|
19
|
-
requires = ["hatchling"]
|
|
20
|
-
build-backend = "hatchling.build"
|
|
21
|
-
|
|
22
|
-
[tool.hatch.build.targets.wheel]
|
|
23
|
-
packages = ["src/local_places"]
|
|
24
|
-
|
|
25
|
-
[tool.pytest.ini_options]
|
|
26
|
-
addopts = "-q"
|
|
27
|
-
testpaths = ["tests"]
|