crewx-agent-cli 0.2.3 → 0.2.5

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 (53) hide show
  1. package/README.md +79 -4
  2. package/dist/adapters.d.ts +12 -0
  3. package/dist/adapters.d.ts.map +1 -1
  4. package/dist/adapters.js +112 -40
  5. package/dist/adapters.js.map +1 -1
  6. package/dist/api.d.ts +40 -17
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +187 -11
  9. package/dist/api.js.map +1 -1
  10. package/dist/bridge-watchdog.d.ts +10 -0
  11. package/dist/bridge-watchdog.d.ts.map +1 -0
  12. package/dist/bridge-watchdog.js +45 -0
  13. package/dist/bridge-watchdog.js.map +1 -0
  14. package/dist/config.d.ts +9 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +53 -2
  17. package/dist/config.js.map +1 -1
  18. package/dist/constants.d.ts +6 -1
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +11 -1
  21. package/dist/constants.js.map +1 -1
  22. package/dist/daemon.d.ts +34 -1
  23. package/dist/daemon.d.ts.map +1 -1
  24. package/dist/daemon.js +507 -102
  25. package/dist/daemon.js.map +1 -1
  26. package/dist/errors.d.ts +4 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +3 -1
  29. package/dist/errors.js.map +1 -1
  30. package/dist/index.d.ts +3 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +17 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/join.d.ts +1 -0
  35. package/dist/join.d.ts.map +1 -1
  36. package/dist/join.js +13 -0
  37. package/dist/join.js.map +1 -1
  38. package/dist/outbox.d.ts +22 -0
  39. package/dist/outbox.d.ts.map +1 -0
  40. package/dist/outbox.js +189 -0
  41. package/dist/outbox.js.map +1 -0
  42. package/dist/process-lock.d.ts +31 -0
  43. package/dist/process-lock.d.ts.map +1 -0
  44. package/dist/process-lock.js +272 -0
  45. package/dist/process-lock.js.map +1 -0
  46. package/dist/prompt.d.ts.map +1 -1
  47. package/dist/prompt.js +7 -0
  48. package/dist/prompt.js.map +1 -1
  49. package/dist/runtime-proxy.d.ts +18 -0
  50. package/dist/runtime-proxy.d.ts.map +1 -0
  51. package/dist/runtime-proxy.js +221 -0
  52. package/dist/runtime-proxy.js.map +1 -0
  53. package/package.json +6 -2
