@opengeni/agent-proto 0.5.1 → 0.6.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -336,6 +336,11 @@ export interface Capabilities {
336
336
  * CPU quota that an older memory-only runner would ignore as an unknown field.
337
337
  */
338
338
  operationCpuQuota: boolean;
339
+ /**
340
+ * Transactional uploads via OpStart.fs_write / WriteChunk / OpQuery / OpCancel.
341
+ * Independent of op_stream. Absent/false runners MUST NOT receive this path.
342
+ */
343
+ transactionalFsWrite: boolean;
339
344
  }
340
345
  /**
341
346
  * Capabilities of one live browser-profile bridge endpoint. This describes the
@@ -1101,21 +1106,34 @@ export interface OpExit_FailureDetailEntry {
1101
1106
  value: string;
1102
1107
  }
1103
1108
  /**
1104
- * The op-begin for a STREAMING fs_write (M7): the target is set up here; the bytes
1105
- * arrive as chunked, idempotent WriteChunk request/replies (no reverse streaming).
1109
+ * Transactional upload begin. Requires transactional_fs_write, not op_stream.
1110
+ * The op_id must use the fsw- namespace; bytes arrive as sequential WriteChunk
1111
+ * requests. This path emits no OpFrames and supports no OpAttach/OpAck.
1106
1112
  */
1107
1113
  export interface FsWriteBegin {
1108
1114
  path: string;
1109
- /** Create parent directories as needed. */
1115
+ /**
1116
+ * Reserved compatibility field. Transactional writes require existing parent
1117
+ * directories; even true never creates visible directories during staging.
1118
+ */
1110
1119
  createParents: boolean;
1111
1120
  /** POSIX mode for a newly created file (0 => platform default). */
1112
1121
  mode: number;
1113
1122
  /**
1114
- * Editor safety (M6): the expected blake3 hex digest of the file's CURRENT
1115
- * content for a read-modify-write; empty for a plain write. On a re-dispatch a
1116
- * mismatch REFUSES rather than double-applying a diff.
1123
+ * Expected lowercase BLAKE3 hex digest of CURRENT content for replacement.
1124
+ * Required unless expected_absent. Checked with opened inode identity before
1125
+ * commit; optimistic against unrelated writers, NOT an atomic filesystem CAS.
1117
1126
  */
1118
1127
  expectedBaseDigest: string;
1128
+ /** Required lowercase BLAKE3 hex digest of the complete intended content. */
1129
+ contentDigest: string;
1130
+ /** Required presence, including an explicitly present zero for empty content. */
1131
+ contentSize?: string | undefined;
1132
+ /**
1133
+ * Exactly one of expected_absent / expected_base_digest is required.
1134
+ * Creation publishes atomically without replacing a concurrently created file.
1135
+ */
1136
+ expectedAbsent: boolean;
1119
1137
  }
1120
1138
  /**
1121
1139
  * Start an op (server→runner). IDEMPOTENT by op_id (= ControlRequest.request_id):
@@ -1198,20 +1216,28 @@ export interface OpStatus {
1198
1216
  exit: OpExit | undefined;
1199
1217
  /** Present iff state == OP_STATE_LOST. */
1200
1218
  lostReason: OpLostReason;
1219
+ /**
1220
+ * Transactional fs_write only: accepted byte offset. next_seq is the next
1221
+ * chunk sequence, not an output frame sequence. Complete echoes verified
1222
+ * content in exit.digests["content"] / exit.totals["content"]. No OpFrames.
1223
+ */
1224
+ writeOffset: string;
1201
1225
  }
1202
1226
  /**
1203
1227
  * One chunk of a streaming upload (server→runner): plain idempotent request/reply
1204
- * per chunk (≤512 KiB). A duplicate (op_id, seq) is acked WITHOUT re-applying.
1228
+ * per chunk (≤512 KiB). An exact duplicate of the most recently accepted chunk
1229
+ * is acked WITHOUT re-applying (including a lost final ack). Older sequences or
1230
+ * changed duplicate bodies are refused, never silently accepted or re-applied.
1205
1231
  */
