daycare-cli 0.0.23 → 0.0.24

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 (58) hide show
  1. package/dist/engine/agents/agent.d.ts +5 -0
  2. package/dist/engine/agents/agent.d.ts.map +1 -1
  3. package/dist/engine/agents/agent.js +78 -4
  4. package/dist/engine/agents/agent.js.map +1 -1
  5. package/dist/engine/agents/agent.spec.js +174 -1
  6. package/dist/engine/agents/agent.spec.js.map +1 -1
  7. package/dist/engine/agents/ops/compactionLogAppend.d.ts +23 -0
  8. package/dist/engine/agents/ops/compactionLogAppend.d.ts.map +1 -0
  9. package/dist/engine/agents/ops/compactionLogAppend.js +77 -0
  10. package/dist/engine/agents/ops/compactionLogAppend.js.map +1 -0
  11. package/dist/engine/agents/ops/contextCompact.d.ts +6 -1
  12. package/dist/engine/agents/ops/contextCompact.d.ts.map +1 -1
  13. package/dist/engine/agents/ops/contextCompact.js +51 -15
  14. package/dist/engine/agents/ops/contextCompact.js.map +1 -1
  15. package/dist/engine/agents/ops/contextCompact.spec.d.ts +2 -0
  16. package/dist/engine/agents/ops/contextCompact.spec.d.ts.map +1 -0
  17. package/dist/engine/agents/ops/contextCompact.spec.js +116 -0
  18. package/dist/engine/agents/ops/contextCompact.spec.js.map +1 -0
  19. package/dist/engine/engine.d.ts +1 -1
  20. package/dist/engine/engine.d.ts.map +1 -1
  21. package/dist/engine/engine.js +6 -6
  22. package/dist/engine/engine.js.map +1 -1
  23. package/dist/engine/engine.spec.js +5 -5
  24. package/dist/engine/engine.spec.js.map +1 -1
  25. package/dist/engine/modules/connectorRegistry.js +2 -2
  26. package/dist/engine/modules/connectorRegistry.js.map +1 -1
  27. package/dist/engine/modules/connectorRegistry.spec.js +6 -6
  28. package/dist/engine/modules/connectorRegistry.spec.js.map +1 -1
  29. package/dist/plugins/upgrade/plugin.d.ts.map +1 -1
  30. package/dist/plugins/upgrade/plugin.js +71 -2
  31. package/dist/plugins/upgrade/plugin.js.map +1 -1
  32. package/dist/plugins/upgrade/plugin.spec.js +204 -0
  33. package/dist/plugins/upgrade/plugin.spec.js.map +1 -1
  34. package/dist/plugins/upgrade/upgradeRestartPendingClear.d.ts +6 -0
  35. package/dist/plugins/upgrade/upgradeRestartPendingClear.d.ts.map +1 -0
  36. package/dist/plugins/upgrade/upgradeRestartPendingClear.js +10 -0
  37. package/dist/plugins/upgrade/upgradeRestartPendingClear.js.map +1 -0
  38. package/dist/plugins/upgrade/upgradeRestartPendingSet.d.ts +15 -0
  39. package/dist/plugins/upgrade/upgradeRestartPendingSet.d.ts.map +1 -0
  40. package/dist/plugins/upgrade/upgradeRestartPendingSet.js +16 -0
  41. package/dist/plugins/upgrade/upgradeRestartPendingSet.js.map +1 -0
  42. package/dist/plugins/upgrade/upgradeRestartPendingTake.d.ts +7 -0
  43. package/dist/plugins/upgrade/upgradeRestartPendingTake.d.ts.map +1 -0
  44. package/dist/plugins/upgrade/upgradeRestartPendingTake.js +53 -0
  45. package/dist/plugins/upgrade/upgradeRestartPendingTake.js.map +1 -0
  46. package/dist/plugins/upgrade/upgradeRestartPendingTypes.d.ts +8 -0
  47. package/dist/plugins/upgrade/upgradeRestartPendingTypes.d.ts.map +1 -0
  48. package/dist/plugins/upgrade/upgradeRestartPendingTypes.js +2 -0
  49. package/dist/plugins/upgrade/upgradeRestartPendingTypes.js.map +1 -0
  50. package/dist/plugins/upgrade/upgradeRestartRun.d.ts +12 -0
  51. package/dist/plugins/upgrade/upgradeRestartRun.d.ts.map +1 -0
  52. package/dist/plugins/upgrade/upgradeRestartRun.js +49 -0
  53. package/dist/plugins/upgrade/upgradeRestartRun.js.map +1 -0
  54. package/dist/plugins/upgrade/upgradeRestartRun.spec.d.ts +2 -0
  55. package/dist/plugins/upgrade/upgradeRestartRun.spec.d.ts.map +1 -0
  56. package/dist/plugins/upgrade/upgradeRestartRun.spec.js +51 -0
  57. package/dist/plugins/upgrade/upgradeRestartRun.spec.js.map +1 -0
  58. package/package.json +1 -1