package/dist/outbox.js ADDED
@@ -0,0 +1,189 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { closeSync, constants as fsConstants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { basename, dirname, join } from 'node:path';
5
+ import { OutboundEventSchema, } from 'crewx-agent-protocol';
6
+ import { MAX_BUFFERED_EVENT_BYTES, MAX_BUFFERED_EVENTS, } from './constants.js';
7
+ import { CliError } from './errors.js';
8
+ function stateRoot(environment = process.env, platform = process.platform) {
9
+ const explicit = environment.CREWX_AGENT_STATE_HOME?.trim();
10
+ if (explicit)
11
+ return explicit;
12
+ if (platform === 'darwin') {
13
+ return join(homedir(), 'Library', 'Application Support', 'CrewX Agent');
14
+ }
15
+ return join(environment.XDG_STATE_HOME?.trim() || join(homedir(), '.local', 'state'), 'crewx-agent');
16
+ }
17
+ export function eventOutboxPath(scope, environment = process.env, platform = process.platform) {
18
+ const digest = createHash('sha256').update(scope).digest('hex');
19
+ return join(stateRoot(environment, platform), 'outbox', `${digest}.json`);
20
+ }
21
+ export function agentEventOutboxPath(serverUrl, agentToken, adapter, environment = process.env, platform = process.platform) {
22
+ const stableRunnerScope = environment.CREWX_RUNNER_SCOPE?.trim();
23
+ const agentIdentity = stableRunnerScope
24
+ ? `scope:${stableRunnerScope}`
25
+ : `token:${createHash('sha256').update(agentToken).digest('hex')}`;
26
+ return eventOutboxPath([serverUrl.replace(/\/+$/, ''), agentIdentity, adapter].join('\u0000'), environment, platform);
27
+ }
28
+ export function eventOutboxLockPath(outboxPath) {
29
+ return `${outboxPath}.lock`;
30
+ }
31
+ function ensureOwnerOnlyDirectory(path) {
32
+ if (!existsSync(path)) {
33
+ mkdirSync(path, { recursive: true, mode: 0o700 });
34
+ }
35
+ const info = lstatSync(path);
36
+ if (!info.isDirectory() || info.isSymbolicLink() || (info.mode & 0o077) !== 0) {
37
+ throw new CliError(`CrewX event outbox directory is unsafe: ${path}`, 1, {
38
+ code: 'event_outbox_unsafe',
39
+ });
40
+ }
41
+ if (typeof process.getuid === 'function' && info.uid !== process.getuid()) {
42
+ throw new CliError(`CrewX event outbox directory has the wrong owner: ${path}`, 1, {
43
+ code: 'event_outbox_unsafe',
44
+ });
45
+ }
46
+ }
47
+ function validateFile(path) {
48
+ const info = lstatSync(path);
49
+ if (!info.isFile() || info.isSymbolicLink() || (info.mode & 0o077) !== 0) {
50
+ throw new CliError(`CrewX event outbox is unsafe: ${path}`, 1, {
51
+ code: 'event_outbox_unsafe',
52
+ });
53
+ }
54
+ if (typeof process.getuid === 'function' && info.uid !== process.getuid()) {
55
+ throw new CliError(`CrewX event outbox has the wrong owner: ${path}`, 1, {
56
+ code: 'event_outbox_unsafe',
57
+ });
58
+ }
59
+ if (info.size > MAX_BUFFERED_EVENT_BYTES) {
60
+ throw new CliError('CrewX event outbox exceeds its recovery size limit.', 1, {
61
+ code: 'event_outbox_too_large',
62
+ });
63
+ }
64
+ }
65
+ export class DurableEventOutbox {
66
+ path;
67
+ events;
68
+ constructor(path) {
69
+ this.path = path;
70
+ this.events = this.read();
71
+ }
72
+ load() {
73
+ return structuredClone(this.events);
74
+ }
75
+ replace(events) {
76
+ if (events.length > MAX_BUFFERED_EVENTS) {
77
+ throw new CliError('CrewX final-event outbox is full. Restore connectivity before accepting more work.', 1, { code: 'event_outbox_capacity_exceeded' });
78
+ }
79
+ const durable = events.map((event) => OutboundEventSchema.parse(event));
80
+ for (const event of durable) {
81
+ if (!event.id) {
82
+ throw new CliError('CrewX cannot persist a final event without an idempotency ID.', 1, { code: 'event_outbox_missing_id' });
83
+ }
84
+ }
85
+ const snapshot = `${JSON.stringify({ version: 1, events: durable }, null, 2)}\n`;
86
+ if (Buffer.byteLength(snapshot) > MAX_BUFFERED_EVENT_BYTES) {
87
+ throw new CliError('CrewX final-event outbox is full. Restore connectivity before accepting more work.', 1, { code: 'event_outbox_capacity_exceeded' });
88
+ }
89
+ if (JSON.stringify(durable) === JSON.stringify(this.events))
90
+ return;
91
+ if (durable.length === 0) {
92
+ if (existsSync(this.path)) {
93
+ validateFile(this.path);
94
+ unlinkSync(this.path);
95
+ }
96
+ this.events = [];
97
+ return;
98
+ }
99
+ const directory = dirname(this.path);
100
+ ensureOwnerOnlyDirectory(directory);
101
+ const temporary = join(directory, `.${basename(this.path)}.${process.pid}.${Date.now()}.tmp`);
102
+ let handle;
103
+ try {
104
+ handle = openSync(temporary, fsConstants.O_WRONLY |
105
+ fsConstants.O_CREAT |
106
+ fsConstants.O_EXCL |
107
+ (fsConstants.O_NOFOLLOW ?? 0), 0o600);
108
+ writeFileSync(handle, snapshot, 'utf8');
109
+ fsyncSync(handle);
110
+ closeSync(handle);
111
+ handle = undefined;
112
+ renameSync(temporary, this.path);
113
+ const directoryHandle = openSync(directory, fsConstants.O_RDONLY);
114
+ try {
115
+ fsyncSync(directoryHandle);
116
+ }
117
+ finally {
118
+ closeSync(directoryHandle);
119
+ }
120
+ this.events = structuredClone(durable);
121
+ }
122
+ catch (error) {
123
+ if (handle !== undefined)
124
+ closeSync(handle);
125
+ if (existsSync(temporary))
126
+ unlinkSync(temporary);
127
+ throw error;
128
+ }
129
+ }
130
+ read() {
131
+ let handle;
132
+ try {
133
+ handle = openSync(this.path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0));
134
+ }
135
+ catch (error) {
136
+ if (error.code === 'ENOENT')
137
+ return [];
138
+ throw error;
139
+ }
140
+ let parsed;
141
+ try {
142
+ const info = fstatSync(handle);
143
+ if (!info.isFile() ||
144
+ (info.mode & 0o077) !== 0 ||
145
+ (typeof process.getuid === 'function' && info.uid !== process.getuid())) {
146
+ throw new CliError(`CrewX event outbox is unsafe: ${this.path}`, 1, {
147
+ code: 'event_outbox_unsafe',
148
+ });
149
+ }
150
+ if (info.size > MAX_BUFFERED_EVENT_BYTES) {
151
+ throw new CliError('CrewX event outbox exceeds its recovery size limit.', 1, { code: 'event_outbox_too_large' });
152
+ }
153
+ parsed = JSON.parse(readFileSync(handle, 'utf8'));
154
+ }
155
+ catch (error) {
156
+ if (error instanceof CliError)
157
+ throw error;
158
+ throw new CliError('CrewX event outbox contains invalid JSON.', 1, {
159
+ code: 'event_outbox_invalid',
160
+ cause: error,
161
+ });
162
+ }
163
+ finally {
164
+ closeSync(handle);
165
+ }
166
+ const record = typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
167
+ ? parsed
168
+ : undefined;
169
+ if (record?.version !== 1 ||
170
+ !Array.isArray(record.events) ||
171
+ record.events.length > MAX_BUFFERED_EVENTS) {
172
+ throw new CliError('CrewX event outbox has an unsupported shape.', 1, {
173
+ code: 'event_outbox_invalid',
174
+ });
175
+ }
176
+ const events = [];
177
+ for (const value of record.events) {
178
+ const result = OutboundEventSchema.safeParse(value);
179
+ if (!result.success || !result.data.id) {
180
+ throw new CliError('CrewX event outbox has an unsupported shape.', 1, {
181
+ code: 'event_outbox_invalid',
182
+ });
183
+ }
184
+ events.push(result.data);
185
+ }
186
+ return events;
187
+ }
188
+ }
189
+ //# sourceMappingURL=outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface AgentProcessLockLike {
2
+ acquire(): Promise<void>;
3
+ release(): Promise<void>;
4
+ }
5
+ /**
6
+ * A PID is recyclable. Bind the lock to the process start identity so a new
7
+ * process that happens to receive an old owner's PID cannot inherit the lock.
8
+ */
9
+ export declare function agentProcessFingerprint(pid: number, platform?: NodeJS.Platform): string | undefined;
10
+ /**
11
+ * Serializes every process that can replace one durable outbox. The lock is
12
+ * acquired before a server session is created and retained for the complete
13
+ * daemon lifetime, preventing cached outbox snapshots from losing outcomes.
14
+ */
15
+ export declare class AgentProcessLock implements AgentProcessLockLike {
16
+ readonly path: string;
17
+ private readonly fingerprint;
18
+ private readonly now;
19
+ private readonly recoveryStaleMs;
20
+ readonly recoveryPath: string;
21
+ private held;
22
+ constructor(path: string, fingerprint?: (pid: number) => string | undefined, now?: () => number, recoveryStaleMs?: number);
23
+ acquire(): Promise<void>;
24
+ release(): Promise<void>;
25
+ private tryCreate;
26
+ private tryAcquireRecovery;
27
+ private isCurrentOwner;
28
+ private alreadyRunning;
29
+ private readExisting;
30
+ }
31
+ //# sourceMappingURL=process-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-lock.d.ts","sourceRoot":"","sources":["../src/process-lock.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,oBAAoB;IACnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAeD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,kBAAmB,GAC1B,MAAM,GAAG,SAAS,CAiCpB;AA6CD;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,oBAAoB;IAKzD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAqC;gBAGtC,IAAI,EAAE,MAAM,EACJ,WAAW,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAC1B,EACb,GAAG,GAAE,MAAM,MAAiB,EAC5B,eAAe,SAAS;IAKrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkExB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBhB,SAAS;YAiCT,kBAAkB;IAiChC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;YAQR,YAAY;CAyC3B"}
@@ -0,0 +1,272 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { constants as fsConstants, readFileSync, } from 'node:fs';
4
+ import { lstat, link, mkdir, open, rmdir, unlink, } from 'node:fs/promises';
5
+ import { dirname, join } from 'node:path';
6
+ import { CliError } from './errors.js';
7
+ function processIsAlive(pid) {
8
+ try {
9
+ process.kill(pid, 0);
10
+ return true;
11
+ }
12
+ catch (error) {
13
+ return error.code === 'EPERM';
14
+ }
15
+ }
16
+ function hashProcessIdentity(identity) {
17
+ return createHash('sha256').update(identity).digest('hex');
18
+ }
19
+ /**
20
+ * A PID is recyclable. Bind the lock to the process start identity so a new
21
+ * process that happens to receive an old owner's PID cannot inherit the lock.
22
+ */
23
+ export function agentProcessFingerprint(pid, platform = process.platform) {
24
+ if (!processIsAlive(pid))
25
+ return undefined;
26
+ try {
27
+ if (platform === 'linux') {
28
+ const stat = readFileSync(`/proc/${String(pid)}/stat`, 'utf8');
29
+ const commandEnd = stat.lastIndexOf(')');
30
+ if (commandEnd < 0)
31
+ return undefined;
32
+ const fields = stat.slice(commandEnd + 1).trim().split(/\s+/);
33
+ const startTime = fields[19];
34
+ if (!startTime)
35
+ return undefined;
36
+ return hashProcessIdentity(`linux:${String(pid)}:${startTime}`);
37
+ }
38
+ if (platform === 'darwin') {
39
+ const identity = execFileSync('/bin/ps', ['-ww', '-p', String(pid), '-o', 'lstart=', '-o', 'command='], {
40
+ encoding: 'utf8',
41
+ timeout: 2_000,
42
+ maxBuffer: 64 * 1024,
43
+ stdio: ['ignore', 'pipe', 'ignore'],
44
+ }).trim();
45
+ if (!identity)
46
+ return undefined;
47
+ return hashProcessIdentity(`darwin:${String(pid)}:${identity}`);
48
+ }
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ return undefined;
54
+ }
55
+ function validRecord(value) {
56
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
57
+ return false;
58
+ }
59
+ const record = value;
60
+ return (Object.keys(record).length === 5 &&
61
+ record.version === 1 &&
62
+ typeof record.pid === 'number' &&
63
+ Number.isSafeInteger(record.pid) &&
64
+ record.pid > 0 &&
65
+ typeof record.nonce === 'string' &&
66
+ /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(record.nonce) &&
67
+ typeof record.started_at === 'string' &&
68
+ Number.isFinite(Date.parse(record.started_at)) &&
69
+ typeof record.process_fingerprint === 'string' &&
70
+ /^[a-f0-9]{64}$/.test(record.process_fingerprint));
71
+ }
72
+ async function ensureOwnerOnlyDirectory(path) {
73
+ await mkdir(path, { recursive: true, mode: 0o700 });
74
+ const info = await lstat(path);
75
+ if (!info.isDirectory() ||
76
+ info.isSymbolicLink() ||
77
+ (info.mode & 0o077) !== 0 ||
78
+ (typeof process.getuid === 'function' && info.uid !== process.getuid())) {
79
+ throw new CliError(`CrewX agent process lock directory is unsafe: ${path}`, 1, { code: 'agent_process_lock_unsafe' });
80
+ }
81
+ }
82
+ function delay(milliseconds) {
83
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
84
+ }
85
+ /**
86
+ * Serializes every process that can replace one durable outbox. The lock is
87
+ * acquired before a server session is created and retained for the complete
88
+ * daemon lifetime, preventing cached outbox snapshots from losing outcomes.
89
+ */
90
+ export class AgentProcessLock {
91
+ path;
92
+ fingerprint;
93
+ now;
94
+ recoveryStaleMs;
95
+ recoveryPath;
96
+ held;
97
+ constructor(path, fingerprint = (pid) => agentProcessFingerprint(pid), now = Date.now, recoveryStaleMs = 30_000) {
98
+ this.path = path;
99
+ this.fingerprint = fingerprint;
100
+ this.now = now;
101
+ this.recoveryStaleMs = recoveryStaleMs;
102
+ this.recoveryPath = `${path}.recovery`;
103
+ }
104
+ async acquire() {
105
+ if (this.held)
106
+ return;
107
+ await ensureOwnerOnlyDirectory(dirname(this.path));
108
+ const ownFingerprint = this.fingerprint(process.pid);
109
+ if (!ownFingerprint) {
110
+ throw new CliError('CrewX could not verify this agent runner process identity.', 1, { code: 'agent_process_identity_unavailable' });
111
+ }
112
+ const record = {
113
+ version: 1,
114
+ pid: process.pid,
115
+ nonce: randomUUID(),
116
+ started_at: new Date(this.now()).toISOString(),
117
+ process_fingerprint: ownFingerprint,
118
+ };
119
+ for (let attempt = 0; attempt < 100; attempt += 1) {
120
+ if (await this.tryCreate(record))
121
+ return;
122
+ let existing;
123
+ try {
124
+ existing = await this.readExisting();
125
+ }
126
+ catch (error) {
127
+ if (error.code === 'ENOENT')
128
+ continue;
129
+ throw error;
130
+ }
131
+ if (this.isCurrentOwner(existing)) {
132
+ throw this.alreadyRunning(existing.pid);
133
+ }
134
+ const ownsRecovery = await this.tryAcquireRecovery();
135
+ if (!ownsRecovery) {
136
+ await delay(10);
137
+ continue;
138
+ }
139
+ try {
140
+ // Re-read under the recovery mutex. Another contender may have
141
+ // replaced the stale owner before this process acquired the mutex.
142
+ try {
143
+ existing = await this.readExisting();
144
+ if (this.isCurrentOwner(existing)) {
145
+ throw this.alreadyRunning(existing.pid);
146
+ }
147
+ await unlink(this.path);
148
+ }
149
+ catch (error) {
150
+ if (error.code !== 'ENOENT')
151
+ throw error;
152
+ }
153
+ if (await this.tryCreate(record))
154
+ return;
155
+ }
156
+ finally {
157
+ await rmdir(this.recoveryPath).catch((error) => {
158
+ if (error.code !== 'ENOENT')
159
+ throw error;
160
+ });
161
+ }
162
+ }
163
+ throw new CliError('CrewX could not acquire the agent process lock because another runner is starting.', 1, { code: 'agent_process_lock_contended' });
164
+ }
165
+ async release() {
166
+ const held = this.held;
167
+ this.held = undefined;
168
+ if (!held)
169
+ return;
170
+ let existing;
171
+ try {
172
+ existing = await this.readExisting();
173
+ }
174
+ catch (error) {
175
+ if (error.code === 'ENOENT')
176
+ return;
177
+ throw error;
178
+ }
179
+ if (existing.pid !== held.pid || existing.nonce !== held.nonce)
180
+ return;
181
+ await unlink(this.path).catch((error) => {
182
+ if (error.code !== 'ENOENT')
183
+ throw error;
184
+ });
185
+ }
186
+ async tryCreate(record) {
187
+ const temporary = join(dirname(this.path), `.${record.nonce}.agent.lock.tmp`);
188
+ try {
189
+ const handle = await open(temporary, fsConstants.O_WRONLY |
190
+ fsConstants.O_CREAT |
191
+ fsConstants.O_EXCL |
192
+ (fsConstants.O_NOFOLLOW ?? 0), 0o600);
193
+ try {
194
+ await handle.writeFile(`${JSON.stringify(record)}\n`, 'utf8');
195
+ await handle.sync();
196
+ }
197
+ finally {
198
+ await handle.close();
199
+ }
200
+ await link(temporary, this.path);
201
+ this.held = record;
202
+ return true;
203
+ }
204
+ catch (error) {
205
+ if (error.code === 'EEXIST')
206
+ return false;
207
+ throw error;
208
+ }
209
+ finally {
210
+ await unlink(temporary).catch((error) => {
211
+ if (error.code !== 'ENOENT')
212
+ throw error;
213
+ });
214
+ }
215
+ }
216
+ async tryAcquireRecovery() {
217
+ try {
218
+ await mkdir(this.recoveryPath, { mode: 0o700 });
219
+ return true;
220
+ }
221
+ catch (error) {
222
+ if (error.code !== 'EEXIST')
223
+ throw error;
224
+ }
225
+ const info = await lstat(this.recoveryPath);
226
+ if (!info.isDirectory() ||
227
+ info.isSymbolicLink() ||
228
+ (info.mode & 0o077) !== 0 ||
229
+ (typeof process.getuid === 'function' && info.uid !== process.getuid())) {
230
+ throw new CliError(`CrewX agent recovery lock is unsafe: ${this.recoveryPath}`, 1, { code: 'agent_process_lock_unsafe' });
231
+ }
232
+ if (this.now() - info.mtimeMs <= this.recoveryStaleMs)
233
+ return false;
234
+ // There is no portable compare-and-delete primitive for directories.
235
+ // Removing stale recovery residue can delete a fresh contender's mutex
236
+ // between lstat(2) and rmdir(2), so fail closed in this rare crash window.
237
+ throw new CliError(`CrewX found agent lock recovery residue at ${this.recoveryPath}. Confirm no runner for this profile is starting, remove that directory, then start it again.`, 1, { code: 'stale_agent_process_recovery_lock' });
238
+ }
239
+ isCurrentOwner(record) {
240
+ return this.fingerprint(record.pid) === record.process_fingerprint;
241
+ }
242
+ alreadyRunning(pid) {
243
+ return new CliError(`This CrewX agent profile is already running as PID ${String(pid)}. Stop the existing runner before starting another copy.`, 1, { code: 'agent_already_running' });
244
+ }
245
+ async readExisting() {
246
+ const handle = await open(this.path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0));
247
+ try {
248
+ const info = await handle.stat();
249
+ if (!info.isFile() ||
250
+ (info.mode & 0o077) !== 0 ||
251
+ info.size > 4 * 1024 ||
252
+ (typeof process.getuid === 'function' && info.uid !== process.getuid())) {
253
+ throw new CliError(`CrewX agent process lock is unsafe: ${this.path}`, 1, { code: 'agent_process_lock_unsafe' });
254
+ }
255
+ let parsed;
256
+ try {
257
+ parsed = JSON.parse(await handle.readFile('utf8'));
258
+ }
259
+ catch (error) {
260
+ throw new CliError(`CrewX agent process lock contains invalid JSON: ${this.path}`, 1, { code: 'agent_process_lock_invalid', cause: error });
261
+ }
262
+ if (!validRecord(parsed)) {
263
+ throw new CliError(`CrewX agent process lock has an unsupported shape: ${this.path}`, 1, { code: 'agent_process_lock_invalid' });
264
+ }
265
+ return parsed;
266
+ }
267
+ finally {
268
+ await handle.close();
269
+ }
270
+ }
271
+ }
272
+ //# sourceMappingURL=process-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-lock.js","sourceRoot":"","sources":["../src/process-lock.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoBrE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,GAClB,UAAU,GAAG,SAAS,CAyCxB;AAUD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,CAuGR"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoBrE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,GAClB,UAAU,GAAG,SAAS,CAiDxB;AAUD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,CAuGR"}
package/dist/prompt.js CHANGED
@@ -36,16 +36,23 @@ export function assignmentFromEvent(event) {
36
36
  if (!id || !prompt)
37
37
  return undefined;
38
38
  const title = text(source.title) ?? text(payload.title);
39
+ const claimToken = text(event.claim_token) ??
40
+ text(source.claim_token) ??
41
+ text(payload.claim_token);
39
42
  const payloadContext = record(payload.context);
40
43
  const sourceContext = record(source.context);
41
44
  const context = { ...(payloadContext ?? {}), ...(sourceContext ?? {}) };
42
45
  return {
43
46
  id,
44
47
  prompt,
48
+ ...(claimToken ? { claim_token: claimToken } : {}),
45
49
  ...(title ? { title } : {}),
46
50
  ...(Object.keys(context).length > 0 ? { context } : {}),
47
51
  metadata: {
48
52
  event_type: event.type,
53
+ ...(event.cursor !== undefined
54
+ ? { assignment_event_cursor: event.cursor }
55
+ : {}),
49
56
  ...(text(source.priority) ? { priority: text(source.priority) } : {}),
50
57
  ...(text(source.due_at) ? { due_at: text(source.due_at) } : {}),
51
58
  },
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ type Fetch = typeof globalThis.fetch;
2
+ export interface RuntimeCredentialProxy {
3
+ environment: NodeJS.ProcessEnv;
4
+ close: () => Promise<void>;
5
+ }
6
+ export declare function startRuntimeCredentialProxy(options: {
7
+ upstreamUrl: string;
8
+ upstreamToken: string;
9
+ cliPath: string;
10
+ assignmentId?: string | undefined;
11
+ claimToken?: string | undefined;
12
+ sessionId?: string | undefined;
13
+ permissionPreset?: 'read_only' | 'standard' | 'full_access' | undefined;
14
+ chatOnly?: boolean | undefined;
15
+ fetch?: Fetch | undefined;
16
+ }): Promise<RuntimeCredentialProxy>;
17
+ export {};
18
+ //# sourceMappingURL=runtime-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-proxy.d.ts","sourceRoot":"","sources":["../src/runtime-proxy.ts"],"names":[],"mappings":"AASA,KAAK,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAqFrC,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoJlC"}