@aurora-foundation/obsidian-next 0.4.7 → 0.4.9

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 (232) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +628 -190
  3. package/README.md +23 -9
  4. package/dist/auditLog-6WDBDNYL.js +8 -0
  5. package/dist/auditLog-HGPVDSDC.js +8 -0
  6. package/dist/auditLog-TDIKFBM4.js +8 -0
  7. package/dist/auditLog-XC2KY3ZZ.js +8 -0
  8. package/dist/chunk-2I235WNB.js +133 -0
  9. package/dist/chunk-2JWDGXTR.js +42 -0
  10. package/dist/chunk-2NOB6W2B.js +133 -0
  11. package/dist/chunk-3LFKVKKL.js +7199 -0
  12. package/dist/chunk-3U6WHPDX.js +4695 -0
  13. package/dist/chunk-3UCL6RYE.js +7272 -0
  14. package/dist/chunk-4GN2UQLI.js +130 -0
  15. package/dist/chunk-4MW33MZD.js +516 -0
  16. package/dist/chunk-4PUJBUKZ.js +4716 -0
  17. package/dist/chunk-4QHK6H6O.js +130 -0
  18. package/dist/chunk-55CQIHCO.js +133 -0
  19. package/dist/chunk-5LWINFWI.js +676 -0
  20. package/dist/chunk-5OKGLNQW.js +439 -0
  21. package/dist/chunk-5T6ETZEO.js +6183 -0
  22. package/dist/chunk-5WGIFUVL.js +4234 -0
  23. package/dist/chunk-66EW47T3.js +4237 -0
  24. package/dist/chunk-6TXUOTT2.js +581 -0
  25. package/dist/chunk-6YUYSYDA.js +130 -0
  26. package/dist/chunk-74VPNFMX.js +133 -0
  27. package/dist/chunk-77CGJRGV.js +6188 -0
  28. package/dist/chunk-7DS3VT4C.js +7135 -0
  29. package/dist/chunk-7FHX3VBT.js +133 -0
  30. package/dist/chunk-7MHF56YU.js +6178 -0
  31. package/dist/chunk-ABLPMV7G.js +133 -0
  32. package/dist/chunk-B77K6OQZ.js +687 -0
  33. package/dist/chunk-BKOXH66O.js +133 -0
  34. package/dist/chunk-BPP76UN2.js +130 -0
  35. package/dist/chunk-C4D56GRC.js +5936 -0
  36. package/dist/chunk-CCDPY4WE.js +370 -0
  37. package/dist/chunk-CHNVBJN3.js +7272 -0
  38. package/dist/chunk-CKBZI576.js +7229 -0
  39. package/dist/chunk-CW5HBSJ2.js +7198 -0
  40. package/dist/chunk-DGHDJEY7.js +133 -0
  41. package/dist/chunk-DPNIQWKZ.js +439 -0
  42. package/dist/chunk-DU4T3V2T.js +214 -0
  43. package/dist/chunk-DV3WFKNB.js +4679 -0
  44. package/dist/chunk-DZI2OVN2.js +516 -0
  45. package/dist/chunk-E45VILML.js +7198 -0
  46. package/dist/chunk-ECEUUYXC.js +7199 -0
  47. package/dist/chunk-EJRRSHPW.js +685 -0
  48. package/dist/chunk-EMBMLZFE.js +370 -0
  49. package/dist/chunk-EPG5V5OO.js +285 -0
  50. package/dist/chunk-F2R4HXXW.js +130 -0
  51. package/dist/chunk-FK6N66ES.js +581 -0
  52. package/dist/chunk-G3CZKGYA.js +197 -0
  53. package/dist/chunk-GUUPG4A7.js +7111 -0
  54. package/dist/chunk-HBAAUGUN.js +7230 -0
  55. package/dist/chunk-HHFJMK2Q.js +6177 -0
  56. package/dist/chunk-HINRQTCZ.js +196 -0
  57. package/dist/chunk-HRKJ3R2U.js +288 -0
  58. package/dist/chunk-HWVK4CVE.js +439 -0
  59. package/dist/chunk-JEYSADNZ.js +581 -0
  60. package/dist/chunk-JNEIL7UN.js +4252 -0
  61. package/dist/chunk-JTWSK277.js +676 -0
  62. package/dist/chunk-K4CHTTCJ.js +942 -0
  63. package/dist/chunk-K7R5KUDS.js +4695 -0
  64. package/dist/chunk-KNJFOURE.js +7151 -0
  65. package/dist/chunk-KY22FIT3.js +7256 -0
  66. package/dist/chunk-L2OTIJSF.js +4228 -0
  67. package/dist/chunk-LEEBUHP6.js +4655 -0
  68. package/dist/chunk-LK7UP2T7.js +130 -0
  69. package/dist/chunk-LPGNO3PK.js +284 -0
  70. package/dist/chunk-LYQYJMWS.js +133 -0
  71. package/dist/chunk-MBYFJXR3.js +130 -0
  72. package/dist/chunk-N3WX44L3.js +130 -0
  73. package/dist/chunk-N6AQWES3.js +6197 -0
  74. package/dist/chunk-NW4XSTQZ.js +130 -0
  75. package/dist/chunk-NWG2XURH.js +130 -0
  76. package/dist/chunk-O3GF3LJD.js +6142 -0
  77. package/dist/chunk-OHP5LD3Y.js +6188 -0
  78. package/dist/chunk-P5PQSFZT.js +6182 -0
  79. package/dist/chunk-PAADOWNP.js +130 -0
  80. package/dist/chunk-PERGND7L.js +7213 -0
  81. package/dist/chunk-PWA7V4XX.js +179 -0
  82. package/dist/chunk-QGCWEP6L.js +7111 -0
  83. package/dist/chunk-QVT2IHNJ.js +175 -0
  84. package/dist/chunk-QZNGYPMS.js +6161 -0
  85. package/dist/chunk-R6P2E2ZQ.js +207 -0
  86. package/dist/chunk-ROSDMGIL.js +4679 -0
  87. package/dist/chunk-RQZP7IKG.js +196 -0
  88. package/dist/chunk-RUQSPX3U.js +133 -0
  89. package/dist/chunk-S3BYHP5M.js +130 -0
  90. package/dist/chunk-S6GNETVE.js +438 -0
  91. package/dist/chunk-SDT2ZE2R.js +133 -0
  92. package/dist/chunk-SHQBXJFC.js +6166 -0
  93. package/dist/chunk-TJNISYTE.js +42 -0
  94. package/dist/chunk-TJW74HFF.js +130 -0
  95. package/dist/chunk-TPP72DTK.js +7096 -0
  96. package/dist/chunk-UOESII6R.js +42 -0
  97. package/dist/chunk-UWEDGLYJ.js +6142 -0
  98. package/dist/chunk-V5FYNAFX.js +133 -0
  99. package/dist/chunk-VPURF6UT.js +7198 -0
  100. package/dist/chunk-VQH6LWIZ.js +6184 -0
  101. package/dist/chunk-VS22YVX6.js +7111 -0
  102. package/dist/chunk-VSF5KBW7.js +367 -0
  103. package/dist/chunk-VV3JMCKY.js +214 -0
  104. package/dist/chunk-W5L7HOE3.js +133 -0
  105. package/dist/chunk-WFEVQISK.js +676 -0
  106. package/dist/chunk-WJZPSCEP.js +516 -0
  107. package/dist/chunk-WLV4MKEF.js +16 -0
  108. package/dist/chunk-WSEVQFFI.js +5428 -0
  109. package/dist/chunk-X7N2RNR3.js +5428 -0
  110. package/dist/chunk-XKZNMRNO.js +133 -0
  111. package/dist/chunk-Y7BVEC36.js +130 -0
  112. package/dist/chunk-YG7YSNNU.js +4226 -0
  113. package/dist/chunk-YHM62466.js +261 -0
  114. package/dist/chunk-YLTYJLDZ.js +7208 -0
  115. package/dist/chunk-YPMJD4YE.js +56 -0
  116. package/dist/chunk-YTX3FU2A.js +7199 -0
  117. package/dist/chunk-ZEQ3EBBN.js +214 -0
  118. package/dist/chunk-ZIWLQSLK.js +42 -0
  119. package/dist/chunk-ZJELNTEO.js +516 -0
  120. package/dist/chunk-ZOSSVNGK.js +370 -0
  121. package/dist/config-EYK32F2E.js +10 -0
  122. package/dist/config-FJPPPYTY.js +10 -0
  123. package/dist/config-VAHPVILX.js +10 -0
  124. package/dist/context-2YGE4U75.js +10 -0
  125. package/dist/context-5UFVYKES.js +9 -0
  126. package/dist/context-ANZF4J72.js +10 -0
  127. package/dist/context-GLUNCUBQ.js +10 -0
  128. package/dist/context-M5ULPZKQ.js +10 -0
  129. package/dist/context-NYOIRZKV.js +10 -0
  130. package/dist/context-YP2REI6A.js +10 -0
  131. package/dist/database-MP2JBLMF.js +8 -0
  132. package/dist/index.js +6177 -4688
  133. package/dist/keyManager-P2SZONKE.js +8 -0
  134. package/dist/mcp/index.js +127 -47
  135. package/dist/memory-BPGJAL4J.js +13 -0
  136. package/dist/memory-FRQOUI6W.js +13 -0
  137. package/dist/memory-OAMK27IZ.js +13 -0
  138. package/dist/memory-OZ734ALL.js +13 -0
  139. package/dist/memory-PQ2EWRMU.js +13 -0
  140. package/dist/memory-PXL45M6W.js +13 -0
  141. package/dist/memory-QZTBTYPH.js +13 -0
  142. package/dist/migrations-TLJ3WRVW.js +188 -0
  143. package/dist/resume-2NHDK6EI.js +17 -0
  144. package/dist/resume-44L2PDB2.js +17 -0
  145. package/dist/resume-4MXIWUJO.js +7 -0
  146. package/dist/resume-72VJX66I.js +17 -0
  147. package/dist/resume-7ZW4XM3B.js +15 -0
  148. package/dist/resume-AZHYQ657.js +17 -0
  149. package/dist/resume-CNLXSYHV.js +17 -0
  150. package/dist/resume-DPN4Q777.js +16 -0
  151. package/dist/resume-DSFHVNPI.js +15 -0
  152. package/dist/resume-GHLQJJTO.js +17 -0
  153. package/dist/resume-HJ6SBWTF.js +17 -0
  154. package/dist/resume-HRLYHY2L.js +17 -0
  155. package/dist/resume-ISIQFKO6.js +17 -0
  156. package/dist/resume-JQDEA6PS.js +15 -0
  157. package/dist/resume-KP3Y3Y7P.js +17 -0
  158. package/dist/resume-M4KHR5OI.js +17 -0
  159. package/dist/resume-N62OAMBG.js +17 -0
  160. package/dist/resume-NNMA5POT.js +17 -0
  161. package/dist/resume-ODYT3J4H.js +17 -0
  162. package/dist/resume-PCFJXA5O.js +17 -0
  163. package/dist/resume-PLF4XGBD.js +15 -0
  164. package/dist/resume-Q2PFX57V.js +17 -0
  165. package/dist/resume-QB4XI2J5.js +17 -0
  166. package/dist/resume-R5MFTUPF.js +17 -0
  167. package/dist/resume-SVA7223Z.js +17 -0
  168. package/dist/resume-TYKKDJZI.js +17 -0
  169. package/dist/resume-XIS45HKV.js +17 -0
  170. package/dist/resume-YCSEJTU7.js +17 -0
  171. package/dist/resume-YD76GI2J.js +15 -0
  172. package/dist/resume-YDN7EL77.js +17 -0
  173. package/dist/resume-YE7DB4ZA.js +17 -0
  174. package/dist/resume-YKAKOXWV.js +15 -0
  175. package/dist/resume-ZHBCVFDY.js +17 -0
  176. package/dist/scheduler-2CK24A2Q.js +14 -0
  177. package/dist/scheduler-7OAF2XKX.js +14 -0
  178. package/dist/scheduler-AS23AAB5.js +14 -0
  179. package/dist/scheduler-PCOYQJA5.js +14 -0
  180. package/dist/scheduler-V2ECBQPK.js +14 -0
  181. package/dist/scheduler-VEWZ6L7V.js +13 -0
  182. package/dist/scheduler-W37QMGDQ.js +14 -0
  183. package/dist/session-2E2JKPD7.js +15 -0
  184. package/dist/session-2VSF257B.js +14 -0
  185. package/dist/session-4APFTDJU.js +14 -0
  186. package/dist/session-5YS5LNNL.js +16 -0
  187. package/dist/session-6MO5ZPOB.js +16 -0
  188. package/dist/session-6XMGPRTQ.js +14 -0
  189. package/dist/session-7DJR77R7.js +16 -0
  190. package/dist/session-7DQHPWTR.js +14 -0
  191. package/dist/session-ADKIQCR5.js +16 -0
  192. package/dist/session-AOGH2GGI.js +16 -0
  193. package/dist/session-C4W6GDYG.js +16 -0
  194. package/dist/session-DCGNGGMV.js +14 -0
  195. package/dist/session-F5JKZAN2.js +16 -0
  196. package/dist/session-G6F3O2FQ.js +16 -0
  197. package/dist/session-GFBSARRO.js +16 -0
  198. package/dist/session-H5IWAIUI.js +16 -0
  199. package/dist/session-IPFA6AHC.js +14 -0
  200. package/dist/session-IWG2UOAX.js +14 -0
  201. package/dist/session-KJ2K4Y4M.js +14 -0
  202. package/dist/session-KPXFBW6Q.js +14 -0
  203. package/dist/session-KR256UL5.js +16 -0
  204. package/dist/session-M72LJXPR.js +16 -0
  205. package/dist/session-MBK3FODN.js +14 -0
  206. package/dist/session-MOUFAU7G.js +16 -0
  207. package/dist/session-NRC6ZXFQ.js +16 -0
  208. package/dist/session-NRPQMV4K.js +16 -0
  209. package/dist/session-O5IFFJZQ.js +14 -0
  210. package/dist/session-OF5BGKDE.js +16 -0
  211. package/dist/session-OGRZMIM7.js +14 -0
  212. package/dist/session-OJOFAJG3.js +16 -0
  213. package/dist/session-OKU4N3SP.js +16 -0
  214. package/dist/session-P2VAOSFB.js +14 -0
  215. package/dist/session-PKOVZD4M.js +16 -0
  216. package/dist/session-POAIMUVN.js +16 -0
  217. package/dist/session-PSHFONFE.js +16 -0
  218. package/dist/session-QKYVVZFV.js +16 -0
  219. package/dist/session-QPWGBMUS.js +14 -0
  220. package/dist/session-R5UG5PZR.js +14 -0
  221. package/dist/session-RAY6BZRQ.js +16 -0
  222. package/dist/session-S3VATHMU.js +16 -0
  223. package/dist/session-SYTD7RHW.js +14 -0
  224. package/dist/session-UHMMVO4J.js +16 -0
  225. package/dist/session-WEX5K3ZY.js +14 -0
  226. package/dist/session-XFLOXGU3.js +14 -0
  227. package/dist/session-XV2A4HHG.js +14 -0
  228. package/dist/settings-3VPJYD4D.js +8 -0
  229. package/dist/settings-GZTJJTBK.js +8 -0
  230. package/dist/settings-YKJFSKMO.js +8 -0
  231. package/dist/shell-FM34624T.js +8 -0
  232. package/package.json +14 -4
