crewly 1.20.143 → 1.20.144

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 (154) hide show
  1. package/config/constants.ts +59 -0
  2. package/config/index.ts +2 -0
  3. package/config/skills/orchestrator/delegate-task/execute.sh +11 -0
  4. package/config/skills/orchestrator/delegate-task/execute.test.sh +38 -0
  5. package/config/skills/orchestrator/reply-chat/SKILL.md +11 -1
  6. package/config/skills/orchestrator/reply-chat/execute.sh +13 -1
  7. package/config/skills/orchestrator/reply-slack/SKILL.md +1 -0
  8. package/config/skills/orchestrator/reply-slack/execute.sh +11 -2
  9. package/dist/backend/backend/src/constants.d.ts +43 -0
  10. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  11. package/dist/backend/backend/src/constants.js +24 -1
  12. package/dist/backend/backend/src/constants.js.map +1 -1
  13. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.js +36 -1
  15. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/slack/slack.controller.js +69 -7
  18. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +4 -1
  20. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  21. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +9 -2
  22. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  23. package/dist/backend/backend/src/index.d.ts +8 -0
  24. package/dist/backend/backend/src/index.d.ts.map +1 -1
  25. package/dist/backend/backend/src/index.js +71 -2
  26. package/dist/backend/backend/src/index.js.map +1 -1
  27. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/agent/agent-registration.service.js +5 -0
  29. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  30. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +15 -0
  31. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +20 -0
  33. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts +217 -0
  35. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js +300 -0
  37. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +32 -2
  39. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +59 -5
  41. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  42. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +4 -2
  43. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +6 -3
  45. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  46. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +292 -0
  47. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/system/auto-update.service.js +590 -0
  49. package/dist/backend/backend/src/services/system/auto-update.service.js.map +1 -0
  50. package/dist/backend/backend/src/services/system/auto-update.utils.d.ts +265 -0
  51. package/dist/backend/backend/src/services/system/auto-update.utils.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/system/auto-update.utils.js +397 -0
  53. package/dist/backend/backend/src/services/system/auto-update.utils.js.map +1 -0
  54. package/dist/backend/backend/src/services/system/version-check.service.d.ts +15 -1
  55. package/dist/backend/backend/src/services/system/version-check.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/system/version-check.service.js +21 -2
  57. package/dist/backend/backend/src/services/system/version-check.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +7 -1
  59. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +14 -2
  61. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/v3/cascade-request-status.js +16 -1
  64. package/dist/backend/backend/src/services/v3/cascade-request-status.js.map +1 -1
  65. package/dist/backend/backend/src/services/v3/request-completion.d.ts +128 -0
  66. package/dist/backend/backend/src/services/v3/request-completion.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/v3/request-completion.js +311 -0
  68. package/dist/backend/backend/src/services/v3/request-completion.js.map +1 -0
  69. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +3 -0
  71. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
  72. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +17 -3
  74. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  75. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +8 -0
  76. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/v3/v3-data.service.js +11 -1
  78. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  79. package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
  80. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  81. package/dist/backend/backend/src/types/settings.types.js +4 -0
  82. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  83. package/dist/backend/build-info.json +2 -2
  84. package/dist/backend/config/constants.d.ts +56 -0
  85. package/dist/backend/config/constants.d.ts.map +1 -1
  86. package/dist/backend/config/constants.js +57 -0
  87. package/dist/backend/config/constants.js.map +1 -1
  88. package/dist/backend/config/index.d.ts +2 -2
  89. package/dist/backend/config/index.d.ts.map +1 -1
  90. package/dist/backend/config/index.js +2 -2
  91. package/dist/backend/config/index.js.map +1 -1
  92. package/dist/cli/backend/src/constants.d.ts +43 -0
  93. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  94. package/dist/cli/backend/src/constants.js +24 -1
  95. package/dist/cli/backend/src/constants.js.map +1 -1
  96. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  97. package/dist/cli/backend/src/services/agent/agent-registration.service.js +5 -0
  98. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  99. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +15 -0
  100. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  101. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +20 -0
  102. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  103. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts +217 -0
  104. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -0
  105. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js +300 -0
  106. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js.map +1 -0
  107. package/dist/cli/backend/src/services/system/auto-update.utils.d.ts +265 -0
  108. package/dist/cli/backend/src/services/system/auto-update.utils.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/system/auto-update.utils.js +397 -0
  110. package/dist/cli/backend/src/services/system/auto-update.utils.js.map +1 -0
  111. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +7 -1
  112. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  113. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +14 -2
  114. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  115. package/dist/cli/backend/src/services/v3/request-completion.d.ts +128 -0
  116. package/dist/cli/backend/src/services/v3/request-completion.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/v3/request-completion.js +311 -0
  118. package/dist/cli/backend/src/services/v3/request-completion.js.map +1 -0
  119. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +8 -0
  120. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  121. package/dist/cli/backend/src/services/v3/v3-data.service.js +11 -1
  122. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  123. package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
  124. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  125. package/dist/cli/backend/src/types/settings.types.js +4 -0
  126. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  127. package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
  128. package/dist/cli/cli/src/commands/start.js +14 -3
  129. package/dist/cli/cli/src/commands/start.js.map +1 -1
  130. package/dist/cli/cli/src/commands/update-status.d.ts +85 -0
  131. package/dist/cli/cli/src/commands/update-status.d.ts.map +1 -0
  132. package/dist/cli/cli/src/commands/update-status.js +162 -0
  133. package/dist/cli/cli/src/commands/update-status.js.map +1 -0
  134. package/dist/cli/cli/src/constants.d.ts +1 -1
  135. package/dist/cli/cli/src/constants.d.ts.map +1 -1
  136. package/dist/cli/cli/src/constants.js +1 -1
  137. package/dist/cli/cli/src/constants.js.map +1 -1
  138. package/dist/cli/cli/src/index.js +7 -0
  139. package/dist/cli/cli/src/index.js.map +1 -1
  140. package/dist/cli/cli/src/utils/backend-respawn.d.ts +50 -0
  141. package/dist/cli/cli/src/utils/backend-respawn.d.ts.map +1 -0
  142. package/dist/cli/cli/src/utils/backend-respawn.js +59 -0
  143. package/dist/cli/cli/src/utils/backend-respawn.js.map +1 -0
  144. package/dist/cli/config/constants.d.ts +56 -0
  145. package/dist/cli/config/constants.d.ts.map +1 -1
  146. package/dist/cli/config/constants.js +57 -0
  147. package/dist/cli/config/constants.js.map +1 -1
  148. package/dist/cli/config/index.d.ts +2 -2
  149. package/dist/cli/config/index.d.ts.map +1 -1
  150. package/dist/cli/config/index.js +2 -2
  151. package/dist/cli/config/index.js.map +1 -1
  152. package/frontend/dist/assets/{index-e05af897.js → index-71670b91.js} +22 -22
  153. package/frontend/dist/index.html +1 -1
  154. package/package.json +1 -1
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Auto-update helpers — pure / filesystem-only pieces of the self-update
3
+ * (specs/auto-update.md), kept apart from the service so each rule is
4
+ * testable without timers:
5
+ *
6
+ * - where the running copy lives and what kind of install it is (npm global,
7
+ * user-prefix npm, dev checkout, anything else);
8
+ * - the `npm install -g` arguments that target that same prefix;
9
+ * - the on/off decision (setting + env override);
10
+ * - whether a supervisor will bring the backend back after RESTART_REQUESTED;
11
+ * - the status file (`crewly update-status`) and the pending-upgrade marker.
12
+ *
13
+ * @module services/system/auto-update.utils
14
+ */
15
+ import * as fs from 'fs';
16
+ import * as path from 'path';
17
+ import { execFileSync } from 'child_process';
18
+ import { AUTO_UPDATE_CONSTANTS } from '../../constants.js';
19
+ /** Name of the directory npm installs packages into. */
20
+ const NODE_MODULES_DIR = 'node_modules';
21
+ /** Directory between the prefix and node_modules for POSIX global installs. */
22
+ const POSIX_GLOBAL_LIB_DIR = 'lib';
23
+ /** Env values that force auto-update off. */
24
+ const ENV_OFF_VALUES = ['0', 'false', 'off', 'no'];
25
+ /** Env values that force auto-update on. */
26
+ const ENV_ON_VALUES = ['1', 'true', 'on', 'yes'];
27
+ /** Pattern matching the `crewly start` command line of a supervising CLI parent. */
28
+ const CLI_START_CMDLINE_PATTERN = /(?:\bcrewly|cli[\\/]src[\\/]index\.[jt]s)\S*\s+start\b/;
29
+ /**
30
+ * Resolve symlinks when the path exists.
31
+ *
32
+ * @param p - Path
33
+ * @returns Real path, or the resolved path when it does not exist
34
+ */
35
+ export function realOrResolved(p) {
36
+ try {
37
+ return fs.realpathSync(p);
38
+ }
39
+ catch {
40
+ return path.resolve(p);
41
+ }
42
+ }
43
+ /**
44
+ * Walk up from `startDir` to the directory whose package.json is `crewly`.
45
+ *
46
+ * @param startDir - Directory to start from
47
+ * @returns The package root, or null when none is found
48
+ */
49
+ export function findCrewlyPackageRoot(startDir) {
50
+ let current = path.resolve(startDir);
51
+ for (;;) {
52
+ const pkgPath = path.join(current, 'package.json');
53
+ if (fs.existsSync(pkgPath)) {
54
+ try {
55
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
56
+ if (pkg.name === AUTO_UPDATE_CONSTANTS.PACKAGE_NAME)
57
+ return current;
58
+ }
59
+ catch {
60
+ // Malformed package.json — keep walking
61
+ }
62
+ }
63
+ const parent = path.dirname(current);
64
+ if (parent === current)
65
+ return null;
66
+ current = parent;
67
+ }
68
+ }
69
+ /**
70
+ * Package root of the running backend, anchored on the entry script
71
+ * (`process.argv[1]`, e.g. `<root>/dist/backend/backend/src/index.js`) rather
72
+ * than the cwd — after `npm install -g` replaces the package directory the
73
+ * old cwd no longer exists.
74
+ *
75
+ * @param argv1 - Entry script path (defaults to process.argv[1])
76
+ * @param cwd - Fallback start directory
77
+ * @returns Real path of the package root, or null
78
+ */
79
+ export function resolveRunningPackageRoot(argv1 = process.argv[1], cwd) {
80
+ const anchors = [];
81
+ if (argv1)
82
+ anchors.push(path.dirname(realOrResolved(argv1)));
83
+ if (cwd)
84
+ anchors.push(cwd);
85
+ for (const anchor of anchors) {
86
+ const root = findCrewlyPackageRoot(anchor);
87
+ if (root)
88
+ return realOrResolved(root);
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * The npm prefix a package root was installed under, when it is a global
94
+ * install: `<prefix>/lib/node_modules/crewly` on POSIX,
95
+ * `<prefix>\node_modules\crewly` on Windows. Covers the default global prefix
96
+ * (nvm, Homebrew, /usr/local) and the user prefix (`<crewlyHome>/npm-global`)
97
+ * alike — installing with `--prefix <that>` replaces exactly the running copy
98
+ * even when a different `npm` is first on PATH.
99
+ *
100
+ * @param packageRoot - Real path of the package root
101
+ * @param platform - Platform (tests)
102
+ * @returns The prefix, or null for anything that is not a global install
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * derivePrefixFromPackageRoot('/usr/local/lib/node_modules/crewly'); // '/usr/local'
107
+ * derivePrefixFromPackageRoot('/home/me/.crewly/npm-global/lib/node_modules/crewly'); // '/home/me/.crewly/npm-global'
108
+ * derivePrefixFromPackageRoot('/home/me/proj/node_modules/crewly'); // null (local dependency)
109
+ * ```
110
+ */
111
+ export function derivePrefixFromPackageRoot(packageRoot, platform = process.platform) {
112
+ const p = platform === 'win32' ? path.win32 : path.posix;
113
+ if (p.basename(packageRoot) !== AUTO_UPDATE_CONSTANTS.PACKAGE_NAME)
114
+ return null;
115
+ const nodeModules = p.dirname(packageRoot);
116
+ if (p.basename(nodeModules) !== NODE_MODULES_DIR)
117
+ return null;
118
+ const parent = p.dirname(nodeModules);
119
+ if (platform === 'win32')
120
+ return parent;
121
+ if (p.basename(parent) !== POSIX_GLOBAL_LIB_DIR)
122
+ return null;
123
+ return p.dirname(parent);
124
+ }
125
+ /**
126
+ * Whether a directory is a git working tree root (`.git` directory, or the
127
+ * `.git` file of a worktree).
128
+ *
129
+ * @param dir - Directory
130
+ * @returns True when `.git` exists there
131
+ */
132
+ export function isGitWorkingTree(dir) {
133
+ return fs.existsSync(path.join(dir, '.git'));
134
+ }
135
+ /**
136
+ * Classify the running install.
137
+ *
138
+ * - `dev-checkout`: the package root is a git working tree (e.g. the owner's
139
+ * `crewly/` repo running its own build, or an `npm link` that resolves into
140
+ * it). It must never npm-install over itself.
141
+ * - `npm-global`: the root sits in `<prefix>/lib/node_modules/crewly`.
142
+ * - `unmanaged`: anything else (Docker image at /app, a local dependency, an
143
+ * npx cache) — nobody owns an in-place upgrade there.
144
+ *
145
+ * @param packageRoot - Real path of the package root (null when unknown)
146
+ * @param platform - Platform (tests)
147
+ * @returns Install info
148
+ */
149
+ export function detectInstall(packageRoot, platform = process.platform) {
150
+ if (!packageRoot) {
151
+ return { kind: 'unmanaged', packageRoot: null, prefix: null, detail: 'package root not found' };
152
+ }
153
+ if (isGitWorkingTree(packageRoot)) {
154
+ return { kind: 'dev-checkout', packageRoot, prefix: null, detail: `dev checkout (${packageRoot})` };
155
+ }
156
+ const prefix = derivePrefixFromPackageRoot(packageRoot, platform);
157
+ if (!prefix) {
158
+ return { kind: 'unmanaged', packageRoot, prefix: null, detail: `not a global npm install (${packageRoot})` };
159
+ }
160
+ return { kind: 'npm-global', packageRoot, prefix, detail: `npm global install under ${prefix}` };
161
+ }
162
+ /**
163
+ * `npm` arguments that install `crewly@<version>` over the running copy.
164
+ *
165
+ * @param prefix - Prefix from {@link derivePrefixFromPackageRoot}
166
+ * @param version - Exact target version
167
+ * @returns Arguments for npm
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * npmInstallArgs('/usr/local', '1.20.144');
172
+ * // ['install', '-g', '--prefix', '/usr/local', 'crewly@1.20.144']
173
+ * ```
174
+ */
175
+ export function npmInstallArgs(prefix, version) {
176
+ return ['install', '-g', '--prefix', prefix, `${AUTO_UPDATE_CONSTANTS.PACKAGE_NAME}@${version}`];
177
+ }
178
+ /**
179
+ * The npm executable that belongs to the running node, when it sits next to
180
+ * it (nvm, official installers); plain `npm` from PATH otherwise.
181
+ *
182
+ * @param execPath - Running node binary (defaults to process.execPath)
183
+ * @param platform - Platform (tests)
184
+ * @returns Command to run
185
+ */
186
+ export function resolveNpmCommand(execPath = process.execPath, platform = process.platform) {
187
+ const name = platform === 'win32' ? 'npm.cmd' : 'npm';
188
+ const sibling = path.join(path.dirname(execPath), name);
189
+ return fs.existsSync(sibling) ? sibling : name;
190
+ }
191
+ /**
192
+ * Version in `<packageRoot>/package.json`, read fresh from disk.
193
+ *
194
+ * @param packageRoot - Package root
195
+ * @returns The version, or null when unreadable
196
+ */
197
+ export function readInstalledVersion(packageRoot) {
198
+ try {
199
+ const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf-8'));
200
+ return typeof pkg.version === 'string' ? pkg.version : null;
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ }
206
+ /**
207
+ * Whether `latest` is a strictly newer semver than `current`
208
+ * (numeric major.minor.patch; pre-release tags are ignored).
209
+ *
210
+ * @param latest - Candidate version
211
+ * @param current - Running version
212
+ * @returns True when latest > current
213
+ */
214
+ export function isNewerVersion(latest, current) {
215
+ const parse = (v) => v.split('-')[0].split('.').map((n) => Number.parseInt(n, 10) || 0);
216
+ const l = parse(latest);
217
+ const c = parse(current);
218
+ for (let i = 0; i < Math.max(l.length, c.length); i++) {
219
+ const a = l[i] ?? 0;
220
+ const b = c[i] ?? 0;
221
+ if (a !== b)
222
+ return a > b;
223
+ }
224
+ return false;
225
+ }
226
+ /**
227
+ * Resolve the on/off switch: the env override wins over the setting.
228
+ *
229
+ * @param settingValue - `settings.general.autoUpdate` (undefined = default on)
230
+ * @param env - Environment
231
+ * @returns The switch state
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * resolveAutoUpdateSwitch(true, { CREWLY_AUTO_UPDATE: '0' }); // 'disabled-env'
236
+ * resolveAutoUpdateSwitch(false, {}); // 'disabled-setting'
237
+ * ```
238
+ */
239
+ export function resolveAutoUpdateSwitch(settingValue, env = process.env) {
240
+ const raw = env[AUTO_UPDATE_CONSTANTS.ENV_VAR]?.trim().toLowerCase();
241
+ if (raw && ENV_OFF_VALUES.includes(raw))
242
+ return 'disabled-env';
243
+ if (raw && ENV_ON_VALUES.includes(raw))
244
+ return 'enabled-env';
245
+ return settingValue === false ? 'disabled-setting' : 'enabled';
246
+ }
247
+ /**
248
+ * Whether a switch state means "on".
249
+ *
250
+ * @param state - Switch state
251
+ * @returns True when enabled
252
+ */
253
+ export function isSwitchOn(state) {
254
+ return state === 'enabled' || state === 'enabled-env';
255
+ }
256
+ /**
257
+ * Read the command line of a process (POSIX only; `/proc` on Linux, `ps`
258
+ * elsewhere).
259
+ *
260
+ * @param pid - Process id
261
+ * @returns The command line, or null
262
+ */
263
+ export function readProcessCommandLine(pid) {
264
+ if (process.platform === 'win32' || !Number.isInteger(pid) || pid <= 1)
265
+ return null;
266
+ try {
267
+ const procFile = `/proc/${pid}/cmdline`;
268
+ if (fs.existsSync(procFile)) {
269
+ return fs.readFileSync(procFile, 'utf-8').split('\0').join(' ').trim();
270
+ }
271
+ return execFileSync('ps', ['-o', 'command=', '-p', String(pid)], { encoding: 'utf-8', timeout: 2000 }).trim();
272
+ }
273
+ catch {
274
+ return null;
275
+ }
276
+ }
277
+ /**
278
+ * Whether a supervisor will respawn the backend after it exits with
279
+ * RESTART_REQUESTED. That supervisor is `crewly start` (foreground, under the
280
+ * macOS login-item wrapper, under systemd, or under the desktop app). New
281
+ * CLIs say so in the env; an older CLI parent is recognised by its command line.
282
+ *
283
+ * @param env - Environment
284
+ * @param parentCommandLine - Reader for the parent's command line (tests)
285
+ * @returns True when a respawning parent is present
286
+ */
287
+ export function hasRestartSupervisor(env = process.env, parentCommandLine = () => readProcessCommandLine(process.ppid)) {
288
+ if (env[AUTO_UPDATE_CONSTANTS.SUPERVISOR_ENV_VAR] === AUTO_UPDATE_CONSTANTS.SUPERVISOR_CLI_START)
289
+ return true;
290
+ const cmd = parentCommandLine();
291
+ return !!cmd && CLI_START_CMDLINE_PATTERN.test(cmd);
292
+ }
293
+ /**
294
+ * A fresh, empty state.
295
+ *
296
+ * @returns Default state
297
+ */
298
+ export function emptyAutoUpdateState() {
299
+ return {
300
+ currentVersion: null,
301
+ latestVersion: null,
302
+ lastCheckAt: null,
303
+ mode: 'unknown',
304
+ lastResult: null,
305
+ consecutiveFailures: 0,
306
+ backoffUntil: null,
307
+ failureNotifiedVersion: null,
308
+ };
309
+ }
310
+ /**
311
+ * Read the status file; missing or malformed → empty state.
312
+ *
313
+ * @param file - Path of the status file
314
+ * @returns The state
315
+ */
316
+ export function readAutoUpdateState(file) {
317
+ try {
318
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
319
+ return { ...emptyAutoUpdateState(), ...parsed };
320
+ }
321
+ catch {
322
+ return emptyAutoUpdateState();
323
+ }
324
+ }
325
+ /**
326
+ * Write the status file atomically (temp file + rename).
327
+ *
328
+ * @param file - Path of the status file
329
+ * @param state - State to write
330
+ */
331
+ export function writeAutoUpdateState(file, state) {
332
+ fs.mkdirSync(path.dirname(file), { recursive: true });
333
+ const tmp = `${file}.tmp`;
334
+ fs.writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf-8');
335
+ fs.renameSync(tmp, file);
336
+ }
337
+ /**
338
+ * Write the pending-upgrade marker.
339
+ *
340
+ * @param file - Marker path
341
+ * @param marker - Contents
342
+ */
343
+ export function writePendingMarker(file, marker) {
344
+ fs.mkdirSync(path.dirname(file), { recursive: true });
345
+ fs.writeFileSync(file, JSON.stringify(marker, null, 2), 'utf-8');
346
+ }
347
+ /**
348
+ * Read and delete the pending-upgrade marker. It is removed even when
349
+ * malformed, so a crash loop can never repeat the notice.
350
+ *
351
+ * @param file - Marker path
352
+ * @returns The marker, or null when absent or malformed
353
+ */
354
+ export function consumePendingMarker(file) {
355
+ if (!fs.existsSync(file))
356
+ return null;
357
+ let marker = null;
358
+ try {
359
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
360
+ if (typeof parsed.fromVersion === 'string' && typeof parsed.toVersion === 'string' && typeof parsed.at === 'string') {
361
+ marker = { fromVersion: parsed.fromVersion, toVersion: parsed.toVersion, at: parsed.at };
362
+ }
363
+ }
364
+ catch {
365
+ marker = null;
366
+ }
367
+ try {
368
+ fs.unlinkSync(file);
369
+ }
370
+ catch {
371
+ // Already gone
372
+ }
373
+ return marker;
374
+ }
375
+ /**
376
+ * Owner notice after a successful auto-upgrade.
377
+ *
378
+ * @param version - New version
379
+ * @param deviceName - This machine's name
380
+ * @returns The one-line notice
381
+ */
382
+ export function composeUpgradedNotice(version, deviceName) {
383
+ return `Crewly 已自动升级到 ${version}(本机:${deviceName})`;
384
+ }
385
+ /**
386
+ * Owner notice after repeated failures.
387
+ *
388
+ * @param version - Target version
389
+ * @param deviceName - This machine's name
390
+ * @param failures - Failures in a row
391
+ * @param reason - Last failure reason
392
+ * @returns The notice text
393
+ */
394
+ export function composeFailureNotice(version, deviceName, failures, reason) {
395
+ return `Crewly 自动升级到 ${version} 失败(本机:${deviceName},已连续 ${failures} 次):${reason}。会稍后重试;也可以在这台机器上运行 crewly upgrade。`;
396
+ }
397
+ //# sourceMappingURL=auto-update.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/services/system/auto-update.utils.ts"],"names":[],"mappings":"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"}
@@ -794,10 +794,16 @@ export declare class TaskPoolService {
794
794
  * @param workItemId - Target WI id
795
795
  * @param reason - Human-readable explanation; persisted on
796
796
  * `cancelReason` and surfaces in the UI badge.
797
+ * @param options - `supersededBy`: id(s) of the WorkItem(s) that now
798
+ * carry this work. Stamped on `metadata.supersededBy`
799
+ * so the Request's completion check follows the
800
+ * replacement instead of counting this item.
797
801
  * @throws if the WI doesn't exist, has an active claim, or is in a
798
802
  * non-cancellable terminal state.
799
803
  */
800
- cancelQueued(workItemId: string, reason: string): Promise<void>;
804
+ cancelQueued(workItemId: string, reason: string, options?: {
805
+ supersededBy?: string[];
806
+ }): Promise<void>;
801
807
  /**
802
808
  * Requeue a failed WorkItem back to `queued` for another attempt.
803
809
  *
@@ -1 +1 @@
1
- {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { TeamBudgetExceededError, } from '../budget/team-budget-gate.service.js'
16
16
  import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted, LAST_REQUEUED_AT_METADATA_KEY, DISPOSITION_METADATA_KEY, DISPOSITION_REQUIRED_STATUSES, getWorkItemDisposition, WORK_ITEM_BLOCK_SOURCES, isExplicitlyBlocked, } from '../../types/v2/work-item.types.js';
17
17
  import { createTaskClaim, } from '../../types/v2/claim.types.js';
18
18
  import { orderForAgent } from './ticket-claim-policy.js';
19
+ import { SUPERSEDED_BY_METADATA_KEY } from '../v3/request-completion.js';
19
20
  /**
20
21
  * Structured error thrown by {@link TaskPoolService.removeFromPool}
21
22
  * when an active claim exists and `force: true` was not passed.
@@ -1496,10 +1497,14 @@ export class TaskPoolService {
1496
1497
  * @param workItemId - Target WI id
1497
1498
  * @param reason - Human-readable explanation; persisted on
1498
1499
  * `cancelReason` and surfaces in the UI badge.
1500
+ * @param options - `supersededBy`: id(s) of the WorkItem(s) that now
1501
+ * carry this work. Stamped on `metadata.supersededBy`
1502
+ * so the Request's completion check follows the
1503
+ * replacement instead of counting this item.
1499
1504
  * @throws if the WI doesn't exist, has an active claim, or is in a
1500
1505
  * non-cancellable terminal state.
1501
1506
  */
1502
- async cancelQueued(workItemId, reason) {
1507
+ async cancelQueued(workItemId, reason, options = {}) {
1503
1508
  const workItem = await this.storage.findWorkItem(workItemId);
1504
1509
  if (!workItem) {
1505
1510
  throw new Error(`WorkItem not found: ${workItemId}`);
@@ -1518,12 +1523,19 @@ export class TaskPoolService {
1518
1523
  c.endReason = `cancelQueued: ${reason}`;
1519
1524
  });
1520
1525
  }
1521
- await this.transitionStatus(workItemId, 'cancelled', 'system', undefined, reason);
1526
+ const supersededBy = (options.supersededBy ?? []).filter((id) => id && id !== workItemId);
1527
+ const stampSuccessor = supersededBy.length > 0
1528
+ ? (wi) => {
1529
+ wi.metadata = { ...(wi.metadata ?? {}), [SUPERSEDED_BY_METADATA_KEY]: supersededBy };
1530
+ }
1531
+ : undefined;
1532
+ await this.transitionStatus(workItemId, 'cancelled', 'system', stampSuccessor, reason);
1522
1533
  await this.storage.flush();
1523
1534
  this.logger.info('WorkItem cancelled (queued → cancelled)', {
1524
1535
  workItemId,
1525
1536
  reason,
1526
1537
  previousStatus: workItem.status,
1538
+ ...(supersededBy.length > 0 ? { supersededBy } : {}),
1527
1539
  });
1528
1540
  }
1529
1541
  /**