crewly 1.20.407 → 1.20.409
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.
- package/dist/backend/backend/src/constants.d.ts +34 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +34 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts +29 -0
- package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/activity/activity.controller.js +77 -0
- package/dist/backend/backend/src/controllers/activity/activity.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +3 -0
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-charter.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-charter.controller.js +7 -0
- package/dist/backend/backend/src/controllers/team/team-charter.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-model-tiers.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-model-tiers.controller.js +5 -1
- package/dist/backend/backend/src/controllers/team/team-model-tiers.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-pause.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-pause.controller.js +9 -0
- package/dist/backend/backend/src/controllers/team/team-pause.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +49 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js +2 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/activity/activity-log.service.d.ts +192 -0
- package/dist/backend/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/activity/activity-log.service.js +349 -0
- package/dist/backend/backend/src/services/activity/activity-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-approval.service.js +7 -0
- package/dist/backend/backend/src/services/browser/browser-approval.service.js.map +1 -1
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js +9 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +13 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +39 -0
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +2 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.js +26 -0
- package/dist/backend/backend/src/services/google/gmail-send-approval.service.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +34 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +34 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts +31 -0
- package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
- package/dist/cli/backend/src/middleware/agent-origin-correction.js +31 -0
- package/dist/cli/backend/src/middleware/agent-origin-correction.js.map +1 -0
- package/dist/cli/backend/src/middleware/api-token.middleware.d.ts +171 -0
- package/dist/cli/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
- package/dist/cli/backend/src/middleware/api-token.middleware.js +329 -0
- package/dist/cli/backend/src/middleware/api-token.middleware.js.map +1 -0
- package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts +290 -0
- package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
- package/dist/cli/backend/src/middleware/caller-identity.middleware.js +658 -0
- package/dist/cli/backend/src/middleware/caller-identity.middleware.js.map +1 -0
- package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts +60 -0
- package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts.map +1 -0
- package/dist/cli/backend/src/middleware/require-auth.middleware.js +127 -0
- package/dist/cli/backend/src/middleware/require-auth.middleware.js.map +1 -0
- package/dist/cli/backend/src/services/activity/activity-log.service.d.ts +192 -0
- package/dist/cli/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/activity/activity-log.service.js +349 -0
- package/dist/cli/backend/src/services/activity/activity-log.service.js.map +1 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js +9 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/peer-process.service.d.ts +168 -0
- package/dist/cli/backend/src/services/core/peer-process.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/peer-process.service.js +352 -0
- package/dist/cli/backend/src/services/core/peer-process.service.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +13 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +39 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- 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)
|