We need to exchange repeated string values in a compact form without losing empty strings or confusing adjacent runs. Implement both directions of the codec so a round trip preserves the original sequence.
Build the implementation in Rust under /app, with /app/run.sh as its entry point. Read one JSON request from standard input and write one JSON result to standard output. Input has mode encode/decode and values. Encode accepts strings and returns [string,count] runs of consecutive equal values. Decode accepts [string,positive integer count] runs and expands them; adjacent equal runs need not be merged in input. Reject invalid mode, nonstring values or boolean/nonpositive/noninteger counts. Input expansion is limited to at most 10000 output strings; reject larger expansions.
Reject inputs that violate an explicit validation rule with exit status 2, no standard output, and {"error":"invalid_input"} on standard error. For valid input, exit with status 0. Keep the implementation reusable for new inputs; it must work offline and must not depend on the example data being the only data it receives.
Repair or replace the unfinished /app/run.sh and add source files under /app. Malformed JSON must use the same invalid-input response. Do not read /tests or /oracle from the application.