1206
1232
  export interface WriteChunk {
1207
1233
  opId: string;
1208
1234
  /** The op-scoped monotonic chunk sequence. */
1209
1235
  seq: string;
1210
1236
  bytes: Uint8Array;
1211
- /** The final chunk: commit = digest-verify then atomic rename (M7). */
1237
+ /** Final chunk: verify intended size/digest and base, then atomic publication. */
1212
1238
  last: boolean;
1213
1239
  /**
1214
- * Byte offset this chunk writes at (M7: writes land in an op-scoped temp file,
1240
+ * Byte offset this chunk writes at (writes land in an op-scoped temp file,
1215
1241
  * committed on the last chunk — an aborted transfer leaves no visible file).
1216
1242
  */
1217
1243
  offset: string;
package/dist/index.js CHANGED
@@ -1274,7 +1274,8 @@ function createBaseCapabilities() {
1274
1274
  opStream: false,
1275
1275
  browserBridge: false,
1276
1276
  operationResourcePolicy: false,
1277
- operationCpuQuota: false
1277
+ operationCpuQuota: false,
1278
+ transactionalFsWrite: false
1278
1279
  };
1279
1280
  }
1280
1281
  var Capabilities = {
@@ -1318,6 +1319,9 @@ var Capabilities = {
1318
1319
  if (message.operationCpuQuota !== false) {
1319
1320
  writer.uint32(104).bool(message.operationCpuQuota);
1320
1321
  }
1322
+ if (message.transactionalFsWrite !== false) {
1323
+ writer.uint32(112).bool(message.transactionalFsWrite);
1324
+ }
1321
1325
  return writer;
1322
1326
  },
1323
1327
  decode(input, length) {
@@ -1418,6 +1422,13 @@ var Capabilities = {
1418
1422
  message.operationCpuQuota = reader.bool();
1419
1423
  continue;
1420
1424
  }
1425
+ case 14: {
1426
+ if (tag !== 112) {
1427
+ break;
1428
+ }
1429
+ message.transactionalFsWrite = reader.bool();
1430
+ continue;
1431
+ }
1421
1432
  }
1422
1433
  if ((tag & 7) === 4 || tag === 0) {
1423
1434
  break;
@@ -1440,7 +1451,8 @@ var Capabilities = {
1440
1451
  opStream: isSet(object.opStream) ? globalThis.Boolean(object.opStream) : isSet(object.op_stream) ? globalThis.Boolean(object.op_stream) : false,
1441
1452
  browserBridge: isSet(object.browserBridge) ? globalThis.Boolean(object.browserBridge) : isSet(object.browser_bridge) ? globalThis.Boolean(object.browser_bridge) : false,
1442
1453
  operationResourcePolicy: isSet(object.operationResourcePolicy) ? globalThis.Boolean(object.operationResourcePolicy) : isSet(object.operation_resource_policy) ? globalThis.Boolean(object.operation_resource_policy) : false,
1443
- operationCpuQuota: isSet(object.operationCpuQuota) ? globalThis.Boolean(object.operationCpuQuota) : isSet(object.operation_cpu_quota) ? globalThis.Boolean(object.operation_cpu_quota) : false
1454
+ operationCpuQuota: isSet(object.operationCpuQuota) ? globalThis.Boolean(object.operationCpuQuota) : isSet(object.operation_cpu_quota) ? globalThis.Boolean(object.operation_cpu_quota) : false,
1455
+ transactionalFsWrite: isSet(object.transactionalFsWrite) ? globalThis.Boolean(object.transactionalFsWrite) : isSet(object.transactional_fs_write) ? globalThis.Boolean(object.transactional_fs_write) : false
1444
1456
  };
1445
1457
  },
1446
1458
  toJSON(message) {
@@ -1484,6 +1496,9 @@ var Capabilities = {
1484
1496
  if (message.operationCpuQuota !== false) {
1485
1497
  obj.operationCpuQuota = message.operationCpuQuota;
1486
1498
  }
1499
+ if (message.transactionalFsWrite !== false) {
1500
+ obj.transactionalFsWrite = message.transactionalFsWrite;
1501
+ }
1487
1502
  return obj;
1488
1503
  },
1489
1504
  create(base) {
@@ -1504,6 +1519,7 @@ var Capabilities = {
1504
1519
  message.browserBridge = object.browserBridge ?? false;
1505
1520
  message.operationResourcePolicy = object.operationResourcePolicy ?? false;
1506
1521
  message.operationCpuQuota = object.operationCpuQuota ?? false;
1522
+ message.transactionalFsWrite = object.transactionalFsWrite ?? false;
1507
1523
  return message;
1508
1524
  }
1509
1525
  };
@@ -8937,7 +8953,15 @@ var OpExit_FailureDetailEntry = {
8937
8953
  }
8938
8954
  };
8939
8955
  function createBaseFsWriteBegin() {
8940
- return { path: "", createParents: false, mode: 0, expectedBaseDigest: "" };
8956
+ return {
8957
+ path: "",
8958
+ createParents: false,
8959
+ mode: 0,
8960
+ expectedBaseDigest: "",
8961
+ contentDigest: "",
8962
+ contentSize: void 0,
8963
+ expectedAbsent: false
8964
+ };
8941
8965
  }
8942
8966
  var FsWriteBegin = {
8943
8967
  encode(message, writer = new BinaryWriter()) {
@@ -8953,6 +8977,15 @@ var FsWriteBegin = {
8953
8977
  if (message.expectedBaseDigest !== "") {
8954
8978
  writer.uint32(34).string(message.expectedBaseDigest);
8955
8979
  }
8980
+ if (message.contentDigest !== "") {
8981
+ writer.uint32(42).string(message.contentDigest);
8982
+ }
8983
+ if (message.contentSize !== void 0) {
8984
+ writer.uint32(48).uint64(message.contentSize);
8985
+ }
8986
+ if (message.expectedAbsent !== false) {
8987
+ writer.uint32(56).bool(message.expectedAbsent);
8988
+ }
8956
8989
  return writer;
8957
8990
  },
8958
8991
  decode(input, length) {
@@ -8990,6 +9023,27 @@ var FsWriteBegin = {
8990
9023
  message.expectedBaseDigest = reader.string();
8991
9024
  continue;
8992
9025
  }
9026
+ case 5: {
9027
+ if (tag !== 42) {
9028
+ break;
9029
+ }
9030
+ message.contentDigest = reader.string();
9031
+ continue;
9032
+ }
9033
+ case 6: {
9034
+ if (tag !== 48) {
9035
+ break;
9036
+ }
9037
+ message.contentSize = reader.uint64().toString();
9038
+ continue;
9039
+ }
9040
+ case 7: {
9041
+ if (tag !== 56) {
9042
+ break;
9043
+ }
9044
+ message.expectedAbsent = reader.bool();
9045
+ continue;
9046
+ }
8993
9047
  }
8994
9048
  if ((tag & 7) === 4 || tag === 0) {
8995
9049
  break;
@@ -9003,7 +9057,10 @@ var FsWriteBegin = {
9003
9057
  path: isSet(object.path) ? globalThis.String(object.path) : "",
9004
9058
  createParents: isSet(object.createParents) ? globalThis.Boolean(object.createParents) : isSet(object.create_parents) ? globalThis.Boolean(object.create_parents) : false,
9005
9059
  mode: isSet(object.mode) ? globalThis.Number(object.mode) : 0,
9006
- expectedBaseDigest: isSet(object.expectedBaseDigest) ? globalThis.String(object.expectedBaseDigest) : isSet(object.expected_base_digest) ? globalThis.String(object.expected_base_digest) : ""
9060
+ expectedBaseDigest: isSet(object.expectedBaseDigest) ? globalThis.String(object.expectedBaseDigest) : isSet(object.expected_base_digest) ? globalThis.String(object.expected_base_digest) : "",
9061
+ contentDigest: isSet(object.contentDigest) ? globalThis.String(object.contentDigest) : isSet(object.content_digest) ? globalThis.String(object.content_digest) : "",
9062
+ contentSize: isSet(object.contentSize) ? globalThis.String(object.contentSize) : isSet(object.content_size) ? globalThis.String(object.content_size) : void 0,
9063
+ expectedAbsent: isSet(object.expectedAbsent) ? globalThis.Boolean(object.expectedAbsent) : isSet(object.expected_absent) ? globalThis.Boolean(object.expected_absent) : false
9007
9064
  };
9008
9065
  },
9009
9066
  toJSON(message) {
@@ -9020,6 +9077,15 @@ var FsWriteBegin = {
9020
9077
  if (message.expectedBaseDigest !== "") {
9021
9078
  obj.expectedBaseDigest = message.expectedBaseDigest;
9022
9079
  }
9080
+ if (message.contentDigest !== "") {
9081
+ obj.contentDigest = message.contentDigest;
9082
+ }
9083
+ if (message.contentSize !== void 0) {
9084
+ obj.contentSize = message.contentSize;
9085
+ }
9086
+ if (message.expectedAbsent !== false) {
9087
+ obj.expectedAbsent = message.expectedAbsent;
9088
+ }
9023
9089
  return obj;
9024
9090
  },
9025
9091
  create(base) {
@@ -9031,6 +9097,9 @@ var FsWriteBegin = {
9031
9097
  message.createParents = object.createParents ?? false;
9032
9098
  message.mode = object.mode ?? 0;
9033
9099
  message.expectedBaseDigest = object.expectedBaseDigest ?? "";
9100
+ message.contentDigest = object.contentDigest ?? "";
9101
+ message.contentSize = object.contentSize ?? void 0;
9102
+ message.expectedAbsent = object.expectedAbsent ?? false;
9034
9103
  return message;
9035
9104
  }
9036
9105
  };
@@ -9450,7 +9519,7 @@ var OpAttach = {
9450
9519
  }
9451
9520
  };
9452
9521
  function createBaseOpStatus() {
9453
- return { opId: "", state: 0, nextSeq: "0", exit: void 0, lostReason: 0 };
9522
+ return { opId: "", state: 0, nextSeq: "0", exit: void 0, lostReason: 0, writeOffset: "0" };
9454
9523
  }
9455
9524
  var OpStatus = {
9456
9525
  encode(message, writer = new BinaryWriter()) {
@@ -9469,6 +9538,9 @@ var OpStatus = {
9469
9538
  if (message.lostReason !== 0) {
9470
9539
  writer.uint32(40).int32(message.lostReason);
9471
9540
  }
9541
+ if (message.writeOffset !== "0") {
9542
+ writer.uint32(48).uint64(message.writeOffset);
9543
+ }
9472
9544
  return writer;
9473
9545
  },
9474
9546
  decode(input, length) {
@@ -9513,6 +9585,13 @@ var OpStatus = {
9513
9585
  message.lostReason = reader.int32();
9514
9586
  continue;
9515
9587
  }
9588
+ case 6: {
9589
+ if (tag !== 48) {
9590
+ break;
9591
+ }
9592
+ message.writeOffset = reader.uint64().toString();
9593
+ continue;
9594
+ }
9516
9595
  }
9517
9596
  if ((tag & 7) === 4 || tag === 0) {
9518
9597
  break;
@@ -9527,7 +9606,8 @@ var OpStatus = {
9527
9606
  state: isSet(object.state) ? opStateFromJSON(object.state) : 0,
9528
9607
  nextSeq: isSet(object.nextSeq) ? globalThis.String(object.nextSeq) : isSet(object.next_seq) ? globalThis.String(object.next_seq) : "0",
9529
9608
  exit: isSet(object.exit) ? OpExit.fromJSON(object.exit) : void 0,
9530
- lostReason: isSet(object.lostReason) ? opLostReasonFromJSON(object.lostReason) : isSet(object.lost_reason) ? opLostReasonFromJSON(object.lost_reason) : 0
9609
+ lostReason: isSet(object.lostReason) ? opLostReasonFromJSON(object.lostReason) : isSet(object.lost_reason) ? opLostReasonFromJSON(object.lost_reason) : 0,
9610
+ writeOffset: isSet(object.writeOffset) ? globalThis.String(object.writeOffset) : isSet(object.write_offset) ? globalThis.String(object.write_offset) : "0"
9531
9611
  };
9532
9612
  },
9533
9613
  toJSON(message) {
@@ -9547,6 +9627,9 @@ var OpStatus = {
9547
9627
  if (message.lostReason !== 0) {
9548
9628
  obj.lostReason = opLostReasonToJSON(message.lostReason);
9549
9629
  }
9630
+ if (message.writeOffset !== "0") {
9631
+ obj.writeOffset = message.writeOffset;
9632
+ }
9550
9633
  return obj;
9551
9634
  },
9552
9635
  create(base) {
@@ -9559,6 +9642,7 @@ var OpStatus = {
9559
9642
  message.nextSeq = object.nextSeq ?? "0";
9560
9643
  message.exit = object.exit !== void 0 && object.exit !== null ? OpExit.fromPartial(object.exit) : void 0;
9561
9644
  message.lostReason = object.lostReason ?? 0;
9645
+ message.writeOffset = object.writeOffset ?? "0";
9562
9646
  return message;
9563
9647
  }
9564
9648
  };