@@ -1,12 +1,40 @@
1
1
  import { beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { plugin } from "./plugin.js";
3
3
  import { upgradePm2ProcessDetect } from "./upgradePm2ProcessDetect.js";
4
+ import { upgradeRestartPendingClear } from "./upgradeRestartPendingClear.js";
5
+ import { upgradeRestartPendingSet } from "./upgradeRestartPendingSet.js";
6
+ import { upgradeRestartPendingTake } from "./upgradeRestartPendingTake.js";
7
+ import { upgradeRestartRun } from "./upgradeRestartRun.js";
8
+ import { upgradeRun } from "./upgradeRun.js";
4
9
  vi.mock("./upgradePm2ProcessDetect.js", () => ({
5
10
  upgradePm2ProcessDetect: vi.fn()
6
11
  }));
12
+ vi.mock("./upgradeRun.js", () => ({
13
+ upgradeRun: vi.fn()
14
+ }));
15
+ vi.mock("./upgradeRestartRun.js", () => ({
16
+ upgradeRestartRun: vi.fn()
17
+ }));
18
+ vi.mock("./upgradeRestartPendingSet.js", () => ({
19
+ upgradeRestartPendingSet: vi.fn()
20
+ }));
21
+ vi.mock("./upgradeRestartPendingTake.js", () => ({
22
+ upgradeRestartPendingTake: vi.fn()
23
+ }));
24
+ vi.mock("./upgradeRestartPendingClear.js", () => ({
25
+ upgradeRestartPendingClear: vi.fn()
26
+ }));
7
27
  describe("upgrade plugin onboarding", () => {
8
28
  beforeEach(() => {
9
29
  vi.mocked(upgradePm2ProcessDetect).mockReset();
30
+ vi.mocked(upgradeRun).mockReset();
31
+ vi.mocked(upgradeRestartRun).mockReset();
32
+ vi.mocked(upgradeRestartPendingSet).mockReset();
33
+ vi.mocked(upgradeRestartPendingTake).mockReset();
34
+ vi.mocked(upgradeRestartPendingClear).mockReset();
35
+ vi.mocked(upgradeRestartPendingSet).mockResolvedValue(undefined);
36
+ vi.mocked(upgradeRestartPendingTake).mockResolvedValue(null);
37
+ vi.mocked(upgradeRestartPendingClear).mockResolvedValue(undefined);
10
38
  });
11
39
  it("returns default pm2 settings when daycare process is detected", async () => {
12
40
  vi.mocked(upgradePm2ProcessDetect).mockResolvedValue({
@@ -56,4 +84,180 @@ describe("upgrade plugin onboarding", () => {
56
84
  expect(note).toHaveBeenCalledWith('Upgrade plugin requires an online PM2 process named "daycare". No online PM2 process named "daycare" was found.', "Upgrade");
57
85
  });
58
86
  });
87
+ describe("upgrade plugin commands", () => {
88
+ it("registers upgrade and restart commands on load and unregisters on unload", async () => {
89
+ const registrar = {
90
+ registerCommand: vi.fn(),
91
+ unregisterCommand: vi.fn(),
92
+ sendMessage: vi.fn(async () => undefined)
93
+ };
94
+ const api = {
95
+ instance: { instanceId: "upgrade", pluginId: "upgrade" },
96
+ settings: { strategy: "pm2", processName: "daycare" },
97
+ engineSettings: {},
98
+ logger: { warn: vi.fn() },
99
+ auth: {},
100
+ dataDir: "/tmp/daycare",
101
+ registrar,
102
+ fileStore: {},
103
+ inference: { complete: async () => undefined },
104
+ processes: {},
105
+ mode: "runtime",
106
+ events: { emit: () => undefined }
107
+ };
108
+ const instance = await plugin.create(api);
109
+ await instance.load?.();
110
+ expect(registrar.registerCommand).toHaveBeenCalledTimes(2);
111
+ expect(registrar.registerCommand).toHaveBeenNthCalledWith(1, expect.objectContaining({
112
+ command: "upgrade",
113
+ description: "Upgrade daycare to latest version",
114
+ handler: expect.any(Function)
115
+ }));
116
+ expect(registrar.registerCommand).toHaveBeenNthCalledWith(2, expect.objectContaining({
117
+ command: "restart",
118
+ description: "Restart the daycare server process",
119
+ handler: expect.any(Function)
120
+ }));
121
+ await instance.unload?.();
122
+ expect(registrar.unregisterCommand).toHaveBeenCalledTimes(2);
123
+ expect(registrar.unregisterCommand).toHaveBeenNthCalledWith(1, "upgrade");
124
+ expect(registrar.unregisterCommand).toHaveBeenNthCalledWith(2, "restart");
125
+ });
126
+ it("dispatches /upgrade and /restart handlers for user descriptors", async () => {
127
+ vi.mocked(upgradeRun).mockResolvedValue(undefined);
128
+ vi.mocked(upgradeRestartRun).mockResolvedValue(undefined);
129
+ const registrar = {
130
+ registerCommand: vi.fn(),
131
+ unregisterCommand: vi.fn(),
132
+ sendMessage: vi.fn(async () => undefined)
133
+ };
134
+ const api = {
135
+ instance: { instanceId: "upgrade", pluginId: "upgrade" },
136
+ settings: { strategy: "pm2", processName: "daycare" },
137
+ engineSettings: {},
138
+ logger: { warn: vi.fn() },
139
+ auth: {},
140
+ dataDir: "/tmp/daycare",
141
+ registrar,
142
+ fileStore: {},
143
+ inference: { complete: async () => undefined },
144
+ processes: {},
145
+ mode: "runtime",
146
+ events: { emit: () => undefined }
147
+ };
148
+ const instance = await plugin.create(api);
149
+ await instance.load?.();
150
+ const commands = registrar.registerCommand.mock.calls.map((call) => call[0]);
151
+ const upgradeCommand = commands.find((entry) => entry.command === "upgrade");
152
+ const restartCommand = commands.find((entry) => entry.command === "restart");
153
+ if (!upgradeCommand || !restartCommand) {
154
+ throw new Error("Expected upgrade and restart commands to be registered");
155
+ }
156
+ const descriptor = {
157
+ type: "user",
158
+ connector: "telegram",
159
+ channelId: "123",
160
+ userId: "123"
161
+ };
162
+ const context = { messageId: "56" };
163
+ await upgradeCommand.handler("/upgrade", context, descriptor);
164
+ await restartCommand.handler("/restart", context, descriptor);
165
+ expect(registrar.sendMessage).toHaveBeenCalledWith(descriptor, context, { text: "Upgrading Daycare..." });
166
+ expect(registrar.sendMessage).toHaveBeenCalledWith(descriptor, context, { text: "Restarting Daycare..." });
167
+ expect(upgradeRun).toHaveBeenCalledWith(expect.objectContaining({
168
+ strategy: "pm2",
169
+ processName: "daycare",
170
+ sendStatus: expect.any(Function)
171
+ }));
172
+ expect(upgradeRestartRun).toHaveBeenCalledWith(expect.objectContaining({
173
+ strategy: "pm2",
174
+ processName: "daycare",
175
+ sendStatus: expect.any(Function)
176
+ }));
177
+ expect(upgradeRestartPendingSet).toHaveBeenCalledWith(expect.objectContaining({
178
+ dataDir: "/tmp/daycare",
179
+ descriptor,
180
+ context
181
+ }));
182
+ expect(upgradeRestartPendingClear).not.toHaveBeenCalled();
183
+ });
184
+ it("clears pending restart marker when restart command fails", async () => {
185
+ vi.mocked(upgradeRestartRun).mockRejectedValue(new Error("pm2 failed"));
186
+ const registrar = {
187
+ registerCommand: vi.fn(),
188
+ unregisterCommand: vi.fn(),
189
+ sendMessage: vi.fn(async () => undefined)
190
+ };
191
+ const api = {
192
+ instance: { instanceId: "upgrade", pluginId: "upgrade" },
193
+ settings: { strategy: "pm2", processName: "daycare" },
194
+ engineSettings: {},
195
+ logger: { warn: vi.fn() },
196
+ auth: {},
197
+ dataDir: "/tmp/daycare",
198
+ registrar,
199
+ fileStore: {},
200
+ inference: { complete: async () => undefined },
201
+ processes: {},
202
+ mode: "runtime",
203
+ events: { emit: () => undefined }
204
+ };
205
+ const instance = await plugin.create(api);
206
+ await instance.load?.();
207
+ const commands = registrar.registerCommand.mock.calls.map((call) => call[0]);
208
+ const restartCommand = commands.find((entry) => entry.command === "restart");
209
+ if (!restartCommand) {
210
+ throw new Error("Expected restart command to be registered");
211
+ }
212
+ const descriptor = {
213
+ type: "user",
214
+ connector: "telegram",
215
+ channelId: "123",
216
+ userId: "123"
217
+ };
218
+ const context = { messageId: "56" };
219
+ await restartCommand.handler("/restart", context, descriptor);
220
+ expect(upgradeRestartPendingClear).toHaveBeenCalledWith("/tmp/daycare");
221
+ });
222
+ it("sends restart completion from postStart when a recent marker exists", async () => {
223
+ vi.mocked(upgradeRestartPendingTake).mockResolvedValue({
224
+ descriptor: {
225
+ type: "user",
226
+ connector: "telegram",
227
+ channelId: "123",
228
+ userId: "123"
229
+ },
230
+ context: { messageId: "77" },
231
+ requestedAtMs: Date.now(),
232
+ requesterPid: process.pid - 1
233
+ });
234
+ const registrar = {
235
+ registerCommand: vi.fn(),
236
+ unregisterCommand: vi.fn(),
237
+ sendMessage: vi.fn(async () => undefined)
238
+ };
239
+ const api = {
240
+ instance: { instanceId: "upgrade", pluginId: "upgrade" },
241
+ settings: { strategy: "pm2", processName: "daycare" },
242
+ engineSettings: {},
243
+ logger: { warn: vi.fn() },
244
+ auth: {},
245
+ dataDir: "/tmp/daycare",
246
+ registrar,
247
+ fileStore: {},
248
+ inference: { complete: async () => undefined },
249
+ processes: {},
250
+ mode: "runtime",
251
+ events: { emit: () => undefined }
252
+ };
253
+ const instance = await plugin.create(api);
254
+ await instance.postStart?.();
255
+ expect(registrar.sendMessage).toHaveBeenCalledWith({
256
+ type: "user",
257
+ connector: "telegram",
258
+ channelId: "123",
259
+ userId: "123"
260
+ }, { messageId: "77" }, { text: "Restart complete. Daycare is back online." });
261
+ });
262
+ });
59
263
  //# sourceMappingURL=plugin.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.spec.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE;CACjC,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,SAAS,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,iBAAiB,CAAC;YACnD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAErB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,EAAkE;YACxE,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBACzB,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACzB;YACD,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE;gBACR,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,SAAS;aACvB;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC/B,mEAAmE,EACnE,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,iBAAiB,CAAC;YACnD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,kDAAkD;SAC3D,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAErB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,EAAkE;YACxE,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBACzB,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACzB;YACD,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAC/B,iHAAiH,EACjH,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"plugin.spec.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Removes persisted restart confirmation metadata.
3
+ * Expects: dataDir points to the plugin data directory.
4
+ */
5
+ export declare function upgradeRestartPendingClear(dataDir: string): Promise<void>;
6
+ //# sourceMappingURL=upgradeRestartPendingClear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingClear.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingClear.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E"}
@@ -0,0 +1,10 @@
1
+ import { rm } from "node:fs/promises";
2
+ import path from "node:path";
3
+ /**
4
+ * Removes persisted restart confirmation metadata.
5
+ * Expects: dataDir points to the plugin data directory.
6
+ */
7
+ export async function upgradeRestartPendingClear(dataDir) {
8
+ await rm(path.join(dataDir, "restart-pending.json"), { force: true });
9
+ }
10
+ //# sourceMappingURL=upgradeRestartPendingClear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingClear.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingClear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAe;IAC9D,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { AgentDescriptor, MessageContext } from "@/types";
2
+ type UpgradeRestartPendingSetOptions = {
3
+ dataDir: string;
4
+ descriptor: AgentDescriptor;
5
+ context: MessageContext;
6
+ requestedAtMs: number;
7
+ requesterPid: number;
8
+ };
9
+ /**
10
+ * Persists restart confirmation metadata so the next process can acknowledge restart success.
11
+ * Expects: dataDir exists or can be created, and descriptor/context are command invoker payloads.
12
+ */
13
+ export declare function upgradeRestartPendingSet(options: UpgradeRestartPendingSetOptions): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=upgradeRestartPendingSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingSet.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingSet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/D,KAAK,+BAA+B,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,16 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ /**
4
+ * Persists restart confirmation metadata so the next process can acknowledge restart success.
5
+ * Expects: dataDir exists or can be created, and descriptor/context are command invoker payloads.
6
+ */
7
+ export async function upgradeRestartPendingSet(options) {
8
+ await mkdir(options.dataDir, { recursive: true });
9
+ await writeFile(path.join(options.dataDir, "restart-pending.json"), JSON.stringify({
10
+ descriptor: options.descriptor,
11
+ context: options.context,
12
+ requestedAtMs: options.requestedAtMs,
13
+ requesterPid: options.requesterPid
14
+ }), "utf8");
15
+ }
16
+ //# sourceMappingURL=upgradeRestartPendingSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingSet.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAwC;IAExC,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAClD,IAAI,CAAC,SAAS,CAAC;QACb,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,EACF,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { UpgradeRestartPending } from "./upgradeRestartPendingTypes.js";
2
+ /**
3
+ * Reads and clears persisted restart confirmation metadata.
4
+ * Expects: dataDir points to the plugin data directory.
5
+ */
6
+ export declare function upgradeRestartPendingTake(dataDir: string): Promise<UpgradeRestartPending | null>;
7
+ //# sourceMappingURL=upgradeRestartPendingTake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingTake.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingTake.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAcvC"}
@@ -0,0 +1,53 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import path from "node:path";
3
+ /**
4
+ * Reads and clears persisted restart confirmation metadata.
5
+ * Expects: dataDir points to the plugin data directory.
6
+ */
7
+ export async function upgradeRestartPendingTake(dataDir) {
8
+ const statePath = path.join(dataDir, "restart-pending.json");
9
+ let raw;
10
+ try {
11
+ raw = await readFile(statePath, "utf8");
12
+ }
13
+ catch (error) {
14
+ if (error.code === "ENOENT") {
15
+ return null;
16
+ }
17
+ throw error;
18
+ }
19
+ await rm(statePath, { force: true });
20
+ return pendingParse(raw);
21
+ }
22
+ function pendingParse(value) {
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse(value);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ if (!parsed || typeof parsed !== "object") {
31
+ return null;
32
+ }
33
+ const candidate = parsed;
34
+ if (typeof candidate.requestedAtMs !== "number") {
35
+ return null;
36
+ }
37
+ if (typeof candidate.requesterPid !== "number") {
38
+ return null;
39
+ }
40
+ if (!candidate.descriptor || typeof candidate.descriptor !== "object") {
41
+ return null;
42
+ }
43
+ if (!candidate.context || typeof candidate.context !== "object") {
44
+ return null;
45
+ }
46
+ return {
47
+ descriptor: candidate.descriptor,
48
+ context: candidate.context,
49
+ requestedAtMs: candidate.requestedAtMs,
50
+ requesterPid: candidate.requesterPid
51
+ };
52
+ }
53
+ //# sourceMappingURL=upgradeRestartPendingTake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingTake.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingTake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAe;IAEf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IAC7D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,MAKjB,CAAC;IACF,IAAI,OAAO,SAAS,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,UAAiD;QACvE,OAAO,EAAE,SAAS,CAAC,OAA2C;QAC9D,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,YAAY,EAAE,SAAS,CAAC,YAAY;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AgentDescriptor, MessageContext } from "@/types";
2
+ export type UpgradeRestartPending = {
3
+ descriptor: AgentDescriptor;
4
+ context: MessageContext;
5
+ requestedAtMs: number;
6
+ requesterPid: number;
7
+ };
8
+ //# sourceMappingURL=upgradeRestartPendingTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingTypes.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upgradeRestartPendingTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartPendingTypes.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartPendingTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ type UpgradeRestartRunOptions = {
2
+ strategy: "pm2";
3
+ processName: string;
4
+ sendStatus: (text: string) => Promise<void>;
5
+ };
6
+ /**
7
+ * Restarts the configured Daycare process without running upgrade install steps.
8
+ * Expects: strategy is supported and processName is a non-empty PM2 process identifier.
9
+ */
10
+ export declare function upgradeRestartRun(options: UpgradeRestartRunOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=upgradeRestartRun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartRun.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartRun.ts"],"names":[],"mappings":"AAEA,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxF"}
@@ -0,0 +1,49 @@
1
+ import { execFile } from "node:child_process";
2
+ /**
3
+ * Restarts the configured Daycare process without running upgrade install steps.
4
+ * Expects: strategy is supported and processName is a non-empty PM2 process identifier.
5
+ */
6
+ export async function upgradeRestartRun(options) {
7
+ if (options.strategy !== "pm2") {
8
+ const text = `Restart failed: unsupported strategy ${options.strategy}`;
9
+ await options.sendStatus(text);
10
+ throw new Error(text);
11
+ }
12
+ await options.sendStatus(`Restarting process \"${options.processName}\" via pm2...`);
13
+ try {
14
+ await commandRun("pm2", ["restart", options.processName]);
15
+ }
16
+ catch (error) {
17
+ const text = `Restart failed while restarting PM2 process \"${options.processName}\": ${errorTextBuild(error)}`;
18
+ await options.sendStatus(text);
19
+ throw new Error(text);
20
+ }
21
+ }
22
+ function commandRun(command, args) {
23
+ return new Promise((resolve, reject) => {
24
+ execFile(command, args, {
25
+ windowsHide: true
26
+ }, (error) => {
27
+ if (error) {
28
+ reject(error);
29
+ return;
30
+ }
31
+ resolve();
32
+ });
33
+ });
34
+ }
35
+ function errorTextBuild(error) {
36
+ if (!(error instanceof Error)) {
37
+ return "Unknown error";
38
+ }
39
+ const withOutput = error;
40
+ const details = [
41
+ String(withOutput.stderr ?? "").trim(),
42
+ String(withOutput.stdout ?? "").trim()
43
+ ].find((entry) => entry.length > 0);
44
+ if (details) {
45
+ return details;
46
+ }
47
+ return error.message || "Unknown error";
48
+ }
49
+ //# sourceMappingURL=upgradeRestartRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartRun.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,wCAAwC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,wBAAwB,OAAO,CAAC,WAAW,eAAe,CAAC,CAAC;IAErF,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,iDAAiD,OAAO,CAAC,WAAW,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAChH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,OAAO,EACP,IAAI,EACJ;YACE,WAAW,EAAE,IAAI;SAClB,EACD,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,MAAM,UAAU,GAAG,KAGlB,CAAC;IACF,MAAM,OAAO,GAAG;QACd,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACtC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KACvC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upgradeRestartRun.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartRun.spec.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartRun.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ const execFileMock = vi.fn();
3
+ vi.mock("node:child_process", () => ({
4
+ execFile: (...args) => execFileMock(...args)
5
+ }));
6
+ import { upgradeRestartRun } from "./upgradeRestartRun.js";
7
+ function execSucceed() {
8
+ execFileMock.mockImplementationOnce((_command, _args, _options, callback) => {
9
+ callback(null);
10
+ return undefined;
11
+ });
12
+ }
13
+ function execFail(error) {
14
+ execFileMock.mockImplementationOnce((_command, _args, _options, callback) => {
15
+ callback(error);
16
+ return undefined;
17
+ });
18
+ }
19
+ describe("upgradeRestartRun", () => {
20
+ beforeEach(() => {
21
+ execFileMock.mockReset();
22
+ });
23
+ it("restarts pm2 process and reports status", async () => {
24
+ execSucceed();
25
+ const sendStatus = vi.fn(async () => undefined);
26
+ await upgradeRestartRun({
27
+ strategy: "pm2",
28
+ processName: "daycare",
29
+ sendStatus
30
+ });
31
+ expect(execFileMock).toHaveBeenCalledWith("pm2", ["restart", "daycare"], { windowsHide: true }, expect.any(Function));
32
+ expect(sendStatus.mock.calls.map((call) => call[0])).toEqual([
33
+ "Restarting process \"daycare\" via pm2..."
34
+ ]);
35
+ });
36
+ it("reports restart failures", async () => {
37
+ const error = Object.assign(new Error("restart failed"), {
38
+ stderr: "pm2 not found"
39
+ });
40
+ execFail(error);
41
+ const sendStatus = vi.fn(async () => undefined);
42
+ await expect(upgradeRestartRun({
43
+ strategy: "pm2",
44
+ processName: "daycare",
45
+ sendStatus
46
+ })).rejects.toThrow('Restart failed while restarting PM2 process "daycare": pm2 not found');
47
+ expect(execFileMock).toHaveBeenCalledTimes(1);
48
+ expect(sendStatus).toHaveBeenCalledWith('Restart failed while restarting PM2 process "daycare": pm2 not found');
49
+ });
50
+ });
51
+ //# sourceMappingURL=upgradeRestartRun.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradeRestartRun.spec.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradeRestartRun.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE7B,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,SAAS,WAAW;IAClB,YAAY,CAAC,sBAAsB,CACjC,CACE,QAAgB,EAChB,KAAe,EACf,QAAkC,EAClC,QAAuC,EACvC,EAAE;QACF,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY;IAC5B,YAAY,CAAC,sBAAsB,CACjC,CACE,QAAgB,EAChB,KAAe,EACf,QAAkC,EAClC,QAAuC,EACvC,EAAE;QACF,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,WAAW,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAA0B,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzE,MAAM,iBAAiB,CAAC;YACtB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,SAAS;YACtB,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACvC,KAAK,EACL,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,EAAE,WAAW,EAAE,IAAI,EAAE,EACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CACrB,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3D,2CAA2C;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE;YACvD,MAAM,EAAE,eAAe;SACxB,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAA0B,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzE,MAAM,MAAM,CACV,iBAAiB,CAAC;YAChB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,SAAS;YACtB,UAAU;SACX,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CACf,sEAAsE,CACvE,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,sEAAsE,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daycare-cli",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "description": "Local-first, plugin-driven multi-agent runtime",
5
5
  "type": "module",
6
6
  "license": "MIT",