aimeat 1.19.0 → 1.19.1

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 (41) hide show
  1. package/dist/locales/en.json +4 -0
  2. package/dist/locales/fi.json +4 -0
  3. package/dist/public/views/profile/agents-tasks-subtab.js +11 -1
  4. package/dist/public/views/profile/schedule-item.js +15 -1
  5. package/dist/src/generated/api-types.d.ts +7 -3
  6. package/dist/src/generated/api-types.d.ts.map +1 -1
  7. package/dist/src/routes/agent-tasks.d.ts +5 -1
  8. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  9. package/dist/src/routes/agent-tasks.js +43 -3
  10. package/dist/src/routes/agent-tasks.js.map +1 -1
  11. package/dist/src/routes/apps.d.ts +7 -0
  12. package/dist/src/routes/apps.d.ts.map +1 -1
  13. package/dist/src/routes/apps.js +50 -36
  14. package/dist/src/routes/apps.js.map +1 -1
  15. package/dist/src/routes/schedules.d.ts.map +1 -1
  16. package/dist/src/routes/schedules.js +10 -2
  17. package/dist/src/routes/schedules.js.map +1 -1
  18. package/dist/src/server-bootstrap/service-init.d.ts +15 -0
  19. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  20. package/dist/src/server-bootstrap/service-init.js +8 -0
  21. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  22. package/dist/src/services/scheduler.d.ts +19 -1
  23. package/dist/src/services/scheduler.d.ts.map +1 -1
  24. package/dist/src/services/scheduler.js +49 -17
  25. package/dist/src/services/scheduler.js.map +1 -1
  26. package/dist/src/storage/providers/mongodb/index.d.ts +5 -0
  27. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  28. package/dist/src/storage/providers/mongodb/index.js +30 -1
  29. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  30. package/dist/src/storage/providers/sqlite/index.d.ts +1 -0
  31. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  32. package/dist/src/storage/providers/sqlite/index.js +20 -0
  33. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  34. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +1 -0
  35. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
  36. package/dist/src/storage/providers/sqlite/repos/agent-task.js +5 -1
  37. package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
  38. package/dist/src/storage/repositories/app.repository.d.ts +25 -0
  39. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
  40. package/dist/static/app-catalog.html +936 -221
  41. package/package.json +1 -1
@@ -9,6 +9,10 @@
9
9
  "profile.scheduler.newSchedule": "New schedule",
10
10
  "profile.scheduler.close": "Close",
11
11
  "profile.scheduler.triggered": "Schedule run started",
12
+ "profile.scheduler.runCreated": "Run started — a new task was created",
13
+ "profile.scheduler.runBusy": "No task created — a previous run is still active. Finish, fail, or delete it, then run again.",
14
+ "profile.scheduler.runLimited": "Not run — this schedule's run limit (daily or max) has been reached.",
15
+ "profile.scheduler.runError": "Run failed",
12
16
  "profile.scheduler.cancelled": "Schedule cancelled",
13
17
  "profile.scheduler.created": "Schedule created",
14
18
  "profile.scheduler.saving": "Saving…",
@@ -9,6 +9,10 @@
9
9
  "profile.scheduler.newSchedule": "Uusi ajastus",
10
10
  "profile.scheduler.close": "Sulje",
11
11
  "profile.scheduler.triggered": "Ajastuksen suoritus käynnistetty",
12
+ "profile.scheduler.runCreated": "Suoritus aloitettu — uusi tehtävä luotiin",
13
+ "profile.scheduler.runBusy": "Tehtävää ei luotu — edellinen suoritus on yhä käynnissä. Päätä, merkitse epäonnistuneeksi tai poista se, ja suorita uudelleen.",
14
+ "profile.scheduler.runLimited": "Ei suoritettu — tämän ajastuksen suoritusraja (päivittäinen tai maksimi) on saavutettu.",
15
+ "profile.scheduler.runError": "Suoritus epäonnistui",
12
16
  "profile.scheduler.cancelled": "Ajastus peruttu",
13
17
  "profile.scheduler.created": "Ajastus luotu",
14
18
  "profile.scheduler.saving": "Tallennetaan…",
@@ -9,6 +9,11 @@
9
9
  * - TaskItem -- task row with expand/collapse, todo list, start button
10
10
  * - RequestChangesModal -- inline modal for owner to send a free-text change request
11
11
  * @version-history
12
+ * v4.11.0 -- 2026-06-05 -- Show the Delete button on every non-active task
13
+ * (was queued/draft/revision_requested only) so done/failed/paused/stalled/
14
+ * archived tasks can be removed; active tasks still use Cancel. The backend
15
+ * delete also cleans the task's operational traces (events, live-status
16
+ * memory keys, cancel marker), preserving the deliverable.
12
17
  * v4.10.0 -- 2026-06-03 -- Deep-link support: AgentTasksSubtab accepts
13
18
  * openTaskId + openTaskNonce; a nonce bump resets the bucket to 'recent'
14
19
  * (clears search/time) so the target task is visible, and TaskItem auto-opens
