crewly 1.20.407 → 1.20.408

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 (59) hide show
  1. package/dist/backend/backend/src/constants.d.ts +34 -0
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +34 -0
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts +29 -0
  6. package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts.map +1 -0
  7. package/dist/backend/backend/src/controllers/activity/activity.controller.js +77 -0
  8. package/dist/backend/backend/src/controllers/activity/activity.controller.js.map +1 -0
  9. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/team/team.controller.js +49 -0
  11. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  12. package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
  13. package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
  14. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
  15. package/dist/backend/backend/src/services/activity/activity-log.service.d.ts +192 -0
  16. package/dist/backend/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
  17. package/dist/backend/backend/src/services/activity/activity-log.service.js +343 -0
  18. package/dist/backend/backend/src/services/activity/activity-log.service.js.map +1 -0
  19. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +13 -0
  20. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  21. package/dist/backend/backend/src/services/decisions/decision.service.js +39 -0
  22. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  23. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/decisions/decision.wiring.js +2 -0
  25. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  26. package/dist/backend/build-info.json +2 -2
  27. package/dist/cli/backend/src/constants.d.ts +34 -0
  28. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  29. package/dist/cli/backend/src/constants.js +34 -0
  30. package/dist/cli/backend/src/constants.js.map +1 -1
  31. package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts +31 -0
  32. package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
  33. package/dist/cli/backend/src/middleware/agent-origin-correction.js +31 -0
  34. package/dist/cli/backend/src/middleware/agent-origin-correction.js.map +1 -0
  35. package/dist/cli/backend/src/middleware/api-token.middleware.d.ts +171 -0
  36. package/dist/cli/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
  37. package/dist/cli/backend/src/middleware/api-token.middleware.js +329 -0
  38. package/dist/cli/backend/src/middleware/api-token.middleware.js.map +1 -0
  39. package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts +290 -0
  40. package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
  41. package/dist/cli/backend/src/middleware/caller-identity.middleware.js +658 -0
  42. package/dist/cli/backend/src/middleware/caller-identity.middleware.js.map +1 -0
  43. package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts +60 -0
  44. package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts.map +1 -0
  45. package/dist/cli/backend/src/middleware/require-auth.middleware.js +127 -0
  46. package/dist/cli/backend/src/middleware/require-auth.middleware.js.map +1 -0
  47. package/dist/cli/backend/src/services/activity/activity-log.service.d.ts +192 -0
  48. package/dist/cli/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
  49. package/dist/cli/backend/src/services/activity/activity-log.service.js +343 -0
  50. package/dist/cli/backend/src/services/activity/activity-log.service.js.map +1 -0
  51. package/dist/cli/backend/src/services/core/peer-process.service.d.ts +168 -0
  52. package/dist/cli/backend/src/services/core/peer-process.service.d.ts.map +1 -0
  53. package/dist/cli/backend/src/services/core/peer-process.service.js +352 -0
  54. package/dist/cli/backend/src/services/core/peer-process.service.js.map +1 -0
  55. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +13 -0
  56. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  57. package/dist/cli/backend/src/services/decisions/decision.service.js +39 -0
  58. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Which local process is on the other end of a TCP connection, and does it
