@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.
Files changed (351) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/activity/log.js +2 -2
  3. package/dist/activity/log.js.map +1 -1
  4. package/dist/agents/governed-spawn.d.ts.map +1 -1
  5. package/dist/cli.js +101 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/cache.d.ts +57 -0
  8. package/dist/extensions/cache.d.ts.map +1 -0
  9. package/dist/extensions/cache.js +173 -0
  10. package/dist/extensions/cache.js.map +1 -0
  11. package/dist/extensions/client.d.ts +55 -0
  12. package/dist/extensions/client.d.ts.map +1 -0
  13. package/dist/extensions/client.js +120 -0
  14. package/dist/extensions/client.js.map +1 -0
  15. package/dist/extensions/index.d.ts +13 -0
  16. package/dist/extensions/index.d.ts.map +1 -0
  17. package/dist/extensions/index.js +12 -0
  18. package/dist/extensions/index.js.map +1 -0
  19. package/dist/extensions/loader.d.ts +50 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +166 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/manifest.d.ts +38 -0
  24. package/dist/extensions/manifest.d.ts.map +1 -0
  25. package/dist/extensions/manifest.js +17 -0
  26. package/dist/extensions/manifest.js.map +1 -0
  27. package/dist/extensions/stubs.d.ts +27 -0
  28. package/dist/extensions/stubs.d.ts.map +1 -0
  29. package/dist/extensions/stubs.js +45 -0
  30. package/dist/extensions/stubs.js.map +1 -0
  31. package/dist/lib/audit.js +2 -2
  32. package/dist/lib/audit.js.map +1 -1
  33. package/dist/lib/brain-migrate.d.ts +21 -0
  34. package/dist/lib/brain-migrate.d.ts.map +1 -0
  35. package/dist/lib/brain-migrate.js +137 -0
  36. package/dist/lib/brain-migrate.js.map +1 -0
  37. package/dist/lib/paths.d.ts +27 -0
  38. package/dist/lib/paths.d.ts.map +1 -1
  39. package/dist/lib/paths.js +65 -0
  40. package/dist/lib/paths.js.map +1 -1
  41. package/dist/llm/call-log.d.ts +40 -0
  42. package/dist/llm/call-log.d.ts.map +1 -0
  43. package/dist/llm/call-log.js +35 -0
  44. package/dist/llm/call-log.js.map +1 -0
  45. package/dist/llm/complete.d.ts +6 -0
  46. package/dist/llm/complete.d.ts.map +1 -1
  47. package/dist/llm/complete.js +27 -0
  48. package/dist/llm/complete.js.map +1 -1
  49. package/dist/mcp-server.js +118 -2
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/memory/file-backed.d.ts +4 -0
  52. package/dist/memory/file-backed.d.ts.map +1 -1
  53. package/dist/memory/file-backed.js +4 -0
  54. package/dist/memory/file-backed.js.map +1 -1
  55. package/dist/memory/vector-index.d.ts +4 -12
  56. package/dist/memory/vector-index.d.ts.map +1 -1
  57. package/dist/memory/vector-index.js +11 -93
  58. package/dist/memory/vector-index.js.map +1 -1
  59. package/dist/search/brain-docs.d.ts +17 -7
  60. package/dist/search/brain-docs.d.ts.map +1 -1
  61. package/dist/search/brain-docs.js +170 -52
  62. package/dist/search/brain-docs.js.map +1 -1
  63. package/dist/search/brain-rag.d.ts +45 -0
  64. package/dist/search/brain-rag.d.ts.map +1 -0
  65. package/dist/search/brain-rag.js +275 -0
  66. package/dist/search/brain-rag.js.map +1 -0
  67. package/dist/search/chunker.d.ts +24 -0
  68. package/dist/search/chunker.d.ts.map +1 -0
  69. package/dist/search/chunker.js +95 -0
  70. package/dist/search/chunker.js.map +1 -0
  71. package/dist/search/embedder.d.ts +16 -0
  72. package/dist/search/embedder.d.ts.map +1 -0
  73. package/dist/search/embedder.js +108 -0
  74. package/dist/search/embedder.js.map +1 -0
  75. package/dist/search/file-watcher.d.ts +11 -0
  76. package/dist/search/file-watcher.d.ts.map +1 -0
  77. package/dist/search/file-watcher.js +86 -0
  78. package/dist/search/file-watcher.js.map +1 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +168 -20
  81. package/dist/server.js.map +1 -1
  82. package/dist/sessions/store.d.ts +9 -0
  83. package/dist/sessions/store.d.ts.map +1 -1
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/settings.d.ts +26 -0
  86. package/dist/settings.d.ts.map +1 -1
  87. package/dist/settings.js +78 -2
  88. package/dist/settings.js.map +1 -1
  89. package/dist/tracing/init.d.ts +1 -1
  90. package/dist/tracing/init.d.ts.map +1 -1
  91. package/dist/utils/logger.js +2 -2
  92. package/dist/utils/logger.js.map +1 -1
  93. package/module-tiers.json +164 -0
  94. package/package.json +9 -13
  95. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  96. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  97. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  98. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  99. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  100. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  101. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  102. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  103. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  104. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  105. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  106. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  107. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  108. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  109. package/public/index.html +379 -59
  110. package/dist/agents/autonomous.js +0 -749
  111. package/dist/agents/autonomous.js.map +0 -1
  112. package/dist/agents/commit.js +0 -113
  113. package/dist/agents/commit.js.map +0 -1
  114. package/dist/agents/continue.js +0 -158
  115. package/dist/agents/continue.js.map +0 -1
  116. package/dist/agents/cooldown.js +0 -397
  117. package/dist/agents/cooldown.js.map +0 -1
  118. package/dist/agents/dedup-guard.js +0 -131
  119. package/dist/agents/dedup-guard.js.map +0 -1
  120. package/dist/agents/feed.js +0 -176
  121. package/dist/agents/feed.js.map +0 -1
  122. package/dist/agents/governance.js +0 -292
  123. package/dist/agents/governance.js.map +0 -1
  124. package/dist/agents/governed-spawn.js +0 -192
  125. package/dist/agents/governed-spawn.js.map +0 -1
  126. package/dist/agents/heartbeat.js +0 -324
  127. package/dist/agents/heartbeat.js.map +0 -1
  128. package/dist/agents/instance-manager.js +0 -850
  129. package/dist/agents/instance-manager.js.map +0 -1
  130. package/dist/agents/issue-reporter.js +0 -123
  131. package/dist/agents/issue-reporter.js.map +0 -1
  132. package/dist/agents/issues.js +0 -141
  133. package/dist/agents/issues.js.map +0 -1
  134. package/dist/agents/locks.js +0 -234
  135. package/dist/agents/locks.js.map +0 -1
  136. package/dist/agents/memory.js +0 -93
  137. package/dist/agents/memory.js.map +0 -1
  138. package/dist/agents/monitor.js +0 -235
  139. package/dist/agents/monitor.js.map +0 -1
  140. package/dist/agents/orchestration.js +0 -715
  141. package/dist/agents/orchestration.js.map +0 -1
  142. package/dist/agents/recover.js +0 -166
  143. package/dist/agents/recover.js.map +0 -1
  144. package/dist/agents/reflection.js +0 -199
  145. package/dist/agents/reflection.js.map +0 -1
  146. package/dist/agents/runtime/bus.js +0 -174
  147. package/dist/agents/runtime/bus.js.map +0 -1
  148. package/dist/agents/runtime/config.js +0 -101
  149. package/dist/agents/runtime/config.js.map +0 -1
  150. package/dist/agents/runtime/driver.js +0 -214
  151. package/dist/agents/runtime/driver.js.map +0 -1
  152. package/dist/agents/runtime/errors.js +0 -40
  153. package/dist/agents/runtime/errors.js.map +0 -1
  154. package/dist/agents/runtime/index.js +0 -54
  155. package/dist/agents/runtime/index.js.map +0 -1
  156. package/dist/agents/runtime/lifecycle.js +0 -116
  157. package/dist/agents/runtime/lifecycle.js.map +0 -1
  158. package/dist/agents/runtime/manager.js +0 -948
  159. package/dist/agents/runtime/manager.js.map +0 -1
  160. package/dist/agents/runtime/registry.js +0 -195
  161. package/dist/agents/runtime/registry.js.map +0 -1
  162. package/dist/agents/runtime/resources.js +0 -146
  163. package/dist/agents/runtime/resources.js.map +0 -1
  164. package/dist/agents/runtime/types.js +0 -24
  165. package/dist/agents/runtime/types.js.map +0 -1
  166. package/dist/agents/spawn-policy.js +0 -202
  167. package/dist/agents/spawn-policy.js.map +0 -1
  168. package/dist/agents/spawn.js +0 -970
  169. package/dist/agents/spawn.js.map +0 -1
  170. package/dist/agents/triage.js +0 -81
  171. package/dist/agents/triage.js.map +0 -1
  172. package/dist/agents/workflow.js +0 -543
  173. package/dist/agents/workflow.js.map +0 -1
  174. package/dist/avatar/client.js +0 -172
  175. package/dist/avatar/client.js.map +0 -1
  176. package/dist/avatar/sidecar.js +0 -125
  177. package/dist/avatar/sidecar.js.map +0 -1
  178. package/dist/browser/sessions.js +0 -122
  179. package/dist/browser/sessions.js.map +0 -1
  180. package/dist/capabilities/definitions/browser.js +0 -242
  181. package/dist/capabilities/definitions/browser.js.map +0 -1
  182. package/dist/channels/whatsapp.js +0 -200
  183. package/dist/channels/whatsapp.js.map +0 -1
  184. package/dist/credentials/store.js +0 -189
  185. package/dist/credentials/store.js.map +0 -1
  186. package/dist/files/deep-index.js +0 -337
  187. package/dist/files/deep-index.js.map +0 -1
  188. package/dist/files/extract.js +0 -33
  189. package/dist/files/extract.js.map +0 -1
  190. package/dist/files/gdrive.js +0 -246
  191. package/dist/files/gdrive.js.map +0 -1
  192. package/dist/github/client.js +0 -408
  193. package/dist/github/client.js.map +0 -1
  194. package/dist/github/commit-analysis.js +0 -276
  195. package/dist/github/commit-analysis.js.map +0 -1
  196. package/dist/github/contributor-stats.js +0 -119
  197. package/dist/github/contributor-stats.js.map +0 -1
  198. package/dist/github/issue-sla.js +0 -220
  199. package/dist/github/issue-sla.js.map +0 -1
  200. package/dist/github/issue-triage.js +0 -286
  201. package/dist/github/issue-triage.js.map +0 -1
  202. package/dist/github/pr-readiness.js +0 -197
  203. package/dist/github/pr-readiness.js.map +0 -1
  204. package/dist/github/pr-review.js +0 -410
  205. package/dist/github/pr-review.js.map +0 -1
  206. package/dist/github/release-notes.js +0 -227
  207. package/dist/github/release-notes.js.map +0 -1
  208. package/dist/github/repo-health.js +0 -303
  209. package/dist/github/repo-health.js.map +0 -1
  210. package/dist/github/retry.js +0 -117
  211. package/dist/github/retry.js.map +0 -1
  212. package/dist/github/types.js +0 -8
  213. package/dist/github/types.js.map +0 -1
  214. package/dist/github/webhooks.js +0 -153
  215. package/dist/github/webhooks.js.map +0 -1
  216. package/dist/google/auth.js +0 -325
  217. package/dist/google/auth.js.map +0 -1
  218. package/dist/google/calendar-timer.js +0 -91
  219. package/dist/google/calendar-timer.js.map +0 -1
  220. package/dist/google/calendar.js +0 -270
  221. package/dist/google/calendar.js.map +0 -1
  222. package/dist/google/docs.js +0 -309
  223. package/dist/google/docs.js.map +0 -1
  224. package/dist/google/gmail-send.js +0 -219
  225. package/dist/google/gmail-send.js.map +0 -1
  226. package/dist/google/gmail-timer.js +0 -223
  227. package/dist/google/gmail-timer.js.map +0 -1
  228. package/dist/google/gmail.js +0 -470
  229. package/dist/google/gmail.js.map +0 -1
  230. package/dist/google/plugin.js +0 -169
  231. package/dist/google/plugin.js.map +0 -1
  232. package/dist/google/tasks-timer.js +0 -107
  233. package/dist/google/tasks-timer.js.map +0 -1
  234. package/dist/google/tasks.js +0 -331
  235. package/dist/google/tasks.js.map +0 -1
  236. package/dist/google/temporal.js +0 -176
  237. package/dist/google/temporal.js.map +0 -1
  238. package/dist/integrations/gate.js +0 -100
  239. package/dist/integrations/gate.js.map +0 -1
  240. package/dist/integrations/github.js +0 -331
  241. package/dist/integrations/github.js.map +0 -1
  242. package/dist/integrations/google-tasks.js +0 -432
  243. package/dist/integrations/google-tasks.js.map +0 -1
  244. package/dist/mdns.js +0 -110
  245. package/dist/mdns.js.map +0 -1
  246. package/dist/notifications/channel.js +0 -83
  247. package/dist/notifications/channel.js.map +0 -1
  248. package/dist/notifications/channels/adapter.js +0 -55
  249. package/dist/notifications/channels/adapter.js.map +0 -1
  250. package/dist/notifications/channels/index.js +0 -6
  251. package/dist/notifications/channels/index.js.map +0 -1
  252. package/dist/notifications/channels/log.js +0 -29
  253. package/dist/notifications/channels/log.js.map +0 -1
  254. package/dist/notifications/email.js +0 -72
  255. package/dist/notifications/email.js.map +0 -1
  256. package/dist/notifications/engine.js +0 -198
  257. package/dist/notifications/engine.js.map +0 -1
  258. package/dist/notifications/index.js +0 -24
  259. package/dist/notifications/index.js.map +0 -1
  260. package/dist/notifications/phone.js +0 -48
  261. package/dist/notifications/phone.js.map +0 -1
  262. package/dist/notifications/sms.js +0 -65
  263. package/dist/notifications/sms.js.map +0 -1
  264. package/dist/notifications/types.js +0 -14
  265. package/dist/notifications/types.js.map +0 -1
  266. package/dist/notifications/webhook.js +0 -65
  267. package/dist/notifications/webhook.js.map +0 -1
  268. package/dist/resend/inbox.js +0 -199
  269. package/dist/resend/inbox.js.map +0 -1
  270. package/dist/resend/webhooks.js +0 -244
  271. package/dist/resend/webhooks.js.map +0 -1
  272. package/dist/search/browse.js +0 -225
  273. package/dist/search/browse.js.map +0 -1
  274. package/dist/search/perplexity.js +0 -41
  275. package/dist/search/perplexity.js.map +0 -1
  276. package/dist/slack/channels.js +0 -277
  277. package/dist/slack/channels.js.map +0 -1
  278. package/dist/slack/client.js +0 -468
  279. package/dist/slack/client.js.map +0 -1
  280. package/dist/slack/retry.js +0 -100
  281. package/dist/slack/retry.js.map +0 -1
  282. package/dist/slack/types.js +0 -52
  283. package/dist/slack/types.js.map +0 -1
  284. package/dist/slack/webhooks.js +0 -285
  285. package/dist/slack/webhooks.js.map +0 -1
  286. package/dist/stt/client.js +0 -66
  287. package/dist/stt/client.js.map +0 -1
  288. package/dist/stt/sidecar.js +0 -115
  289. package/dist/stt/sidecar.js.map +0 -1
  290. package/dist/tracing/bridge.js +0 -70
  291. package/dist/tracing/bridge.js.map +0 -1
  292. package/dist/tracing/correlation.js +0 -49
  293. package/dist/tracing/correlation.js.map +0 -1
  294. package/dist/tracing/index.js +0 -18
  295. package/dist/tracing/index.js.map +0 -1
  296. package/dist/tracing/init.js +0 -81
  297. package/dist/tracing/init.js.map +0 -1
  298. package/dist/tracing/instrument.js +0 -145
  299. package/dist/tracing/instrument.js.map +0 -1
  300. package/dist/tracing/middleware.js +0 -69
  301. package/dist/tracing/middleware.js.map +0 -1
  302. package/dist/tracing/tracer.js +0 -327
  303. package/dist/tracing/tracer.js.map +0 -1
  304. package/dist/tts/client.js +0 -48
  305. package/dist/tts/client.js.map +0 -1
  306. package/dist/tts/sidecar.js +0 -148
  307. package/dist/tts/sidecar.js.map +0 -1
  308. package/dist/twilio/call.js +0 -79
  309. package/dist/twilio/call.js.map +0 -1
  310. package/dist/vault/matcher.js +0 -197
  311. package/dist/vault/matcher.js.map +0 -1
  312. package/dist/vault/personal.js +0 -163
  313. package/dist/vault/personal.js.map +0 -1
  314. package/dist/vault/policy.js +0 -159
  315. package/dist/vault/policy.js.map +0 -1
  316. package/dist/vault/store.js +0 -122
  317. package/dist/vault/store.js.map +0 -1
  318. package/dist/vault/transfer.js +0 -188
  319. package/dist/vault/transfer.js.map +0 -1
  320. package/dist/volumes/index.js +0 -2
  321. package/dist/volumes/index.js.map +0 -1
  322. package/dist/volumes/manager.js +0 -462
  323. package/dist/volumes/manager.js.map +0 -1
  324. package/dist/volumes/types.js +0 -8
  325. package/dist/volumes/types.js.map +0 -1
  326. package/dist/webhooks/config.js +0 -214
  327. package/dist/webhooks/config.js.map +0 -1
  328. package/dist/webhooks/event-log.js +0 -132
  329. package/dist/webhooks/event-log.js.map +0 -1
  330. package/dist/webhooks/handler.js +0 -103
  331. package/dist/webhooks/handler.js.map +0 -1
  332. package/dist/webhooks/handlers.js +0 -231
  333. package/dist/webhooks/handlers.js.map +0 -1
  334. package/dist/webhooks/index.js +0 -33
  335. package/dist/webhooks/index.js.map +0 -1
  336. package/dist/webhooks/mount.js +0 -400
  337. package/dist/webhooks/mount.js.map +0 -1
  338. package/dist/webhooks/registry.js +0 -143
  339. package/dist/webhooks/registry.js.map +0 -1
  340. package/dist/webhooks/relay.js +0 -53
  341. package/dist/webhooks/relay.js.map +0 -1
  342. package/dist/webhooks/retry.js +0 -270
  343. package/dist/webhooks/retry.js.map +0 -1
  344. package/dist/webhooks/router.js +0 -290
  345. package/dist/webhooks/router.js.map +0 -1
  346. package/dist/webhooks/twilio.js +0 -129
  347. package/dist/webhooks/twilio.js.map +0 -1
  348. package/dist/webhooks/types.js +0 -8
  349. package/dist/webhooks/types.js.map +0 -1
  350. package/dist/webhooks/verify.js +0 -154
  351. package/dist/webhooks/verify.js.map +0 -1
