@masslessai/push-todo 4.0.3 → 4.0.4

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 (2) hide show
  1. package/lib/daemon.js +54 -0
  2. package/package.json +1 -1
package/lib/daemon.js CHANGED
@@ -443,6 +443,52 @@ async function fetchQueuedTasks() {
443
443
  }
444
444
  }
445
445
 
446
+ // ==================== Scheduled Reminder Bridge ====================
447
+
448
+ async function fetchScheduledTodos() {
449
+ try {
450
+ const params = new URLSearchParams();
451
+ params.set('scheduled_before', new Date().toISOString());
452
+
453
+ const response = await apiRequest(`synced-todos?${params}`);
454
+ if (!response.ok) return [];
455
+
456
+ const data = await response.json();
457
+ return data.todos || [];
458
+ } catch (error) {
459
+ logError(`Failed to fetch scheduled todos: ${error.message}`);
460
+ return [];
461
+ }
462
+ }
463
+
464
+ async function checkAndQueueScheduledTodos() {
465
+ const scheduledTodos = await fetchScheduledTodos();
466
+ if (scheduledTodos.length === 0) return;
467
+
468
+ for (const todo of scheduledTodos) {
469
+ const dn = todo.displayNumber;
470
+ const todoId = todo.id;
471
+
472
+ log(`Schedule triggered for #${dn} (reminder_date: ${todo.reminderDate})`);
473
+
474
+ try {
475
+ await updateTaskStatus(dn, 'queued', {
476
+ event: {
477
+ type: 'scheduled_trigger',
478
+ timestamp: new Date().toISOString(),
479
+ summary: 'Auto-queued: reminder time reached',
480
+ }
481
+ }, todoId);
482
+
483
+ log(`Queued #${dn} via schedule trigger`);
484
+ } catch (error) {
485
+ logError(`Failed to queue scheduled todo #${dn}: ${error.message}`);
486
+ }
487
+ }
488
+ }
489
+
490
+ // ==================== Task Status Updates ====================
491
+
446
492
  async function updateTaskStatus(displayNumber, status, extra = {}, todoId = null) {
447
493
  try {
448
494
  const payload = {
@@ -2125,6 +2171,14 @@ async function mainLoop() {
2125
2171
  const poll = async () => {
2126
2172
  try {
2127
2173
  await checkTimeouts();
2174
+
2175
+ // Schedule bridge: auto-queue todos whose reminder time has arrived
2176
+ try {
2177
+ await checkAndQueueScheduledTodos();
2178
+ } catch (error) {
2179
+ logError(`Scheduled todo check error: ${error.message}`);
2180
+ }
2181
+
2128
2182
  await pollAndExecute();
2129
2183
 
2130
2184
  // Cron jobs (check every poll cycle, execution throttled by nextRunAt)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masslessai/push-todo",
3
- "version": "4.0.3",
3
+ "version": "4.0.4",
4
4
  "description": "Voice tasks from Push iOS app for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {