crewly 1.20.143 → 1.20.145

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/config/constants.ts +59 -0
  2. package/config/index.ts +2 -0
  3. package/config/roles/orchestrator/prompt.md +9 -0
  4. package/config/skills/orchestrator/delegate-task/execute.sh +11 -0
  5. package/config/skills/orchestrator/delegate-task/execute.test.sh +38 -0
  6. package/config/skills/orchestrator/harness-login/SKILL.md +88 -0
  7. package/config/skills/orchestrator/harness-login/execute.sh +75 -0
  8. package/config/skills/orchestrator/harness-login/execute.test.sh +72 -0
  9. package/config/skills/orchestrator/reply-chat/SKILL.md +11 -1
  10. package/config/skills/orchestrator/reply-chat/execute.sh +13 -1
  11. package/config/skills/orchestrator/reply-slack/SKILL.md +1 -0
  12. package/config/skills/orchestrator/reply-slack/execute.sh +11 -2
  13. package/dist/backend/backend/src/constants.d.ts +55 -0
  14. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  15. package/dist/backend/backend/src/constants.js +36 -1
  16. package/dist/backend/backend/src/constants.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  18. package/dist/backend/backend/src/controllers/chat/chat.controller.js +36 -1
  19. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  20. package/dist/backend/backend/src/controllers/harness/harness.routes.d.ts +1 -0
  21. package/dist/backend/backend/src/controllers/harness/harness.routes.d.ts.map +1 -1
  22. package/dist/backend/backend/src/controllers/harness/harness.routes.js +3 -0
  23. package/dist/backend/backend/src/controllers/harness/harness.routes.js.map +1 -1
  24. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts +61 -0
  25. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -0
  26. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +133 -0
  27. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -0
  28. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.js +69 -7
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  31. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +4 -1
  32. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +9 -2
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  35. package/dist/backend/backend/src/index.d.ts +8 -0
  36. package/dist/backend/backend/src/index.d.ts.map +1 -1
  37. package/dist/backend/backend/src/index.js +75 -3
  38. package/dist/backend/backend/src/index.js.map +1 -1
  39. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/agent/agent-registration.service.js +28 -1
  41. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  42. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +11 -1
  43. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/codex-runtime.service.js +18 -0
  45. package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +12 -0
  47. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +18 -3
  49. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  50. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +29 -0
  51. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +48 -0
  53. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  54. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
  56. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +15 -0
  58. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +20 -0
  60. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +147 -5
  62. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +210 -20
  64. package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +87 -0
  66. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/harness/owner-login-request.js +191 -0
  68. package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -0
  69. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts +217 -0
  70. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -0
  71. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js +300 -0
  72. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js.map +1 -0
  73. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +32 -2
  74. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +59 -5
  76. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  77. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +4 -2
  78. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +6 -3
  80. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  81. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +68 -9
  82. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  83. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js +121 -11
  84. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js.map +1 -1
  85. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +292 -0
  86. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -0
  87. package/dist/backend/backend/src/services/system/auto-update.service.js +590 -0
  88. package/dist/backend/backend/src/services/system/auto-update.service.js.map +1 -0
  89. package/dist/backend/backend/src/services/system/auto-update.utils.d.ts +265 -0
  90. package/dist/backend/backend/src/services/system/auto-update.utils.d.ts.map +1 -0
  91. package/dist/backend/backend/src/services/system/auto-update.utils.js +397 -0
  92. package/dist/backend/backend/src/services/system/auto-update.utils.js.map +1 -0
  93. package/dist/backend/backend/src/services/system/version-check.service.d.ts +15 -1
  94. package/dist/backend/backend/src/services/system/version-check.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/system/version-check.service.js +21 -2
  96. package/dist/backend/backend/src/services/system/version-check.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +7 -1
  98. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +14 -2
  100. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  101. package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/v3/cascade-request-status.js +16 -1
  103. package/dist/backend/backend/src/services/v3/cascade-request-status.js.map +1 -1
  104. package/dist/backend/backend/src/services/v3/request-completion.d.ts +128 -0
  105. package/dist/backend/backend/src/services/v3/request-completion.d.ts.map +1 -0
  106. package/dist/backend/backend/src/services/v3/request-completion.js +311 -0
  107. package/dist/backend/backend/src/services/v3/request-completion.js.map +1 -0
  108. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +3 -0
  110. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
  111. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +17 -3
  113. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  114. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +8 -0
  115. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/v3/v3-data.service.js +11 -1
  117. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  118. package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
  119. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  120. package/dist/backend/backend/src/types/settings.types.js +4 -0
  121. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  122. package/dist/backend/backend/src/utils/agent-reply-filter.utils.d.ts +75 -0
  123. package/dist/backend/backend/src/utils/agent-reply-filter.utils.d.ts.map +1 -0
  124. package/dist/backend/backend/src/utils/agent-reply-filter.utils.js +127 -0
  125. package/dist/backend/backend/src/utils/agent-reply-filter.utils.js.map +1 -0
  126. package/dist/backend/build-info.json +2 -2
  127. package/dist/backend/config/constants.d.ts +56 -0
  128. package/dist/backend/config/constants.d.ts.map +1 -1
  129. package/dist/backend/config/constants.js +57 -0
  130. package/dist/backend/config/constants.js.map +1 -1
  131. package/dist/backend/config/index.d.ts +2 -2
  132. package/dist/backend/config/index.d.ts.map +1 -1
  133. package/dist/backend/config/index.js +2 -2
  134. package/dist/backend/config/index.js.map +1 -1
  135. package/dist/cli/backend/src/constants.d.ts +55 -0
  136. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  137. package/dist/cli/backend/src/constants.js +36 -1
  138. package/dist/cli/backend/src/constants.js.map +1 -1
  139. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  140. package/dist/cli/backend/src/services/agent/agent-registration.service.js +28 -1
  141. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  142. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +11 -1
  143. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  144. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +18 -0
  145. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  146. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +12 -0
  147. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  148. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +18 -3
  149. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  150. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +29 -0
  151. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  152. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +48 -0
  153. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  154. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  155. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
  156. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  157. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +15 -0
  158. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  159. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +20 -0
  160. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  161. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +147 -5
  162. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +210 -20
  164. package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  165. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +87 -0
  166. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -0
  167. package/dist/cli/backend/src/services/harness/owner-login-request.js +191 -0
  168. package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -0
  169. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts +217 -0
  170. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -0
  171. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js +300 -0
  172. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js.map +1 -0
  173. package/dist/cli/backend/src/services/system/auto-update.utils.d.ts +265 -0
  174. package/dist/cli/backend/src/services/system/auto-update.utils.d.ts.map +1 -0
  175. package/dist/cli/backend/src/services/system/auto-update.utils.js +397 -0
  176. package/dist/cli/backend/src/services/system/auto-update.utils.js.map +1 -0
  177. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +7 -1
  178. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  179. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +14 -2
  180. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  181. package/dist/cli/backend/src/services/v3/request-completion.d.ts +128 -0
  182. package/dist/cli/backend/src/services/v3/request-completion.d.ts.map +1 -0
  183. package/dist/cli/backend/src/services/v3/request-completion.js +311 -0
  184. package/dist/cli/backend/src/services/v3/request-completion.js.map +1 -0
  185. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +8 -0
  186. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  187. package/dist/cli/backend/src/services/v3/v3-data.service.js +11 -1
  188. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  189. package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
  190. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  191. package/dist/cli/backend/src/types/settings.types.js +4 -0
  192. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  193. package/dist/cli/backend/src/utils/agent-reply-filter.utils.d.ts +75 -0
  194. package/dist/cli/backend/src/utils/agent-reply-filter.utils.d.ts.map +1 -0
  195. package/dist/cli/backend/src/utils/agent-reply-filter.utils.js +127 -0
  196. package/dist/cli/backend/src/utils/agent-reply-filter.utils.js.map +1 -0
  197. package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
  198. package/dist/cli/cli/src/commands/start.js +14 -3
  199. package/dist/cli/cli/src/commands/start.js.map +1 -1
  200. package/dist/cli/cli/src/commands/update-status.d.ts +85 -0
  201. package/dist/cli/cli/src/commands/update-status.d.ts.map +1 -0
  202. package/dist/cli/cli/src/commands/update-status.js +162 -0
  203. package/dist/cli/cli/src/commands/update-status.js.map +1 -0
  204. package/dist/cli/cli/src/constants.d.ts +1 -1
  205. package/dist/cli/cli/src/constants.d.ts.map +1 -1
  206. package/dist/cli/cli/src/constants.js +1 -1
  207. package/dist/cli/cli/src/constants.js.map +1 -1
  208. package/dist/cli/cli/src/index.js +7 -0
  209. package/dist/cli/cli/src/index.js.map +1 -1
  210. package/dist/cli/cli/src/utils/backend-respawn.d.ts +50 -0
  211. package/dist/cli/cli/src/utils/backend-respawn.d.ts.map +1 -0
  212. package/dist/cli/cli/src/utils/backend-respawn.js +59 -0
  213. package/dist/cli/cli/src/utils/backend-respawn.js.map +1 -0
  214. package/dist/cli/config/constants.d.ts +56 -0
  215. package/dist/cli/config/constants.d.ts.map +1 -1
  216. package/dist/cli/config/constants.js +57 -0
  217. package/dist/cli/config/constants.js.map +1 -1
  218. package/dist/cli/config/index.d.ts +2 -2
  219. package/dist/cli/config/index.d.ts.map +1 -1
  220. package/dist/cli/config/index.js +2 -2
  221. package/dist/cli/config/index.js.map +1 -1
  222. package/frontend/dist/assets/{index-e05af897.js → index-71670b91.js} +22 -22
  223. package/frontend/dist/index.html +1 -1
  224. package/package.json +1 -1
  225. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +39 -0
  226. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +17 -17
  227. package/packages/crewly-agent/src/runtime/interactive-login-guard.test.ts +60 -0
  228. package/packages/crewly-agent/src/runtime/interactive-login-guard.ts +76 -0
  229. package/packages/crewly-agent/src/runtime/reply-tool-calls.test.ts +53 -0
  230. package/packages/crewly-agent/src/runtime/reply-tool-calls.ts +76 -0
  231. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +8 -0
  232. package/packages/crewly-agent/src/runtime/tool-registry.ts +14 -0
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Auto-Update Service
3
+ *
4
+ * Keeps an npm-installed Crewly on the latest release with nobody at the
5
+ * keyboard (specs/auto-update.md):
6
+ *
7
+ * 1. about 10 min after boot, then every 3 h, ask the npm registry for the
8
+ * latest `crewly`;
9
+ * 2. when it is newer and auto-update is on, wait for a quiet window — no
10
+ * agent in_progress and no turn in flight, seen twice ~60 s apart;
11
+ * 3. `npm install -g --prefix <the running copy's prefix> crewly@<version>`;
12
+ * 4. verify the installed package.json says `<version>`;
13
+ * 5. write a marker and ask for the graceful restart (drain, exit 120, the
14
+ * `crewly start` parent respawns the backend from the new files);
15
+ * 6. on the next boot, read the marker and DM the owner once.
16
+ *
17
+ * Failures (install error, verify mismatch, no restart path) back off 6 h
18
+ * and never restart onto a broken install. Dev checkouts, non-npm installs
19
+ * and backends without a respawning parent are skipped.
20
+ *
21
+ * All I/O goes through {@link AutoUpdateDeps} so the rules are unit-testable
22
+ * with a mocked registry, npm and clock; {@link createAutoUpdateService}
23
+ * wires the real ones.
24
+ *
25
+ * @module services/system/auto-update.service
26
+ */
27
+ import { type AutoUpdateOutcome, type AutoUpdateState, type InstallInfo } from './auto-update.utils.js';
28
+ /** Result of one `npm install` run. */
29
+ export interface InstallRunResult {
30
+ /** True when npm exited 0 */
31
+ ok: boolean;
32
+ /** Exit code (null when killed) */
33
+ code: number | null;
34
+ /** Tail of the combined output, for the failure reason */
35
+ outputTail: string;
36
+ }
37
+ /** What is keeping the machine busy right now. */
38
+ export interface BusySnapshot {
39
+ /** Sessions with a turn in flight (InFlightTurnTracker) */
40
+ midTurn: string[];
41
+ /** Active agents whose workingStatus is in_progress */
42
+ inProgress: string[];
43
+ }
44
+ /** Minimal logger. */
45
+ export interface AutoUpdateLogger {
46
+ info(message: string, meta?: Record<string, unknown>): void;
47
+ warn(message: string, meta?: Record<string, unknown>): void;
48
+ error(message: string, meta?: Record<string, unknown>): void;
49
+ }
50
+ /** Everything the service touches outside itself. */
51
+ export interface AutoUpdateDeps {
52
+ /** Crewly home (state, marker and log live here) */
53
+ crewlyHome: string;
54
+ /** Where/how the running copy is installed */
55
+ install: InstallInfo;
56
+ /** Version this process is running (read at boot, before any install) */
57
+ currentVersion: string | null;
58
+ /** `settings.general.autoUpdate` (undefined = default on) */
59
+ getSettingEnabled: () => Promise<boolean | undefined>;
60
+ /** Environment (for CREWLY_AUTO_UPDATE) */
61
+ env: NodeJS.ProcessEnv;
62
+ /** Whether a parent will respawn the backend after exit 120 */
63
+ hasSupervisor: () => boolean;
64
+ /** Latest version on npm (null on failure) */
65
+ fetchLatestVersion: (currentVersion: string) => Promise<string | null>;
66
+ /** True when a shutdown / restart is already under way */
67
+ isRestartInProgress: () => boolean;
68
+ /** Busy agents and turns */
69
+ getBusy: () => Promise<BusySnapshot>;
70
+ /** Run npm; resolves when it exits */
71
+ runInstall: (command: string, args: string[]) => Promise<InstallRunResult>;
72
+ /** npm executable */
73
+ npmCommand: string;
74
+ /** Read the installed version from disk */
75
+ readInstalledVersion: (packageRoot: string) => string | null;
76
+ /** Ask for the graceful restart; false when nothing can restart us */
77
+ requestRestart: (reason: string) => boolean;
78
+ /** Whether the owner channel (Slack) is up */
79
+ isNotifyReady: () => boolean;
80
+ /** Send one owner notification */
81
+ notifyOwner: (title: string, message: string) => Promise<void>;
82
+ /** This machine's display name */
83
+ getDeviceName: () => Promise<string>;
84
+ /** Called after a successful install, before the restart (e.g. re-anchor the cwd) */
85
+ afterInstall: (packageRoot: string) => void;
86
+ /** Append a line to auto-update.log */
87
+ appendLog: (line: string) => void;
88
+ /** Logger */
89
+ logger: AutoUpdateLogger;
90
+ /** Clock */
91
+ now: () => number;
92
+ /** Sleep */
93
+ sleep: (ms: number) => Promise<void>;
94
+ /** Schedule a callback (returns a handle for cancel) */
95
+ schedule: (fn: () => void, ms: number) => unknown;
96
+ /** Cancel a scheduled callback */
97
+ cancel: (handle: unknown) => void;
98
+ }
99
+ /** Result of one {@link AutoUpdateService.runCycle}. */
100
+ export interface CycleResult {
101
+ /** How it ended */
102
+ outcome: AutoUpdateOutcome | 'backoff';
103
+ /** Detail for logs/tests */
104
+ detail?: string;
105
+ /** Target version, when one was chosen */
106
+ version?: string;
107
+ }
108
+ /**
109
+ * Periodically upgrades the running npm install and restarts into it.
110
+ */
111
+ export declare class AutoUpdateService {
112
+ private readonly deps;
113
+ private static instance;
114
+ private timer;
115
+ private running;
116
+ private stopped;
117
+ private lastLoggedMode;
118
+ private busySince;
119
+ private pendingNotice;
120
+ private readonly statePath;
121
+ private readonly markerPath;
122
+ /**
123
+ * @param deps - Injected I/O
124
+ */
125
+ constructor(deps: AutoUpdateDeps);
126
+ /**
127
+ * Register the process-wide instance (index.ts).
128
+ *
129
+ * @param service - Instance, or null to clear
130
+ */
131
+ static setInstance(service: AutoUpdateService | null): void;
132
+ /**
133
+ * The process-wide instance, when one was registered.
134
+ *
135
+ * @returns The instance or null
136
+ */
137
+ static getInstance(): AutoUpdateService | null;
138
+ /**
139
+ * Boot: consume the pending-upgrade marker (and report it), log the mode,
140
+ * and schedule the first check.
141
+ */
142
+ start(): void;
143
+ /**
144
+ * Stop scheduling (shutdown).
145
+ */
146
+ stop(): void;
147
+ /**
148
+ * Whether this boot is the result of an auto-upgrade whose notice is still
149
+ * owed — the generic "back online" announcement is skipped then, so the
150
+ * owner gets one message per upgrade, not two.
151
+ *
152
+ * @returns True while the upgrade notice is pending or was just sent
153
+ */
154
+ isUpgradeBoot(): boolean;
155
+ /**
156
+ * Current persisted status.
157
+ *
158
+ * @returns The state
159
+ */
160
+ getState(): AutoUpdateState;
161
+ /**
162
+ * The on/off/skip mode as a short string (also what update-status shows).
163
+ *
164
+ * @returns e.g. `enabled`, `dev-checkout`, `disabled-env`
165
+ */
166
+ describeMode(): Promise<string>;
167
+ /**
168
+ * One check → (maybe) install → verify → restart pass.
169
+ *
170
+ * @returns How it ended
171
+ */
172
+ runCycle(): Promise<CycleResult>;
173
+ /**
174
+ * Body of {@link runCycle}.
175
+ *
176
+ * @returns How it ended
177
+ */
178
+ private runCycleInner;
179
+ /**
180
+ * Whether nothing is busy. A stale in_progress flag stops blocking after
181
+ * MAX_BUSY_DEFER_MS; a turn in flight always blocks.
182
+ *
183
+ * @returns ok, or the reason it is not
184
+ */
185
+ private isQuiet;
186
+ /**
187
+ * Record a busy deferral.
188
+ *
189
+ * @param version - Target version
190
+ * @param reason - What is busy
191
+ * @returns Cycle result
192
+ */
193
+ private deferBusy;
194
+ /**
195
+ * Record a failure, back off, and tell the owner once per target version
196
+ * after repeated failures.
197
+ *
198
+ * @param outcome - Failure kind
199
+ * @param version - Target version
200
+ * @param reason - Why
201
+ * @returns Cycle result
202
+ */
203
+ private recordFailure;
204
+ /**
205
+ * Boot half of the upgrade: consume the marker; when this process runs the
206
+ * version it names, record success and DM the owner.
207
+ */
208
+ private handleBootMarker;
209
+ /**
210
+ * Send an owner notice once the channel is up (waits up to NOTIFY_WAIT_MS).
211
+ *
212
+ * @param compose - Builds the notice from the device name
213
+ * @returns True when sent
214
+ */
215
+ private notify;
216
+ /**
217
+ * Schedule the next cycle.
218
+ *
219
+ * @param ms - Delay
220
+ */
221
+ private scheduleNext;
222
+ /**
223
+ * Timer body: run a cycle and pick the next delay from its outcome.
224
+ */
225
+ private tick;
226
+ /**
227
+ * Log the mode when it changes (so "dev checkout — auto-update off" is
228
+ * said once, not every 3 hours).
229
+ *
230
+ * @param mode - Current mode
231
+ */
232
+ private logModeOnce;
233
+ /**
234
+ * Merge a patch into the status file (best-effort).
235
+ *
236
+ * @param patch - Fields to change
237
+ */
238
+ private updateState;
239
+ /**
240
+ * Append a timestamped line to auto-update.log.
241
+ *
242
+ * @param line - Text
243
+ */
244
+ private log;
245
+ }
246
+ /**
247
+ * Human-readable line for a mode.
248
+ *
249
+ * @param mode - Mode from {@link AutoUpdateService.describeMode}
250
+ * @param install - Install info
251
+ * @returns Log line
252
+ */
253
+ export declare function describeModeLine(mode: string, install: InstallInfo): string;
254
+ /**
255
+ * Run npm, appending its output to the log, killing it after the timeout.
256
+ *
257
+ * @param command - npm executable
258
+ * @param args - Arguments
259
+ * @param appendLog - Log sink
260
+ * @param timeoutMs - Kill after this long
261
+ * @returns Exit status and output tail
262
+ */
263
+ export declare function runNpmInstall(command: string, args: string[], appendLog: (line: string) => void, timeoutMs?: number): Promise<InstallRunResult>;
264
+ /** Live hooks the server provides to {@link createAutoUpdateService}. */
265
+ export interface AutoUpdateWiring {
266
+ /** Crewly home */
267
+ crewlyHome: string;
268
+ /** `settings.general.autoUpdate` */
269
+ getSettingEnabled: () => Promise<boolean | undefined>;
270
+ /** Latest version on npm */
271
+ fetchLatestVersion: (currentVersion: string) => Promise<string | null>;
272
+ /** Restart already under way */
273
+ isRestartInProgress: () => boolean;
274
+ /** Busy snapshot */
275
+ getBusy: () => Promise<BusySnapshot>;
276
+ /** Graceful restart with RESTART_REQUESTED */
277
+ requestRestart: (reason: string, exitCode: number) => boolean;
278
+ /** Owner channel up */
279
+ isNotifyReady: () => boolean;
280
+ /** Owner notification */
281
+ notifyOwner: (title: string, message: string) => Promise<void>;
282
+ /** Device name */
283
+ getDeviceName: () => Promise<string>;
284
+ }
285
+ /**
286
+ * Build the service with the real filesystem, npm, clock and timers.
287
+ *
288
+ * @param wiring - Server hooks
289
+ * @returns The service (not started)
290
+ */
291
+ export declare function createAutoUpdateService(wiring: AutoUpdateWiring): AutoUpdateService;
292
+ //# sourceMappingURL=auto-update.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/system/auto-update.service.ts"],"names":[],"mappings":"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"}