@happyvertical/smrt-agents 0.30.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 (94) hide show
  1. package/AGENTS.md +96 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +139 -0
  5. package/dist/__smrt-register__.d.ts +2 -0
  6. package/dist/__smrt-register__.d.ts.map +1 -0
  7. package/dist/agent.d.ts +545 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/ai-config.d.ts +27 -0
  10. package/dist/ai-config.d.ts.map +1 -0
  11. package/dist/chunks/config-BYbOxt24.js +179 -0
  12. package/dist/chunks/config-BYbOxt24.js.map +1 -0
  13. package/dist/chunks/manifest-utils-DLXfTOq0.js +69 -0
  14. package/dist/chunks/manifest-utils-DLXfTOq0.js.map +1 -0
  15. package/dist/config.d.ts +117 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/identity.d.ts +19 -0
  18. package/dist/identity.d.ts.map +1 -0
  19. package/dist/index.d.ts +13 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +1477 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/interests.d.ts +291 -0
  24. package/dist/interests.d.ts.map +1 -0
  25. package/dist/manifest.json +2012 -0
  26. package/dist/playground.d.ts +2 -0
  27. package/dist/playground.d.ts.map +1 -0
  28. package/dist/playground.js +156 -0
  29. package/dist/playground.js.map +1 -0
  30. package/dist/schedule.d.ts +168 -0
  31. package/dist/schedule.d.ts.map +1 -0
  32. package/dist/server/action-types.d.ts +65 -0
  33. package/dist/server/action-types.d.ts.map +1 -0
  34. package/dist/server/action-types.js +2 -0
  35. package/dist/server/action-types.js.map +1 -0
  36. package/dist/server/api-routes.d.ts +57 -0
  37. package/dist/server/api-routes.d.ts.map +1 -0
  38. package/dist/server/config-loader.d.ts +17 -0
  39. package/dist/server/config-loader.d.ts.map +1 -0
  40. package/dist/server/index.d.ts +34 -0
  41. package/dist/server/index.d.ts.map +1 -0
  42. package/dist/server/manifest-utils.d.ts +63 -0
  43. package/dist/server/manifest-utils.d.ts.map +1 -0
  44. package/dist/server/serialization.d.ts +58 -0
  45. package/dist/server/serialization.d.ts.map +1 -0
  46. package/dist/server.js +105 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/smrt-knowledge.json +983 -0
  49. package/dist/summary-article.d.ts +30 -0
  50. package/dist/summary-article.d.ts.map +1 -0
  51. package/dist/summary-article.js +2 -0
  52. package/dist/summary-article.js.map +1 -0
  53. package/dist/svelte/components/AgentDashboard.svelte +250 -0
  54. package/dist/svelte/components/AgentDashboard.svelte.d.ts +21 -0
  55. package/dist/svelte/components/AgentDashboard.svelte.d.ts.map +1 -0
  56. package/dist/svelte/components/AgentRunHistory.svelte +225 -0
  57. package/dist/svelte/components/AgentRunHistory.svelte.d.ts +16 -0
  58. package/dist/svelte/components/AgentRunHistory.svelte.d.ts.map +1 -0
  59. package/dist/svelte/components/AgentScheduleForm.svelte +381 -0
  60. package/dist/svelte/components/AgentScheduleForm.svelte.d.ts +19 -0
  61. package/dist/svelte/components/AgentScheduleForm.svelte.d.ts.map +1 -0
  62. package/dist/svelte/components/AgentScheduleList.svelte +370 -0
  63. package/dist/svelte/components/AgentScheduleList.svelte.d.ts +24 -0
  64. package/dist/svelte/components/AgentScheduleList.svelte.d.ts.map +1 -0
  65. package/dist/svelte/components/ScheduleStatusBadge.svelte +23 -0
  66. package/dist/svelte/components/ScheduleStatusBadge.svelte.d.ts +9 -0
  67. package/dist/svelte/components/ScheduleStatusBadge.svelte.d.ts.map +1 -0
  68. package/dist/svelte/i18n.d.ts +33 -0
  69. package/dist/svelte/i18n.d.ts.map +1 -0
  70. package/dist/svelte/i18n.js +37 -0
  71. package/dist/svelte/index.d.ts +23 -0
  72. package/dist/svelte/index.d.ts.map +1 -0
  73. package/dist/svelte/index.js +26 -0
  74. package/dist/svelte/playground.d.ts +196 -0
  75. package/dist/svelte/playground.d.ts.map +1 -0
  76. package/dist/svelte/playground.js +151 -0
  77. package/dist/svelte/types.d.ts +155 -0
  78. package/dist/svelte/types.d.ts.map +1 -0
  79. package/dist/svelte/types.js +116 -0
  80. package/dist/tenant-agent.d.ts +106 -0
  81. package/dist/tenant-agent.d.ts.map +1 -0
  82. package/dist/types.d.ts +5 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist/ui.d.ts +298 -0
  87. package/dist/ui.d.ts.map +1 -0
  88. package/dist/ui.js +133 -0
  89. package/dist/ui.js.map +1 -0
  90. package/dist/vite-plugin.d.ts +61 -0
  91. package/dist/vite-plugin.d.ts.map +1 -0
  92. package/dist/vite-plugin.js +173 -0
  93. package/dist/vite-plugin.js.map +1 -0
  94. package/package.json +104 -0