@@ -1,432 +0,0 @@
1
- /**
2
- * Google Tasks integration facade — single entry point for the HUMAN's
3
- * personal task management via Google Tasks.
4
- *
5
- * Consolidates: Google OAuth auth, CRUD operations, recurring tasks,
6
- * polling timer, notification integration, and lifecycle management.
7
- *
8
- * This is separate from Core's internal queue — it's for the human's
9
- * personal tasks and reminders.
10
- *
11
- * Usage:
12
- * import { initGoogleTasks, shutdownGoogleTasks, getGoogleTasksStatus } from "./integrations/google-tasks.js";
13
- * // At startup:
14
- * initGoogleTasks();
15
- * // In routes / agent code:
16
- * const status = await getGoogleTasksStatus();
17
- * if (status.available) { ... }
18
- */
19
- import { isGoogleConfigured, isGoogleAuthenticated, getAuthUrl, exchangeCode, clearTokenCache, } from "../google/auth.js";
20
- import { isTasksAvailable, listTaskLists, createTaskList, updateTaskList, deleteTaskList, listTasks, getTask, createTask, updateTask, completeTask, uncompleteTask, deleteTask, createRecurringWeeklyTasks, formatTasksForContext, } from "../google/tasks.js";
21
- import { startTasksTimer, stopTasksTimer, isTasksTimerRunning, } from "../google/tasks-timer.js";
22
- import { pushNotification } from "../goals/notifications.js";
23
- import { logActivity } from "../activity/log.js";
24
- import { createLogger } from "../utils/logger.js";
25
- const log = createLogger("integration.google-tasks");
26
- // ─── Lifecycle ───────────────────────────────────────────────────────────────
27
- let initialized = false;
28
- /**
29
- * Initialize the Google Tasks integration.
30
- * Starts the background polling timer for due-task notifications.
31
- * Safe to call multiple times — second call is a no-op.
32
- */
33
- export function initGoogleTasks(pollIntervalMs) {
34
- if (initialized)
35
- return;
36
- initialized = true;
37
- if (isGoogleAuthenticated()) {
38
- startTasksTimer(pollIntervalMs);
39
- logActivity({ source: "tasks", summary: "Google Tasks integration initialized" });
40
- log.info("Google Tasks integration initialized");
41
- }
42
- else {
43
- log.warn("Google Tasks not authenticated — timer not started");
44
- logActivity({
45
- source: "tasks",
46
- summary: "Google Tasks init skipped — not authenticated",
47
- });
48
- }
49
- }
50
- /**
51
- * Shut down the Google Tasks integration.
52
- * Stops the background polling timer.
53
- */
54
- export function shutdownGoogleTasks() {
55
- stopTasksTimer();
56
- initialized = false;
57
- logActivity({ source: "tasks", summary: "Google Tasks integration shut down" });
58
- log.info("Google Tasks integration shut down");
59
- }
60
- /**
61
- * Get the full integration status: config, auth, timer health.
62
- */
63
- export function getGoogleTasksStatus() {
64
- const configured = isGoogleConfigured();
65
- const authenticated = isGoogleAuthenticated();
66
- if (!configured) {
67
- return {
68
- available: false,
69
- configured: false,
70
- authenticated: false,
71
- timerRunning: false,
72
- error: "GOOGLE_CLIENT_ID and/or GOOGLE_CLIENT_SECRET not set in vault",
73
- };
74
- }
75
- if (!authenticated) {
76
- return {
77
- available: false,
78
- configured: true,
79
- authenticated: false,
80
- timerRunning: false,
81
- error: "GOOGLE_REFRESH_TOKEN not set — OAuth flow not completed",
82
- };
83
- }
84
- return {
85
- available: true,
86
- configured: true,
87
- authenticated: true,
88
- timerRunning: isTasksTimerRunning(),
89
- error: null,
90
- };
91
- }
92
- /**
93
- * Quick availability check (no API call).
94
- */
95
- export function isGoogleTasksAvailable() {
96
- return isTasksAvailable();
97
- }
98
- // ─── Authentication ──────────────────────────────────────────────────────────
99
- /**
100
- * Get the Google OAuth authorization URL for the consent screen.
101
- */
102
- export function getGoogleTasksAuthUrl(redirectUri) {
103
- return getAuthUrl(redirectUri);
104
- }
105
- /**
106
- * Exchange an authorization code for tokens.
107
- * After success, call initGoogleTasks() to start the timer.
108
- */
109
- export async function exchangeGoogleTasksCode(code, redirectUri) {
110
- const result = await exchangeCode(code, redirectUri);
111
- if (result.ok) {
112
- logActivity({
113
- source: "tasks",
114
- summary: "Google Tasks OAuth completed",
115
- actionLabel: "PROMPTED",
116
- reason: "user completed OAuth flow",
117
- });
118
- }
119
- return result;
120
- }
121
- /**
122
- * Clear the cached OAuth access token (e.g., on vault key change).
123
- */
124
- export { clearTokenCache as clearGoogleTasksTokenCache };
125
- // ─── Task List operations ────────────────────────────────────────────────────
126
- /**
127
- * List all Google Task lists for the user.
128
- */
129
- export async function getTaskLists() {
130
- return listTaskLists();
131
- }
132
- /**
133
- * Create a new task list.
134
- */
135
- export async function addTaskList(title) {
136
- const result = await createTaskList(title);
137
- if (result.ok) {
138
- logActivity({
139
- source: "tasks",
140
- summary: `Task list created: ${title}`,
141
- actionLabel: "PROMPTED",
142
- reason: "user created task list",
143
- });
144
- }
145
- return result;
146
- }
147
- /**
148
- * Rename a task list.
149
- */
150
- export async function renameTaskList(taskListId, title) {
151
- const result = await updateTaskList(taskListId, title);
152
- if (result.ok) {
153
- logActivity({
154
- source: "tasks",
155
- summary: `Task list renamed: ${title}`,
156
- actionLabel: "PROMPTED",
157
- });
158
- }
159
- return result;
160
- }
161
- /**
162
- * Delete a task list.
163
- */
164
- export async function removeTaskList(taskListId) {
165
- const result = await deleteTaskList(taskListId);
166
- if (result.ok) {
167
- logActivity({
168
- source: "tasks",
169
- summary: `Task list deleted: ${taskListId}`,
170
- actionLabel: "PROMPTED",
171
- });
172
- }
173
- return result;
174
- }
175
- // ─── Task CRUD ───────────────────────────────────────────────────────────────
176
- /**
177
- * List tasks in a task list.
178
- * @param taskListId - Defaults to "@default" for the user's primary list.
179
- */
180
- export async function getTasks(taskListId, opts) {
181
- return listTasks(taskListId ?? "@default", opts);
182
- }
183
- /**
184
- * Get a single task by ID.
185
- */
186
- export async function getTaskById(taskListId, taskId) {
187
- return getTask(taskListId, taskId);
188
- }
189
- /**
190
- * Create a new task for the human.
191
- * Optionally sends a notification to confirm creation.
192
- */
193
- export async function addTask(title, opts) {
194
- const taskListId = opts?.taskListId ?? "@default";
195
- const result = await createTask(taskListId, {
196
- title,
197
- notes: opts?.notes,
198
- due: opts?.due,
199
- parent: opts?.parent,
200
- });
201
- if (result.ok) {
202
- logActivity({
203
- source: "tasks",
204
- summary: `Task created: ${title}`,
205
- actionLabel: "PROMPTED",
206
- reason: "user created task",
207
- });
208
- if (opts?.notify) {
209
- const dueStr = opts.due ? ` (due: ${opts.due})` : "";
210
- pushNotification({
211
- timestamp: new Date().toISOString(),
212
- source: "tasks",
213
- message: `New task added: ${title}${dueStr}`,
214
- });
215
- }
216
- }
217
- return result;
218
- }
219
- /**
220
- * Update an existing task.
221
- */
222
- export async function editTask(taskListId, taskId, changes) {
223
- const result = await updateTask(taskListId, taskId, changes);
224
- if (result.ok) {
225
- logActivity({
226
- source: "tasks",
227
- summary: `Task updated: ${taskId}`,
228
- actionLabel: "PROMPTED",
229
- });
230
- }
231
- return result;
232
- }
233
- /**
234
- * Mark a task as completed.
235
- */
236
- export async function markTaskDone(taskListId, taskId) {
237
- const result = await completeTask(taskListId, taskId);
238
- if (result.ok && result.data) {
239
- logActivity({
240
- source: "tasks",
241
- summary: `Task completed: ${result.data.title}`,
242
- actionLabel: "PROMPTED",
243
- reason: "user completed task",
244
- });
245
- pushNotification({
246
- timestamp: new Date().toISOString(),
247
- source: "tasks",
248
- message: `Task completed: ${result.data.title}`,
249
- });
250
- }
251
- return result;
252
- }
253
- /**
254
- * Reopen a completed task.
255
- */
256
- export async function markTaskUndone(taskListId, taskId) {
257
- const result = await uncompleteTask(taskListId, taskId);
258
- if (result.ok) {
259
- logActivity({
260
- source: "tasks",
261
- summary: `Task reopened: ${taskId}`,
262
- actionLabel: "PROMPTED",
263
- });
264
- }
265
- return result;
266
- }
267
- /**
268
- * Delete a task.
269
- */
270
- export async function removeTask(taskListId, taskId) {
271
- const result = await deleteTask(taskListId, taskId);
272
- if (result.ok) {
273
- logActivity({
274
- source: "tasks",
275
- summary: `Task deleted: ${taskId}`,
276
- actionLabel: "PROMPTED",
277
- });
278
- }
279
- return result;
280
- }
281
- // ─── Recurring tasks ─────────────────────────────────────────────────────────
282
- /**
283
- * Create recurring weekly tasks (Google Tasks has no native recurrence).
284
- * Generates concrete future tasks for the next N weeks.
285
- */
286
- export async function addRecurringWeeklyTasks(config) {
287
- const result = await createRecurringWeeklyTasks(config);
288
- if (result.ok) {
289
- const dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
290
- logActivity({
291
- source: "tasks",
292
- summary: `Recurring tasks created: ${config.title} every ${dayNames[config.dayOfWeek]}`,
293
- actionLabel: "PROMPTED",
294
- reason: "user set up recurring task",
295
- });
296
- }
297
- return result;
298
- }
299
- // ─── Context & summaries ─────────────────────────────────────────────────────
300
- /**
301
- * Get a human-readable summary of pending tasks for LLM context injection.
302
- * Fetches incomplete tasks from the default list and formats them.
303
- */
304
- export async function getTasksSummary(taskListId) {
305
- const result = await listTasks(taskListId ?? "@default", {
306
- showCompleted: false,
307
- });
308
- if (!result.ok || !result.data) {
309
- return { ok: false, message: result.message };
310
- }
311
- return {
312
- ok: true,
313
- summary: formatTasksForContext(result.data),
314
- taskCount: result.data.length,
315
- message: `${result.data.length} pending tasks`,
316
- };
317
- }
318
- /**
319
- * Get tasks due today for daily briefing / notification digest.
320
- */
321
- export async function getTasksDueToday(taskListId) {
322
- const now = new Date();
323
- const endOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);
324
- const result = await listTasks(taskListId ?? "@default", {
325
- showCompleted: false,
326
- dueMax: endOfDay.toISOString(),
327
- });
328
- if (!result.ok || !result.data) {
329
- return { ok: false, message: result.message };
330
- }
331
- return {
332
- ok: true,
333
- data: result.data,
334
- summary: formatTasksForContext(result.data),
335
- message: `${result.data.length} tasks due today`,
336
- };
337
- }
338
- /**
339
- * Get overdue tasks that need attention.
340
- */
341
- export async function getOverdueTasks(taskListId) {
342
- const now = new Date();
343
- // Get tasks due before right now
344
- const result = await listTasks(taskListId ?? "@default", {
345
- showCompleted: false,
346
- dueMax: now.toISOString(),
347
- });
348
- if (!result.ok || !result.data) {
349
- return { ok: false, message: result.message };
350
- }
351
- // Filter to only actually overdue (due date in the past)
352
- const overdue = result.data.filter((t) => {
353
- if (!t.due)
354
- return false;
355
- const match = t.due.match(/^(\d{4})-(\d{2})-(\d{2})/);
356
- if (!match)
357
- return false;
358
- const dueDate = new Date(parseInt(match[1]), parseInt(match[2]) - 1, parseInt(match[3]), 23, 59, 59);
359
- return dueDate.getTime() < now.getTime();
360
- });
361
- return {
362
- ok: true,
363
- data: overdue,
364
- summary: formatTasksForContext(overdue),
365
- message: `${overdue.length} overdue tasks`,
366
- };
367
- }
368
- // ─── Notification helpers ────────────────────────────────────────────────────
369
- /**
370
- * Push a daily task digest notification.
371
- * Intended to be called from a daily cron/timer.
372
- */
373
- export async function pushDailyTaskDigest() {
374
- const [dueResult, overdueResult] = await Promise.all([
375
- getTasksDueToday(),
376
- getOverdueTasks(),
377
- ]);
378
- const parts = [];
379
- if (overdueResult.ok && overdueResult.data && overdueResult.data.length > 0) {
380
- parts.push(`${overdueResult.data.length} overdue task(s)`);
381
- }
382
- if (dueResult.ok && dueResult.data && dueResult.data.length > 0) {
383
- parts.push(`${dueResult.data.length} task(s) due today`);
384
- }
385
- if (parts.length === 0) {
386
- return { ok: true, message: "No tasks need attention today" };
387
- }
388
- const message = `Task digest: ${parts.join(", ")}`;
389
- pushNotification({
390
- timestamp: new Date().toISOString(),
391
- source: "tasks",
392
- message,
393
- });
394
- logActivity({
395
- source: "tasks",
396
- summary: message,
397
- actionLabel: "AUTONOMOUS",
398
- reason: "daily task digest",
399
- });
400
- return { ok: true, message };
401
- }
402
- // ─── Quick-command helpers ────────────────────────────────────────────────────
403
- /**
404
- * Quick add: parse a natural-language-ish task string.
405
- * Supports "title due:YYYY-MM-DD" and "title note:some notes".
406
- *
407
- * Example: quickAddTask("Buy groceries due:2026-03-01 note:organic milk")
408
- */
409
- export async function quickAddTask(input, taskListId) {
410
- let title = input;
411
- let due;
412
- let notes;
413
- // Extract due:YYYY-MM-DD
414
- const dueMatch = input.match(/\bdue:(\d{4}-\d{2}-\d{2})\b/);
415
- if (dueMatch) {
416
- due = dueMatch[1];
417
- title = title.replace(dueMatch[0], "").trim();
418
- }
419
- // Extract note:...
420
- const noteMatch = input.match(/\bnote:(.+)$/);
421
- if (noteMatch) {
422
- notes = noteMatch[1].trim();
423
- title = title.replace(noteMatch[0], "").trim();
424
- }
425
- if (!title) {
426
- return { ok: false, message: "Task title is required" };
427
- }
428
- return addTask(title, { due, notes, taskListId: taskListId ?? "@default" });
429
- }
430
- // ─── Re-exports for convenience ──────────────────────────────────────────────
431
- export { formatTasksForContext };
432
- //# sourceMappingURL=google-tasks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-tasks.js","sourceRoot":"","sources":["../../src/integrations/google-tasks.ts"],"names":[],"mappings":"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"}
package/dist/mdns.js DELETED
@@ -1,110 +0,0 @@
1
- /**
2
- * mDNS service announcement for Core board discovery.
3
- * Announces the HTTP server as `_core-board._tcp.local` so that
4
- * Dash and other instances can find it on the LAN automatically.
5
- *
6
- * Gated behind `settings.mesh.lanAnnounce` — disabled by default.
7
- */
8
- import mdns from "multicast-dns";
9
- import { hostname } from "node:os";
10
- import { createLogger } from "./utils/logger.js";
11
- import { getInstanceName } from "./instance.js";
12
- const log = createLogger("mdns");
13
- const SERVICE_TYPE = "_core-board._tcp.local";
14
- let responder = null;
15
- let announcedPort = 0;
16
- /**
17
- * Start announcing the Core board service on the local network.
18
- * Call after the HTTP server is listening and the actual port is known.
19
- */
20
- export function startMdns(port) {
21
- if (responder)
22
- return; // already running
23
- announcedPort = port;
24
- const instance = getInstanceName();
25
- const host = hostname();
26
- const serviceName = `${instance}._core-board._tcp.local`;
27
- responder = mdns();
28
- // Respond to queries for our service type
29
- responder.on("query", (query) => {
30
- const dominated = query.questions.some((q) => q.name === SERVICE_TYPE ||
31
- q.name === serviceName);
32
- if (!dominated)
33
- return;
34
- responder.respond({
35
- answers: [
36
- {
37
- name: serviceName,
38
- type: "SRV",
39
- data: { port: announcedPort, target: host, priority: 0, weight: 0 },
40
- },
41
- {
42
- name: serviceName,
43
- type: "TXT",
44
- data: [`instance=${instance}`, `port=${announcedPort}`],
45
- },
46
- {
47
- name: SERVICE_TYPE,
48
- type: "PTR",
49
- data: serviceName,
50
- },
51
- ],
52
- });
53
- });
54
- // Proactive announcement (GBYE → announce pattern)
55
- responder.respond({
56
- answers: [
57
- {
58
- name: SERVICE_TYPE,
59
- type: "PTR",
60
- data: serviceName,
61
- },
62
- {
63
- name: serviceName,
64
- type: "SRV",
65
- data: { port: announcedPort, target: host, priority: 0, weight: 0 },
66
- },
67
- {
68
- name: serviceName,
69
- type: "TXT",
70
- data: [`instance=${instance}`, `port=${announcedPort}`],
71
- },
72
- ],
73
- });
74
- log.info(`mDNS announcing ${serviceName} on port ${announcedPort}`);
75
- }
76
- /**
77
- * Stop the mDNS responder and send a goodbye packet.
78
- */
79
- export function stopMdns() {
80
- if (!responder)
81
- return;
82
- const instance = getInstanceName();
83
- const serviceName = `${instance}._core-board._tcp.local`;
84
- // Send goodbye (TTL=0) so peers flush the record immediately
85
- try {
86
- responder.respond({
87
- answers: [
88
- {
89
- name: SERVICE_TYPE,
90
- type: "PTR",
91
- data: serviceName,
92
- ttl: 0,
93
- },
94
- {
95
- name: serviceName,
96
- type: "SRV",
97
- data: { port: announcedPort, target: hostname(), priority: 0, weight: 0 },
98
- ttl: 0,
99
- },
100
- ],
101
- });
102
- }
103
- catch {
104
- // best-effort goodbye
105
- }
106
- responder.destroy();
107
- responder = null;
108
- log.info("mDNS responder stopped");
109
- }
110
- //# sourceMappingURL=mdns.js.map
package/dist/mdns.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- /**
2
- * Base notification channel types and utilities.
3
- *
4
- * Re-exports the NotificationChannel interface and provides
5
- * a channel registry for managing multiple delivery channels.
6
- */
7
- import { createLogger } from "../utils/logger.js";
8
- const log = createLogger("notifications");
9
- /** Registry that dispatches alerts to multiple channels. */
10
- export class NotificationDispatcher {
11
- channels = new Map();
12
- /** Register a notification channel. */
13
- add(channel) {
14
- this.channels.set(channel.name, channel);
15
- }
16
- /** Remove a channel by name. */
17
- remove(name) {
18
- this.channels.delete(name);
19
- }
20
- /** Get a channel by name. */
21
- get(name) {
22
- return this.channels.get(name);
23
- }
24
- /** List all registered channel names. */
25
- list() {
26
- return [...this.channels.keys()];
27
- }
28
- /** Send an alert to a specific channel. */
29
- async sendTo(channelName, alert) {
30
- const channel = this.channels.get(channelName);
31
- if (!channel || !channel.enabled) {
32
- log.warn("channel send skipped — channel not found or disabled", { channelName, alertId: alert.id });
33
- return false;
34
- }
35
- try {
36
- const result = await channel.send(alert);
37
- if (result) {
38
- log.info("channel send succeeded", { channelName, alertId: alert.id, severity: alert.severity });
39
- }
40
- else {
41
- log.warn("channel send returned false", { channelName, alertId: alert.id });
42
- }
43
- return result;
44
- }
45
- catch (err) {
46
- log.error("channel send threw an error", { channelName, alertId: alert.id, error: String(err) });
47
- return false;
48
- }
49
- }
50
- /** Send an alert to all enabled channels. Returns map of channel → success. */
51
- async broadcast(alert) {
52
- const results = {};
53
- const entries = [...this.channels.entries()];
54
- log.info("broadcast dispatching alert to channels", {
55
- alertId: alert.id,
56
- severity: alert.severity,
57
- channelCount: entries.length,
58
- });
59
- const promises = entries.map(async ([name, channel]) => {
60
- if (!channel.enabled) {
61
- log.debug("broadcast skipping disabled channel", { channel: name, alertId: alert.id });
62
- results[name] = false;
63
- return;
64
- }
65
- try {
66
- results[name] = await channel.send(alert);
67
- if (results[name]) {
68
- log.info("broadcast channel send succeeded", { channel: name, alertId: alert.id });
69
- }
70
- else {
71
- log.warn("broadcast channel send returned false", { channel: name, alertId: alert.id });
72
- }
73
- }
74
- catch (err) {
75
- log.error("broadcast channel send threw an error", { channel: name, alertId: alert.id, error: String(err) });
76
- results[name] = false;
77
- }
78
- });
79
- await Promise.allSettled(promises);
80
- return results;
81
- }
82
- }
83
- //# sourceMappingURL=channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/notifications/channel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAI1C,4DAA4D;AAC5D,MAAM,OAAO,sBAAsB;IACzB,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE1D,uCAAuC;IACvC,GAAG,CAAC,OAA4B;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,6BAA6B;IAC7B,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,yCAAyC;IACzC,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,KAAY;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,sDAAsD,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACrG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,SAAS,CAAC,KAAY;QAC1B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,yCAAyC,EAAE;YAClD,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,OAAO,CAAC,MAAM;SAC7B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClB,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrF,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7G,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}