@viewportai/daemon 0.25.12 → 0.26.0

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 (123) hide show
  1. package/dist/cli/check-command.d.ts +2 -0
  2. package/dist/cli/check-command.d.ts.map +1 -0
  3. package/dist/cli/check-command.js +168 -0
  4. package/dist/cli/check-command.js.map +1 -0
  5. package/dist/cli/commands.d.ts +2 -0
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +2 -0
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/diagnostic-command.d.ts +2 -0
  10. package/dist/cli/diagnostic-command.d.ts.map +1 -0
  11. package/dist/cli/diagnostic-command.js +102 -0
  12. package/dist/cli/diagnostic-command.js.map +1 -0
  13. package/dist/cli/lifecycle-commands.d.ts.map +1 -1
  14. package/dist/cli/lifecycle-commands.js +2 -1
  15. package/dist/cli/lifecycle-commands.js.map +1 -1
  16. package/dist/cli/lifecycle-pair-command.d.ts.map +1 -1
  17. package/dist/cli/lifecycle-pair-command.js +31 -0
  18. package/dist/cli/lifecycle-pair-command.js.map +1 -1
  19. package/dist/cli/policy-schema-validator.d.ts +221 -0
  20. package/dist/cli/policy-schema-validator.d.ts.map +1 -0
  21. package/dist/cli/policy-schema-validator.js +280 -0
  22. package/dist/cli/policy-schema-validator.js.map +1 -0
  23. package/dist/cli/support-packet.d.ts +7 -0
  24. package/dist/cli/support-packet.d.ts.map +1 -0
  25. package/dist/cli/support-packet.js +19 -0
  26. package/dist/cli/support-packet.js.map +1 -0
  27. package/dist/cli/worker-command.d.ts.map +1 -1
  28. package/dist/cli/worker-command.js +367 -14
  29. package/dist/cli/worker-command.js.map +1 -1
  30. package/dist/cli/worker-process-lock.d.ts +27 -0
  31. package/dist/cli/worker-process-lock.d.ts.map +1 -0
  32. package/dist/cli/worker-process-lock.js +150 -0
  33. package/dist/cli/worker-process-lock.js.map +1 -0
  34. package/dist/cli/worker-profile.d.ts +20 -0
  35. package/dist/cli/worker-profile.d.ts.map +1 -1
  36. package/dist/cli/worker-profile.js +38 -0
  37. package/dist/cli/worker-profile.js.map +1 -1
  38. package/dist/cli/worker-runtime.d.ts +52 -2
  39. package/dist/cli/worker-runtime.d.ts.map +1 -1
  40. package/dist/cli/worker-runtime.js +319 -102
  41. package/dist/cli/worker-runtime.js.map +1 -1
  42. package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -1
  43. package/dist/cli/workflow-managed-worker-format.js +3 -1
  44. package/dist/cli/workflow-managed-worker-format.js.map +1 -1
  45. package/dist/cli/workflow-managed-worker.d.ts.map +1 -1
  46. package/dist/cli/workflow-managed-worker.js +157 -20
  47. package/dist/cli/workflow-managed-worker.js.map +1 -1
  48. package/dist/core/logger.d.ts.map +1 -1
  49. package/dist/core/logger.js +6 -0
  50. package/dist/core/logger.js.map +1 -1
  51. package/dist/core/output.d.ts.map +1 -1
  52. package/dist/core/output.js +5 -4
  53. package/dist/core/output.js.map +1 -1
  54. package/dist/core/redaction.d.ts +4 -0
  55. package/dist/core/redaction.d.ts.map +1 -0
  56. package/dist/core/redaction.js +76 -0
  57. package/dist/core/redaction.js.map +1 -0
  58. package/dist/index.d.ts +2 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/workflows/action-provider-adapters.js +52 -4
  63. package/dist/workflows/action-provider-adapters.js.map +1 -1
  64. package/dist/workflows/checkout-node.d.ts +1 -0
  65. package/dist/workflows/checkout-node.d.ts.map +1 -1
  66. package/dist/workflows/checkout-node.js +9 -4
  67. package/dist/workflows/checkout-node.js.map +1 -1
  68. package/dist/workflows/event-types.d.ts +1 -1
  69. package/dist/workflows/event-types.d.ts.map +1 -1
  70. package/dist/workflows/git-publish-node.d.ts +20 -0
  71. package/dist/workflows/git-publish-node.d.ts.map +1 -1
  72. package/dist/workflows/git-publish-node.js +87 -3
  73. package/dist/workflows/git-publish-node.js.map +1 -1
  74. package/dist/workflows/node-executor.d.ts +6 -0
  75. package/dist/workflows/node-executor.d.ts.map +1 -1
  76. package/dist/workflows/node-executor.js +53 -2
  77. package/dist/workflows/node-executor.js.map +1 -1
  78. package/dist/workflows/node-registry.d.ts +2 -2
  79. package/dist/workflows/node-registry.d.ts.map +1 -1
  80. package/dist/workflows/node-registry.js +129 -5
  81. package/dist/workflows/node-registry.js.map +1 -1
  82. package/dist/workflows/parser.d.ts.map +1 -1
  83. package/dist/workflows/parser.js +17 -1
  84. package/dist/workflows/parser.js.map +1 -1
  85. package/dist/workflows/platform-command-applier.d.ts +4 -0
  86. package/dist/workflows/platform-command-applier.d.ts.map +1 -1
  87. package/dist/workflows/platform-command-applier.js +152 -1
  88. package/dist/workflows/platform-command-applier.js.map +1 -1
  89. package/dist/workflows/platform-runtime-command.d.ts +2 -0
  90. package/dist/workflows/platform-runtime-command.d.ts.map +1 -1
  91. package/dist/workflows/platform-runtime-command.js +2 -0
  92. package/dist/workflows/platform-runtime-command.js.map +1 -1
  93. package/dist/workflows/platform-sync-payload.js +18 -4
  94. package/dist/workflows/platform-sync-payload.js.map +1 -1
  95. package/dist/workflows/platform-sync.js +7 -2
  96. package/dist/workflows/platform-sync.js.map +1 -1
  97. package/dist/workflows/policy-enforcement.d.ts +43 -0
  98. package/dist/workflows/policy-enforcement.d.ts.map +1 -0
  99. package/dist/workflows/policy-enforcement.js +0 -0
  100. package/dist/workflows/policy-enforcement.js.map +1 -0
  101. package/dist/workflows/run-types.d.ts +1 -0
  102. package/dist/workflows/run-types.d.ts.map +1 -1
  103. package/dist/workflows/runner.d.ts +4 -1
  104. package/dist/workflows/runner.d.ts.map +1 -1
  105. package/dist/workflows/runner.js +46 -12
  106. package/dist/workflows/runner.js.map +1 -1
  107. package/dist/workflows/types.d.ts +33 -0
  108. package/dist/workflows/types.d.ts.map +1 -1
  109. package/dist/workflows/workflow-authority-contract.d.ts +1 -1
  110. package/dist/workflows/workflow-authority-contract.d.ts.map +1 -1
  111. package/dist/workflows/workflow-authority-contract.js +23 -0
  112. package/dist/workflows/workflow-authority-contract.js.map +1 -1
  113. package/dist/workflows/workflow-production-schema.d.ts +13 -0
  114. package/dist/workflows/workflow-production-schema.d.ts.map +1 -1
  115. package/dist/workflows/workflow-production-schema.js +26 -0
  116. package/dist/workflows/workflow-production-schema.js.map +1 -1
  117. package/dist/workflows/workflow-production-types.d.ts +6 -0
  118. package/dist/workflows/workflow-production-types.d.ts.map +1 -1
  119. package/dist/workflows/workflow-schema.d.ts +50 -0
  120. package/dist/workflows/workflow-schema.d.ts.map +1 -1
  121. package/dist/workflows/workflow-schema.js +41 -0
  122. package/dist/workflows/workflow-schema.js.map +1 -1
  123. package/package.json +6 -3
