# D:\AI-Hub\ComicPipeline\spine_agent.py # CLI entry point — imports SpineAgent from the spine/ package. import json import argparse from spine import SpineAgent def main(): parser = argparse.ArgumentParser(description="Spine Agent - Multi-tool AI orchestrator") parser.add_argument("prompt", help="Command prompt") parser.add_argument("--server", choices=["rig1", "spark", "rig1_network"], default="rig1") args = parser.parse_args() agent = SpineAgent() result = agent.run(args.prompt, args.server) if result["status"] == "success": op = result.get("operation", "") if op == "generate_image": print(f"Image generated: {result['filepath']}") print(f"Model: {result['model']}, Seed: {result['seed']}") elif op == "generate_characters": print(f"Characters generated: {result['success_count']}/{result['total_characters']}") print(f"Output: {result['characters_dir']}") for r in result['results']: if r['status'] == 'success': print(f" {r['character_id']}: {r['filepath']}") elif op == "generate_scene": print(f"Scene generated: {result['filepath']}") print(f"Story: {result['story']}, Page: {result['page_number']}") print(f"Characters: {result['characters']}, Seed: {result['seed']}") elif op == "create_story": print(f"Story created: {result['title']}") print(f"Format: {result['format']}, ID: {result['story_id']}") print(f"Characters: {result['characters']}, Pages: {result['pages']}") print(f"Saved: {result['filepath']}") print(f"Duration: {result['duration_seconds']}s") elif op == "render_comic": print(f"Comic rendered: {result['story']}") print(f"Pages: {result['pages']}") print(f"Output: {result['filepath']}") elif op == "render_coloring_book": print(f"Coloring book rendered: {result['story']}") print(f"Pages: {result['pages']}") print(f"Output: {result['filepath']}") elif op == "render_children_book": print(f"Children's book rendered: {result['story']}") print(f"Output: {result['filepath']}") elif op == "render_story": print(f"Story rendered: {result['story_id']}") print(f"Duration: {result['duration_seconds']}s") elif op == "retry_failures": print(f"Retry complete: {result['recovered']}/{result['retried']} recovered") if result['still_failed'] > 0: print(f"Still failing: {result['still_failed']}") elif op == "batch_generate": print(f"Batch generated: {result['success_count']}/{result['count']} images") print(f"Output: {result['output_dir']}") if result['seeds']: print(f"Seeds: {result['seeds']}") elif op == "memory_stats": print(f"Memory stats: {json.dumps(result['data'], indent=2)}") elif op == "recall": print(f"Recall results: {json.dumps(result['data'], indent=2)}") elif op == "rag_query": print(f"Answer: {result['answer']}") elif op == "read_json": print(f"Read: {result['filepath']}") print(json.dumps(result['data'], indent=2)[:500]) else: print(json.dumps(result, indent=2)) else: print(f"Error: {result.get('error', 'unknown')}") if __name__ == "__main__": main()