arisa 4.3.4 → 5.0.2

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/AGENTS.md +18 -17
  2. package/README.md +30 -9
  3. package/package.json +6 -2
  4. package/pnpm-workspace.yaml +1 -0
  5. package/src/core/agent/agent-manager.js +288 -29
  6. package/src/core/agent/auth-flow.js +12 -8
  7. package/src/core/agent/model-selection.js +54 -14
  8. package/src/core/agent/model-speed.js +59 -0
  9. package/src/core/config/config-defaults.js +56 -4
  10. package/src/core/config/config-store.js +5 -1
  11. package/src/core/conversation/conversation-history-store.js +142 -0
  12. package/src/core/tasks/task-store.js +16 -0
  13. package/src/core/tools/daemon-health.js +11 -2
  14. package/src/core/tools/daemon-processes.js +92 -2
  15. package/src/core/tools/daemon-runtime.js +4 -2
  16. package/src/core/tools/ipc-client.js +15 -3
  17. package/src/core/tools/tool-registry.js +27 -0
  18. package/src/index.js +61 -6
  19. package/src/runtime/arisa-capabilities.js +45 -1
  20. package/src/runtime/bootstrap.js +3 -2
  21. package/src/runtime/create-app.js +47 -11
  22. package/src/runtime/doctor.js +307 -0
  23. package/src/runtime/log-viewer.js +165 -0
  24. package/src/runtime/paths.js +4 -1
  25. package/src/runtime/service-manager.js +106 -8
  26. package/src/runtime/tool-process-supervisor.js +107 -10
  27. package/src/transport/telegram/bot.js +533 -99
  28. package/src/transport/telegram/model-picker.js +28 -2
  29. package/test/agent-tool-policy.test.js +26 -1
  30. package/test/auth-flow.test.js +28 -2
  31. package/test/capabilities-security.test.js +37 -0
  32. package/test/context-and-task-bounds.test.js +279 -0
  33. package/test/daemon-runtime.test.js +130 -2
  34. package/test/dependency-warnings.test.js +17 -0
  35. package/test/doctor.test.js +90 -0
  36. package/test/log-viewer.test.js +90 -0
  37. package/test/model-selection.test.js +125 -2
  38. package/test/paths.test.js +8 -0
  39. package/test/pi-compaction.test.js +43 -0
  40. package/test/service-manager.test.js +234 -0
  41. package/test/task-store.test.js +31 -0
@@ -59,6 +59,37 @@ test("claims only due pending tasks and marks them running", async () => {
59
59
  assert.equal((await store.get("done")).status, "done");
60
60
  });
61
61
 
62
+ test("recovers interrupted running tasks for retry after restart", async () => {
63
+ await resetHome();
64
+ const store = new TaskStore();
65
+ const runAt = new Date(Date.now() - 1000).toISOString();
66
+
67
+ await store.add({ id: "interrupted-once", kind: "agent_task", runAt, status: "running" });
68
+ await store.add({
69
+ id: "interrupted-recurring",
70
+ kind: "poll_tool",
71
+ runAt,
72
+ status: "running",
73
+ recurrence: { type: "interval", everySeconds: 60 }
74
+ });
75
+ await store.add({ id: "still-pending", kind: "agent_task", runAt });
76
+ await store.add({ id: "already-done", kind: "agent_task", runAt, status: "done" });
77
+
78
+ const recovered = await store.recoverInterrupted();
79
+
80
+ assert.deepEqual(recovered.map((task) => task.id), ["interrupted-once", "interrupted-recurring"]);
81
+ assert.ok(recovered.every((task) => task.status === "pending"));
82
+ assert.ok(recovered.every((task) => task.runAt === runAt));
83
+ assert.equal((await store.get("still-pending")).status, "pending");
84
+ assert.equal((await store.get("already-done")).status, "done");
85
+
86
+ const restartedStore = new TaskStore();
87
+ assert.deepEqual(
88
+ (await restartedStore.claimDue()).map((task) => task.id),
89
+ ["interrupted-once", "interrupted-recurring", "still-pending"]
90
+ );
91
+ });
92
+
62
93
  test("completes one-off tasks and re-schedules recurring interval tasks", async () => {
63
94
  await resetHome();
64
95
  const store = new TaskStore();