@amaster.ai/employee-runtime-connector 0.1.1-beta.290 → 0.1.1-beta.292

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/README.md CHANGED
@@ -210,6 +210,19 @@ An exact process-kill `EPERM` error emitted only after the first two layers have
210
210
 
211
211
  This isolation does not schedule a retry or a second business continuation. Command result delivery and the result outbox remain the sole idempotency boundary.
212
212
 
213
+ ## Live log delivery durability
214
+
215
+ Executor process logs (stdout/stderr events, including full-transcript chat turns) are streamed to the Server as batches against `/ingest/logs/batch`. Every live log entry carries a per-command monotonically increasing `seq`; the Server dedupes on `(commandId, sourceSeq)`, so a retry after an ambiguous outcome (restart, timeout, 5xx) never duplicates canonical `heartbeat_run_events`.
216
+
217
+ A batch whose delivery outcome is ambiguous is not dropped: it enters a bounded in-memory retry backlog that is retried on a timer and drains in source order, preserving `heartbeat_run_events` ordering. If the backlog is still undelivered when the executor turn ends, the remaining entries move into the durable result outbox and the command result is deferred until the log entries are delivered first; a sustained log-ingest outage bounded by `AMASTER_RESULT_OUTBOX_MAX_ATTEMPTS` drops the entries with a stderr diagnostic rather than holding the result hostage. HTTP 400 entries keep the existing bisect-to-invalid drop semantics.
218
+
219
+ Tuning knobs (defaults are the production values):
220
+
221
+ - `AMASTER_RUNTIME_LIVE_LOG_RETRY_BACKLOG_MAX_BYTES` (default 16 MiB): in-memory backlog bound; oldest batches are dropped with a diagnostic when exceeded.
222
+ - `AMASTER_RUNTIME_LIVE_LOG_RETRY_INTERVAL_MS` (default 2000): background backlog retry cadence.
223
+ - `AMASTER_RUNTIME_LIVE_LOG_FINAL_DRAIN_ATTEMPTS` (default 3) and `AMASTER_RUNTIME_LIVE_LOG_FINAL_DRAIN_TIMEOUT_MS` (default 5000): bounded final drain at the end of an executor turn.
224
+ - `AMASTER_RUNTIME_DEFERRED_LOG_DRAIN_TIMEOUT_MS` (default 5000): per-batch timeout when delivering deferred entries before a command result or from the result outbox.
225
+
213
226
  ## Mutation attestation
214
227
 
215
228
  The daemon reports its connector contract, exact package/build, platform/architecture, and discovered executor versions on every heartbeat. The server compares those facts with `AMASTER_RUNTIME_RECOMMENDED_VERSION` and `AMASTER_RUNTIME_RECOMMENDED_BUILD_COMMIT`, persists a short-lived content-bound attestation, and correlates Runtime V2 commands to that proof.
@@ -9,6 +9,7 @@ export const BUILD_SUPPORTED_CAPABILITIES = Object.freeze([
9
9
  "artifact_template_catalog_v1",
10
10
  "final_model_context_attestation_v1",
11
11
  "runtime_actions_v2",
12
+ "runtime_artifact_live_manifest_v1",
12
13
  "continue_task_v1",
13
14
  "run_exit_live_path_closure_v1",
14
15
  "model_call",
@@ -23,6 +24,10 @@ export const BUILD_SUPPORTED_CAPABILITIES = Object.freeze([
23
24
  ]);
24
25
 
25
26
  const DYNAMIC_READINESS = Object.freeze({
27
+ mirrorx_initialization_context_v1: {
28
+ reasonCode: "pi_executor_required",
29
+ ready: (input) => input.executors.some((executor) => executor.kind === "pi"),
30
+ },
26
31
  mirrorx_initialization_completion_v1: {
27
32
  reasonCode: "managed_linux_pi_required",
28
33
  ready: (input) => process.platform === "linux" && input.runnerKind === "cloud_managed"