3
+ * belong to an agent? (#999, specs/2026-10-03-owner-auth.md §4)
4
+ *
5
+ * Agents run as the owner's OS user, so they can read `~/.crewly/api-token`
6
+ * and could ask for a dashboard session over loopback. File permissions
7
+ * cannot stop that. What does distinguish an agent is how it was started:
8
+ * every agent process descends from this backend (PTY shells, crewly-agent
9
+ * children, Codex daemons started from a PTY), runs on an agent PTY's
10
+ * terminal, or carries an agent's environment. The owner's browser, terminal,
11
+ * Vite dev server and Electron app have none of these.
12
+ *
13
+ * For a connection from this host, this service finds the client process
14
+ * (`lsof`, or `ss` on Linux) and checks those signals against one `ps`
15
+ * snapshot (the environment signal is Linux-only: macOS does not expose
16
+ * another process's environment). A lookup that cannot run (tool missing)
17
+ * or times out answers `unknown`, and the caller fails open with a warning
18
+ * (residual risk 3 in the spec). A lookup that ran but found no client
19
+ * process — it exited first, which an agent can arrange by writing the
20
+ * request over a raw socket — answers `gone`, and the caller fails CLOSED.
21
+ *
22
+ * A determined process can still shed all three signals (double-fork,
23
+ * `setsid`, `env -i`). That is the same-OS-user limit the spec documents.
24
+ *
25
+ * @module services/core/peer-process.service
26
+ */
27
+ import { execFile } from 'child_process';
28
+ import { promises as fsp } from 'fs';
29
+ import * as os from 'os';
30
+ import { OWNER_AUTH_CONSTANTS, API_SECURITY_CONSTANTS } from '../../constants.js';
31
+ /**
32
+ * Normalise an address for comparison (`::ffff:1.2.3.4` → `1.2.3.4`).
33
+ *
34
+ * @param address - Address string
35
+ * @returns Normalised address
36
+ */
37
+ function normaliseAddress(address) {
38
+ return address.startsWith('::ffff:') ? address.slice('::ffff:'.length) : address;
39
+ }
40
+ /**
41
+ * Whether an address belongs to this host: loopback, or any of its own
42
+ * interface addresses (an agent can connect to the machine's LAN IP too).
43
+ *
44
+ * @param address - Remote address of a connection
45
+ * @param interfaces - `os.networkInterfaces()` (tests)
46
+ * @returns True for a connection from this machine
47
+ */
48
+ export function isHostAddress(address, interfaces = os.networkInterfaces()) {
49
+ if (!address)
50
+ return false;
51
+ if (API_SECURITY_CONSTANTS.LOOPBACK_ADDRESSES.includes(address))
52
+ return true;
53
+ const target = normaliseAddress(address);
54
+ for (const entries of Object.values(interfaces)) {
55
+ for (const entry of entries ?? []) {
56
+ if (normaliseAddress(entry.address) === target)
57
+ return true;
58
+ }
59
+ }
60
+ return false;
61
+ }
62
+ /**
63
+ * Run a command, resolving stdout ('' on a non-zero exit with no output).
64
+ *
65
+ * @param cmd - Executable
66
+ * @param args - Arguments
67
+ * @param timeoutMs - Budget
68
+ * @returns stdout
69
+ */
70
+ function run(cmd, args, timeoutMs) {
71
+ return new Promise((resolve, reject) => {
72
+ execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 16 * 1024 * 1024 }, (error, stdout) => {
73
+ // lsof exits 1 when nothing matched: that is an answer, not a failure.
74
+ if (error && !(stdout && stdout.length > 0) && error.code !== 1) {
75
+ reject(error);
76
+ return;
77
+ }
78
+ resolve(stdout ?? '');
79
+ });
80
+ });
81
+ }
82
+ /**
83
+ * Parse `lsof -nP -iTCP:<port> -Fpn` output: the pid whose socket's LOCAL
84
+ * end is `clientPort` and remote end is `serverPort`.
85
+ *
86
+ * @param output - lsof field output (`p<pid>` / `n<a>:<p>-><b>:<q>` lines)
87
+ * @param clientPort - The client's ephemeral port
88
+ * @param serverPort - This backend's port
89
+ * @returns The client pid, or null
90
+ */
91
+ export function parseLsofPeer(output, clientPort, serverPort) {
92
+ let pid = null;
93
+ const re = new RegExp(`:${clientPort}->.*:${serverPort}$`);
94
+ for (const line of output.split('\n')) {
95
+ if (line.startsWith('p')) {
96
+ const n = Number(line.slice(1));
97
+ pid = Number.isInteger(n) && n > 0 ? n : null;
98
+ }
99
+ else if (line.startsWith('n') && pid !== null && re.test(line.slice(1).trim())) {
100
+ return pid;
101
+ }
102
+ }
103
+ return null;
104
+ }
105
+ /**
106
+ * Parse `ss -Htnp '( sport = :<clientPort> )'` output: the first pid listed
107
+ * for a connection to `serverPort`.
108
+ *
109
+ * @param output - ss output
110
+ * @param serverPort - This backend's port
111
+ * @returns The client pid, or null
112
+ */
113
+ export function parseSsPeer(output, serverPort) {
114
+ for (const line of output.split('\n')) {
115
+ const cols = line.trim().split(/\s+/);
116
+ if (cols.length < 5)
117
+ continue;
118
+ if (!cols.some((c, i) => i >= 3 && new RegExp(`:${serverPort}$`).test(c)))
119
+ continue;
120
+ const m = /pid=(\d+)/.exec(line);
121
+ if (m)
122
+ return Number(m[1]);
123
+ }
124
+ return null;
125
+ }
126
+ /**
127
+ * Find the client pid of a connection with the platform's tools.
128
+ *
129
+ * @param clientPort - Client's ephemeral port (the connection's remotePort)
130
+ * @param serverPort - This backend's port (the connection's localPort)
131
+ * @param timeoutMs - Budget
132
+ * @returns pid or null
133
+ */
134
+ async function defaultFindPeerPid(clientPort, serverPort, timeoutMs) {
135
+ if (process.platform === 'linux') {
136
+ let output = null;
137
+ try {
138
+ output = await run('ss', ['-Htnp', `( sport = :${clientPort} )`], timeoutMs);
139
+ }
140
+ catch {
141
+ output = null; // ss unusable: fall through to lsof
142
+ }
143
+ // ss ran: its answer stands, including "nothing" (falling through to a
144
+ // missing lsof would turn "not found" into "could not look").
145
+ if (output !== null)
146
+ return parseSsPeer(output, serverPort);
147
+ }
148
+ return parseLsofPeer(await run('lsof', ['-nP', `-iTCP:${clientPort}`, '-Fpn'], timeoutMs), clientPort, serverPort);
149
+ }
150
+ /**
151
+ * Parse `ps -Ao pid=,ppid=,tty=` output.
152
+ *
153
+ * @param output - ps output
154
+ * @returns pid → entry
155
+ */
156
+ export function parsePsTable(output) {
157
+ const table = new Map();
158
+ for (const line of output.split('\n')) {
159
+ const m = /^\s*(\d+)\s+(\d+)\s+(\S+)/.exec(line);
160
+ if (m)
161
+ table.set(Number(m[1]), { ppid: Number(m[2]), tty: m[3] ?? '?' });
162
+ }
163
+ return table;
164
+ }
165
+ /**
166
+ * Read another process's environment (same user) — Linux only, from
167
+ * `/proc/<pid>/environ`. macOS does not expose another process's
168
+ * environment (`ps -E` prints none, checked on macOS 15), so there the
169
+ * ancestry and terminal signals carry the check.
170
+ *
171
+ * @param pid - Process
172
+ * @returns The variables this check cares about, or null when unreadable
173
+ */
174
+ async function defaultReadEnv(pid) {
175
+ if (process.platform !== 'linux')
176
+ return null;
177
+ const wanted = ['CREWLY_SESSION_NAME', OWNER_AUTH_CONSTANTS.AGENT_BADGE_ENV];
178
+ const out = {};
179
+ try {
180
+ const raw = await fsp.readFile(`/proc/${pid}/environ`, 'utf8');
181
+ for (const pair of raw.split('\0')) {
182
+ const eq = pair.indexOf('=');
183
+ if (eq > 0 && wanted.includes(pair.slice(0, eq)))
184
+ out[pair.slice(0, eq)] = pair.slice(eq + 1);
185
+ }
186
+ return out;
187
+ }
188
+ catch {
189
+ return null;
190
+ }
191
+ }
192
+ /** Terminal names that mean "no controlling terminal". */
193
+ const NO_TTY = new Set(['?', '??', '-', '']);
194
+ /**
195
+ * Decide whether a process is an agent's, from a process-table snapshot.
196
+ *
197
+ * @param pid - The client process
198
+ * @param table - pid → {ppid, tty}
199
+ * @param selfPid - This backend's pid
200
+ * @param sessionPids - PTY shell pid → session name
201
+ * @returns `agent` with the signal that matched, or null
202
+ */
203
+ export function agentSignalFromTable(pid, table, selfPid, sessionPids) {
204
+ // 1. Ancestry: anything the backend spawned (directly or not) is an agent's.
205
+ let current = pid;
206
+ let session = null;
207
+ const seen = new Set();
208
+ for (let depth = 0; depth < OWNER_AUTH_CONSTANTS.PEER_MAX_ANCESTRY_DEPTH && current > 1 && !seen.has(current); depth++) {
209
+ seen.add(current);
210
+ session ??= sessionPids.get(current) ?? null;
211
+ const entry = table.get(current);
212
+ if (!entry)
213
+ break;
214
+ if (entry.ppid === selfPid)
215
+ return { signal: 'ancestry', session };
216
+ current = entry.ppid;
217
+ }
218
+ // 2. Terminal: a process orphaned out of an agent's shell keeps its PTY.
219
+ const tty = table.get(pid)?.tty ?? '';
220
+ if (!NO_TTY.has(tty)) {
221
+ for (const [shellPid, name] of sessionPids) {
222
+ if (table.get(shellPid)?.tty === tty)
223
+ return { signal: 'tty', session: name };
224
+ }
225
+ }
226
+ return null;
227
+ }
228
+ /** Thrown when a lookup takes longer than its budget. */
229
+ class LookupTimeoutError extends Error {
230
+ }
231
+ /**
232
+ * Reject with {@link LookupTimeoutError} if the work takes longer than `ms`.
233
+ *
234
+ * @param promise - Work
235
+ * @param ms - Budget
236
+ * @returns The work's result
237
+ */
238
+ function withTimeout(promise, ms) {
239
+ return new Promise((resolve, reject) => {
240
+ const timer = setTimeout(() => reject(new LookupTimeoutError('timed out')), ms);
241
+ promise.then((v) => {
242
+ clearTimeout(timer);
243
+ resolve(v);
244
+ }, (e) => {
245
+ clearTimeout(timer);
246
+ reject(e);
247
+ });
248
+ });
249
+ }
250
+ /**
251
+ * Whether a lookup error means "could not look" (fail open) rather than
252
+ * "looked and it is not there" (fail closed): the tool is missing, or it
253
+ * was killed for running past its budget.
254
+ *
255
+ * @param error - The error
256
+ * @returns True for a missing tool or a timeout
257
+ */
258
+ export function isLookupUnavailable(error) {
259
+ if (error instanceof LookupTimeoutError)
260
+ return true;
261
+ const e = error;
262
+ return Boolean(e && (e.code === 'ENOENT' || e.killed === true));
263
+ }
264
+ /**
265
+ * Classifies the client process of local connections, once per socket.
266
+ */
267
+ export class PeerProcessService {
268
+ cache = new WeakMap();
269
+ deps;
270
+ /**
271
+ * @param deps - Injectable collaborators
272
+ */
273
+ constructor(deps = {}) {
274
+ const timeoutMs = deps.timeoutMs ?? OWNER_AUTH_CONSTANTS.PEER_LOOKUP_TIMEOUT_MS;
275
+ this.deps = {
276
+ findPeerPid: deps.findPeerPid ?? ((c, s) => defaultFindPeerPid(c, s, timeoutMs)),
277
+ readTable: deps.readTable ?? (async () => parsePsTable(await run('ps', ['-Ao', 'pid=,ppid=,tty='], timeoutMs))),
278
+ readEnv: deps.readEnv ?? ((pid) => defaultReadEnv(pid)),
279
+ listSessionPids: deps.listSessionPids ?? (() => new Map()),
280
+ selfPid: deps.selfPid ?? process.pid,
281
+ isHostAddress: deps.isHostAddress ?? ((a) => isHostAddress(a)),
282
+ timeoutMs,
283
+ };
284
+ }
285
+ /**
286
+ * Classify the client of a connection. Cached per socket object (a
287
+ * keep-alive dashboard or CLI pays for one lookup).
288
+ *
289
+ * @param socket - The request's socket
290
+ * @returns The verdict
291
+ */
292
+ classify(socket) {
293
+ if (!socket)
294
+ return Promise.resolve({ kind: 'gone', reason: 'no socket' });
295
+ const hit = this.cache.get(socket);
296
+ if (hit)
297
+ return hit;
298
+ const verdict = this.lookup(socket);
299
+ this.cache.set(socket, verdict);
300
+ return verdict;
301
+ }
302
+ /**
303
+ * Uncached classification.
304
+ *
305
+ * @param socket - The request's socket
306
+ * @returns The verdict
307
+ */
308
+ async lookup(socket) {
309
+ const address = socket.remoteAddress ?? '';
310
+ // Node clears remoteAddress once the peer has closed the socket: a sender
311
+ // that already hung up is not "remote", it is gone (#1010 review).
312
+ if (!address)
313
+ return { kind: 'gone', reason: 'socket already closed' };
314
+ if (!this.deps.isHostAddress(address))
315
+ return { kind: 'remote' };
316
+ const clientPort = socket.remotePort;
317
+ const serverPort = socket.localPort;
318
+ if (!clientPort || !serverPort)
319
+ return { kind: 'gone', reason: 'no ports' };
320
+ const work = async () => {
321
+ const pid = await this.deps.findPeerPid(clientPort, serverPort);
322
+ if (!pid)
323
+ return { kind: 'gone', reason: 'client process not found' };
324
+ if (pid === this.deps.selfPid)
325
+ return { kind: 'self' };
326
+ const table = await this.deps.readTable();
327
+ // Exited between the two lookups: nothing left to vouch for it.
328
+ if (!table.has(pid))
329
+ return { kind: 'gone', reason: 'client process exited' };
330
+ const sessionPids = this.deps.listSessionPids();
331
+ const fromTable = agentSignalFromTable(pid, table, this.deps.selfPid, sessionPids);
332
+ if (fromTable)
333
+ return { kind: 'agent', pid, ...fromTable };
334
+ // 3. Environment: an agent shell's variables survive an orphaning fork.
335
+ const env = await this.deps.readEnv(pid);
336
+ if (env && (env['CREWLY_SESSION_NAME'] || env[OWNER_AUTH_CONSTANTS.AGENT_BADGE_ENV])) {
337
+ return { kind: 'agent', pid, signal: 'env', session: env['CREWLY_SESSION_NAME'] || null };
338
+ }
339
+ return { kind: 'not-agent', pid };
340
+ };
341
+ try {
342
+ return await withTimeout(work(), this.deps.timeoutMs);
343
+ }
344
+ catch (error) {
345
+ if (isLookupUnavailable(error)) {
346
+ return { kind: 'unknown', reason: error instanceof LookupTimeoutError ? 'lookup timed out' : 'lookup tool unavailable' };
347
+ }
348
+ return { kind: 'gone', reason: `lookup failed: ${error instanceof Error ? error.message : String(error)}` };
349
+ }
350
+ }
351
+ }
352
+ //# sourceMappingURL=peer-process.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-process.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/core/peer-process.service.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ import type { AskOwnerInput, DecisionKind, DecisionLanguage, DecisionOption, Dec
20
20
  import { formatWhen } from './decision-card.js';
