@heylemon/lemonade 0.6.8 → 0.7.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.
Files changed (146) hide show
  1. package/dist/agents/model-fallback.js +7 -2
  2. package/dist/agents/pi-tool-definition-adapter.js +83 -10
  3. package/dist/agents/system-prompt.js +20 -1
  4. package/dist/auto-reply/reply/session.js +34 -8
  5. package/dist/build-info.json +3 -3
  6. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  7. package/dist/canvas-host/a2ui/a2ui.bundle.js +17775 -0
  8. package/dist/canvas-host/a2ui/index.html +307 -0
  9. package/dist/control-ui/assets/{index-0MsyRFLD.js → index-D5pbk0Cx.js} +261 -261
  10. package/dist/control-ui/assets/index-D5pbk0Cx.js.map +1 -0
  11. package/dist/control-ui/index.html +1 -1
  12. package/dist/gateway/auth-rate-limit.js +121 -0
  13. package/dist/gateway/auth.js +26 -8
  14. package/dist/gateway/server-http.js +7 -4
  15. package/dist/gateway/session-utils.fs.js +18 -0
  16. package/dist/gateway/skills-http.js +65 -0
  17. package/dist/security/secret-equal.js +13 -0
  18. package/extensions/diagnostics-otel/node_modules/.bin/acorn +2 -2
  19. package/extensions/googlechat/node_modules/.bin/lemonade +2 -2
  20. package/extensions/line/node_modules/.bin/lemonade +2 -2
  21. package/extensions/matrix/node_modules/.bin/lemonade +2 -2
  22. package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
  23. package/extensions/memory-core/node_modules/.bin/lemonade +2 -2
  24. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +2 -2
  25. package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
  26. package/extensions/msteams/node_modules/.bin/lemonade +2 -2
  27. package/extensions/nostr/node_modules/.bin/lemonade +2 -2
  28. package/extensions/nostr/node_modules/.bin/tsc +2 -2
  29. package/extensions/nostr/node_modules/.bin/tsserver +2 -2
  30. package/extensions/twitch/node_modules/.bin/lemonade +2 -2
  31. package/extensions/zalo/node_modules/.bin/lemonade +2 -2
  32. package/extensions/zalouser/node_modules/.bin/lemonade +2 -2
  33. package/package.json +1 -1
  34. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  35. package/skills/travel-agent-persona/SKILL.md +89 -0
  36. package/dist/control-ui/assets/index-0MsyRFLD.js.map +0 -1
  37. package/extensions/googlechat/node_modules/.bin/lemon-calendar +0 -21
  38. package/extensions/googlechat/node_modules/.bin/lemon-cron +0 -21
  39. package/extensions/googlechat/node_modules/.bin/lemon-docs +0 -21
  40. package/extensions/googlechat/node_modules/.bin/lemon-drive +0 -21
  41. package/extensions/googlechat/node_modules/.bin/lemon-gmail +0 -21
  42. package/extensions/googlechat/node_modules/.bin/lemon-jira +0 -21
  43. package/extensions/googlechat/node_modules/.bin/lemon-notion +0 -21
  44. package/extensions/googlechat/node_modules/.bin/lemon-sheets +0 -21
  45. package/extensions/googlechat/node_modules/.bin/lemon-slack +0 -21
  46. package/extensions/googlechat/node_modules/.bin/lemon-slides +0 -21
  47. package/extensions/googlechat/node_modules/.bin/lemon-twitter +0 -21
  48. package/extensions/googlechat/node_modules/.bin/lemon-youtube +0 -21
  49. package/extensions/line/node_modules/.bin/lemon-calendar +0 -21
  50. package/extensions/line/node_modules/.bin/lemon-cron +0 -21
  51. package/extensions/line/node_modules/.bin/lemon-docs +0 -21
  52. package/extensions/line/node_modules/.bin/lemon-drive +0 -21
  53. package/extensions/line/node_modules/.bin/lemon-gmail +0 -21
  54. package/extensions/line/node_modules/.bin/lemon-jira +0 -21
  55. package/extensions/line/node_modules/.bin/lemon-notion +0 -21
  56. package/extensions/line/node_modules/.bin/lemon-sheets +0 -21
  57. package/extensions/line/node_modules/.bin/lemon-slack +0 -21
  58. package/extensions/line/node_modules/.bin/lemon-slides +0 -21
  59. package/extensions/line/node_modules/.bin/lemon-twitter +0 -21
  60. package/extensions/line/node_modules/.bin/lemon-youtube +0 -21
  61. package/extensions/matrix/node_modules/.bin/lemon-calendar +0 -21
  62. package/extensions/matrix/node_modules/.bin/lemon-cron +0 -21
  63. package/extensions/matrix/node_modules/.bin/lemon-docs +0 -21
  64. package/extensions/matrix/node_modules/.bin/lemon-drive +0 -21
  65. package/extensions/matrix/node_modules/.bin/lemon-gmail +0 -21
  66. package/extensions/matrix/node_modules/.bin/lemon-jira +0 -21
  67. package/extensions/matrix/node_modules/.bin/lemon-notion +0 -21
  68. package/extensions/matrix/node_modules/.bin/lemon-sheets +0 -21
  69. package/extensions/matrix/node_modules/.bin/lemon-slack +0 -21
  70. package/extensions/matrix/node_modules/.bin/lemon-slides +0 -21
  71. package/extensions/matrix/node_modules/.bin/lemon-twitter +0 -21
  72. package/extensions/matrix/node_modules/.bin/lemon-youtube +0 -21
  73. package/extensions/memory-core/node_modules/.bin/lemon-calendar +0 -21
  74. package/extensions/memory-core/node_modules/.bin/lemon-cron +0 -21
  75. package/extensions/memory-core/node_modules/.bin/lemon-docs +0 -21
  76. package/extensions/memory-core/node_modules/.bin/lemon-drive +0 -21
  77. package/extensions/memory-core/node_modules/.bin/lemon-gmail +0 -21
  78. package/extensions/memory-core/node_modules/.bin/lemon-jira +0 -21
  79. package/extensions/memory-core/node_modules/.bin/lemon-notion +0 -21
  80. package/extensions/memory-core/node_modules/.bin/lemon-sheets +0 -21
  81. package/extensions/memory-core/node_modules/.bin/lemon-slack +0 -21
  82. package/extensions/memory-core/node_modules/.bin/lemon-slides +0 -21
  83. package/extensions/memory-core/node_modules/.bin/lemon-twitter +0 -21
  84. package/extensions/memory-core/node_modules/.bin/lemon-youtube +0 -21
  85. package/extensions/msteams/node_modules/.bin/lemon-calendar +0 -21
  86. package/extensions/msteams/node_modules/.bin/lemon-cron +0 -21
  87. package/extensions/msteams/node_modules/.bin/lemon-docs +0 -21
  88. package/extensions/msteams/node_modules/.bin/lemon-drive +0 -21
  89. package/extensions/msteams/node_modules/.bin/lemon-gmail +0 -21
  90. package/extensions/msteams/node_modules/.bin/lemon-jira +0 -21
  91. package/extensions/msteams/node_modules/.bin/lemon-notion +0 -21
  92. package/extensions/msteams/node_modules/.bin/lemon-sheets +0 -21
  93. package/extensions/msteams/node_modules/.bin/lemon-slack +0 -21
  94. package/extensions/msteams/node_modules/.bin/lemon-slides +0 -21
  95. package/extensions/msteams/node_modules/.bin/lemon-twitter +0 -21
  96. package/extensions/msteams/node_modules/.bin/lemon-youtube +0 -21
  97. package/extensions/nostr/node_modules/.bin/lemon-calendar +0 -21
  98. package/extensions/nostr/node_modules/.bin/lemon-cron +0 -21
  99. package/extensions/nostr/node_modules/.bin/lemon-docs +0 -21
  100. package/extensions/nostr/node_modules/.bin/lemon-drive +0 -21
  101. package/extensions/nostr/node_modules/.bin/lemon-gmail +0 -21
  102. package/extensions/nostr/node_modules/.bin/lemon-jira +0 -21
  103. package/extensions/nostr/node_modules/.bin/lemon-notion +0 -21
  104. package/extensions/nostr/node_modules/.bin/lemon-sheets +0 -21
  105. package/extensions/nostr/node_modules/.bin/lemon-slack +0 -21
  106. package/extensions/nostr/node_modules/.bin/lemon-slides +0 -21
  107. package/extensions/nostr/node_modules/.bin/lemon-twitter +0 -21
  108. package/extensions/nostr/node_modules/.bin/lemon-youtube +0 -21
  109. package/extensions/twitch/node_modules/.bin/lemon-calendar +0 -21
  110. package/extensions/twitch/node_modules/.bin/lemon-cron +0 -21
  111. package/extensions/twitch/node_modules/.bin/lemon-docs +0 -21
  112. package/extensions/twitch/node_modules/.bin/lemon-drive +0 -21
  113. package/extensions/twitch/node_modules/.bin/lemon-gmail +0 -21
  114. package/extensions/twitch/node_modules/.bin/lemon-jira +0 -21
  115. package/extensions/twitch/node_modules/.bin/lemon-notion +0 -21
  116. package/extensions/twitch/node_modules/.bin/lemon-sheets +0 -21
  117. package/extensions/twitch/node_modules/.bin/lemon-slack +0 -21
  118. package/extensions/twitch/node_modules/.bin/lemon-slides +0 -21
  119. package/extensions/twitch/node_modules/.bin/lemon-twitter +0 -21
  120. package/extensions/twitch/node_modules/.bin/lemon-youtube +0 -21
  121. package/extensions/zalo/node_modules/.bin/lemon-calendar +0 -21
  122. package/extensions/zalo/node_modules/.bin/lemon-cron +0 -21
  123. package/extensions/zalo/node_modules/.bin/lemon-docs +0 -21
  124. package/extensions/zalo/node_modules/.bin/lemon-drive +0 -21
  125. package/extensions/zalo/node_modules/.bin/lemon-gmail +0 -21
  126. package/extensions/zalo/node_modules/.bin/lemon-jira +0 -21
  127. package/extensions/zalo/node_modules/.bin/lemon-notion +0 -21
  128. package/extensions/zalo/node_modules/.bin/lemon-sheets +0 -21
  129. package/extensions/zalo/node_modules/.bin/lemon-slack +0 -21
  130. package/extensions/zalo/node_modules/.bin/lemon-slides +0 -21
  131. package/extensions/zalo/node_modules/.bin/lemon-twitter +0 -21
  132. package/extensions/zalo/node_modules/.bin/lemon-youtube +0 -21
  133. package/extensions/zalouser/node_modules/.bin/lemon-calendar +0 -21
  134. package/extensions/zalouser/node_modules/.bin/lemon-cron +0 -21
  135. package/extensions/zalouser/node_modules/.bin/lemon-docs +0 -21
  136. package/extensions/zalouser/node_modules/.bin/lemon-drive +0 -21
  137. package/extensions/zalouser/node_modules/.bin/lemon-gmail +0 -21
  138. package/extensions/zalouser/node_modules/.bin/lemon-jira +0 -21
  139. package/extensions/zalouser/node_modules/.bin/lemon-notion +0 -21
  140. package/extensions/zalouser/node_modules/.bin/lemon-sheets +0 -21
  141. package/extensions/zalouser/node_modules/.bin/lemon-slack +0 -21
  142. package/extensions/zalouser/node_modules/.bin/lemon-slides +0 -21
  143. package/extensions/zalouser/node_modules/.bin/lemon-twitter +0 -21
  144. package/extensions/zalouser/node_modules/.bin/lemon-youtube +0 -21
  145. /package/skills/pdf/{FORMS.md → forms.md} +0 -0
  146. /package/skills/pdf/{REFERENCE.md → reference.md} +0 -0
