34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
"""Read-only provider probe. No LLM calls and no case changes."""
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from .tools.project_query import ProjectResearch
|
|
from .tools.config import ToolError
|
|
|
|
|
|
def main(argv=None):
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--config", required=True, type=Path)
|
|
parser.add_argument("--query", required=True, type=Path, help="Structured project-query v1 JSON")
|
|
parser.add_argument("--output", type=Path)
|
|
args = parser.parse_args(argv)
|
|
try:
|
|
service = ProjectResearch.load(args.config)
|
|
data = service.collect(json.loads(args.query.read_text(encoding="utf-8-sig")))
|
|
if args.output:
|
|
# Never overwrite a previously captured artifact.
|
|
with args.output.open("xb") as output:
|
|
output.write(data)
|
|
print(json.dumps({"status":"CAPTURED", "bytes":len(data)}))
|
|
else:
|
|
print(data.decode("utf-8"))
|
|
return 0
|
|
except (ToolError, OSError, ValueError, TypeError) as error:
|
|
print(json.dumps({"status":"ERROR", "code":getattr(error,"code","PROJECT_QUERY_INPUT")}))
|
|
return 2
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|