epsimo-agent 0.1.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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/SKILL.md +85 -0
  3. package/assets/example_asset.txt +24 -0
  4. package/epsimo/__init__.py +3 -0
  5. package/epsimo/__main__.py +4 -0
  6. package/epsimo/auth.py +143 -0
  7. package/epsimo/cli.py +586 -0
  8. package/epsimo/client.py +53 -0
  9. package/epsimo/resources/assistants.py +47 -0
  10. package/epsimo/resources/credits.py +16 -0
  11. package/epsimo/resources/db.py +31 -0
  12. package/epsimo/resources/files.py +39 -0
  13. package/epsimo/resources/projects.py +30 -0
  14. package/epsimo/resources/threads.py +83 -0
  15. package/epsimo/templates/components/AuthModal/AuthModal.module.css +39 -0
  16. package/epsimo/templates/components/AuthModal/AuthModal.tsx +138 -0
  17. package/epsimo/templates/components/BuyCredits/BuyCreditsModal.module.css +96 -0
  18. package/epsimo/templates/components/BuyCredits/BuyCreditsModal.tsx +132 -0
  19. package/epsimo/templates/components/BuyCredits/CreditsDisplay.tsx +101 -0
  20. package/epsimo/templates/components/ThreadChat/ThreadChat.module.css +551 -0
  21. package/epsimo/templates/components/ThreadChat/ThreadChat.tsx +862 -0
  22. package/epsimo/templates/components/ThreadChat/components/ToolRenderers.module.css +509 -0
  23. package/epsimo/templates/components/ThreadChat/components/ToolRenderers.tsx +322 -0
  24. package/epsimo/templates/next-mvp/app/globals.css.tmpl +20 -0
  25. package/epsimo/templates/next-mvp/app/layout.tsx.tmpl +22 -0
  26. package/epsimo/templates/next-mvp/app/page.module.css.tmpl +84 -0
  27. package/epsimo/templates/next-mvp/app/page.tsx.tmpl +43 -0
  28. package/epsimo/templates/next-mvp/epsimo.yaml.tmpl +12 -0
  29. package/epsimo/templates/next-mvp/package.json.tmpl +26 -0
  30. package/epsimo/tools/library.yaml +51 -0
  31. package/package.json +27 -0
  32. package/references/api_reference.md +34 -0
  33. package/references/virtual_db_guide.md +57 -0
  34. package/requirements.txt +2 -0
  35. package/scripts/assistant.py +165 -0
  36. package/scripts/auth.py +195 -0
  37. package/scripts/credits.py +107 -0
  38. package/scripts/debug_run.py +41 -0
  39. package/scripts/example.py +19 -0
  40. package/scripts/files.py +73 -0
  41. package/scripts/find_thread.py +55 -0
  42. package/scripts/project.py +60 -0
  43. package/scripts/run.py +75 -0
  44. package/scripts/test_all_skills.py +387 -0
  45. package/scripts/test_sdk.py +83 -0
  46. package/scripts/test_streaming.py +167 -0
  47. package/scripts/test_vdb.py +65 -0
  48. package/scripts/thread.py +77 -0
  49. package/scripts/verify_skill.py +87 -0
