anchor.diff:                                    try_arg "rules"
                                       |> Util.map_option (js_list js_reductionrule))
              | "search" -> Search (arg "terms" |> js_str)
  -           | "vfs-add" -> VfsAdd (arg "filename" |> js_str, arg "contents" |> js_str)
  +           | "vfs-add" -> VfsAdd (try_arg "filename" |> Util.map_option js_str,
  +                                 arg "contents" |> js_str)
              | _ -> ProtocolViolation (Util.format1 "Unknown query '%s'" query) }
     with
     | InvalidQuery msg -> { qid = qid; qq = ProtocolViolation msg }
  
positive.code: let run_generic_error (st: repl_state) message =
    ((QueryNOK, JsonStr message), Inl st)
  
  let run_vfs_add (st: repl_state) fname contents =
    Parser.ParseIt.add_vfs_entry fname contents;
    ((QueryOK, JsonNull), Inl st)
  
  
negative.code:   | (status, Inr n) -> (status, Inr n)
    | (status, Inl full_st) -> (status, Inl (fn full_st))
  
  let repl_stdin = function
    | PartialReplState st -> st.prepl_stdin
    | FullReplState st -> st.repl_stdin
  
  let repl_fname = function
    | PartialReplState st -> st.prepl_fname
    | FullReplState st -> st.repl_fname
  
  let repl_stack: ref<list<full_repl_state>> = Util.mk_ref []
  
  let repl_stack_empty () =
  