master
John Lauer Add bounded obstacle planning and live calculations using the Adom activity palette e936bc3 1mo ago
"""CLI for development probes. --script-transport exercises the embedded source before installing the exe."""
import argparse
import json
from pathlib import Path
import subprocess
ROOT=Path(__file__).resolve().parents[2]

def call(verb,args,target='AdomLapper',script_transport=False):
    if script_transport:
        source='\n'.join((ROOT/'rust/bridge/src'/name).read_text() for name in ('routing_script.py','routing_planner.py'))
        script='import json\nexec('+repr(source)+')\nresult=handle(app,json.loads('+repr(json.dumps(args))+'),'+repr(verb.removeprefix('fusion_'))+')\n'
        verb='fusion_run_modeling_script'; args={'script':script,'expectDocument':args.get('expectDocument')}
    cp=subprocess.run(['adom-bridge','--target',target,'--ai-thread','Fusion trace routing',verb,json.dumps(args)],capture_output=True,text=True,timeout=190)
    r=json.loads(cp.stdout)
    if isinstance(r.get('output'),str):
        try:
            inner=json.loads(r['output'])
            if isinstance(inner,dict):
                for k,v in inner.items():
                    if k not in r:r[k]=v
                if isinstance(inner.get('data'),dict):
                    for k,v in inner['data'].items():
                        if k not in r:r[k]=v
        except (ValueError,TypeError):pass
    if script_transport and isinstance(r.get('data',{}).get('result'),dict): return r['data']['result']
    return {k:v for k,v in r.items() if k!='output'}

if __name__=='__main__':
    p=argparse.ArgumentParser();p.add_argument('verb');p.add_argument('args');p.add_argument('--script-transport',action='store_true');p.add_argument('--output')
    a=p.parse_args();r=call(a.verb,json.loads(a.args),script_transport=a.script_transport)
    if a.output: Path(a.output).write_text(json.dumps(r,indent=2)+'\n')
    print(json.dumps(r,indent=2))