@evalops/maestro 0.10.43 → 0.10.45

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/cli.js CHANGED
@@ -166271,6 +166271,28 @@ function buildHostedRunnerRetentionPolicy() {
166271
166271
  }
166272
166272
  };
166273
166273
  }
166274
+ function buildHostedRunnerRuntimeContinuity(input) {
166275
+ return {
166276
+ protocol_version: HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION,
166277
+ handoff: "drain_restore",
166278
+ source_runner_session_id: input.hostedRunner.runnerSessionId,
166279
+ ...input.hostedRunner.ownerInstanceId ? { source_owner_instance_id: input.hostedRunner.ownerInstanceId } : {},
166280
+ source_process_id: process.pid,
166281
+ source_runtime_lease: {
166282
+ protocol_version: HOSTED_RUNNER_LEASE_PROTOCOL_VERSION,
166283
+ state: input.leaseSnapshot.state,
166284
+ generation: input.leaseSnapshot.generation,
166285
+ ...input.leaseSnapshot.maestroSessionId ? { maestro_session_id: input.leaseSnapshot.maestroSessionId } : {},
166286
+ updated_at: input.leaseSnapshot.updatedAt
166287
+ },
166288
+ restore_environment_key: "MAESTRO_REMOTE_RUNNER_RESTORE_MANIFEST",
166289
+ restore_manifest_path: input.manifestPath,
166290
+ evidence_refs: [
166291
+ `remote-runner://sessions/${input.hostedRunner.runnerSessionId}/drain#snapshot`,
166292
+ `maestro://headless/sessions/${input.maestroSessionId}#cursor:${input.runtime.cursor ?? 0}`
166293
+ ]
166294
+ };
166295
+ }
166274
166296
  function buildHostedRunnerPlatformEvidence(input) {
166275
166297
  const edges = input.workContinuity.codex_subagent_edges ?? [];
166276
166298
  return {
@@ -166302,6 +166324,18 @@ function buildHostedRunnerPlatformEvidence(input) {
166302
166324
  codex_subagent_thread_ids: input.workContinuity.codex_subagent_thread_ids,
166303
166325
  ...edges.length > 0 ? { codex_subagent_edges: edges } : {}
166304
166326
  },
166327
+ runtime_continuity: {
166328
+ protocol_version: input.runtimeContinuity.protocol_version,
166329
+ handoff: input.runtimeContinuity.handoff,
166330
+ ...input.runtimeContinuity.source_owner_instance_id ? {
166331
+ source_owner_instance_id: input.runtimeContinuity.source_owner_instance_id
166332
+ } : {},
166333
+ source_process_id: input.runtimeContinuity.source_process_id,
166334
+ ...input.runtimeContinuity.source_runtime_lease ? {
166335
+ source_runtime_lease_generation: input.runtimeContinuity.source_runtime_lease.generation
166336
+ } : {},
166337
+ restore_manifest_path: input.runtimeContinuity.restore_manifest_path
166338
+ },
166305
166339
  retention: {
166306
166340
  policy_version: input.retentionPolicy.policy_version,
166307
166341
  control_plane_metadata_visibility: input.retentionPolicy.visibility.control_plane_metadata,
@@ -166439,7 +166473,7 @@ async function drainHostedRunner(input, options) {
166439
166473
  return null;
166440
166474
  }
166441
166475
  const requestedAtDate = options.now?.() ?? /* @__PURE__ */ new Date();
166442
- markHostedRunnerLeaseDraining(hostedRunner, requestedAtDate);
166476
+ const leaseSnapshot = markHostedRunnerLeaseDraining(hostedRunner, requestedAtDate);
166443
166477
  const requestedAt = requestedAtDate.toISOString();
166444
166478
  const workspaceRoot = await resolveWorkspaceRoot2(hostedRunner);
166445
166479
  const snapshotRoot = resolve54(workspaceRoot, hostedRunner.snapshotRoot ?? ".maestro/runner-snapshots");
@@ -166495,6 +166529,13 @@ async function drainHostedRunner(input, options) {
166495
166529
  const snapshot = runtimeSnapshot ?? buildHostedRunnerSnapshot(maestroSessionId, workspaceRoot, runtime);
166496
166530
  const workContinuity = collectHostedRunnerWorkContinuity(snapshot);
166497
166531
  const retentionPolicy = buildHostedRunnerRetentionPolicy();
166532
+ const runtimeContinuity = buildHostedRunnerRuntimeContinuity({
166533
+ hostedRunner,
166534
+ maestroSessionId,
166535
+ manifestPath: snapshotPath,
166536
+ runtime,
166537
+ leaseSnapshot
166538
+ });
166498
166539
  const platformEvidence = buildHostedRunnerPlatformEvidence({
166499
166540
  hostedRunner,
166500
166541
  status,
@@ -166502,6 +166543,7 @@ async function drainHostedRunner(input, options) {
166502
166543
  createdAt: requestedAt,
166503
166544
  manifestPath: snapshotPath,
166504
166545
  runtime,
166546
+ runtimeContinuity,
166505
166547
  workContinuity,
166506
166548
  retentionPolicy,
166507
166549
  reason: input.reason,
@@ -166522,6 +166564,7 @@ async function drainHostedRunner(input, options) {
166522
166564
  mode: "local_path_contract",
166523
166565
  paths: exportPaths
166524
166566
  },
166567
+ runtime_continuity: runtimeContinuity,
166525
166568
  work_continuity: workContinuity,
166526
166569
  platform_evidence: platformEvidence,
166527
166570
  snapshot,
@@ -166553,6 +166596,7 @@ async function drainHostedRunner(input, options) {
166553
166596
  createdAt: requestedAt,
166554
166597
  manifestPath: snapshotPath,
166555
166598
  runtime,
166599
+ runtimeContinuity,
166556
166600
  workContinuity,
166557
166601
  retentionPolicy,
166558
166602
  reason: input.reason,
@@ -166661,6 +166705,7 @@ var HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION = "evalops.remote-runner.snapshot-ma
166661
166705
  var HOSTED_RUNNER_RETENTION_POLICY_VERSION = "evalops.remote-runner.retention.v1";
166662
166706
  var HOSTED_RUNNER_WORK_CONTINUITY_VERSION = "evalops.remote-runner.work-continuity.v1";
166663
166707
  var HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION = "evalops.remote-runner.platform-evidence.v1";
166708
+ var HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION = "evalops.remote-runner.runtime-continuity.v1";
166664
166709
  var HostedRunnerRuntimeDrainError;
166665
166710
  var init_hosted_runner_drain = __esm2(() => {
166666
166711
  init_headless_protocol();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/contracts",
3
- "version": "0.10.43",
3
+ "version": "0.10.45",
4
4
  "description": "Shared Maestro contracts for frontend/backend integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/tui",
3
- "version": "0.10.43",
3
+ "version": "0.10.45",
4
4
  "description": "Terminal UI library with differential rendering for Maestro",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -2,12 +2,14 @@ import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import { CODEX_SUBAGENT_WORK_GRAPH_SCHEMA, type HeadlessCodexSubagentContinuityEdge } from "../../cli/headless-protocol.js";
3
3
  import type { HostedRunnerContext, WebServerContext } from "../app-context.js";
4
4
  import type { HeadlessRuntimeSnapshot } from "../headless-runtime-service.js";
5
+ import { HOSTED_RUNNER_LEASE_PROTOCOL_VERSION, type HostedRunnerLeaseSnapshot } from "../hosted-runner-lease.js";
5
6
  export declare const HOSTED_RUNNER_DRAIN_PATH = "/.well-known/evalops/remote-runner/drain";
6
7
  export declare const HOSTED_RUNNER_DRAIN_PROTOCOL_VERSION = "evalops.remote-runner.drain.v1";
7
8
  export declare const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION = "evalops.remote-runner.snapshot-manifest.v1";
8
9
  export declare const HOSTED_RUNNER_RETENTION_POLICY_VERSION = "evalops.remote-runner.retention.v1";
9
10
  export declare const HOSTED_RUNNER_WORK_CONTINUITY_VERSION = "evalops.remote-runner.work-continuity.v1";
10
11
  export declare const HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION = "evalops.remote-runner.platform-evidence.v1";
12
+ export declare const HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION = "evalops.remote-runner.runtime-continuity.v1";
11
13
  export declare enum HostedRunnerDrainStatusValue {
12
14
  Drained = "drained",
13
15
  Interrupted = "interrupted"
@@ -94,6 +96,7 @@ export interface HostedRunnerSnapshotManifest {
94
96
  mode: HostedRunnerWorkspaceExportMode;
95
97
  paths: HostedRunnerWorkspaceExportPath[];
96
98
  };
99
+ runtime_continuity: HostedRunnerRuntimeContinuity;
97
100
  work_continuity: HostedRunnerWorkContinuity;
98
101
  platform_evidence: HostedRunnerPlatformEvidence;
99
102
  snapshot: HeadlessRuntimeSnapshot;
@@ -104,6 +107,23 @@ export interface HostedRunnerSnapshotManifest {
104
107
  dirty?: boolean;
105
108
  };
106
109
  }
110
+ export interface HostedRunnerRuntimeContinuity {
111
+ protocol_version: typeof HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION;
112
+ handoff: "drain_restore";
113
+ source_runner_session_id: string;
114
+ source_owner_instance_id?: string;
115
+ source_process_id: number;
116
+ source_runtime_lease?: {
117
+ protocol_version: typeof HOSTED_RUNNER_LEASE_PROTOCOL_VERSION;
118
+ state: HostedRunnerLeaseSnapshot["state"];
119
+ generation: number;
120
+ maestro_session_id?: string;
121
+ updated_at: string;
122
+ };
123
+ restore_environment_key: "MAESTRO_REMOTE_RUNNER_RESTORE_MANIFEST";
124
+ restore_manifest_path: string;
125
+ evidence_refs: string[];
126
+ }
107
127
  export interface HostedRunnerWorkContinuity {
108
128
  protocol_version: typeof HOSTED_RUNNER_WORK_CONTINUITY_VERSION;
109
129
  codex_subagent_schema_version: typeof CODEX_SUBAGENT_WORK_GRAPH_SCHEMA;
@@ -144,6 +164,14 @@ export interface HostedRunnerPlatformEvidence {
144
164
  codex_subagent_thread_ids: string[];
145
165
  codex_subagent_edges?: HeadlessCodexSubagentContinuityEdge[];
146
166
  };
167
+ runtime_continuity: {
168
+ protocol_version: typeof HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION;
169
+ handoff: "drain_restore";
170
+ source_owner_instance_id?: string;
171
+ source_process_id: number;
172
+ source_runtime_lease_generation?: number;
173
+ restore_manifest_path: string;
174
+ };
147
175
  retention: {
148
176
  policy_version: typeof HOSTED_RUNNER_RETENTION_POLICY_VERSION;
149
177
  control_plane_metadata_visibility: "operator";
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-runner-drain.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/hosted-runner-drain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-runner-drain.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/hosted-runner-drain.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EAEN,gCAAgC,EAEhC,KAAK,mCAAmC,EAQxC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACN,oCAAoC,EACpC,KAAK,yBAAyB,EAE9B,MAAM,2BAA2B,CAAC;AAKnC,eAAO,MAAM,wBAAwB,6CACM,CAAC;AAE5C,eAAO,MAAM,oCAAoC,mCAChB,CAAC;AAElC,eAAO,MAAM,uCAAuC,+CACP,CAAC;AAE9C,eAAO,MAAM,sCAAsC,uCACd,CAAC;AAEtC,eAAO,MAAM,qCAAqC,6CACP,CAAC;AAE5C,eAAO,MAAM,uCAAuC,+CACP,CAAC;AAE9C,eAAO,MAAM,wCAAwC,gDACP,CAAC;AAE/C,oBAAY,4BAA4B;IACvC,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC3B;AAED,oBAAY,mCAAmC;IAC9C,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;CACnB;AAED,oBAAY,wCAAwC;IACnD,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,KAAK,UAAU;CACf;AAED,oBAAY,oCAAoC;IAC/C,iBAAiB,wBAAwB;CACzC;AAED,oBAAY,4BAA4B;IACvC,iBAAiB,uBAAuB;IACxC,eAAe,qBAAqB;CACpC;AAED,oBAAY,iCAAiC;IAC5C,iBAAiB,uBAAuB;IACxC,gBAAgB,uBAAuB;CACvC;AAED,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AACnE,MAAM,MAAM,8BAA8B,GACzC,mCAAmC,CAAC;AACrC,MAAM,MAAM,mCAAmC,GAC9C,wCAAwC,CAAC;AAC1C,MAAM,MAAM,+BAA+B,GAC1C,oCAAoC,CAAC;AACtC,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,GAAG,MAAM,CAAC;AAC5E,MAAM,MAAM,4BAA4B,GACrC,iCAAiC,GACjC,MAAM,CAAC;AAEV,MAAM,WAAW,2BAA2B;IAC3C,cAAc,EAAE,OAAO,sCAAsC,CAAC;IAC9D,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE;QACX,sBAAsB,EAAE,UAAU,CAAC;QACnC,gBAAgB,EAAE,QAAQ,CAAC;QAC3B,gBAAgB,EAAE,UAAU,CAAC;QAC7B,YAAY,EAAE,UAAU,CAAC;KACzB,CAAC;IACF,SAAS,EAAE;QACV,oCAAoC,EAAE,KAAK,CAC1C,kBAAkB,GAAG,cAAc,CACnC,CAAC;QACF,mBAAmB,EAAE,KAAK,CACvB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,iBAAiB,CACnB,CAAC;KACF,CAAC;CACF;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,mBAAmB,CAAC,EAAE,CACrB,KAAK,EAAE,oCAAoC,KACvC,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAwBD,MAAM,WAAW,+BAA+B;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,mCAAmC,CAAC;CAC1C;AAED,MAAM,WAAW,4BAA4B;IAC5C,gBAAgB,EAAE,OAAO,uCAAuC,CAAC;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACR,YAAY,EAAE,8BAA8B,CAAC;QAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gBAAgB,EAAE;QACjB,IAAI,EAAE,+BAA+B,CAAC;QACtC,KAAK,EAAE,+BAA+B,EAAE,CAAC;KACzC,CAAC;IACF,kBAAkB,EAAE,6BAA6B,CAAC;IAClD,eAAe,EAAE,0BAA0B,CAAC;IAC5C,iBAAiB,EAAE,4BAA4B,CAAC;IAChD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,gBAAgB,EAAE,2BAA2B,CAAC;IAC9C,GAAG,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACF;AAED,MAAM,WAAW,6BAA6B;IAC7C,gBAAgB,EAAE,OAAO,wCAAwC,CAAC;IAClE,OAAO,EAAE,eAAe,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE;QACtB,gBAAgB,EAAE,OAAO,oCAAoC,CAAC;QAC9D,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,uBAAuB,EAAE,wCAAwC,CAAC;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IAC1C,gBAAgB,EAAE,OAAO,qCAAqC,CAAC;IAC/D,6BAA6B,EAAE,OAAO,gCAAgC,CAAC;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,oBAAoB,CAAC,EAAE,mCAAmC,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC5C,gBAAgB,EAAE,OAAO,uCAAuC,CAAC;IACjE,UAAU,EAAE,uCAAuC,CAAC;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,uBAAuB,CAAC;IAChC,oBAAoB,EAAE,8BAA8B,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,OAAO,uCAAuC,CAAC;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE;QAChB,gBAAgB,EAAE,OAAO,qCAAqC,CAAC;QAC/D,6BAA6B,EAAE,OAAO,gCAAgC,CAAC;QACvE,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,8BAA8B,EAAE,MAAM,CAAC;QACvC,8BAA8B,EAAE,MAAM,CAAC;QACvC,2BAA2B,EAAE,MAAM,CAAC;QACpC,yBAAyB,EAAE,MAAM,CAAC;QAClC,4BAA4B,EAAE,MAAM,EAAE,CAAC;QACvC,4BAA4B,EAAE,MAAM,EAAE,CAAC;QACvC,yBAAyB,EAAE,MAAM,EAAE,CAAC;QACpC,oBAAoB,CAAC,EAAE,mCAAmC,EAAE,CAAC;KAC7D,CAAC;IACF,kBAAkB,EAAE;QACnB,gBAAgB,EAAE,OAAO,wCAAwC,CAAC;QAClE,OAAO,EAAE,eAAe,CAAC;QACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,+BAA+B,CAAC,EAAE,MAAM,CAAC;QACzC,qBAAqB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,SAAS,EAAE;QACV,cAAc,EAAE,OAAO,sCAAsC,CAAC;QAC9D,iCAAiC,EAAE,UAAU,CAAC;QAC9C,2BAA2B,EAAE,UAAU,CAAC;QACxC,8CAA8C,EAAE,KAAK,CACpD,kBAAkB,GAAG,cAAc,CACnC,CAAC;KACF,CAAC;IACF,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oCAAoC;IACpD,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,8BAA8B,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,4BAA4B,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,uBAAuB,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,4BAA4B,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACxC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,YAAY,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gCAAgC,KACtC,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,UAAU,+BAA+B;IACxC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,sBAAsB,EAAE,IAAI,CAC3B,gBAAgB,CAAC,wBAAwB,CAAC,EAC1C,uBAAuB,CACvB,CAAC;CACF;AAED,MAAM,WAAW,mCAAmC;IACnD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,UAAU,gCAAgC;IACzC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAgCD,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,OAAO,GACX,sBAAsB,CAmBxB;AAqeD,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CA6MzC;AAsDD,wBAAsB,4BAA4B,CACjD,OAAO,EAAE,+BAA+B,EACxC,OAAO,GAAE,mCAAwC,GAC/C,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAezC;AAED,wBAAsB,uBAAuB,CAC5C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -3,7 +3,7 @@ import { mkdir, realpath, stat, writeFile } from "node:fs/promises";
3
3
  import { isAbsolute, join, relative, resolve } from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { CODEX_SUBAGENT_TOOL_PREFIX, CODEX_SUBAGENT_WORK_GRAPH_SCHEMA, HEADLESS_PROTOCOL_VERSION, activeCodexSubagentStatus, buildCodexSubagentContinuityEdges, codexSubagentEdgeKey, codexSubagentOperation, codexSubagentStatusIsTerminal, createHeadlessRuntimeState, stringArray, } from "../../cli/headless-protocol.js";
6
- import { markHostedRunnerLeaseDraining } from "../hosted-runner-lease.js";
6
+ import { HOSTED_RUNNER_LEASE_PROTOCOL_VERSION, markHostedRunnerLeaseDraining, } from "../hosted-runner-lease.js";
7
7
  import { ApiError, readJsonBody, sendJson } from "../server-utils.js";
8
8
  const execFileAsync = promisify(execFile);
9
9
  export const HOSTED_RUNNER_DRAIN_PATH = "/.well-known/evalops/remote-runner/drain";
@@ -12,6 +12,7 @@ export const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION = "evalops.remote-runner.sn
12
12
  export const HOSTED_RUNNER_RETENTION_POLICY_VERSION = "evalops.remote-runner.retention.v1";
13
13
  export const HOSTED_RUNNER_WORK_CONTINUITY_VERSION = "evalops.remote-runner.work-continuity.v1";
14
14
  export const HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION = "evalops.remote-runner.platform-evidence.v1";
15
+ export const HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION = "evalops.remote-runner.runtime-continuity.v1";
15
16
  export var HostedRunnerDrainStatusValue;
16
17
  (function (HostedRunnerDrainStatusValue) {
17
18
  HostedRunnerDrainStatusValue["Drained"] = "drained";
@@ -237,6 +238,32 @@ function buildHostedRunnerRetentionPolicy() {
237
238
  },
238
239
  };
239
240
  }
241
+ function buildHostedRunnerRuntimeContinuity(input) {
242
+ return {
243
+ protocol_version: HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION,
244
+ handoff: "drain_restore",
245
+ source_runner_session_id: input.hostedRunner.runnerSessionId,
246
+ ...(input.hostedRunner.ownerInstanceId
247
+ ? { source_owner_instance_id: input.hostedRunner.ownerInstanceId }
248
+ : {}),
249
+ source_process_id: process.pid,
250
+ source_runtime_lease: {
251
+ protocol_version: HOSTED_RUNNER_LEASE_PROTOCOL_VERSION,
252
+ state: input.leaseSnapshot.state,
253
+ generation: input.leaseSnapshot.generation,
254
+ ...(input.leaseSnapshot.maestroSessionId
255
+ ? { maestro_session_id: input.leaseSnapshot.maestroSessionId }
256
+ : {}),
257
+ updated_at: input.leaseSnapshot.updatedAt,
258
+ },
259
+ restore_environment_key: "MAESTRO_REMOTE_RUNNER_RESTORE_MANIFEST",
260
+ restore_manifest_path: input.manifestPath,
261
+ evidence_refs: [
262
+ `remote-runner://sessions/${input.hostedRunner.runnerSessionId}/drain#snapshot`,
263
+ `maestro://headless/sessions/${input.maestroSessionId}#cursor:${input.runtime.cursor ?? 0}`,
264
+ ],
265
+ };
266
+ }
240
267
  function buildHostedRunnerPlatformEvidence(input) {
241
268
  const edges = input.workContinuity.codex_subagent_edges ?? [];
242
269
  return {
@@ -272,6 +299,22 @@ function buildHostedRunnerPlatformEvidence(input) {
272
299
  codex_subagent_thread_ids: input.workContinuity.codex_subagent_thread_ids,
273
300
  ...(edges.length > 0 ? { codex_subagent_edges: edges } : {}),
274
301
  },
302
+ runtime_continuity: {
303
+ protocol_version: input.runtimeContinuity.protocol_version,
304
+ handoff: input.runtimeContinuity.handoff,
305
+ ...(input.runtimeContinuity.source_owner_instance_id
306
+ ? {
307
+ source_owner_instance_id: input.runtimeContinuity.source_owner_instance_id,
308
+ }
309
+ : {}),
310
+ source_process_id: input.runtimeContinuity.source_process_id,
311
+ ...(input.runtimeContinuity.source_runtime_lease
312
+ ? {
313
+ source_runtime_lease_generation: input.runtimeContinuity.source_runtime_lease.generation,
314
+ }
315
+ : {}),
316
+ restore_manifest_path: input.runtimeContinuity.restore_manifest_path,
317
+ },
275
318
  retention: {
276
319
  policy_version: input.retentionPolicy.policy_version,
277
320
  control_plane_metadata_visibility: input.retentionPolicy.visibility.control_plane_metadata,
@@ -423,7 +466,7 @@ export async function drainHostedRunner(input, options) {
423
466
  return null;
424
467
  }
425
468
  const requestedAtDate = options.now?.() ?? new Date();
426
- markHostedRunnerLeaseDraining(hostedRunner, requestedAtDate);
469
+ const leaseSnapshot = markHostedRunnerLeaseDraining(hostedRunner, requestedAtDate);
427
470
  const requestedAt = requestedAtDate.toISOString();
428
471
  const workspaceRoot = await resolveWorkspaceRoot(hostedRunner);
429
472
  const snapshotRoot = resolve(workspaceRoot, hostedRunner.snapshotRoot ?? ".maestro/runner-snapshots");
@@ -495,6 +538,13 @@ export async function drainHostedRunner(input, options) {
495
538
  buildHostedRunnerSnapshot(maestroSessionId, workspaceRoot, runtime);
496
539
  const workContinuity = collectHostedRunnerWorkContinuity(snapshot);
497
540
  const retentionPolicy = buildHostedRunnerRetentionPolicy();
541
+ const runtimeContinuity = buildHostedRunnerRuntimeContinuity({
542
+ hostedRunner,
543
+ maestroSessionId,
544
+ manifestPath: snapshotPath,
545
+ runtime,
546
+ leaseSnapshot,
547
+ });
498
548
  const platformEvidence = buildHostedRunnerPlatformEvidence({
499
549
  hostedRunner,
500
550
  status,
@@ -502,6 +552,7 @@ export async function drainHostedRunner(input, options) {
502
552
  createdAt: requestedAt,
503
553
  manifestPath: snapshotPath,
504
554
  runtime,
555
+ runtimeContinuity,
505
556
  workContinuity,
506
557
  retentionPolicy,
507
558
  reason: input.reason,
@@ -526,6 +577,7 @@ export async function drainHostedRunner(input, options) {
526
577
  mode: HostedRunnerWorkspaceExportModeValue.LocalPathContract,
527
578
  paths: exportPaths,
528
579
  },
580
+ runtime_continuity: runtimeContinuity,
529
581
  work_continuity: workContinuity,
530
582
  platform_evidence: platformEvidence,
531
583
  snapshot,
@@ -557,6 +609,7 @@ export async function drainHostedRunner(input, options) {
557
609
  createdAt: requestedAt,
558
610
  manifestPath: snapshotPath,
559
611
  runtime,
612
+ runtimeContinuity,
560
613
  workContinuity,
561
614
  retentionPolicy,
562
615
  reason: input.reason,
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-runner-drain.js","sourceRoot":"","sources":["../../../src/server/handlers/hosted-runner-drain.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { mkdir, realpath, stat, writeFile } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport {\n\tCODEX_SUBAGENT_TOOL_PREFIX,\n\tCODEX_SUBAGENT_WORK_GRAPH_SCHEMA,\n\tHEADLESS_PROTOCOL_VERSION,\n\ttype HeadlessCodexSubagentContinuityEdge,\n\tactiveCodexSubagentStatus,\n\tbuildCodexSubagentContinuityEdges,\n\tcodexSubagentEdgeKey,\n\tcodexSubagentOperation,\n\tcodexSubagentStatusIsTerminal,\n\tcreateHeadlessRuntimeState,\n\tstringArray,\n} from \"../../cli/headless-protocol.js\";\nimport type { HostedRunnerContext, WebServerContext } from \"../app-context.js\";\nimport type { HeadlessRuntimeSnapshot } from \"../headless-runtime-service.js\";\nimport { markHostedRunnerLeaseDraining } from \"../hosted-runner-lease.js\";\nimport { ApiError, readJsonBody, sendJson } from \"../server-utils.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const HOSTED_RUNNER_DRAIN_PATH =\n\t\"/.well-known/evalops/remote-runner/drain\";\n\nexport const HOSTED_RUNNER_DRAIN_PROTOCOL_VERSION =\n\t\"evalops.remote-runner.drain.v1\";\n\nexport const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION =\n\t\"evalops.remote-runner.snapshot-manifest.v1\";\n\nexport const HOSTED_RUNNER_RETENTION_POLICY_VERSION =\n\t\"evalops.remote-runner.retention.v1\";\n\nexport const HOSTED_RUNNER_WORK_CONTINUITY_VERSION =\n\t\"evalops.remote-runner.work-continuity.v1\";\n\nexport const HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION =\n\t\"evalops.remote-runner.platform-evidence.v1\";\n\nexport enum HostedRunnerDrainStatusValue {\n\tDrained = \"drained\",\n\tInterrupted = \"interrupted\",\n}\n\nexport enum HostedRunnerRuntimeFlushStatusValue {\n\tCompleted = \"completed\",\n\tFailed = \"failed\",\n\tSkipped = \"skipped\",\n}\n\nexport enum HostedRunnerWorkspaceExportPathTypeValue {\n\tFile = \"file\",\n\tDirectory = \"directory\",\n\tOther = \"other\",\n}\n\nexport enum HostedRunnerWorkspaceExportModeValue {\n\tLocalPathContract = \"local_path_contract\",\n}\n\nexport enum HostedRunnerDrainReasonValue {\n\tKubernetesPreStop = \"kubernetes_prestop\",\n\tProcessShutdown = \"process_shutdown\",\n}\n\nexport enum HostedRunnerDrainRequestedByValue {\n\tKubernetesPreStop = \"kubernetes_prestop\",\n\tMaestroWebServer = \"maestro_web_server\",\n}\n\nexport type HostedRunnerDrainStatus = HostedRunnerDrainStatusValue;\nexport type HostedRunnerRuntimeFlushStatus =\n\tHostedRunnerRuntimeFlushStatusValue;\nexport type HostedRunnerWorkspaceExportPathType =\n\tHostedRunnerWorkspaceExportPathTypeValue;\nexport type HostedRunnerWorkspaceExportMode =\n\tHostedRunnerWorkspaceExportModeValue;\nexport type HostedRunnerDrainReason = HostedRunnerDrainReasonValue | string;\nexport type HostedRunnerDrainRequestedBy =\n\t| HostedRunnerDrainRequestedByValue\n\t| string;\n\nexport interface HostedRunnerRetentionPolicy {\n\tpolicy_version: typeof HOSTED_RUNNER_RETENTION_POLICY_VERSION;\n\tmanaged_by: \"platform\";\n\tvisibility: {\n\t\tcontrol_plane_metadata: \"operator\";\n\t\tworkspace_export: \"tenant\";\n\t\truntime_snapshot: \"internal\";\n\t\truntime_logs: \"operator\";\n\t};\n\tredaction: {\n\t\trequired_before_external_persistence: Array<\n\t\t\t\"runtime_snapshot\" | \"runtime_logs\"\n\t\t>;\n\t\tforbidden_plaintext: Array<\n\t\t\t| \"provider_credentials\"\n\t\t\t| \"tool_secrets\"\n\t\t\t| \"attach_tokens\"\n\t\t\t| \"artifact_access_tokens\"\n\t\t\t| \"raw_environment\"\n\t\t>;\n\t};\n}\n\nexport interface HostedRunnerDrainInput {\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n\texportPaths?: string[];\n}\n\nexport interface HostedRunnerRuntimeDrainResult {\n\tsessionId: string;\n\tsessionFile?: string;\n\tprotocolVersion?: string;\n\tcursor?: number;\n\tsnapshot?: HeadlessRuntimeSnapshot;\n\trecordPlatformDrain?: (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => Promise<void>;\n}\n\nclass HostedRunnerRuntimeDrainError extends Error {\n\treadonly sessionId: string;\n\treadonly sessionFile?: string;\n\treadonly protocolVersion?: string;\n\treadonly cursor?: number;\n\treadonly snapshot?: HeadlessRuntimeSnapshot;\n\treadonly recordPlatformDrain?: (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => Promise<void>;\n\n\tconstructor(message: string, runtime: HostedRunnerRuntimeDrainResult) {\n\t\tsuper(message);\n\t\tthis.name = \"HostedRunnerRuntimeDrainError\";\n\t\tthis.sessionId = runtime.sessionId;\n\t\tthis.sessionFile = runtime.sessionFile;\n\t\tthis.protocolVersion = runtime.protocolVersion;\n\t\tthis.cursor = runtime.cursor;\n\t\tthis.snapshot = runtime.snapshot;\n\t\tthis.recordPlatformDrain = runtime.recordPlatformDrain;\n\t}\n}\n\nexport interface HostedRunnerWorkspaceExportPath {\n\tinput: string;\n\tpath: string;\n\trelative_path: string;\n\ttype: HostedRunnerWorkspaceExportPathType;\n}\n\nexport interface HostedRunnerSnapshotManifest {\n\tprotocol_version: typeof HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION;\n\trunner_session_id: string;\n\tworkspace_id?: string;\n\tagent_run_id?: string;\n\tmaestro_session_id: string;\n\treason?: string;\n\trequested_by?: string;\n\tcreated_at: string;\n\tworkspace_root: string;\n\truntime: {\n\t\tflush_status: HostedRunnerRuntimeFlushStatus;\n\t\terror?: string;\n\t\tsession_id: string;\n\t\tsession_file?: string;\n\t\tprotocol_version?: string;\n\t\tcursor?: number;\n\t};\n\tworkspace_export: {\n\t\tmode: HostedRunnerWorkspaceExportMode;\n\t\tpaths: HostedRunnerWorkspaceExportPath[];\n\t};\n\twork_continuity: HostedRunnerWorkContinuity;\n\tplatform_evidence: HostedRunnerPlatformEvidence;\n\tsnapshot: HeadlessRuntimeSnapshot;\n\tretention_policy: HostedRunnerRetentionPolicy;\n\tgit?: {\n\t\tcommit?: string;\n\t\tbranch?: string;\n\t\tdirty?: boolean;\n\t};\n}\n\nexport interface HostedRunnerWorkContinuity {\n\tprotocol_version: typeof HOSTED_RUNNER_WORK_CONTINUITY_VERSION;\n\tcodex_subagent_schema_version: typeof CODEX_SUBAGENT_WORK_GRAPH_SCHEMA;\n\tactive_tool_count: number;\n\ttracked_tool_count: number;\n\tpending_request_count: number;\n\tcodex_subagent_tool_call_ids: string[];\n\tcodex_subagent_child_run_ids: string[];\n\tcodex_subagent_thread_ids: string[];\n\tcodex_subagent_edges?: HeadlessCodexSubagentContinuityEdge[];\n}\n\nexport interface HostedRunnerPlatformEvidence {\n\tprotocol_version: typeof HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION;\n\tevent_type: \"hosted_runner_drain_manifest_recorded\";\n\trunner_session_id: string;\n\tworkspace_id?: string;\n\tagent_run_id?: string;\n\tmaestro_session_id: string;\n\tstatus: HostedRunnerDrainStatus;\n\truntime_flush_status: HostedRunnerRuntimeFlushStatus;\n\tmanifest_path: string;\n\tmanifest_protocol_version: typeof HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION;\n\tcreated_at: string;\n\treason?: string;\n\trequested_by?: string;\n\twork_continuity: {\n\t\tprotocol_version: typeof HOSTED_RUNNER_WORK_CONTINUITY_VERSION;\n\t\tcodex_subagent_schema_version: typeof CODEX_SUBAGENT_WORK_GRAPH_SCHEMA;\n\t\tactive_tool_count: number;\n\t\ttracked_tool_count: number;\n\t\tpending_request_count: number;\n\t\tcodex_subagent_tool_call_count: number;\n\t\tcodex_subagent_child_run_count: number;\n\t\tcodex_subagent_thread_count: number;\n\t\tcodex_subagent_edge_count: number;\n\t\tcodex_subagent_tool_call_ids: string[];\n\t\tcodex_subagent_child_run_ids: string[];\n\t\tcodex_subagent_thread_ids: string[];\n\t\tcodex_subagent_edges?: HeadlessCodexSubagentContinuityEdge[];\n\t};\n\tretention: {\n\t\tpolicy_version: typeof HOSTED_RUNNER_RETENTION_POLICY_VERSION;\n\t\tcontrol_plane_metadata_visibility: \"operator\";\n\t\truntime_snapshot_visibility: \"internal\";\n\t\tredaction_required_before_external_persistence: Array<\n\t\t\t\"runtime_snapshot\" | \"runtime_logs\"\n\t\t>;\n\t};\n\tevidence_refs: string[];\n}\n\nexport interface HostedRunnerPlatformDrainRecordInput {\n\tstatus: HostedRunnerDrainStatus;\n\treason?: string;\n\trequestedBy?: string;\n\tflushStatus: HostedRunnerRuntimeFlushStatus;\n\tmanifestPath: string;\n\tplatformEvidence: HostedRunnerPlatformEvidence;\n\terrorMessage?: string;\n}\n\nexport interface HostedRunnerDrainResult {\n\tstatus: HostedRunnerDrainStatus;\n\trunner_session_id: string;\n\treason?: string;\n\trequested_by?: string;\n\tmanifest_path: string;\n\tmanifest: HostedRunnerSnapshotManifest;\n}\n\nexport interface DrainHostedRunnerOptions {\n\thostedRunner?: HostedRunnerContext;\n\tdrainRuntime?: (\n\t\tsessionId: string,\n\t\tterminal: HostedRunnerRuntimeTerminalInput,\n\t) => Promise<HostedRunnerRuntimeDrainResult | null>;\n\tnow?: () => Date;\n}\n\ninterface HostedRunnerDrainRuntimeContext {\n\thostedRunner?: HostedRunnerContext;\n\theadlessRuntimeService: Pick<\n\t\tWebServerContext[\"headlessRuntimeService\"],\n\t\t\"getRuntimeBySessionId\"\n\t>;\n}\n\nexport interface DrainHostedRunnerForShutdownOptions {\n\tnow?: () => Date;\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n}\n\ninterface HostedRunnerRuntimeTerminalInput {\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n\tmanifestPath?: string;\n}\n\nfunction getString(value: unknown, field: string): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new ApiError(400, `${field} must be a string`);\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed || undefined;\n}\n\nfunction getStringArray(value: unknown, field: string): string[] | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(value)) {\n\t\tthrow new ApiError(400, `${field} must be an array of strings`);\n\t}\n\tconst strings = value.map((entry, index) => {\n\t\tif (typeof entry !== \"string\" || !entry.trim()) {\n\t\t\tthrow new ApiError(400, `${field}[${index}] must be a non-empty string`);\n\t\t}\n\t\tif (entry.includes(\"\\0\")) {\n\t\t\tthrow new ApiError(400, `${field}[${index}] contains a null byte`);\n\t\t}\n\t\treturn entry.trim();\n\t});\n\treturn strings.length ? strings : undefined;\n}\n\nexport function parseHostedRunnerDrainInput(\n\tbody: unknown,\n): HostedRunnerDrainInput {\n\tif (body === undefined || body === null) {\n\t\treturn {};\n\t}\n\tif (typeof body !== \"object\" || Array.isArray(body)) {\n\t\tthrow new ApiError(400, \"Drain payload must be a JSON object\");\n\t}\n\tconst record = body as Record<string, unknown>;\n\treturn {\n\t\treason:\n\t\t\tgetString(record.reason, \"reason\") ??\n\t\t\tgetString(record.stop_reason, \"stop_reason\"),\n\t\trequestedBy:\n\t\t\tgetString(record.requested_by, \"requested_by\") ??\n\t\t\tgetString(record.requestedBy, \"requestedBy\"),\n\t\texportPaths:\n\t\t\tgetStringArray(record.export_paths, \"export_paths\") ??\n\t\t\tgetStringArray(record.exportPaths, \"exportPaths\"),\n\t};\n}\n\nfunction isWithinPath(root: string, target: string): boolean {\n\tconst rel = relative(root, target);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nfunction safeManifestFileName(\n\trunnerSessionId: string,\n\trequestedAt: string,\n): string {\n\tconst safeSession = runnerSessionId.replace(/[^A-Za-z0-9_.-]/g, \"_\");\n\tconst safeTimestamp = requestedAt.replace(/[^A-Za-z0-9_.-]/g, \"_\");\n\treturn `${safeSession}-${safeTimestamp}.json`;\n}\n\nasync function resolveWorkspaceRoot(\n\thostedRunner: HostedRunnerContext,\n): Promise<string> {\n\ttry {\n\t\tconst workspaceRoot = await realpath(hostedRunner.workspaceRoot);\n\t\tconst stats = await stat(workspaceRoot);\n\t\tif (!stats.isDirectory()) {\n\t\t\tthrow new ApiError(\n\t\t\t\t503,\n\t\t\t\t\"Hosted runner workspace root is not a directory\",\n\t\t\t);\n\t\t}\n\t\treturn workspaceRoot;\n\t} catch (error) {\n\t\tif (error instanceof ApiError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new ApiError(\n\t\t\t503,\n\t\t\t`Hosted runner workspace root is unavailable: ${\n\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t}`,\n\t\t);\n\t}\n}\n\nasync function resolveWorkspaceExportPaths(\n\tworkspaceRoot: string,\n\texportPaths: readonly string[] | undefined,\n): Promise<HostedRunnerWorkspaceExportPath[]> {\n\tconst requested = exportPaths?.length ? exportPaths : [\".\"];\n\tconst paths: HostedRunnerWorkspaceExportPath[] = [];\n\tfor (const input of requested) {\n\t\tconst logicalPath = isAbsolute(input)\n\t\t\t? resolve(input)\n\t\t\t: resolve(workspaceRoot, input);\n\t\tlet realPath: string;\n\t\ttry {\n\t\t\trealPath = await realpath(logicalPath);\n\t\t} catch (error) {\n\t\t\tthrow new ApiError(\n\t\t\t\t400,\n\t\t\t\t`Export path is unavailable: ${input} (${\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t\tif (!isWithinPath(workspaceRoot, realPath)) {\n\t\t\tthrow new ApiError(\n\t\t\t\t400,\n\t\t\t\t`Export path escapes hosted runner workspace root: ${input}`,\n\t\t\t);\n\t\t}\n\t\tconst pathStat = await stat(realPath);\n\t\tpaths.push({\n\t\t\tinput,\n\t\t\tpath: realPath,\n\t\t\trelative_path: relative(workspaceRoot, realPath) || \".\",\n\t\t\ttype: pathStat.isDirectory()\n\t\t\t\t? HostedRunnerWorkspaceExportPathTypeValue.Directory\n\t\t\t\t: pathStat.isFile()\n\t\t\t\t\t? HostedRunnerWorkspaceExportPathTypeValue.File\n\t\t\t\t\t: HostedRunnerWorkspaceExportPathTypeValue.Other,\n\t\t});\n\t}\n\treturn paths;\n}\n\nasync function gitOutput(\n\tworkspaceRoot: string,\n\targs: readonly string[],\n): Promise<string | undefined> {\n\ttry {\n\t\tconst { stdout } = await execFileAsync(\n\t\t\t\"git\",\n\t\t\t[\"-C\", workspaceRoot, ...args],\n\t\t\t{\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\ttimeout: 1000,\n\t\t\t},\n\t\t);\n\t\tconst output = stdout.trim();\n\t\treturn output || undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function collectGitState(\n\tworkspaceRoot: string,\n): Promise<HostedRunnerSnapshotManifest[\"git\"] | undefined> {\n\tconst [commit, branch, status] = await Promise.all([\n\t\tgitOutput(workspaceRoot, [\"rev-parse\", \"HEAD\"]),\n\t\tgitOutput(workspaceRoot, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]),\n\t\tgitOutput(workspaceRoot, [\"status\", \"--porcelain\"]),\n\t]);\n\tif (!commit && !branch && status === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(commit ? { commit } : {}),\n\t\t...(branch && branch !== \"HEAD\" ? { branch } : {}),\n\t\tdirty: Boolean(status),\n\t};\n}\n\nfunction buildHostedRunnerSnapshot(\n\tsessionId: string,\n\tworkspaceRoot: string,\n\truntime: HostedRunnerSnapshotManifest[\"runtime\"],\n): HeadlessRuntimeSnapshot {\n\tconst state = createHeadlessRuntimeState();\n\tstate.protocol_version =\n\t\truntime.protocol_version ?? HEADLESS_PROTOCOL_VERSION;\n\tstate.session_id = sessionId;\n\tstate.cwd = workspaceRoot;\n\tstate.provider = \"typescript\";\n\tstate.model = \"typescript-hosted-runner\";\n\tstate.is_ready =\n\t\truntime.flush_status === HostedRunnerRuntimeFlushStatusValue.Completed;\n\tstate.last_status =\n\t\truntime.flush_status === HostedRunnerRuntimeFlushStatusValue.Completed\n\t\t\t? \"Drained\"\n\t\t\t: runtime.flush_status === HostedRunnerRuntimeFlushStatusValue.Failed\n\t\t\t\t? \"Drain interrupted before runtime flush completed\"\n\t\t\t\t: \"Drain skipped: no runtime activity was available\";\n\tif (runtime.error) {\n\t\tstate.last_error = runtime.error;\n\t\tstate.last_error_type = \"protocol\";\n\t}\n\treturn {\n\t\tprotocolVersion: runtime.protocol_version ?? HEADLESS_PROTOCOL_VERSION,\n\t\tsession_id: sessionId,\n\t\tcursor: runtime.cursor ?? 0,\n\t\tlast_init: null,\n\t\tstate,\n\t};\n}\n\nfunction buildHostedRunnerRetentionPolicy(): HostedRunnerRetentionPolicy {\n\treturn {\n\t\tpolicy_version: HOSTED_RUNNER_RETENTION_POLICY_VERSION,\n\t\tmanaged_by: \"platform\",\n\t\tvisibility: {\n\t\t\tcontrol_plane_metadata: \"operator\",\n\t\t\tworkspace_export: \"tenant\",\n\t\t\truntime_snapshot: \"internal\",\n\t\t\truntime_logs: \"operator\",\n\t\t},\n\t\tredaction: {\n\t\t\trequired_before_external_persistence: [\n\t\t\t\t\"runtime_snapshot\",\n\t\t\t\t\"runtime_logs\",\n\t\t\t],\n\t\t\tforbidden_plaintext: [\n\t\t\t\t\"provider_credentials\",\n\t\t\t\t\"tool_secrets\",\n\t\t\t\t\"attach_tokens\",\n\t\t\t\t\"artifact_access_tokens\",\n\t\t\t\t\"raw_environment\",\n\t\t\t],\n\t\t},\n\t};\n}\n\nfunction buildHostedRunnerPlatformEvidence(input: {\n\thostedRunner: HostedRunnerContext;\n\tstatus: HostedRunnerDrainStatus;\n\tmaestroSessionId: string;\n\tcreatedAt: string;\n\tmanifestPath: string;\n\truntime: HostedRunnerSnapshotManifest[\"runtime\"];\n\tworkContinuity: HostedRunnerWorkContinuity;\n\tretentionPolicy: HostedRunnerRetentionPolicy;\n\treason?: string;\n\trequestedBy?: string;\n}): HostedRunnerPlatformEvidence {\n\tconst edges = input.workContinuity.codex_subagent_edges ?? [];\n\treturn {\n\t\tprotocol_version: HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION,\n\t\tevent_type: \"hosted_runner_drain_manifest_recorded\",\n\t\trunner_session_id: input.hostedRunner.runnerSessionId,\n\t\t...(input.hostedRunner.workspaceId\n\t\t\t? { workspace_id: input.hostedRunner.workspaceId }\n\t\t\t: {}),\n\t\t...(input.hostedRunner.agentRunId\n\t\t\t? { agent_run_id: input.hostedRunner.agentRunId }\n\t\t\t: {}),\n\t\tmaestro_session_id: input.maestroSessionId,\n\t\tstatus: input.status,\n\t\truntime_flush_status: input.runtime.flush_status,\n\t\tmanifest_path: input.manifestPath,\n\t\tmanifest_protocol_version: HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION,\n\t\tcreated_at: input.createdAt,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\twork_continuity: {\n\t\t\tprotocol_version: input.workContinuity.protocol_version,\n\t\t\tcodex_subagent_schema_version:\n\t\t\t\tinput.workContinuity.codex_subagent_schema_version,\n\t\t\tactive_tool_count: input.workContinuity.active_tool_count,\n\t\t\ttracked_tool_count: input.workContinuity.tracked_tool_count,\n\t\t\tpending_request_count: input.workContinuity.pending_request_count,\n\t\t\tcodex_subagent_tool_call_count:\n\t\t\t\tinput.workContinuity.codex_subagent_tool_call_ids.length,\n\t\t\tcodex_subagent_child_run_count:\n\t\t\t\tinput.workContinuity.codex_subagent_child_run_ids.length,\n\t\t\tcodex_subagent_thread_count:\n\t\t\t\tinput.workContinuity.codex_subagent_thread_ids.length,\n\t\t\tcodex_subagent_edge_count: edges.length,\n\t\t\tcodex_subagent_tool_call_ids:\n\t\t\t\tinput.workContinuity.codex_subagent_tool_call_ids,\n\t\t\tcodex_subagent_child_run_ids:\n\t\t\t\tinput.workContinuity.codex_subagent_child_run_ids,\n\t\t\tcodex_subagent_thread_ids: input.workContinuity.codex_subagent_thread_ids,\n\t\t\t...(edges.length > 0 ? { codex_subagent_edges: edges } : {}),\n\t\t},\n\t\tretention: {\n\t\t\tpolicy_version: input.retentionPolicy.policy_version,\n\t\t\tcontrol_plane_metadata_visibility:\n\t\t\t\tinput.retentionPolicy.visibility.control_plane_metadata,\n\t\t\truntime_snapshot_visibility:\n\t\t\t\tinput.retentionPolicy.visibility.runtime_snapshot,\n\t\t\tredaction_required_before_external_persistence:\n\t\t\t\tinput.retentionPolicy.redaction.required_before_external_persistence,\n\t\t},\n\t\tevidence_refs: [\n\t\t\t`remote-runner://sessions/${input.hostedRunner.runnerSessionId}/drain#manifest`,\n\t\t\t`maestro://headless/sessions/${input.maestroSessionId}#drain`,\n\t\t\t...(input.hostedRunner.agentRunId\n\t\t\t\t? [`platform-agent-run:${input.hostedRunner.agentRunId}`]\n\t\t\t\t: []),\n\t\t],\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction collectCodexSubagentEdgesFromSource(\n\tsource: {\n\t\tcall_id: string;\n\t\ttool_execution_id?: string;\n\t\ttool: string;\n\t\targs?: unknown;\n\t},\n\tedges: Map<string, HeadlessCodexSubagentContinuityEdge>,\n): void {\n\tconst operation = codexSubagentOperation(source.tool);\n\tif (!operation) {\n\t\treturn;\n\t}\n\tconst status = activeCodexSubagentStatus(operation);\n\tfor (const edge of buildCodexSubagentContinuityEdges({\n\t\tcall_id: source.call_id,\n\t\ttool_execution_id: source.tool_execution_id,\n\t\ttool: source.tool,\n\t\targs: source.args,\n\t\tstatus,\n\t})) {\n\t\tedges.set(codexSubagentEdgeKey(edge), edge);\n\t}\n}\n\nfunction collectCodexWorkArgs(\n\targs: unknown,\n\tchildRunIds: Set<string>,\n\tthreadIds: Set<string>,\n\tincludeLooseArgs = false,\n): boolean {\n\tif (!isRecord(args)) {\n\t\treturn false;\n\t}\n\tconst graph = args.codexWorkGraph ?? args.codex_work_graph;\n\tconst hasCodexGraph =\n\t\tisRecord(graph) &&\n\t\t(graph.schemaVersion === CODEX_SUBAGENT_WORK_GRAPH_SCHEMA ||\n\t\t\tgraph.schema_version === CODEX_SUBAGENT_WORK_GRAPH_SCHEMA);\n\tif (!includeLooseArgs && !hasCodexGraph) {\n\t\treturn false;\n\t}\n\tfor (const childRunId of stringArray(\n\t\targs.childRunIds ?? args.child_run_ids,\n\t)) {\n\t\tchildRunIds.add(childRunId);\n\t}\n\tfor (const threadId of stringArray(\n\t\targs.receiverThreadIds ?? args.receiver_thread_ids,\n\t)) {\n\t\tthreadIds.add(threadId);\n\t}\n\tif (isRecord(graph)) {\n\t\tconst graphChildRuns = graph.childRuns ?? graph.child_runs;\n\t\tfor (const childRun of Array.isArray(graphChildRuns)\n\t\t\t? graphChildRuns\n\t\t\t: []) {\n\t\t\tif (!isRecord(childRun)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst childRunId = childRun.childRunId ?? childRun.child_run_id;\n\t\t\tif (typeof childRunId === \"string\" && childRunId) {\n\t\t\t\tchildRunIds.add(childRunId);\n\t\t\t}\n\t\t\tconst threadId = childRun.threadId ?? childRun.thread_id;\n\t\t\tif (typeof threadId === \"string\" && threadId) {\n\t\t\t\tthreadIds.add(threadId);\n\t\t\t}\n\t\t}\n\t}\n\treturn includeLooseArgs || hasCodexGraph;\n}\n\nfunction collectHostedRunnerWorkContinuity(\n\tsnapshot: HeadlessRuntimeSnapshot,\n): HostedRunnerWorkContinuity {\n\tconst state = snapshot.state;\n\tconst codexToolCallIds = new Set<string>();\n\tconst childRunIds = new Set<string>();\n\tconst threadIds = new Set<string>();\n\tconst codexSubagentEdges = new Map<\n\t\tstring,\n\t\tHeadlessCodexSubagentContinuityEdge\n\t>();\n\tfor (const edge of state.codex_subagent_edges ?? []) {\n\t\tcodexSubagentEdges.set(codexSubagentEdgeKey(edge), edge);\n\t\tif (edge.spawn_tool_call_id) {\n\t\t\tcodexToolCallIds.add(edge.spawn_tool_call_id);\n\t\t}\n\t\tif (edge.wait_tool_call_id) {\n\t\t\tcodexToolCallIds.add(edge.wait_tool_call_id);\n\t\t}\n\t\tif (edge.child_run_id) {\n\t\t\tchildRunIds.add(edge.child_run_id);\n\t\t}\n\t\tif (edge.thread_id) {\n\t\t\tthreadIds.add(edge.thread_id);\n\t\t}\n\t}\n\tconst trackedSources = [\n\t\t...state.tracked_tools,\n\t\t...state.pending_approvals,\n\t\t...state.pending_client_tools,\n\t\t...state.pending_mcp_elicitations,\n\t\t...state.pending_user_inputs,\n\t\t...state.pending_tool_retries,\n\t];\n\tconst codexTrackedSourceCallIds = new Set<string>();\n\tfor (const source of trackedSources) {\n\t\tconst tool = source.tool;\n\t\tconst isCodexSubagentTool = tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX);\n\t\tconst hasCodexWorkArgs = collectCodexWorkArgs(\n\t\t\tsource.args,\n\t\t\tchildRunIds,\n\t\t\tthreadIds,\n\t\t\tisCodexSubagentTool,\n\t\t);\n\t\tif (isCodexSubagentTool || hasCodexWorkArgs) {\n\t\t\tcodexTrackedSourceCallIds.add(source.call_id);\n\t\t\tcodexToolCallIds.add(source.call_id);\n\t\t\tcollectCodexSubagentEdgesFromSource(source, codexSubagentEdges);\n\t\t}\n\t}\n\tfor (const activeTool of state.active_tools) {\n\t\tif (activeTool.tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX)) {\n\t\t\tconst hasTrackedSource = codexToolCallIds.has(activeTool.call_id);\n\t\t\tcodexToolCallIds.add(activeTool.call_id);\n\t\t\tif (!hasTrackedSource) {\n\t\t\t\tcollectCodexSubagentEdgesFromSource(\n\t\t\t\t\t{ call_id: activeTool.call_id, tool: activeTool.tool },\n\t\t\t\t\tcodexSubagentEdges,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tconst sortedEdges = [...codexSubagentEdges.values()].sort((left, right) =>\n\t\tcodexSubagentEdgeKey(left).localeCompare(codexSubagentEdgeKey(right)),\n\t);\n\tconst activeCodexSubagentEdgeCount = sortedEdges.filter(\n\t\t(edge) => !codexSubagentStatusIsTerminal(edge.status),\n\t).length;\n\tconst nonCodexActiveToolCount = state.active_tools.filter(\n\t\t(tool) => !tool.tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX),\n\t).length;\n\tconst nonCodexTrackedToolCount = state.tracked_tools.filter(\n\t\t(tool) => !codexTrackedSourceCallIds.has(tool.call_id),\n\t).length;\n\tconst trackedCodexSubagentCount = Math.max(\n\t\tcodexToolCallIds.size,\n\t\tsortedEdges.length,\n\t);\n\treturn {\n\t\tprotocol_version: HOSTED_RUNNER_WORK_CONTINUITY_VERSION,\n\t\tcodex_subagent_schema_version: CODEX_SUBAGENT_WORK_GRAPH_SCHEMA,\n\t\tactive_tool_count:\n\t\t\tsortedEdges.length > 0\n\t\t\t\t? nonCodexActiveToolCount + activeCodexSubagentEdgeCount\n\t\t\t\t: state.active_tools.length,\n\t\ttracked_tool_count:\n\t\t\tsortedEdges.length > 0\n\t\t\t\t? nonCodexTrackedToolCount + trackedCodexSubagentCount\n\t\t\t\t: state.tracked_tools.length,\n\t\tpending_request_count:\n\t\t\tstate.pending_approvals.length +\n\t\t\tstate.pending_client_tools.length +\n\t\t\tstate.pending_mcp_elicitations.length +\n\t\t\tstate.pending_user_inputs.length +\n\t\t\tstate.pending_tool_retries.length,\n\t\tcodex_subagent_tool_call_ids: [...codexToolCallIds].sort(),\n\t\tcodex_subagent_child_run_ids: [...childRunIds].sort(),\n\t\tcodex_subagent_thread_ids: [...threadIds].sort(),\n\t\t...(sortedEdges.length > 0 ? { codex_subagent_edges: sortedEdges } : {}),\n\t};\n}\n\nexport async function drainHostedRunner(\n\tinput: HostedRunnerDrainInput,\n\toptions: DrainHostedRunnerOptions,\n): Promise<HostedRunnerDrainResult | null> {\n\tconst hostedRunner = options.hostedRunner;\n\tif (!hostedRunner?.enabled || !hostedRunner.runnerSessionId) {\n\t\treturn null;\n\t}\n\n\tconst requestedAtDate = options.now?.() ?? new Date();\n\tmarkHostedRunnerLeaseDraining(hostedRunner, requestedAtDate);\n\tconst requestedAt = requestedAtDate.toISOString();\n\tconst workspaceRoot = await resolveWorkspaceRoot(hostedRunner);\n\tconst snapshotRoot = resolve(\n\t\tworkspaceRoot,\n\t\thostedRunner.snapshotRoot ?? \".maestro/runner-snapshots\",\n\t);\n\tawait mkdir(snapshotRoot, { recursive: true });\n\tconst snapshotPath = join(\n\t\tsnapshotRoot,\n\t\tsafeManifestFileName(hostedRunner.runnerSessionId, requestedAt),\n\t);\n\tconst exportPaths = await resolveWorkspaceExportPaths(\n\t\tworkspaceRoot,\n\t\tinput.exportPaths,\n\t);\n\tconst activeSessionId =\n\t\thostedRunner.activeMaestroSessionId ??\n\t\thostedRunner.configuredMaestroSessionId;\n\tconst maestroSessionId = activeSessionId ?? hostedRunner.runnerSessionId;\n\n\tlet status: HostedRunnerDrainStatus = HostedRunnerDrainStatusValue.Drained;\n\tlet runtime: HostedRunnerSnapshotManifest[\"runtime\"] = {\n\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Skipped,\n\t\tsession_id: maestroSessionId,\n\t};\n\tlet runtimeSnapshot: HeadlessRuntimeSnapshot | undefined;\n\tlet recordPlatformDrain:\n\t\t| ((input: HostedRunnerPlatformDrainRecordInput) => Promise<void>)\n\t\t| undefined;\n\n\tif (activeSessionId && options.drainRuntime) {\n\t\ttry {\n\t\t\tconst runtimeResult = await options.drainRuntime(activeSessionId, {\n\t\t\t\treason: input.reason,\n\t\t\t\trequestedBy: input.requestedBy,\n\t\t\t\tmanifestPath: snapshotPath,\n\t\t\t});\n\t\t\tconst runtimeProtocolVersion =\n\t\t\t\truntimeResult?.protocolVersion ??\n\t\t\t\truntimeResult?.snapshot?.protocolVersion;\n\t\t\tconst runtimeCursor =\n\t\t\t\truntimeResult?.cursor ?? runtimeResult?.snapshot?.cursor;\n\t\t\truntime = runtimeResult\n\t\t\t\t? {\n\t\t\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Completed,\n\t\t\t\t\t\tsession_id: runtimeResult.sessionId,\n\t\t\t\t\t\t...(runtimeResult.sessionFile\n\t\t\t\t\t\t\t? { session_file: runtimeResult.sessionFile }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(runtimeProtocolVersion\n\t\t\t\t\t\t\t? { protocol_version: runtimeProtocolVersion }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(runtimeCursor !== undefined ? { cursor: runtimeCursor } : {}),\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Skipped,\n\t\t\t\t\t\tsession_id: activeSessionId,\n\t\t\t\t\t};\n\t\t\truntimeSnapshot = runtimeResult?.snapshot;\n\t\t\trecordPlatformDrain = runtimeResult?.recordPlatformDrain;\n\t\t} catch (error) {\n\t\t\tstatus = HostedRunnerDrainStatusValue.Interrupted;\n\t\t\tconst interruptedRuntime =\n\t\t\t\terror instanceof HostedRunnerRuntimeDrainError ? error : undefined;\n\t\t\truntimeSnapshot = interruptedRuntime?.snapshot;\n\t\t\trecordPlatformDrain = interruptedRuntime?.recordPlatformDrain;\n\t\t\truntime = {\n\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Failed,\n\t\t\t\tsession_id: interruptedRuntime?.sessionId ?? activeSessionId,\n\t\t\t\t...(interruptedRuntime?.sessionFile\n\t\t\t\t\t? { session_file: interruptedRuntime.sessionFile }\n\t\t\t\t\t: {}),\n\t\t\t\t...(interruptedRuntime?.protocolVersion\n\t\t\t\t\t? { protocol_version: interruptedRuntime.protocolVersion }\n\t\t\t\t\t: {}),\n\t\t\t\t...(interruptedRuntime?.cursor !== undefined\n\t\t\t\t\t? { cursor: interruptedRuntime.cursor }\n\t\t\t\t\t: {}),\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t};\n\t\t}\n\t}\n\n\tconst git = await collectGitState(workspaceRoot);\n\tconst snapshot =\n\t\truntimeSnapshot ??\n\t\tbuildHostedRunnerSnapshot(maestroSessionId, workspaceRoot, runtime);\n\tconst workContinuity = collectHostedRunnerWorkContinuity(snapshot);\n\tconst retentionPolicy = buildHostedRunnerRetentionPolicy();\n\tconst platformEvidence = buildHostedRunnerPlatformEvidence({\n\t\thostedRunner,\n\t\tstatus,\n\t\tmaestroSessionId,\n\t\tcreatedAt: requestedAt,\n\t\tmanifestPath: snapshotPath,\n\t\truntime,\n\t\tworkContinuity,\n\t\tretentionPolicy,\n\t\treason: input.reason,\n\t\trequestedBy: input.requestedBy,\n\t});\n\tconst manifest: HostedRunnerSnapshotManifest = {\n\t\tprotocol_version: HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION,\n\t\trunner_session_id: hostedRunner.runnerSessionId,\n\t\t...(hostedRunner.workspaceId\n\t\t\t? { workspace_id: hostedRunner.workspaceId }\n\t\t\t: {}),\n\t\t...(hostedRunner.agentRunId\n\t\t\t? { agent_run_id: hostedRunner.agentRunId }\n\t\t\t: {}),\n\t\tmaestro_session_id: maestroSessionId,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\tcreated_at: requestedAt,\n\t\tworkspace_root: workspaceRoot,\n\t\truntime,\n\t\tworkspace_export: {\n\t\t\tmode: HostedRunnerWorkspaceExportModeValue.LocalPathContract,\n\t\t\tpaths: exportPaths,\n\t\t},\n\t\twork_continuity: workContinuity,\n\t\tplatform_evidence: platformEvidence,\n\t\tsnapshot,\n\t\tretention_policy: retentionPolicy,\n\t\t...(git ? { git } : {}),\n\t};\n\n\ttry {\n\t\tawait writeFile(\n\t\t\tsnapshotPath,\n\t\t\t`${JSON.stringify(manifest, null, 2)}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\t\thostedRunner.lastDrain = {\n\t\t\tstatus,\n\t\t\tmanifestPath: snapshotPath,\n\t\t\tdrainedAt: requestedAt,\n\t\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t\t...(input.requestedBy ? { requestedBy: input.requestedBy } : {}),\n\t\t};\n\t} catch (error) {\n\t\tconst errorMessage = `Hosted runner drain manifest persistence failed: ${\n\t\t\terror instanceof Error ? error.message : String(error)\n\t\t}`;\n\t\tawait recordPlatformDrain?.({\n\t\t\tstatus: HostedRunnerDrainStatusValue.Interrupted,\n\t\t\treason: input.reason,\n\t\t\trequestedBy: input.requestedBy,\n\t\t\tflushStatus: runtime.flush_status,\n\t\t\tmanifestPath: snapshotPath,\n\t\t\tplatformEvidence: buildHostedRunnerPlatformEvidence({\n\t\t\t\thostedRunner,\n\t\t\t\tstatus: HostedRunnerDrainStatusValue.Interrupted,\n\t\t\t\tmaestroSessionId,\n\t\t\t\tcreatedAt: requestedAt,\n\t\t\t\tmanifestPath: snapshotPath,\n\t\t\t\truntime,\n\t\t\t\tworkContinuity,\n\t\t\t\tretentionPolicy,\n\t\t\t\treason: input.reason,\n\t\t\t\trequestedBy: input.requestedBy,\n\t\t\t}),\n\t\t\terrorMessage,\n\t\t});\n\t\tthrow error;\n\t}\n\tawait recordPlatformDrain?.({\n\t\tstatus,\n\t\treason: input.reason,\n\t\trequestedBy: input.requestedBy,\n\t\tflushStatus: runtime.flush_status,\n\t\tmanifestPath: snapshotPath,\n\t\tplatformEvidence,\n\t\terrorMessage: runtime.error,\n\t});\n\n\treturn {\n\t\tstatus,\n\t\trunner_session_id: hostedRunner.runnerSessionId,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\tmanifest_path: snapshotPath,\n\t\tmanifest,\n\t};\n}\n\nasync function drainActiveRuntime(\n\tcontext: HostedRunnerDrainRuntimeContext,\n\tsessionId: string,\n\t_terminal: HostedRunnerRuntimeTerminalInput,\n): Promise<HostedRunnerRuntimeDrainResult | null> {\n\tconst runtime =\n\t\tcontext.headlessRuntimeService.getRuntimeBySessionId(sessionId);\n\tif (!runtime) {\n\t\treturn null;\n\t}\n\tconst snapshot = runtime.getSnapshot();\n\tconst sessionFile = runtime.getSessionFile();\n\tconst recordPlatformDrain = async (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => {\n\t\tawait runtime.recordHostedAgentRuntimeDrain({\n\t\t\tstatus: input.status,\n\t\t\treason: input.reason,\n\t\t\trequestedBy: input.requestedBy,\n\t\t\tflushStatus: input.flushStatus,\n\t\t\tmanifestPath: input.manifestPath,\n\t\t\tplatformEvidence: input.platformEvidence,\n\t\t\terrorMessage: input.errorMessage\n\t\t\t\t? `Hosted runner drain failed: ${input.errorMessage}`\n\t\t\t\t: undefined,\n\t\t});\n\t};\n\ttry {\n\t\tawait runtime.dispose();\n\t} catch (error) {\n\t\tthrow new HostedRunnerRuntimeDrainError(\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t{\n\t\t\t\tsessionId: snapshot.session_id,\n\t\t\t\tsessionFile,\n\t\t\t\tprotocolVersion: snapshot.protocolVersion,\n\t\t\t\tcursor: snapshot.cursor,\n\t\t\t\tsnapshot,\n\t\t\t\trecordPlatformDrain,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tsessionId: snapshot.session_id,\n\t\tsessionFile,\n\t\tprotocolVersion: snapshot.protocolVersion,\n\t\tcursor: snapshot.cursor,\n\t\tsnapshot,\n\t\trecordPlatformDrain,\n\t};\n}\n\nexport async function drainHostedRunnerForShutdown(\n\tcontext: HostedRunnerDrainRuntimeContext,\n\toptions: DrainHostedRunnerForShutdownOptions = {},\n): Promise<HostedRunnerDrainResult | null> {\n\treturn drainHostedRunner(\n\t\t{\n\t\t\treason: options.reason ?? HostedRunnerDrainReasonValue.ProcessShutdown,\n\t\t\trequestedBy:\n\t\t\t\toptions.requestedBy ??\n\t\t\t\tHostedRunnerDrainRequestedByValue.MaestroWebServer,\n\t\t},\n\t\t{\n\t\t\thostedRunner: context.hostedRunner,\n\t\t\tdrainRuntime: (sessionId, terminal) =>\n\t\t\t\tdrainActiveRuntime(context, sessionId, terminal),\n\t\t\tnow: options.now,\n\t\t},\n\t);\n}\n\nexport async function handleHostedRunnerDrain(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcontext: WebServerContext,\n): Promise<void> {\n\tres.setHeader(\"Cache-Control\", \"no-store\");\n\tconst body = await readJsonBody<Record<string, unknown>>(req, 64_000);\n\tconst input = parseHostedRunnerDrainInput(body);\n\tconst result = await drainHostedRunner(input, {\n\t\thostedRunner: context.hostedRunner,\n\t\tdrainRuntime: (sessionId, terminal) =>\n\t\t\tdrainActiveRuntime(context, sessionId, terminal),\n\t});\n\n\tif (!result) {\n\t\tsendJson(\n\t\t\tres,\n\t\t\t404,\n\t\t\t{\n\t\t\t\terror: \"hosted runner drain unavailable\",\n\t\t\t},\n\t\t\tcontext.corsHeaders,\n\t\t\treq,\n\t\t);\n\t\treturn;\n\t}\n\n\tsendJson(\n\t\tres,\n\t\tresult.status === HostedRunnerDrainStatusValue.Interrupted ? 503 : 200,\n\t\t{\n\t\t\tprotocol_version: HOSTED_RUNNER_DRAIN_PROTOCOL_VERSION,\n\t\t\tstatus: result.status,\n\t\t\trunner_session_id: result.runner_session_id,\n\t\t\trequested_by: result.requested_by,\n\t\t\treason: result.reason,\n\t\t\tmanifest_path: result.manifest_path,\n\t\t\tmanifest: result.manifest,\n\t\t},\n\t\tcontext.corsHeaders,\n\t\treq,\n\t);\n}\n"]}
1
+ {"version":3,"file":"hosted-runner-drain.js","sourceRoot":"","sources":["../../../src/server/handlers/hosted-runner-drain.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { mkdir, realpath, stat, writeFile } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport {\n\tCODEX_SUBAGENT_TOOL_PREFIX,\n\tCODEX_SUBAGENT_WORK_GRAPH_SCHEMA,\n\tHEADLESS_PROTOCOL_VERSION,\n\ttype HeadlessCodexSubagentContinuityEdge,\n\tactiveCodexSubagentStatus,\n\tbuildCodexSubagentContinuityEdges,\n\tcodexSubagentEdgeKey,\n\tcodexSubagentOperation,\n\tcodexSubagentStatusIsTerminal,\n\tcreateHeadlessRuntimeState,\n\tstringArray,\n} from \"../../cli/headless-protocol.js\";\nimport type { HostedRunnerContext, WebServerContext } from \"../app-context.js\";\nimport type { HeadlessRuntimeSnapshot } from \"../headless-runtime-service.js\";\nimport {\n\tHOSTED_RUNNER_LEASE_PROTOCOL_VERSION,\n\ttype HostedRunnerLeaseSnapshot,\n\tmarkHostedRunnerLeaseDraining,\n} from \"../hosted-runner-lease.js\";\nimport { ApiError, readJsonBody, sendJson } from \"../server-utils.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const HOSTED_RUNNER_DRAIN_PATH =\n\t\"/.well-known/evalops/remote-runner/drain\";\n\nexport const HOSTED_RUNNER_DRAIN_PROTOCOL_VERSION =\n\t\"evalops.remote-runner.drain.v1\";\n\nexport const HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION =\n\t\"evalops.remote-runner.snapshot-manifest.v1\";\n\nexport const HOSTED_RUNNER_RETENTION_POLICY_VERSION =\n\t\"evalops.remote-runner.retention.v1\";\n\nexport const HOSTED_RUNNER_WORK_CONTINUITY_VERSION =\n\t\"evalops.remote-runner.work-continuity.v1\";\n\nexport const HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION =\n\t\"evalops.remote-runner.platform-evidence.v1\";\n\nexport const HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION =\n\t\"evalops.remote-runner.runtime-continuity.v1\";\n\nexport enum HostedRunnerDrainStatusValue {\n\tDrained = \"drained\",\n\tInterrupted = \"interrupted\",\n}\n\nexport enum HostedRunnerRuntimeFlushStatusValue {\n\tCompleted = \"completed\",\n\tFailed = \"failed\",\n\tSkipped = \"skipped\",\n}\n\nexport enum HostedRunnerWorkspaceExportPathTypeValue {\n\tFile = \"file\",\n\tDirectory = \"directory\",\n\tOther = \"other\",\n}\n\nexport enum HostedRunnerWorkspaceExportModeValue {\n\tLocalPathContract = \"local_path_contract\",\n}\n\nexport enum HostedRunnerDrainReasonValue {\n\tKubernetesPreStop = \"kubernetes_prestop\",\n\tProcessShutdown = \"process_shutdown\",\n}\n\nexport enum HostedRunnerDrainRequestedByValue {\n\tKubernetesPreStop = \"kubernetes_prestop\",\n\tMaestroWebServer = \"maestro_web_server\",\n}\n\nexport type HostedRunnerDrainStatus = HostedRunnerDrainStatusValue;\nexport type HostedRunnerRuntimeFlushStatus =\n\tHostedRunnerRuntimeFlushStatusValue;\nexport type HostedRunnerWorkspaceExportPathType =\n\tHostedRunnerWorkspaceExportPathTypeValue;\nexport type HostedRunnerWorkspaceExportMode =\n\tHostedRunnerWorkspaceExportModeValue;\nexport type HostedRunnerDrainReason = HostedRunnerDrainReasonValue | string;\nexport type HostedRunnerDrainRequestedBy =\n\t| HostedRunnerDrainRequestedByValue\n\t| string;\n\nexport interface HostedRunnerRetentionPolicy {\n\tpolicy_version: typeof HOSTED_RUNNER_RETENTION_POLICY_VERSION;\n\tmanaged_by: \"platform\";\n\tvisibility: {\n\t\tcontrol_plane_metadata: \"operator\";\n\t\tworkspace_export: \"tenant\";\n\t\truntime_snapshot: \"internal\";\n\t\truntime_logs: \"operator\";\n\t};\n\tredaction: {\n\t\trequired_before_external_persistence: Array<\n\t\t\t\"runtime_snapshot\" | \"runtime_logs\"\n\t\t>;\n\t\tforbidden_plaintext: Array<\n\t\t\t| \"provider_credentials\"\n\t\t\t| \"tool_secrets\"\n\t\t\t| \"attach_tokens\"\n\t\t\t| \"artifact_access_tokens\"\n\t\t\t| \"raw_environment\"\n\t\t>;\n\t};\n}\n\nexport interface HostedRunnerDrainInput {\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n\texportPaths?: string[];\n}\n\nexport interface HostedRunnerRuntimeDrainResult {\n\tsessionId: string;\n\tsessionFile?: string;\n\tprotocolVersion?: string;\n\tcursor?: number;\n\tsnapshot?: HeadlessRuntimeSnapshot;\n\trecordPlatformDrain?: (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => Promise<void>;\n}\n\nclass HostedRunnerRuntimeDrainError extends Error {\n\treadonly sessionId: string;\n\treadonly sessionFile?: string;\n\treadonly protocolVersion?: string;\n\treadonly cursor?: number;\n\treadonly snapshot?: HeadlessRuntimeSnapshot;\n\treadonly recordPlatformDrain?: (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => Promise<void>;\n\n\tconstructor(message: string, runtime: HostedRunnerRuntimeDrainResult) {\n\t\tsuper(message);\n\t\tthis.name = \"HostedRunnerRuntimeDrainError\";\n\t\tthis.sessionId = runtime.sessionId;\n\t\tthis.sessionFile = runtime.sessionFile;\n\t\tthis.protocolVersion = runtime.protocolVersion;\n\t\tthis.cursor = runtime.cursor;\n\t\tthis.snapshot = runtime.snapshot;\n\t\tthis.recordPlatformDrain = runtime.recordPlatformDrain;\n\t}\n}\n\nexport interface HostedRunnerWorkspaceExportPath {\n\tinput: string;\n\tpath: string;\n\trelative_path: string;\n\ttype: HostedRunnerWorkspaceExportPathType;\n}\n\nexport interface HostedRunnerSnapshotManifest {\n\tprotocol_version: typeof HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION;\n\trunner_session_id: string;\n\tworkspace_id?: string;\n\tagent_run_id?: string;\n\tmaestro_session_id: string;\n\treason?: string;\n\trequested_by?: string;\n\tcreated_at: string;\n\tworkspace_root: string;\n\truntime: {\n\t\tflush_status: HostedRunnerRuntimeFlushStatus;\n\t\terror?: string;\n\t\tsession_id: string;\n\t\tsession_file?: string;\n\t\tprotocol_version?: string;\n\t\tcursor?: number;\n\t};\n\tworkspace_export: {\n\t\tmode: HostedRunnerWorkspaceExportMode;\n\t\tpaths: HostedRunnerWorkspaceExportPath[];\n\t};\n\truntime_continuity: HostedRunnerRuntimeContinuity;\n\twork_continuity: HostedRunnerWorkContinuity;\n\tplatform_evidence: HostedRunnerPlatformEvidence;\n\tsnapshot: HeadlessRuntimeSnapshot;\n\tretention_policy: HostedRunnerRetentionPolicy;\n\tgit?: {\n\t\tcommit?: string;\n\t\tbranch?: string;\n\t\tdirty?: boolean;\n\t};\n}\n\nexport interface HostedRunnerRuntimeContinuity {\n\tprotocol_version: typeof HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION;\n\thandoff: \"drain_restore\";\n\tsource_runner_session_id: string;\n\tsource_owner_instance_id?: string;\n\tsource_process_id: number;\n\tsource_runtime_lease?: {\n\t\tprotocol_version: typeof HOSTED_RUNNER_LEASE_PROTOCOL_VERSION;\n\t\tstate: HostedRunnerLeaseSnapshot[\"state\"];\n\t\tgeneration: number;\n\t\tmaestro_session_id?: string;\n\t\tupdated_at: string;\n\t};\n\trestore_environment_key: \"MAESTRO_REMOTE_RUNNER_RESTORE_MANIFEST\";\n\trestore_manifest_path: string;\n\tevidence_refs: string[];\n}\n\nexport interface HostedRunnerWorkContinuity {\n\tprotocol_version: typeof HOSTED_RUNNER_WORK_CONTINUITY_VERSION;\n\tcodex_subagent_schema_version: typeof CODEX_SUBAGENT_WORK_GRAPH_SCHEMA;\n\tactive_tool_count: number;\n\ttracked_tool_count: number;\n\tpending_request_count: number;\n\tcodex_subagent_tool_call_ids: string[];\n\tcodex_subagent_child_run_ids: string[];\n\tcodex_subagent_thread_ids: string[];\n\tcodex_subagent_edges?: HeadlessCodexSubagentContinuityEdge[];\n}\n\nexport interface HostedRunnerPlatformEvidence {\n\tprotocol_version: typeof HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION;\n\tevent_type: \"hosted_runner_drain_manifest_recorded\";\n\trunner_session_id: string;\n\tworkspace_id?: string;\n\tagent_run_id?: string;\n\tmaestro_session_id: string;\n\tstatus: HostedRunnerDrainStatus;\n\truntime_flush_status: HostedRunnerRuntimeFlushStatus;\n\tmanifest_path: string;\n\tmanifest_protocol_version: typeof HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION;\n\tcreated_at: string;\n\treason?: string;\n\trequested_by?: string;\n\twork_continuity: {\n\t\tprotocol_version: typeof HOSTED_RUNNER_WORK_CONTINUITY_VERSION;\n\t\tcodex_subagent_schema_version: typeof CODEX_SUBAGENT_WORK_GRAPH_SCHEMA;\n\t\tactive_tool_count: number;\n\t\ttracked_tool_count: number;\n\t\tpending_request_count: number;\n\t\tcodex_subagent_tool_call_count: number;\n\t\tcodex_subagent_child_run_count: number;\n\t\tcodex_subagent_thread_count: number;\n\t\tcodex_subagent_edge_count: number;\n\t\tcodex_subagent_tool_call_ids: string[];\n\t\tcodex_subagent_child_run_ids: string[];\n\t\tcodex_subagent_thread_ids: string[];\n\t\tcodex_subagent_edges?: HeadlessCodexSubagentContinuityEdge[];\n\t};\n\truntime_continuity: {\n\t\tprotocol_version: typeof HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION;\n\t\thandoff: \"drain_restore\";\n\t\tsource_owner_instance_id?: string;\n\t\tsource_process_id: number;\n\t\tsource_runtime_lease_generation?: number;\n\t\trestore_manifest_path: string;\n\t};\n\tretention: {\n\t\tpolicy_version: typeof HOSTED_RUNNER_RETENTION_POLICY_VERSION;\n\t\tcontrol_plane_metadata_visibility: \"operator\";\n\t\truntime_snapshot_visibility: \"internal\";\n\t\tredaction_required_before_external_persistence: Array<\n\t\t\t\"runtime_snapshot\" | \"runtime_logs\"\n\t\t>;\n\t};\n\tevidence_refs: string[];\n}\n\nexport interface HostedRunnerPlatformDrainRecordInput {\n\tstatus: HostedRunnerDrainStatus;\n\treason?: string;\n\trequestedBy?: string;\n\tflushStatus: HostedRunnerRuntimeFlushStatus;\n\tmanifestPath: string;\n\tplatformEvidence: HostedRunnerPlatformEvidence;\n\terrorMessage?: string;\n}\n\nexport interface HostedRunnerDrainResult {\n\tstatus: HostedRunnerDrainStatus;\n\trunner_session_id: string;\n\treason?: string;\n\trequested_by?: string;\n\tmanifest_path: string;\n\tmanifest: HostedRunnerSnapshotManifest;\n}\n\nexport interface DrainHostedRunnerOptions {\n\thostedRunner?: HostedRunnerContext;\n\tdrainRuntime?: (\n\t\tsessionId: string,\n\t\tterminal: HostedRunnerRuntimeTerminalInput,\n\t) => Promise<HostedRunnerRuntimeDrainResult | null>;\n\tnow?: () => Date;\n}\n\ninterface HostedRunnerDrainRuntimeContext {\n\thostedRunner?: HostedRunnerContext;\n\theadlessRuntimeService: Pick<\n\t\tWebServerContext[\"headlessRuntimeService\"],\n\t\t\"getRuntimeBySessionId\"\n\t>;\n}\n\nexport interface DrainHostedRunnerForShutdownOptions {\n\tnow?: () => Date;\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n}\n\ninterface HostedRunnerRuntimeTerminalInput {\n\treason?: HostedRunnerDrainReason;\n\trequestedBy?: HostedRunnerDrainRequestedBy;\n\tmanifestPath?: string;\n}\n\nfunction getString(value: unknown, field: string): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new ApiError(400, `${field} must be a string`);\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed || undefined;\n}\n\nfunction getStringArray(value: unknown, field: string): string[] | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(value)) {\n\t\tthrow new ApiError(400, `${field} must be an array of strings`);\n\t}\n\tconst strings = value.map((entry, index) => {\n\t\tif (typeof entry !== \"string\" || !entry.trim()) {\n\t\t\tthrow new ApiError(400, `${field}[${index}] must be a non-empty string`);\n\t\t}\n\t\tif (entry.includes(\"\\0\")) {\n\t\t\tthrow new ApiError(400, `${field}[${index}] contains a null byte`);\n\t\t}\n\t\treturn entry.trim();\n\t});\n\treturn strings.length ? strings : undefined;\n}\n\nexport function parseHostedRunnerDrainInput(\n\tbody: unknown,\n): HostedRunnerDrainInput {\n\tif (body === undefined || body === null) {\n\t\treturn {};\n\t}\n\tif (typeof body !== \"object\" || Array.isArray(body)) {\n\t\tthrow new ApiError(400, \"Drain payload must be a JSON object\");\n\t}\n\tconst record = body as Record<string, unknown>;\n\treturn {\n\t\treason:\n\t\t\tgetString(record.reason, \"reason\") ??\n\t\t\tgetString(record.stop_reason, \"stop_reason\"),\n\t\trequestedBy:\n\t\t\tgetString(record.requested_by, \"requested_by\") ??\n\t\t\tgetString(record.requestedBy, \"requestedBy\"),\n\t\texportPaths:\n\t\t\tgetStringArray(record.export_paths, \"export_paths\") ??\n\t\t\tgetStringArray(record.exportPaths, \"exportPaths\"),\n\t};\n}\n\nfunction isWithinPath(root: string, target: string): boolean {\n\tconst rel = relative(root, target);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nfunction safeManifestFileName(\n\trunnerSessionId: string,\n\trequestedAt: string,\n): string {\n\tconst safeSession = runnerSessionId.replace(/[^A-Za-z0-9_.-]/g, \"_\");\n\tconst safeTimestamp = requestedAt.replace(/[^A-Za-z0-9_.-]/g, \"_\");\n\treturn `${safeSession}-${safeTimestamp}.json`;\n}\n\nasync function resolveWorkspaceRoot(\n\thostedRunner: HostedRunnerContext,\n): Promise<string> {\n\ttry {\n\t\tconst workspaceRoot = await realpath(hostedRunner.workspaceRoot);\n\t\tconst stats = await stat(workspaceRoot);\n\t\tif (!stats.isDirectory()) {\n\t\t\tthrow new ApiError(\n\t\t\t\t503,\n\t\t\t\t\"Hosted runner workspace root is not a directory\",\n\t\t\t);\n\t\t}\n\t\treturn workspaceRoot;\n\t} catch (error) {\n\t\tif (error instanceof ApiError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new ApiError(\n\t\t\t503,\n\t\t\t`Hosted runner workspace root is unavailable: ${\n\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t}`,\n\t\t);\n\t}\n}\n\nasync function resolveWorkspaceExportPaths(\n\tworkspaceRoot: string,\n\texportPaths: readonly string[] | undefined,\n): Promise<HostedRunnerWorkspaceExportPath[]> {\n\tconst requested = exportPaths?.length ? exportPaths : [\".\"];\n\tconst paths: HostedRunnerWorkspaceExportPath[] = [];\n\tfor (const input of requested) {\n\t\tconst logicalPath = isAbsolute(input)\n\t\t\t? resolve(input)\n\t\t\t: resolve(workspaceRoot, input);\n\t\tlet realPath: string;\n\t\ttry {\n\t\t\trealPath = await realpath(logicalPath);\n\t\t} catch (error) {\n\t\t\tthrow new ApiError(\n\t\t\t\t400,\n\t\t\t\t`Export path is unavailable: ${input} (${\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t\tif (!isWithinPath(workspaceRoot, realPath)) {\n\t\t\tthrow new ApiError(\n\t\t\t\t400,\n\t\t\t\t`Export path escapes hosted runner workspace root: ${input}`,\n\t\t\t);\n\t\t}\n\t\tconst pathStat = await stat(realPath);\n\t\tpaths.push({\n\t\t\tinput,\n\t\t\tpath: realPath,\n\t\t\trelative_path: relative(workspaceRoot, realPath) || \".\",\n\t\t\ttype: pathStat.isDirectory()\n\t\t\t\t? HostedRunnerWorkspaceExportPathTypeValue.Directory\n\t\t\t\t: pathStat.isFile()\n\t\t\t\t\t? HostedRunnerWorkspaceExportPathTypeValue.File\n\t\t\t\t\t: HostedRunnerWorkspaceExportPathTypeValue.Other,\n\t\t});\n\t}\n\treturn paths;\n}\n\nasync function gitOutput(\n\tworkspaceRoot: string,\n\targs: readonly string[],\n): Promise<string | undefined> {\n\ttry {\n\t\tconst { stdout } = await execFileAsync(\n\t\t\t\"git\",\n\t\t\t[\"-C\", workspaceRoot, ...args],\n\t\t\t{\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\ttimeout: 1000,\n\t\t\t},\n\t\t);\n\t\tconst output = stdout.trim();\n\t\treturn output || undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function collectGitState(\n\tworkspaceRoot: string,\n): Promise<HostedRunnerSnapshotManifest[\"git\"] | undefined> {\n\tconst [commit, branch, status] = await Promise.all([\n\t\tgitOutput(workspaceRoot, [\"rev-parse\", \"HEAD\"]),\n\t\tgitOutput(workspaceRoot, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]),\n\t\tgitOutput(workspaceRoot, [\"status\", \"--porcelain\"]),\n\t]);\n\tif (!commit && !branch && status === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(commit ? { commit } : {}),\n\t\t...(branch && branch !== \"HEAD\" ? { branch } : {}),\n\t\tdirty: Boolean(status),\n\t};\n}\n\nfunction buildHostedRunnerSnapshot(\n\tsessionId: string,\n\tworkspaceRoot: string,\n\truntime: HostedRunnerSnapshotManifest[\"runtime\"],\n): HeadlessRuntimeSnapshot {\n\tconst state = createHeadlessRuntimeState();\n\tstate.protocol_version =\n\t\truntime.protocol_version ?? HEADLESS_PROTOCOL_VERSION;\n\tstate.session_id = sessionId;\n\tstate.cwd = workspaceRoot;\n\tstate.provider = \"typescript\";\n\tstate.model = \"typescript-hosted-runner\";\n\tstate.is_ready =\n\t\truntime.flush_status === HostedRunnerRuntimeFlushStatusValue.Completed;\n\tstate.last_status =\n\t\truntime.flush_status === HostedRunnerRuntimeFlushStatusValue.Completed\n\t\t\t? \"Drained\"\n\t\t\t: runtime.flush_status === HostedRunnerRuntimeFlushStatusValue.Failed\n\t\t\t\t? \"Drain interrupted before runtime flush completed\"\n\t\t\t\t: \"Drain skipped: no runtime activity was available\";\n\tif (runtime.error) {\n\t\tstate.last_error = runtime.error;\n\t\tstate.last_error_type = \"protocol\";\n\t}\n\treturn {\n\t\tprotocolVersion: runtime.protocol_version ?? HEADLESS_PROTOCOL_VERSION,\n\t\tsession_id: sessionId,\n\t\tcursor: runtime.cursor ?? 0,\n\t\tlast_init: null,\n\t\tstate,\n\t};\n}\n\nfunction buildHostedRunnerRetentionPolicy(): HostedRunnerRetentionPolicy {\n\treturn {\n\t\tpolicy_version: HOSTED_RUNNER_RETENTION_POLICY_VERSION,\n\t\tmanaged_by: \"platform\",\n\t\tvisibility: {\n\t\t\tcontrol_plane_metadata: \"operator\",\n\t\t\tworkspace_export: \"tenant\",\n\t\t\truntime_snapshot: \"internal\",\n\t\t\truntime_logs: \"operator\",\n\t\t},\n\t\tredaction: {\n\t\t\trequired_before_external_persistence: [\n\t\t\t\t\"runtime_snapshot\",\n\t\t\t\t\"runtime_logs\",\n\t\t\t],\n\t\t\tforbidden_plaintext: [\n\t\t\t\t\"provider_credentials\",\n\t\t\t\t\"tool_secrets\",\n\t\t\t\t\"attach_tokens\",\n\t\t\t\t\"artifact_access_tokens\",\n\t\t\t\t\"raw_environment\",\n\t\t\t],\n\t\t},\n\t};\n}\n\nfunction buildHostedRunnerRuntimeContinuity(input: {\n\thostedRunner: HostedRunnerContext;\n\tmaestroSessionId: string;\n\tmanifestPath: string;\n\truntime: HostedRunnerSnapshotManifest[\"runtime\"];\n\tleaseSnapshot: HostedRunnerLeaseSnapshot;\n}): HostedRunnerRuntimeContinuity {\n\treturn {\n\t\tprotocol_version: HOSTED_RUNNER_RUNTIME_CONTINUITY_VERSION,\n\t\thandoff: \"drain_restore\",\n\t\tsource_runner_session_id: input.hostedRunner.runnerSessionId,\n\t\t...(input.hostedRunner.ownerInstanceId\n\t\t\t? { source_owner_instance_id: input.hostedRunner.ownerInstanceId }\n\t\t\t: {}),\n\t\tsource_process_id: process.pid,\n\t\tsource_runtime_lease: {\n\t\t\tprotocol_version: HOSTED_RUNNER_LEASE_PROTOCOL_VERSION,\n\t\t\tstate: input.leaseSnapshot.state,\n\t\t\tgeneration: input.leaseSnapshot.generation,\n\t\t\t...(input.leaseSnapshot.maestroSessionId\n\t\t\t\t? { maestro_session_id: input.leaseSnapshot.maestroSessionId }\n\t\t\t\t: {}),\n\t\t\tupdated_at: input.leaseSnapshot.updatedAt,\n\t\t},\n\t\trestore_environment_key: \"MAESTRO_REMOTE_RUNNER_RESTORE_MANIFEST\",\n\t\trestore_manifest_path: input.manifestPath,\n\t\tevidence_refs: [\n\t\t\t`remote-runner://sessions/${input.hostedRunner.runnerSessionId}/drain#snapshot`,\n\t\t\t`maestro://headless/sessions/${input.maestroSessionId}#cursor:${\n\t\t\t\tinput.runtime.cursor ?? 0\n\t\t\t}`,\n\t\t],\n\t};\n}\n\nfunction buildHostedRunnerPlatformEvidence(input: {\n\thostedRunner: HostedRunnerContext;\n\tstatus: HostedRunnerDrainStatus;\n\tmaestroSessionId: string;\n\tcreatedAt: string;\n\tmanifestPath: string;\n\truntime: HostedRunnerSnapshotManifest[\"runtime\"];\n\truntimeContinuity: HostedRunnerRuntimeContinuity;\n\tworkContinuity: HostedRunnerWorkContinuity;\n\tretentionPolicy: HostedRunnerRetentionPolicy;\n\treason?: string;\n\trequestedBy?: string;\n}): HostedRunnerPlatformEvidence {\n\tconst edges = input.workContinuity.codex_subagent_edges ?? [];\n\treturn {\n\t\tprotocol_version: HOSTED_RUNNER_PLATFORM_EVIDENCE_VERSION,\n\t\tevent_type: \"hosted_runner_drain_manifest_recorded\",\n\t\trunner_session_id: input.hostedRunner.runnerSessionId,\n\t\t...(input.hostedRunner.workspaceId\n\t\t\t? { workspace_id: input.hostedRunner.workspaceId }\n\t\t\t: {}),\n\t\t...(input.hostedRunner.agentRunId\n\t\t\t? { agent_run_id: input.hostedRunner.agentRunId }\n\t\t\t: {}),\n\t\tmaestro_session_id: input.maestroSessionId,\n\t\tstatus: input.status,\n\t\truntime_flush_status: input.runtime.flush_status,\n\t\tmanifest_path: input.manifestPath,\n\t\tmanifest_protocol_version: HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION,\n\t\tcreated_at: input.createdAt,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\twork_continuity: {\n\t\t\tprotocol_version: input.workContinuity.protocol_version,\n\t\t\tcodex_subagent_schema_version:\n\t\t\t\tinput.workContinuity.codex_subagent_schema_version,\n\t\t\tactive_tool_count: input.workContinuity.active_tool_count,\n\t\t\ttracked_tool_count: input.workContinuity.tracked_tool_count,\n\t\t\tpending_request_count: input.workContinuity.pending_request_count,\n\t\t\tcodex_subagent_tool_call_count:\n\t\t\t\tinput.workContinuity.codex_subagent_tool_call_ids.length,\n\t\t\tcodex_subagent_child_run_count:\n\t\t\t\tinput.workContinuity.codex_subagent_child_run_ids.length,\n\t\t\tcodex_subagent_thread_count:\n\t\t\t\tinput.workContinuity.codex_subagent_thread_ids.length,\n\t\t\tcodex_subagent_edge_count: edges.length,\n\t\t\tcodex_subagent_tool_call_ids:\n\t\t\t\tinput.workContinuity.codex_subagent_tool_call_ids,\n\t\t\tcodex_subagent_child_run_ids:\n\t\t\t\tinput.workContinuity.codex_subagent_child_run_ids,\n\t\t\tcodex_subagent_thread_ids: input.workContinuity.codex_subagent_thread_ids,\n\t\t\t...(edges.length > 0 ? { codex_subagent_edges: edges } : {}),\n\t\t},\n\t\truntime_continuity: {\n\t\t\tprotocol_version: input.runtimeContinuity.protocol_version,\n\t\t\thandoff: input.runtimeContinuity.handoff,\n\t\t\t...(input.runtimeContinuity.source_owner_instance_id\n\t\t\t\t? {\n\t\t\t\t\t\tsource_owner_instance_id:\n\t\t\t\t\t\t\tinput.runtimeContinuity.source_owner_instance_id,\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\tsource_process_id: input.runtimeContinuity.source_process_id,\n\t\t\t...(input.runtimeContinuity.source_runtime_lease\n\t\t\t\t? {\n\t\t\t\t\t\tsource_runtime_lease_generation:\n\t\t\t\t\t\t\tinput.runtimeContinuity.source_runtime_lease.generation,\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\trestore_manifest_path: input.runtimeContinuity.restore_manifest_path,\n\t\t},\n\t\tretention: {\n\t\t\tpolicy_version: input.retentionPolicy.policy_version,\n\t\t\tcontrol_plane_metadata_visibility:\n\t\t\t\tinput.retentionPolicy.visibility.control_plane_metadata,\n\t\t\truntime_snapshot_visibility:\n\t\t\t\tinput.retentionPolicy.visibility.runtime_snapshot,\n\t\t\tredaction_required_before_external_persistence:\n\t\t\t\tinput.retentionPolicy.redaction.required_before_external_persistence,\n\t\t},\n\t\tevidence_refs: [\n\t\t\t`remote-runner://sessions/${input.hostedRunner.runnerSessionId}/drain#manifest`,\n\t\t\t`maestro://headless/sessions/${input.maestroSessionId}#drain`,\n\t\t\t...(input.hostedRunner.agentRunId\n\t\t\t\t? [`platform-agent-run:${input.hostedRunner.agentRunId}`]\n\t\t\t\t: []),\n\t\t],\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction collectCodexSubagentEdgesFromSource(\n\tsource: {\n\t\tcall_id: string;\n\t\ttool_execution_id?: string;\n\t\ttool: string;\n\t\targs?: unknown;\n\t},\n\tedges: Map<string, HeadlessCodexSubagentContinuityEdge>,\n): void {\n\tconst operation = codexSubagentOperation(source.tool);\n\tif (!operation) {\n\t\treturn;\n\t}\n\tconst status = activeCodexSubagentStatus(operation);\n\tfor (const edge of buildCodexSubagentContinuityEdges({\n\t\tcall_id: source.call_id,\n\t\ttool_execution_id: source.tool_execution_id,\n\t\ttool: source.tool,\n\t\targs: source.args,\n\t\tstatus,\n\t})) {\n\t\tedges.set(codexSubagentEdgeKey(edge), edge);\n\t}\n}\n\nfunction collectCodexWorkArgs(\n\targs: unknown,\n\tchildRunIds: Set<string>,\n\tthreadIds: Set<string>,\n\tincludeLooseArgs = false,\n): boolean {\n\tif (!isRecord(args)) {\n\t\treturn false;\n\t}\n\tconst graph = args.codexWorkGraph ?? args.codex_work_graph;\n\tconst hasCodexGraph =\n\t\tisRecord(graph) &&\n\t\t(graph.schemaVersion === CODEX_SUBAGENT_WORK_GRAPH_SCHEMA ||\n\t\t\tgraph.schema_version === CODEX_SUBAGENT_WORK_GRAPH_SCHEMA);\n\tif (!includeLooseArgs && !hasCodexGraph) {\n\t\treturn false;\n\t}\n\tfor (const childRunId of stringArray(\n\t\targs.childRunIds ?? args.child_run_ids,\n\t)) {\n\t\tchildRunIds.add(childRunId);\n\t}\n\tfor (const threadId of stringArray(\n\t\targs.receiverThreadIds ?? args.receiver_thread_ids,\n\t)) {\n\t\tthreadIds.add(threadId);\n\t}\n\tif (isRecord(graph)) {\n\t\tconst graphChildRuns = graph.childRuns ?? graph.child_runs;\n\t\tfor (const childRun of Array.isArray(graphChildRuns)\n\t\t\t? graphChildRuns\n\t\t\t: []) {\n\t\t\tif (!isRecord(childRun)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst childRunId = childRun.childRunId ?? childRun.child_run_id;\n\t\t\tif (typeof childRunId === \"string\" && childRunId) {\n\t\t\t\tchildRunIds.add(childRunId);\n\t\t\t}\n\t\t\tconst threadId = childRun.threadId ?? childRun.thread_id;\n\t\t\tif (typeof threadId === \"string\" && threadId) {\n\t\t\t\tthreadIds.add(threadId);\n\t\t\t}\n\t\t}\n\t}\n\treturn includeLooseArgs || hasCodexGraph;\n}\n\nfunction collectHostedRunnerWorkContinuity(\n\tsnapshot: HeadlessRuntimeSnapshot,\n): HostedRunnerWorkContinuity {\n\tconst state = snapshot.state;\n\tconst codexToolCallIds = new Set<string>();\n\tconst childRunIds = new Set<string>();\n\tconst threadIds = new Set<string>();\n\tconst codexSubagentEdges = new Map<\n\t\tstring,\n\t\tHeadlessCodexSubagentContinuityEdge\n\t>();\n\tfor (const edge of state.codex_subagent_edges ?? []) {\n\t\tcodexSubagentEdges.set(codexSubagentEdgeKey(edge), edge);\n\t\tif (edge.spawn_tool_call_id) {\n\t\t\tcodexToolCallIds.add(edge.spawn_tool_call_id);\n\t\t}\n\t\tif (edge.wait_tool_call_id) {\n\t\t\tcodexToolCallIds.add(edge.wait_tool_call_id);\n\t\t}\n\t\tif (edge.child_run_id) {\n\t\t\tchildRunIds.add(edge.child_run_id);\n\t\t}\n\t\tif (edge.thread_id) {\n\t\t\tthreadIds.add(edge.thread_id);\n\t\t}\n\t}\n\tconst trackedSources = [\n\t\t...state.tracked_tools,\n\t\t...state.pending_approvals,\n\t\t...state.pending_client_tools,\n\t\t...state.pending_mcp_elicitations,\n\t\t...state.pending_user_inputs,\n\t\t...state.pending_tool_retries,\n\t];\n\tconst codexTrackedSourceCallIds = new Set<string>();\n\tfor (const source of trackedSources) {\n\t\tconst tool = source.tool;\n\t\tconst isCodexSubagentTool = tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX);\n\t\tconst hasCodexWorkArgs = collectCodexWorkArgs(\n\t\t\tsource.args,\n\t\t\tchildRunIds,\n\t\t\tthreadIds,\n\t\t\tisCodexSubagentTool,\n\t\t);\n\t\tif (isCodexSubagentTool || hasCodexWorkArgs) {\n\t\t\tcodexTrackedSourceCallIds.add(source.call_id);\n\t\t\tcodexToolCallIds.add(source.call_id);\n\t\t\tcollectCodexSubagentEdgesFromSource(source, codexSubagentEdges);\n\t\t}\n\t}\n\tfor (const activeTool of state.active_tools) {\n\t\tif (activeTool.tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX)) {\n\t\t\tconst hasTrackedSource = codexToolCallIds.has(activeTool.call_id);\n\t\t\tcodexToolCallIds.add(activeTool.call_id);\n\t\t\tif (!hasTrackedSource) {\n\t\t\t\tcollectCodexSubagentEdgesFromSource(\n\t\t\t\t\t{ call_id: activeTool.call_id, tool: activeTool.tool },\n\t\t\t\t\tcodexSubagentEdges,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tconst sortedEdges = [...codexSubagentEdges.values()].sort((left, right) =>\n\t\tcodexSubagentEdgeKey(left).localeCompare(codexSubagentEdgeKey(right)),\n\t);\n\tconst activeCodexSubagentEdgeCount = sortedEdges.filter(\n\t\t(edge) => !codexSubagentStatusIsTerminal(edge.status),\n\t).length;\n\tconst nonCodexActiveToolCount = state.active_tools.filter(\n\t\t(tool) => !tool.tool.startsWith(CODEX_SUBAGENT_TOOL_PREFIX),\n\t).length;\n\tconst nonCodexTrackedToolCount = state.tracked_tools.filter(\n\t\t(tool) => !codexTrackedSourceCallIds.has(tool.call_id),\n\t).length;\n\tconst trackedCodexSubagentCount = Math.max(\n\t\tcodexToolCallIds.size,\n\t\tsortedEdges.length,\n\t);\n\treturn {\n\t\tprotocol_version: HOSTED_RUNNER_WORK_CONTINUITY_VERSION,\n\t\tcodex_subagent_schema_version: CODEX_SUBAGENT_WORK_GRAPH_SCHEMA,\n\t\tactive_tool_count:\n\t\t\tsortedEdges.length > 0\n\t\t\t\t? nonCodexActiveToolCount + activeCodexSubagentEdgeCount\n\t\t\t\t: state.active_tools.length,\n\t\ttracked_tool_count:\n\t\t\tsortedEdges.length > 0\n\t\t\t\t? nonCodexTrackedToolCount + trackedCodexSubagentCount\n\t\t\t\t: state.tracked_tools.length,\n\t\tpending_request_count:\n\t\t\tstate.pending_approvals.length +\n\t\t\tstate.pending_client_tools.length +\n\t\t\tstate.pending_mcp_elicitations.length +\n\t\t\tstate.pending_user_inputs.length +\n\t\t\tstate.pending_tool_retries.length,\n\t\tcodex_subagent_tool_call_ids: [...codexToolCallIds].sort(),\n\t\tcodex_subagent_child_run_ids: [...childRunIds].sort(),\n\t\tcodex_subagent_thread_ids: [...threadIds].sort(),\n\t\t...(sortedEdges.length > 0 ? { codex_subagent_edges: sortedEdges } : {}),\n\t};\n}\n\nexport async function drainHostedRunner(\n\tinput: HostedRunnerDrainInput,\n\toptions: DrainHostedRunnerOptions,\n): Promise<HostedRunnerDrainResult | null> {\n\tconst hostedRunner = options.hostedRunner;\n\tif (!hostedRunner?.enabled || !hostedRunner.runnerSessionId) {\n\t\treturn null;\n\t}\n\n\tconst requestedAtDate = options.now?.() ?? new Date();\n\tconst leaseSnapshot = markHostedRunnerLeaseDraining(\n\t\thostedRunner,\n\t\trequestedAtDate,\n\t);\n\tconst requestedAt = requestedAtDate.toISOString();\n\tconst workspaceRoot = await resolveWorkspaceRoot(hostedRunner);\n\tconst snapshotRoot = resolve(\n\t\tworkspaceRoot,\n\t\thostedRunner.snapshotRoot ?? \".maestro/runner-snapshots\",\n\t);\n\tawait mkdir(snapshotRoot, { recursive: true });\n\tconst snapshotPath = join(\n\t\tsnapshotRoot,\n\t\tsafeManifestFileName(hostedRunner.runnerSessionId, requestedAt),\n\t);\n\tconst exportPaths = await resolveWorkspaceExportPaths(\n\t\tworkspaceRoot,\n\t\tinput.exportPaths,\n\t);\n\tconst activeSessionId =\n\t\thostedRunner.activeMaestroSessionId ??\n\t\thostedRunner.configuredMaestroSessionId;\n\tconst maestroSessionId = activeSessionId ?? hostedRunner.runnerSessionId;\n\n\tlet status: HostedRunnerDrainStatus = HostedRunnerDrainStatusValue.Drained;\n\tlet runtime: HostedRunnerSnapshotManifest[\"runtime\"] = {\n\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Skipped,\n\t\tsession_id: maestroSessionId,\n\t};\n\tlet runtimeSnapshot: HeadlessRuntimeSnapshot | undefined;\n\tlet recordPlatformDrain:\n\t\t| ((input: HostedRunnerPlatformDrainRecordInput) => Promise<void>)\n\t\t| undefined;\n\n\tif (activeSessionId && options.drainRuntime) {\n\t\ttry {\n\t\t\tconst runtimeResult = await options.drainRuntime(activeSessionId, {\n\t\t\t\treason: input.reason,\n\t\t\t\trequestedBy: input.requestedBy,\n\t\t\t\tmanifestPath: snapshotPath,\n\t\t\t});\n\t\t\tconst runtimeProtocolVersion =\n\t\t\t\truntimeResult?.protocolVersion ??\n\t\t\t\truntimeResult?.snapshot?.protocolVersion;\n\t\t\tconst runtimeCursor =\n\t\t\t\truntimeResult?.cursor ?? runtimeResult?.snapshot?.cursor;\n\t\t\truntime = runtimeResult\n\t\t\t\t? {\n\t\t\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Completed,\n\t\t\t\t\t\tsession_id: runtimeResult.sessionId,\n\t\t\t\t\t\t...(runtimeResult.sessionFile\n\t\t\t\t\t\t\t? { session_file: runtimeResult.sessionFile }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(runtimeProtocolVersion\n\t\t\t\t\t\t\t? { protocol_version: runtimeProtocolVersion }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(runtimeCursor !== undefined ? { cursor: runtimeCursor } : {}),\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Skipped,\n\t\t\t\t\t\tsession_id: activeSessionId,\n\t\t\t\t\t};\n\t\t\truntimeSnapshot = runtimeResult?.snapshot;\n\t\t\trecordPlatformDrain = runtimeResult?.recordPlatformDrain;\n\t\t} catch (error) {\n\t\t\tstatus = HostedRunnerDrainStatusValue.Interrupted;\n\t\t\tconst interruptedRuntime =\n\t\t\t\terror instanceof HostedRunnerRuntimeDrainError ? error : undefined;\n\t\t\truntimeSnapshot = interruptedRuntime?.snapshot;\n\t\t\trecordPlatformDrain = interruptedRuntime?.recordPlatformDrain;\n\t\t\truntime = {\n\t\t\t\tflush_status: HostedRunnerRuntimeFlushStatusValue.Failed,\n\t\t\t\tsession_id: interruptedRuntime?.sessionId ?? activeSessionId,\n\t\t\t\t...(interruptedRuntime?.sessionFile\n\t\t\t\t\t? { session_file: interruptedRuntime.sessionFile }\n\t\t\t\t\t: {}),\n\t\t\t\t...(interruptedRuntime?.protocolVersion\n\t\t\t\t\t? { protocol_version: interruptedRuntime.protocolVersion }\n\t\t\t\t\t: {}),\n\t\t\t\t...(interruptedRuntime?.cursor !== undefined\n\t\t\t\t\t? { cursor: interruptedRuntime.cursor }\n\t\t\t\t\t: {}),\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t};\n\t\t}\n\t}\n\n\tconst git = await collectGitState(workspaceRoot);\n\tconst snapshot =\n\t\truntimeSnapshot ??\n\t\tbuildHostedRunnerSnapshot(maestroSessionId, workspaceRoot, runtime);\n\tconst workContinuity = collectHostedRunnerWorkContinuity(snapshot);\n\tconst retentionPolicy = buildHostedRunnerRetentionPolicy();\n\tconst runtimeContinuity = buildHostedRunnerRuntimeContinuity({\n\t\thostedRunner,\n\t\tmaestroSessionId,\n\t\tmanifestPath: snapshotPath,\n\t\truntime,\n\t\tleaseSnapshot,\n\t});\n\tconst platformEvidence = buildHostedRunnerPlatformEvidence({\n\t\thostedRunner,\n\t\tstatus,\n\t\tmaestroSessionId,\n\t\tcreatedAt: requestedAt,\n\t\tmanifestPath: snapshotPath,\n\t\truntime,\n\t\truntimeContinuity,\n\t\tworkContinuity,\n\t\tretentionPolicy,\n\t\treason: input.reason,\n\t\trequestedBy: input.requestedBy,\n\t});\n\tconst manifest: HostedRunnerSnapshotManifest = {\n\t\tprotocol_version: HOSTED_RUNNER_SNAPSHOT_MANIFEST_VERSION,\n\t\trunner_session_id: hostedRunner.runnerSessionId,\n\t\t...(hostedRunner.workspaceId\n\t\t\t? { workspace_id: hostedRunner.workspaceId }\n\t\t\t: {}),\n\t\t...(hostedRunner.agentRunId\n\t\t\t? { agent_run_id: hostedRunner.agentRunId }\n\t\t\t: {}),\n\t\tmaestro_session_id: maestroSessionId,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\tcreated_at: requestedAt,\n\t\tworkspace_root: workspaceRoot,\n\t\truntime,\n\t\tworkspace_export: {\n\t\t\tmode: HostedRunnerWorkspaceExportModeValue.LocalPathContract,\n\t\t\tpaths: exportPaths,\n\t\t},\n\t\truntime_continuity: runtimeContinuity,\n\t\twork_continuity: workContinuity,\n\t\tplatform_evidence: platformEvidence,\n\t\tsnapshot,\n\t\tretention_policy: retentionPolicy,\n\t\t...(git ? { git } : {}),\n\t};\n\n\ttry {\n\t\tawait writeFile(\n\t\t\tsnapshotPath,\n\t\t\t`${JSON.stringify(manifest, null, 2)}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\t\thostedRunner.lastDrain = {\n\t\t\tstatus,\n\t\t\tmanifestPath: snapshotPath,\n\t\t\tdrainedAt: requestedAt,\n\t\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t\t...(input.requestedBy ? { requestedBy: input.requestedBy } : {}),\n\t\t};\n\t} catch (error) {\n\t\tconst errorMessage = `Hosted runner drain manifest persistence failed: ${\n\t\t\terror instanceof Error ? error.message : String(error)\n\t\t}`;\n\t\tawait recordPlatformDrain?.({\n\t\t\tstatus: HostedRunnerDrainStatusValue.Interrupted,\n\t\t\treason: input.reason,\n\t\t\trequestedBy: input.requestedBy,\n\t\t\tflushStatus: runtime.flush_status,\n\t\t\tmanifestPath: snapshotPath,\n\t\t\tplatformEvidence: buildHostedRunnerPlatformEvidence({\n\t\t\t\thostedRunner,\n\t\t\t\tstatus: HostedRunnerDrainStatusValue.Interrupted,\n\t\t\t\tmaestroSessionId,\n\t\t\t\tcreatedAt: requestedAt,\n\t\t\t\tmanifestPath: snapshotPath,\n\t\t\t\truntime,\n\t\t\t\truntimeContinuity,\n\t\t\t\tworkContinuity,\n\t\t\t\tretentionPolicy,\n\t\t\t\treason: input.reason,\n\t\t\t\trequestedBy: input.requestedBy,\n\t\t\t}),\n\t\t\terrorMessage,\n\t\t});\n\t\tthrow error;\n\t}\n\tawait recordPlatformDrain?.({\n\t\tstatus,\n\t\treason: input.reason,\n\t\trequestedBy: input.requestedBy,\n\t\tflushStatus: runtime.flush_status,\n\t\tmanifestPath: snapshotPath,\n\t\tplatformEvidence,\n\t\terrorMessage: runtime.error,\n\t});\n\n\treturn {\n\t\tstatus,\n\t\trunner_session_id: hostedRunner.runnerSessionId,\n\t\t...(input.reason ? { reason: input.reason } : {}),\n\t\t...(input.requestedBy ? { requested_by: input.requestedBy } : {}),\n\t\tmanifest_path: snapshotPath,\n\t\tmanifest,\n\t};\n}\n\nasync function drainActiveRuntime(\n\tcontext: HostedRunnerDrainRuntimeContext,\n\tsessionId: string,\n\t_terminal: HostedRunnerRuntimeTerminalInput,\n): Promise<HostedRunnerRuntimeDrainResult | null> {\n\tconst runtime =\n\t\tcontext.headlessRuntimeService.getRuntimeBySessionId(sessionId);\n\tif (!runtime) {\n\t\treturn null;\n\t}\n\tconst snapshot = runtime.getSnapshot();\n\tconst sessionFile = runtime.getSessionFile();\n\tconst recordPlatformDrain = async (\n\t\tinput: HostedRunnerPlatformDrainRecordInput,\n\t) => {\n\t\tawait runtime.recordHostedAgentRuntimeDrain({\n\t\t\tstatus: input.status,\n\t\t\treason: input.reason,\n\t\t\trequestedBy: input.requestedBy,\n\t\t\tflushStatus: input.flushStatus,\n\t\t\tmanifestPath: input.manifestPath,\n\t\t\tplatformEvidence: input.platformEvidence,\n\t\t\terrorMessage: input.errorMessage\n\t\t\t\t? `Hosted runner drain failed: ${input.errorMessage}`\n\t\t\t\t: undefined,\n\t\t});\n\t};\n\ttry {\n\t\tawait runtime.dispose();\n\t} catch (error) {\n\t\tthrow new HostedRunnerRuntimeDrainError(\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t{\n\t\t\t\tsessionId: snapshot.session_id,\n\t\t\t\tsessionFile,\n\t\t\t\tprotocolVersion: snapshot.protocolVersion,\n\t\t\t\tcursor: snapshot.cursor,\n\t\t\t\tsnapshot,\n\t\t\t\trecordPlatformDrain,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tsessionId: snapshot.session_id,\n\t\tsessionFile,\n\t\tprotocolVersion: snapshot.protocolVersion,\n\t\tcursor: snapshot.cursor,\n\t\tsnapshot,\n\t\trecordPlatformDrain,\n\t};\n}\n\nexport async function drainHostedRunnerForShutdown(\n\tcontext: HostedRunnerDrainRuntimeContext,\n\toptions: DrainHostedRunnerForShutdownOptions = {},\n): Promise<HostedRunnerDrainResult | null> {\n\treturn drainHostedRunner(\n\t\t{\n\t\t\treason: options.reason ?? HostedRunnerDrainReasonValue.ProcessShutdown,\n\t\t\trequestedBy:\n\t\t\t\toptions.requestedBy ??\n\t\t\t\tHostedRunnerDrainRequestedByValue.MaestroWebServer,\n\t\t},\n\t\t{\n\t\t\thostedRunner: context.hostedRunner,\n\t\t\tdrainRuntime: (sessionId, terminal) =>\n\t\t\t\tdrainActiveRuntime(context, sessionId, terminal),\n\t\t\tnow: options.now,\n\t\t},\n\t);\n}\n\nexport async function handleHostedRunnerDrain(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcontext: WebServerContext,\n): Promise<void> {\n\tres.setHeader(\"Cache-Control\", \"no-store\");\n\tconst body = await readJsonBody<Record<string, unknown>>(req, 64_000);\n\tconst input = parseHostedRunnerDrainInput(body);\n\tconst result = await drainHostedRunner(input, {\n\t\thostedRunner: context.hostedRunner,\n\t\tdrainRuntime: (sessionId, terminal) =>\n\t\t\tdrainActiveRuntime(context, sessionId, terminal),\n\t});\n\n\tif (!result) {\n\t\tsendJson(\n\t\t\tres,\n\t\t\t404,\n\t\t\t{\n\t\t\t\terror: \"hosted runner drain unavailable\",\n\t\t\t},\n\t\t\tcontext.corsHeaders,\n\t\t\treq,\n\t\t);\n\t\treturn;\n\t}\n\n\tsendJson(\n\t\tres,\n\t\tresult.status === HostedRunnerDrainStatusValue.Interrupted ? 503 : 200,\n\t\t{\n\t\t\tprotocol_version: HOSTED_RUNNER_DRAIN_PROTOCOL_VERSION,\n\t\t\tstatus: result.status,\n\t\t\trunner_session_id: result.runner_session_id,\n\t\t\trequested_by: result.requested_by,\n\t\t\treason: result.reason,\n\t\t\tmanifest_path: result.manifest_path,\n\t\t\tmanifest: result.manifest,\n\t\t},\n\t\tcontext.corsHeaders,\n\t\treq,\n\t);\n}\n"]}
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.43",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.43 is now available."
2
+ "version": "0.10.45",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.45 is now available."
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@evalops/maestro",
3
3
  "description": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development",
4
- "version": "0.10.43",
4
+ "version": "0.10.45",
5
5
  "private": false,
6
6
  "type": "module",
7
7
  "workspaces": [