@heylemon/lemonade 0.2.4 → 0.2.6

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 (28) hide show
  1. package/dist/agents/system-prompt.js +6 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/package.json +1 -1
  5. package/skills/apple-notes/SKILL.md +0 -50
  6. package/skills/apple-reminders/SKILL.md +0 -67
  7. package/skills/goplaces/SKILL.md +0 -30
  8. package/skills/local-places/SERVER_README.md +0 -101
  9. package/skills/local-places/SKILL.md +0 -91
  10. package/skills/local-places/pyproject.toml +0 -27
  11. package/skills/local-places/src/local_places/__init__.py +0 -2
  12. package/skills/local-places/src/local_places/google_places.py +0 -314
  13. package/skills/local-places/src/local_places/main.py +0 -65
  14. package/skills/local-places/src/local_places/schemas.py +0 -107
  15. package/skills/messages/SKILL.md +0 -125
  16. package/skills/openai-image-gen/SKILL.md +0 -71
  17. package/skills/openai-image-gen/scripts/gen.py +0 -255
  18. package/skills/ordercli/SKILL.md +0 -47
  19. package/skills/spotify-player/SKILL.md +0 -38
  20. package/skills/youtube-watcher/SKILL.md +0 -51
  21. package/skills/youtube-watcher/scripts/get_transcript.py +0 -81
  22. /package/skills/eightctl/{SKILL.md → SKILL.md.disabled} +0 -0
  23. /package/skills/nano-banana-pro/{SKILL.md → SKILL.md.disabled} +0 -0
  24. /package/skills/openai-whisper-api/{SKILL.md → SKILL.md.disabled} +0 -0
  25. /package/skills/openhue/{SKILL.md → SKILL.md.disabled} +0 -0
  26. /package/skills/sag/{SKILL.md → SKILL.md.disabled} +0 -0
  27. /package/skills/sherpa-onnx-tts/{SKILL.md → SKILL.md.disabled} +0 -0
  28. /package/skills/sonoscli/{SKILL.md → SKILL.md.disabled} +0 -0
@@ -54,7 +54,12 @@ function buildUserIdentitySection(ownerLine, isMinimal) {
54
54
  function buildTimeSection(params) {
55
55
  if (!params.userTimezone)
56
56
  return [];
57
- return ["## Current Date & Time", `Time zone: ${params.userTimezone}`, ""];
57
+ return [
58
+ "## Current Date & Time",
59
+ `Time zone: ${params.userTimezone}`,
60
+ `When the user mentions a time (e.g. "8pm", "tomorrow at 3") always interpret it in their timezone (${params.userTimezone}) and pass the correct absolute time to any tool or API (calendar events, reminders, alarms, etc.).`,
61
+ "",
62
+ ];
58
63
  }
59
64
  function buildReplyTagsSection(isMinimal) {
60
65
  if (isMinimal)
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.4",
3
- "commit": "8eb0340db81a8046301e7ca8d6a7afb19af6f09e",
4
- "builtAt": "2026-02-22T15:19:53.606Z"
2
+ "version": "0.2.6",
3
+ "commit": "80887609891b389ba300be9cfe0a533a54f2d4a9",
4
+ "builtAt": "2026-02-22T16:28:19.422Z"
5
5
  }
@@ -1 +1 @@
1
- aad422f21104b00c3575f122b2f36572b3d50edc6e9dc94b5c2fb91fd996d4b9
1
+ 6a2102ad373b5c2a8630cff043867bfb4dea9f4c9d5e6b87ac2817e328058b0f
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heylemon/lemonade",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "AI gateway CLI for Lemon - local AI assistant with integrations",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
@@ -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.
@@ -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"]
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "0.1.0"