@@ -581,6 +586,11 @@ function TaskItem({ task, agentName, showToast, onRefresh, autoOpen = 0 }) {
581
586
  const isRevisionRequested = task.status === 'revision_requested';
582
587
  const isActive = task.status === 'active';
583
588
  const isDone = task.status === 'done';
589
+ // Any non-active task can be deleted (done/failed/paused/stalled/queued/draft/
590
+ // revision_requested). An active task uses Cancel instead -- the owner stops
591
+ // the running work first, then deletes it. Delete also cleans the task's
592
+ // operational traces server-side (event log, live-status keys, cancel marker).
593
+ const canDelete = !isActive;
584
594
  const rating = task.rating;
585
595
  const canStart = isQueued && hasTodos;
586
596
  const canRequestChanges = task.status === 'queued' && hasTodos;
@@ -787,7 +797,7 @@ function TaskItem({ task, agentName, showToast, onRefresh, autoOpen = 0 }) {
787
797
  ${(isActive || task.status === 'stalled') && html`
788
798
  <button class="btn-danger btn-sm" onClick=${handleCancel}>${t('profile.agents.tasks.cancel')}</button>
789
799
  `}
790
- ${(isQueued || task.status === 'draft' || isRevisionRequested) && html`
800
+ ${canDelete && html`
791
801
  <button class="btn-danger btn-sm" onClick=${handleDelete}>${t('profile.agents.tasks.delete')}</button>
792
802
  `}
793
803
  <span class="pf-agd-task-actions-spacer"></span>
@@ -9,6 +9,9 @@
9
9
  * edit (PATCH), and cancel itself; calls onChanged() to let the parent refetch.
10
10
  * @version-history
11
11
  * v1.0.0 -- 2026-06-03 -- Initial editable schedule card
12
+ * v1.1.0 -- 2026-06-05 -- "Run now" reads the trigger outcome and reports it:
13
+ * a warning toast when no task was created (a previous run is still active,
14
+ * or a run limit was reached) instead of a misleading "started" success.
12
15
  */
13
16
  import { h } from 'preact';
14
17
  import { useState } from 'preact/hooks';
@@ -82,7 +85,18 @@ export default function ScheduleItem({ schedule: s, onChanged, showToast }) {
82
85
  try { await fn(); onChanged?.(); } catch (e) { showToast?.(e.message, true); } finally { setBusy(false); }
83
86
  };
84
87
  const onToggle = () => run(() => setScheduleEnabled(s.id, !s.enabled));
85
- const onTrigger = () => run(async () => { await triggerSchedule(s.id); showToast?.(t('profile.scheduler.triggered')); });
88
+ // "Run now" surfaces what actually happened: agent_task schedules can decline
89
+ // to create a task (a previous run is still active, or a run limit is reached),
90
+ // which used to look like success. Map the backend outcome to a clear toast.
91
+ const onTrigger = () => run(async () => {
92
+ const res = await triggerSchedule(s.id);
93
+ const d = res?.data || {};
94
+ if (d.outcome === 'created') showToast?.(t('profile.scheduler.runCreated'));
95
+ else if (d.outcome === 'busy') showToast?.(t('profile.scheduler.runBusy'), true);
96
+ else if (d.outcome === 'limited') showToast?.(t('profile.scheduler.runLimited'), true);
97
+ else if (d.outcome === 'error') showToast?.(d.reason || t('profile.scheduler.runError'), true);
98
+ else showToast?.(t('profile.scheduler.triggered')); // 'ran' (ai/extension) or older server
99
+ });
86
100
  const onCancel = () => { if (window.confirm(t('profile.scheduler.confirmCancel'))) run(() => deleteSchedule(s.id)); };
87
101
 
88
102
  const onSave = async () => {
@@ -7141,7 +7141,10 @@ export interface paths {
7141
7141
  };
7142
7142
  get?: never;
7143
7143
  put?: never;
7144
- /** Run a schedule immediately */
7144
+ /**
7145
+ * Run a schedule immediately
7146
+ * @description Runs the schedule now (owner only). The response `data.outcome` reports what happened: `created` (an agent_task occurrence was queued/activated — `data.task_id` is set), `ran` (a non-task ai/extension job executed), `busy` (skipped — a previous occurrence is still running; `data.reason` explains), `limited` (skipped — a run limit such as daily/max was reached), or `error` (the job ran but failed; `data.reason` has the message). A manual run only defers to a genuinely running (active/stalled) occurrence — a paused/queued/archived one no longer blocks it.
7147
+ */
7145
7148
  post: operations["triggerSchedule"];
7146
7149
  delete?: never;
7147
7150
  options?: never;
@@ -7227,7 +7230,7 @@ export interface paths {
7227
7230
  post?: never;
7228
7231
  /**
7229
7232
  * Delete a task
7230
- * @description Delete a task. Only draft and queued tasks can be deleted.
7233
+ * @description Delete a task (owner only). Any task can be deleted EXCEPT one that is currently `active` -- a running task must be cancelled or paused first. Deletion also removes the task's event log and cleans its operational memory traces (the agent's live-status keys `agents.{name}.tasks.{id}.*` and the owner-written cancel marker `agents.cancel.task.{id}`). The agent's produced deliverable/output memory is preserved.
7231
7234
  */
7232
7235
  delete: operations["deleteAgentTask"];
7233
7236
  options?: never;
@@ -21521,7 +21524,7 @@ export interface operations {
21521
21524
  };
21522
21525
  requestBody?: never;
21523
21526
  responses: {
21524
- /** @description Triggered */
21527
+ /** @description Triggered. `data.outcome` is one of created | ran | busy | limited | error; `data.task_id` is present when a task was created; `data.reason` is present on busy/limited/error. */
21525
21528
  200: {
21526
21529
  headers: {
21527
21530
  [name: string]: unknown;
@@ -21757,6 +21760,7 @@ export interface operations {
21757
21760
  401: components["responses"]["Unauthorized"];
21758
21761
  403: components["responses"]["Forbidden"];
21759
21762
  404: components["responses"]["NotFound"];
21763
+ 409: components["responses"]["Conflict"];
21760
21764
  };
21761
21765
  };
21762
21766
  updateAgentTask: {