55
66from .decode import decode
77from .encode import encode
8+ from .decode_generic import decode_generic
9+ from .generic import encode_generic
810from .types import Edge , Payload , Symbol
911
1012USAGE = """gcf - token-optimized wire format for LLM tool responses
1113
1214Usage:
13- gcf encode [file] Encode JSON payload to GCF (stdin if no file)
14- gcf decode [file] Decode GCF text to JSON (stdin if no file)
15- gcf stats [file] Compare token counts: JSON vs GCF (stdin if no file)
16- gcf version Print version
15+ gcf encode [file] Encode JSON graph payload to GCF (stdin if no file)
16+ gcf decode [file] Decode GCF graph text to JSON (stdin if no file)
17+ gcf encode-generic [file] Encode JSON to GCF generic profile (stdin if no file)
18+ gcf decode-generic [file] Decode GCF generic text to JSON (stdin if no file)
19+ gcf stats [file] Compare token counts: JSON vs GCF (stdin if no file)
20+ gcf version Print version
1721
1822Examples:
1923 gcf encode < payload.json
2024 gcf decode < payload.gcf
25+ echo '{"name":"Alice"}' | gcf encode-generic
26+ echo 'GCF profile=generic\\ nname=Alice' | gcf decode-generic
2127 gcf stats payload.json
2228"""
2329
@@ -37,11 +43,18 @@ def main() -> None:
3743 elif cmd == "decode" :
3844 data = _read_input (file_args )
3945 _do_decode (data )
46+ elif cmd == "encode-generic" :
47+ data = _read_input (file_args )
48+ _do_encode_generic (data )
49+ elif cmd == "decode-generic" :
50+ data = _read_input (file_args )
51+ _do_decode_generic (data )
4052 elif cmd == "stats" :
4153 data = _read_input (file_args )
4254 _do_stats (data )
4355 elif cmd == "version" :
44- print ("gcf 0.1.0" )
56+ from . import __version__
57+ print (f"gcf { __version__ } " )
4558 else :
4659 print (f"unknown command: { cmd } \n " , file = sys .stderr )
4760 print (USAGE , file = sys .stderr , end = "" )
@@ -115,6 +128,20 @@ def _payload_to_json(p: Payload) -> str:
115128 return json .dumps (obj , indent = 2 )
116129
117130
131+ def _do_encode_generic (data : str ) -> None :
132+ try :
133+ obj = json .loads (data )
134+ except json .JSONDecodeError as e :
135+ print (f"error: invalid JSON: { e } " , file = sys .stderr )
136+ sys .exit (1 )
137+ print (encode_generic (obj ), end = "" )
138+
139+
140+ def _do_decode_generic (data : str ) -> None :
141+ result = decode_generic (data )
142+ print (json .dumps (result ))
143+
144+
118145def _do_encode (data : str ) -> None :
119146 try :
120147 p = _payload_from_json (data )
0 commit comments