@@ -0,0 +1,307 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Lemonade Canvas</title>
7
+ <script>
8
+ (() => {
9
+ try {
10
+ const params = new URLSearchParams(window.location.search);
11
+ const platform = (params.get("platform") || "").trim().toLowerCase();
12
+ if (platform) {
13
+ document.documentElement.dataset.platform = platform;
14
+ return;
15
+ }
16
+ if (/android/i.test(navigator.userAgent || "")) {
17
+ document.documentElement.dataset.platform = "android";
18
+ }
19
+ } catch (_) {}
20
+ })();
21
+ </script>
22
+ <style>
23
+ :root {
24
+ color-scheme: dark;
25
+ }
26
+ @media (prefers-reduced-motion: reduce) {
27
+ body::before,
28
+ body::after {
29
+ animation: none !important;
30
+ }
31
+ }
32
+ html,
33
+ body {
34
+ height: 100%;
35
+ margin: 0;
36
+ }
37
+ body {
38
+ font:
39
+ 14px system-ui,
40
+ -apple-system,
41
+ BlinkMacSystemFont,
42
+ "Roboto",
43
+ sans-serif;
44
+ background:
45
+ radial-gradient(1200px 900px at 15% 20%, rgba(42, 113, 255, 0.18), rgba(0, 0, 0, 0) 55%),
46
+ radial-gradient(900px 700px at 85% 30%, rgba(255, 0, 138, 0.14), rgba(0, 0, 0, 0) 60%),
47
+ radial-gradient(1000px 900px at 60% 90%, rgba(0, 209, 255, 0.1), rgba(0, 0, 0, 0) 60%),
48
+ #000;
49
+ color: #e5e7eb;
50
+ overflow: hidden;
51
+ }
52
+ :root[data-platform="android"] body {
53
+ background:
54
+ radial-gradient(1200px 900px at 15% 20%, rgba(42, 113, 255, 0.62), rgba(0, 0, 0, 0) 55%),
55
+ radial-gradient(900px 700px at 85% 30%, rgba(255, 0, 138, 0.52), rgba(0, 0, 0, 0) 60%),
56
+ radial-gradient(1000px 900px at 60% 90%, rgba(0, 209, 255, 0.48), rgba(0, 0, 0, 0) 60%),
57
+ #0b1328;
58
+ }
59
+ body::before {
60
+ content: "";
61
+ position: fixed;
62
+ inset: -20%;
63
+ background:
64
+ repeating-linear-gradient(
65
+ 0deg,
66
+ rgba(255, 255, 255, 0.03) 0,
67
+ rgba(255, 255, 255, 0.03) 1px,
68
+ transparent 1px,
69
+ transparent 48px
70
+ ),
71
+ repeating-linear-gradient(
72
+ 90deg,
73
+ rgba(255, 255, 255, 0.03) 0,
74
+ rgba(255, 255, 255, 0.03) 1px,
75
+ transparent 1px,
76
+ transparent 48px
77
+ );
78
+ transform: translate3d(0, 0, 0) rotate(-7deg);
79
+ will-change: transform, opacity;
80
+ -webkit-backface-visibility: hidden;
81
+ backface-visibility: hidden;
82
+ opacity: 0.45;
83
+ pointer-events: none;
84
+ animation: lemonade-grid-drift 140s ease-in-out infinite alternate;
85
+ }
86
+ :root[data-platform="android"] body::before {
87
+ opacity: 0.8;
88
+ }
89
+ body::after {
90
+ content: "";
91
+ position: fixed;
92
+ inset: -35%;
93
+ background:
94
+ radial-gradient(900px 700px at 30% 30%, rgba(42, 113, 255, 0.16), rgba(0, 0, 0, 0) 60%),
95
+ radial-gradient(800px 650px at 70% 35%, rgba(255, 0, 138, 0.12), rgba(0, 0, 0, 0) 62%),
96
+ radial-gradient(900px 800px at 55% 75%, rgba(0, 209, 255, 0.1), rgba(0, 0, 0, 0) 62%);
97
+ filter: blur(28px);
98
+ opacity: 0.52;
99
+ will-change: transform, opacity;
100
+ -webkit-backface-visibility: hidden;
101
+ backface-visibility: hidden;
102
+ transform: translate3d(0, 0, 0);
103
+ pointer-events: none;
104
+ animation: lemonade-glow-drift 110s ease-in-out infinite alternate;
105
+ }
106
+ :root[data-platform="android"] body::after {
107
+ opacity: 0.85;
108
+ }
109
+ @supports (mix-blend-mode: screen) {
110
+ body::after {
111
+ mix-blend-mode: screen;
112
+ }
113
+ }
114
+ @supports not (mix-blend-mode: screen) {
115
+ body::after {
116
+ opacity: 0.7;
117
+ }
118
+ }
119
+ @keyframes lemonade-grid-drift {
120
+ 0% {
121
+ transform: translate3d(-12px, 8px, 0) rotate(-7deg);
122
+ opacity: 0.4;
123
+ }
124
+ 50% {
125
+ transform: translate3d(10px, -7px, 0) rotate(-6.6deg);
126
+ opacity: 0.56;
127
+ }
128
+ 100% {
129
+ transform: translate3d(-8px, 6px, 0) rotate(-7.2deg);
130
+ opacity: 0.42;
131
+ }
132
+ }
133
+ @keyframes lemonade-glow-drift {
134
+ 0% {
135
+ transform: translate3d(-18px, 12px, 0) scale(1.02);
136
+ opacity: 0.4;
137
+ }
138
+ 50% {
139
+ transform: translate3d(14px, -10px, 0) scale(1.05);
140
+ opacity: 0.52;
141
+ }
142
+ 100% {
143
+ transform: translate3d(-10px, 8px, 0) scale(1.03);
144
+ opacity: 0.43;
145
+ }
146
+ }
147
+ canvas {
148
+ position: fixed;
149
+ inset: 0;
150
+ display: block;
151
+ width: 100vw;
152
+ height: 100vh;
153
+ touch-action: none;
154
+ z-index: 1;
155
+ }
156
+ :root[data-platform="android"] #lemonade-canvas {
157
+ background:
158
+ radial-gradient(1100px 800px at 20% 15%, rgba(42, 113, 255, 0.78), rgba(0, 0, 0, 0) 58%),
159
+ radial-gradient(900px 650px at 82% 28%, rgba(255, 0, 138, 0.66), rgba(0, 0, 0, 0) 62%),
160
+ radial-gradient(1000px 900px at 60% 88%, rgba(0, 209, 255, 0.58), rgba(0, 0, 0, 0) 62%),
161
+ #141c33;
162
+ }
163
+ #lemonade-status {
164
+ position: fixed;
165
+ inset: 0;
166
+ display: none;
167
+ align-items: center;
168
+ justify-content: center;
169
+ flex-direction: column;
170
+ padding: 24px;
171
+ box-sizing: border-box;
172
+ pointer-events: none;
173
+ z-index: 3;
174
+ }
175
+ #lemonade-status .card {
176
+ width: min(560px, 88vw);
177
+ text-align: left;
178
+ padding: 14px 16px 12px;
179
+ border-radius: 16px;
180
+ background: linear-gradient(140deg, rgba(23, 24, 35, 0.78), rgba(18, 19, 28, 0.55));
181
+ border: 1px solid rgba(255, 255, 255, 0.12);
182
+ box-shadow:
183
+ 0 16px 46px rgba(0, 0, 0, 0.52),
184
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
185
+ -webkit-backdrop-filter: blur(18px) saturate(140%);
186
+ backdrop-filter: blur(18px) saturate(140%);
187
+ }
188
+ #lemonade-status .title {
189
+ font:
190
+ 600 12px/1.2 -apple-system,
191
+ BlinkMacSystemFont,
192
+ "SF Pro Text",
193
+ system-ui,
194
+ sans-serif;
195
+ letter-spacing: 0.45px;
196
+ text-transform: uppercase;
197
+ color: rgba(255, 255, 255, 0.7);
198
+ }
199
+ #lemonade-status .subtitle {
200
+ margin-top: 8px;
201
+ font:
202
+ 500 13px/1.45 -apple-system,
203
+ BlinkMacSystemFont,
204
+ "SF Pro Text",
205
+ system-ui,
206
+ sans-serif;
207
+ color: rgba(255, 255, 255, 0.9);
208
+ white-space: pre-wrap;
209
+ overflow-wrap: anywhere;
210
+ }
211
+ lemonade-a2ui-host {
212
+ display: block;
213
+ height: 100%;
214
+ position: fixed;
215
+ inset: 0;
216
+ z-index: 4;
217
+ --lemonade-a2ui-inset-top: 28px;
218
+ --lemonade-a2ui-inset-right: 0px;
219
+ --lemonade-a2ui-inset-bottom: 0px;
220
+ --lemonade-a2ui-inset-left: 0px;
221
+ --lemonade-a2ui-scroll-pad-bottom: 0px;
222
+ --lemonade-a2ui-status-top: calc(50% - 18px);
223
+ --lemonade-a2ui-empty-top: 18px;
224
+ }
225
+ </style>
226
+ </head>
227
+ <body>
228
+ <canvas id="lemonade-canvas"></canvas>
229
+ <div id="lemonade-status">
230
+ <div class="card">
231
+ <div class="title" id="lemonade-status-title">Ready</div>
232
+ <div class="subtitle" id="lemonade-status-subtitle">Waiting for agent</div>
233
+ </div>
234
+ </div>
235
+ <lemonade-a2ui-host></lemonade-a2ui-host>
236
+ <script src="a2ui.bundle.js"></script>
237
+ <script>
238
+ (() => {
239
+ const canvas = document.getElementById("lemonade-canvas");
240
+ const ctx = canvas.getContext("2d");
241
+ const statusEl = document.getElementById("lemonade-status");
242
+ const titleEl = document.getElementById("lemonade-status-title");
243
+ const subtitleEl = document.getElementById("lemonade-status-subtitle");
244
+ const debugStatusEnabledByQuery = (() => {
245
+ try {
246
+ const params = new URLSearchParams(window.location.search);
247
+ const raw = params.get("debugStatus") ?? params.get("debug");
248
+ if (!raw) return false;
249
+ const normalized = String(raw).trim().toLowerCase();
250
+ return normalized === "1" || normalized === "true" || normalized === "yes";
251
+ } catch (_) {
252
+ return false;
253
+ }
254
+ })();
255
+ let debugStatusEnabled = debugStatusEnabledByQuery;
256
+
257
+ function resize() {
258
+ const dpr = window.devicePixelRatio || 1;
259
+ const w = Math.max(1, Math.floor(window.innerWidth * dpr));
260
+ const h = Math.max(1, Math.floor(window.innerHeight * dpr));
261
+ canvas.width = w;
262
+ canvas.height = h;
263
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
264
+ }
265
+
266
+ window.addEventListener("resize", resize);
267
+ resize();
268
+
269
+ const setDebugStatusEnabled = (enabled) => {
270
+ debugStatusEnabled = !!enabled;
271
+ if (!statusEl) return;
272
+ if (!debugStatusEnabled) {
273
+ statusEl.style.display = "none";
274
+ }
275
+ };
276
+
277
+ if (statusEl && !debugStatusEnabled) {
278
+ statusEl.style.display = "none";
279
+ }
280
+
281
+ window.__lemonade = {
282
+ canvas,
283
+ ctx,
284
+ setDebugStatusEnabled,
285
+ setStatus: (title, subtitle) => {
286
+ if (!statusEl || !debugStatusEnabled) return;
287
+ if (!title && !subtitle) {
288
+ statusEl.style.display = "none";
289
+ return;
290
+ }
291
+ statusEl.style.display = "flex";
292
+ if (titleEl && typeof title === "string") titleEl.textContent = title;
293
+ if (subtitleEl && typeof subtitle === "string") subtitleEl.textContent = subtitle;
294
+ if (!debugStatusEnabled) {
295
+ clearTimeout(window.__statusTimeout);
296
+ window.__statusTimeout = setTimeout(() => {
297
+ statusEl.style.display = "none";
298
+ }, 3000);
299
+ } else {
300
+ clearTimeout(window.__statusTimeout);
301
+ }
302
+ },
303
+ };
304
+ })();
305
+ </script>
306
+ </body>
307
+ </html>