@heylemon/lemonade 0.3.5 → 0.3.7
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/agents/system-prompt.js +15 -12
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/package.json +1 -2
- package/bin/lemon-jira +0 -93
|
@@ -171,7 +171,7 @@ export function buildAgentSystemPrompt(params) {
|
|
|
171
171
|
grep: "Search file contents for patterns",
|
|
172
172
|
find: "Find files by glob pattern",
|
|
173
173
|
ls: "List directory contents",
|
|
174
|
-
exec: "Run shell commands (
|
|
174
|
+
exec: "Run shell commands (use lemon-* CLIs for integrations; for third-party apps like Trello/Jira/Asana use ONLY lemon-composio, never bare commands)",
|
|
175
175
|
process: "Manage background exec sessions",
|
|
176
176
|
web_search: "Search the web (Brave API)",
|
|
177
177
|
web_fetch: "Fetch and extract readable content from a URL",
|
|
@@ -342,22 +342,25 @@ export function buildAgentSystemPrompt(params) {
|
|
|
342
342
|
"For screenshots of native macOS windows: use Peekaboo (`peekaboo image`) via exec if the skill is available.",
|
|
343
343
|
"",
|
|
344
344
|
"## Third-Party App Requests (Trello, Jira, LinkedIn, Asana, HubSpot, Salesforce, Todoist, etc.)",
|
|
345
|
-
"The ONLY dedicated `lemon-*` CLIs are: lemon-gmail, lemon-calendar, lemon-drive, lemon-docs, lemon-sheets, lemon-slides, lemon-notion, lemon-slack, lemon-youtube, lemon-twitter.",
|
|
346
|
-
"For ALL other services, there is ONE universal tool: `lemon-composio`. Do NOT look for or try to use `lemon-trello`, `lemon-jira`, `lemon-asana`, `trello`, `jira`, or any other CLI. They do not exist. Do NOT search the web for how to set up these tools. Do NOT ask the user for API keys.",
|
|
347
345
|
"",
|
|
348
|
-
"
|
|
349
|
-
|
|
346
|
+
"⚠️ CRITICAL RULE: For ANY service not in the dedicated CLI list below, your ONLY option is `lemon-composio`. There are NO other CLIs. Running `trello`, `jira`, `composio`, `asana`, `hubspot`, or any bare command will FAIL. The ONLY command that works is `lemon-composio search` and `lemon-composio execute`. Do NOT run `which trello`, `trello --help`, `composio`, or try to discover CLIs. They do not exist.",
|
|
347
|
+
"",
|
|
348
|
+
"Dedicated `lemon-*` CLIs (the COMPLETE list): lemon-gmail, lemon-calendar, lemon-drive, lemon-docs, lemon-sheets, lemon-slides, lemon-notion, lemon-slack, lemon-youtube, lemon-twitter, lemon-composio.",
|
|
349
|
+
"ANYTHING not in this list → use `lemon-composio search`.",
|
|
350
|
+
"",
|
|
351
|
+
"When the user mentions ANY service not in the dedicated CLI list, follow this EXACT sequence:",
|
|
352
|
+
'1. Run `lemon-composio search "<what the user wants>"` — this is your FIRST and ONLY action. No web search. No browser. No `which`. No `--help`. No questions.',
|
|
350
353
|
"2. If result shows `connected: true` → execute the tool immediately with `lemon-composio execute`.",
|
|
351
354
|
'3. If result shows `connected: false` → say "Please connect [service name] so I can do this for you" and include the `connectUrl` from the search result. Then STOP and wait.',
|
|
352
355
|
"4. Once the user confirms they connected → execute the tool.",
|
|
353
356
|
"",
|
|
354
|
-
"BANNED
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
"-
|
|
359
|
-
|
|
360
|
-
'-
|
|
357
|
+
"BANNED ACTIONS — never do any of these for third-party services:",
|
|
358
|
+
"- Running `which <service>`, `<service> --help`, `<service> auth:*`, or any bare CLI command",
|
|
359
|
+
"- Running `composio` (wrong command — use `lemon-composio`)",
|
|
360
|
+
"- Asking the user for API keys, tokens, or manual CLI auth setup",
|
|
361
|
+
"- Searching the web for how to set up a service",
|
|
362
|
+
"- Opening a browser to configure a service",
|
|
363
|
+
'- Suggesting alternative tools ("Would you like to use X instead?")',
|
|
361
364
|
"If the user says Trello, they want Trello. Not Reminders. Not Things. Not Notion. Run `lemon-composio search` and make it happen.",
|
|
362
365
|
"",
|
|
363
366
|
"## URLs & Quick Open",
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a98b847a612061c27f0ee5903ae3340e817161e387a834b70185809fc76ec753
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heylemon/lemonade",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "AI gateway CLI for Lemon - local AI assistant with integrations",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted"
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
"lemon-slides": "./bin/lemon-slides",
|
|
26
26
|
"lemon-youtube": "./bin/lemon-youtube",
|
|
27
27
|
"lemon-cron": "./bin/lemon-cron",
|
|
28
|
-
"lemon-jira": "./bin/lemon-jira",
|
|
29
28
|
"lemon-twitter": "./bin/lemon-twitter",
|
|
30
29
|
"lemon-composio": "./bin/lemon-composio"
|
|
31
30
|
},
|
package/bin/lemon-jira
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Lemon Jira CLI - Manage Jira issues via Composio
|
|
3
|
-
# Resolve symlinks to find the real script directory
|
|
4
|
-
SCRIPT_PATH="$0"
|
|
5
|
-
while [[ -L "$SCRIPT_PATH" ]]; do
|
|
6
|
-
SCRIPT_DIR="$(cd -P "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
7
|
-
SCRIPT_PATH="$(readlink "$SCRIPT_PATH")"
|
|
8
|
-
[[ "$SCRIPT_PATH" != /* ]] && SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_PATH"
|
|
9
|
-
done
|
|
10
|
-
SCRIPT_DIR="$(cd -P "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
11
|
-
source "$SCRIPT_DIR/lemon-cli-header.sh"
|
|
12
|
-
|
|
13
|
-
case "$1" in
|
|
14
|
-
status)
|
|
15
|
-
api_call GET "/api/lemonade/tools/status" | jq '{hasJira}'
|
|
16
|
-
;;
|
|
17
|
-
issues)
|
|
18
|
-
[[ -z "$2" ]] && echo "Usage: lemon-jira issues <project_key> [max]" && exit 1
|
|
19
|
-
max="${3:-20}"
|
|
20
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
21
|
-
'{"toolName": "JIRA_SEARCH_ISSUES", "parameters": {"project_key": "'"$2"'", "max_results": '"$max"'}}'
|
|
22
|
-
;;
|
|
23
|
-
my-issues)
|
|
24
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
25
|
-
'{"toolName": "JIRA_SEARCH_ISSUES", "parameters": {"assignee": "currentUser()", "max_results": 20}}'
|
|
26
|
-
;;
|
|
27
|
-
search)
|
|
28
|
-
[[ -z "$2" ]] && echo "Usage: lemon-jira search <jql_or_text>" && exit 1
|
|
29
|
-
# If it looks like JQL (contains = or AND/OR), use jql param; otherwise text search
|
|
30
|
-
if [[ "$2" == *"="* ]] || [[ "$2" == *" AND "* ]] || [[ "$2" == *" OR "* ]]; then
|
|
31
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
32
|
-
'{"toolName": "JIRA_SEARCH_ISSUES", "parameters": {"jql": "'"$2"'", "max_results": 20}}'
|
|
33
|
-
else
|
|
34
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
35
|
-
'{"toolName": "JIRA_SEARCH_ISSUES", "parameters": {"text_search": "'"$2"'", "max_results": 20}}'
|
|
36
|
-
fi
|
|
37
|
-
;;
|
|
38
|
-
create)
|
|
39
|
-
[[ -z "$2" ]] || [[ -z "$3" ]] && echo "Usage: lemon-jira create <project_key> <summary> [type] [description]" && exit 1
|
|
40
|
-
type="${4:-Task}"
|
|
41
|
-
desc="${5:-}"
|
|
42
|
-
if [[ -n "$desc" ]]; then
|
|
43
|
-
CREATE_JSON=$(jq -n --arg proj "$2" --arg summary "$3" --arg itype "$type" --arg desc "$desc" \
|
|
44
|
-
'{toolName: "JIRA_CREATE_ISSUE", parameters: {project_key: $proj, summary: $summary, issue_type: $itype, description: $desc}}')
|
|
45
|
-
else
|
|
46
|
-
CREATE_JSON=$(jq -n --arg proj "$2" --arg summary "$3" --arg itype "$type" \
|
|
47
|
-
'{toolName: "JIRA_CREATE_ISSUE", parameters: {project_key: $proj, summary: $summary, issue_type: $itype}}')
|
|
48
|
-
fi
|
|
49
|
-
echo "$CREATE_JSON" | curl -s -X POST \
|
|
50
|
-
-H "Authorization: Bearer ${GATEWAY_TOKEN}" \
|
|
51
|
-
-H "Content-Type: application/json" \
|
|
52
|
-
-d @- \
|
|
53
|
-
"${LEMON_BACKEND_URL}/api/lemonade/tools/execute"
|
|
54
|
-
;;
|
|
55
|
-
get)
|
|
56
|
-
[[ -z "$2" ]] && echo "Usage: lemon-jira get <issue_key>" && exit 1
|
|
57
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
58
|
-
'{"toolName": "JIRA_GET_ISSUE", "parameters": {"issue_id_or_key": "'"$2"'"}}'
|
|
59
|
-
;;
|
|
60
|
-
comment)
|
|
61
|
-
[[ -z "$2" ]] || [[ -z "$3" ]] && echo "Usage: lemon-jira comment <issue_key> <body>" && exit 1
|
|
62
|
-
COMMENT_JSON=$(jq -n --arg key "$2" --arg body "$3" \
|
|
63
|
-
'{toolName: "JIRA_ADD_COMMENT", parameters: {issue_id_or_key: $key, comment: $body}}')
|
|
64
|
-
echo "$COMMENT_JSON" | curl -s -X POST \
|
|
65
|
-
-H "Authorization: Bearer ${GATEWAY_TOKEN}" \
|
|
66
|
-
-H "Content-Type: application/json" \
|
|
67
|
-
-d @- \
|
|
68
|
-
"${LEMON_BACKEND_URL}/api/lemonade/tools/execute"
|
|
69
|
-
;;
|
|
70
|
-
transition)
|
|
71
|
-
[[ -z "$2" ]] || [[ -z "$3" ]] && echo "Usage: lemon-jira transition <issue_key> <status_name>" && exit 1
|
|
72
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
73
|
-
'{"toolName": "JIRA_TRANSITION_ISSUE", "parameters": {"issue_id_or_key": "'"$2"'", "transition_id_or_name": "'"$3"'"}}'
|
|
74
|
-
;;
|
|
75
|
-
projects)
|
|
76
|
-
api_call POST "/api/lemonade/tools/execute" \
|
|
77
|
-
'{"toolName": "JIRA_GET_ALL_PROJECTS", "parameters": {"maxResults": 50}}'
|
|
78
|
-
;;
|
|
79
|
-
*)
|
|
80
|
-
echo "Lemon Jira CLI"
|
|
81
|
-
echo ""
|
|
82
|
-
echo "Commands:"
|
|
83
|
-
echo " lemon-jira issues <project> [max] - List project issues"
|
|
84
|
-
echo " lemon-jira my-issues - My assigned issues"
|
|
85
|
-
echo " lemon-jira search <jql_or_text> - Search issues (JQL or text)"
|
|
86
|
-
echo " lemon-jira create <proj> <summary> [type] - Create issue (type default: Task)"
|
|
87
|
-
echo " lemon-jira get <issue_key> - Get issue details"
|
|
88
|
-
echo " lemon-jira comment <key> <body> - Add comment"
|
|
89
|
-
echo " lemon-jira transition <key> <status> - Change status"
|
|
90
|
-
echo " lemon-jira projects - List all projects"
|
|
91
|
-
echo " lemon-jira status - Check connection"
|
|
92
|
-
;;
|
|
93
|
-
esac
|