@@ -103,6 +103,17 @@ public void notifyInputClosed() {
103103 instance .getExports ().vmNotifyInputClosed (vmPtr );
104104 }
105105
106+ public void notifyError (
107+ String message , @ Nullable String stacktrace , @ Nullable Long delayOverrideMillis ) {
108+ if (closed ) {
109+ return ;
110+ }
111+ LOG .trace ("[vm=0x{}] notifyError()" , Integer .toHexString (vmPtr ));
112+ instance .callCborVmFunction (
113+ (exports , ptr , len ) -> exports .vmNotifyError (vmPtr , ptr , len ),
114+ new VmNotifyError (message , stacktrace , delayOverrideMillis ));
115+ }
116+
106117 public Optional <byte []> takeOutput () {
107118 if (closed ) {
108119 return Optional .empty ();
@@ -334,7 +345,12 @@ public void sysCompleteAwakeableSuccess(String id, byte[] value) {
334345 }
335346
336347 public void sysCompleteAwakeableFailure (String id , int code , String message ) {
337- sysCompleteAwakeable (id , new NonEmptyValueParam .Failure (code , message ));
348+ sysCompleteAwakeable (id , new NonEmptyValueParam .Failure (code , message , null ));
349+ }
350+
351+ public void sysCompleteAwakeableFailure (
352+ String id , int code , String message , @ Nullable List <String []> metadata ) {
353+ sysCompleteAwakeable (id , new NonEmptyValueParam .Failure (code , message , metadata ));
338354 }
339355
340356 public int sysCreateSignalHandle (String signalName ) {
@@ -360,7 +376,16 @@ public void sysCompleteSignalSuccess(String target, String signalName, byte[] va
360376 }
361377
362378 public void sysCompleteSignalFailure (String target , String signalName , int code , String message ) {
363- sysCompleteSignal (target , signalName , new NonEmptyValueParam .Failure (code , message ));
379+ sysCompleteSignal (target , signalName , new NonEmptyValueParam .Failure (code , message , null ));
380+ }
381+
382+ public void sysCompleteSignalFailure (
383+ String target ,
384+ String signalName ,
385+ int code ,
386+ String message ,
387+ @ Nullable List <String []> metadata ) {
388+ sysCompleteSignal (target , signalName , new NonEmptyValueParam .Failure (code , message , metadata ));
364389 }
365390
366391 public int sysPromiseGet (String key ) {
@@ -391,7 +416,12 @@ public int sysPromiseCompleteSuccess(String key, byte[] value) {
391416 }
392417
393418 public int sysPromiseCompleteFailure (String key , int code , String message ) {
394- return sysPromiseComplete (key , new NonEmptyValueParam .Failure (code , message ));
419+ return sysPromiseComplete (key , new NonEmptyValueParam .Failure (code , message , null ));
420+ }
421+
422+ public int sysPromiseCompleteFailure (
423+ String key , int code , String message , @ Nullable List <String []> metadata ) {
424+ return sysPromiseComplete (key , new NonEmptyValueParam .Failure (code , message , metadata ));
395425 }
396426
397427 public int sysRun (String name ) {
@@ -411,20 +441,22 @@ public void proposeRunCompletionSuccess(int handle, byte[] value) {
411441 new VmProposeRunCompletionParameters (handle , new RunResult .Success (value ), 0L , null ));
412442 }
413443
414- public void proposeRunCompletionTerminalFailure (int handle , int code , String message ) {
444+ public void proposeRunCompletionTerminalFailure (
445+ int handle , int code , String message , @ Nullable List <String []> metadata ) {
415446 LOG .trace ("[vm=0x{}] proposeRunCompletionTerminalFailure()" , Integer .toHexString (vmPtr ));
416447 verifyNotClosed ();
417448
418449 callWithEmptyReturn (
419450 SharedCoreWasm_ModuleExports ::vmProposeRunCompletion ,
420451 new VmProposeRunCompletionParameters (
421- handle , new RunResult .TerminalFailure (code , message ), 0L , null ));
452+ handle , new RunResult .TerminalFailure (code , message , metadata ), 0L , null ));
422453 }
423454
424455 public void proposeRunCompletionRetryableFailure (
425456 int handle ,
426457 int code ,
427458 String message ,
459+ @ Nullable String stacktrace ,
428460 long attemptDurationMillis ,
429461 @ Nullable WasmRetryPolicy retryPolicy ) {
430462 LOG .trace ("[vm=0x{}] proposeRunCompletionRetryableFailure()" , Integer .toHexString (vmPtr ));
@@ -434,7 +466,7 @@ public void proposeRunCompletionRetryableFailure(
434466 SharedCoreWasm_ModuleExports ::vmProposeRunCompletion ,
435467 new VmProposeRunCompletionParameters (
436468 handle ,
437- new RunResult .RetryableFailure (code , message ),
469+ new RunResult .RetryableFailure (code , message , stacktrace ),
438470 attemptDurationMillis ,
439471 retryPolicy ));
440472 }
@@ -479,7 +511,11 @@ public void sysWriteOutputSuccess(byte[] value) {
479511 }
480512
481513 public void sysWriteOutputFailure (int code , String message ) {
482- sysWriteOutput (new NonEmptyValueParam .Failure (code , message ));
514+ sysWriteOutput (new NonEmptyValueParam .Failure (code , message , null ));
515+ }
516+
517+ public void sysWriteOutputFailure (int code , String message , @ Nullable List <String []> metadata ) {
518+ sysWriteOutput (new NonEmptyValueParam .Failure (code , message , metadata ));
483519 }
484520
485521 public void sysEnd () {
@@ -615,7 +651,8 @@ record Void() implements NotificationValue {}
615651
616652 record Success (byte [] value ) implements NotificationValue {}
617653
618- record Failure (int code , String message ) implements NotificationValue {}
654+ record Failure (int code , String message , @ Nullable List <String []> metadata )
655+ implements NotificationValue {}
619656
620657 record StateKeys (List <String > keys ) implements NotificationValue {}
621658
@@ -685,6 +722,9 @@ record Failure(int code, String message) implements SysCallReturn {}
685722 // Field names match Rust struct field names after camelCase renaming.
686723 // =========================================================================
687724
725+ public record VmNotifyError (
726+ String message , @ Nullable String stacktrace , @ Nullable Long delayOverrideMillis ) {}
727+
688728 public record VmNewParameters (List <String []> headers ) {}
689729
690730 public record VmDoProgressParameters (int [] handles ) {}
@@ -707,7 +747,8 @@ public record VmSysSleepParameters(
707747 public sealed interface NonEmptyValueParam {
708748 record Success (byte [] value ) implements NonEmptyValueParam {}
709749
710- record Failure (int code , String message ) implements NonEmptyValueParam {}
750+ record Failure (int code , String message , @ Nullable List <String []> metadata )
751+ implements NonEmptyValueParam {}
711752 }
712753
713754 public record VmSysCompleteAwakeableParameters (String id , NonEmptyValueParam result ) {}
@@ -752,9 +793,11 @@ public record VmSysRunParameters(String name) {}
752793 public sealed interface RunResult {
753794 record Success (byte [] value ) implements RunResult {}
754795
755- record TerminalFailure (int code , String message ) implements RunResult {}
796+ record TerminalFailure (int code , String message , @ Nullable List <String []> metadata )
797+ implements RunResult {}
756798
757- record RetryableFailure (int code , String message ) implements RunResult {}
799+ record RetryableFailure (int code , String message , @ Nullable String stacktrace )
800+ implements RunResult {}
758801 }
759802
760803 public record VmProposeRunCompletionParameters (
0 commit comments