daycare-cli 0.0.22 → 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 (125) 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 +17 -6
  22. package/dist/engine/engine.js.map +1 -1
  23. package/dist/engine/engine.spec.js +91 -5
  24. package/dist/engine/engine.spec.js.map +1 -1
  25. package/dist/engine/modules/commandRegistry.d.ts +16 -0
  26. package/dist/engine/modules/commandRegistry.d.ts.map +1 -0
  27. package/dist/engine/modules/commandRegistry.js +65 -0
  28. package/dist/engine/modules/commandRegistry.js.map +1 -0
  29. package/dist/engine/modules/commandRegistry.spec.d.ts +2 -0
  30. package/dist/engine/modules/commandRegistry.spec.d.ts.map +1 -0
  31. package/dist/engine/modules/commandRegistry.spec.js +85 -0
  32. package/dist/engine/modules/commandRegistry.spec.js.map +1 -0
  33. package/dist/engine/modules/connectorRegistry.d.ts +6 -0
  34. package/dist/engine/modules/connectorRegistry.d.ts.map +1 -1
  35. package/dist/engine/modules/connectorRegistry.js +40 -0
  36. package/dist/engine/modules/connectorRegistry.js.map +1 -1
  37. package/dist/engine/modules/connectorRegistry.spec.d.ts +2 -0
  38. package/dist/engine/modules/connectorRegistry.spec.d.ts.map +1 -0
  39. package/dist/engine/modules/connectorRegistry.spec.js +72 -0
  40. package/dist/engine/modules/connectorRegistry.spec.js.map +1 -0
  41. package/dist/engine/modules/connectors/types.d.ts +8 -0
  42. package/dist/engine/modules/connectors/types.d.ts.map +1 -1
  43. package/dist/engine/modules/moduleRegistry.d.ts +3 -1
  44. package/dist/engine/modules/moduleRegistry.d.ts.map +1 -1
  45. package/dist/engine/modules/moduleRegistry.js +7 -1
  46. package/dist/engine/modules/moduleRegistry.js.map +1 -1
  47. package/dist/engine/plugins/descriptor.d.ts +2 -2
  48. package/dist/engine/plugins/manager.d.ts +2 -0
  49. package/dist/engine/plugins/manager.d.ts.map +1 -1
  50. package/dist/engine/plugins/manager.js +26 -0
  51. package/dist/engine/plugins/manager.js.map +1 -1
  52. package/dist/engine/plugins/manager.spec.js +60 -0
  53. package/dist/engine/plugins/manager.spec.js.map +1 -1
  54. package/dist/engine/plugins/registry.d.ts +8 -2
  55. package/dist/engine/plugins/registry.d.ts.map +1 -1
  56. package/dist/engine/plugins/registry.js +34 -2
  57. package/dist/engine/plugins/registry.js.map +1 -1
  58. package/dist/engine/plugins/registry.spec.d.ts +2 -0
  59. package/dist/engine/plugins/registry.spec.d.ts.map +1 -0
  60. package/dist/engine/plugins/registry.spec.js +69 -0
  61. package/dist/engine/plugins/registry.spec.js.map +1 -0
  62. package/dist/engine/plugins/types.d.ts +2 -0
  63. package/dist/engine/plugins/types.d.ts.map +1 -1
  64. package/dist/engine/plugins/types.js.map +1 -1
  65. package/dist/plugins/telegram/connector.d.ts +8 -2
  66. package/dist/plugins/telegram/connector.d.ts.map +1 -1
  67. package/dist/plugins/telegram/connector.js +46 -32
  68. package/dist/plugins/telegram/connector.js.map +1 -1
  69. package/dist/plugins/telegram/connector.spec.js +60 -23
  70. package/dist/plugins/telegram/connector.spec.js.map +1 -1
  71. package/dist/plugins/telegram/plugin.d.ts.map +1 -1
  72. package/dist/plugins/telegram/plugin.js +6 -1
  73. package/dist/plugins/telegram/plugin.js.map +1 -1
  74. package/dist/plugins/upgrade/plugin.d.ts +6 -0
  75. package/dist/plugins/upgrade/plugin.d.ts.map +1 -0
  76. package/dist/plugins/upgrade/plugin.js +137 -0
  77. package/dist/plugins/upgrade/plugin.js.map +1 -0
  78. package/dist/plugins/upgrade/plugin.json +6 -0
  79. package/dist/plugins/upgrade/plugin.spec.d.ts +2 -0
  80. package/dist/plugins/upgrade/plugin.spec.d.ts.map +1 -0
  81. package/dist/plugins/upgrade/plugin.spec.js +263 -0
  82. package/dist/plugins/upgrade/plugin.spec.js.map +1 -0
  83. package/dist/plugins/upgrade/upgradePm2ProcessDetect.d.ts +13 -0
  84. package/dist/plugins/upgrade/upgradePm2ProcessDetect.d.ts.map +1 -0
  85. package/dist/plugins/upgrade/upgradePm2ProcessDetect.js +66 -0
  86. package/dist/plugins/upgrade/upgradePm2ProcessDetect.js.map +1 -0
  87. package/dist/plugins/upgrade/upgradePm2ProcessDetect.spec.d.ts +2 -0
  88. package/dist/plugins/upgrade/upgradePm2ProcessDetect.spec.d.ts.map +1 -0
  89. package/dist/plugins/upgrade/upgradePm2ProcessDetect.spec.js +57 -0
  90. package/dist/plugins/upgrade/upgradePm2ProcessDetect.spec.js.map +1 -0
  91. package/dist/plugins/upgrade/upgradeRestartPendingClear.d.ts +6 -0
  92. package/dist/plugins/upgrade/upgradeRestartPendingClear.d.ts.map +1 -0
  93. package/dist/plugins/upgrade/upgradeRestartPendingClear.js +10 -0
  94. package/dist/plugins/upgrade/upgradeRestartPendingClear.js.map +1 -0
  95. package/dist/plugins/upgrade/upgradeRestartPendingSet.d.ts +15 -0
  96. package/dist/plugins/upgrade/upgradeRestartPendingSet.d.ts.map +1 -0
  97. package/dist/plugins/upgrade/upgradeRestartPendingSet.js +16 -0
  98. package/dist/plugins/upgrade/upgradeRestartPendingSet.js.map +1 -0
  99. package/dist/plugins/upgrade/upgradeRestartPendingTake.d.ts +7 -0
  100. package/dist/plugins/upgrade/upgradeRestartPendingTake.d.ts.map +1 -0
  101. package/dist/plugins/upgrade/upgradeRestartPendingTake.js +53 -0
  102. package/dist/plugins/upgrade/upgradeRestartPendingTake.js.map +1 -0
  103. package/dist/plugins/upgrade/upgradeRestartPendingTypes.d.ts +8 -0
  104. package/dist/plugins/upgrade/upgradeRestartPendingTypes.d.ts.map +1 -0
  105. package/dist/plugins/upgrade/upgradeRestartPendingTypes.js +2 -0
  106. package/dist/plugins/upgrade/upgradeRestartPendingTypes.js.map +1 -0
  107. package/dist/plugins/upgrade/upgradeRestartRun.d.ts +12 -0
  108. package/dist/plugins/upgrade/upgradeRestartRun.d.ts.map +1 -0
  109. package/dist/plugins/upgrade/upgradeRestartRun.js +49 -0
  110. package/dist/plugins/upgrade/upgradeRestartRun.js.map +1 -0
  111. package/dist/plugins/upgrade/upgradeRestartRun.spec.d.ts +2 -0
  112. package/dist/plugins/upgrade/upgradeRestartRun.spec.d.ts.map +1 -0
  113. package/dist/plugins/upgrade/upgradeRestartRun.spec.js +51 -0
  114. package/dist/plugins/upgrade/upgradeRestartRun.spec.js.map +1 -0
  115. package/dist/plugins/upgrade/upgradeRun.d.ts +12 -0
  116. package/dist/plugins/upgrade/upgradeRun.d.ts.map +1 -0
  117. package/dist/plugins/upgrade/upgradeRun.js +59 -0
  118. package/dist/plugins/upgrade/upgradeRun.js.map +1 -0
  119. package/dist/plugins/upgrade/upgradeRun.spec.d.ts +2 -0
  120. package/dist/plugins/upgrade/upgradeRun.spec.d.ts.map +1 -0
  121. package/dist/plugins/upgrade/upgradeRun.spec.js +70 -0
  122. package/dist/plugins/upgrade/upgradeRun.spec.js.map +1 -0
  123. package/dist/types.d.ts +1 -1
  124. package/dist/types.d.ts.map +1 -1
  125. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare const plugin: import("@/types").PluginModule<z.objectInputType<{
3
+ strategy: z.ZodLiteral<"pm2">;
4
+ processName: z.ZodString;
5
+ }, z.ZodTypeAny, "passthrough">>;
6
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2BxB,eAAO,MAAM,MAAM;;;gCAiJjB,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { z } from "zod";
2
+ import { definePlugin } from "../../engine/plugins/types.js";
3
+ import { upgradeRestartPendingClear } from "./upgradeRestartPendingClear.js";
4
+ import { upgradeRestartPendingSet } from "./upgradeRestartPendingSet.js";
5
+ import { upgradeRestartPendingTake } from "./upgradeRestartPendingTake.js";
6
+ import { upgradePm2ProcessDetect } from "./upgradePm2ProcessDetect.js";
7
+ import { upgradeRestartRun } from "./upgradeRestartRun.js";
8
+ import { upgradeRun } from "./upgradeRun.js";
9
+ const UPGRADE_COMMAND = "upgrade";
10
+ const RESTART_COMMAND = "restart";
11
+ const RESTART_CONFIRM_MAX_AGE_MS = 5 * 60 * 1000;
12
+ const settingsSchema = z
13
+ .object({
14
+ strategy: z.literal("pm2"),
15
+ processName: z.string().trim().min(1)
16
+ })
17
+ .passthrough();
18
+ export const plugin = definePlugin({
19
+ settingsSchema,
20
+ onboarding: async (api) => {
21
+ const detection = await upgradePm2ProcessDetect("daycare");
22
+ if (!detection.found) {
23
+ api.note(`Upgrade plugin requires an online PM2 process named "daycare". ${detection.reason}`, "Upgrade");
24
+ return null;
25
+ }
26
+ api.note(`Detected online PM2 process "${detection.processName}". Upgrade plugin configured.`, "Upgrade");
27
+ return {
28
+ settings: {
29
+ strategy: "pm2",
30
+ processName: detection.processName
31
+ }
32
+ };
33
+ },
34
+ create: (api) => {
35
+ const settings = api.settings;
36
+ const upgradeHandler = async (_command, context, descriptor) => {
37
+ if (descriptor.type !== "user") {
38
+ return;
39
+ }
40
+ const sendStatus = async (text) => {
41
+ try {
42
+ await api.registrar.sendMessage(descriptor, context, { text });
43
+ }
44
+ catch (error) {
45
+ api.logger.warn({ error }, "error: Failed to send upgrade status message");
46
+ }
47
+ };
48
+ await sendStatus("Upgrading Daycare...");
49
+ try {
50
+ await upgradeRun({
51
+ strategy: settings.strategy,
52
+ processName: settings.processName,
53
+ sendStatus
54
+ });
55
+ }
56
+ catch (error) {
57
+ api.logger.warn({ error }, "error: Upgrade command failed");
58
+ }
59
+ };
60
+ const restartHandler = async (_command, context, descriptor) => {
61
+ if (descriptor.type !== "user") {
62
+ return;
63
+ }
64
+ const sendStatus = async (text) => {
65
+ try {
66
+ await api.registrar.sendMessage(descriptor, context, { text });
67
+ }
68
+ catch (error) {
69
+ api.logger.warn({ error }, "error: Failed to send restart status message");
70
+ }
71
+ };
72
+ await sendStatus("Restarting Daycare...");
73
+ try {
74
+ await upgradeRestartPendingSet({
75
+ dataDir: api.dataDir,
76
+ descriptor,
77
+ context,
78
+ requestedAtMs: Date.now(),
79
+ requesterPid: process.pid
80
+ });
81
+ }
82
+ catch (error) {
83
+ api.logger.warn({ error }, "error: Failed to persist restart pending marker");
84
+ await sendStatus("Restart failed before scheduling confirmation.");
85
+ return;
86
+ }
87
+ try {
88
+ await upgradeRestartRun({
89
+ strategy: settings.strategy,
90
+ processName: settings.processName,
91
+ sendStatus
92
+ });
93
+ }
94
+ catch (error) {
95
+ await upgradeRestartPendingClear(api.dataDir);
96
+ api.logger.warn({ error }, "error: Restart command failed");
97
+ }
98
+ };
99
+ return {
100
+ load: async () => {
101
+ api.registrar.registerCommand({
102
+ command: UPGRADE_COMMAND,
103
+ description: "Upgrade daycare to latest version",
104
+ handler: upgradeHandler
105
+ });
106
+ api.registrar.registerCommand({
107
+ command: RESTART_COMMAND,
108
+ description: "Restart the daycare server process",
109
+ handler: restartHandler
110
+ });
111
+ },
112
+ unload: async () => {
113
+ api.registrar.unregisterCommand(UPGRADE_COMMAND);
114
+ api.registrar.unregisterCommand(RESTART_COMMAND);
115
+ },
116
+ postStart: async () => {
117
+ const pending = await upgradeRestartPendingTake(api.dataDir);
118
+ if (!pending) {
119
+ return;
120
+ }
121
+ if (pending.requesterPid === process.pid) {
122
+ return;
123
+ }
124
+ if (Date.now() - pending.requestedAtMs > RESTART_CONFIRM_MAX_AGE_MS) {
125
+ return;
126
+ }
127
+ try {
128
+ await api.registrar.sendMessage(pending.descriptor, pending.context, { text: "Restart complete. Daycare is back online." });
129
+ }
130
+ catch (error) {
131
+ api.logger.warn({ error }, "error: Failed to send restart completion status message");
132
+ }
133
+ }
134
+ };
135
+ }
136
+ });
137
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "upgrade",
3
+ "name": "Upgrade",
4
+ "description": "Runs in-place daycare upgrades and restarts the runtime.",
5
+ "entry": "./plugin.js"
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.spec.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,263 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { plugin } from "./plugin.js";
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";
9
+ vi.mock("./upgradePm2ProcessDetect.js", () => ({
10
+ upgradePm2ProcessDetect: vi.fn()
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
+ }));
27
+ describe("upgrade plugin onboarding", () => {
28
+ beforeEach(() => {
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);
38
+ });
39
+ it("returns default pm2 settings when daycare process is detected", async () => {
40
+ vi.mocked(upgradePm2ProcessDetect).mockResolvedValue({
41
+ found: true,
42
+ processName: "daycare"
43
+ });
44
+ const note = vi.fn();
45
+ const result = await plugin.onboarding?.({
46
+ instanceId: "upgrade",
47
+ pluginId: "upgrade",
48
+ dataDir: "/tmp/daycare",
49
+ auth: {},
50
+ prompt: {
51
+ input: async () => null,
52
+ confirm: async () => null,
53
+ select: async () => null
54
+ },
55
+ note
56
+ });
57
+ expect(result).toEqual({
58
+ settings: {
59
+ strategy: "pm2",
60
+ processName: "daycare"
61
+ }
62
+ });
63
+ expect(note).toHaveBeenCalledWith('Detected online PM2 process "daycare". Upgrade plugin configured.', "Upgrade");
64
+ });
65
+ it("aborts onboarding when daycare process is not detected", async () => {
66
+ vi.mocked(upgradePm2ProcessDetect).mockResolvedValue({
67
+ found: false,
68
+ reason: 'No online PM2 process named "daycare" was found.'
69
+ });
70
+ const note = vi.fn();
71
+ const result = await plugin.onboarding?.({
72
+ instanceId: "upgrade",
73
+ pluginId: "upgrade",
74
+ dataDir: "/tmp/daycare",
75
+ auth: {},
76
+ prompt: {
77
+ input: async () => null,
78
+ confirm: async () => null,
79
+ select: async () => null
80
+ },
81
+ note
82
+ });
83
+ expect(result).toBeNull();
84
+ expect(note).toHaveBeenCalledWith('Upgrade plugin requires an online PM2 process named "daycare". No online PM2 process named "daycare" was found.', "Upgrade");
85
+ });
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
+ });
263
+ //# sourceMappingURL=plugin.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.spec.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/plugin.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type UpgradePm2ProcessDetectResult = {
2
+ found: true;
3
+ processName: string;
4
+ } | {
5
+ found: false;
6
+ reason: string;
7
+ };
8
+ /**
9
+ * Detects whether PM2 has a running process with the provided name.
10
+ * Expects: processName is non-empty and references the PM2 process to restart.
11
+ */
12
+ export declare function upgradePm2ProcessDetect(processName: string): Promise<UpgradePm2ProcessDetectResult>;
13
+ //# sourceMappingURL=upgradePm2ProcessDetect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradePm2ProcessDetect.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradePm2ProcessDetect.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B,GACrC;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,6BAA6B,CAAC,CA4CxC"}
@@ -0,0 +1,66 @@
1
+ import { execFile } from "node:child_process";
2
+ /**
3
+ * Detects whether PM2 has a running process with the provided name.
4
+ * Expects: processName is non-empty and references the PM2 process to restart.
5
+ */
6
+ export async function upgradePm2ProcessDetect(processName) {
7
+ let output;
8
+ try {
9
+ output = await commandOutput("pm2", ["jlist"]);
10
+ }
11
+ catch (error) {
12
+ const message = error instanceof Error ? error.message : "Unknown PM2 error";
13
+ return {
14
+ found: false,
15
+ reason: `Failed to run pm2 jlist: ${message}`
16
+ };
17
+ }
18
+ const parsed = pm2ListParse(output);
19
+ if (!parsed) {
20
+ return {
21
+ found: false,
22
+ reason: "PM2 returned an invalid process list."
23
+ };
24
+ }
25
+ const entry = parsed.find((item) => {
26
+ if (!item || typeof item !== "object") {
27
+ return false;
28
+ }
29
+ const candidate = item;
30
+ return (candidate.name === processName && candidate.pm2_env?.status === "online");
31
+ });
32
+ if (!entry) {
33
+ return {
34
+ found: false,
35
+ reason: `No online PM2 process named "${processName}" was found.`
36
+ };
37
+ }
38
+ return {
39
+ found: true,
40
+ processName
41
+ };
42
+ }
43
+ function commandOutput(command, args) {
44
+ return new Promise((resolve, reject) => {
45
+ execFile(command, args, { windowsHide: true }, (error, stdout) => {
46
+ if (error) {
47
+ reject(error);
48
+ return;
49
+ }
50
+ resolve(stdout);
51
+ });
52
+ });
53
+ }
54
+ function pm2ListParse(value) {
55
+ try {
56
+ const parsed = JSON.parse(value);
57
+ if (!Array.isArray(parsed)) {
58
+ return null;
59
+ }
60
+ return parsed;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ //# sourceMappingURL=upgradePm2ProcessDetect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradePm2ProcessDetect.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradePm2ProcessDetect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAM9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAmB;IAEnB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC7E,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,4BAA4B,OAAO,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,uCAAuC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,SAAS,GAAG,IAGjB,CAAC;QACF,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CACzE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,gCAAgC,WAAW,cAAc;SAClE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAc;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,OAAO,EACP,IAAI,EACJ,EAAE,WAAW,EAAE,IAAI,EAAE,EACrB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upgradePm2ProcessDetect.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradePm2ProcessDetect.spec.d.ts","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradePm2ProcessDetect.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
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 { upgradePm2ProcessDetect } from "./upgradePm2ProcessDetect.js";
7
+ function execOutput(stdout) {
8
+ execFileMock.mockImplementationOnce((_command, _args, _options, callback) => {
9
+ callback(null, stdout);
10
+ return undefined;
11
+ });
12
+ }
13
+ function execError(error) {
14
+ execFileMock.mockImplementationOnce((_command, _args, _options, callback) => {
15
+ callback(error, "");
16
+ return undefined;
17
+ });
18
+ }
19
+ describe("upgradePm2ProcessDetect", () => {
20
+ beforeEach(() => {
21
+ execFileMock.mockReset();
22
+ });
23
+ it("returns found when daycare is online in pm2", async () => {
24
+ execOutput(JSON.stringify([
25
+ {
26
+ name: "daycare",
27
+ pm2_env: { status: "online" }
28
+ }
29
+ ]));
30
+ await expect(upgradePm2ProcessDetect("daycare")).resolves.toEqual({
31
+ found: true,
32
+ processName: "daycare"
33
+ });
34
+ });
35
+ it("returns not found when daycare process is missing", async () => {
36
+ execOutput(JSON.stringify([
37
+ {
38
+ name: "other",
39
+ pm2_env: { status: "online" }
40
+ }
41
+ ]));
42
+ await expect(upgradePm2ProcessDetect("daycare")).resolves.toEqual({
43
+ found: false,
44
+ reason: 'No online PM2 process named "daycare" was found.'
45
+ });
46
+ });
47
+ it("returns not found when pm2 command fails", async () => {
48
+ execError(new Error("spawn pm2 ENOENT"));
49
+ const result = await upgradePm2ProcessDetect("daycare");
50
+ expect(result.found).toBe(false);
51
+ if (result.found) {
52
+ throw new Error("Expected not found result");
53
+ }
54
+ expect(result.reason).toContain("Failed to run pm2 jlist");
55
+ });
56
+ });
57
+ //# sourceMappingURL=upgradePm2ProcessDetect.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgradePm2ProcessDetect.spec.js","sourceRoot":"","sources":["../../../sources/plugins/upgrade/upgradePm2ProcessDetect.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,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,SAAS,UAAU,CAAC,MAAc;IAChC,YAAY,CAAC,sBAAsB,CACjC,CACE,QAAgB,EAChB,KAAe,EACf,QAAkC,EAClC,QAAuD,EACvD,EAAE;QACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAY;IAC7B,YAAY,CAAC,sBAAsB,CACjC,CACE,QAAgB,EAChB,KAAe,EACf,QAAkC,EAClC,QAAuD,EACvD,EAAE;QACF,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,UAAU,CACR,IAAI,CAAC,SAAS,CAAC;YACb;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC9B;SACF,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAChE,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CACR,IAAI,CAAC,SAAS,CAAC;YACb;gBACE,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC9B;SACF,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAChE,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,kDAAkD;SAC3D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,SAAS,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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"}