LovingGraceTech's picture
Add release: run_stack.py
b89d2c4 verified
#!/usr/bin/env python3
"""
HARMONIC STACK CLI
Ghost in the Machine Labs
Simple command-line interface to the Harmonic Stack.
Auto-detects hardware and configures appropriately.
Usage:
python3 run_stack.py # Interactive mode
python3 run_stack.py "your question" # Single query
python3 run_stack.py --profile gaming # Force profile
python3 run_stack.py --status # Show status only
"""
import asyncio
import sys
import json
from harmonic_stack import create_stack, HarmonicStack
from hardware_profiles import list_profiles
async def interactive_mode(stack: HarmonicStack):
"""Run interactive REPL."""
print("\nHarmonic Stack Interactive Mode")
print("Type 'quit' to exit, 'status' for stack status")
print("-" * 40)
while True:
try:
query = input("\n> ").strip()
except (EOFError, KeyboardInterrupt):
print("\nGoodbye.")
break
if not query:
continue
if query.lower() == "quit":
print("Goodbye.")
break
if query.lower() == "status":
print(json.dumps(stack.status(), indent=2))
continue
# Process query
result = await stack.process(query)
print(f"\n[{result['route']}] ({result['elapsed_ms']}ms)")
print(result['response'])
async def single_query(stack: HarmonicStack, query: str):
"""Process single query and exit."""
result = await stack.process(query)
print(result['response'])
async def main():
# Parse args
args = sys.argv[1:]
profile = None
query = None
status_only = False
i = 0
while i < len(args):
if args[i] == "--profile" and i + 1 < len(args):
profile = args[i + 1]
i += 2
elif args[i] == "--status":
status_only = True
i += 1
elif args[i] == "--list":
print("\nAvailable profiles:")
list_profiles()
return
elif args[i] == "--help":
print(__doc__)
return
else:
query = args[i]
i += 1
# Create stack
stack = await create_stack(profile)
if status_only:
print(json.dumps(stack.status(), indent=2))
return
if query:
await single_query(stack, query)
else:
await interactive_mode(stack)
if __name__ == "__main__":
asyncio.run(main())