-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.py
More file actions
130 lines (102 loc) · 3.83 KB
/
cli.py
File metadata and controls
130 lines (102 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""
CLI commands for Sentience SDK
"""
import argparse
import sys
from .browser import SentienceBrowser
from .generator import ScriptGenerator
from .inspector import inspect
from .recorder import Trace, record
def cmd_inspect(args):
"""Start inspector mode"""
browser = SentienceBrowser(headless=False)
try:
browser.start()
print("✅ Inspector started. Hover elements to see info, click to see full details.")
print("Press Ctrl+C to stop.")
with inspect(browser):
# Keep running until interrupted
import time
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n👋 Inspector stopped.")
finally:
browser.close()
def cmd_record(args):
"""Start recording mode"""
browser = SentienceBrowser(headless=False)
try:
browser.start()
# Navigate to start URL if provided
if args.url:
browser.page.goto(args.url)
browser.page.wait_for_load_state("networkidle")
print("✅ Recording started. Perform actions in the browser.")
print("Press Ctrl+C to stop and save trace.")
with record(browser, capture_snapshots=args.snapshots) as rec:
# Add mask patterns if provided
for pattern in args.mask or []:
rec.add_mask_pattern(pattern)
# Keep running until interrupted
import time
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n💾 Saving trace...")
output = args.output or "trace.json"
rec.save(output)
print(f"✅ Trace saved to {output}")
finally:
browser.close()
def cmd_gen(args):
"""Generate script from trace"""
# Load trace
trace = Trace.load(args.trace)
# Generate script
generator = ScriptGenerator(trace)
if args.lang == "py":
code = generator.generate_python()
output = args.output or "generated.py"
generator.save_python(output)
elif args.lang == "ts":
code = generator.generate_typescript()
output = args.output or "generated.ts"
generator.save_typescript(output)
else:
print(f"❌ Unsupported language: {args.lang}")
sys.exit(1)
print(f"✅ Generated {args.lang.upper()} script: {output}")
def main():
"""Main CLI entry point"""
parser = argparse.ArgumentParser(description="Sentience SDK CLI")
subparsers = parser.add_subparsers(dest="command", help="Commands")
# Inspect command
inspect_parser = subparsers.add_parser("inspect", help="Start inspector mode")
inspect_parser.set_defaults(func=cmd_inspect)
# Record command
record_parser = subparsers.add_parser("record", help="Start recording mode")
record_parser.add_argument("--url", help="Start URL")
record_parser.add_argument("--output", "-o", help="Output trace file", default="trace.json")
record_parser.add_argument(
"--snapshots", action="store_true", help="Capture snapshots at each step"
)
record_parser.add_argument(
"--mask", action="append", help="Pattern to mask in recorded text (e.g., password)"
)
record_parser.set_defaults(func=cmd_record)
# Generate command
gen_parser = subparsers.add_parser("gen", help="Generate script from trace")
gen_parser.add_argument("trace", help="Trace JSON file")
gen_parser.add_argument("--lang", choices=["py", "ts"], default="py", help="Output language")
gen_parser.add_argument("--output", "-o", help="Output script file")
gen_parser.set_defaults(func=cmd_gen)
args = parser.parse_args()
if not args.command:
parser.print_help()
sys.exit(1)
args.func(args)
if __name__ == "__main__":
main()