@@ -0,0 +1,381 @@
1
+ <script lang="ts">
2
+ /**
3
+ * AgentScheduleForm - Create or edit an agent schedule
4
+ */
5
+
6
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
7
+ import { Button, Card } from '@happyvertical/smrt-ui/ui';
8
+ import { M } from '../i18n.js';
9
+ import type { ScheduleFormData } from '../types.js';
10
+
11
+ const { t } = useI18n();
12
+
13
+ export interface Props {
14
+ /** Initial form data (for editing) */
15
+ initialData?: Partial<ScheduleFormData>;
16
+ /** Available agent types */
17
+ agentTypes?: string[];
18
+ /** Submit callback */
19
+ onSubmit?: (data: ScheduleFormData) => void;
20
+ /** Cancel callback */
21
+ onCancel?: () => void;
22
+ /** Loading state */
23
+ loading?: boolean;
24
+ /** Edit mode */
25
+ editMode?: boolean;
26
+ }
27
+
28
+ let {
29
+ initialData = {},
30
+ agentTypes = [],
31
+ onSubmit,
32
+ onCancel,
33
+ loading = false,
34
+ editMode = false,
35
+ }: Props = $props();
36
+
37
+ function getInitialFormState(data: Partial<ScheduleFormData> = {}) {
38
+ return {
39
+ agentType: data.agentType ?? '',
40
+ agentId: data.agentId ?? '',
41
+ cron: data.cron ?? '',
42
+ timezone: data.timezone ?? 'UTC',
43
+ enabled: data.enabled ?? true,
44
+ maxConcurrent: data.maxConcurrent ?? 1,
45
+ timeout: data.timeout ?? 3600000,
46
+ method: data.method ?? 'run',
47
+ };
48
+ }
49
+
50
+ let agentType = $state('');
51
+ let agentId = $state('');
52
+ let cron = $state('');
53
+ let timezone = $state('UTC');
54
+ let enabled = $state(true);
55
+ let maxConcurrent = $state(1);
56
+ let timeout = $state(3600000);
57
+ let method = $state('run');
58
+ let appliedInitialData: Partial<ScheduleFormData> | undefined;
59
+
60
+ $effect(() => {
61
+ if (appliedInitialData === initialData) {
62
+ return;
63
+ }
64
+
65
+ appliedInitialData = initialData;
66
+
67
+ const next = getInitialFormState(initialData);
68
+ agentType = next.agentType;
69
+ agentId = next.agentId;
70
+ cron = next.cron;
71
+ timezone = next.timezone;
72
+ enabled = next.enabled;
73
+ maxConcurrent = next.maxConcurrent;
74
+ timeout = next.timeout;
75
+ method = next.method;
76
+ });
77
+
78
+ // Common cron presets
79
+ const cronPresets = [
80
+ { label: 'Every hour', value: '0 * * * *' },
81
+ { label: 'Every 15 minutes', value: '*/15 * * * *' },
82
+ { label: 'Daily at midnight', value: '0 0 * * *' },
83
+ { label: 'Daily at 2 AM', value: '0 2 * * *' },
84
+ { label: 'Weekly on Sunday', value: '0 0 * * 0' },
85
+ { label: 'Monthly on 1st', value: '0 0 1 * *' },
86
+ ];
87
+
88
+ // Common timezones
89
+ const timezones = [
90
+ 'UTC',
91
+ 'America/New_York',
92
+ 'America/Chicago',
93
+ 'America/Denver',
94
+ 'America/Los_Angeles',
95
+ 'Europe/London',
96
+ 'Europe/Paris',
97
+ 'Asia/Tokyo',
98
+ 'Australia/Sydney',
99
+ ];
100
+
101
+ // Validation
102
+ const isValid = $derived(agentType.trim() !== '' && cron.trim() !== '');
103
+
104
+ function handleSubmit(event: Event) {
105
+ event.preventDefault();
106
+ if (!isValid || loading) return;
107
+
108
+ const data: ScheduleFormData = {
109
+ agentType: agentType.trim(),
110
+ cron: cron.trim(),
111
+ timezone,
112
+ enabled,
113
+ maxConcurrent,
114
+ timeout,
115
+ method: method.trim() || 'run',
116
+ };
117
+
118
+ if (agentId.trim()) {
119
+ data.agentId = agentId.trim();
120
+ }
121
+
122
+ onSubmit?.(data);
123
+ }
124
+
125
+ function handleCronPreset(preset: string) {
126
+ cron = preset;
127
+ }
128
+ </script>
129
+
130
+ <Card>
131
+ {#snippet header()}
132
+ <h2>{editMode ? 'Edit Schedule' : 'Create Schedule'}</h2>
133
+ {/snippet}
134
+
135
+ <form class="schedule-form" onsubmit={handleSubmit}>
136
+ <div class="form-grid">
137
+ <!-- Agent Type -->
138
+ <div class="form-field">
139
+ <label for="agentType">{t(M['agents.schedule_form.agent_type'])}</label>
140
+ {#if agentTypes.length > 0}
141
+ <select id="agentType" bind:value={agentType} required disabled={loading}>
142
+ <option value="">{t(M['agents.schedule_form.select_agent_type'])}</option>
143
+ {#each agentTypes as type}
144
+ <option value={type}>{type}</option>
145
+ {/each}
146
+ </select>
147
+ {:else}
148
+ <input
149
+ type="text"
150
+ id="agentType"
151
+ bind:value={agentType}
152
+ placeholder={t(M['agents.schedule_form.agent_type_placeholder'])}
153
+ required
154
+ disabled={loading}
155
+ />
156
+ {/if}
157
+ </div>
158
+
159
+ <!-- Agent ID (optional) -->
160
+ <div class="form-field">
161
+ <label for="agentId">{t(M['agents.schedule_form.agent_id'])}</label>
162
+ <input
163
+ type="text"
164
+ id="agentId"
165
+ bind:value={agentId}
166
+ placeholder={t(M['agents.schedule_form.agent_id_placeholder'])}
167
+ disabled={loading}
168
+ />
169
+ <small>{t(M['agents.schedule_form.agent_id_hint'])}</small>
170
+ </div>
171
+
172
+ <!-- Method -->
173
+ <div class="form-field">
174
+ <label for="method">Method</label>
175
+ <input
176
+ type="text"
177
+ id="method"
178
+ bind:value={method}
179
+ placeholder={t(M['agents.schedule_form.method_placeholder'])}
180
+ disabled={loading}
181
+ />
182
+ <small>{t(M['agents.schedule_form.method_hint'])}</small>
183
+ </div>
184
+
185
+ <!-- Cron Expression -->
186
+ <div class="form-field form-field--full">
187
+ <label for="cron">{t(M['agents.schedule_form.cron_schedule'])}</label>
188
+ <input
189
+ type="text"
190
+ id="cron"
191
+ bind:value={cron}
192
+ placeholder="0 2 * * *"
193
+ required
194
+ disabled={loading}
195
+ />
196
+ <div class="cron-presets">
197
+ {#each cronPresets as preset}
198
+ <button
199
+ type="button"
200
+ class="preset-btn"
201
+ onclick={() => handleCronPreset(preset.value)}
202
+ disabled={loading}
203
+ >
204
+ {preset.label}
205
+ </button>
206
+ {/each}
207
+ </div>
208
+ <small>{t(M['agents.schedule_form.cron_hint'])}</small>
209
+ </div>
210
+
211
+ <!-- Timezone -->
212
+ <div class="form-field">
213
+ <label for="timezone">Timezone</label>
214
+ <select id="timezone" bind:value={timezone} disabled={loading}>
215
+ {#each timezones as tz}
216
+ <option value={tz}>{tz}</option>
217
+ {/each}
218
+ </select>
219
+ </div>
220
+
221
+ <!-- Max Concurrent -->
222
+ <div class="form-field">
223
+ <label for="maxConcurrent">{t(M['agents.schedule_form.max_concurrent'])}</label>
224
+ <input
225
+ type="number"
226
+ id="maxConcurrent"
227
+ bind:value={maxConcurrent}
228
+ min="1"
229
+ max="10"
230
+ disabled={loading}
231
+ />
232
+ <small>{t(M['agents.schedule_form.max_concurrent_hint'])}</small>
233
+ </div>
234
+
235
+ <!-- Timeout -->
236
+ <div class="form-field">
237
+ <label for="timeout">Timeout (ms)</label>
238
+ <input
239
+ type="number"
240
+ id="timeout"
241
+ bind:value={timeout}
242
+ min="60000"
243
+ step="60000"
244
+ disabled={loading}
245
+ />
246
+ <small>{(timeout / 60000).toFixed(0)} minutes</small>
247
+ </div>
248
+
249
+ <!-- Enabled -->
250
+ <div class="form-field form-field--checkbox">
251
+ <label>
252
+ <input type="checkbox" bind:checked={enabled} disabled={loading} />
253
+ {t(M['agents.schedule_form.enable_schedule_immediately'])}
254
+ </label>
255
+ </div>
256
+ </div>
257
+
258
+ <div class="form-actions">
259
+ {#if onCancel}
260
+ <Button variant="secondary" onclick={onCancel} disabled={loading}>
261
+ Cancel
262
+ </Button>
263
+ {/if}
264
+ <Button type="submit" disabled={!isValid || loading}>
265
+ {loading ? 'Saving...' : editMode ? 'Update Schedule' : 'Create Schedule'}
266
+ </Button>
267
+ </div>
268
+ </form>
269
+ </Card>
270
+
271
+ <style>
272
+ .schedule-form {
273
+ padding: var(--smrt-spacing-sm, 0.5rem) 0;
274
+ }
275
+
276
+ .form-grid {
277
+ display: grid;
278
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
279
+ gap: var(--smrt-spacing-md, 1rem);
280
+ }
281
+
282
+ .form-field {
283
+ display: flex;
284
+ flex-direction: column;
285
+ gap: var(--smrt-spacing-xs, 0.25rem);
286
+ }
287
+
288
+ .form-field--full {
289
+ grid-column: 1 / -1;
290
+ }
291
+
292
+ .form-field--checkbox {
293
+ flex-direction: row;
294
+ align-items: center;
295
+ gap: var(--smrt-spacing-sm, 0.5rem);
296
+ }
297
+
298
+ .form-field--checkbox label {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: var(--smrt-spacing-sm, 0.5rem);
302
+ cursor: pointer;
303
+ }
304
+
305
+ .form-field label {
306
+ font-weight: var(--smrt-typography-weight-medium, 500);
307
+ font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
308
+ color: var(--smrt-color-on-surface, #1a1c1e);
309
+ }
310
+
311
+ .form-field input,
312
+ .form-field select {
313
+ padding: var(--smrt-spacing-sm, 0.5rem);
314
+ border: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
315
+ border-radius: var(--smrt-radius-medium, 0.5rem);
316
+ font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
317
+ transition: border-color var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
318
+ }
319
+
320
+ .form-field input:focus,
321
+ .form-field select:focus {
322
+ outline: none;
323
+ border-color: var(--smrt-color-primary, #005ac1);
324
+ box-shadow: 0 0 0 3px var(--smrt-color-primary-container, rgba(0, 90, 193, 0.1));
325
+ }
326
+
327
+ .form-field input:disabled,
328
+ .form-field select:disabled {
329
+ background: var(--smrt-color-surface-container, #f3f4f6);
330
+ cursor: not-allowed;
331
+ }
332
+
333
+ .form-field small {
334
+ font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
335
+ color: var(--smrt-color-on-surface-variant, #43474e);
336
+ }
337
+
338
+ .cron-presets {
339
+ display: flex;
340
+ flex-wrap: wrap;
341
+ gap: var(--smrt-spacing-xs, 0.25rem);
342
+ margin-top: var(--smrt-spacing-xs, 0.25rem);
343
+ }
344
+
345
+ .preset-btn {
346
+ padding: 0.125rem var(--smrt-spacing-sm, 0.5rem);
347
+ border: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
348
+ border-radius: var(--smrt-radius-small, 0.25rem);
349
+ background: var(--smrt-color-surface, #ffffff);
350
+ font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
351
+ cursor: pointer;
352
+ transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
353
+ }
354
+
355
+ .preset-btn:hover:not(:disabled) {
356
+ background: var(--smrt-color-surface-container, #f3f4f6);
357
+ border-color: var(--smrt-color-primary, #005ac1);
358
+ }
359
+
360
+ .preset-btn:disabled {
361
+ opacity: 0.5;
362
+ cursor: not-allowed;
363
+ }
364
+
365
+ .form-actions {
366
+ display: flex;
367
+ justify-content: flex-end;
368
+ gap: var(--smrt-spacing-sm, 0.5rem);
369
+ margin-top: var(--smrt-spacing-lg, 1.5rem);
370
+ padding-top: var(--smrt-spacing-md, 1rem);
371
+ border-top: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
372
+ }
373
+
374
+ @media (prefers-reduced-motion: reduce) {
375
+ .form-field input,
376
+ .form-field select,
377
+ .preset-btn {
378
+ transition: none;
379
+ }
380
+ }
381
+ </style>
@@ -0,0 +1,19 @@
1
+ import type { ScheduleFormData } from '../types.js';
2
+ export interface Props {
3
+ /** Initial form data (for editing) */
4
+ initialData?: Partial<ScheduleFormData>;
5
+ /** Available agent types */
6
+ agentTypes?: string[];
7
+ /** Submit callback */
8
+ onSubmit?: (data: ScheduleFormData) => void;
9
+ /** Cancel callback */
10
+ onCancel?: () => void;
11
+ /** Loading state */
12
+ loading?: boolean;
13
+ /** Edit mode */
14
+ editMode?: boolean;
15
+ }
16
+ declare const AgentScheduleForm: import("svelte").Component<Props, {}, "">;
17
+ type AgentScheduleForm = ReturnType<typeof AgentScheduleForm>;
18
+ export default AgentScheduleForm;
19
+ //# sourceMappingURL=AgentScheduleForm.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentScheduleForm.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/AgentScheduleForm.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,KAAK;IACpB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsND,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}