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