@@ -0,0 +1,261 @@
1
+ import {
2
+ auditLog
3
+ } from "./chunk-EJRRSHPW.js";
4
+ import {
5
+ context
6
+ } from "./chunk-DPNIQWKZ.js";
7
+ import {
8
+ bus
9
+ } from "./chunk-WQM6FFSD.js";
10
+ import {
11
+ db
12
+ } from "./chunk-R6P2E2ZQ.js";
13
+
14
+ // src/core/scheduler.ts
15
+ import cronParser from "cron-parser";
16
+ var parseExpression = cronParser.parseExpression || cronParser.default?.parseExpression || cronParser.parse || cronParser.default?.parse;
17
+ var MAX_CONSECUTIVE_FAILURES = 3;
18
+ var Scheduler = class _Scheduler {
19
+ static instance;
20
+ abilities = /* @__PURE__ */ new Map();
21
+ timer = null;
22
+ isRunning = false;
23
+ failureCounts = /* @__PURE__ */ new Map();
24
+ constructor() {
25
+ }
26
+ static getInstance() {
27
+ if (!_Scheduler.instance) {
28
+ _Scheduler.instance = new _Scheduler();
29
+ }
30
+ return _Scheduler.instance;
31
+ }
32
+ /**
33
+ * Initialize the scheduler loop
34
+ */
35
+ start() {
36
+ if (this.isRunning) return;
37
+ this.isRunning = true;
38
+ this.tick().catch(
39
+ (err) => bus.emitAgent({
40
+ type: "error",
41
+ message: `[Scheduler] Initial tick failed: ${err instanceof Error ? err.message : String(err)}`
42
+ })
43
+ );
44
+ this.timer = setInterval(() => this.tick(), 1e4);
45
+ bus.emitAgent({
46
+ type: "thought",
47
+ content: "[Obsidian] Started background task monitor [Active Heartbeat]"
48
+ });
49
+ }
50
+ stop() {
51
+ if (this.timer) {
52
+ clearInterval(this.timer);
53
+ this.timer = null;
54
+ }
55
+ this.isRunning = false;
56
+ }
57
+ /**
58
+ * Register a new ability that can be scheduled
59
+ */
60
+ registerAbility(name, func) {
61
+ this.abilities.set(name, func);
62
+ }
63
+ /**
64
+ * Get list of registered abilities
65
+ */
66
+ getAbilities() {
67
+ return Array.from(this.abilities.keys());
68
+ }
69
+ /**
70
+ * Schedule a new task
71
+ */
72
+ async scheduleTask(cronExpression, abilityName, params = {}) {
73
+ try {
74
+ parseExpression(cronExpression);
75
+ } catch (err) {
76
+ throw new Error(`Invalid cron expression: ${cronExpression}`);
77
+ }
78
+ if (!this.abilities.has(abilityName)) {
79
+ throw new Error(`Unknown ability: ${abilityName}`);
80
+ }
81
+ const id = `task_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
82
+ const sessionId = context.get().session_id;
83
+ const task = {
84
+ id,
85
+ session_id: sessionId,
86
+ cron_expression: cronExpression,
87
+ command: abilityName,
88
+ params: JSON.stringify(params),
89
+ last_run_at: Date.now(),
90
+ active: 1
91
+ };
92
+ db.getDb().prepare(
93
+ `
94
+ INSERT INTO scheduled_tasks (id, session_id, cron_expression, command, params, last_run_at, active)
95
+ VALUES (?, ?, ?, ?, ?, ?, ?)
96
+ `
97
+ ).run(
98
+ task.id,
99
+ task.session_id,
100
+ task.cron_expression,
101
+ task.command,
102
+ task.params,
103
+ task.last_run_at,
104
+ task.active
105
+ );
106
+ bus.emitAgent({
107
+ type: "thought",
108
+ content: `[Scheduler] Scheduled ${abilityName} (${cronExpression})`
109
+ });
110
+ return task;
111
+ }
112
+ /**
113
+ * List all active tasks
114
+ */
115
+ listTasks() {
116
+ const tasks = db.getDb().prepare(
117
+ `
118
+ SELECT * FROM scheduled_tasks WHERE active = 1
119
+ `
120
+ ).all();
121
+ return tasks.map((t) => {
122
+ try {
123
+ const interval = parseExpression(t.cron_expression);
124
+ t.next_run_at = interval.next().getTime();
125
+ } catch {
126
+ t.next_run_at = 0;
127
+ }
128
+ return t;
129
+ });
130
+ }
131
+ /**
132
+ * Main execution loop
133
+ */
134
+ async tick() {
135
+ const tasks = this.listTasks();
136
+ const now = Date.now();
137
+ for (const task of tasks) {
138
+ try {
139
+ const baseline = task.last_run_at || now - 61e3;
140
+ let taskParams = {};
141
+ try {
142
+ taskParams = task.params ? JSON.parse(task.params) : {};
143
+ } catch {
144
+ }
145
+ if (taskParams.__once && taskParams.__target) {
146
+ if (now >= taskParams.__target) {
147
+ await this.executeTask(task);
148
+ }
149
+ continue;
150
+ }
151
+ const interval = parseExpression(task.cron_expression, {
152
+ currentDate: baseline
153
+ });
154
+ const nextRun = interval.next().getTime();
155
+ if (nextRun <= now) {
156
+ await this.executeTask(task);
157
+ }
158
+ } catch (error) {
159
+ bus.emitAgent({
160
+ type: "error",
161
+ message: `[Scheduler] Error checking task ${task.id}: ${error instanceof Error ? error.message : String(error)}`
162
+ });
163
+ }
164
+ }
165
+ }
166
+ async executeTask(task) {
167
+ const ability = this.abilities.get(task.command);
168
+ if (!ability) {
169
+ bus.emitAgent({
170
+ type: "error",
171
+ message: `[Scheduler] Ability "${task.command}" not found. Disabling task ${task.id}.`
172
+ });
173
+ db.getDb().prepare("UPDATE scheduled_tasks SET active = 0 WHERE id = ?").run(task.id);
174
+ return;
175
+ }
176
+ bus.emitAgent({
177
+ type: "scheduler_task_started",
178
+ taskId: task.id,
179
+ command: task.command
180
+ });
181
+ try {
182
+ let params = {};
183
+ if (task.params) {
184
+ try {
185
+ params = JSON.parse(task.params);
186
+ } catch {
187
+ }
188
+ }
189
+ await ability(params);
190
+ bus.emitAgent({
191
+ type: "scheduler_task_completed",
192
+ taskId: task.id,
193
+ command: task.command
194
+ });
195
+ this.failureCounts.delete(task.id);
196
+ if (params.__once) {
197
+ db.getDb().prepare(`UPDATE scheduled_tasks SET active = 0 WHERE id = ?`).run(task.id);
198
+ bus.emitAgent({
199
+ type: "thought",
200
+ content: `[Scheduler] One-time task ${task.id} completed and deactivated.`
201
+ });
202
+ }
203
+ } catch (error) {
204
+ await auditLog.logSystemEvent("scheduler_error", {
205
+ taskId: task.id,
206
+ error: error.message
207
+ });
208
+ bus.emitAgent({
209
+ type: "scheduler_task_failed",
210
+ taskId: task.id,
211
+ command: task.command,
212
+ error: error.message
213
+ });
214
+ const failures = (this.failureCounts.get(task.id) || 0) + 1;
215
+ this.failureCounts.set(task.id, failures);
216
+ if (failures >= MAX_CONSECUTIVE_FAILURES) {
217
+ db.getDb().prepare("UPDATE scheduled_tasks SET active = 0 WHERE id = ?").run(task.id);
218
+ this.failureCounts.delete(task.id);
219
+ bus.emitAgent({
220
+ type: "error",
221
+ message: `[Scheduler] Task ${task.id} (${task.command}) disabled after ${MAX_CONSECUTIVE_FAILURES} consecutive failures.`
222
+ });
223
+ } else {
224
+ bus.emitAgent({
225
+ type: "error",
226
+ message: `[Scheduler] Task ${task.id} (${task.command}) failed: ${error.message} (${failures}/${MAX_CONSECUTIVE_FAILURES} before auto-disable)`
227
+ });
228
+ }
229
+ } finally {
230
+ db.getDb().prepare(
231
+ `
232
+ UPDATE scheduled_tasks SET last_run_at = ? WHERE id = ?
233
+ `
234
+ ).run(Date.now(), task.id);
235
+ }
236
+ }
237
+ /**
238
+ * Remove (deactivate) a scheduled task
239
+ */
240
+ async removeTask(taskId) {
241
+ const result = db.getDb().prepare(
242
+ `
243
+ UPDATE scheduled_tasks SET active = 0 WHERE id = ?
244
+ `
245
+ ).run(taskId);
246
+ if (result.changes && result.changes > 0) {
247
+ bus.emitAgent({
248
+ type: "thought",
249
+ content: `[Scheduler] Deactivated task: ${taskId}`
250
+ });
251
+ return true;
252
+ }
253
+ return false;
254
+ }
255
+ };
256
+ var scheduler = Scheduler.getInstance();
257
+
258
+ export {
259
+ Scheduler,
260
+ scheduler
261
+ };