@@ -1,8 +1,13 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
1
3
  import { ConfigManager } from '../core/config.js';
2
- import { getArgs, getFlag } from './args.js';
4
+ import { activeProfileInfo, readProfileRegistry } from '../core/profiles.js';
5
+ import { getArgs, getFlag, hasFlag } from './args.js';
3
6
  import { isJsonMode, printJson } from './command-shared.js';
7
+ import { inspectWorkerProcessLock, stopWorkerProcessLock, } from './worker-process-lock.js';
4
8
  import { runStandaloneWorker } from './worker-runtime.js';
5
- import { defaultWorkerWorkspaceRoot, normalizeWorkerLifecycle, normalizeWorkerTransport, resetWorkerProfile, } from './worker-profile.js';
9
+ import { defaultWorkerWorkspaceRoot, normalizeWorkerLifecycle, normalizeWorkerTransport, readWorkerPairingRecord, resetWorkerProfile, workerProfileIntegrity, } from './worker-profile.js';
10
+ import { SUPPORT_PACKET_DOCS_URL, supportPacketMetadata } from './support-packet.js';
6
11
  const DEFAULT_WORKER_LEASE_SECONDS = 1_800;
7
12
  export async function worker() {
8
13
  const args = getArgs();
@@ -19,6 +24,9 @@ export async function worker() {
19
24
  case 'reset':
20
25
  await workerReset();
21
26
  return;
27
+ case 'stop':
28
+ await workerStop();
29
+ return;
22
30
  case 'start':
23
31
  await workerStart();
24
32
  return;
@@ -38,14 +46,15 @@ function workerHelpText() {
38
46
  '',
39
47
  'Commands:',
40
48
  ' start --mode persistent --transport polling|relay|inbound [--lease <seconds>]',
41
- ' run-once --lease <lease-token> --transport polling|relay|inbound',
42
- ' doctor [--json]',
43
- ' reset [--json]',
49
+ ' run-once (--lease <lease-token>|--bootstrap <file>) --transport polling|relay|inbound',
50
+ ' stop [--json]',
51
+ ' doctor [--json] [--registration-profile <path>]',
52
+ ' reset [--json] [--force]',
44
53
  ' help',
45
54
  '',
46
55
  'Pairing:',
47
- ' vpd pair --worker --transport=polling',
48
- ' vpd pair --worker --server <url> --transport=polling',
56
+ ' vpd pair --worker --transport=polling --workdir <path>',
57
+ ' vpd pair --worker --server <url> --transport=polling --workdir <path>',
49
58
  '',
50
59
  'Defaults:',
51
60
  ` workspace root: ${defaultWorkerWorkspaceRoot()}`,
@@ -55,9 +64,40 @@ function workerHelpText() {
55
64
  }
56
65
  async function workerDoctor() {
57
66
  const asJson = isJsonMode();
67
+ const vpdProfile = currentVpdProfilePayload();
68
+ const managed = await managedExecutorDoctorProfile(vpdProfile);
69
+ if (managed.present) {
70
+ if (asJson) {
71
+ printJson(managed.payload);
72
+ return;
73
+ }
74
+ console.log('Viewport worker doctor');
75
+ console.log(`VPD profile:${formatVpdProfile(managed.payload.vpdProfile)}`);
76
+ console.log('Runtime: managed executor');
77
+ console.log(`Transport: ${managed.payload.transport ?? 'not configured'}`);
78
+ console.log(`Server: ${managed.payload.serverUrl ?? 'not configured'}`);
79
+ console.log(`Workspace: ${managed.payload.workspaceId ?? 'not configured'}`);
80
+ console.log(`Executor: ${managed.payload.executorId ?? 'not configured'}`);
81
+ console.log(`Work root: ${managed.payload.workspaceRoot ?? 'not configured'}`);
82
+ console.log(`Credential:${managed.payload.credentialSource ? ` ${managed.payload.credentialSource}` : ' missing'}`);
83
+ console.log(`Lock: ${workerLockLabel(managed.payload.processLock)}`);
84
+ console.log(`Support: ${SUPPORT_PACKET_DOCS_URL}`);
85
+ if (managed.payload.missing.length > 0) {
86
+ console.log(`Missing: ${managed.payload.missing.join(', ')}`);
87
+ console.log('Fix: pass --server, --workspace, --executor, and --credential-file.');
88
+ return;
89
+ }
90
+ if (managed.payload.warnings.length > 0) {
91
+ console.log(`Warnings: ${managed.payload.warnings.join(', ')}`);
92
+ }
93
+ console.log('Status: configured');
94
+ return;
95
+ }
58
96
  const manager = new ConfigManager();
59
97
  await manager.load();
60
98
  const workerConfig = manager.getDaemonConfig()?.worker;
99
+ const pairing = await readWorkerPairingRecord(workerConfig?.stateDir);
100
+ const integrity = workerProfileIntegrity(workerConfig, pairing);
61
101
  const missing = [];
62
102
  if (!workerConfig?.serverUrl)
63
103
  missing.push('server URL');
@@ -66,26 +106,37 @@ async function workerDoctor() {
66
106
  if (!workerConfig?.identityKeyPath || !workerConfig.publicKeyFingerprint) {
67
107
  missing.push('worker identity');
68
108
  }
109
+ const lockOptions = await currentWorkerLockOptions();
69
110
  const payload = {
70
111
  command: 'worker doctor',
71
- ok: missing.length === 0,
112
+ ok: missing.length === 0 && integrity.ok,
113
+ vpdProfile,
72
114
  lifecycle: workerConfig?.lifecycle ?? null,
73
115
  transport: workerConfig?.transport ?? null,
74
116
  serverUrl: workerConfig?.serverUrl ?? null,
117
+ workspaceId: workerConfig?.workspaceId ?? null,
75
118
  workspaceRoot: workerConfig?.workspaceRoot ?? null,
76
119
  publicKeyFingerprint: workerConfig?.publicKeyFingerprint ?? null,
77
120
  capabilities: workerConfig?.capabilities ?? null,
121
+ processLock: lockStatusForOptions(lockOptions),
122
+ pairingIntegrity: integrity,
78
123
  missing,
124
+ warnings: await profileSelectionWarnings(vpdProfile),
125
+ supportPacket: supportPacketMetadata(),
79
126
  };
80
127
  if (asJson) {
81
128
  printJson(payload);
82
129
  return;
83
130
  }
84
131
  console.log('Viewport worker doctor');
132
+ console.log(`VPD profile:${formatVpdProfile(payload.vpdProfile)}`);
85
133
  console.log(`Mode: ${payload.lifecycle ?? 'not configured'}`);
86
134
  console.log(`Transport: ${payload.transport ?? 'not configured'}`);
87
135
  console.log(`Server: ${payload.serverUrl ?? 'not configured'}`);
136
+ console.log(`Workspace: ${payload.workspaceId ?? 'not paired'}`);
88
137
  console.log(`Work root: ${payload.workspaceRoot ?? 'not configured'}`);
138
+ console.log(`Lock: ${workerLockLabel(payload.processLock)}`);
139
+ console.log(`Support: ${SUPPORT_PACKET_DOCS_URL}`);
89
140
  const agents = payload.capabilities?.agents;
90
141
  const agentCount = Array.isArray(agents)
91
142
  ? agents.length
@@ -93,18 +144,268 @@ async function workerDoctor() {
93
144
  ? Object.keys(agents).length
94
145
  : 0;
95
146
  console.log(`Agents: ${agentCount > 0 ? `${agentCount} detected` : 'not recorded'}`);
147
+ if (payload.warnings.length > 0) {
148
+ console.log(`Warnings: ${payload.warnings.join(', ')}`);
149
+ }
96
150
  if (missing.length > 0) {
97
151
  console.log(`Missing: ${missing.join(', ')}`);
98
- console.log('Fix: run `vpd pair --worker --transport=polling`.');
152
+ console.log('Fix: run `vpd pair --worker --transport=polling --workdir <path>`.');
153
+ return;
154
+ }
155
+ if (!integrity.ok) {
156
+ console.log(`Mismatch: ${integrity.mismatches.join(', ')}`);
157
+ console.log('Fix: run `vpd worker reset`, then pair this worker again.');
99
158
  return;
100
159
  }
101
160
  console.log('Status: configured');
102
161
  }
162
+ async function managedExecutorDoctorProfile(vpdProfile) {
163
+ const profilePath = getFlag('registration-profile') ?? process.env['VIEWPORT_MANAGED_EXECUTOR_PROFILE_FILE'];
164
+ const profile = profilePath ? readManagedExecutorProfile(profilePath) : {};
165
+ const hasManagedInput = Boolean(profilePath ||
166
+ getFlag('server') ||
167
+ getFlag('workspace') ||
168
+ getFlag('resource') ||
169
+ getFlag('executor') ||
170
+ getFlag('credential') ||
171
+ getFlag('credential-file') ||
172
+ process.env['VIEWPORT_SERVER_URL'] ||
173
+ process.env['VPD_SERVER_URL'] ||
174
+ process.env['VIEWPORT_WORKSPACE_ID'] ||
175
+ process.env['VIEWPORT_MANAGED_EXECUTOR_ID'] ||
176
+ process.env['VIEWPORT_MANAGED_EXECUTOR_TOKEN'] ||
177
+ process.env['VPD_MANAGED_EXECUTOR_TOKEN'] ||
178
+ process.env['VIEWPORT_MANAGED_EXECUTOR_TOKEN_FILE'] ||
179
+ process.env['VPD_MANAGED_EXECUTOR_TOKEN_FILE']);
180
+ const credentialFile = getFlag('credential-file') ??
181
+ process.env['VIEWPORT_MANAGED_EXECUTOR_TOKEN_FILE'] ??
182
+ process.env['VPD_MANAGED_EXECUTOR_TOKEN_FILE'] ??
183
+ stringValue(profile['credentialFile']) ??
184
+ stringValue(profile['credential_file']);
185
+ const inlineCredential = getFlag('credential') ??
186
+ process.env['VIEWPORT_MANAGED_EXECUTOR_TOKEN'] ??
187
+ process.env['VPD_MANAGED_EXECUTOR_TOKEN'] ??
188
+ stringValue(profile['credential']);
189
+ let credentialSource = inlineCredential
190
+ ? profile['credential'] === inlineCredential
191
+ ? 'profile'
192
+ : 'inline'
193
+ : null;
194
+ const missing = [];
195
+ const warnings = [];
196
+ if (credentialFile) {
197
+ const readable = credentialFileIsReadable(credentialFile);
198
+ if (readable) {
199
+ credentialSource = 'file';
200
+ }
201
+ else {
202
+ missing.push('managed executor credential file');
203
+ }
204
+ }
205
+ if (!credentialFile && !inlineCredential) {
206
+ missing.push('managed executor credential');
207
+ }
208
+ const serverUrl = getFlag('server') ??
209
+ process.env['VIEWPORT_SERVER_URL'] ??
210
+ process.env['VPD_SERVER_URL'] ??
211
+ stringValue(profile['serverUrl']) ??
212
+ stringValue(profile['server_url']);
213
+ const workspaceId = getFlag('workspace') ??
214
+ getFlag('resource') ??
215
+ process.env['VIEWPORT_WORKSPACE_ID'] ??
216
+ stringValue(profile['workspaceId']) ??
217
+ stringValue(profile['workspace_id']);
218
+ const executorId = getFlag('executor') ??
219
+ process.env['VIEWPORT_MANAGED_EXECUTOR_ID'] ??
220
+ stringValue(profile['executorId']) ??
221
+ stringValue(profile['executor_id']) ??
222
+ stringValue(profile['managedExecutorId']) ??
223
+ stringValue(profile['managed_executor_id']);
224
+ const workspaceRoot = getFlag('workdir') ??
225
+ stringValue(profile['workspaceRoot']) ??
226
+ stringValue(profile['workspace_root']) ??
227
+ stringValue(profile['workdir']);
228
+ if (!serverUrl)
229
+ missing.push('server URL');
230
+ if (!workspaceId)
231
+ missing.push('workspace id');
232
+ if (!executorId)
233
+ missing.push('managed executor id');
234
+ if (!workspaceRoot)
235
+ warnings.push('workspace root not pinned; pass --workdir for predictable checkouts');
236
+ warnings.push(...(await profileSelectionWarnings(vpdProfile)));
237
+ const lockOptions = managedWorkerLockOptions({
238
+ serverUrl,
239
+ workspaceId,
240
+ executorId,
241
+ runnerPool: getFlag('runner-pool') ??
242
+ process.env['VIEWPORT_MANAGED_RUNNER_POOL'] ??
243
+ process.env['VIEWPORT_MANAGED_EXECUTOR_RUNNER_POOL'] ??
244
+ stringValue(profile['runnerPool']) ??
245
+ stringValue(profile['runner_pool']),
246
+ transport: getFlag('access-mode') ??
247
+ process.env['VIEWPORT_MANAGED_EXECUTOR_ACCESS_MODE'] ??
248
+ stringValue(profile['accessMode']) ??
249
+ stringValue(profile['access_mode']) ??
250
+ 'polling',
251
+ });
252
+ return {
253
+ present: hasManagedInput,
254
+ payload: {
255
+ command: 'worker doctor',
256
+ ok: missing.length === 0,
257
+ runtimeProfile: 'managed-executor',
258
+ vpdProfile,
259
+ lifecycle: 'persistent',
260
+ transport: lockOptions?.accessMode ?? 'polling',
261
+ serverUrl: serverUrl ?? null,
262
+ serverId: getFlag('server-id') ??
263
+ process.env['VIEWPORT_SERVER_ID'] ??
264
+ process.env['VPD_SERVER_ID'] ??
265
+ stringValue(profile['serverId']) ??
266
+ stringValue(profile['server_id']) ??
267
+ stringValue(profile['control_plane_id']) ??
268
+ null,
269
+ workspaceId: workspaceId ?? null,
270
+ executorId: executorId ?? null,
271
+ workspaceRoot: workspaceRoot ? path.resolve(workspaceRoot) : null,
272
+ runnerPool: lockOptions?.runnerProfile ?? null,
273
+ credentialSource,
274
+ capabilities: recordValue(profile['capabilities']),
275
+ processLock: lockStatusForOptions(lockOptions),
276
+ missing,
277
+ warnings,
278
+ supportPacket: supportPacketMetadata(),
279
+ },
280
+ };
281
+ }
282
+ function managedWorkerLockOptions(input) {
283
+ if (!input.serverUrl || !input.workspaceId || !input.executorId) {
284
+ return null;
285
+ }
286
+ return {
287
+ server: input.serverUrl,
288
+ workspaceId: input.workspaceId,
289
+ executorId: input.executorId,
290
+ runnerProfile: input.runnerPool,
291
+ accessMode: input.transport ?? 'polling',
292
+ };
293
+ }
294
+ function currentVpdProfilePayload() {
295
+ const info = activeProfileInfo();
296
+ return {
297
+ name: info.name,
298
+ source: info.source,
299
+ home: info.home,
300
+ baseHome: info.baseHome,
301
+ };
302
+ }
303
+ function formatVpdProfile(profile) {
304
+ return ` ${profile.name ?? 'default'} (${profile.source})`;
305
+ }
306
+ async function profileSelectionWarnings(profile) {
307
+ if (profile.source !== 'none') {
308
+ return [];
309
+ }
310
+ const registry = await readProfileRegistry(profile.baseHome);
311
+ const profileNames = Object.keys(registry.profiles);
312
+ if (profileNames.length <= 1) {
313
+ return [];
314
+ }
315
+ return [
316
+ `multiple profiles exist (${profileNames.sort().join(', ')}); select one with --profile before pairing or starting a worker`,
317
+ ];
318
+ }
319
+ function lockStatusForOptions(options) {
320
+ if (!options)
321
+ return null;
322
+ return sanitizeWorkerLockStatus(inspectWorkerProcessLock(options));
323
+ }
324
+ function sanitizeWorkerLockStatus(status) {
325
+ return {
326
+ active: status.active,
327
+ stale: Boolean(status.stale),
328
+ pid: status.pid ?? null,
329
+ startedAt: status.startedAt ?? null,
330
+ };
331
+ }
332
+ function workerLockLabel(status) {
333
+ if (!status)
334
+ return 'not available';
335
+ if (!status.pid)
336
+ return 'not active';
337
+ if (status.active)
338
+ return `active pid ${status.pid}`;
339
+ if (status.stale)
340
+ return `stale pid ${status.pid}`;
341
+ return 'not active';
342
+ }
343
+ function readManagedExecutorProfile(profilePath) {
344
+ const resolved = resolveProfilePath(profilePath);
345
+ const parsed = JSON.parse(fs.readFileSync(resolved, 'utf8'));
346
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
347
+ throw new Error(`Managed executor registration profile is not a JSON object: ${resolved}`);
348
+ }
349
+ const record = parsed;
350
+ const daemon = recordValue(record['daemon']);
351
+ const worker = recordValue(daemon?.['worker']);
352
+ return { ...record, ...(worker ?? {}) };
353
+ }
354
+ function credentialFileIsReadable(filePath) {
355
+ try {
356
+ return fs.readFileSync(resolveProfilePath(filePath), 'utf8').trim().length > 0;
357
+ }
358
+ catch {
359
+ return false;
360
+ }
361
+ }
362
+ function resolveProfilePath(profilePath) {
363
+ if (profilePath === '~')
364
+ return process.env['HOME'] ?? profilePath;
365
+ if (profilePath.startsWith('~/')) {
366
+ const home = process.env['HOME'];
367
+ return home ? path.join(home, profilePath.slice(2)) : path.resolve(profilePath);
368
+ }
369
+ return path.resolve(profilePath);
370
+ }
371
+ function stringValue(value) {
372
+ return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
373
+ }
374
+ function recordValue(value) {
375
+ if (!value || typeof value !== 'object' || Array.isArray(value))
376
+ return null;
377
+ return value;
378
+ }
103
379
  async function workerReset() {
104
380
  const asJson = isJsonMode();
381
+ const forced = hasFlag('force');
382
+ const lockStatus = lockStatusForOptions(await currentWorkerLockOptions());
383
+ if (lockStatus?.active && !forced) {
384
+ if (asJson) {
385
+ printJson({
386
+ command: 'worker reset',
387
+ ok: false,
388
+ reset: false,
389
+ reason: 'active_worker_lock',
390
+ processLock: lockStatus,
391
+ hint: 'Run `vpd worker stop` first, or rerun with `--force` if the worker is already stopped.',
392
+ });
393
+ return;
394
+ }
395
+ console.log(`A persistent worker appears active for this profile (pid ${lockStatus.pid}).`);
396
+ console.log('Run `vpd worker stop` first, or rerun with `--force` if the worker is already stopped.');
397
+ return;
398
+ }
105
399
  const result = await resetWorkerProfile();
106
400
  if (asJson) {
107
- printJson({ command: 'worker reset', ok: true, ...result });
401
+ printJson({
402
+ command: 'worker reset',
403
+ ok: true,
404
+ reset: result.hadWorkerProfile,
405
+ forced,
406
+ processLock: lockStatus,
407
+ ...result,
408
+ });
108
409
  return;
109
410
  }
110
411
  if (!result.hadWorkerProfile) {
@@ -112,7 +413,38 @@ async function workerReset() {
112
413
  return;
113
414
  }
114
415
  console.log('Worker pairing reset.');
115
- console.log('Run `vpd pair --worker --transport=polling` to pair this worker again.');
416
+ console.log('Run `vpd pair --worker --transport=polling --workdir <path>` to pair this worker again.');
417
+ }
418
+ async function workerStop() {
419
+ const asJson = isJsonMode();
420
+ const options = await currentWorkerLockOptions();
421
+ if (!options) {
422
+ if (asJson) {
423
+ printJson({
424
+ command: 'worker stop',
425
+ ok: false,
426
+ stopped: false,
427
+ reason: 'worker_not_configured',
428
+ });
429
+ return;
430
+ }
431
+ console.log('No worker profile is configured. Run `vpd pair --worker --transport=polling --workdir <path>` first.');
432
+ return;
433
+ }
434
+ const result = stopWorkerProcessLock(options);
435
+ if (asJson) {
436
+ printJson({ command: 'worker stop', ok: true, ...result });
437
+ return;
438
+ }
439
+ if (result.stopped) {
440
+ console.log(`Sent ${result.signal ?? 'SIGTERM'} to worker pid ${result.pid}.`);
441
+ return;
442
+ }
443
+ if (result.stale) {
444
+ console.log(`Removed stale worker lock for pid ${result.pid}.`);
445
+ return;
446
+ }
447
+ console.log('No persistent worker lock is active for this profile.');
116
448
  }
117
449
  async function workerStart() {
118
450
  const asJson = isJsonMode();
@@ -145,14 +477,16 @@ function positiveIntFlag(value) {
145
477
  async function workerRunOnce() {
146
478
  const asJson = isJsonMode();
147
479
  const lease = getFlag('lease');
148
- if (!lease || lease.trim() === '') {
149
- throw new Error('Usage: vpd worker run-once --lease <lease-token> [--transport polling|relay|inbound]');
480
+ const bootstrap = getFlag('bootstrap');
481
+ if ((!lease || lease.trim() === '') && (!bootstrap || bootstrap.trim() === '')) {
482
+ throw new Error('Usage: vpd worker run-once (--lease <lease-token>|--bootstrap <file>) [--transport polling|relay|inbound]');
150
483
  }
151
484
  const result = await runStandaloneWorker({
152
485
  lifecycle: 'ephemeral',
153
486
  transport: normalizeWorkerTransport(getFlag('transport')),
154
487
  once: true,
155
- leaseToken: lease.trim(),
488
+ leaseToken: lease?.trim(),
489
+ bootstrapPath: bootstrap?.trim(),
156
490
  });
157
491
  if (asJson) {
158
492
  printJson({ command: 'worker run-once', ok: true, ...result });
@@ -160,4 +494,23 @@ async function workerRunOnce() {
160
494
  }
161
495
  console.log(`Worker run-once complete. Cleanup receipts: ${result.cleanup}.`);
162
496
  }
497
+ async function currentWorkerLockOptions() {
498
+ const manager = new ConfigManager();
499
+ await manager.load();
500
+ const workerConfig = manager.getDaemonConfig()?.worker;
501
+ if (!workerConfig?.serverUrl || !workerConfig.publicKeyFingerprint) {
502
+ return null;
503
+ }
504
+ return {
505
+ server: workerConfig.serverUrl,
506
+ workspaceId: workerConfig.workspaceId ?? workerConfig.publicKeyFingerprint,
507
+ executorId: workerConfig.managedExecutorId ?? workerConfig.publicKeyFingerprint,
508
+ runnerProfile: runnerPoolFromCapabilities(workerConfig.capabilities ?? {}),
509
+ accessMode: workerConfig.transport ?? 'polling',
510
+ };
511
+ }
512
+ function runnerPoolFromCapabilities(capabilities) {
513
+ const value = capabilities['runner_pool'] ?? capabilities['runnerPool'];
514
+ return typeof value === 'string' && value.trim() !== '' ? value : undefined;
515
+ }
163
516
  //# sourceMappingURL=worker-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-command.js","sourceRoot":"","sources":["../../src/cli/worker-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-command.js","sourceRoot":"","sources":["../../src/cli/worker-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface WorkerLockOptions {
2
+ server: string;
3
+ workspaceId: string;
4
+ executorId: string;
5
+ runnerProfile?: string;
6
+ accessMode: string;
7
+ }
8
+ export interface WorkerProcessLock {
9
+ filePath: string;
10
+ release: () => void;
11
+ }
12
+ export interface WorkerProcessLockStatus {
13
+ filePath: string;
14
+ active: boolean;
15
+ pid?: number;
16
+ startedAt?: string;
17
+ stale?: boolean;
18
+ }
19
+ export interface StopWorkerProcessLockResult extends WorkerProcessLockStatus {
20
+ stopped: boolean;
21
+ signal?: NodeJS.Signals;
22
+ }
23
+ export declare function acquireWorkerProcessLock(options: WorkerLockOptions): WorkerProcessLock;
24
+ export declare function inspectWorkerProcessLock(options: WorkerLockOptions): WorkerProcessLockStatus;
25
+ export declare function stopWorkerProcessLock(options: WorkerLockOptions, signal?: NodeJS.Signals): StopWorkerProcessLockResult;
26
+ export declare function workerProcessLockPath(options: WorkerLockOptions): string;
27
+ //# sourceMappingURL=worker-process-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-process-lock.d.ts","sourceRoot":"","sources":["../../src/cli/worker-process-lock.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;CACzB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAqEtF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,uBAAuB,CAiB5F;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,MAAM,CAAC,OAAmB,GACjC,2BAA2B,CAW7B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAIxE"}