@@ -0,0 +1,509 @@
1
+ /* Modern Tool Calling Styles - ChatGPT-like */
2
+
3
+ /* Tool Usage Container */
4
+ .toolUsageContainer {
5
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.05) 0%, rgba(139, 92, 246, 0.05) 100%);
6
+ border: 1px solid rgba(99, 102, 241, 0.15);
7
+ border-radius: 12px;
8
+ padding: 12px;
9
+ margin: 8px 0;
10
+ animation: fadeSlideIn 0.3s ease-out;
11
+ }
12
+
13
+ .toolUsageHeader {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 8px;
17
+ font-size: 12px;
18
+ font-weight: 600;
19
+ color: var(--text-secondary);
20
+ text-transform: uppercase;
21
+ letter-spacing: 0.5px;
22
+ margin-bottom: 10px;
23
+ padding-bottom: 8px;
24
+ border-bottom: 1px solid rgba(99, 102, 241, 0.1);
25
+ }
26
+
27
+ .toolUsageHeader svg {
28
+ color: var(--color-primary);
29
+ }
30
+
31
+ .toolCardList {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 8px;
35
+ }
36
+
37
+ /* Tool Card */
38
+ .toolCard {
39
+ background: var(--background-surface);
40
+ border: 1px solid var(--border-color);
41
+ border-radius: 10px;
42
+ overflow: hidden;
43
+ transition: all 0.2s ease;
44
+ animation: cardSlideIn 0.25s ease-out;
45
+ }
46
+
47
+ .toolCard:hover {
48
+ border-color: rgba(99, 102, 241, 0.3);
49
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
50
+ }
51
+
52
+ /* Status-based styling */
53
+ .status_running {
54
+ border-color: rgba(59, 130, 246, 0.4);
55
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.03) 0%, transparent 100%);
56
+ }
57
+
58
+ .status_success {
59
+ border-color: rgba(34, 197, 94, 0.3);
60
+ }
61
+
62
+ .status_error {
63
+ border-color: rgba(239, 68, 68, 0.3);
64
+ }
65
+
66
+ /* Tool Header */
67
+ .toolHeader {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: space-between;
71
+ padding: 10px 14px;
72
+ cursor: pointer;
73
+ user-select: none;
74
+ transition: background 0.15s ease;
75
+ }
76
+
77
+ .toolHeader:hover {
78
+ background: rgba(0, 0, 0, 0.02);
79
+ }
80
+
81
+ .toolHeaderLeft {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 10px;
85
+ }
86
+
87
+ .toolHeaderRight {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 12px;
91
+ }
92
+
93
+ /* Status Indicator */
94
+ .statusIndicator {
95
+ width: 20px;
96
+ height: 20px;
97
+ border-radius: 50%;
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ flex-shrink: 0;
102
+ }
103
+
104
+ .indicator_pending {
105
+ background: rgba(156, 163, 175, 0.15);
106
+ }
107
+
108
+ .indicator_running {
109
+ background: rgba(59, 130, 246, 0.15);
110
+ }
111
+
112
+ .indicator_success {
113
+ background: rgba(34, 197, 94, 0.15);
114
+ color: #22c55e;
115
+ }
116
+
117
+ .indicator_error {
118
+ background: rgba(239, 68, 68, 0.15);
119
+ color: #ef4444;
120
+ }
121
+
122
+ /* Pulsing Dot Animation */
123
+ .pulsingDot {
124
+ width: 8px;
125
+ height: 8px;
126
+ background: #3b82f6;
127
+ border-radius: 50%;
128
+ animation: pulse 1.5s ease-in-out infinite;
129
+ }
130
+
131
+ .pendingDot {
132
+ width: 6px;
133
+ height: 6px;
134
+ background: #9ca3af;
135
+ border-radius: 50%;
136
+ }
137
+
138
+ @keyframes pulse {
139
+
140
+ 0%,
141
+ 100% {
142
+ transform: scale(1);
143
+ opacity: 1;
144
+ }
145
+
146
+ 50% {
147
+ transform: scale(1.3);
148
+ opacity: 0.7;
149
+ }
150
+ }
151
+
152
+ /* Tool Icon & Name */
153
+ .toolIcon {
154
+ font-size: 16px;
155
+ line-height: 1;
156
+ }
157
+
158
+ .toolName {
159
+ font-size: 13px;
160
+ font-weight: 600;
161
+ color: var(--text-primary);
162
+ }
163
+
164
+ /* Args Summary */
165
+ .argsSummary {
166
+ font-size: 12px;
167
+ color: var(--text-tertiary);
168
+ max-width: 200px;
169
+ overflow: hidden;
170
+ text-overflow: ellipsis;
171
+ white-space: nowrap;
172
+ }
173
+
174
+ /* Chevron */
175
+ .chevron {
176
+ color: var(--text-tertiary);
177
+ transition: transform 0.2s ease;
178
+ flex-shrink: 0;
179
+ }
180
+
181
+ .chevronExpanded {
182
+ transform: rotate(180deg);
183
+ }
184
+
185
+ .miniChevron {
186
+ color: var(--text-tertiary);
187
+ transition: transform 0.2s ease;
188
+ }
189
+
190
+ /* Tool Body */
191
+ .toolBody {
192
+ padding: 0 14px 14px;
193
+ animation: expandIn 0.2s ease-out;
194
+ }
195
+
196
+ /* Tool Section */
197
+ .toolSection {
198
+ margin-top: 10px;
199
+ }
200
+
201
+ .sectionHeader {
202
+ display: flex;
203
+ align-items: center;
204
+ justify-content: space-between;
205
+ width: 100%;
206
+ padding: 6px 0;
207
+ background: none;
208
+ border: none;
209
+ cursor: pointer;
210
+ font-family: inherit;
211
+ }
212
+
213
+ .sectionTitle {
214
+ font-size: 11px;
215
+ font-weight: 600;
216
+ color: var(--text-secondary);
217
+ text-transform: uppercase;
218
+ letter-spacing: 0.5px;
219
+ }
220
+
221
+ .sectionContent {
222
+ margin-top: 6px;
223
+ background: var(--background-base);
224
+ border: 1px solid var(--border-color);
225
+ border-radius: 8px;
226
+ padding: 10px 12px;
227
+ overflow: hidden;
228
+ }
229
+
230
+ /* JSON Viewer */
231
+ .jsonViewer {
232
+ position: relative;
233
+ }
234
+
235
+ .jsonContent {
236
+ font-family: 'SF Mono', 'Monaco', 'Consolas', 'Liberation Mono', monospace;
237
+ font-size: 12px;
238
+ line-height: 1.5;
239
+ color: var(--text-primary);
240
+ white-space: pre-wrap;
241
+ word-break: break-word;
242
+ margin: 0;
243
+ max-height: none;
244
+ overflow: visible;
245
+ }
246
+
247
+ .jsonContent.collapsed {
248
+ max-height: 100px;
249
+ overflow: hidden;
250
+ mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
251
+ -webkit-mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
252
+ }
253
+
254
+ .expandButton {
255
+ display: block;
256
+ width: 100%;
257
+ padding: 8px;
258
+ margin-top: 4px;
259
+ background: none;
260
+ border: none;
261
+ border-top: 1px solid var(--border-color);
262
+ color: var(--color-primary);
263
+ font-size: 12px;
264
+ font-weight: 500;
265
+ cursor: pointer;
266
+ transition: background 0.15s ease;
267
+ }
268
+
269
+ .expandButton:hover {
270
+ background: rgba(99, 102, 241, 0.05);
271
+ }
272
+
273
+ /* Running Status */
274
+ .runningStatus {
275
+ margin-top: 12px;
276
+ padding: 10px;
277
+ background: rgba(59, 130, 246, 0.05);
278
+ border-radius: 8px;
279
+ }
280
+
281
+ .runningText {
282
+ display: block;
283
+ font-size: 12px;
284
+ color: #3b82f6;
285
+ margin-top: 8px;
286
+ font-weight: 500;
287
+ }
288
+
289
+ /* Progress Bar */
290
+ .progressBar {
291
+ height: 3px;
292
+ background: rgba(59, 130, 246, 0.15);
293
+ border-radius: 2px;
294
+ overflow: hidden;
295
+ }
296
+
297
+ .progressFill {
298
+ height: 100%;
299
+ width: 30%;
300
+ background: linear-gradient(90deg, #3b82f6, #8b5cf6);
301
+ border-radius: 2px;
302
+ animation: progressSlide 1.5s ease-in-out infinite;
303
+ }
304
+
305
+ @keyframes progressSlide {
306
+ 0% {
307
+ transform: translateX(-100%);
308
+ width: 30%;
309
+ }
310
+
311
+ 50% {
312
+ width: 60%;
313
+ }
314
+
315
+ 100% {
316
+ transform: translateX(400%);
317
+ width: 30%;
318
+ }
319
+ }
320
+
321
+ /* Executing Card (Standalone) */
322
+ .executingCard {
323
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.08) 0%, rgba(139, 92, 246, 0.08) 100%);
324
+ border: 1px solid rgba(59, 130, 246, 0.2);
325
+ border-radius: 10px;
326
+ padding: 12px 14px;
327
+ animation: fadeSlideIn 0.3s ease-out;
328
+ }
329
+
330
+ .executingHeader {
331
+ display: flex;
332
+ align-items: center;
333
+ gap: 10px;
334
+ margin-bottom: 10px;
335
+ }
336
+
337
+ .executingName {
338
+ font-size: 13px;
339
+ font-weight: 600;
340
+ color: var(--text-primary);
341
+ }
342
+
343
+ .executingProgress {
344
+ margin-top: 8px;
345
+ }
346
+
347
+ /* Legacy Response (for backward compatibility) */
348
+ .legacyResponse {
349
+ background: rgba(34, 197, 94, 0.05);
350
+ border: 1px solid rgba(34, 197, 94, 0.2);
351
+ border-radius: 8px;
352
+ padding: 10px 12px;
353
+ margin-top: 8px;
354
+ }
355
+
356
+ .responseHeader {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: 6px;
360
+ font-size: 11px;
361
+ font-weight: 600;
362
+ color: #22c55e;
363
+ text-transform: uppercase;
364
+ letter-spacing: 0.5px;
365
+ margin-bottom: 8px;
366
+ }
367
+
368
+ .responseContent {
369
+ background: var(--background-base);
370
+ border-radius: 6px;
371
+ padding: 10px;
372
+ overflow-x: auto;
373
+ }
374
+
375
+ .responseContent pre {
376
+ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
377
+ font-size: 12px;
378
+ line-height: 1.5;
379
+ color: var(--text-primary);
380
+ white-space: pre-wrap;
381
+ word-break: break-word;
382
+ margin: 0;
383
+ }
384
+
385
+ /* Animations */
386
+ @keyframes fadeSlideIn {
387
+ from {
388
+ opacity: 0;
389
+ transform: translateY(-8px);
390
+ }
391
+
392
+ to {
393
+ opacity: 1;
394
+ transform: translateY(0);
395
+ }
396
+ }
397
+
398
+ @keyframes cardSlideIn {
399
+ from {
400
+ opacity: 0;
401
+ transform: translateX(-10px);
402
+ }
403
+
404
+ to {
405
+ opacity: 1;
406
+ transform: translateX(0);
407
+ }
408
+ }
409
+
410
+ @keyframes expandIn {
411
+ from {
412
+ opacity: 0;
413
+ max-height: 0;
414
+ }
415
+
416
+ to {
417
+ opacity: 1;
418
+ max-height: 500px;
419
+ }
420
+ }
421
+
422
+ /* Dark mode adjustments */
423
+ @media (prefers-color-scheme: dark) {
424
+ .toolCard {
425
+ background: rgba(30, 30, 35, 0.8);
426
+ }
427
+
428
+ .toolHeader:hover {
429
+ background: rgba(255, 255, 255, 0.03);
430
+ }
431
+
432
+ .sectionContent {
433
+ background: rgba(0, 0, 0, 0.2);
434
+ }
435
+ }
436
+
437
+ /* Legacy styles for backward compatibility */
438
+ .toolContainer {
439
+ background-color: var(--background-surface-hover);
440
+ border-radius: var(--radius-lg);
441
+ padding: var(--spacing-4);
442
+ margin-bottom: var(--spacing-3);
443
+ border: 1px solid var(--border-color);
444
+ }
445
+
446
+ .header {
447
+ font-size: 0.75rem;
448
+ font-weight: 600;
449
+ color: var(--text-secondary);
450
+ margin-bottom: var(--spacing-3);
451
+ display: flex;
452
+ align-items: center;
453
+ gap: var(--spacing-2);
454
+ }
455
+
456
+ .requestBlock {
457
+ margin-bottom: var(--spacing-3);
458
+ }
459
+
460
+ .argsBox {
461
+ margin-top: var(--spacing-2);
462
+ background-color: var(--background-base);
463
+ border: 1px solid var(--border-color);
464
+ border-radius: var(--radius-md);
465
+ padding: var(--spacing-3);
466
+ overflow-x: auto;
467
+ }
468
+
469
+ .codeBlock {
470
+ font-family: 'Monaco', 'Consolas', monospace;
471
+ font-size: 0.8rem;
472
+ color: var(--text-primary);
473
+ white-space: pre-wrap;
474
+ word-break: break-all;
475
+ margin: 0;
476
+ }
477
+
478
+ .responseBlock {
479
+ margin-left: var(--spacing-4);
480
+ border-left: 2px solid var(--border-color);
481
+ padding-left: var(--spacing-3);
482
+ margin-top: var(--spacing-2);
483
+ }
484
+
485
+ .executing {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: var(--spacing-2);
489
+ font-size: 0.8rem;
490
+ color: var(--text-tertiary);
491
+ font-style: italic;
492
+ margin-left: var(--spacing-4);
493
+ margin-top: var(--spacing-2);
494
+ }
495
+
496
+ .spinner {
497
+ width: 14px;
498
+ height: 14px;
499
+ border: 2px solid var(--border-color);
500
+ border-top: 2px solid var(--color-primary);
501
+ border-radius: 50%;
502
+ animation: spin 1s linear infinite;
503
+ }
504
+
505
+ @keyframes spin {
506
+ to {
507
+ transform: rotate(360deg);
508
+ }
509
+ }