21
21
  import { DecisionStore } from './decision-store.js';
22
22
  import type { TicketThreadStore } from './ticket-thread-store.js';
23
+ import type { ActivityEntryInput } from '../activity/activity-log.service.js';
23
24
  /** Thrown for requests the caller must fix (HTTP 4xx). */
24
25
  export declare class DecisionError extends Error {
25
26
  readonly status: number;
@@ -87,6 +88,8 @@ export interface DecisionServiceDeps {
87
88
  currentWorkItemId?: (session: string) => Promise<string | undefined>;
88
89
  /** Deliver a message to an agent (wakes a stopped one); false when it could not */
89
90
  deliverToAgent: (session: string, text: string) => Promise<boolean>;
91
+ /** Append to the activity log (crewly#881): who asked / answered what, and when. Absent = not logged. */
92
+ recordActivity?: (entry: ActivityEntryInput) => void;
90
93
  /**
91
94
  * Hold a message the agent could not take now on its persistent queue
92
95
  * (delivered when it is next idle or registers; a drop is reported).
@@ -425,6 +428,16 @@ export declare class DecisionService {
425
428
  * @param id - Decision id
426
429
  * @returns The expired decision, or null when it was not pending
427
430
  */
431
+ /**
432
+ * Append a line to the activity log (crewly#881). Never throws: the log
433
+ * never breaks the decision it describes.
434
+ *
435
+ * @param d - The decision as stored after the step
436
+ * @param action - `decision.asked` / `.resolved` / `.skipped` / `.defaulted` / `.expired`
437
+ * @param actor - Who did it
438
+ * @param note - The answer in words, when there is one
439
+ */
440
+ private audit;
428
441
  expire(id: string): Promise<OwnerDecision | null>;
429
442
  /**
430
443
  * Post (or re-try posting) the card of an open decision.
@@ -1 +1 @@
1
- {"version":3,"file":"decision.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decision.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision.service.ts"],"names":[],"mappings":"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"}
@@ -324,6 +324,7 @@ export class DecisionService {
324
324
  ...(workItemId ? { workItemId } : {}),
325
325
  status: 'open',
326
326
  });
327
+ this.audit(decision, 'decision.asked', callerSession ? { type: 'agent', id: callerSession } : { type: 'owner' });
327
328
  if (ticket && ask.ticketId && ask.project) {
328
329
  await this.deps
329
330
  .markTicketAsked({ ...ticket, asker, teamId }, ask.question, decision.id)
@@ -377,6 +378,7 @@ export class DecisionService {
377
378
  status: 'open',
378
379
  });
379
380
  this.logger.info('System decision asked', { decisionId: decision.id, kind: input.kind, key: input.system.key });
381
+ this.audit(decision, 'decision.asked', { type: 'system', id: 'crewly' });
380
382
  return this.postCard(decision);
381
383
  }
382
384
  /**
@@ -429,6 +431,7 @@ export class DecisionService {
429
431
  status: 'open',
430
432
  });
431
433
  this.logger.info('Owner decision asked by Crewly', { decisionId: decision.id, kind: ask.kind, asker: ask.asker });
434
+ this.audit(decision, 'decision.asked', { type: 'agent', id: ask.asker });
432
435
  // One open question card per ticket: a newer question replaces the ticket's older open ones (a
433
436
  // reply's own sibling questions, made together, stay).
434
437
  const requestId = ask.requestRef?.requestId;
@@ -458,6 +461,38 @@ export class DecisionService {
458
461
  * @param id - Decision id
459
462
  * @returns The expired decision, or null when it was not pending
460
463
  */
464
+ /**
465
+ * Append a line to the activity log (crewly#881). Never throws: the log
466
+ * never breaks the decision it describes.
467
+ *
468
+ * @param d - The decision as stored after the step
469
+ * @param action - `decision.asked` / `.resolved` / `.skipped` / `.defaulted` / `.expired`
470
+ * @param actor - Who did it
471
+ * @param note - The answer in words, when there is one
472
+ */
473
+ audit(d, action, actor, note) {
474
+ try {
475
+ this.deps.recordActivity?.({
476
+ actor,
477
+ action,
478
+ target: { type: 'decision', id: d.id, name: d.question.slice(0, DECISION_CONSTANTS.QUESTION_MAX_CHARS) },
479
+ ...(d.requestRef?.requestId ? { requestId: d.requestRef.requestId } : {}),
480
+ ...(d.workItemId ? { workItemId: d.workItemId } : {}),
481
+ ...(note ? { note } : {}),
482
+ after: {
483
+ status: d.status,
484
+ asker: d.asker,
485
+ ...(d.kind ? { kind: d.kind } : {}),
486
+ ...(d.teamId ? { teamId: d.teamId } : {}),
487
+ ...(d.chosenKey ? { chosenKey: d.chosenKey } : {}),
488
+ ...(d.answeredVia ? { answeredVia: d.answeredVia } : {}),
489
+ },
490
+ });
491
+ }
492
+ catch {
493
+ // see above
494
+ }
495
+ }
461
496
  async expire(id) {
462
497
  const expired = await this.deps.store.update(id, (cur) => PENDING_DECISION_STATUSES.has(cur.status) ? { status: 'expired', resolvedAt: this.now().toISOString(), remindAt: undefined } : null);
463
498
  if (!expired)
@@ -467,6 +502,7 @@ export class DecisionService {
467
502
  await this.logTicket(expired, `owner decision ${expired.id}: expired`, true);
468
503
  await this.notifyAsker(expired, null);
469
504
  this.logger.info('Owner decision expired', { decisionId: id });
505
+ this.audit(expired, 'decision.expired', { type: 'system', via: 'deadline' });
470
506
  return expired;
471
507
  }
472
508
  /**
@@ -1271,6 +1307,7 @@ export class DecisionService {
1271
1307
  await this.notifyAsker(resolved, `${this.answerNote(resolved)}${siblingsLine(siblings)}${handedOff ? ` ${handedOff}` : ''}`, batchNotes, { owner: true });
1272
1308
  this.closeWatchdog(resolved);
1273
1309
  this.logger.info('Owner decision resolved', { decisionId: resolved.id, via, chosen: resolved.chosenKey ?? 'text' });
1310
+ this.audit(resolved, 'decision.resolved', { type: 'owner', ...(user ? { id: user } : {}), via }, answer);
1274
1311
  return { handled: true, reason: 'resolved', decision: resolved };
1275
1312
  }
1276
1313
  /**
@@ -1291,6 +1328,7 @@ export class DecisionService {
1291
1328
  await this.notifyAsker(skipped, `${this.skipNote(skipped)}${siblingsLine(siblings)}`, batchNotes, { owner: true });
1292
1329
  this.closeWatchdog(skipped);
1293
1330
  this.logger.info('Owner decision skipped', { decisionId: skipped.id, via });
1331
+ this.audit(skipped, 'decision.skipped', { type: 'owner', ...(user ? { id: user } : {}), via });
1294
1332
  return { handled: true, reason: 'skipped', decision: skipped };
1295
1333
  }
1296
1334
  /** The note the asker receives when the owner skipped its question. */
@@ -1577,6 +1615,7 @@ export class DecisionService {
1577
1615
  const resolved = await this.deps.store.update(d.id, (cur) => cur.status === 'open' ? { status: 'defaulted', chosenKey: cur.defaultKey, answeredVia: 'deadline', resolvedAt: now.toISOString() } : null);
1578
1616
  if (!resolved)
1579
1617
  return false;
1618
+ this.audit(resolved, 'decision.defaulted', { type: 'system', via: 'deadline' });
1580
1619
  await this.refreshCard(resolved);
1581
1620
  await this.postInThread(resolved, line);
1582
1621
  if (resolved.ticket)