import importlib.util
import json
from pathlib import Path

spec=importlib.util.spec_from_file_location('transport','/tmp/codex/ltb1021/2026-10-06_icerti-ai2-deploy_r01/remote.py')
remote=importlib.util.module_from_spec(spec);spec.loader.exec_module(remote)
CODE=r'''
import json,os,signal,subprocess,hashlib,shutil
from pathlib import Path
signal.alarm(40)
def run(args):
    r=subprocess.run(args,capture_output=True,text=True,timeout=10)
    assert r.returncode==0,'READ_COMMAND_FAILED'
    return r.stdout
print('HOST',run(['hostname']).strip())
print('ROOT_FREE',shutil.disk_usage('/').free)
print('PROCESSES',run(['ps','-eo','pid,ppid,user,stat,etimes,pcpu,pmem,rss,comm','--sort=-pcpu']).splitlines()[:15])
print('MEMORY',run(['free','-m']))
print('SERVICES',run(['docker','ps','-a','--filter','label=com.docker.compose.project=contextra-ai2','--format','{{.Names}} {{.State}} {{.Image}}']))
prefix=Path('/usr/local/lib/contextra-maintenance/portable-20261006T192646')
print('TOOL_HASH', {n:hashlib.sha256((prefix/n).read_bytes()).hexdigest() for n in ('vscode_safety.py','field_resources.py','maintenance_process.py')})
home=Path('/home/si');vs=home/'.vscode-server'
keys=('npm.','search.','files.watcher','git.auto','python.analysis.','python-envs.')
def config(p):
    if not p.is_file():return
    raw=p.read_bytes()
    try:
        doc=json.loads(raw)
        doc=doc.get('settings',doc)
        print('SETTINGS',str(p),{k:v for k,v in doc.items() if k.startswith(keys)})
    except ValueError:print('JSONC_NEEDS_REVIEW',str(p),'bytes',len(raw))
config(vs/'data/Machine/settings.json')
config(Path('/.vscode/settings.json'))
storage=vs/'data/User/workspaceStorage'
for p in list(storage.glob('*/workspace.json'))[:20]:
    d=json.loads(p.read_text());print('WORKSPACE',d)
    from urllib.parse import urlsplit,unquote
    for k,v in d.items():
        if k in ('folder','workspace') and isinstance(v,str) and v.startswith('file:'):
            q=Path(unquote(urlsplit(v).path));config(q if k=='workspace' else q/'.vscode/settings.json')
print('EXTENSIONS',[p.name for p in (vs/'extensions').iterdir() if p.is_dir()][:50])
for p in Path('/proc').iterdir():
    if not p.name.isdigit():continue
    try:
        a=(p/'cmdline').read_bytes().split(b'\0')
        if b'--type=extensionHost' not in a:continue
        exe=Path(os.readlink(p/'exe'));server=exe.parent
        print('EXTENSION_HOST',p.name,'SERVER',str(server))
        npm=server/'extensions/npm/package.json'
        if npm.is_file():
            doc=json.loads(npm.read_text());print('NPM_MAIN',doc.get('main'))
            cfg=doc.get('contributes',{}).get('configuration',{})
            for c in cfg if isinstance(cfg,list) else [cfg]:
                print('NPM_CONFIG',{k:{a:b for a,b in v.items() if a in ('type','default','scope','description')} for k,v in c.get('properties',{}).items() if k.startswith('npm.')})
            main=(npm.parent/doc['main']).resolve()
            if not main.suffix:main=main.with_suffix('.js')
            text=main.read_text()
            for needle in ('**/package.json','autoDetect','enableScriptExplorer','findFiles'):
                pos=text.find(needle);print('NPM_SOURCE',needle,text[max(0,pos-250):pos+400] if pos>=0 else 'not found')
    except (FileNotFoundError,PermissionError,ProcessLookupError):pass
'''
if __name__=='__main__':
    raw=remote.run(CODE,root=True,timeout=50)
    p=Path(__file__).parent/'inspection.log';p.write_text(raw);p.chmod(0o600)
    print(raw)
