@heylemon/lemonade 0.1.1 → 0.1.3
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/bin/lemon-slack
CHANGED
|
@@ -28,7 +28,7 @@ case "$1" in
|
|
|
28
28
|
;;
|
|
29
29
|
channels)
|
|
30
30
|
api_call POST "/api/lemonade/tools/execute" \
|
|
31
|
-
'{"toolName": "SLACK_LIST_ALL_CHANNELS", "parameters": {}}'
|
|
31
|
+
'{"toolName": "SLACK_LIST_ALL_CHANNELS", "parameters": {"limit": 500, "types": "public_channel,private_channel"}}'
|
|
32
32
|
;;
|
|
33
33
|
dms)
|
|
34
34
|
api_call POST "/api/lemonade/tools/execute" \
|
|
@@ -51,7 +51,7 @@ case "$1" in
|
|
|
51
51
|
find-channel)
|
|
52
52
|
[[ -z "$2" ]] && echo "Usage: lemon-slack find-channel <name>" && exit 1
|
|
53
53
|
api_call POST "/api/lemonade/tools/execute" \
|
|
54
|
-
'{"toolName": "SLACK_FIND_CHANNELS", "parameters": {"query": "'"$2"'"}}'
|
|
54
|
+
'{"toolName": "SLACK_FIND_CHANNELS", "parameters": {"query": "'"$2"'", "types": "public_channel,private_channel"}}'
|
|
55
55
|
;;
|
|
56
56
|
upload)
|
|
57
57
|
[[ -z "$2" ]] || [[ -z "$3" ]] && echo "Usage: lemon-slack upload <channel_or_user_id> <file_path> [message]" && exit 1
|
|
@@ -349,11 +349,33 @@ export function buildAgentSystemPrompt(params) {
|
|
|
349
349
|
"| LinkedIn search | `https://linkedin.com/search/results/all/?keywords={query}` |",
|
|
350
350
|
"URL-encode the query (`%20` for spaces or use `+`).",
|
|
351
351
|
"",
|
|
352
|
+
"### Quick-create shortcuts (.new domains)",
|
|
353
|
+
"These instantly create a new document/resource in the user's browser:",
|
|
354
|
+
"| Task | URL |",
|
|
355
|
+
"|------|-----|",
|
|
356
|
+
"| New Google Doc | `https://docs.new` |",
|
|
357
|
+
"| New Google Sheet | `https://sheets.new` |",
|
|
358
|
+
"| New Google Slides | `https://slides.new` |",
|
|
359
|
+
"| New Google Form | `https://forms.new` |",
|
|
360
|
+
"| New Google Meet | `https://meet.new` |",
|
|
361
|
+
"| New Google Calendar event | `https://cal.new` |",
|
|
362
|
+
"| New Google Drawing | `https://drawings.new` |",
|
|
363
|
+
"| New Google Site | `https://sites.new` |",
|
|
364
|
+
"| New GitHub repo | `https://repo.new` |",
|
|
365
|
+
"| New GitHub gist | `https://gist.new` |",
|
|
366
|
+
"| New CodePen | `https://pen.new` |",
|
|
367
|
+
"| New Figma file | `https://figma.new` |",
|
|
368
|
+
"| New Notion page | `https://notion.new` |",
|
|
369
|
+
"| New Linear issue | `https://linear.new` |",
|
|
370
|
+
"These are faster than using CLI tools when the user just wants to open a blank document in their browser.",
|
|
371
|
+
"",
|
|
352
372
|
"### Examples",
|
|
353
373
|
'- "search YouTube for funny cats" → `open "https://youtube.com/results?search_query=funny+cats"`',
|
|
354
374
|
'- "show me flights to Tokyo" → `open "https://google.com/travel/flights?q=flights+to+tokyo"`',
|
|
355
375
|
'- "open amazon" → `open "https://amazon.com"`',
|
|
356
376
|
'- "find Italian restaurants near me" → `open "https://maps.google.com/maps?q=italian+restaurants+near+me"`',
|
|
377
|
+
'- "create a new doc" → `open "https://docs.new"`',
|
|
378
|
+
'- "start a Google Meet" → `open "https://meet.new"`',
|
|
357
379
|
'- "what is the capital of France?" → use `web_search` (user wants the answer, not a page)',
|
|
358
380
|
"",
|
|
359
381
|
"## IDE & Coding Agent Control",
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a358277c6e57449e6a03b5e1ae0c9a15a0918ef893e013756d06df8577192bc8
|
package/package.json
CHANGED
package/skills/slack/SKILL.md
CHANGED
|
@@ -37,8 +37,15 @@ Use the `message` tool for Slack operations whenever possible. It talks directly
|
|
|
37
37
|
### Send to Channel Workflow
|
|
38
38
|
|
|
39
39
|
1. Search for the channel: `message { action: "search-channels", channel: "slack", query: "general" }`
|
|
40
|
-
2.
|
|
41
|
-
3.
|
|
40
|
+
2. From the results, find the channel whose name **exactly matches** what the user asked for.
|
|
41
|
+
3. Use that channel's ID (e.g. `channel:C123ABC`).
|
|
42
|
+
4. Send: `message { action: "send", channel: "slack", target: "channel:C123ABC", message: "Hello!" }`
|
|
43
|
+
|
|
44
|
+
**CRITICAL — Exact channel matching:**
|
|
45
|
+
- NEVER send to a channel that doesn't exactly match the user's request. If the user says "lemon-internal", only use a channel literally named `lemon-internal` — not `techstack`, not `general`, not any other channel.
|
|
46
|
+
- If search returns multiple results, pick the one whose name is an exact match.
|
|
47
|
+
- If NO exact match exists, show the user the closest matches and ask them to clarify. Do NOT pick one yourself.
|
|
48
|
+
- NEVER substitute a different channel because it "seems related" or is the closest fuzzy match.
|
|
42
49
|
|
|
43
50
|
## Fallback: lemon-slack CLI
|
|
44
51
|
|
|
@@ -68,6 +75,6 @@ lemon-slack upload "CHANNEL_OR_USER_ID" "/path/to/file.pdf" "Here's the report"
|
|
|
68
75
|
## Error Handling
|
|
69
76
|
|
|
70
77
|
- **"User not found"** → The name may be misspelled. Try `message { action: "search-users", channel: "slack", query: "" }` with empty query to list everyone, then find the closest match. Ask the user if unsure. This is NOT a connection failure.
|
|
71
|
-
- **"Channel not found"** → Try `message { action: "search-channels", channel: "slack", query: "" }` with empty query to list all.
|
|
78
|
+
- **"Channel not found"** → Try `message { action: "search-channels", channel: "slack", query: "" }` with empty query to list all. Look for an exact name match. If none, show the user the available channels and ask which one they meant. NEVER send to a different channel than what was requested.
|
|
72
79
|
- **NEVER fall back to browser** if a Slack command returns no results. Retry with different input or ask for clarification.
|
|
73
80
|
- **NEVER open `app.slack.com` in a browser.** Slack is CLI/native only.
|