Coverage for integrations / agent_engine / onboarding_routes.py: 88.9%
45 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-12 04:49 +0000
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-12 04:49 +0000
1"""
2Onboarding API Routes — "Light Your HART" ceremony endpoints.
4Provides REST endpoints for any frontend (web, mobile, GTK4) to drive
5the onboarding state machine.
7 POST /api/onboarding/start — Start or resume a session
8 POST /api/onboarding/advance — Advance to next phase
9 GET /api/onboarding/status — Current phase for a user
10 GET /api/onboarding/profile — Get sealed HART identity
11"""
13import logging
15logger = logging.getLogger(__name__)
18def register_onboarding_routes(app):
19 """Register onboarding ceremony routes on a Flask app."""
21 @app.route('/api/onboarding/start', methods=['POST'])
22 def _onboarding_start():
23 from flask import request, jsonify
24 from hart_onboarding import (
25 get_or_create_session, has_hart_name, get_hart_profile,
26 CONVERSATION_SCRIPT,
27 )
29 data = request.get_json(silent=True) or {}
30 user_id = data.get('user_id', '1')
32 # Already onboarded?
33 if has_hart_name(user_id):
34 profile = get_hart_profile(user_id)
35 return jsonify({
36 'success': True,
37 'already_onboarded': True,
38 'profile': profile,
39 })
41 session = get_or_create_session(user_id)
43 # Return the language prompt in all languages
44 return jsonify({
45 'success': True,
46 'already_onboarded': False,
47 'phase': session.phase,
48 'language_prompt': CONVERSATION_SCRIPT['language_prompt'],
49 })
51 @app.route('/api/onboarding/advance', methods=['POST'])
52 def _onboarding_advance():
53 from flask import request, jsonify
54 from hart_onboarding import get_or_create_session, remove_session
56 data = request.get_json(silent=True) or {}
57 user_id = data.get('user_id', '1')
58 action = data.get('action')
59 action_data = data.get('data', {})
61 session = get_or_create_session(user_id)
62 result = session.advance(action=action, data=action_data)
64 # Clean up completed sessions
65 if result.get('sealed'):
66 remove_session(user_id)
68 return jsonify({'success': True, **result})
70 @app.route('/api/onboarding/status', methods=['GET'])
71 def _onboarding_status():
72 from flask import request, jsonify
73 from hart_onboarding import has_hart_name, get_hart_profile
75 user_id = request.args.get('user_id', '1')
77 if has_hart_name(user_id):
78 return jsonify({
79 'success': True,
80 'onboarded': True,
81 'profile': get_hart_profile(user_id),
82 })
84 return jsonify({
85 'success': True,
86 'onboarded': False,
87 })
89 @app.route('/api/onboarding/profile', methods=['GET'])
90 def _onboarding_profile():
91 from flask import request, jsonify
92 from hart_onboarding import get_hart_profile
94 user_id = request.args.get('user_id', '1')
95 profile = get_hart_profile(user_id)
97 if profile:
98 return jsonify({'success': True, 'profile': profile})
99 return jsonify({'success': False, 'error': 'Not onboarded'}), 404
101 logger.info("Registered HART onboarding API routes")