@runcore-sh/runcore 0.4.0 → 0.5.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.
- package/dictionary.json +2 -2
- package/dist/activity/log.js +2 -2
- package/dist/activity/log.js.map +1 -1
- package/dist/agents/governed-spawn.d.ts.map +1 -1
- package/dist/cli.js +101 -11
- package/dist/cli.js.map +1 -1
- package/dist/extensions/cache.d.ts +57 -0
- package/dist/extensions/cache.d.ts.map +1 -0
- package/dist/extensions/cache.js +173 -0
- package/dist/extensions/cache.js.map +1 -0
- package/dist/extensions/client.d.ts +55 -0
- package/dist/extensions/client.d.ts.map +1 -0
- package/dist/extensions/client.js +120 -0
- package/dist/extensions/client.js.map +1 -0
- package/dist/extensions/index.d.ts +13 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +12 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +50 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +166 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/manifest.d.ts +38 -0
- package/dist/extensions/manifest.d.ts.map +1 -0
- package/dist/extensions/manifest.js +17 -0
- package/dist/extensions/manifest.js.map +1 -0
- package/dist/extensions/stubs.d.ts +27 -0
- package/dist/extensions/stubs.d.ts.map +1 -0
- package/dist/extensions/stubs.js +45 -0
- package/dist/extensions/stubs.js.map +1 -0
- package/dist/lib/audit.js +2 -2
- package/dist/lib/audit.js.map +1 -1
- package/dist/lib/brain-migrate.d.ts +21 -0
- package/dist/lib/brain-migrate.d.ts.map +1 -0
- package/dist/lib/brain-migrate.js +137 -0
- package/dist/lib/brain-migrate.js.map +1 -0
- package/dist/lib/paths.d.ts +27 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +65 -0
- package/dist/lib/paths.js.map +1 -1
- package/dist/llm/call-log.d.ts +40 -0
- package/dist/llm/call-log.d.ts.map +1 -0
- package/dist/llm/call-log.js +35 -0
- package/dist/llm/call-log.js.map +1 -0
- package/dist/llm/complete.d.ts +6 -0
- package/dist/llm/complete.d.ts.map +1 -1
- package/dist/llm/complete.js +27 -0
- package/dist/llm/complete.js.map +1 -1
- package/dist/mcp-server.js +118 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/memory/file-backed.d.ts +4 -0
- package/dist/memory/file-backed.d.ts.map +1 -1
- package/dist/memory/file-backed.js +4 -0
- package/dist/memory/file-backed.js.map +1 -1
- package/dist/memory/vector-index.d.ts +4 -12
- package/dist/memory/vector-index.d.ts.map +1 -1
- package/dist/memory/vector-index.js +11 -93
- package/dist/memory/vector-index.js.map +1 -1
- package/dist/search/brain-docs.d.ts +17 -7
- package/dist/search/brain-docs.d.ts.map +1 -1
- package/dist/search/brain-docs.js +170 -52
- package/dist/search/brain-docs.js.map +1 -1
- package/dist/search/brain-rag.d.ts +45 -0
- package/dist/search/brain-rag.d.ts.map +1 -0
- package/dist/search/brain-rag.js +275 -0
- package/dist/search/brain-rag.js.map +1 -0
- package/dist/search/chunker.d.ts +24 -0
- package/dist/search/chunker.d.ts.map +1 -0
- package/dist/search/chunker.js +95 -0
- package/dist/search/chunker.js.map +1 -0
- package/dist/search/embedder.d.ts +16 -0
- package/dist/search/embedder.d.ts.map +1 -0
- package/dist/search/embedder.js +108 -0
- package/dist/search/embedder.js.map +1 -0
- package/dist/search/file-watcher.d.ts +11 -0
- package/dist/search/file-watcher.d.ts.map +1 -0
- package/dist/search/file-watcher.js +86 -0
- package/dist/search/file-watcher.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +168 -20
- package/dist/server.js.map +1 -1
- package/dist/sessions/store.d.ts +9 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/settings.d.ts +26 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +78 -2
- package/dist/settings.js.map +1 -1
- package/dist/tracing/init.d.ts +1 -1
- package/dist/tracing/init.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -2
- package/dist/utils/logger.js.map +1 -1
- package/module-tiers.json +164 -0
- package/package.json +9 -13
- package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
- package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
- package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
- package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
- package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
- package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
- package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
- package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
- package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
- package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
- package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
- package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
- package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
- package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
- package/public/index.html +379 -59
- package/dist/agents/autonomous.js +0 -749
- package/dist/agents/autonomous.js.map +0 -1
- package/dist/agents/commit.js +0 -113
- package/dist/agents/commit.js.map +0 -1
- package/dist/agents/continue.js +0 -158
- package/dist/agents/continue.js.map +0 -1
- package/dist/agents/cooldown.js +0 -397
- package/dist/agents/cooldown.js.map +0 -1
- package/dist/agents/dedup-guard.js +0 -131
- package/dist/agents/dedup-guard.js.map +0 -1
- package/dist/agents/feed.js +0 -176
- package/dist/agents/feed.js.map +0 -1
- package/dist/agents/governance.js +0 -292
- package/dist/agents/governance.js.map +0 -1
- package/dist/agents/governed-spawn.js +0 -192
- package/dist/agents/governed-spawn.js.map +0 -1
- package/dist/agents/heartbeat.js +0 -324
- package/dist/agents/heartbeat.js.map +0 -1
- package/dist/agents/instance-manager.js +0 -850
- package/dist/agents/instance-manager.js.map +0 -1
- package/dist/agents/issue-reporter.js +0 -123
- package/dist/agents/issue-reporter.js.map +0 -1
- package/dist/agents/issues.js +0 -141
- package/dist/agents/issues.js.map +0 -1
- package/dist/agents/locks.js +0 -234
- package/dist/agents/locks.js.map +0 -1
- package/dist/agents/memory.js +0 -93
- package/dist/agents/memory.js.map +0 -1
- package/dist/agents/monitor.js +0 -235
- package/dist/agents/monitor.js.map +0 -1
- package/dist/agents/orchestration.js +0 -715
- package/dist/agents/orchestration.js.map +0 -1
- package/dist/agents/recover.js +0 -166
- package/dist/agents/recover.js.map +0 -1
- package/dist/agents/reflection.js +0 -199
- package/dist/agents/reflection.js.map +0 -1
- package/dist/agents/runtime/bus.js +0 -174
- package/dist/agents/runtime/bus.js.map +0 -1
- package/dist/agents/runtime/config.js +0 -101
- package/dist/agents/runtime/config.js.map +0 -1
- package/dist/agents/runtime/driver.js +0 -214
- package/dist/agents/runtime/driver.js.map +0 -1
- package/dist/agents/runtime/errors.js +0 -40
- package/dist/agents/runtime/errors.js.map +0 -1
- package/dist/agents/runtime/index.js +0 -54
- package/dist/agents/runtime/index.js.map +0 -1
- package/dist/agents/runtime/lifecycle.js +0 -116
- package/dist/agents/runtime/lifecycle.js.map +0 -1
- package/dist/agents/runtime/manager.js +0 -948
- package/dist/agents/runtime/manager.js.map +0 -1
- package/dist/agents/runtime/registry.js +0 -195
- package/dist/agents/runtime/registry.js.map +0 -1
- package/dist/agents/runtime/resources.js +0 -146
- package/dist/agents/runtime/resources.js.map +0 -1
- package/dist/agents/runtime/types.js +0 -24
- package/dist/agents/runtime/types.js.map +0 -1
- package/dist/agents/spawn-policy.js +0 -202
- package/dist/agents/spawn-policy.js.map +0 -1
- package/dist/agents/spawn.js +0 -970
- package/dist/agents/spawn.js.map +0 -1
- package/dist/agents/triage.js +0 -81
- package/dist/agents/triage.js.map +0 -1
- package/dist/agents/workflow.js +0 -543
- package/dist/agents/workflow.js.map +0 -1
- package/dist/avatar/client.js +0 -172
- package/dist/avatar/client.js.map +0 -1
- package/dist/avatar/sidecar.js +0 -125
- package/dist/avatar/sidecar.js.map +0 -1
- package/dist/browser/sessions.js +0 -122
- package/dist/browser/sessions.js.map +0 -1
- package/dist/capabilities/definitions/browser.js +0 -242
- package/dist/capabilities/definitions/browser.js.map +0 -1
- package/dist/channels/whatsapp.js +0 -200
- package/dist/channels/whatsapp.js.map +0 -1
- package/dist/credentials/store.js +0 -189
- package/dist/credentials/store.js.map +0 -1
- package/dist/files/deep-index.js +0 -337
- package/dist/files/deep-index.js.map +0 -1
- package/dist/files/extract.js +0 -33
- package/dist/files/extract.js.map +0 -1
- package/dist/files/gdrive.js +0 -246
- package/dist/files/gdrive.js.map +0 -1
- package/dist/github/client.js +0 -408
- package/dist/github/client.js.map +0 -1
- package/dist/github/commit-analysis.js +0 -276
- package/dist/github/commit-analysis.js.map +0 -1
- package/dist/github/contributor-stats.js +0 -119
- package/dist/github/contributor-stats.js.map +0 -1
- package/dist/github/issue-sla.js +0 -220
- package/dist/github/issue-sla.js.map +0 -1
- package/dist/github/issue-triage.js +0 -286
- package/dist/github/issue-triage.js.map +0 -1
- package/dist/github/pr-readiness.js +0 -197
- package/dist/github/pr-readiness.js.map +0 -1
- package/dist/github/pr-review.js +0 -410
- package/dist/github/pr-review.js.map +0 -1
- package/dist/github/release-notes.js +0 -227
- package/dist/github/release-notes.js.map +0 -1
- package/dist/github/repo-health.js +0 -303
- package/dist/github/repo-health.js.map +0 -1
- package/dist/github/retry.js +0 -117
- package/dist/github/retry.js.map +0 -1
- package/dist/github/types.js +0 -8
- package/dist/github/types.js.map +0 -1
- package/dist/github/webhooks.js +0 -153
- package/dist/github/webhooks.js.map +0 -1
- package/dist/google/auth.js +0 -325
- package/dist/google/auth.js.map +0 -1
- package/dist/google/calendar-timer.js +0 -91
- package/dist/google/calendar-timer.js.map +0 -1
- package/dist/google/calendar.js +0 -270
- package/dist/google/calendar.js.map +0 -1
- package/dist/google/docs.js +0 -309
- package/dist/google/docs.js.map +0 -1
- package/dist/google/gmail-send.js +0 -219
- package/dist/google/gmail-send.js.map +0 -1
- package/dist/google/gmail-timer.js +0 -223
- package/dist/google/gmail-timer.js.map +0 -1
- package/dist/google/gmail.js +0 -470
- package/dist/google/gmail.js.map +0 -1
- package/dist/google/plugin.js +0 -169
- package/dist/google/plugin.js.map +0 -1
- package/dist/google/tasks-timer.js +0 -107
- package/dist/google/tasks-timer.js.map +0 -1
- package/dist/google/tasks.js +0 -331
- package/dist/google/tasks.js.map +0 -1
- package/dist/google/temporal.js +0 -176
- package/dist/google/temporal.js.map +0 -1
- package/dist/integrations/gate.js +0 -100
- package/dist/integrations/gate.js.map +0 -1
- package/dist/integrations/github.js +0 -331
- package/dist/integrations/github.js.map +0 -1
- package/dist/integrations/google-tasks.js +0 -432
- package/dist/integrations/google-tasks.js.map +0 -1
- package/dist/mdns.js +0 -110
- package/dist/mdns.js.map +0 -1
- package/dist/notifications/channel.js +0 -83
- package/dist/notifications/channel.js.map +0 -1
- package/dist/notifications/channels/adapter.js +0 -55
- package/dist/notifications/channels/adapter.js.map +0 -1
- package/dist/notifications/channels/index.js +0 -6
- package/dist/notifications/channels/index.js.map +0 -1
- package/dist/notifications/channels/log.js +0 -29
- package/dist/notifications/channels/log.js.map +0 -1
- package/dist/notifications/email.js +0 -72
- package/dist/notifications/email.js.map +0 -1
- package/dist/notifications/engine.js +0 -198
- package/dist/notifications/engine.js.map +0 -1
- package/dist/notifications/index.js +0 -24
- package/dist/notifications/index.js.map +0 -1
- package/dist/notifications/phone.js +0 -48
- package/dist/notifications/phone.js.map +0 -1
- package/dist/notifications/sms.js +0 -65
- package/dist/notifications/sms.js.map +0 -1
- package/dist/notifications/types.js +0 -14
- package/dist/notifications/types.js.map +0 -1
- package/dist/notifications/webhook.js +0 -65
- package/dist/notifications/webhook.js.map +0 -1
- package/dist/resend/inbox.js +0 -199
- package/dist/resend/inbox.js.map +0 -1
- package/dist/resend/webhooks.js +0 -244
- package/dist/resend/webhooks.js.map +0 -1
- package/dist/search/browse.js +0 -225
- package/dist/search/browse.js.map +0 -1
- package/dist/search/perplexity.js +0 -41
- package/dist/search/perplexity.js.map +0 -1
- package/dist/slack/channels.js +0 -277
- package/dist/slack/channels.js.map +0 -1
- package/dist/slack/client.js +0 -468
- package/dist/slack/client.js.map +0 -1
- package/dist/slack/retry.js +0 -100
- package/dist/slack/retry.js.map +0 -1
- package/dist/slack/types.js +0 -52
- package/dist/slack/types.js.map +0 -1
- package/dist/slack/webhooks.js +0 -285
- package/dist/slack/webhooks.js.map +0 -1
- package/dist/stt/client.js +0 -66
- package/dist/stt/client.js.map +0 -1
- package/dist/stt/sidecar.js +0 -115
- package/dist/stt/sidecar.js.map +0 -1
- package/dist/tracing/bridge.js +0 -70
- package/dist/tracing/bridge.js.map +0 -1
- package/dist/tracing/correlation.js +0 -49
- package/dist/tracing/correlation.js.map +0 -1
- package/dist/tracing/index.js +0 -18
- package/dist/tracing/index.js.map +0 -1
- package/dist/tracing/init.js +0 -81
- package/dist/tracing/init.js.map +0 -1
- package/dist/tracing/instrument.js +0 -145
- package/dist/tracing/instrument.js.map +0 -1
- package/dist/tracing/middleware.js +0 -69
- package/dist/tracing/middleware.js.map +0 -1
- package/dist/tracing/tracer.js +0 -327
- package/dist/tracing/tracer.js.map +0 -1
- package/dist/tts/client.js +0 -48
- package/dist/tts/client.js.map +0 -1
- package/dist/tts/sidecar.js +0 -148
- package/dist/tts/sidecar.js.map +0 -1
- package/dist/twilio/call.js +0 -79
- package/dist/twilio/call.js.map +0 -1
- package/dist/vault/matcher.js +0 -197
- package/dist/vault/matcher.js.map +0 -1
- package/dist/vault/personal.js +0 -163
- package/dist/vault/personal.js.map +0 -1
- package/dist/vault/policy.js +0 -159
- package/dist/vault/policy.js.map +0 -1
- package/dist/vault/store.js +0 -122
- package/dist/vault/store.js.map +0 -1
- package/dist/vault/transfer.js +0 -188
- package/dist/vault/transfer.js.map +0 -1
- package/dist/volumes/index.js +0 -2
- package/dist/volumes/index.js.map +0 -1
- package/dist/volumes/manager.js +0 -462
- package/dist/volumes/manager.js.map +0 -1
- package/dist/volumes/types.js +0 -8
- package/dist/volumes/types.js.map +0 -1
- package/dist/webhooks/config.js +0 -214
- package/dist/webhooks/config.js.map +0 -1
- package/dist/webhooks/event-log.js +0 -132
- package/dist/webhooks/event-log.js.map +0 -1
- package/dist/webhooks/handler.js +0 -103
- package/dist/webhooks/handler.js.map +0 -1
- package/dist/webhooks/handlers.js +0 -231
- package/dist/webhooks/handlers.js.map +0 -1
- package/dist/webhooks/index.js +0 -33
- package/dist/webhooks/index.js.map +0 -1
- package/dist/webhooks/mount.js +0 -400
- package/dist/webhooks/mount.js.map +0 -1
- package/dist/webhooks/registry.js +0 -143
- package/dist/webhooks/registry.js.map +0 -1
- package/dist/webhooks/relay.js +0 -53
- package/dist/webhooks/relay.js.map +0 -1
- package/dist/webhooks/retry.js +0 -270
- package/dist/webhooks/retry.js.map +0 -1
- package/dist/webhooks/router.js +0 -290
- package/dist/webhooks/router.js.map +0 -1
- package/dist/webhooks/twilio.js +0 -129
- package/dist/webhooks/twilio.js.map +0 -1
- package/dist/webhooks/types.js +0 -8
- package/dist/webhooks/types.js.map +0 -1
- package/dist/webhooks/verify.js +0 -154
- package/dist/webhooks/verify.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/google/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Background tasks polling timer.
|
|
3
|
-
* Checks for tasks due soon every 15 minutes.
|
|
4
|
-
* When a task is due within 60 min, pushes a notification.
|
|
5
|
-
* When a task is overdue, pushes a notification.
|
|
6
|
-
* Follows calendar-timer.ts pattern: module-level state, idempotent start/stop.
|
|
7
|
-
*/
|
|
8
|
-
import { listTasks, isTasksAvailable } from "./tasks.js";
|
|
9
|
-
import { pushNotification } from "../goals/notifications.js";
|
|
10
|
-
import { logActivity } from "../activity/log.js";
|
|
11
|
-
import { createLogger } from "../utils/logger.js";
|
|
12
|
-
const log = createLogger("tasks");
|
|
13
|
-
const DEFAULT_INTERVAL_MS = 15 * 60 * 1000; // 15 minutes
|
|
14
|
-
const DUE_SOON_THRESHOLD_MS = 60 * 60 * 1000; // 60 minutes
|
|
15
|
-
let timer = null;
|
|
16
|
-
const notifiedTaskIds = new Set(); // Avoid duplicate notifications
|
|
17
|
-
/**
|
|
18
|
-
* Start the tasks polling timer. Idempotent.
|
|
19
|
-
*/
|
|
20
|
-
export function startTasksTimer(intervalMs) {
|
|
21
|
-
if (timer)
|
|
22
|
-
return;
|
|
23
|
-
const interval = intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
24
|
-
timer = setInterval(async () => {
|
|
25
|
-
if (!isTasksAvailable())
|
|
26
|
-
return;
|
|
27
|
-
try {
|
|
28
|
-
// Fetch incomplete tasks due within the next 24 hours
|
|
29
|
-
const now = new Date();
|
|
30
|
-
const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000);
|
|
31
|
-
const result = await listTasks("@default", {
|
|
32
|
-
showCompleted: false,
|
|
33
|
-
dueMax: tomorrow.toISOString(),
|
|
34
|
-
});
|
|
35
|
-
if (!result.ok || !result.data)
|
|
36
|
-
return;
|
|
37
|
-
for (const task of result.data) {
|
|
38
|
-
if (notifiedTaskIds.has(task.id))
|
|
39
|
-
continue;
|
|
40
|
-
if (!task.due)
|
|
41
|
-
continue;
|
|
42
|
-
// Parse the due date safely (extract YYYY-MM-DD to avoid UTC shift)
|
|
43
|
-
const match = task.due.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
44
|
-
if (!match)
|
|
45
|
-
continue;
|
|
46
|
-
// Due date is date-only (no time), so treat as end-of-day local
|
|
47
|
-
const dueDate = new Date(parseInt(match[1]), parseInt(match[2]) - 1, parseInt(match[3]), 23, 59, 59);
|
|
48
|
-
const msUntilDue = dueDate.getTime() - now.getTime();
|
|
49
|
-
if (msUntilDue < 0) {
|
|
50
|
-
// Overdue
|
|
51
|
-
notifiedTaskIds.add(task.id);
|
|
52
|
-
const msg = `Overdue task: ${task.title}`;
|
|
53
|
-
pushNotification({
|
|
54
|
-
timestamp: new Date().toISOString(),
|
|
55
|
-
source: "tasks",
|
|
56
|
-
message: msg,
|
|
57
|
-
});
|
|
58
|
-
logActivity({ source: "tasks", summary: msg });
|
|
59
|
-
}
|
|
60
|
-
else if (msUntilDue <= DUE_SOON_THRESHOLD_MS) {
|
|
61
|
-
// Due soon
|
|
62
|
-
notifiedTaskIds.add(task.id);
|
|
63
|
-
const minsAway = Math.round(msUntilDue / 60_000);
|
|
64
|
-
const msg = minsAway > 0
|
|
65
|
-
? `Task due in ${minsAway} min: ${task.title}`
|
|
66
|
-
: `Task due now: ${task.title}`;
|
|
67
|
-
pushNotification({
|
|
68
|
-
timestamp: new Date().toISOString(),
|
|
69
|
-
source: "tasks",
|
|
70
|
-
message: msg,
|
|
71
|
-
});
|
|
72
|
-
logActivity({ source: "tasks", summary: msg });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Prune old notification IDs (keep max 200)
|
|
76
|
-
if (notifiedTaskIds.size > 200) {
|
|
77
|
-
const arr = [...notifiedTaskIds];
|
|
78
|
-
const toRemove = arr.slice(0, arr.length - 200);
|
|
79
|
-
for (const id of toRemove)
|
|
80
|
-
notifiedTaskIds.delete(id);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
85
|
-
logActivity({ source: "tasks", summary: `Poll error: ${msg}` });
|
|
86
|
-
}
|
|
87
|
-
}, interval);
|
|
88
|
-
const mins = Math.round(interval / 60_000);
|
|
89
|
-
log.info(`Tasks poll: every ${mins} min`);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Stop the tasks polling timer.
|
|
93
|
-
*/
|
|
94
|
-
export function stopTasksTimer() {
|
|
95
|
-
if (timer) {
|
|
96
|
-
clearInterval(timer);
|
|
97
|
-
timer = null;
|
|
98
|
-
}
|
|
99
|
-
notifiedTaskIds.clear();
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Check if the tasks timer is running.
|
|
103
|
-
*/
|
|
104
|
-
export function isTasksTimerRunning() {
|
|
105
|
-
return timer !== null;
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=tasks-timer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-timer.js","sourceRoot":"","sources":["../../src/google/tasks-timer.ts"],"names":[],"mappings":"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"}
|
package/dist/google/tasks.js
DELETED
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google Tasks API client.
|
|
3
|
-
* Raw fetch via googleGet/googlePost/googlePatch/googleDelete — no SDK.
|
|
4
|
-
* All functions return { ok, data?, message } — never throw.
|
|
5
|
-
*/
|
|
6
|
-
import { googleGet, googlePost, googlePatch, googleDelete, isGoogleAuthenticated } from "./auth.js";
|
|
7
|
-
import { createLogger } from "../utils/logger.js";
|
|
8
|
-
const log = createLogger("google.tasks");
|
|
9
|
-
const TASKS_API = "https://tasks.googleapis.com/tasks/v1";
|
|
10
|
-
// --- Helpers ---
|
|
11
|
-
function parseTaskList(tl) {
|
|
12
|
-
return {
|
|
13
|
-
id: tl.id,
|
|
14
|
-
title: tl.title ?? "(untitled)",
|
|
15
|
-
updated: tl.updated ?? "",
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function parseTask(t) {
|
|
19
|
-
return {
|
|
20
|
-
id: t.id,
|
|
21
|
-
title: t.title ?? "(untitled)",
|
|
22
|
-
notes: t.notes,
|
|
23
|
-
status: t.status === "completed" ? "completed" : "needsAction",
|
|
24
|
-
due: t.due,
|
|
25
|
-
completed: t.completed,
|
|
26
|
-
parent: t.parent,
|
|
27
|
-
position: t.position ?? "0",
|
|
28
|
-
updated: t.updated ?? "",
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Convert a Date or ISO string to Google Tasks due date format.
|
|
33
|
-
* Google Tasks expects RFC 3339 with time set to 00:00:00.000Z.
|
|
34
|
-
*
|
|
35
|
-
* Uses string extraction for ISO strings to avoid the UTC-midnight-to-local-time
|
|
36
|
-
* shift bug: new Date('2026-03-04') parses as UTC midnight, but getDate() returns
|
|
37
|
-
* local time, which can shift the date backward in timezones behind UTC.
|
|
38
|
-
* Fix for ts_temporal_mismatch_01.
|
|
39
|
-
*/
|
|
40
|
-
function toDueDate(date) {
|
|
41
|
-
if (typeof date === "string") {
|
|
42
|
-
// Extract YYYY-MM-DD directly from the string to avoid timezone shift
|
|
43
|
-
const match = date.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
44
|
-
if (match) {
|
|
45
|
-
return `${match[1]}-${match[2]}-${match[3]}T00:00:00.000Z`;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// For Date objects or non-ISO strings, use local-time getters
|
|
49
|
-
// (Date objects were constructed with local intent)
|
|
50
|
-
const d = typeof date === "string" ? new Date(date) : date;
|
|
51
|
-
const yyyy = d.getFullYear();
|
|
52
|
-
const mm = String(d.getMonth() + 1).padStart(2, "0");
|
|
53
|
-
const dd = String(d.getDate()).padStart(2, "0");
|
|
54
|
-
return `${yyyy}-${mm}-${dd}T00:00:00.000Z`;
|
|
55
|
-
}
|
|
56
|
-
// --- Public API ---
|
|
57
|
-
/**
|
|
58
|
-
* Check if Tasks is ready (Google authenticated).
|
|
59
|
-
*/
|
|
60
|
-
export function isTasksAvailable() {
|
|
61
|
-
return isGoogleAuthenticated();
|
|
62
|
-
}
|
|
63
|
-
// ==================== Task Lists ====================
|
|
64
|
-
/**
|
|
65
|
-
* List all task lists for the authenticated user.
|
|
66
|
-
*/
|
|
67
|
-
export async function listTaskLists() {
|
|
68
|
-
log.debug("Listing task lists");
|
|
69
|
-
const result = await googleGet(`${TASKS_API}/users/@me/lists`, { maxResults: "100" });
|
|
70
|
-
if (!result.ok) {
|
|
71
|
-
log.error("Failed to list task lists", { error: result.message });
|
|
72
|
-
return { ok: false, message: result.message };
|
|
73
|
-
}
|
|
74
|
-
const lists = (result.data?.items ?? []).map(parseTaskList);
|
|
75
|
-
log.debug("Task lists fetched", { count: lists.length });
|
|
76
|
-
return { ok: true, data: lists, message: `${lists.length} task lists` };
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Create a new task list.
|
|
80
|
-
*/
|
|
81
|
-
export async function createTaskList(title) {
|
|
82
|
-
if (!title)
|
|
83
|
-
return { ok: false, message: "Title is required" };
|
|
84
|
-
log.debug("Creating task list", { title });
|
|
85
|
-
const result = await googlePost(`${TASKS_API}/users/@me/lists`, { title });
|
|
86
|
-
if (!result.ok || !result.data) {
|
|
87
|
-
log.error("Failed to create task list", { title, error: result.message });
|
|
88
|
-
return { ok: false, message: result.message };
|
|
89
|
-
}
|
|
90
|
-
log.info("Task list created", { title, taskListId: result.data.id });
|
|
91
|
-
return {
|
|
92
|
-
ok: true,
|
|
93
|
-
data: parseTaskList(result.data),
|
|
94
|
-
message: `Task list created: ${title}`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Update a task list's title.
|
|
99
|
-
*/
|
|
100
|
-
export async function updateTaskList(taskListId, title) {
|
|
101
|
-
log.debug("Updating task list", { taskListId, title });
|
|
102
|
-
const result = await googlePatch(`${TASKS_API}/users/@me/lists/${taskListId}`, { title });
|
|
103
|
-
if (!result.ok || !result.data) {
|
|
104
|
-
log.error("Failed to update task list", { taskListId, error: result.message });
|
|
105
|
-
return { ok: false, message: result.message };
|
|
106
|
-
}
|
|
107
|
-
log.info("Task list updated", { taskListId, title });
|
|
108
|
-
return {
|
|
109
|
-
ok: true,
|
|
110
|
-
data: parseTaskList(result.data),
|
|
111
|
-
message: `Task list updated: ${title}`,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Delete a task list.
|
|
116
|
-
*/
|
|
117
|
-
export async function deleteTaskList(taskListId) {
|
|
118
|
-
log.debug("Deleting task list", { taskListId });
|
|
119
|
-
const result = await googleDelete(`${TASKS_API}/users/@me/lists/${taskListId}`);
|
|
120
|
-
if (!result.ok) {
|
|
121
|
-
log.error("Failed to delete task list", { taskListId, error: result.message });
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
log.info("Task list deleted", { taskListId });
|
|
125
|
-
}
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
// ==================== Tasks ====================
|
|
129
|
-
/**
|
|
130
|
-
* List tasks in a task list.
|
|
131
|
-
* @param taskListId - Task list ID (default: "@default" for the user's default list)
|
|
132
|
-
* @param showCompleted - Include completed tasks (default: false)
|
|
133
|
-
* @param showHidden - Include hidden/deleted tasks (default: false)
|
|
134
|
-
* @param dueMin - Only tasks due after this date (ISO string)
|
|
135
|
-
* @param dueMax - Only tasks due before this date (ISO string)
|
|
136
|
-
*/
|
|
137
|
-
export async function listTasks(taskListId = "@default", opts) {
|
|
138
|
-
const params = {
|
|
139
|
-
maxResults: String(opts?.maxResults ?? 100),
|
|
140
|
-
showCompleted: String(opts?.showCompleted ?? false),
|
|
141
|
-
showHidden: String(opts?.showHidden ?? false),
|
|
142
|
-
};
|
|
143
|
-
if (opts?.dueMin)
|
|
144
|
-
params.dueMin = toDueDate(opts.dueMin);
|
|
145
|
-
if (opts?.dueMax)
|
|
146
|
-
params.dueMax = toDueDate(opts.dueMax);
|
|
147
|
-
log.debug("Listing tasks", { taskListId, showCompleted: opts?.showCompleted });
|
|
148
|
-
const result = await googleGet(`${TASKS_API}/lists/${taskListId}/tasks`, params);
|
|
149
|
-
if (!result.ok) {
|
|
150
|
-
log.error("Failed to list tasks", { taskListId, error: result.message });
|
|
151
|
-
return { ok: false, message: result.message };
|
|
152
|
-
}
|
|
153
|
-
const tasks = (result.data?.items ?? []).map(parseTask);
|
|
154
|
-
log.debug("Tasks listed", { taskListId, count: tasks.length });
|
|
155
|
-
return { ok: true, data: tasks, message: `${tasks.length} tasks` };
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Get a single task by ID.
|
|
159
|
-
*/
|
|
160
|
-
export async function getTask(taskListId, taskId) {
|
|
161
|
-
const result = await googleGet(`${TASKS_API}/lists/${taskListId}/tasks/${taskId}`);
|
|
162
|
-
if (!result.ok || !result.data)
|
|
163
|
-
return { ok: false, message: result.message };
|
|
164
|
-
return { ok: true, data: parseTask(result.data), message: "OK" };
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Create a new task.
|
|
168
|
-
*/
|
|
169
|
-
export async function createTask(taskListId, task) {
|
|
170
|
-
if (!task.title)
|
|
171
|
-
return { ok: false, message: "Title is required" };
|
|
172
|
-
const body = { title: task.title };
|
|
173
|
-
if (task.notes)
|
|
174
|
-
body.notes = task.notes;
|
|
175
|
-
if (task.due)
|
|
176
|
-
body.due = toDueDate(task.due);
|
|
177
|
-
let url = `${TASKS_API}/lists/${taskListId}/tasks`;
|
|
178
|
-
if (task.parent)
|
|
179
|
-
url += `?parent=${task.parent}`;
|
|
180
|
-
const result = await googlePost(url, body);
|
|
181
|
-
if (!result.ok || !result.data)
|
|
182
|
-
return { ok: false, message: result.message };
|
|
183
|
-
return {
|
|
184
|
-
ok: true,
|
|
185
|
-
data: parseTask(result.data),
|
|
186
|
-
message: `Task created: ${task.title}`,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Update an existing task.
|
|
191
|
-
*/
|
|
192
|
-
export async function updateTask(taskListId, taskId, changes) {
|
|
193
|
-
const body = {};
|
|
194
|
-
if (changes.title !== undefined)
|
|
195
|
-
body.title = changes.title;
|
|
196
|
-
if (changes.notes !== undefined)
|
|
197
|
-
body.notes = changes.notes;
|
|
198
|
-
if (changes.due !== undefined)
|
|
199
|
-
body.due = toDueDate(changes.due);
|
|
200
|
-
if (changes.status !== undefined) {
|
|
201
|
-
body.status = changes.status;
|
|
202
|
-
if (changes.status === "completed") {
|
|
203
|
-
body.completed = new Date().toISOString();
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
// Clearing completed resets the task to needsAction
|
|
207
|
-
body.completed = null;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
const result = await googlePatch(`${TASKS_API}/lists/${taskListId}/tasks/${taskId}`, body);
|
|
211
|
-
if (!result.ok || !result.data)
|
|
212
|
-
return { ok: false, message: result.message };
|
|
213
|
-
return {
|
|
214
|
-
ok: true,
|
|
215
|
-
data: parseTask(result.data),
|
|
216
|
-
message: `Task updated: ${taskId}`,
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Mark a task as completed.
|
|
221
|
-
*/
|
|
222
|
-
export async function completeTask(taskListId, taskId) {
|
|
223
|
-
return updateTask(taskListId, taskId, { status: "completed" });
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Mark a task as incomplete (reopen).
|
|
227
|
-
*/
|
|
228
|
-
export async function uncompleteTask(taskListId, taskId) {
|
|
229
|
-
return updateTask(taskListId, taskId, { status: "needsAction" });
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Delete a task.
|
|
233
|
-
*/
|
|
234
|
-
export async function deleteTask(taskListId, taskId) {
|
|
235
|
-
return googleDelete(`${TASKS_API}/lists/${taskListId}/tasks/${taskId}`);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Create recurring weekly tasks by generating individual tasks with due dates
|
|
239
|
-
* for the next N weeks. Google Tasks API doesn't support native recurrence,
|
|
240
|
-
* so we create concrete future tasks.
|
|
241
|
-
*
|
|
242
|
-
* Example: createRecurringWeeklyTasks({
|
|
243
|
-
* title: "Status Report",
|
|
244
|
-
* dayOfWeek: 5, // Friday
|
|
245
|
-
* hour: 16, // 4 PM
|
|
246
|
-
* weeksAhead: 4,
|
|
247
|
-
* })
|
|
248
|
-
*/
|
|
249
|
-
export async function createRecurringWeeklyTasks(config) {
|
|
250
|
-
const { title, notes, taskListId = "@default", dayOfWeek, hour, minute = 0, weeksAhead = 4, } = config;
|
|
251
|
-
if (dayOfWeek < 0 || dayOfWeek > 6) {
|
|
252
|
-
return { ok: false, message: "dayOfWeek must be 0 (Sunday) through 6 (Saturday)" };
|
|
253
|
-
}
|
|
254
|
-
// Find the next occurrence of the given day of week
|
|
255
|
-
const now = new Date();
|
|
256
|
-
const currentDay = now.getDay();
|
|
257
|
-
let daysUntilNext = dayOfWeek - currentDay;
|
|
258
|
-
if (daysUntilNext < 0)
|
|
259
|
-
daysUntilNext += 7;
|
|
260
|
-
if (daysUntilNext === 0) {
|
|
261
|
-
// If today is the target day, check if the time has passed
|
|
262
|
-
const targetToday = new Date(now);
|
|
263
|
-
targetToday.setHours(hour, minute, 0, 0);
|
|
264
|
-
if (now > targetToday)
|
|
265
|
-
daysUntilNext = 7;
|
|
266
|
-
}
|
|
267
|
-
const dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
268
|
-
const dayName = dayNames[dayOfWeek];
|
|
269
|
-
const timeStr = `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
|
|
270
|
-
const created = [];
|
|
271
|
-
const errors = [];
|
|
272
|
-
for (let week = 0; week < weeksAhead; week++) {
|
|
273
|
-
const dueDate = new Date(now);
|
|
274
|
-
dueDate.setDate(now.getDate() + daysUntilNext + week * 7);
|
|
275
|
-
dueDate.setHours(hour, minute, 0, 0);
|
|
276
|
-
const dateLabel = dueDate.toLocaleDateString("en-US", {
|
|
277
|
-
month: "short",
|
|
278
|
-
day: "numeric",
|
|
279
|
-
});
|
|
280
|
-
const taskTitle = `${title} — ${dayName} ${dateLabel} ${timeStr}`;
|
|
281
|
-
const taskNotes = notes
|
|
282
|
-
? `${notes}\n\nRecurring: every ${dayName} at ${timeStr}`
|
|
283
|
-
: `Recurring: every ${dayName} at ${timeStr}`;
|
|
284
|
-
const result = await createTask(taskListId, {
|
|
285
|
-
title: taskTitle,
|
|
286
|
-
notes: taskNotes,
|
|
287
|
-
due: dueDate.toISOString(),
|
|
288
|
-
});
|
|
289
|
-
if (result.ok && result.data) {
|
|
290
|
-
created.push(result.data);
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
errors.push(`Week ${week + 1}: ${result.message}`);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
if (created.length === 0) {
|
|
297
|
-
return { ok: false, message: `Failed to create any tasks: ${errors.join("; ")}` };
|
|
298
|
-
}
|
|
299
|
-
const msg = errors.length > 0
|
|
300
|
-
? `Created ${created.length}/${weeksAhead} tasks (${errors.length} failed)`
|
|
301
|
-
: `Created ${created.length} recurring tasks: ${title} every ${dayName} at ${timeStr}`;
|
|
302
|
-
return { ok: true, data: created, message: msg };
|
|
303
|
-
}
|
|
304
|
-
// ==================== Context formatting ====================
|
|
305
|
-
/**
|
|
306
|
-
* Format tasks as a readable text block for LLM context injection.
|
|
307
|
-
*/
|
|
308
|
-
export function formatTasksForContext(tasks) {
|
|
309
|
-
if (tasks.length === 0)
|
|
310
|
-
return "No tasks.";
|
|
311
|
-
return tasks
|
|
312
|
-
.map((t) => {
|
|
313
|
-
const check = t.status === "completed" ? "[x]" : "[ ]";
|
|
314
|
-
let dueStr = "";
|
|
315
|
-
if (t.due) {
|
|
316
|
-
// Extract YYYY-MM-DD directly to avoid UTC-midnight-to-local shift (ts_temporal_mismatch_01)
|
|
317
|
-
const m = t.due.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
318
|
-
if (m) {
|
|
319
|
-
const d = new Date(parseInt(m[1]), parseInt(m[2]) - 1, parseInt(m[3]));
|
|
320
|
-
dueStr = ` (due: ${d.toLocaleDateString("en-US", { month: "short", day: "numeric" })})`;
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
dueStr = ` (due: ${new Date(t.due).toLocaleDateString("en-US", { month: "short", day: "numeric" })})`;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
const notesStr = t.notes ? ` — ${t.notes.split("\n")[0]}` : "";
|
|
327
|
-
return `- ${check} ${t.title}${dueStr}${notesStr}`;
|
|
328
|
-
})
|
|
329
|
-
.join("\n");
|
|
330
|
-
}
|
|
331
|
-
//# sourceMappingURL=tasks.js.map
|
package/dist/google/tasks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/google/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/google/temporal.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Temporal validation layer.
|
|
3
|
-
* Catches day-of-week mismatches before calendar entries are created.
|
|
4
|
-
* Fixes ts_temporal_mismatch_01: March 4, 2026 is Wednesday, not Tuesday.
|
|
5
|
-
*
|
|
6
|
-
* Root cause: new Date('2026-03-04') parses as UTC midnight.
|
|
7
|
-
* getDay() returns local-timezone day, which can shift backward by 1
|
|
8
|
-
* in timezones behind UTC. All date math must use UTC methods on
|
|
9
|
-
* UTC-parsed strings, or local methods on locally-constructed dates.
|
|
10
|
-
*/
|
|
11
|
-
import { createLogger } from "../utils/logger.js";
|
|
12
|
-
const log = createLogger("google.temporal");
|
|
13
|
-
const DAY_NAMES = [
|
|
14
|
-
"sunday", "monday", "tuesday", "wednesday",
|
|
15
|
-
"thursday", "friday", "saturday",
|
|
16
|
-
];
|
|
17
|
-
/**
|
|
18
|
-
* Parse a date string into year/month/day without timezone ambiguity.
|
|
19
|
-
* Extracts the date portion and constructs using local-time constructor
|
|
20
|
-
* to avoid the UTC-midnight-shifts-to-previous-day bug.
|
|
21
|
-
*/
|
|
22
|
-
export function parseDateSafe(dateStr) {
|
|
23
|
-
// Extract YYYY-MM-DD from any ISO string or date-only string
|
|
24
|
-
const match = dateStr.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
25
|
-
if (!match) {
|
|
26
|
-
throw new Error(`Cannot parse date from: ${dateStr}`);
|
|
27
|
-
}
|
|
28
|
-
const [, year, month, day] = match;
|
|
29
|
-
// Use the (year, monthIndex, day) constructor — this uses LOCAL time,
|
|
30
|
-
// so getDay() will match the calendar date the user intended.
|
|
31
|
-
return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get the day-of-week name for a date string, correctly.
|
|
35
|
-
* Uses parseDateSafe to avoid UTC/local timezone mismatch.
|
|
36
|
-
*/
|
|
37
|
-
export function getDayOfWeek(dateStr) {
|
|
38
|
-
const d = parseDateSafe(dateStr);
|
|
39
|
-
return DAY_NAMES[d.getDay()];
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Get the day-of-week index (0=Sunday, 6=Saturday) for a date string.
|
|
43
|
-
*/
|
|
44
|
-
export function getDayOfWeekIndex(dateStr) {
|
|
45
|
-
return parseDateSafe(dateStr).getDay();
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Normalize a day name to lowercase for comparison.
|
|
49
|
-
* Accepts full names ("Wednesday") and abbreviations ("Wed").
|
|
50
|
-
*/
|
|
51
|
-
function normalizeDayName(name) {
|
|
52
|
-
const lower = name.toLowerCase().trim();
|
|
53
|
-
// Exact match
|
|
54
|
-
const exact = DAY_NAMES.find((d) => d === lower);
|
|
55
|
-
if (exact)
|
|
56
|
-
return exact;
|
|
57
|
-
// Prefix match (at least 3 chars: "mon", "tue", "wed", etc.)
|
|
58
|
-
if (lower.length >= 3) {
|
|
59
|
-
const prefix = DAY_NAMES.find((d) => d.startsWith(lower));
|
|
60
|
-
if (prefix)
|
|
61
|
-
return prefix;
|
|
62
|
-
}
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Validate that a date string falls on the expected day-of-week.
|
|
67
|
-
*
|
|
68
|
-
* @param dateStr - ISO date or datetime string (e.g., "2026-03-04" or "2026-03-04T11:00:00")
|
|
69
|
-
* @param expectedDay - Expected day name (e.g., "Tuesday", "Wed")
|
|
70
|
-
* @returns Validation result with actual vs expected day
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* validateDayOfWeek("2026-03-04", "Tuesday")
|
|
74
|
-
* // { valid: false, actualDay: "wednesday", expectedDay: "tuesday", date: "2026-03-04",
|
|
75
|
-
* // mismatch: "2026-03-04 is wednesday, not tuesday" }
|
|
76
|
-
*
|
|
77
|
-
* validateDayOfWeek("2026-03-04", "Wednesday")
|
|
78
|
-
* // { valid: true, actualDay: "wednesday", expectedDay: "wednesday", date: "2026-03-04" }
|
|
79
|
-
*/
|
|
80
|
-
export function validateDayOfWeek(dateStr, expectedDay) {
|
|
81
|
-
const match = dateStr.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
82
|
-
if (!match) {
|
|
83
|
-
return {
|
|
84
|
-
valid: false,
|
|
85
|
-
actualDay: "unknown",
|
|
86
|
-
expectedDay: expectedDay.toLowerCase(),
|
|
87
|
-
date: dateStr,
|
|
88
|
-
mismatch: `Cannot parse date from: ${dateStr}`,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
const dateOnly = match[1];
|
|
92
|
-
const actualDay = getDayOfWeek(dateStr);
|
|
93
|
-
const normalizedExpected = normalizeDayName(expectedDay);
|
|
94
|
-
if (!normalizedExpected) {
|
|
95
|
-
return {
|
|
96
|
-
valid: false,
|
|
97
|
-
actualDay,
|
|
98
|
-
expectedDay: expectedDay.toLowerCase(),
|
|
99
|
-
date: dateOnly,
|
|
100
|
-
mismatch: `Unrecognized day name: ${expectedDay}`,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
const valid = actualDay === normalizedExpected;
|
|
104
|
-
return {
|
|
105
|
-
valid,
|
|
106
|
-
actualDay,
|
|
107
|
-
expectedDay: normalizedExpected,
|
|
108
|
-
date: dateOnly,
|
|
109
|
-
...(valid ? {} : {
|
|
110
|
-
mismatch: `${dateOnly} is ${actualDay}, not ${normalizedExpected}`,
|
|
111
|
-
}),
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Validate a calendar event's start date before creation.
|
|
116
|
-
* If expectedDayOfWeek is provided (from user input or LLM parsing),
|
|
117
|
-
* cross-checks it against the actual calendar date.
|
|
118
|
-
*
|
|
119
|
-
* Returns { ok: true } if valid, or { ok: false, message, suggestion } if mismatched.
|
|
120
|
-
*/
|
|
121
|
-
export function validateCalendarEntry(startDateStr, expectedDayOfWeek) {
|
|
122
|
-
if (!expectedDayOfWeek)
|
|
123
|
-
return { ok: true };
|
|
124
|
-
const result = validateDayOfWeek(startDateStr, expectedDayOfWeek);
|
|
125
|
-
if (result.valid)
|
|
126
|
-
return { ok: true };
|
|
127
|
-
// Find the correct date for the expected day within ±3 days
|
|
128
|
-
const suggestion = findCorrectDate(startDateStr, expectedDayOfWeek);
|
|
129
|
-
return {
|
|
130
|
-
ok: false,
|
|
131
|
-
message: `Temporal mismatch: ${result.mismatch}`,
|
|
132
|
-
suggestion,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Given a date and the intended day-of-week, find the nearest date
|
|
137
|
-
* that actually falls on that day (within ±3 days).
|
|
138
|
-
*/
|
|
139
|
-
function findCorrectDate(dateStr, intendedDay) {
|
|
140
|
-
const target = normalizeDayName(intendedDay);
|
|
141
|
-
if (!target)
|
|
142
|
-
return `Could not resolve day name: ${intendedDay}`;
|
|
143
|
-
const targetIndex = DAY_NAMES.indexOf(target);
|
|
144
|
-
const base = parseDateSafe(dateStr);
|
|
145
|
-
for (let offset = -3; offset <= 3; offset++) {
|
|
146
|
-
const candidate = new Date(base);
|
|
147
|
-
candidate.setDate(base.getDate() + offset);
|
|
148
|
-
if (candidate.getDay() === targetIndex) {
|
|
149
|
-
const yyyy = candidate.getFullYear();
|
|
150
|
-
const mm = String(candidate.getMonth() + 1).padStart(2, "0");
|
|
151
|
-
const dd = String(candidate.getDate()).padStart(2, "0");
|
|
152
|
-
return `Did you mean ${target} ${yyyy}-${mm}-${dd}?`;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return `No ${target} found within ±3 days of ${dateStr}`;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Safe conversion to Google Tasks due date format.
|
|
159
|
-
* Extracts YYYY-MM-DD from the string directly, avoiding the
|
|
160
|
-
* UTC-midnight-to-local-time shift bug in toDueDate.
|
|
161
|
-
*/
|
|
162
|
-
export function toSafeDueDate(date) {
|
|
163
|
-
if (typeof date === "string") {
|
|
164
|
-
const match = date.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
165
|
-
if (match) {
|
|
166
|
-
return `${match[1]}-${match[2]}-${match[3]}T00:00:00.000Z`;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// For Date objects or non-ISO strings, use local-time getters
|
|
170
|
-
const d = typeof date === "string" ? new Date(date) : date;
|
|
171
|
-
const yyyy = d.getFullYear();
|
|
172
|
-
const mm = String(d.getMonth() + 1).padStart(2, "0");
|
|
173
|
-
const dd = String(d.getDate()).padStart(2, "0");
|
|
174
|
-
return `${yyyy}-${mm}-${dd}T00:00:00.000Z`;
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=temporal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"temporal.js","sourceRoot":"","sources":["../../src/google/temporal.ts"],"names":[],"mappings":"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"}
|