43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
"""Owned startup entry. No user environment/config changes or override discovery."""
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
import sys
|
|
import threading
|
|
from native_speech_mux import NativeSpeechMux, stdio_invocation, verified_original
|
|
from bekci_watch import Ledger, WatchOwner
|
|
|
|
def main(manifest, args):
|
|
cfg = json.loads(Path(manifest).read_text(encoding='utf-8-sig'))
|
|
original = verified_original(cfg['original'], cfg['original_sha256'])
|
|
if not stdio_invocation(args):
|
|
return subprocess.call([original,*args])
|
|
# Existing public catalog and original model passthrough handler is reused.
|
|
# A per-child CLI setting selects the ephemeral owned bridge; no global file edit.
|
|
saved_env = dict(os.environ)
|
|
os.environ['AITURK_CODEX_BRIDGE_HOME'] = cfg['bridge_home']
|
|
os.environ['HERMES_HOME'] = cfg['hermes_home']
|
|
try:
|
|
import kopru
|
|
finally:
|
|
os.environ.clear(); os.environ.update(saved_env)
|
|
from http.server import ThreadingHTTPServer
|
|
server = ThreadingHTTPServer(('127.0.0.1',0), kopru.H)
|
|
mux = NativeSpeechMux([original,*args,'-c',f'openai_base_url="http://127.0.0.1:{server.server_port}/backend-api/codex"'],observer=True)
|
|
Path(cfg['bridge_home']).mkdir(parents=True,exist_ok=True)
|
|
owner = WatchOwner(mux,Ledger(str(Path(cfg['bridge_home'])/'native-watch-ledger.sqlite3')))
|
|
kopru.WATCH_OWNER = owner
|
|
threading.Thread(target=server.serve_forever,daemon=True).start()
|
|
try:
|
|
return mux.run()
|
|
finally:
|
|
owner.close(); server.shutdown(); server.server_close()
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
raise SystemExit(main(sys.argv[1],sys.argv[2:]))
|
|
except (OSError,ValueError,KeyError):
|
|
sys.stderr.write('Owned native launcher configuration/integrity failure.\n')
|
|
raise SystemExit(78)
|