Trisha Tomy commited on
Commit
60c7a7f
·
1 Parent(s): 5ddc44b

fixes+permset

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .DS_Store +0 -0
  2. .gitignore +119 -0
  3. README.md +70 -1
  4. app.py +177 -152
  5. env.example +17 -0
  6. proxy-lite-demo-v2/.gitattributes +0 -35
  7. proxy-lite-demo-v2/.gitignore +0 -177
  8. proxy-lite-demo-v2/.idea/.gitignore +0 -14
  9. proxy-lite-demo-v2/src/proxy_lite/agents/agent_base.py +15 -12
  10. proxy-lite-demo-v2/src/proxy_lite/app.py +11 -10
  11. proxy-lite-demo-v2/src/proxy_lite/browser/__init__.py +5 -0
  12. proxy-lite-demo-v2/src/proxy_lite/browser/bounding_boxes.py +5 -3
  13. proxy-lite-demo-v2/src/proxy_lite/browser/browser.py +48 -8
  14. proxy-lite-demo-v2/src/proxy_lite/cli.py +16 -12
  15. proxy-lite-demo-v2/src/proxy_lite/client.py +13 -11
  16. proxy-lite-demo-v2/src/proxy_lite/environments/webbrowser.py +151 -40
  17. proxy-lite-demo-v2/src/proxy_lite/gif_maker.py +20 -9
  18. proxy-lite-demo-v2/src/proxy_lite/history.py +28 -8
  19. proxy-lite-demo-v2/src/proxy_lite/logger.py +14 -5
  20. proxy-lite-demo-v2/src/proxy_lite/recorder.py +6 -3
  21. proxy-lite-demo-v2/src/proxy_lite/runner.py +30 -24
  22. proxy-lite-demo-v2/src/proxy_lite/solvers/simple_solver.py +31 -12
  23. proxy-lite-demo-v2/src/proxy_lite/tools/browser_tool.py +6 -5
  24. proxy-lite-demo-v2/src/proxy_lite/tools/tool_base.py +2 -1
  25. proxy-lite-demo-v2/test_tool_calling.py +0 -65
  26. proxy-lite-work/.gitignore +0 -45
  27. proxy-lite-work/.sf/orgs/00DWd000006jIa1MAE/localSourceTracking/HEAD +1 -0
  28. proxy-lite-work/.sf/orgs/00DWd000006jIa1MAE/localSourceTracking/config +7 -0
  29. proxy-lite-work/.sfdx/indexes/lwc/custom-components.json +1 -0
  30. proxy-lite-work/.sfdx/sfdx-config.json +3 -0
  31. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Account.cls +196 -0
  32. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls +25 -0
  33. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Asset.cls +138 -0
  34. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Attachment.cls +35 -0
  35. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Case.cls +111 -0
  36. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Contact.cls +167 -0
  37. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Contract.cls +96 -0
  38. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Domain.cls +29 -0
  39. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Lead.cls +128 -0
  40. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Note.cls +32 -0
  41. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Opportunity.cls +113 -0
  42. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Order.cls +127 -0
  43. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls +47 -0
  44. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls +47 -0
  45. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Product2.cls +91 -0
  46. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/RecordType.cls +35 -0
  47. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Report.cls +47 -0
  48. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Task.cls +79 -0
  49. proxy-lite-work/.sfdx/tools/sobjects/standardObjects/User.cls +0 -0
  50. proxy-lite-work/.sfdx/tools/soqlMetadata/standardObjects/Account.json +2952 -0
.DS_Store DELETED
Binary file (6.15 kB)
 
.gitignore ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment variables and secrets (CRITICAL - NEVER COMMIT)
2
+ .env
3
+ .env.*
4
+ *.env
5
+ .env.local
6
+ .env.development
7
+ .env.production
8
+
9
+ # API Keys and credentials (CRITICAL)
10
+ secrets.json
11
+ credentials.json
12
+ config.json
13
+ .secrets
14
+
15
+ # Python Virtual Environments (Regenerable)
16
+ venv/
17
+ .venv/
18
+ env/
19
+ .env/
20
+ ENV/
21
+ env.bak/
22
+ venv.bak/
23
+
24
+ # Python cache and compiled files (Regenerable)
25
+ __pycache__/
26
+ *.py[cod]
27
+ *$py.class
28
+ *.so
29
+ *.egg-info/
30
+ .installed.cfg
31
+ *.egg
32
+ MANIFEST
33
+
34
+ # IDE and Editor files (Personal preference)
35
+ .vscode/
36
+ .idea/
37
+ *.swp
38
+ *.swo
39
+ *~
40
+
41
+ # Operating System files (System artifacts)
42
+ .DS_Store
43
+ .DS_Store?
44
+ ._*
45
+ .Spotlight-V100
46
+ .Trashes
47
+ ehthumbs.db
48
+ Thumbs.db
49
+ Desktop.ini
50
+
51
+ # Logs and temporary files (Regenerable)
52
+ *.log
53
+ logs/
54
+ pip-log.txt
55
+ pip-delete-this-directory.txt
56
+
57
+ # Testing and coverage (Regenerable)
58
+ .pytest_cache/
59
+ .coverage
60
+ .coverage.*
61
+ htmlcov/
62
+ .tox/
63
+ .nox/
64
+ coverage.xml
65
+ *.cover
66
+ .hypothesis/
67
+
68
+ # Documentation builds (Regenerable)
69
+ docs/_build/
70
+ site/
71
+
72
+ # Build and distribution (Regenerable)
73
+ build/
74
+ dist/
75
+ *.egg-info/
76
+ .eggs/
77
+ *.whl
78
+
79
+ # Application-specific folders (May contain sensitive data)
80
+ local_trajectories/
81
+ screenshots/
82
+ gifs/
83
+ uploads/
84
+ downloads/
85
+
86
+ # Backup files
87
+ *.bak
88
+ *.backup
89
+ *.old
90
+ *.orig
91
+
92
+ # Temporary files
93
+ tmp/
94
+ temp/
95
+ .tmp/
96
+
97
+ # Node modules (if any Node.js is used)
98
+ node_modules/
99
+ npm-debug.log*
100
+ yarn-debug.log*
101
+ yarn-error.log*
102
+
103
+ # Jupyter Notebook checkpoints
104
+ .ipynb_checkpoints
105
+
106
+ # macOS specific
107
+ .AppleDouble
108
+ .LSOverride
109
+
110
+ # Windows specific
111
+ $RECYCLE.BIN/
112
+ *.cab
113
+ *.msi
114
+ *.msix
115
+ *.msm
116
+ *.msp
117
+
118
+ # Linux specific
119
+ *~
README.md CHANGED
@@ -7,4 +7,73 @@ sdk: docker
7
  pinned: false
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  pinned: false
8
  ---
9
 
10
+ # Proxy-lite Salesforce Automation with Single-Browser Login
11
+
12
+ This is a modernized proxy-lite Salesforce automation system that uses a streamlined single-browser login approach.
13
+
14
+ ## Key Features
15
+
16
+ ✅ **Single-Browser Login**: No more cookie injection complexity
17
+ ✅ **Dual API Support**: Works with both Gemini and Convergence AI
18
+ ✅ **Automatic Authentication**: Handles Salesforce login seamlessly
19
+ ✅ **Efficient Architecture**: One browser instance for login and task execution
20
+
21
+ ## Quick Start
22
+
23
+ ### Environment Setup
24
+
25
+ 1. Install dependencies:
26
+ ```bash
27
+ pip install -r requirements.txt
28
+ ```
29
+
30
+ 2. Set environment variables:
31
+ ```bash
32
+ # API Keys (set at least one)
33
+ export GEMINI_API_KEY=your_gemini_api_key
34
+ export HF_API_TOKEN=your_hf_token
35
+
36
+ # Salesforce Credentials
37
+ export SALESFORCE_USERNAME=your_salesforce_username
38
+ export SALESFORCE_PASSWORD=your_salesforce_password
39
+ ```
40
+
41
+ 3. Run the Flask app:
42
+ ```bash
43
+ python app.py
44
+ ```
45
+
46
+ ### Usage
47
+
48
+ Send a POST request to `/run_proxy_task`:
49
+
50
+ ```json
51
+ {
52
+ "task": "Navigate to the permission set and assign it to the user",
53
+ "url": "https://your-org.salesforce.com/lightning/setup/AccountForecastSettings/home"
54
+ }
55
+ ```
56
+
57
+ ## Architecture
58
+
59
+ The system automatically:
60
+ 1. Initializes a browser session
61
+ 2. Performs Salesforce login using provided credentials
62
+ 3. Navigates to the target URL
63
+ 4. Executes the requested task
64
+ 5. Returns structured results
65
+
66
+ ## API Priority
67
+
68
+ - **Gemini API** (preferred if `GEMINI_API_KEY` is set)
69
+ - **Convergence AI** (fallback if only `HF_API_TOKEN` is set)
70
+
71
+ ## Benefits over Cookie Injection
72
+
73
+ - Eliminates cookie extraction/injection complexity
74
+ - More efficient (no separate browser instance)
75
+ - Better session management
76
+ - More reliable navigation
77
+ - Easier to maintain and debug
78
+
79
+ See `SINGLE_BROWSER_LOGIN_GUIDE.md` for detailed documentation.
app.py CHANGED
@@ -7,89 +7,67 @@ from proxy_lite import Runner, RunnerConfig
7
  import os
8
  import logging
9
  from datetime import datetime
10
- from playwright.async_api import async_playwright, TimeoutError as PlaywrightTimeoutError
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
13
  logger = logging.getLogger(__name__)
14
 
15
  app = Flask(__name__)
16
 
17
- _runner = None
18
-
19
- async def perform_hardcoded_salesforce_login_and_get_cookies(username, password, login_url, target_url):
20
- logger.info("Attempting hardcoded Salesforce login with Playwright to obtain cookies...")
21
- async with async_playwright() as p:
22
- browser = await p.chromium.launch(headless=True, args=["--no-sandbox", "--disable-setuid-sandbox"])
23
- context = await browser.new_context()
24
- page = await context.new_page()
25
-
26
- try:
27
- await page.goto(login_url, wait_until="domcontentloaded", timeout=60000)
28
- logger.info(f"Playwright: Navigated to Salesforce login page: {page.url}")
29
-
30
- await page.fill("#username", username)
31
- await page.fill("#password", password)
32
- await page.click("#Login")
33
- logger.info("Playwright: Filled credentials and clicked Login. Waiting for post-login state...")
34
-
35
- try:
36
- await page.wait_for_url(lambda url: "login.salesforce.com" not in url and "unauthorized" not in url.lower(), timeout=60000)
37
- logger.info(f"Playwright: Successfully redirected from login page. Current URL: {page.url}")
38
- await page.wait_for_selector('button[title="App Launcher"]', timeout=30000)
39
- logger.info("Playwright: Main Salesforce Lightning UI (e.g., App Launcher) detected after login.")
40
-
41
- except PlaywrightTimeoutError:
42
- logger.error(f"Playwright: Did not detect main UI or expected URL change within timeout after login. Current URL: {page.url}. Login might have failed or stuck on a redirect loop.")
43
- raise Exception("Salesforce login redirection failed or main UI not detected.")
44
-
45
- logger.info(f"Playwright: Navigating to target URL: {target_url} to ensure all relevant cookies are captured.")
46
- await page.goto(target_url, wait_until="domcontentloaded", timeout=60000)
47
-
48
- try:
49
- # Wait for generic Salesforce setup page elements to load
50
- await page.wait_for_selector('.setupPage, .slds-page-header, .slds-card, [data-aura-class*="setup"], .forcePageBlockSectionView', timeout=30000)
51
- logger.info("Playwright: Detected Salesforce setup page elements loaded successfully.")
52
- except PlaywrightTimeoutError:
53
- logger.warning("Playwright: Specific setup page elements not found. Trying generic page load check...")
54
- try:
55
- # Fallback: wait for page to reach network idle state
56
- await page.wait_for_load_state("networkidle", timeout=10000)
57
- logger.info("Playwright: Page reached network idle state - proceeding with task.")
58
- except PlaywrightTimeoutError:
59
- logger.info("Playwright: Page load validation timed out, but continuing as page may still be functional.")
60
-
61
- await asyncio.sleep(2)
62
- logger.info(f"Playwright: Successfully navigated to and confirmed content on {page.url}")
63
-
64
- cookies = await context.cookies()
65
- logger.info(f"Playwright: Extracted {len(cookies)} cookies after successful login and navigation.")
66
- return cookies
67
-
68
- except PlaywrightTimeoutError as e:
69
- logger.error(f"Playwright login/navigation failed (Timeout): {e}. Current URL: {page.url}")
70
- raise
71
- except Exception as e:
72
- logger.error(f"Playwright login/navigation failed (General Error): {e}. Current URL: {page.url}")
73
- raise
74
- finally:
75
- if browser:
76
- await browser.close()
77
-
78
-
79
- async def initialize_runner_with_cookies(cookies: list, target_url: str):
80
  global _runner
81
- logger.info("Initializing Proxy-lite Runner with provided cookies...")
82
 
 
83
  gemini_api_key = os.environ.get("GEMINI_API_KEY")
84
- if not gemini_api_key:
85
- logger.error("GEMINI_API_KEY environment variable not set. Cannot initialize Runner.")
86
- raise ValueError("GEMINI_API_KEY environment variable not set. Please set it as a Space secret.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  config_dict = {
89
  "environment": {
90
  "name": "webbrowser",
91
- "homepage": "about:blank", # Safe startup, we'll open new tab programmatically
92
- "headless": True,
93
  "launch_args": ["--no-sandbox", "--disable-setuid-sandbox"],
94
  "screenshot_delay": 0.5,
95
  "include_html": True,
@@ -100,19 +78,19 @@ async def initialize_runner_with_cookies(cookies: list, target_url: str):
100
  "browserbase_timeout": 7200,
101
  "keep_original_image": False,
102
  "no_pois_in_image": False,
103
- "initial_cookies": cookies
 
 
 
 
 
 
104
  },
105
  "solver": {
106
  "name": "simple",
107
  "agent": {
108
  "name": "proxy_lite",
109
- "client": {
110
- "name": "gemini",
111
- "model_id": "gemini-2.0-flash-001",
112
- "api_key": gemini_api_key,
113
- "http_timeout": 50.0,
114
- "http_concurrent_connections": 50,
115
- },
116
  "history_messages_limit": {
117
  "screenshot": 1
118
  },
@@ -129,15 +107,18 @@ async def initialize_runner_with_cookies(cookies: list, target_url: str):
129
  }
130
  config = RunnerConfig.from_dict(config_dict)
131
 
132
- logger.info(f"DEBUG: app.py - Initializing Proxy-lite Runner with Gemini Flash 2.0 configuration.")
133
  _runner = Runner(config=config)
134
- logger.info("Proxy-lite Runner initialized successfully with Gemini Flash 2.0 and injected cookies.")
135
  return _runner
136
 
137
 
138
  @app.route('/run_proxy_task', methods=['POST'])
139
  async def run_proxy_task_endpoint():
140
  data = request.json
 
 
 
141
  request_task_instruction = data.get('task')
142
  target_url = data.get('url')
143
 
@@ -165,24 +146,90 @@ async def run_proxy_task_endpoint():
165
  logger.error("Salesforce credentials (SALESFORCE_USERNAME, SALESFORCE_PASSWORD) environment variables not set.")
166
  return jsonify({"error": "Salesforce credentials not configured. Please set SALESFORCE_USERNAME and SALESFORCE_PASSWORD as Space secrets."}), 500
167
 
168
- salesforce_login_url = "https://login.salesforce.com/"
169
- logger.info("Executing hardcoded login via Playwright to get session cookies...")
170
- session_cookies = await perform_hardcoded_salesforce_login_and_get_cookies(
171
- salesforce_username, salesforce_password, salesforce_login_url, target_url
172
- )
173
- logger.info(f"Successfully obtained {len(session_cookies)} cookies. These will be injected into the agent's browser.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  else:
175
  # General web browsing - no login required
176
  logger.info("Non-Salesforce URL detected. Skipping Salesforce login.")
177
- session_cookies = []
178
-
179
- runner = await initialize_runner_with_cookies(session_cookies, target_url)
180
- logger.info("Proxy-lite Runner initialized with cookies." if session_cookies else "Proxy-lite Runner initialized for general web browsing.")
181
 
182
- logger.info("Agent will use mandatory new tab tool to bypass loading issues.")
183
-
184
- # MANDATORY new tab navigation task - this is critical to avoid loading issues
185
- agent_task = f"""
186
  CRITICAL FIRST STEP - MANDATORY:
187
  Your VERY FIRST action must be to use the open_new_tab_and_go_to tool to navigate to {target_url}
188
 
@@ -216,61 +263,39 @@ GENERAL INSTRUCTIONS:
216
  - Complete the entire task autonomously using the available tools
217
  - After completing all steps, use the return_value tool to provide your final response
218
  - If you make a plan, IMMEDIATELY execute it step by step using the appropriate tools
219
- """
220
-
221
- logger.info("Executing agent task with mandatory new tab navigation...")
222
- result = await runner.run(task=agent_task)
223
-
224
- # Extract the actual result value from the Run object
225
- if hasattr(result, 'value') and result.value:
226
- task_result = str(result.value)
227
- elif hasattr(result, 'result') and result.result:
228
- task_result = str(result.result)
229
- else:
230
- task_result = str(result)
231
 
232
- logger.info(f"Proxy-lite task completed. Output (truncated for log): {task_result[:500]}...")
233
-
234
- # Structure response for LWC integration
235
- response = {
236
- "status": "success",
237
- "message": "Task completed successfully",
238
- "data": {
239
- "task_result": task_result,
240
- "steps_completed": [
241
- "Hardcoded Salesforce login completed",
242
- "Browser session initialized with cookies",
243
- "New tab navigation executed",
244
- "Target Salesforce setup page accessed",
245
- "Task execution completed successfully"
246
- ],
247
- "environment": {
248
- "target_url": target_url,
249
- "cookies_count": len(session_cookies),
250
- "navigation_method": "new_tab_bypass"
251
- }
252
- },
253
- "timestamp": datetime.now().isoformat(),
254
- "task_request": request_task_instruction
255
- }
256
-
257
- return jsonify(response)
258
-
259
- except PlaywrightTimeoutError as e:
260
- logger.exception(f"Playwright timeout during login/navigation: {e}")
261
- error_response = {
262
- "status": "error",
263
- "error_type": "navigation_timeout",
264
- "message": "Page loading timed out during login or navigation",
265
- "data": {
266
- "error_details": str(e),
267
- "suggested_action": "Retry the request - network issues may be temporary",
268
- "steps_completed": ["Login attempted", "Navigation failed due to timeout"]
269
- },
270
- "timestamp": datetime.now().isoformat(),
271
- "task_request": request_task_instruction
272
- }
273
- return jsonify(error_response), 500
274
 
275
  except ValueError as e:
276
  logger.exception(f"Configuration error: {e}")
@@ -318,6 +343,7 @@ def health_check():
318
  # Check environment variables
319
  env_status = {
320
  "GEMINI_API_KEY": "✓" if os.environ.get("GEMINI_API_KEY") else "✗",
 
321
  "SALESFORCE_USERNAME": "✓" if os.environ.get("SALESFORCE_USERNAME") else "✗",
322
  "SALESFORCE_PASSWORD": "✓" if os.environ.get("SALESFORCE_PASSWORD") else "✗"
323
  }
@@ -342,9 +368,8 @@ def health_check():
342
  }
343
 
344
  return jsonify(health_response)
345
-
346
  if __name__ == '__main__':
347
- if not os.environ.get("GEMINI_API_KEY"):
348
- logger.error("GEMINI_API_KEY environment variable is not set. Please set it for local testing.")
349
  logger.info("Starting Flask development server on 0.0.0.0:6101...")
350
- app.run(host='0.0.0.0', port=6101, debug=True)
 
7
  import os
8
  import logging
9
  from datetime import datetime
10
+
11
+ # Load environment variables from .env file
12
+ try:
13
+ from dotenv import load_dotenv
14
+ load_dotenv() # This loads .env from current directory
15
+ # Also try loading from subdirectory if it exists
16
+ if os.path.exists('proxy-lite-demo-v2/.env'):
17
+ load_dotenv('proxy-lite-demo-v2/.env')
18
+ print("✅ Environment variables loaded from .env file")
19
+ except ImportError:
20
+ print("⚠️ python-dotenv not installed. Install with: pip install python-dotenv")
21
+ except Exception as e:
22
+ print(f"⚠️ Could not load .env file: {e}")
23
 
24
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
25
  logger = logging.getLogger(__name__)
26
 
27
  app = Flask(__name__)
28
 
29
+ _runner: Runner | None = None
30
+
31
+ async def initialize_runner_with_single_browser_login(username: str, password: str, target_url: str):
32
+ """Initialize Proxy-lite Runner with single-browser login approach."""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  global _runner
34
+ logger.info("Initializing Proxy-lite Runner with single-browser login approach...")
35
 
36
+ # Check for required API keys with debugging
37
  gemini_api_key = os.environ.get("GEMINI_API_KEY")
38
+ hf_api_token = os.environ.get("HF_API_TOKEN")
39
+
40
+ logger.info(f"🔍 Environment check: GEMINI_API_KEY={'SET' if gemini_api_key else 'NOT SET'}")
41
+ logger.info(f"🔍 Environment check: HF_API_TOKEN={'SET' if hf_api_token else 'NOT SET'}")
42
+
43
+ if not gemini_api_key and not hf_api_token:
44
+ logger.error("Neither GEMINI_API_KEY nor HF_API_TOKEN environment variable is set")
45
+ raise ValueError("Either GEMINI_API_KEY or HF_API_TOKEN must be set")
46
+
47
+ # Prefer Gemini if both are available
48
+ if gemini_api_key:
49
+ client_config = {
50
+ "name": "gemini",
51
+ "model_id": "gemini-2.0-flash-001",
52
+ "api_key": gemini_api_key,
53
+ }
54
+ logger.info("🤖 Using Gemini API for inference")
55
+ else:
56
+ client_config = {
57
+ "name": "convergence",
58
+ "model_id": "convergence-ai/proxy-lite-3b",
59
+ "api_base": "https://convergence-ai-demo-api.hf.space/v1",
60
+ "api_key": hf_api_token,
61
+ "http_timeout": 50.0,
62
+ "http_concurrent_connections": 50,
63
+ }
64
+ logger.info("🤖 Using Convergence AI for inference")
65
 
66
  config_dict = {
67
  "environment": {
68
  "name": "webbrowser",
69
+ "homepage": "about:blank", # Will be skipped due to login
70
+ "headless": False,
71
  "launch_args": ["--no-sandbox", "--disable-setuid-sandbox"],
72
  "screenshot_delay": 0.5,
73
  "include_html": True,
 
78
  "browserbase_timeout": 7200,
79
  "keep_original_image": False,
80
  "no_pois_in_image": False,
81
+ # --- SINGLE-BROWSER LOGIN CONFIG ---
82
+ "perform_login": True,
83
+ "salesforce_login_url": "https://login.salesforce.com/",
84
+ "salesforce_username": username,
85
+ "salesforce_password": password,
86
+ "target_url": target_url
87
+ # --- END SINGLE-BROWSER LOGIN CONFIG ---
88
  },
89
  "solver": {
90
  "name": "simple",
91
  "agent": {
92
  "name": "proxy_lite",
93
+ "client": client_config,
 
 
 
 
 
 
94
  "history_messages_limit": {
95
  "screenshot": 1
96
  },
 
107
  }
108
  config = RunnerConfig.from_dict(config_dict)
109
 
110
+ logger.info(f"DEBUG: app.py - Initializing Proxy-lite Runner with single-browser login approach")
111
  _runner = Runner(config=config)
112
+ logger.info("Proxy-lite Runner initialized successfully with single-browser login")
113
  return _runner
114
 
115
 
116
  @app.route('/run_proxy_task', methods=['POST'])
117
  async def run_proxy_task_endpoint():
118
  data = request.json
119
+ if not data:
120
+ return jsonify({"error": "No JSON data provided"}), 400
121
+
122
  request_task_instruction = data.get('task')
123
  target_url = data.get('url')
124
 
 
146
  logger.error("Salesforce credentials (SALESFORCE_USERNAME, SALESFORCE_PASSWORD) environment variables not set.")
147
  return jsonify({"error": "Salesforce credentials not configured. Please set SALESFORCE_USERNAME and SALESFORCE_PASSWORD as Space secrets."}), 500
148
 
149
+ runner = await initialize_runner_with_single_browser_login(salesforce_username, salesforce_password, target_url)
150
+ logger.info("Proxy-lite Runner initialized with cookies." if salesforce_username and salesforce_password else "Proxy-lite Runner initialized for general web browsing.")
151
+
152
+ logger.info("Agent will use mandatory new tab tool to bypass loading issues.")
153
+
154
+ # MANDATORY new tab navigation task - this is critical to avoid loading issues
155
+ agent_task = f"""
156
+ CRITICAL FIRST STEP - MANDATORY:
157
+ Your VERY FIRST action must be to use the open_new_tab_and_go_to tool to navigate to {target_url}
158
+
159
+ DO NOT skip this step. DO NOT use goto. You MUST use: open_new_tab_and_go_to(url='{target_url}')
160
+
161
+ This is necessary because direct navigation to this URL gets stuck loading. The new tab approach bypasses this issue.
162
+
163
+ STEP 1: Use open_new_tab_and_go_to(url='{target_url}')
164
+ STEP 2: Wait for the page to be fully loaded (no loading spinners visible)
165
+ STEP 3: {request_task_instruction}
166
+
167
+ CRITICAL WORKFLOW - FOLLOW THESE EXACT STEPS IN SEQUENCE:
168
+
169
+ STEP A: Select Permission Set
170
+ - Use select_option_by_text tool to find and select the target permission set from Available list
171
+ - Wait for "[ACTION COMPLETED]" response before proceeding
172
+
173
+ STEP B: Click Add Button
174
+ - After successful selection, immediately click the "Add" button to move permission set to Enabled list
175
+ - Do NOT repeat the selection - proceed directly to Add button
176
+
177
+ STEP C: Click Save Button
178
+ - After clicking Add, immediately click "Save" to persist the changes
179
+ - After Save, Salesforce redirects to User page indicating SUCCESS
180
+
181
+ CRITICAL: Do NOT repeat actions. Each step should happen exactly once in sequence.
182
+
183
+ GENERAL INSTRUCTIONS:
184
+ - You must EXECUTE all actions immediately - do NOT just describe what you plan to do
185
+ - Do NOT wait for user input or ask "what should I do next?"
186
+ - Complete the entire task autonomously using the available tools
187
+ - After completing all steps, use the return_value tool to provide your final response
188
+ - If you make a plan, IMMEDIATELY execute it step by step using the appropriate tools
189
+ """
190
+
191
+ logger.info("Executing agent task with mandatory new tab navigation...")
192
+ result = await runner.run(task=agent_task)
193
+
194
+ # Extract the actual result value from the Run object
195
+ task_result = str(getattr(result, "value", None) or getattr(result, "result", None) or result)
196
+
197
+ logger.info(f"Proxy-lite task completed. Output (truncated for log): {task_result[:500]}...")
198
+
199
+ # Structure response for LWC integration
200
+ response = {
201
+ "status": "success",
202
+ "message": "Task completed successfully",
203
+ "data": {
204
+ "task_result": task_result,
205
+ "steps_completed": [
206
+ "Hardcoded Salesforce login completed",
207
+ "Browser session initialized with cookies",
208
+ "New tab navigation executed",
209
+ "Target Salesforce setup page accessed",
210
+ "Task execution completed successfully"
211
+ ],
212
+ "environment": {
213
+ "target_url": target_url,
214
+ "cookies_count": 0, # No explicit cookie count for single-browser login
215
+ "navigation_method": "new_tab_bypass"
216
+ }
217
+ },
218
+ "timestamp": datetime.now().isoformat(),
219
+ "task_request": request_task_instruction
220
+ }
221
+
222
+ return jsonify(response)
223
  else:
224
  # General web browsing - no login required
225
  logger.info("Non-Salesforce URL detected. Skipping Salesforce login.")
226
+ runner = await initialize_runner_with_single_browser_login("", "", target_url)
227
+ logger.info("Proxy-lite Runner initialized for general web browsing.")
 
 
228
 
229
+ logger.info("Agent will use mandatory new tab tool to bypass loading issues.")
230
+
231
+ # MANDATORY new tab navigation task - this is critical to avoid loading issues
232
+ agent_task = f"""
233
  CRITICAL FIRST STEP - MANDATORY:
234
  Your VERY FIRST action must be to use the open_new_tab_and_go_to tool to navigate to {target_url}
235
 
 
263
  - Complete the entire task autonomously using the available tools
264
  - After completing all steps, use the return_value tool to provide your final response
265
  - If you make a plan, IMMEDIATELY execute it step by step using the appropriate tools
266
+ """
 
 
 
 
 
 
 
 
 
 
 
267
 
268
+ logger.info("Executing agent task with mandatory new tab navigation...")
269
+ result = await runner.run(task=agent_task)
270
+
271
+ # Extract the actual result value from the Run object
272
+ task_result = str(getattr(result, "value", None) or getattr(result, "result", None) or result)
273
+
274
+ logger.info(f"Proxy-lite task completed. Output (truncated for log): {task_result[:500]}...")
275
+
276
+ # Structure response for LWC integration
277
+ response = {
278
+ "status": "success",
279
+ "message": "Task completed successfully",
280
+ "data": {
281
+ "task_result": task_result,
282
+ "steps_completed": [
283
+ "Browser session initialized with cookies",
284
+ "New tab navigation executed",
285
+ "Target Salesforce setup page accessed",
286
+ "Task execution completed successfully"
287
+ ],
288
+ "environment": {
289
+ "target_url": target_url,
290
+ "cookies_count": 0, # No explicit cookie count for single-browser login
291
+ "navigation_method": "new_tab_bypass"
292
+ }
293
+ },
294
+ "timestamp": datetime.now().isoformat(),
295
+ "task_request": request_task_instruction
296
+ }
297
+
298
+ return jsonify(response)
 
 
 
 
 
 
 
 
 
 
 
299
 
300
  except ValueError as e:
301
  logger.exception(f"Configuration error: {e}")
 
343
  # Check environment variables
344
  env_status = {
345
  "GEMINI_API_KEY": "✓" if os.environ.get("GEMINI_API_KEY") else "✗",
346
+ "HF_API_TOKEN": "✓" if os.environ.get("HF_API_TOKEN") else "✗",
347
  "SALESFORCE_USERNAME": "✓" if os.environ.get("SALESFORCE_USERNAME") else "✗",
348
  "SALESFORCE_PASSWORD": "✓" if os.environ.get("SALESFORCE_PASSWORD") else "✗"
349
  }
 
368
  }
369
 
370
  return jsonify(health_response)
 
371
  if __name__ == '__main__':
372
+ if not os.environ.get("GEMINI_API_KEY") and not os.environ.get("HF_API_TOKEN"):
373
+ logger.error("Neither GEMINI_API_KEY nor HF_API_TOKEN environment variable is set. Please set at least one for local testing.")
374
  logger.info("Starting Flask development server on 0.0.0.0:6101...")
375
+ app.run(host='0.0.0.0', port=6101, debug=True)
env.example ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copy this file to .env and fill in your actual values
2
+ # DO NOT commit the .env file with real values!
3
+
4
+ # API Token for Hugging Face (for Convergence AI model)
5
+ HF_API_TOKEN=your_huggingface_token_here
6
+
7
+ # Salesforce credentials for automation
8
9
+ SALESFORCE_PASSWORD=your_salesforce_password
10
+
11
+ # Google Gemini API Key (alternative to HF_API_TOKEN)
12
+ GEMINI_API_KEY=your_gemini_api_key_here
13
+
14
+ # Usage Instructions:
15
+ # 1. Copy this file: cp env.example .env
16
+ # 2. Replace the placeholder values with your actual credentials
17
+ # 3. The .env file is automatically ignored by git for security
proxy-lite-demo-v2/.gitattributes DELETED
@@ -1,35 +0,0 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
proxy-lite-demo-v2/.gitignore DELETED
@@ -1,177 +0,0 @@
1
- # Byte-compiled / optimized / DLL files
2
- __pycache__/
3
- *.py[cod]
4
- *$py.class
5
-
6
- # C extensions
7
- *.so
8
-
9
- # Distribution / packaging
10
- .Python
11
- build/
12
- develop-eggs/
13
- dist/
14
- downloads/
15
- eggs/
16
- .eggs/
17
- lib/
18
- lib64/
19
- parts/
20
- sdist/
21
- var/
22
- wheels/
23
- share/python-wheels/
24
- *.egg-info/
25
- .installed.cfg
26
- *.egg
27
- MANIFEST
28
-
29
- # PyInstaller
30
- # Usually these files are written by a python script from a template
31
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
- *.manifest
33
- *.spec
34
-
35
- # Installer logs
36
- pip-log.txt
37
- pip-delete-this-directory.txt
38
-
39
- # Unit test / coverage reports
40
- htmlcov/
41
- .tox/
42
- .nox/
43
- .coverage
44
- .coverage.*
45
- .cache
46
- nosetests.xml
47
- coverage.xml
48
- *.cover
49
- *.py,cover
50
- .hypothesis/
51
- .pytest_cache/
52
- cover/
53
-
54
- # Translations
55
- *.mo
56
- *.pot
57
-
58
- # Django stuff:
59
- *.log
60
- local_settings.py
61
- db.sqlite3
62
- db.sqlite3-journal
63
-
64
- # Flask stuff:
65
- instance/
66
- .webassets-cache
67
-
68
- # Scrapy stuff:
69
- .scrapy
70
-
71
- # Sphinx documentation
72
- docs/_build/
73
-
74
- # PyBuilder
75
- .pybuilder/
76
- target/
77
-
78
- # Jupyter Notebook
79
- .ipynb_checkpoints
80
-
81
- # IPython
82
- profile_default/
83
- ipython_config.py
84
-
85
- # pyenv
86
- # For a library or package, you might want to ignore these files since the code is
87
- # intended to run in multiple environments; otherwise, check them in:
88
- # .python-version
89
-
90
- # pipenv
91
- # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
- # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
- # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
- # install all needed dependencies.
95
- #Pipfile.lock
96
-
97
- # UV
98
- # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
- # This is especially recommended for binary packages to ensure reproducibility, and is more
100
- # commonly ignored for libraries.
101
- #uv.lock
102
-
103
- # poetry
104
- # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
- # This is especially recommended for binary packages to ensure reproducibility, and is more
106
- # commonly ignored for libraries.
107
- # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
- #poetry.lock
109
-
110
- # pdm
111
- # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
- #pdm.lock
113
- # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
- # in version control.
115
- # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
- .pdm.toml
117
- .pdm-python
118
- .pdm-build/
119
-
120
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
- __pypackages__/
122
-
123
- # Celery stuff
124
- celerybeat-schedule
125
- celerybeat.pid
126
-
127
- # SageMath parsed files
128
- *.sage.py
129
-
130
- # Environments
131
- .env
132
- .venv
133
- env/
134
- venv/
135
- ENV/
136
- env.bak/
137
- venv.bak/
138
-
139
- # Spyder project settings
140
- .spyderproject
141
- .spyproject
142
-
143
- # Rope project settings
144
- .ropeproject
145
-
146
- # mkdocs documentation
147
- /site
148
-
149
- # mypy
150
- .mypy_cache/
151
- .dmypy.json
152
- dmypy.json
153
-
154
- # Pyre type checker
155
- .pyre/
156
-
157
- # pytype static type analyzer
158
- .pytype/
159
-
160
- # Cython debug symbols
161
- cython_debug/
162
-
163
- # PyCharm
164
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
- # and can be added to the global gitignore or merged into this file. For a more nuclear
167
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
- #.idea/
169
-
170
- # PyPI configuration file
171
- .pypirc
172
-
173
- logs/
174
- local_trajectories/
175
- screenshots/
176
- gifs/
177
- .DS_Store
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
proxy-lite-demo-v2/.idea/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Environment-dependent path to Maven home directory
7
- /mavenHomeManager.xml
8
- # Datasource local storage ignored files
9
- /dataSources/
10
- /dataSources.local.xml
11
- # Core Dev Booster ignored files
12
- /compile.flag
13
- /coreModuleDependants.csv
14
- /.mavenCleaned
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
proxy-lite-demo-v2/src/proxy_lite/agents/agent_base.py CHANGED
@@ -96,7 +96,11 @@ class BaseAgent(BaseModel, ABC):
96
  use_tool: bool = False,
97
  response_format: Optional[type[BaseModel]] = None,
98
  append_assistant_message: bool = True,
 
99
  ) -> AssistantMessage:
 
 
 
100
  messages: MessageHistory = await self.get_history_view()
101
  response_content = (
102
  await self.client.create_completion(
@@ -109,45 +113,44 @@ class BaseAgent(BaseModel, ABC):
109
  ).model_dump()
110
  response_content = response_content["choices"][0]["message"]
111
  assistant_message = AssistantMessage(
112
- role=response_content["role"],
113
  content=[Text(text=response_content["content"])] if response_content["content"] else [],
114
- tool_calls=response_content["tool_calls"],
115
  )
116
  if append_assistant_message:
117
- self.history.append(message=assistant_message, label=self.message_label)
118
  return assistant_message
119
 
120
  def receive_user_message(
121
  self,
122
  text: Optional[str] = None,
123
- image: list[bytes] = None,
124
- label: MessageLabel = None,
125
  is_base64: bool = False,
126
  ) -> None:
127
  message = UserMessage.from_media(
128
  text=text,
129
- image=image,
130
  is_base64=is_base64,
131
  )
132
- self.history.append(message=message, label=label)
133
 
134
  def receive_system_message(
135
  self,
136
  text: Optional[str] = None,
137
- label: MessageLabel = None,
138
  ) -> None:
139
  message = SystemMessage.from_media(text=text)
140
- self.history.append(message=message, label=label)
141
 
142
  def receive_assistant_message(
143
  self,
144
  content: Optional[str] = None,
145
  tool_calls: Optional[list[ToolCall]] = None,
146
- label: MessageLabel = None,
147
  ) -> None:
148
  message = AssistantMessage(
149
  content=[Text(text=content)] if content else [],
150
- tool_calls=tool_calls,
151
  )
152
  self.history.append(message=message, label=label)
153
 
@@ -165,7 +168,7 @@ class BaseAgent(BaseModel, ABC):
165
  self,
166
  text: str,
167
  tool_id: str,
168
- label: MessageLabel = None,
169
  ) -> None:
170
  self.history.append(
171
  message=ToolMessage(content=[Text(text=text)], tool_call_id=tool_id),
 
96
  use_tool: bool = False,
97
  response_format: Optional[type[BaseModel]] = None,
98
  append_assistant_message: bool = True,
99
+ label: Optional[MessageLabel] = None,
100
  ) -> AssistantMessage:
101
+ if self.client is None:
102
+ raise RuntimeError("Client not initialized")
103
+
104
  messages: MessageHistory = await self.get_history_view()
105
  response_content = (
106
  await self.client.create_completion(
 
113
  ).model_dump()
114
  response_content = response_content["choices"][0]["message"]
115
  assistant_message = AssistantMessage(
 
116
  content=[Text(text=response_content["content"])] if response_content["content"] else [],
117
+ tool_calls=response_content["tool_calls"] or [],
118
  )
119
  if append_assistant_message:
120
+ self.history.append(message=assistant_message, label=label)
121
  return assistant_message
122
 
123
  def receive_user_message(
124
  self,
125
  text: Optional[str] = None,
126
+ image: Optional[list[bytes]] = None,
127
+ label: Optional[MessageLabel] = None,
128
  is_base64: bool = False,
129
  ) -> None:
130
  message = UserMessage.from_media(
131
  text=text,
132
+ image=image[0] if image else None,
133
  is_base64=is_base64,
134
  )
135
+ self.history.append(message=cast(UserMessage, message), label=label)
136
 
137
  def receive_system_message(
138
  self,
139
  text: Optional[str] = None,
140
+ label: Optional[MessageLabel] = None,
141
  ) -> None:
142
  message = SystemMessage.from_media(text=text)
143
+ self.history.append(message=cast(SystemMessage, message), label=label)
144
 
145
  def receive_assistant_message(
146
  self,
147
  content: Optional[str] = None,
148
  tool_calls: Optional[list[ToolCall]] = None,
149
+ label: Optional[MessageLabel] = None,
150
  ) -> None:
151
  message = AssistantMessage(
152
  content=[Text(text=content)] if content else [],
153
+ tool_calls=tool_calls or [],
154
  )
155
  self.history.append(message=message, label=label)
156
 
 
168
  self,
169
  text: str,
170
  tool_id: str,
171
+ label: Optional[MessageLabel] = None,
172
  ) -> None:
173
  self.history.append(
174
  message=ToolMessage(content=[Text(text=text)], tool_call_id=tool_id),
proxy-lite-demo-v2/src/proxy_lite/app.py CHANGED
@@ -115,12 +115,12 @@ async def run_task_async(
115
  config: dict,
116
  ):
117
  try:
118
- config = RunnerConfig.from_dict(config)
119
  except Exception as e:
120
  st.error(f"Error loading RunnerConfig: {e!s}")
121
  return
122
- print(config)
123
- runner = Runner(config=config)
124
 
125
  # Add the spinning animation using HTML
126
  status_placeholder.markdown(
@@ -150,13 +150,14 @@ async def run_task_async(
150
  async for run in runner.run_generator(task):
151
  # Update status with latest step
152
  if run.actions:
153
- latest_step = run.actions[-1].text
154
- latest_step += "".join(
155
- [
156
- f'<tool_call>{{"name": {tool_call.function["name"]}, "arguments": {tool_call.function["arguments"]}}}</tool_call>' # noqa: E501
157
- for tool_call in run.actions[-1].tool_calls
158
- ]
159
- )
 
160
  action_placeholder.write(f"⚡ **Latest Step:** {latest_step}")
161
  all_steps.append(latest_step)
162
 
 
115
  config: dict,
116
  ):
117
  try:
118
+ runner_config = RunnerConfig.from_dict(config)
119
  except Exception as e:
120
  st.error(f"Error loading RunnerConfig: {e!s}")
121
  return
122
+ print(runner_config)
123
+ runner = Runner(config=runner_config)
124
 
125
  # Add the spinning animation using HTML
126
  status_placeholder.markdown(
 
150
  async for run in runner.run_generator(task):
151
  # Update status with latest step
152
  if run.actions:
153
+ latest_step = run.actions[-1].text or ""
154
+ if run.actions[-1].tool_calls:
155
+ latest_step += "".join(
156
+ [
157
+ f'<tool_call>{{"name": {tool_call.function["name"]}, "arguments": {tool_call.function["arguments"]}}}</tool_call>' # noqa: E501
158
+ for tool_call in run.actions[-1].tool_calls
159
+ ]
160
+ )
161
  action_placeholder.write(f"⚡ **Latest Step:** {latest_step}")
162
  all_steps.append(latest_step)
163
 
proxy-lite-demo-v2/src/proxy_lite/browser/__init__.py CHANGED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ from .browser import BrowserSession
2
+ from .bounding_boxes import BoundingBox, POI, Point
3
+
4
+ __all__ = ["BrowserSession", "BoundingBox", "POI", "Point"]
5
+
proxy-lite-demo-v2/src/proxy_lite/browser/bounding_boxes.py CHANGED
@@ -114,12 +114,12 @@ def draw_dashed_rectangle(
114
 
115
  # Draw all lines at once
116
  if all_points:
117
- all_points = np.array(all_points).reshape((-1, 2, 2))
118
- cv2.polylines(img, all_points, False, color, thickness)
119
 
120
 
121
  # @time_it(name='Annotate bounding box')
122
- def annotate_bounding_box(image: bytes, bbox: BoundingBox) -> None:
123
  # Draw dashed bounding box
124
  draw_dashed_rectangle(
125
  image,
@@ -194,6 +194,8 @@ def annotate_bounding_boxes(image: bytes, bounding_boxes: list[BoundingBox]) ->
194
  nparr = np.frombuffer(image, np.uint8)
195
  # Decode the image
196
  img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
 
 
197
  padded_img = cv2.copyMakeBorder(
198
  img,
199
  top=25, # Value chosen based on label size
 
114
 
115
  # Draw all lines at once
116
  if all_points:
117
+ all_points = np.array(all_points, dtype=np.int32).reshape((-1, 2, 2))
118
+ cv2.polylines(img, [all_points[i] for i in range(len(all_points))], False, color, thickness)
119
 
120
 
121
  # @time_it(name='Annotate bounding box')
122
+ def annotate_bounding_box(image: np.ndarray, bbox: BoundingBox) -> None:
123
  # Draw dashed bounding box
124
  draw_dashed_rectangle(
125
  image,
 
194
  nparr = np.frombuffer(image, np.uint8)
195
  # Decode the image
196
  img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
197
+ if img is None:
198
+ raise ValueError("Failed to decode image")
199
  padded_img = cv2.copyMakeBorder(
200
  img,
201
  top=25, # Value chosen based on label size
proxy-lite-demo-v2/src/proxy_lite/browser/browser.py CHANGED
@@ -15,7 +15,6 @@ from tenacity import before_sleep_log, retry, stop_after_delay, wait_exponential
15
  from proxy_lite.browser.bounding_boxes import POI, BoundingBox, Point, annotate_bounding_boxes
16
  from proxy_lite.logger import logger
17
 
18
- import base64
19
 
20
  SELF_CONTAINED_TAGS = [
21
  # many of these are non-interactive but keeping them anyway
@@ -58,7 +57,7 @@ def element_as_text(
58
  attributes.append(f'{k}="{v}"')
59
  attributes = " ".join(attributes)
60
  attributes = (" " + attributes).rstrip()
61
- tag = tag.lower()
62
  if text is None:
63
  text = ""
64
  if len(text) > 2500:
@@ -111,8 +110,11 @@ class BrowserSession:
111
  await self.context.new_page()
112
 
113
  self.context.set_default_timeout(60_000)
114
- self.current_page.set_default_timeout(60_000)
115
- await stealth_async(self.current_page, StealthConfig(navigator_user_agent=False))
 
 
 
116
  await self.context.add_init_script(
117
  path=Path(__file__).with_name("add_custom_select.js"),
118
  )
@@ -186,6 +188,9 @@ class BrowserSession:
186
  before_sleep=before_sleep_log(logger, logging.ERROR),
187
  )
188
  async def update_poi(self) -> None:
 
 
 
189
  try:
190
  # Wait for basic page load states to ensure the DOM is ready.
191
  # This is a fundamental wait that should always apply.
@@ -251,8 +256,10 @@ class BrowserSession:
251
  logger.info(f"INFO: Detected intermediate Salesforce Lightning app loading page: {current_url}. Waiting for network idle and app spinner.")
252
  # This is the /one/one.app page or similar. Don't wait for specific content, just general load.
253
  try:
254
- await self.current_page.wait_for_load_state("networkidle", timeout=30000) # Give it more time for network to settle
255
- logger.debug(f"DEBUG: Network idle detected on intermediate app page: {current_url}.")
 
 
256
  except PlaywrightTimeoutError:
257
  logger.warning(f"DEBUGGING: Network idle timeout on intermediate app page: {current_url}. Proceeding anyway.")
258
 
@@ -350,9 +357,12 @@ class BrowserSession:
350
  self,
351
  delay: float = 0.0,
352
  quality: int = 70,
353
- type: str = "jpeg",
354
- scale: str = "css",
355
  ) -> tuple[bytes, bytes]:
 
 
 
356
  if delay > 0.0:
357
  await asyncio.sleep(delay)
358
  await self.update_poi()
@@ -365,22 +375,32 @@ class BrowserSession:
365
  return img, annotated_img
366
 
367
  async def goto(self, url: str) -> None:
 
 
368
  await self.current_page.goto(url, wait_until="domcontentloaded")
369
 
370
  async def reload(self) -> None:
 
 
371
  await self.current_page.reload(wait_until="domcontentloaded")
372
 
373
  async def click_tab(self, mark_id: int) -> None:
 
 
374
  point: Point = self.poi_centroids[mark_id]
375
  await self.hover(point)
376
  await self.current_page.mouse.click(*point, button="middle")
377
 
378
  async def click(self, mark_id: int) -> None:
 
 
379
  point: Point = self.poi_centroids[mark_id]
380
  await self.hover(point)
381
  await self.current_page.mouse.click(*point)
382
 
383
  async def enter_text(self, mark_id: int, text: str, submit: bool = False) -> None:
 
 
384
  await self.clear_text_field(mark_id)
385
  await self.click(mark_id)
386
  await self.current_page.keyboard.type(text)
@@ -393,6 +413,9 @@ class BrowserSession:
393
  direction: Literal["up", "down", "left", "right"],
394
  mark_id: Optional[int] = None,
395
  ) -> None:
 
 
 
396
  if mark_id is None:
397
  point = Point(x=-1, y=-1)
398
  max_scroll_x = self.viewport_width
@@ -418,6 +441,9 @@ class BrowserSession:
418
  if not self.current_page:
419
  return
420
 
 
 
 
421
  await self.current_page.go_back(wait_until="domcontentloaded")
422
  if self.current_page.url == "about:blank":
423
  if not len(self.context.pages) > 1:
@@ -426,9 +452,13 @@ class BrowserSession:
426
  await self.current_page.close()
427
 
428
  async def hover(self, point: Point) -> None:
 
 
429
  await self.current_page.mouse.move(*point)
430
 
431
  async def focus(self, point: Point) -> None:
 
 
432
  # Focus on the element on the page at point (x, y)
433
  await self.current_page.evaluate(
434
  """
@@ -442,6 +472,8 @@ class BrowserSession:
442
  )
443
 
444
  async def get_text(self, mark_id: int) -> str:
 
 
445
  return await self.current_page.evaluate(
446
  """
447
  (mark_id) => {
@@ -456,6 +488,9 @@ class BrowserSession:
456
  )
457
 
458
  async def clear_text_field(self, mark_id: int) -> None:
 
 
 
459
  existing_text = await self.get_text(mark_id)
460
  if existing_text.strip():
461
  # Clear existing text only if it exists
@@ -474,6 +509,9 @@ class BrowserSession:
474
  Opens a new browser tab/page and navigates to the specified URL.
475
  Closes the old page if it's not the last one remaining.
476
  """
 
 
 
477
  logger.info(f"Attempting to open a new tab and navigate to: {url}")
478
  new_page = await self.context.new_page()
479
 
@@ -496,6 +534,8 @@ if __name__ == "__main__":
496
 
497
  async def dummy_test():
498
  async with BrowserSession(headless=False) as s:
 
 
499
  page = await s.context.new_page()
500
  await page.goto("http://google.co.uk")
501
  await asyncio.sleep(5)
 
15
  from proxy_lite.browser.bounding_boxes import POI, BoundingBox, Point, annotate_bounding_boxes
16
  from proxy_lite.logger import logger
17
 
 
18
 
19
  SELF_CONTAINED_TAGS = [
20
  # many of these are non-interactive but keeping them anyway
 
57
  attributes.append(f'{k}="{v}"')
58
  attributes = " ".join(attributes)
59
  attributes = (" " + attributes).rstrip()
60
+ tag = tag.lower() if tag else ""
61
  if text is None:
62
  text = ""
63
  if len(text) > 2500:
 
110
  await self.context.new_page()
111
 
112
  self.context.set_default_timeout(60_000)
113
+ if self.current_page:
114
+ self.current_page.set_default_timeout(60_000)
115
+ await stealth_async(self.current_page, StealthConfig(navigator_user_agent=False))
116
+ else:
117
+ raise RuntimeError("No page available after browser initialization")
118
  await self.context.add_init_script(
119
  path=Path(__file__).with_name("add_custom_select.js"),
120
  )
 
188
  before_sleep=before_sleep_log(logger, logging.ERROR),
189
  )
190
  async def update_poi(self) -> None:
191
+ if self.current_page is None:
192
+ raise RuntimeError("No current page available for POI update")
193
+
194
  try:
195
  # Wait for basic page load states to ensure the DOM is ready.
196
  # This is a fundamental wait that should always apply.
 
256
  logger.info(f"INFO: Detected intermediate Salesforce Lightning app loading page: {current_url}. Waiting for network idle and app spinner.")
257
  # This is the /one/one.app page or similar. Don't wait for specific content, just general load.
258
  try:
259
+ # Give it more time for network to settle
260
+ await self.current_page.wait_for_load_state("networkidle", timeout=30000)
261
+ logger.debug(
262
+ f"DEBUG: Network idle detected on intermediate app page: {current_url}.")
263
  except PlaywrightTimeoutError:
264
  logger.warning(f"DEBUGGING: Network idle timeout on intermediate app page: {current_url}. Proceeding anyway.")
265
 
 
357
  self,
358
  delay: float = 0.0,
359
  quality: int = 70,
360
+ type: Literal["jpeg", "png"] = "jpeg",
361
+ scale: Literal["css", "device"] = "css",
362
  ) -> tuple[bytes, bytes]:
363
+ if self.current_page is None:
364
+ raise RuntimeError("No current page available for screenshot")
365
+
366
  if delay > 0.0:
367
  await asyncio.sleep(delay)
368
  await self.update_poi()
 
375
  return img, annotated_img
376
 
377
  async def goto(self, url: str) -> None:
378
+ if self.current_page is None:
379
+ raise RuntimeError("No current page available for goto")
380
  await self.current_page.goto(url, wait_until="domcontentloaded")
381
 
382
  async def reload(self) -> None:
383
+ if self.current_page is None:
384
+ raise RuntimeError("No current page available for reload")
385
  await self.current_page.reload(wait_until="domcontentloaded")
386
 
387
  async def click_tab(self, mark_id: int) -> None:
388
+ if self.current_page is None:
389
+ raise RuntimeError("No current page available for click_tab")
390
  point: Point = self.poi_centroids[mark_id]
391
  await self.hover(point)
392
  await self.current_page.mouse.click(*point, button="middle")
393
 
394
  async def click(self, mark_id: int) -> None:
395
+ if self.current_page is None:
396
+ raise RuntimeError("No current page available for click")
397
  point: Point = self.poi_centroids[mark_id]
398
  await self.hover(point)
399
  await self.current_page.mouse.click(*point)
400
 
401
  async def enter_text(self, mark_id: int, text: str, submit: bool = False) -> None:
402
+ if self.current_page is None:
403
+ raise RuntimeError("No current page available for enter_text")
404
  await self.clear_text_field(mark_id)
405
  await self.click(mark_id)
406
  await self.current_page.keyboard.type(text)
 
413
  direction: Literal["up", "down", "left", "right"],
414
  mark_id: Optional[int] = None,
415
  ) -> None:
416
+ if self.current_page is None:
417
+ raise RuntimeError("No current page available for scroll")
418
+
419
  if mark_id is None:
420
  point = Point(x=-1, y=-1)
421
  max_scroll_x = self.viewport_width
 
441
  if not self.current_page:
442
  return
443
 
444
+ if self.context is None:
445
+ raise RuntimeError("No browser context available for go_back")
446
+
447
  await self.current_page.go_back(wait_until="domcontentloaded")
448
  if self.current_page.url == "about:blank":
449
  if not len(self.context.pages) > 1:
 
452
  await self.current_page.close()
453
 
454
  async def hover(self, point: Point) -> None:
455
+ if self.current_page is None:
456
+ raise RuntimeError("No current page available for hover")
457
  await self.current_page.mouse.move(*point)
458
 
459
  async def focus(self, point: Point) -> None:
460
+ if self.current_page is None:
461
+ raise RuntimeError("No current page available for focus")
462
  # Focus on the element on the page at point (x, y)
463
  await self.current_page.evaluate(
464
  """
 
472
  )
473
 
474
  async def get_text(self, mark_id: int) -> str:
475
+ if self.current_page is None:
476
+ raise RuntimeError("No current page available for get_text")
477
  return await self.current_page.evaluate(
478
  """
479
  (mark_id) => {
 
488
  )
489
 
490
  async def clear_text_field(self, mark_id: int) -> None:
491
+ if self.current_page is None:
492
+ raise RuntimeError("No current page available for clear_text_field")
493
+
494
  existing_text = await self.get_text(mark_id)
495
  if existing_text.strip():
496
  # Clear existing text only if it exists
 
509
  Opens a new browser tab/page and navigates to the specified URL.
510
  Closes the old page if it's not the last one remaining.
511
  """
512
+ if self.context is None:
513
+ raise RuntimeError("No browser context available for open_new_tab_and_go_to")
514
+
515
  logger.info(f"Attempting to open a new tab and navigate to: {url}")
516
  new_page = await self.context.new_page()
517
 
 
534
 
535
  async def dummy_test():
536
  async with BrowserSession(headless=False) as s:
537
+ if s.context is None:
538
+ raise RuntimeError("No browser context available in dummy_test")
539
  page = await s.context.new_page()
540
  await page.goto("http://google.co.uk")
541
  await asyncio.sleep(5)
proxy-lite-demo-v2/src/proxy_lite/cli.py CHANGED
@@ -14,10 +14,12 @@ def update_config_from_env(config: RunnerConfig) -> RunnerConfig:
14
  config.solver.agent.client.api_base = os.getenv("PROXY_LITE_API_BASE")
15
  if os.getenv("PROXY_LITE_MODEL"):
16
  config.solver.agent.client.model_id = os.getenv("PROXY_LITE_MODEL")
17
- if os.getenv("PROXY_LITE_VIEWPORT_WIDTH"):
18
- config.environment.viewport_width = int(os.getenv("PROXY_LITE_VIEWPORT_WIDTH"))
19
- if os.getenv("PROXY_LITE_VIEWPORT_HEIGHT"):
20
- config.environment.viewport_height = int(os.getenv("PROXY_LITE_VIEWPORT_HEIGHT"))
 
 
21
  return config
22
 
23
 
@@ -42,18 +44,20 @@ def do_command(args):
42
  o = Runner(config=config)
43
  result = asyncio.run(o.run(do_text))
44
 
45
- final_screenshot = result.observations[-1].info["original_image"]
46
- folder_path = Path(__file__).parent.parent.parent / "screenshots"
47
- folder_path.mkdir(parents=True, exist_ok=True)
48
- path = folder_path / f"{result.run_id}.png"
49
- with open(path, "wb") as f:
50
- f.write(base64.b64decode(final_screenshot))
51
- logger.info(f"🤖 Final screenshot saved to {path}")
 
 
52
 
53
  gif_folder_path = Path(__file__).parent.parent.parent / "gifs"
54
  gif_folder_path.mkdir(parents=True, exist_ok=True)
55
  gif_path = gif_folder_path / f"{result.run_id}.gif"
56
- create_run_gif(result, gif_path, duration=1500)
57
  logger.info(f"🤖 GIF saved to {gif_path}")
58
 
59
 
 
14
  config.solver.agent.client.api_base = os.getenv("PROXY_LITE_API_BASE")
15
  if os.getenv("PROXY_LITE_MODEL"):
16
  config.solver.agent.client.model_id = os.getenv("PROXY_LITE_MODEL")
17
+ viewport_width = os.getenv("PROXY_LITE_VIEWPORT_WIDTH")
18
+ if viewport_width:
19
+ config.environment.viewport_width = int(viewport_width)
20
+ viewport_height = os.getenv("PROXY_LITE_VIEWPORT_HEIGHT")
21
+ if viewport_height:
22
+ config.environment.viewport_height = int(viewport_height)
23
  return config
24
 
25
 
 
44
  o = Runner(config=config)
45
  result = asyncio.run(o.run(do_text))
46
 
47
+ # Check if we have observations and info data
48
+ if result.observations and result.observations[-1].info:
49
+ final_screenshot = result.observations[-1].info["original_image"]
50
+ folder_path = Path(__file__).parent.parent.parent / "screenshots"
51
+ folder_path.mkdir(parents=True, exist_ok=True)
52
+ path = folder_path / f"{result.run_id}.png"
53
+ with open(path, "wb") as f:
54
+ f.write(base64.b64decode(final_screenshot))
55
+ logger.info(f"🤖 Final screenshot saved to {path}")
56
 
57
  gif_folder_path = Path(__file__).parent.parent.parent / "gifs"
58
  gif_folder_path.mkdir(parents=True, exist_ok=True)
59
  gif_path = gif_folder_path / f"{result.run_id}.gif"
60
+ create_run_gif(result, str(gif_path), duration=1500)
61
  logger.info(f"🤖 GIF saved to {gif_path}")
62
 
63
 
proxy-lite-demo-v2/src/proxy_lite/client.py CHANGED
@@ -38,7 +38,6 @@ class BaseClient(BaseModel, ABC):
38
  tools: Optional[list[Tool]] = None,
39
  response_format: Optional[type[BaseModel]] = None,
40
  ) -> ChatCompletion: ...
41
-
42
  """
43
  Create completion from model.
44
  Expect subclasses to adapt from various endpoints that will handle
@@ -56,10 +55,12 @@ class BaseClient(BaseModel, ABC):
56
  "convergence": ConvergenceClient,
57
  "gemini": GeminiClient,
58
  }
59
- if config.name not in supported_clients:
60
- error_message = f"Unsupported model: {config.name}."
 
 
61
  raise ValueError(error_message)
62
- return supported_clients[config.name](config=config)
63
 
64
  @property
65
  def http_client(self) -> httpx.AsyncClient:
@@ -75,7 +76,7 @@ class BaseClient(BaseModel, ABC):
75
  class OpenAIClientConfig(BaseClientConfig):
76
  name: Literal["openai"] = "openai"
77
  model_id: str = "gpt-4o"
78
- api_key: str = os.environ.get("OPENAI_API_KEY")
79
  api_base: Optional[str] = None
80
 
81
 
@@ -112,7 +113,8 @@ class OpenAIClient(BaseClient):
112
  "tool_choice": "required" if tools else None,
113
  "response_format": {"type": "json_object"} if response_format else {"type": "text"},
114
  }
115
- base_params.update({k: v for k, v in optional_params.items() if v is not None})
 
116
  return await self.external_client.chat.completions.create(**base_params)
117
 
118
 
@@ -259,7 +261,7 @@ class GeminiClient(BaseClient):
259
  from openai.types.chat.chat_completion import ChatCompletion, Choice
260
  from openai.types.chat.chat_completion_message import ChatCompletionMessage
261
  from openai.types.completion_usage import CompletionUsage
262
- from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall
263
 
264
  # Convert messages to format expected by Gemini
265
  serialized_messages = self.serializer.serialize_messages(messages)
@@ -365,10 +367,10 @@ class GeminiClient(BaseClient):
365
  tool_call = ChatCompletionMessageToolCall(
366
  id=f"call_{hash(str(func_call))}"[:16],
367
  type="function",
368
- function={
369
- "name": func_call["name"],
370
- "arguments": json.dumps(func_call.get("args", {}))
371
- }
372
  )
373
  tool_calls.append(tool_call)
374
 
 
38
  tools: Optional[list[Tool]] = None,
39
  response_format: Optional[type[BaseModel]] = None,
40
  ) -> ChatCompletion: ...
 
41
  """
42
  Create completion from model.
43
  Expect subclasses to adapt from various endpoints that will handle
 
55
  "convergence": ConvergenceClient,
56
  "gemini": GeminiClient,
57
  }
58
+ # Type assertion - we know the config will have a name attribute from subclasses
59
+ config_name = getattr(config, 'name', None)
60
+ if config_name not in supported_clients:
61
+ error_message = f"Unsupported model: {config_name}."
62
  raise ValueError(error_message)
63
+ return supported_clients[config_name](config=config)
64
 
65
  @property
66
  def http_client(self) -> httpx.AsyncClient:
 
76
  class OpenAIClientConfig(BaseClientConfig):
77
  name: Literal["openai"] = "openai"
78
  model_id: str = "gpt-4o"
79
+ api_key: str = os.environ.get("OPENAI_API_KEY", "")
80
  api_base: Optional[str] = None
81
 
82
 
 
113
  "tool_choice": "required" if tools else None,
114
  "response_format": {"type": "json_object"} if response_format else {"type": "text"},
115
  }
116
+ base_params.update(
117
+ {k: v for k, v in optional_params.items() if v is not None})
118
  return await self.external_client.chat.completions.create(**base_params)
119
 
120
 
 
261
  from openai.types.chat.chat_completion import ChatCompletion, Choice
262
  from openai.types.chat.chat_completion_message import ChatCompletionMessage
263
  from openai.types.completion_usage import CompletionUsage
264
+ from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall, Function
265
 
266
  # Convert messages to format expected by Gemini
267
  serialized_messages = self.serializer.serialize_messages(messages)
 
367
  tool_call = ChatCompletionMessageToolCall(
368
  id=f"call_{hash(str(func_call))}"[:16],
369
  type="function",
370
+ function=Function(
371
+ name=func_call["name"],
372
+ arguments=json.dumps(func_call.get("args", {}))
373
+ )
374
  )
375
  tool_calls.append(tool_call)
376
 
proxy-lite-demo-v2/src/proxy_lite/environments/webbrowser.py CHANGED
@@ -32,6 +32,12 @@ class WebBrowserEnvironmentConfig(BaseEnvironmentConfig):
32
  # --- MODIFICATION START ---
33
  # Added to accept initial cookies from the RunnerConfig
34
  initial_cookies: Optional[List[dict]] = None
 
 
 
 
 
 
35
  # --- MODIFICATION END ---
36
 
37
 
@@ -46,25 +52,31 @@ class WebBrowserEnvironment(BaseEnvironment):
46
 
47
  async def __aenter__(self) -> Self:
48
  # Initialize the BrowserSession
 
 
49
  self.browser = self.browser_session(
50
- viewport_width=self.config.viewport_width,
51
- viewport_height=self.config.viewport_height,
52
- headless=self.config.headless,
53
  )
54
  await self.browser.__aenter__()
55
  # Initialize other resources if necessary
56
  # --- MODIFICATION START ---
57
  # Changed to use self.config.initial_cookies
58
- if self.config.initial_cookies:
59
- self.logger.info(f"🌐 [bold blue]Adding {len(self.config.initial_cookies)} initial cookies to browser context.[/]")
60
- await self.browser.context.add_cookies(self.config.initial_cookies)
 
 
61
  # --- MODIFICATION END ---
62
- self.logger.info("🌐 [bold blue]Browser session started.[/]")
 
63
  return self
64
 
65
  async def __aexit__(self, exc_type, exc_value, traceback):
66
  # Clean up the BrowserSession
67
- await self.browser.__aexit__(exc_type, exc_value, traceback)
 
68
 
69
  @property
70
  def info_for_user(self) -> str:
@@ -72,7 +84,9 @@ class WebBrowserEnvironment(BaseEnvironment):
72
 
73
  @cached_property
74
  def tools(self) -> list[Tool]:
75
- return [BrowserTool(session=self.browser)]
 
 
76
 
77
  @cached_property
78
  def browser_session(self) -> type[BrowserSession]:
@@ -83,39 +97,118 @@ class WebBrowserEnvironment(BaseEnvironment):
83
  # It was previously hardcoded to return an empty list.
84
  @property
85
  def cookies(self) -> list[dict]:
86
- return self.config.initial_cookies if self.config.initial_cookies is not None else []
 
87
  # --- MODIFICATION END ---
88
 
89
  async def initialise(self) -> Observation:
90
- self.logger.debug(f"DEBUG: Initialising WebBrowserEnvironment. Homepage: {self.config.homepage}")
91
- try:
92
- await self.browser.goto(self.config.homepage)
93
- self.logger.debug(f"DEBUG: Browser navigated to homepage. Current URL: {self.browser.current_url}")
94
- except Exception as e:
95
- self.logger.error(f"ERROR: Failed to navigate to homepage {self.config.homepage}: {e}")
96
- raise # Re-raise to propagate the error
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  original_img, annotated_img = await self.browser.screenshot(
99
- delay=self.config.screenshot_delay,
100
  )
101
- if self.config.no_pois_in_image:
102
  base64_image = base64.b64encode(original_img).decode("utf-8")
103
  else:
104
  base64_image = base64.b64encode(annotated_img).decode("utf-8")
105
 
106
- html_content = await self.browser.current_page.content() if self.config.include_html else None
107
 
108
- info = {"url": self.browser.current_url}
109
- if self.config.record_pois:
110
  info["pois"] = self.browser.pois
111
- if self.config.keep_original_image:
112
  info["original_image"] = base64.b64encode(original_img).decode("utf-8")
113
 
114
- self.logger.debug(f"DEBUG: Initial observation captured. URL: {self.browser.current_url}")
 
115
  return Observation(
116
  state=State(
117
  text=f"URL: {self.browser.current_url}"
118
- + (f"\n{self.browser.poi_text}" if self.config.include_poi_text else ""),
119
  image=base64_image,
120
  html=html_content,
121
  ),
@@ -131,6 +224,9 @@ class WebBrowserEnvironment(BaseEnvironment):
131
  return True
132
 
133
  # check for page changes
 
 
 
134
  old_points = [tuple(point) for point in self.browser.poi_centroids]
135
  await self.browser.update_poi()
136
  new_points = [tuple(point) for point in self.browser.poi_centroids]
@@ -143,48 +239,59 @@ class WebBrowserEnvironment(BaseEnvironment):
143
  return True
144
 
145
  async def execute_action(self, action: Action) -> Observation:
 
 
 
 
146
  responses = []
147
  cancelled_tools_flag = False
 
148
  if await self.should_perform_action():
149
- for tool_call in action.tool_calls:
 
150
  # Perform the chosen action
151
  try:
152
- tool_response: ToolExecutionResponse = await self.execute_tool(
153
- tool_call,
154
- )
155
- tool_response.id = tool_call.id
 
156
  responses.append(tool_response)
157
  except Exception as e: # noqa: PERF203
158
- self.logger.warning("🌐 An error occurred taking action: %s", str(e), exc_info=False)
 
159
  tool_response = ToolExecutionResponse(content=str(e), id=tool_call.id)
160
  responses.append(tool_response)
161
  else:
162
- self.logger.warning("🌐 Page changed since last observation, cancelling action.")
 
163
  self.cancelled_last_action = True
164
- for tool_call in action.tool_calls:
 
165
  tool_response = ToolExecutionResponse(
166
  content="The page changed before the action could be executed, instead of being ran it was cancelled.", # noqa: E501
167
  id=tool_call.id,
168
  )
169
  responses.append(tool_response)
170
  cancelled_tools_flag = True
 
171
  original_img, annotated_img = await self.browser.screenshot(
172
- delay=self.config.screenshot_delay,
173
  )
174
 
175
  base64_image = base64.b64encode(annotated_img).decode("utf-8")
176
 
177
- info = {"url": self.browser.current_url, "cancelled_tools": cancelled_tools_flag}
178
- if self.config.record_pois:
179
  info["pois"] = self.browser.pois
180
- if self.config.keep_original_image:
181
  info["original_image"] = base64.b64encode(original_img).decode("utf-8")
182
 
183
- html_content = await self.browser.current_page.content() if self.config.include_html else None
184
  return Observation(
185
  state=State(
186
  text=f"URL: {self.browser.current_url}"
187
- + (f"\n{self.browser.poi_text}" if self.config.include_poi_text else ""),
188
  image=base64_image,
189
  html=html_content,
190
  tool_responses=responses,
@@ -195,7 +302,11 @@ class WebBrowserEnvironment(BaseEnvironment):
195
  )
196
 
197
  async def observe(self) -> Observation:
198
- return await self.browser.observe()
 
 
 
 
199
 
200
  async def evaluate(self, **kwargs: dict[str, Any]) -> dict[str, Any]:
201
  return {}
 
32
  # --- MODIFICATION START ---
33
  # Added to accept initial cookies from the RunnerConfig
34
  initial_cookies: Optional[List[dict]] = None
35
+ # Added for automatic login functionality
36
+ perform_login: bool = False
37
+ salesforce_login_url: Optional[str] = None
38
+ salesforce_username: Optional[str] = None
39
+ salesforce_password: Optional[str] = None
40
+ target_url: Optional[str] = None
41
  # --- MODIFICATION END ---
42
 
43
 
 
52
 
53
  async def __aenter__(self) -> Self:
54
  # Initialize the BrowserSession
55
+ # Type cast to access WebBrowserEnvironmentConfig attributes
56
+ config = self.config # type: WebBrowserEnvironmentConfig
57
  self.browser = self.browser_session(
58
+ viewport_width=config.viewport_width, # type: ignore
59
+ viewport_height=config.viewport_height, # type: ignore
60
+ headless=config.headless, # type: ignore
61
  )
62
  await self.browser.__aenter__()
63
  # Initialize other resources if necessary
64
  # --- MODIFICATION START ---
65
  # Changed to use self.config.initial_cookies
66
+ if config.initial_cookies: # type: ignore
67
+ if self.logger:
68
+ self.logger.info(f"🌐 [bold blue]Adding {len(config.initial_cookies)} initial cookies to browser context.[/]") # type: ignore
69
+ if self.browser.context:
70
+ await self.browser.context.add_cookies(config.initial_cookies) # type: ignore
71
  # --- MODIFICATION END ---
72
+ if self.logger:
73
+ self.logger.info("🌐 [bold blue]Browser session started.[/]")
74
  return self
75
 
76
  async def __aexit__(self, exc_type, exc_value, traceback):
77
  # Clean up the BrowserSession
78
+ if self.browser:
79
+ await self.browser.__aexit__(exc_type, exc_value, traceback)
80
 
81
  @property
82
  def info_for_user(self) -> str:
 
84
 
85
  @cached_property
86
  def tools(self) -> list[Tool]:
87
+ if self.browser is None:
88
+ raise RuntimeError("Browser session not initialized")
89
+ return [BrowserTool(session=self.browser)] # type: ignore
90
 
91
  @cached_property
92
  def browser_session(self) -> type[BrowserSession]:
 
97
  # It was previously hardcoded to return an empty list.
98
  @property
99
  def cookies(self) -> list[dict]:
100
+ config = self.config # type: WebBrowserEnvironmentConfig
101
+ return config.initial_cookies if config.initial_cookies is not None else [] # type: ignore
102
  # --- MODIFICATION END ---
103
 
104
  async def initialise(self) -> Observation:
105
+ if self.browser is None:
106
+ raise RuntimeError("Browser session not initialized")
107
+
108
+ config = self.config # type: WebBrowserEnvironmentConfig
109
+
110
+ if self.logger:
111
+ self.logger.debug(f"DEBUG: Initialising WebBrowserEnvironment. Homepage: {config.homepage}") # type: ignore
112
+
113
+ # Check if automatic login is required
114
+ if config.perform_login and config.salesforce_login_url and config.salesforce_username and config.salesforce_password: # type: ignore
115
+ if self.logger:
116
+ self.logger.info(f"🔑 Performing automatic Salesforce login to {config.salesforce_login_url}") # type: ignore
117
+
118
+ try:
119
+ # Navigate to login page
120
+ await self.browser.goto(config.salesforce_login_url) # type: ignore
121
+ if self.logger:
122
+ self.logger.debug(f"🔑 Navigated to login page: {self.browser.current_url}")
123
+
124
+ # Wait for login elements to be available
125
+ if self.browser.current_page:
126
+ # Use more robust selectors that match actual Salesforce login page structure
127
+ # Try primary selectors first, with fallbacks
128
+ try:
129
+ await self.browser.current_page.wait_for_selector('#username', timeout=10000)
130
+ username_selector = '#username'
131
+ except:
132
+ # Fallback selectors for username
133
+ await self.browser.current_page.wait_for_selector('input[name="username"], input[type="email"]', timeout=10000)
134
+ username_selector = 'input[name="username"], input[type="email"]'
135
+
136
+ try:
137
+ await self.browser.current_page.wait_for_selector('#password', timeout=10000)
138
+ password_selector = '#password'
139
+ except:
140
+ # Fallback selectors for password
141
+ await self.browser.current_page.wait_for_selector('input[name="password"], input[type="password"]', timeout=10000)
142
+ password_selector = 'input[name="password"], input[type="password"]'
143
+
144
+ # Fill in credentials
145
+ await self.browser.current_page.fill(username_selector, config.salesforce_username) # type: ignore
146
+ await self.browser.current_page.fill(password_selector, config.salesforce_password) # type: ignore
147
+
148
+ if self.logger:
149
+ self.logger.debug("🔑 Credentials filled, submitting login form")
150
+
151
+ # Submit login form - use more robust selector for login button
152
+ try:
153
+ await self.browser.current_page.click('#Login')
154
+ except:
155
+ # Fallback selectors for login button
156
+ await self.browser.current_page.click('input[type="submit"], button[type="submit"], .btn-primary')
157
+
158
+ # Wait for login to complete (check for successful redirect)
159
+ await self.browser.current_page.wait_for_load_state('networkidle', timeout=30000)
160
+
161
+ if self.logger:
162
+ self.logger.info(f"🔑 Login completed successfully. Current URL: {self.browser.current_url}")
163
+
164
+ # Navigate to target URL if specified
165
+ if config.target_url: # type: ignore
166
+ if self.logger:
167
+ self.logger.debug(f"🔑 Navigating to target URL: {config.target_url}") # type: ignore
168
+ await self.browser.goto(config.target_url) # type: ignore
169
+ if self.browser.current_page:
170
+ await self.browser.current_page.wait_for_load_state('networkidle', timeout=30000)
171
+ if self.logger:
172
+ self.logger.info(f"🔑 Successfully navigated to target URL: {self.browser.current_url}")
173
+
174
+ except Exception as e:
175
+ if self.logger:
176
+ self.logger.error(f"ERROR: Automatic login failed: {e}")
177
+ raise # Re-raise to propagate the error
178
+
179
+ else:
180
+ # No automatic login, navigate to homepage normally
181
+ try:
182
+ await self.browser.goto(config.homepage) # type: ignore
183
+ if self.logger:
184
+ self.logger.debug(f"DEBUG: Browser navigated to homepage. Current URL: {self.browser.current_url}")
185
+ except Exception as e:
186
+ if self.logger:
187
+ self.logger.error(f"ERROR: Failed to navigate to homepage {config.homepage}: {e}") # type: ignore
188
+ raise # Re-raise to propagate the error
189
 
190
  original_img, annotated_img = await self.browser.screenshot(
191
+ delay=config.screenshot_delay, # type: ignore
192
  )
193
+ if config.no_pois_in_image: # type: ignore
194
  base64_image = base64.b64encode(original_img).decode("utf-8")
195
  else:
196
  base64_image = base64.b64encode(annotated_img).decode("utf-8")
197
 
198
+ html_content = await self.browser.current_page.content() if config.include_html else None # type: ignore
199
 
200
+ info: dict[str, Any] = {"url": self.browser.current_url}
201
+ if config.record_pois: # type: ignore
202
  info["pois"] = self.browser.pois
203
+ if config.keep_original_image: # type: ignore
204
  info["original_image"] = base64.b64encode(original_img).decode("utf-8")
205
 
206
+ if self.logger:
207
+ self.logger.debug(f"DEBUG: Initial observation captured. URL: {self.browser.current_url}")
208
  return Observation(
209
  state=State(
210
  text=f"URL: {self.browser.current_url}"
211
+ + (f"\n{self.browser.poi_text}" if config.include_poi_text else ""), # type: ignore
212
  image=base64_image,
213
  html=html_content,
214
  ),
 
224
  return True
225
 
226
  # check for page changes
227
+ if self.browser is None:
228
+ return False
229
+
230
  old_points = [tuple(point) for point in self.browser.poi_centroids]
231
  await self.browser.update_poi()
232
  new_points = [tuple(point) for point in self.browser.poi_centroids]
 
239
  return True
240
 
241
  async def execute_action(self, action: Action) -> Observation:
242
+ if self.browser is None:
243
+ raise RuntimeError("Browser session not initialized")
244
+
245
+ config = self.config # type: WebBrowserEnvironmentConfig
246
  responses = []
247
  cancelled_tools_flag = False
248
+
249
  if await self.should_perform_action():
250
+ tool_calls = action.tool_calls or []
251
+ for tool_call in tool_calls:
252
  # Perform the chosen action
253
  try:
254
+ tool_response = await self.execute_tool(tool_call)
255
+ if tool_response is None:
256
+ tool_response = ToolExecutionResponse(content="Tool execution returned None", id=tool_call.id)
257
+ else:
258
+ tool_response.id = tool_call.id
259
  responses.append(tool_response)
260
  except Exception as e: # noqa: PERF203
261
+ if self.logger:
262
+ self.logger.warning("🌐 An error occurred taking action: %s", str(e), exc_info=False)
263
  tool_response = ToolExecutionResponse(content=str(e), id=tool_call.id)
264
  responses.append(tool_response)
265
  else:
266
+ if self.logger:
267
+ self.logger.warning("🌐 Page changed since last observation, cancelling action.")
268
  self.cancelled_last_action = True
269
+ tool_calls = action.tool_calls or []
270
+ for tool_call in tool_calls:
271
  tool_response = ToolExecutionResponse(
272
  content="The page changed before the action could be executed, instead of being ran it was cancelled.", # noqa: E501
273
  id=tool_call.id,
274
  )
275
  responses.append(tool_response)
276
  cancelled_tools_flag = True
277
+
278
  original_img, annotated_img = await self.browser.screenshot(
279
+ delay=config.screenshot_delay, # type: ignore
280
  )
281
 
282
  base64_image = base64.b64encode(annotated_img).decode("utf-8")
283
 
284
+ info: dict[str, Any] = {"url": self.browser.current_url, "cancelled_tools": cancelled_tools_flag}
285
+ if config.record_pois: # type: ignore
286
  info["pois"] = self.browser.pois
287
+ if config.keep_original_image: # type: ignore
288
  info["original_image"] = base64.b64encode(original_img).decode("utf-8")
289
 
290
+ html_content = await self.browser.current_page.content() if config.include_html else None # type: ignore
291
  return Observation(
292
  state=State(
293
  text=f"URL: {self.browser.current_url}"
294
+ + (f"\n{self.browser.poi_text}" if config.include_poi_text else ""), # type: ignore
295
  image=base64_image,
296
  html=html_content,
297
  tool_responses=responses,
 
302
  )
303
 
304
  async def observe(self) -> Observation:
305
+ if self.browser is None:
306
+ raise RuntimeError("Browser session not initialized")
307
+ # Note: observe method may not exist on BrowserSession - implement basic observation
308
+ # return await self.browser.observe() # type: ignore
309
+ raise NotImplementedError("Observe method not implemented")
310
 
311
  async def evaluate(self, **kwargs: dict[str, Any]) -> dict[str, Any]:
312
  return {}
proxy-lite-demo-v2/src/proxy_lite/gif_maker.py CHANGED
@@ -33,8 +33,9 @@ def create_run_gif(
33
  history = run.history
34
  i = 0
35
  while i < len(history):
36
- if isinstance(history[i], Observation):
37
- observation = history[i]
 
38
  image_data = observation.state.image
39
  if not image_data:
40
  i += 1
@@ -48,10 +49,12 @@ def create_run_gif(
48
 
49
  # Check if the next record is an Action and extract its text if available
50
  action_text = ""
51
- if i + 1 < len(history) and isinstance(history[i + 1], Action):
52
- action = history[i + 1]
53
- if action.text:
54
- action_text = action.text
 
 
55
 
56
  # extract observation and thinking from tags in the action text
57
  observation_match = re.search(r"<observation>(.*?)</observation>", action_text, re.DOTALL)
@@ -81,9 +84,17 @@ def create_run_gif(
81
  except AttributeError:
82
  # Fallback for older Pillow versions: compute size for each line
83
  lines = wrapped_text.splitlines() or [wrapped_text]
84
- line_sizes = [draw.textsize(line, font=font) for line in lines]
85
- text_width = max(width for width, _ in line_sizes)
86
- text_height = sum(height for _, height in line_sizes)
 
 
 
 
 
 
 
 
87
  text_x = (white_panel_width - text_width) // 2
88
  text_y = (obs_img.height - text_height) // 2
89
  draw.multiline_text((text_x, text_y), wrapped_text, fill="black", font=font, align="center")
 
33
  history = run.history
34
  i = 0
35
  while i < len(history):
36
+ current_record = history[i]
37
+ if isinstance(current_record, Observation):
38
+ observation = current_record
39
  image_data = observation.state.image
40
  if not image_data:
41
  i += 1
 
49
 
50
  # Check if the next record is an Action and extract its text if available
51
  action_text = ""
52
+ if i + 1 < len(history):
53
+ next_record = history[i + 1]
54
+ if isinstance(next_record, Action):
55
+ action = next_record
56
+ if hasattr(action, 'text') and action.text:
57
+ action_text = action.text
58
 
59
  # extract observation and thinking from tags in the action text
60
  observation_match = re.search(r"<observation>(.*?)</observation>", action_text, re.DOTALL)
 
84
  except AttributeError:
85
  # Fallback for older Pillow versions: compute size for each line
86
  lines = wrapped_text.splitlines() or [wrapped_text]
87
+ try:
88
+ # Try textbbox first (newer method)
89
+ line_sizes = [draw.textbbox((0, 0), line, font=font) for line in lines]
90
+ text_width = max(bbox[2] - bbox[0] for bbox in line_sizes)
91
+ text_height = sum(bbox[3] - bbox[1] for bbox in line_sizes)
92
+ except AttributeError:
93
+ # Final fallback: estimate based on font size
94
+ estimated_char_width = 8 # Rough estimate
95
+ estimated_line_height = 16 # Rough estimate
96
+ text_width = max(len(line) * estimated_char_width for line in lines)
97
+ text_height = len(lines) * estimated_line_height
98
  text_x = (white_panel_width - text_width) // 2
99
  text_y = (obs_img.height - text_height) // 2
100
  draw.multiline_text((text_x, text_y), wrapped_text, fill="black", font=font, align="center")
proxy-lite-demo-v2/src/proxy_lite/history.py CHANGED
@@ -71,15 +71,30 @@ class Message(BaseModel):
71
  image: Optional[bytes | str] = None,
72
  is_base64: bool = False,
73
  ) -> Message:
 
 
74
  if text is not None:
75
- text = Text(text=text)
 
 
76
  if image is not None:
77
- base64_image = image if is_base64 else base64.b64encode(image).decode("utf-8")
 
 
 
 
 
 
 
 
 
 
 
 
78
  data_url = f"data:image/jpeg;base64,{base64_image}"
79
- image = Image(image_url=ImageUrl(url=data_url))
80
- content = [text, image] if text is not None else [image]
81
- else:
82
- content = [text]
83
  return cls(content=content)
84
 
85
 
@@ -127,7 +142,12 @@ class MessageHistory(BaseModel):
127
 
128
  def append(self, message: MessageTypes, label: Optional[str] = None):
129
  if label is not None:
130
- message.label = label
 
 
 
 
 
131
  self.messages.append(message)
132
 
133
  def pop(self) -> MessageTypes:
@@ -170,7 +190,7 @@ class MessageHistory(BaseModel):
170
  label_counts[message.label] += 1
171
  else:
172
  filtered_messages.append(message)
173
- return MessageHistory(messages=reversed(filtered_messages))
174
 
175
  def __add__(self, other: MessageHistory) -> MessageHistory:
176
  new_history = MessageHistory()
 
71
  image: Optional[bytes | str] = None,
72
  is_base64: bool = False,
73
  ) -> Message:
74
+ content: list[Union[Text, Image]] = []
75
+
76
  if text is not None:
77
+ text_content = Text(text=text)
78
+ content.append(text_content)
79
+
80
  if image is not None:
81
+ if is_base64:
82
+ if isinstance(image, str):
83
+ base64_image = image
84
+ else:
85
+ # If image is bytes, convert to base64
86
+ base64_image = base64.b64encode(image).decode("utf-8")
87
+ else:
88
+ if isinstance(image, str):
89
+ image_bytes = image.encode("utf-8")
90
+ else:
91
+ image_bytes = image
92
+ base64_image = base64.b64encode(image_bytes).decode("utf-8")
93
+
94
  data_url = f"data:image/jpeg;base64,{base64_image}"
95
+ image_content = Image(image_url=ImageUrl(url=data_url))
96
+ content.append(image_content)
97
+
 
98
  return cls(content=content)
99
 
100
 
 
142
 
143
  def append(self, message: MessageTypes, label: Optional[str] = None):
144
  if label is not None:
145
+ # Convert string to MessageLabel if it's a valid enum value
146
+ try:
147
+ message.label = MessageLabel(label)
148
+ except ValueError:
149
+ # If not a valid MessageLabel, keep as None
150
+ message.label = None
151
  self.messages.append(message)
152
 
153
  def pop(self) -> MessageTypes:
 
190
  label_counts[message.label] += 1
191
  else:
192
  filtered_messages.append(message)
193
+ return MessageHistory(messages=list(reversed(filtered_messages)))
194
 
195
  def __add__(self, other: MessageHistory) -> MessageHistory:
196
  new_history = MessageHistory()
proxy-lite-demo-v2/src/proxy_lite/logger.py CHANGED
@@ -22,8 +22,8 @@ class StructuredLogger(logging.Logger):
22
 
23
  def _log(
24
  self,
25
- level,
26
- msg,
27
  args,
28
  exc_info=None,
29
  extra=None,
@@ -33,9 +33,15 @@ class StructuredLogger(logging.Logger):
33
  if extra is None:
34
  extra = {}
35
 
36
- json_fields = {
 
 
 
 
 
 
37
  "logger_name": self.name,
38
- "message": msg % args if args else msg,
39
  }
40
 
41
  exc_type, exc_value, exc_traceback = sys.exc_info()
@@ -43,7 +49,10 @@ class StructuredLogger(logging.Logger):
43
  json_fields["exception_class"] = exc_type.__name__
44
  json_fields["exception_message"] = str(exc_value)
45
 
46
- json_fields.update(extra)
 
 
 
47
 
48
  super()._log(
49
  level,
 
22
 
23
  def _log(
24
  self,
25
+ level: int,
26
+ msg: str,
27
  args,
28
  exc_info=None,
29
  extra=None,
 
33
  if extra is None:
34
  extra = {}
35
 
36
+ # Safe string formatting
37
+ try:
38
+ formatted_msg = msg % args if args else msg
39
+ except (TypeError, ValueError):
40
+ formatted_msg = str(msg)
41
+
42
+ json_fields: dict[str, str] = {
43
  "logger_name": self.name,
44
+ "message": formatted_msg,
45
  }
46
 
47
  exc_type, exc_value, exc_traceback = sys.exc_info()
 
49
  json_fields["exception_class"] = exc_type.__name__
50
  json_fields["exception_message"] = str(exc_value)
51
 
52
+ # Ensure extra is a dict and merge with json_fields
53
+ if isinstance(extra, dict):
54
+ for key, value in extra.items():
55
+ json_fields[key] = str(value)
56
 
57
  super()._log(
58
  level,
proxy-lite-demo-v2/src/proxy_lite/recorder.py CHANGED
@@ -40,7 +40,8 @@ class Run(BaseModel):
40
 
41
  @classmethod
42
  def load(cls, run_id: str) -> Self:
43
- with open(Path(__file__).parent.parent.parent / "local_trajectories" / f"{run_id}.json", "r") as f:
 
44
  return cls(**json.load(f))
45
 
46
  @property
@@ -80,8 +81,8 @@ class Run(BaseModel):
80
 
81
 
82
  class DataRecorder:
83
- def __init__(self, local_folder: str | None = None):
84
- self.local_folder = local_folder
85
 
86
  def initialise_run(self, task: str) -> Run:
87
  self.local_folder = Path(__file__).parent.parent.parent / "local_trajectories"
@@ -99,5 +100,7 @@ class DataRecorder:
99
 
100
  async def save(self, run: Run) -> None:
101
  json_payload = run.model_dump()
 
 
102
  with open(self.local_folder / f"{run.run_id}.json", "w") as f:
103
  json.dump(json_payload, f)
 
40
 
41
  @classmethod
42
  def load(cls, run_id: str) -> Self:
43
+ trajectories_path = Path(__file__).parent.parent.parent / "local_trajectories"
44
+ with open(trajectories_path / f"{run_id}.json", "r") as f:
45
  return cls(**json.load(f))
46
 
47
  @property
 
81
 
82
 
83
  class DataRecorder:
84
+ def __init__(self, local_folder: str | Path | None = None):
85
+ self.local_folder = Path(local_folder) if local_folder else None
86
 
87
  def initialise_run(self, task: str) -> Run:
88
  self.local_folder = Path(__file__).parent.parent.parent / "local_trajectories"
 
100
 
101
  async def save(self, run: Run) -> None:
102
  json_payload = run.model_dump()
103
+ if self.local_folder is None:
104
+ raise ValueError("local_folder is not set. Call initialise_run first.")
105
  with open(self.local_folder / f"{run.run_id}.json", "w") as f:
106
  json.dump(json_payload, f)
proxy-lite-demo-v2/src/proxy_lite/runner.py CHANGED
@@ -65,14 +65,16 @@ class RunnerConfig(BaseModel):
65
  @classmethod
66
  def from_dict(cls, config_dict: dict) -> Self:
67
  conf = OmegaConf.create(config_dict)
68
- config_dict = OmegaConf.to_container(conf, resolve=True)
69
- return cls(**config_dict)
 
70
 
71
  @classmethod
72
  def from_yaml(cls, yaml_path: str) -> Self:
73
  conf = OmegaConf.load(yaml_path)
74
- config_dict = OmegaConf.to_container(conf, resolve=True)
75
- return cls(**config_dict)
 
76
 
77
 
78
  class Runner(BaseModel):
@@ -98,9 +100,13 @@ class Runner(BaseModel):
98
  )
99
 
100
  async def run_generator(self, task: str) -> AsyncIterator[Run]:
101
- async with (
102
- async_timeout(self.config.task_timeout, "Task"),
103
- ):
 
 
 
 
104
  if self.config.logger_level is not None:
105
  self.logger.setLevel(self.config.logger_level)
106
  run = self.recorder.initialise_run(task)
@@ -122,9 +128,9 @@ class Runner(BaseModel):
122
  environment.info_for_user,
123
  )
124
  self.logger.debug("Solver initialised.")
125
- run.solver_history = solver.history
126
- observation: Observation = await environment.initialise()
127
- await event_queue.put(observation)
128
  self.logger.debug("Environment initialised.")
129
  step_count = 0
130
  while step_count < self.config.max_steps:
@@ -132,26 +138,26 @@ class Runner(BaseModel):
132
  self.logger.debug(f"🤖 [bold purple]Processing event:[/] {event.type}")
133
  match event.type:
134
  case EventType.OBSERVATION:
135
- observation: Observation = event
136
  run.record(
137
- observation=observation,
138
- solver_history=solver.history,
139
  )
140
  async with async_timeout(
141
  self.config.action_timeout,
142
  "Action decision",
143
  ):
144
- action: Action = await solver.act(observation)
145
- await event_queue.put(action)
146
  case EventType.ACTION:
147
- action: Action = event
148
- self.logger.debug(f"Tool calls: {action.tool_calls}")
149
- run.record(action=action, solver_history=solver.history)
150
- run.complete = await solver.is_complete(observation)
151
  if self.config.save_every_step:
152
  await self.recorder.save(run)
153
  if run.complete:
154
- run.result = action.text
155
  self.logger.info(f"🤖 [bold purple]Task complete.[/] ✨ \n{run.result}")
156
  break
157
  self.logger.debug(f"DEBUG: Using environment_timeout: {self.config.environment_timeout} seconds")
@@ -159,9 +165,9 @@ class Runner(BaseModel):
159
  self.config.environment_timeout,
160
  "Environment response",
161
  ):
162
- observation: Observation = await environment.execute_action(action)
163
  step_count += 1
164
- await event_queue.put(observation)
165
  yield run
166
  if not run.complete:
167
  self.logger.warning("🤖 [bold purple]Ran out of steps!")
@@ -173,7 +179,7 @@ class Runner(BaseModel):
173
  self._run = run
174
  return run
175
 
176
- def run_concurrent(self, tasks: list[str]) -> list[Run]:
177
  async def gather_runs():
178
  return await asyncio.gather(
179
  *[self.run(task) for task in tasks],
@@ -198,7 +204,7 @@ class Runner(BaseModel):
198
  def run_result(self) -> str:
199
  if self._run is None:
200
  raise RuntimeError("Run not initialised")
201
- return self._run.result
202
 
203
 
204
  if __name__ == "__main__":
 
65
  @classmethod
66
  def from_dict(cls, config_dict: dict) -> Self:
67
  conf = OmegaConf.create(config_dict)
68
+ resolved_config = OmegaConf.to_container(conf, resolve=True)
69
+ # Type cast to satisfy linter - OmegaConf.to_container with resolve=True returns dict for dict inputs
70
+ return cls(**dict(resolved_config)) # type: ignore
71
 
72
  @classmethod
73
  def from_yaml(cls, yaml_path: str) -> Self:
74
  conf = OmegaConf.load(yaml_path)
75
+ resolved_config = OmegaConf.to_container(conf, resolve=True)
76
+ # Type cast to satisfy linter - OmegaConf.to_container with resolve=True returns dict for dict inputs
77
+ return cls(**dict(resolved_config)) # type: ignore
78
 
79
 
80
  class Runner(BaseModel):
 
100
  )
101
 
102
  async def run_generator(self, task: str) -> AsyncIterator[Run]:
103
+ # Assert that attributes are initialized (they are set in model_post_init)
104
+ assert self.logger is not None, "Logger not initialized"
105
+ assert self.recorder is not None, "Recorder not initialized"
106
+ assert self.environment is not None, "Environment not initialized"
107
+ assert self.solver is not None, "Solver not initialized"
108
+
109
+ async with async_timeout(self.config.task_timeout, "Task"):
110
  if self.config.logger_level is not None:
111
  self.logger.setLevel(self.config.logger_level)
112
  run = self.recorder.initialise_run(task)
 
128
  environment.info_for_user,
129
  )
130
  self.logger.debug("Solver initialised.")
131
+ run.solver_history = solver.history # type: ignore
132
+ initial_observation: Observation = await environment.initialise()
133
+ await event_queue.put(initial_observation)
134
  self.logger.debug("Environment initialised.")
135
  step_count = 0
136
  while step_count < self.config.max_steps:
 
138
  self.logger.debug(f"🤖 [bold purple]Processing event:[/] {event.type}")
139
  match event.type:
140
  case EventType.OBSERVATION:
141
+ current_observation: Observation = event
142
  run.record(
143
+ observation=current_observation,
144
+ solver_history=solver.history, #type: ignore
145
  )
146
  async with async_timeout(
147
  self.config.action_timeout,
148
  "Action decision",
149
  ):
150
+ action_result: Action = await solver.act(current_observation)
151
+ await event_queue.put(action_result)
152
  case EventType.ACTION:
153
+ current_action: Action = event
154
+ self.logger.debug(f"Tool calls: {current_action.tool_calls}")
155
+ run.record(action=current_action, solver_history=solver.history) # type: ignore
156
+ run.complete = await solver.is_complete(current_observation)
157
  if self.config.save_every_step:
158
  await self.recorder.save(run)
159
  if run.complete:
160
+ run.result = current_action.text
161
  self.logger.info(f"🤖 [bold purple]Task complete.[/] ✨ \n{run.result}")
162
  break
163
  self.logger.debug(f"DEBUG: Using environment_timeout: {self.config.environment_timeout} seconds")
 
165
  self.config.environment_timeout,
166
  "Environment response",
167
  ):
168
+ next_observation: Observation = await environment.execute_action(current_action)
169
  step_count += 1
170
+ await event_queue.put(next_observation)
171
  yield run
172
  if not run.complete:
173
  self.logger.warning("🤖 [bold purple]Ran out of steps!")
 
179
  self._run = run
180
  return run
181
 
182
+ def run_concurrent(self, tasks: list[str]) -> list[Run | BaseException]:
183
  async def gather_runs():
184
  return await asyncio.gather(
185
  *[self.run(task) for task in tasks],
 
204
  def run_result(self) -> str:
205
  if self._run is None:
206
  raise RuntimeError("Run not initialised")
207
+ return self._run.result or ""
208
 
209
 
210
  if __name__ == "__main__":
proxy-lite-demo-v2/src/proxy_lite/solvers/simple_solver.py CHANGED
@@ -27,6 +27,7 @@ class SimpleSolverConfig(BaseSolverConfig):
27
  class SimpleSolver(BaseSolver):
28
  task: Optional[str] = None
29
  complete: bool = False
 
30
 
31
  @cached_property
32
  def tools(self) -> list[Tool]:
@@ -36,15 +37,16 @@ class SimpleSolver(BaseSolver):
36
  def agent(self) -> BaseAgent:
37
  if self.logger:
38
  self.logger.debug(f"Tools: {self.tools}")
39
- return Agents.get(self.config.agent.name)(
40
- config=self.config.agent,
 
41
  env_tools=self.tools,
42
  )
43
 
44
  @property
45
  def history(self) -> MessageHistory:
46
  return MessageHistory(
47
- messages=[SystemMessage.from_media(text=self.agent.system_prompt)] + self.agent.history.messages,
48
  )
49
 
50
  async def initialise(self, task: str, env_tools: list[Tool], env_info: str) -> None:
@@ -54,7 +56,8 @@ class SimpleSolver(BaseSolver):
54
  text=f"Task: {task}",
55
  label=MessageLabel.USER_INPUT,
56
  )
57
- self.logger.debug(f"Initialised with task: {task}")
 
58
 
59
  async def act(self, observation: Observation) -> Action:
60
  # Send tool responses to agent as tool messages if they exist
@@ -70,8 +73,18 @@ class SimpleSolver(BaseSolver):
70
  else:
71
  print("🔧 DEBUG: No tool responses to process")
72
 
 
 
 
 
 
 
 
 
 
 
73
  self.agent.receive_user_message(
74
- image=observation.state.image,
75
  text=observation.state.text,
76
  label=MessageLabel.SCREENSHOT,
77
  is_base64=True,
@@ -79,7 +92,8 @@ class SimpleSolver(BaseSolver):
79
 
80
  message = await self.agent.generate_output(use_tool=True)
81
 
82
- self.logger.debug(f"Assistant message generated: {message}")
 
83
 
84
  # check tool calls for return_value
85
  if any(tool_call.function["name"] == "return_value" for tool_call in message.tool_calls):
@@ -92,23 +106,28 @@ class SimpleSolver(BaseSolver):
92
 
93
  # Handle empty content array from API response
94
  if not message.content or len(message.content) == 0:
95
- self.logger.warning("Message content is empty, using empty string as fallback")
 
96
  text_content = ""
97
  else:
98
- text_content = message.content[0].text
 
 
99
 
100
  observation_match = re.search(r"<observation>(.*?)</observation>", text_content, re.DOTALL)
101
  observation_content = observation_match.group(1).strip() if observation_match else ""
102
 
103
- self.logger.info("🌐 [bold blue]Observation:[/]")
104
- await self.logger.stream_message(observation_content)
 
105
 
106
  # Extract text between thinking tags if present
107
  thinking_match = re.search(r"<thinking>(.*?)</thinking>", text_content, re.DOTALL)
108
  thinking_content = thinking_match.group(1).strip() if thinking_match else text_content
109
 
110
- self.logger.info("🧠 [bold purple]Thinking:[/]")
111
- await self.logger.stream_message(thinking_content)
 
112
 
113
  return Action(tool_calls=message.tool_calls, text=text_content)
114
 
 
27
  class SimpleSolver(BaseSolver):
28
  task: Optional[str] = None
29
  complete: bool = False
30
+ config: SimpleSolverConfig # Proper typing
31
 
32
  @cached_property
33
  def tools(self) -> list[Tool]:
 
37
  def agent(self) -> BaseAgent:
38
  if self.logger:
39
  self.logger.debug(f"Tools: {self.tools}")
40
+ # Type ignore: config is actually SimpleSolverConfig at runtime
41
+ return Agents.get(self.config.agent.name)( # type: ignore
42
+ config=self.config.agent, # type: ignore
43
  env_tools=self.tools,
44
  )
45
 
46
  @property
47
  def history(self) -> MessageHistory:
48
  return MessageHistory(
49
+ messages=[SystemMessage.from_media(text=self.agent.system_prompt)] + self.agent.history.messages, # type: ignore
50
  )
51
 
52
  async def initialise(self, task: str, env_tools: list[Tool], env_info: str) -> None:
 
56
  text=f"Task: {task}",
57
  label=MessageLabel.USER_INPUT,
58
  )
59
+ if self.logger:
60
+ self.logger.debug(f"Initialised with task: {task}")
61
 
62
  async def act(self, observation: Observation) -> Action:
63
  # Send tool responses to agent as tool messages if they exist
 
73
  else:
74
  print("🔧 DEBUG: No tool responses to process")
75
 
76
+ # Handle image parameter - convert to list of bytes if needed
77
+ image_data = None
78
+ if observation.state.image:
79
+ if isinstance(observation.state.image, str):
80
+ # If it's a base64 string, convert it to bytes
81
+ import base64
82
+ image_data = [base64.b64decode(observation.state.image)]
83
+ else:
84
+ image_data = observation.state.image
85
+
86
  self.agent.receive_user_message(
87
+ image=image_data or [],
88
  text=observation.state.text,
89
  label=MessageLabel.SCREENSHOT,
90
  is_base64=True,
 
92
 
93
  message = await self.agent.generate_output(use_tool=True)
94
 
95
+ if self.logger:
96
+ self.logger.debug(f"Assistant message generated: {message}")
97
 
98
  # check tool calls for return_value
99
  if any(tool_call.function["name"] == "return_value" for tool_call in message.tool_calls):
 
106
 
107
  # Handle empty content array from API response
108
  if not message.content or len(message.content) == 0:
109
+ if self.logger:
110
+ self.logger.warning("Message content is empty, using empty string as fallback")
111
  text_content = ""
112
  else:
113
+ # Handle both text and image content types
114
+ first_content = message.content[0]
115
+ text_content = getattr(first_content, 'text', str(first_content))
116
 
117
  observation_match = re.search(r"<observation>(.*?)</observation>", text_content, re.DOTALL)
118
  observation_content = observation_match.group(1).strip() if observation_match else ""
119
 
120
+ if self.logger:
121
+ self.logger.info("🌐 [bold blue]Observation:[/]")
122
+ self.logger.info(observation_content)
123
 
124
  # Extract text between thinking tags if present
125
  thinking_match = re.search(r"<thinking>(.*?)</thinking>", text_content, re.DOTALL)
126
  thinking_content = thinking_match.group(1).strip() if thinking_match else text_content
127
 
128
+ if self.logger:
129
+ self.logger.info("🧠 [bold purple]Thinking:[/]")
130
+ self.logger.info(thinking_content)
131
 
132
  return Action(tool_calls=message.tool_calls, text=text_content)
133
 
proxy-lite-demo-v2/src/proxy_lite/tools/browser_tool.py CHANGED
@@ -50,7 +50,7 @@ def element_as_text(
50
  attributes.append(f'{k}="{v}"')
51
  attributes = " ".join(attributes)
52
  attributes = (" " + attributes).rstrip()
53
- tag = tag.lower()
54
  if text is None:
55
  text = ""
56
  if len(text) > 2500:
@@ -58,8 +58,7 @@ def element_as_text(
58
  if tag in SELF_CONTAINED_TAGS:
59
  if text:
60
  logger.warning(
61
- f"Got self-contained element '{tag}' which contained text '{text}'.",
62
- )
63
  else:
64
  return f"<{tag} id={mark_id}{attributes}/>"
65
  return f"<{tag} id={mark_id}{attributes}>{text}</{tag}>"
@@ -220,7 +219,7 @@ class BrowserTool(Tool):
220
  )
221
 
222
  @attach_param_schema(ScrollParams)
223
- async def scroll(self, direction: str, mark_id: int) -> ToolExecutionResponse:
224
  """Scroll the page (or a scrollable element) up, down, left or right."""
225
  try:
226
  if mark_id == -1:
@@ -247,7 +246,6 @@ class BrowserTool(Tool):
247
  logger.error(f"Go back failed: {e}")
248
  return ToolExecutionResponse(content=f"Failed to go back: {e}")
249
 
250
-
251
  @attach_param_schema(WaitParams)
252
  async def wait(self) -> ToolExecutionResponse:
253
  """Wait three seconds. Useful when the page appears to still be loading, or if there are any unfinished webpage processes.""" # noqa: E501
@@ -306,6 +304,9 @@ class BrowserTool(Tool):
306
  # This bypasses CORS restrictions that prevent JavaScript access
307
 
308
  # Find all frames on the page
 
 
 
309
  main_frame = self.browser.current_page.main_frame
310
  all_frames = [main_frame] + main_frame.child_frames
311
 
 
50
  attributes.append(f'{k}="{v}"')
51
  attributes = " ".join(attributes)
52
  attributes = (" " + attributes).rstrip()
53
+ tag = tag.lower() if tag else ""
54
  if text is None:
55
  text = ""
56
  if len(text) > 2500:
 
58
  if tag in SELF_CONTAINED_TAGS:
59
  if text:
60
  logger.warning(
61
+ f"Got self-contained element '{tag}' which contained text '{text}'.", )
 
62
  else:
63
  return f"<{tag} id={mark_id}{attributes}/>"
64
  return f"<{tag} id={mark_id}{attributes}>{text}</{tag}>"
 
219
  )
220
 
221
  @attach_param_schema(ScrollParams)
222
+ async def scroll(self, direction: Literal["up", "down", "left", "right"], mark_id: int) -> ToolExecutionResponse:
223
  """Scroll the page (or a scrollable element) up, down, left or right."""
224
  try:
225
  if mark_id == -1:
 
246
  logger.error(f"Go back failed: {e}")
247
  return ToolExecutionResponse(content=f"Failed to go back: {e}")
248
 
 
249
  @attach_param_schema(WaitParams)
250
  async def wait(self) -> ToolExecutionResponse:
251
  """Wait three seconds. Useful when the page appears to still be loading, or if there are any unfinished webpage processes.""" # noqa: E501
 
304
  # This bypasses CORS restrictions that prevent JavaScript access
305
 
306
  # Find all frames on the page
307
+ if not self.browser.current_page:
308
+ return ToolExecutionResponse(content=f"No active page found. Cannot select option '{option_text}'.")
309
+
310
  main_frame = self.browser.current_page.main_frame
311
  all_frames = [main_frame] + main_frame.child_frames
312
 
proxy-lite-demo-v2/src/proxy_lite/tools/tool_base.py CHANGED
@@ -43,7 +43,8 @@ def attach_param_schema(param_model: type[BaseModel]):
43
  validated_params = param_model(**kwargs)
44
  return func(self, **validated_params.model_dump())
45
 
46
- wrapper.param_model = param_model
 
47
  return wrapper
48
 
49
  return decorator
 
43
  validated_params = param_model(**kwargs)
44
  return func(self, **validated_params.model_dump())
45
 
46
+ # Use setattr to avoid linter errors about unknown attributes
47
+ setattr(wrapper, 'param_model', param_model)
48
  return wrapper
49
 
50
  return decorator
proxy-lite-demo-v2/test_tool_calling.py DELETED
@@ -1,65 +0,0 @@
1
- #!/usr/bin/env python3
2
- import asyncio
3
- import os
4
- import sys
5
- sys.path.insert(0, 'src')
6
-
7
- from proxy_lite.client import GeminiClient, GeminiClientConfig
8
- from proxy_lite.history import MessageHistory, UserMessage, Text
9
- from proxy_lite.tools.browser_tool import BrowserTool
10
- from proxy_lite.browser.browser import BrowserSession
11
-
12
- async def test_tool_calling():
13
- # Setup client
14
- api_key = os.environ.get("GEMINI_API_KEY")
15
- if not api_key:
16
- print("❌ GEMINI_API_KEY not set")
17
- return
18
-
19
- config = GeminiClientConfig(api_key=api_key)
20
- client = GeminiClient(config=config)
21
-
22
- # Create a dummy browser tool
23
- class DummyBrowserSession:
24
- async def __aenter__(self):
25
- return self
26
- async def __aexit__(self, *args):
27
- pass
28
- async def open_new_tab_and_go_to(self, url):
29
- print(f"✅ Would open new tab and go to: {url}")
30
- return True
31
-
32
- browser_tool = BrowserTool(DummyBrowserSession())
33
-
34
- # Create message history
35
- messages = MessageHistory()
36
- messages.append(UserMessage(content=[Text(text="Please use the open_new_tab_and_go_to tool to navigate to https://google.com")]))
37
-
38
- print("🚀 Testing Gemini tool calling...")
39
-
40
- try:
41
- # Test tool calling
42
- response = await client.create_completion(
43
- messages=messages,
44
- tools=[browser_tool],
45
- temperature=0.7
46
- )
47
-
48
- print(f"✅ Response received: {response}")
49
-
50
- if response.choices[0].message.tool_calls:
51
- print(f"✅ Tool calls found: {len(response.choices[0].message.tool_calls)}")
52
- for tool_call in response.choices[0].message.tool_calls:
53
- print(f" - Tool: {tool_call.function.name}")
54
- print(f" - Args: {tool_call.function.arguments}")
55
- else:
56
- print("❌ No tool calls found")
57
- print(f"Content: {response.choices[0].message.content}")
58
-
59
- except Exception as e:
60
- print(f"❌ Error: {e}")
61
- import traceback
62
- traceback.print_exc()
63
-
64
- if __name__ == "__main__":
65
- asyncio.run(test_tool_calling())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
proxy-lite-work/.gitignore DELETED
@@ -1,45 +0,0 @@
1
- # This file is used for Git repositories to specify intentionally untracked files that Git should ignore.
2
- # If you are not using git, you can delete this file. For more information see: https://git-scm.com/docs/gitignore
3
- # For useful gitignore templates see: https://github.com/github/gitignore
4
-
5
- # Salesforce cache
6
- .sf/
7
- .sfdx/
8
- .localdevserver/
9
- deploy-options.json
10
-
11
- # LWC VSCode autocomplete
12
- **/lwc/jsconfig.json
13
-
14
- # LWC Jest coverage reports
15
- coverage/
16
-
17
- # Logs
18
- logs
19
- *.log
20
- npm-debug.log*
21
- yarn-debug.log*
22
- yarn-error.log*
23
-
24
- # Dependency directories
25
- node_modules/
26
-
27
- # Eslint cache
28
- .eslintcache
29
-
30
- # MacOS system files
31
- .DS_Store
32
-
33
- # Windows system files
34
- Thumbs.db
35
- ehthumbs.db
36
- [Dd]esktop.ini
37
- $RECYCLE.BIN/
38
-
39
- # Local environment variables
40
- .env
41
-
42
- # Python Salesforce Functions
43
- **/__pycache__/
44
- **/.venv/
45
- **/venv/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
proxy-lite-work/.sf/orgs/00DWd000006jIa1MAE/localSourceTracking/HEAD ADDED
@@ -0,0 +1 @@
 
 
1
+ ref: refs/heads/main
proxy-lite-work/.sf/orgs/00DWd000006jIa1MAE/localSourceTracking/config ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = false
4
+ bare = false
5
+ logallrefupdates = true
6
+ symlinks = false
7
+ ignorecase = true
proxy-lite-work/.sfdx/indexes/lwc/custom-components.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
proxy-lite-work/.sfdx/sfdx-config.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "defaultusername": "vscodeOrg"
3
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Account.cls ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Account {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Account MasterRecord;
13
+ global Id MasterRecordId;
14
+ global String Name;
15
+ global String Type;
16
+ global Account Parent;
17
+ global Id ParentId;
18
+ global String BillingStreet;
19
+ global String BillingCity;
20
+ global String BillingState;
21
+ global String BillingPostalCode;
22
+ global String BillingCountry;
23
+ global Double BillingLatitude;
24
+ global Double BillingLongitude;
25
+ global String BillingGeocodeAccuracy;
26
+ global Address BillingAddress;
27
+ global String ShippingStreet;
28
+ global String ShippingCity;
29
+ global String ShippingState;
30
+ global String ShippingPostalCode;
31
+ global String ShippingCountry;
32
+ global Double ShippingLatitude;
33
+ global Double ShippingLongitude;
34
+ global String ShippingGeocodeAccuracy;
35
+ global Address ShippingAddress;
36
+ global String Phone;
37
+ global String Fax;
38
+ global String AccountNumber;
39
+ global String Website;
40
+ global String PhotoUrl;
41
+ global String Sic;
42
+ global String Industry;
43
+ global Decimal AnnualRevenue;
44
+ global Integer NumberOfEmployees;
45
+ global String Ownership;
46
+ global String TickerSymbol;
47
+ global String Description;
48
+ global String Rating;
49
+ global String Site;
50
+ global User Owner;
51
+ global Id OwnerId;
52
+ global Datetime CreatedDate;
53
+ global User CreatedBy;
54
+ global Id CreatedById;
55
+ global Datetime LastModifiedDate;
56
+ global User LastModifiedBy;
57
+ global Id LastModifiedById;
58
+ global Datetime SystemModstamp;
59
+ global Date LastActivityDate;
60
+ global Datetime LastViewedDate;
61
+ global Datetime LastReferencedDate;
62
+ global String Jigsaw;
63
+ global String JigsawCompanyId;
64
+ global String CleanStatus;
65
+ global String AccountSource;
66
+ global String DunsNumber;
67
+ global String Tradestyle;
68
+ global String NaicsCode;
69
+ global String NaicsDesc;
70
+ global String YearStarted;
71
+ global String SicDesc;
72
+ global DandBCompany DandbCompany;
73
+ global Id DandbCompanyId;
74
+ global OperatingHours OperatingHours;
75
+ global Id OperatingHoursId;
76
+ global List<Account> ChildAccounts;
77
+ global List<AccountCleanInfo> AccountCleanInfos;
78
+ global List<AccountContactRole> AccountContactRoles;
79
+ global List<AccountFeed> Feeds;
80
+ global List<AccountHistory> Histories;
81
+ global List<AccountPartner> AccountPartnersFrom;
82
+ global List<AccountPartner> AccountPartnersTo;
83
+ global List<AccountShare> Shares;
84
+ global List<ActivityHistory> ActivityHistories;
85
+ global List<AlternativePaymentMethod> AlternativePaymentMethods;
86
+ global List<Asset> Assets;
87
+ global List<Asset> ProvidedAssets;
88
+ global List<Asset> ServicedAssets;
89
+ global List<AssociatedLocation> AssociatedLocations;
90
+ global List<AttachedContentDocument> AttachedContentDocuments;
91
+ global List<Attachment> Attachments;
92
+ global List<AuthorizationFormConsent> AuthorizationFormConsents;
93
+ global List<AuthorizationFormConsent> RelatedAuthorizationFormConsents;
94
+ global List<CardPaymentMethod> CardPaymentMethods;
95
+ global List<Case> Cases;
96
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
97
+ global List<CombinedAttachment> CombinedAttachments;
98
+ global List<CommSubscriptionConsent> CommSubscriptionConsents;
99
+ global List<Contact> Contacts;
100
+ global List<ContactPointAddress> ContactPointAddresses;
101
+ global List<ContactPointEmail> ContactPointEmails;
102
+ global List<ContactPointPhone> ContactPointPhones;
103
+ global List<ContactRequest> ContactRequests;
104
+ global List<ContentDocumentLink> ContentDocumentLinks;
105
+ global List<Contract> Contracts;
106
+ global List<CreditMemo> CreditMemos;
107
+ global List<DigitalWallet> DigitalWallets;
108
+ global List<DuplicateRecordItem> DuplicateRecordItems;
109
+ global List<EmailMessage> Emails;
110
+ global List<Entitlement> Entitlements;
111
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
112
+ global List<Event> Events;
113
+ global List<Expense> Expenses;
114
+ global List<FinanceBalanceSnapshot> FinanceBalanceSnapshots;
115
+ global List<FinanceTransaction> FinanceTransactions;
116
+ global List<Invoice> Invoices;
117
+ global List<MaintenancePlan> MaintenancePlans;
118
+ global List<MessagingEndUser> MessagingEndUsers;
119
+ global List<MessagingSession> MessagingSessions;
120
+ global List<Note> Notes;
121
+ global List<NoteAndAttachment> NotesAndAttachments;
122
+ global List<OpenActivity> OpenActivities;
123
+ global List<Opportunity> Opportunities;
124
+ global List<OpportunityPartner> OpportunityPartnersTo;
125
+ global List<Order> Orders;
126
+ global List<Partner> PartnersFrom;
127
+ global List<Partner> PartnersTo;
128
+ global List<Payment> Payments;
129
+ global List<PaymentAuthAdjustment> PaymentAuthAdjustments;
130
+ global List<PaymentAuthorization> PaymentAuthorizations;
131
+ global List<PaymentLineInvoice> PaymentLinesInvoice;
132
+ global List<ProcessInstance> ProcessInstances;
133
+ global List<ProcessInstanceHistory> ProcessSteps;
134
+ global List<ProductRequest> ProductRequests;
135
+ global List<ProductRequestLineItem> ProductRequestLineItems;
136
+ global List<RecordAction> RecordActions;
137
+ global List<RecordActionHistory> RecordActionHistories;
138
+ global List<Refund> Refunds;
139
+ global List<RefundLinePayment> RefundLinePayments;
140
+ global List<ResourcePreference> ResourcePreferences;
141
+ global List<ReturnOrder> ReturnOrders;
142
+ global List<ScorecardAssociation> ScorecardAssociations;
143
+ global List<ServiceAppointment> ServiceAppointmentAccount;
144
+ global List<ServiceAppointment> ServiceAppointments;
145
+ global List<ServiceContract> ServiceContracts;
146
+ global List<ServiceResource> ServiceResources;
147
+ global List<Swarm> Swarms;
148
+ global List<SwarmMember> SwarmMembers;
149
+ global List<Task> Tasks;
150
+ global List<TopicAssignment> TopicAssignments;
151
+ global List<User> Users;
152
+ global List<WorkOrder> WorkOrders;
153
+ global List<WorkPlanSelectionRule> WorkPlanSelectionRules;
154
+ global List<AIInsightValue> SobjectLookupValue;
155
+ global List<AIRecordInsight> Target;
156
+ global List<AccountChangeEvent> Parent;
157
+ global List<AccountContactRoleChangeEvent> Account;
158
+ global List<AssetChangeEvent> AssetProvidedBy;
159
+ global List<AssetChangeEvent> AssetServicedBy;
160
+ global List<AuthorizationFormConsentChangeEvent> ConsentGiver;
161
+ global List<AuthorizationFormConsentChangeEvent> RelatedRecord;
162
+ global List<CampaignMember> LeadOrContact;
163
+ global List<CaseChangeEvent> Account;
164
+ global List<CommSubscriptionConsentChangeEvent> ConsentGiver;
165
+ global List<ContactChangeEvent> Account;
166
+ global List<ContactPointAddressChangeEvent> Parent;
167
+ global List<ContentDistribution> RelatedRecord;
168
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
169
+ global List<ContentVersion> FirstPublishLocation;
170
+ global List<ContractChangeEvent> Account;
171
+ global List<EmailMessageChangeEvent> RelatedTo;
172
+ global List<EntitlementChangeEvent> Account;
173
+ global List<EventChangeEvent> What;
174
+ global List<EventRelationChangeEvent> Relation;
175
+ global List<ExpenseChangeEvent> Account;
176
+ global List<FeedComment> Parent;
177
+ global List<FinanceBalanceSnapshotChangeEvent> Account;
178
+ global List<FlowExecutionErrorEvent> ContextRecord;
179
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
180
+ global List<Lead> ConvertedAccount;
181
+ global List<MaintenancePlanChangeEvent> Account;
182
+ global List<OutgoingEmail> RelatedTo;
183
+ global List<PaymentMethod> Account;
184
+ global List<ResourcePreferenceChangeEvent> RelatedRecord;
185
+ global List<ReturnOrderChangeEvent> Account;
186
+ global List<ServiceAppointmentChangeEvent> ParentRecord;
187
+ global List<ServiceContractChangeEvent> Account;
188
+ global List<TaskChangeEvent> What;
189
+ global List<UserChangeEvent> Account;
190
+ global List<UserRole> PortalAccount;
191
+ global List<WorkOrderChangeEvent> Account;
192
+
193
+ global Account ()
194
+ {
195
+ }
196
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class AccountHistory {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Account Account;
13
+ global Id AccountId;
14
+ global User CreatedBy;
15
+ global Id CreatedById;
16
+ global Datetime CreatedDate;
17
+ global String Field;
18
+ global String DataType;
19
+ global Object OldValue;
20
+ global Object NewValue;
21
+
22
+ global AccountHistory ()
23
+ {
24
+ }
25
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Asset.cls ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Asset {
10
+ global Id Id;
11
+ global Contact Contact;
12
+ global Id ContactId;
13
+ global Account Account;
14
+ global Id AccountId;
15
+ global Asset Parent;
16
+ global Id ParentId;
17
+ global Asset RootAsset;
18
+ global Id RootAssetId;
19
+ global Product2 Product2;
20
+ global Id Product2Id;
21
+ global String ProductCode;
22
+ global Boolean IsCompetitorProduct;
23
+ global Datetime CreatedDate;
24
+ global User CreatedBy;
25
+ global Id CreatedById;
26
+ global Datetime LastModifiedDate;
27
+ global User LastModifiedBy;
28
+ global Id LastModifiedById;
29
+ global Datetime SystemModstamp;
30
+ global Boolean IsDeleted;
31
+ global String Name;
32
+ global String SerialNumber;
33
+ global Date InstallDate;
34
+ global Date PurchaseDate;
35
+ global Date UsageEndDate;
36
+ global Datetime LifecycleStartDate;
37
+ global Datetime LifecycleEndDate;
38
+ global String Status;
39
+ global Decimal Price;
40
+ global Double Quantity;
41
+ global String Description;
42
+ global User Owner;
43
+ global Id OwnerId;
44
+ global Location Location;
45
+ global Id LocationId;
46
+ global Account AssetProvidedBy;
47
+ global Id AssetProvidedById;
48
+ global Account AssetServicedBy;
49
+ global Id AssetServicedById;
50
+ global Boolean IsInternal;
51
+ global Integer AssetLevel;
52
+ global String StockKeepingUnit;
53
+ global Boolean HasLifecycleManagement;
54
+ global Decimal CurrentMrr;
55
+ global Datetime CurrentLifecycleEndDate;
56
+ global Double CurrentQuantity;
57
+ global Decimal CurrentAmount;
58
+ global Decimal TotalLifecycleAmount;
59
+ global String Street;
60
+ global String City;
61
+ global String State;
62
+ global String PostalCode;
63
+ global String Country;
64
+ global Double Latitude;
65
+ global Double Longitude;
66
+ global String GeocodeAccuracy;
67
+ global Address Address;
68
+ global Datetime LastViewedDate;
69
+ global Datetime LastReferencedDate;
70
+ global List<ActivityHistory> ActivityHistories;
71
+ global List<Asset> ChildAssets;
72
+ global List<AssetAction> AssetActions;
73
+ global List<AssetAttribute> AssetAttributes;
74
+ global List<AssetDowntimePeriod> AssetDowntimePeriods;
75
+ global List<AssetFeed> Feeds;
76
+ global List<AssetHistory> Histories;
77
+ global List<AssetRelationship> PrimaryAssets;
78
+ global List<AssetRelationship> RelatedAssets;
79
+ global List<AssetShare> Shares;
80
+ global List<AssetStatePeriod> AssetStatePeriods;
81
+ global List<AssetWarranty> WarrantyAssets;
82
+ global List<AttachedContentDocument> AttachedContentDocuments;
83
+ global List<Attachment> Attachments;
84
+ global List<Case> Cases;
85
+ global List<CombinedAttachment> CombinedAttachments;
86
+ global List<ContentDocumentLink> ContentDocumentLinks;
87
+ global List<ContractLineItem> ContractLineItems;
88
+ global List<EmailMessage> Emails;
89
+ global List<Entitlement> Entitlements;
90
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
91
+ global List<Event> Events;
92
+ global List<MaintenanceAsset> MaintenanceAssets;
93
+ global List<Note> Notes;
94
+ global List<NoteAndAttachment> NotesAndAttachments;
95
+ global List<OpenActivity> OpenActivities;
96
+ global List<ProcessInstance> ProcessInstances;
97
+ global List<ProcessInstanceHistory> ProcessSteps;
98
+ global List<ProductServiceCampaignItem> ProductServiceCampaignItems;
99
+ global List<RecordAction> RecordActions;
100
+ global List<RecordActionHistory> RecordActionHistories;
101
+ global List<RecordsetFltrCritMonitor> RecordsetFltrCritMonitors;
102
+ global List<ResourcePreference> ResourcePreferences;
103
+ global List<ReturnOrderLineItem> ReturnOrderLineItems;
104
+ global List<SerializedProduct> SerializedProducts;
105
+ global List<ServiceAppointment> ServiceAppointments;
106
+ global List<Task> Tasks;
107
+ global List<TopicAssignment> TopicAssignments;
108
+ global List<WorkOrder> WorkOrders;
109
+ global List<WorkOrderLineItem> WorkOrderLineItems;
110
+ global List<WorkPlanSelectionRule> WorkPlanSelectionRules;
111
+ global List<AIInsightValue> SobjectLookupValue;
112
+ global List<AIRecordInsight> Target;
113
+ global List<Asset> RootAsset;
114
+ global List<AssetAttributeChangeEvent> Asset;
115
+ global List<AssetChangeEvent> Parent;
116
+ global List<AssetChangeEvent> RootAsset;
117
+ global List<AssetTokenEvent> Asset;
118
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
119
+ global List<ContentVersion> FirstPublishLocation;
120
+ global List<ContractLineItemChangeEvent> Asset;
121
+ global List<EmailMessageChangeEvent> RelatedTo;
122
+ global List<EntitlementChangeEvent> Asset;
123
+ global List<EventChangeEvent> What;
124
+ global List<EventRelationChangeEvent> Relation;
125
+ global List<FeedComment> Parent;
126
+ global List<FlowExecutionErrorEvent> ContextRecord;
127
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
128
+ global List<MaintenanceAssetChangeEvent> Asset;
129
+ global List<OutgoingEmail> RelatedTo;
130
+ global List<RecordsetFltrCritMonitorChangeEvent> Asset;
131
+ global List<ServiceAppointmentChangeEvent> ParentRecord;
132
+ global List<TaskChangeEvent> What;
133
+ global List<WorkOrderChangeEvent> Asset;
134
+
135
+ global Asset ()
136
+ {
137
+ }
138
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Attachment.cls ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Attachment {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global SObject Parent;
13
+ global Id ParentId;
14
+ global String Name;
15
+ global Boolean IsPrivate;
16
+ global String ContentType;
17
+ global Integer BodyLength;
18
+ global Blob Body;
19
+ global SObject Owner;
20
+ global Id OwnerId;
21
+ global Datetime CreatedDate;
22
+ global User CreatedBy;
23
+ global Id CreatedById;
24
+ global Datetime LastModifiedDate;
25
+ global User LastModifiedBy;
26
+ global Id LastModifiedById;
27
+ global Datetime SystemModstamp;
28
+ global String Description;
29
+ global List<FlowExecutionErrorEvent> ContextRecord;
30
+ global List<FlowRecordRelation> RelatedRecord;
31
+
32
+ global Attachment ()
33
+ {
34
+ }
35
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Case.cls ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Case {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Case MasterRecord;
13
+ global Id MasterRecordId;
14
+ global String CaseNumber;
15
+ global Contact Contact;
16
+ global Id ContactId;
17
+ global Account Account;
18
+ global Id AccountId;
19
+ global Asset Asset;
20
+ global Id AssetId;
21
+ global Case Parent;
22
+ global Id ParentId;
23
+ global String SuppliedName;
24
+ global String SuppliedEmail;
25
+ global String SuppliedPhone;
26
+ global String SuppliedCompany;
27
+ global String Type;
28
+ global String Status;
29
+ global String Reason;
30
+ global String Origin;
31
+ global String Subject;
32
+ global String Priority;
33
+ global String Description;
34
+ global Boolean IsClosed;
35
+ global Datetime ClosedDate;
36
+ global Boolean IsEscalated;
37
+ global SObject Owner;
38
+ global Id OwnerId;
39
+ global Datetime CreatedDate;
40
+ global User CreatedBy;
41
+ global Id CreatedById;
42
+ global Datetime LastModifiedDate;
43
+ global User LastModifiedBy;
44
+ global Id LastModifiedById;
45
+ global Datetime SystemModstamp;
46
+ global String ContactPhone;
47
+ global String ContactMobile;
48
+ global String ContactEmail;
49
+ global String ContactFax;
50
+ global String Comments;
51
+ global Datetime LastViewedDate;
52
+ global Datetime LastReferencedDate;
53
+ global List<ActivityHistory> ActivityHistories;
54
+ global List<AttachedContentDocument> AttachedContentDocuments;
55
+ global List<Attachment> Attachments;
56
+ global List<Case> Cases;
57
+ global List<CaseComment> CaseComments;
58
+ global List<CaseContactRole> CaseContactRoles;
59
+ global List<CaseFeed> Feeds;
60
+ global List<CaseHistory> Histories;
61
+ global List<CaseMilestone> CaseMilestones;
62
+ global List<CaseShare> Shares;
63
+ global List<CaseSolution> CaseSolutions;
64
+ global List<CaseTeamMember> TeamMembers;
65
+ global List<CaseTeamTemplateRecord> TeamTemplateRecords;
66
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
67
+ global List<CombinedAttachment> CombinedAttachments;
68
+ global List<ContactRequest> ContactRequests;
69
+ global List<ContentDocumentLink> ContentDocumentLinks;
70
+ global List<EmailMessage> EmailMessages;
71
+ global List<EmailMessage> Emails;
72
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
73
+ global List<Event> Events;
74
+ global List<MessagingSession> MessagingSessions;
75
+ global List<OpenActivity> OpenActivities;
76
+ global List<ProcessException> ProcessExceptions;
77
+ global List<ProcessInstance> ProcessInstances;
78
+ global List<ProcessInstanceHistory> ProcessSteps;
79
+ global List<ProductRequest> ProductRequests;
80
+ global List<ProductRequestLineItem> ProductRequestLineItems;
81
+ global List<RecordAction> RecordActions;
82
+ global List<RecordActionHistory> RecordActionHistories;
83
+ global List<ReturnOrder> ReturnOrders;
84
+ global List<ServiceAppointment> ServiceAppointments;
85
+ global List<Swarm> Swarms;
86
+ global List<SwarmMember> SwarmMembers;
87
+ global List<Task> Tasks;
88
+ global List<TopicAssignment> TopicAssignments;
89
+ global List<WorkOrder> WorkOrders;
90
+ global List<AIInsightValue> SobjectLookupValue;
91
+ global List<AIRecordInsight> Target;
92
+ global List<CaseChangeEvent> Parent;
93
+ global List<ContentDistribution> RelatedRecord;
94
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
95
+ global List<ContentVersion> FirstPublishLocation;
96
+ global List<EmailMessageChangeEvent> Parent;
97
+ global List<EmailMessageChangeEvent> RelatedTo;
98
+ global List<EventChangeEvent> What;
99
+ global List<EventRelationChangeEvent> Relation;
100
+ global List<FeedComment> Parent;
101
+ global List<FlowExecutionErrorEvent> ContextRecord;
102
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
103
+ global List<ProductRequestChangeEvent> Case;
104
+ global List<ServiceAppointmentChangeEvent> ParentRecord;
105
+ global List<TaskChangeEvent> What;
106
+ global List<WorkOrderChangeEvent> Case;
107
+
108
+ global Case ()
109
+ {
110
+ }
111
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Contact.cls ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Contact {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Contact MasterRecord;
13
+ global Id MasterRecordId;
14
+ global Account Account;
15
+ global Id AccountId;
16
+ global String LastName;
17
+ global String FirstName;
18
+ global String Salutation;
19
+ global String Name;
20
+ global String OtherStreet;
21
+ global String OtherCity;
22
+ global String OtherState;
23
+ global String OtherPostalCode;
24
+ global String OtherCountry;
25
+ global Double OtherLatitude;
26
+ global Double OtherLongitude;
27
+ global String OtherGeocodeAccuracy;
28
+ global Address OtherAddress;
29
+ global String MailingStreet;
30
+ global String MailingCity;
31
+ global String MailingState;
32
+ global String MailingPostalCode;
33
+ global String MailingCountry;
34
+ global Double MailingLatitude;
35
+ global Double MailingLongitude;
36
+ global String MailingGeocodeAccuracy;
37
+ global Address MailingAddress;
38
+ global String Phone;
39
+ global String Fax;
40
+ global String MobilePhone;
41
+ global String HomePhone;
42
+ global String OtherPhone;
43
+ global String AssistantPhone;
44
+ global Contact ReportsTo;
45
+ global Id ReportsToId;
46
+ global String Email;
47
+ global String Title;
48
+ global String Department;
49
+ global String AssistantName;
50
+ global String LeadSource;
51
+ global Date Birthdate;
52
+ global String Description;
53
+ global User Owner;
54
+ global Id OwnerId;
55
+ global Datetime CreatedDate;
56
+ global User CreatedBy;
57
+ global Id CreatedById;
58
+ global Datetime LastModifiedDate;
59
+ global User LastModifiedBy;
60
+ global Id LastModifiedById;
61
+ global Datetime SystemModstamp;
62
+ global Date LastActivityDate;
63
+ global Datetime LastCURequestDate;
64
+ global Datetime LastCUUpdateDate;
65
+ global Datetime LastViewedDate;
66
+ global Datetime LastReferencedDate;
67
+ global String EmailBouncedReason;
68
+ global Datetime EmailBouncedDate;
69
+ global Boolean IsEmailBounced;
70
+ global String PhotoUrl;
71
+ global String Jigsaw;
72
+ global String JigsawContactId;
73
+ global String CleanStatus;
74
+ global Individual Individual;
75
+ global Id IndividualId;
76
+ global List<AcceptedEventRelation> AcceptedEventRelations;
77
+ global List<AccountContactRole> AccountContactRoles;
78
+ global List<ActivityHistory> ActivityHistories;
79
+ global List<Asset> Assets;
80
+ global List<AttachedContentDocument> AttachedContentDocuments;
81
+ global List<Attachment> Attachments;
82
+ global List<AuthorizationFormConsent> AuthorizationFormConsents;
83
+ global List<CampaignMember> CampaignMembers;
84
+ global List<Case> Cases;
85
+ global List<CaseContactRole> CaseContactRoles;
86
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
87
+ global List<CombinedAttachment> CombinedAttachments;
88
+ global List<CommSubscriptionConsent> CommSubscriptionConsents;
89
+ global List<ContactCleanInfo> ContactCleanInfos;
90
+ global List<ContactFeed> Feeds;
91
+ global List<ContactHistory> Histories;
92
+ global List<ContactRequest> ContactRequests;
93
+ global List<ContactShare> Shares;
94
+ global List<ContentDocumentLink> ContentDocumentLinks;
95
+ global List<Contract> ContractsSigned;
96
+ global List<ContractContactRole> ContractContactRoles;
97
+ global List<ConversationParticipant> ConversationParticipants;
98
+ global List<CreditMemo> CreditMemos;
99
+ global List<DeclinedEventRelation> DeclinedEventRelations;
100
+ global List<DuplicateRecordItem> DuplicateRecordItems;
101
+ global List<EmailMessageRelation> EmailMessageRelations;
102
+ global List<EmailStatus> EmailStatuses;
103
+ global List<EntitlementContact> EntitlementContacts;
104
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
105
+ global List<Event> Events;
106
+ global List<EventRelation> EventRelations;
107
+ global List<Invoice> Invoices;
108
+ global List<ListEmailIndividualRecipient> ListEmailIndividualRecipients;
109
+ global List<MaintenancePlan> MaintenancePlans;
110
+ global List<MessagingEndUser> MessagingEndUsers;
111
+ global List<MessagingSession> MessagingSessions;
112
+ global List<Note> Notes;
113
+ global List<NoteAndAttachment> NotesAndAttachments;
114
+ global List<OpenActivity> OpenActivities;
115
+ global List<Opportunity> Opportunities;
116
+ global List<OpportunityContactRole> OpportunityContactRoles;
117
+ global List<OutgoingEmailRelation> OutgoingEmailRelations;
118
+ global List<ProcessInstance> ProcessInstances;
119
+ global List<ProcessInstanceHistory> ProcessSteps;
120
+ global List<RecordAction> RecordActions;
121
+ global List<RecordActionHistory> RecordActionHistories;
122
+ global List<ReturnOrder> ReturnOrders;
123
+ global List<ServiceAppointment> ServiceAppointments;
124
+ global List<ServiceContract> ServiceContracts;
125
+ global List<Task> Tasks;
126
+ global List<TopicAssignment> TopicAssignments;
127
+ global List<UndecidedEventRelation> UndecidedEventRelations;
128
+ global List<User> Users;
129
+ global List<UserEmailPreferredPerson> PersonRecord;
130
+ global List<WorkOrder> WorkOrders;
131
+ global List<AIInsightValue> SobjectLookupValue;
132
+ global List<AIRecordInsight> Target;
133
+ global List<AccountContactRoleChangeEvent> Contact;
134
+ global List<AuthorizationFormConsentChangeEvent> ConsentGiver;
135
+ global List<CampaignMember> LeadOrContact;
136
+ global List<CampaignMemberChangeEvent> Contact;
137
+ global List<CaseTeamMember> Member;
138
+ global List<CommSubscriptionConsentChangeEvent> ConsentGiver;
139
+ global List<Contact> ReportsTo;
140
+ global List<ContentDistribution> RelatedRecord;
141
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
142
+ global List<ContentVersion> FirstPublishLocation;
143
+ global List<ContractChangeEvent> CustomerSigned;
144
+ global List<EventChangeEvent> Who;
145
+ global List<EventRelationChangeEvent> Relation;
146
+ global List<FeedComment> Parent;
147
+ global List<FlowExecutionErrorEvent> ContextRecord;
148
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
149
+ global List<Lead> ConvertedContact;
150
+ global List<MaintenancePlanChangeEvent> Contact;
151
+ global List<MatchingInformation> SFDCId;
152
+ global List<OpportunityChangeEvent> Contact;
153
+ global List<Order> BillToContact;
154
+ global List<Order> CustomerAuthorizedBy;
155
+ global List<Order> ShipToContact;
156
+ global List<OrderChangeEvent> BillToContact;
157
+ global List<OrderChangeEvent> CustomerAuthorizedBy;
158
+ global List<OrderChangeEvent> ShipToContact;
159
+ global List<OutgoingEmail> Who;
160
+ global List<ReturnOrderChangeEvent> Contact;
161
+ global List<TaskChangeEvent> Who;
162
+ global List<UserChangeEvent> Contact;
163
+
164
+ global Contact ()
165
+ {
166
+ }
167
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Contract.cls ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Contract {
10
+ global Id Id;
11
+ global Account Account;
12
+ global Id AccountId;
13
+ global Pricebook2 Pricebook2;
14
+ global Id Pricebook2Id;
15
+ global String OwnerExpirationNotice;
16
+ global Date StartDate;
17
+ global Date EndDate;
18
+ global String BillingStreet;
19
+ global String BillingCity;
20
+ global String BillingState;
21
+ global String BillingPostalCode;
22
+ global String BillingCountry;
23
+ global Double BillingLatitude;
24
+ global Double BillingLongitude;
25
+ global String BillingGeocodeAccuracy;
26
+ global Address BillingAddress;
27
+ global Integer ContractTerm;
28
+ global User Owner;
29
+ global Id OwnerId;
30
+ global String Status;
31
+ global User CompanySigned;
32
+ global Id CompanySignedId;
33
+ global Date CompanySignedDate;
34
+ global Contact CustomerSigned;
35
+ global Id CustomerSignedId;
36
+ global String CustomerSignedTitle;
37
+ global Date CustomerSignedDate;
38
+ global String SpecialTerms;
39
+ global User ActivatedBy;
40
+ global Id ActivatedById;
41
+ global Datetime ActivatedDate;
42
+ global String StatusCode;
43
+ global String Description;
44
+ global Boolean IsDeleted;
45
+ global String ContractNumber;
46
+ global Datetime LastApprovedDate;
47
+ global Datetime CreatedDate;
48
+ global User CreatedBy;
49
+ global Id CreatedById;
50
+ global Datetime LastModifiedDate;
51
+ global User LastModifiedBy;
52
+ global Id LastModifiedById;
53
+ global Datetime SystemModstamp;
54
+ global Date LastActivityDate;
55
+ global Datetime LastViewedDate;
56
+ global Datetime LastReferencedDate;
57
+ global List<ActivityHistory> ActivityHistories;
58
+ global List<AttachedContentDocument> AttachedContentDocuments;
59
+ global List<Attachment> Attachments;
60
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
61
+ global List<CombinedAttachment> CombinedAttachments;
62
+ global List<ContentDocumentLink> ContentDocumentLinks;
63
+ global List<ContractContactRole> ContractContactRoles;
64
+ global List<ContractFeed> Feeds;
65
+ global List<ContractHistory> Histories;
66
+ global List<EmailMessage> Emails;
67
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
68
+ global List<Event> Events;
69
+ global List<Note> Notes;
70
+ global List<NoteAndAttachment> NotesAndAttachments;
71
+ global List<OpenActivity> OpenActivities;
72
+ global List<Order> Orders;
73
+ global List<ProcessInstance> ProcessInstances;
74
+ global List<ProcessInstanceHistory> ProcessSteps;
75
+ global List<RecordAction> RecordActions;
76
+ global List<RecordActionHistory> RecordActionHistories;
77
+ global List<Task> Tasks;
78
+ global List<TopicAssignment> TopicAssignments;
79
+ global List<AIInsightValue> SobjectLookupValue;
80
+ global List<AIRecordInsight> Target;
81
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
82
+ global List<ContentVersion> FirstPublishLocation;
83
+ global List<EmailMessageChangeEvent> RelatedTo;
84
+ global List<EventChangeEvent> What;
85
+ global List<EventRelationChangeEvent> Relation;
86
+ global List<FeedComment> Parent;
87
+ global List<FlowExecutionErrorEvent> ContextRecord;
88
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
89
+ global List<OrderChangeEvent> Contract;
90
+ global List<OutgoingEmail> RelatedTo;
91
+ global List<TaskChangeEvent> What;
92
+
93
+ global Contract ()
94
+ {
95
+ }
96
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Domain.cls ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Domain {
10
+ global Id Id;
11
+ global String DomainType;
12
+ global String Domain;
13
+ global Boolean OptionsHstsPreload;
14
+ global String CnameTarget;
15
+ global String HttpsOption;
16
+ global Datetime CreatedDate;
17
+ global User CreatedBy;
18
+ global Id CreatedById;
19
+ global Datetime LastModifiedDate;
20
+ global User LastModifiedBy;
21
+ global Id LastModifiedById;
22
+ global Datetime SystemModstamp;
23
+ global List<DomainSite> DomainSites;
24
+ global List<ManagedContentChannel> Domain;
25
+
26
+ global Domain ()
27
+ {
28
+ }
29
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Lead.cls ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Lead {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Lead MasterRecord;
13
+ global Id MasterRecordId;
14
+ global String LastName;
15
+ global String FirstName;
16
+ global String Salutation;
17
+ global String Name;
18
+ global String Title;
19
+ global String Company;
20
+ global String Street;
21
+ global String City;
22
+ global String State;
23
+ global String PostalCode;
24
+ global String Country;
25
+ global Double Latitude;
26
+ global Double Longitude;
27
+ global String GeocodeAccuracy;
28
+ global Address Address;
29
+ global String Phone;
30
+ global String MobilePhone;
31
+ global String Fax;
32
+ global String Email;
33
+ global String Website;
34
+ global String PhotoUrl;
35
+ global String Description;
36
+ global String LeadSource;
37
+ global String Status;
38
+ global String Industry;
39
+ global String Rating;
40
+ global Decimal AnnualRevenue;
41
+ global Integer NumberOfEmployees;
42
+ global SObject Owner;
43
+ global Id OwnerId;
44
+ global Boolean IsConverted;
45
+ global Date ConvertedDate;
46
+ global Account ConvertedAccount;
47
+ global Id ConvertedAccountId;
48
+ global Contact ConvertedContact;
49
+ global Id ConvertedContactId;
50
+ global Opportunity ConvertedOpportunity;
51
+ global Id ConvertedOpportunityId;
52
+ global Boolean IsUnreadByOwner;
53
+ global Datetime CreatedDate;
54
+ global User CreatedBy;
55
+ global Id CreatedById;
56
+ global Datetime LastModifiedDate;
57
+ global User LastModifiedBy;
58
+ global Id LastModifiedById;
59
+ global Datetime SystemModstamp;
60
+ global Date LastActivityDate;
61
+ global Datetime LastViewedDate;
62
+ global Datetime LastReferencedDate;
63
+ global String Jigsaw;
64
+ global String JigsawContactId;
65
+ global String CleanStatus;
66
+ global String CompanyDunsNumber;
67
+ global DandBCompany DandbCompany;
68
+ global Id DandbCompanyId;
69
+ global String EmailBouncedReason;
70
+ global Datetime EmailBouncedDate;
71
+ global Individual Individual;
72
+ global Id IndividualId;
73
+ global List<AcceptedEventRelation> AcceptedEventRelations;
74
+ global List<ActivityHistory> ActivityHistories;
75
+ global List<AttachedContentDocument> AttachedContentDocuments;
76
+ global List<Attachment> Attachments;
77
+ global List<CampaignMember> CampaignMembers;
78
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
79
+ global List<CombinedAttachment> CombinedAttachments;
80
+ global List<ContactRequest> ContactRequests;
81
+ global List<ContentDocumentLink> ContentDocumentLinks;
82
+ global List<DeclinedEventRelation> DeclinedEventRelations;
83
+ global List<DuplicateRecordItem> DuplicateRecordItems;
84
+ global List<EmailMessageRelation> EmailMessageRelations;
85
+ global List<EmailStatus> EmailStatuses;
86
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
87
+ global List<Event> Events;
88
+ global List<EventRelation> EventRelations;
89
+ global List<LeadCleanInfo> LeadCleanInfos;
90
+ global List<LeadFeed> Feeds;
91
+ global List<LeadHistory> Histories;
92
+ global List<LeadShare> Shares;
93
+ global List<ListEmailIndividualRecipient> ListEmailIndividualRecipients;
94
+ global List<MessagingEndUser> MessagingEndUsers;
95
+ global List<MessagingSession> MessagingSessions;
96
+ global List<Note> Notes;
97
+ global List<NoteAndAttachment> NotesAndAttachments;
98
+ global List<OpenActivity> OpenActivities;
99
+ global List<OutgoingEmailRelation> OutgoingEmailRelations;
100
+ global List<ProcessInstance> ProcessInstances;
101
+ global List<ProcessInstanceHistory> ProcessSteps;
102
+ global List<RecordAction> RecordActions;
103
+ global List<RecordActionHistory> RecordActionHistories;
104
+ global List<ServiceAppointment> ServiceAppointments;
105
+ global List<Task> Tasks;
106
+ global List<TopicAssignment> TopicAssignments;
107
+ global List<UndecidedEventRelation> UndecidedEventRelations;
108
+ global List<UserEmailPreferredPerson> PersonRecord;
109
+ global List<AIInsightValue> SobjectLookupValue;
110
+ global List<AIRecordInsight> Target;
111
+ global List<CampaignMember> LeadOrContact;
112
+ global List<CampaignMemberChangeEvent> Lead;
113
+ global List<ContentDistribution> RelatedRecord;
114
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
115
+ global List<ContentVersion> FirstPublishLocation;
116
+ global List<EventChangeEvent> Who;
117
+ global List<EventRelationChangeEvent> Relation;
118
+ global List<FeedComment> Parent;
119
+ global List<FlowExecutionErrorEvent> ContextRecord;
120
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
121
+ global List<OutgoingEmail> Who;
122
+ global List<ServiceAppointmentChangeEvent> ParentRecord;
123
+ global List<TaskChangeEvent> Who;
124
+
125
+ global Lead ()
126
+ {
127
+ }
128
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Note.cls ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Note {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global SObject Parent;
13
+ global Id ParentId;
14
+ global String Title;
15
+ global Boolean IsPrivate;
16
+ global String Body;
17
+ global User Owner;
18
+ global Id OwnerId;
19
+ global Datetime CreatedDate;
20
+ global User CreatedBy;
21
+ global Id CreatedById;
22
+ global Datetime LastModifiedDate;
23
+ global User LastModifiedBy;
24
+ global Id LastModifiedById;
25
+ global Datetime SystemModstamp;
26
+ global List<FlowExecutionErrorEvent> ContextRecord;
27
+ global List<FlowRecordRelation> RelatedRecord;
28
+
29
+ global Note ()
30
+ {
31
+ }
32
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Opportunity.cls ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Opportunity {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global Account Account;
13
+ global Id AccountId;
14
+ global Boolean IsPrivate;
15
+ global String Name;
16
+ global String Description;
17
+ global String StageName;
18
+ global Decimal Amount;
19
+ global Double Probability;
20
+ global Decimal ExpectedRevenue;
21
+ global Double TotalOpportunityQuantity;
22
+ global Date CloseDate;
23
+ global String Type;
24
+ global String NextStep;
25
+ global String LeadSource;
26
+ global Boolean IsClosed;
27
+ global Boolean IsWon;
28
+ global String ForecastCategory;
29
+ global String ForecastCategoryName;
30
+ global Campaign Campaign;
31
+ global Id CampaignId;
32
+ global Boolean HasOpportunityLineItem;
33
+ global Pricebook2 Pricebook2;
34
+ global Id Pricebook2Id;
35
+ global User Owner;
36
+ global Id OwnerId;
37
+ global Datetime CreatedDate;
38
+ global User CreatedBy;
39
+ global Id CreatedById;
40
+ global Datetime LastModifiedDate;
41
+ global User LastModifiedBy;
42
+ global Id LastModifiedById;
43
+ global Datetime SystemModstamp;
44
+ global Date LastActivityDate;
45
+ global Integer PushCount;
46
+ global Datetime LastStageChangeDate;
47
+ global Integer FiscalQuarter;
48
+ global Integer FiscalYear;
49
+ global String Fiscal;
50
+ global Contact Contact;
51
+ global Id ContactId;
52
+ global Datetime LastViewedDate;
53
+ global Datetime LastReferencedDate;
54
+ global Boolean HasOpenActivity;
55
+ global Boolean HasOverdueTask;
56
+ global OpportunityHistory LastAmountChangedHistory;
57
+ global Id LastAmountChangedHistoryId;
58
+ global OpportunityHistory LastCloseDateChangedHistory;
59
+ global Id LastCloseDateChangedHistoryId;
60
+ global List<AccountPartner> AccountPartners;
61
+ global List<ActivityHistory> ActivityHistories;
62
+ global List<AttachedContentDocument> AttachedContentDocuments;
63
+ global List<Attachment> Attachments;
64
+ global List<CollaborationGroupRecord> RecordAssociatedGroups;
65
+ global List<CombinedAttachment> CombinedAttachments;
66
+ global List<ContactRequest> ContactRequests;
67
+ global List<ContentDocumentLink> ContentDocumentLinks;
68
+ global List<EmailMessage> Emails;
69
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
70
+ global List<Event> Events;
71
+ global List<MessagingSession> MessagingSessions;
72
+ global List<Note> Notes;
73
+ global List<NoteAndAttachment> NotesAndAttachments;
74
+ global List<OpenActivity> OpenActivities;
75
+ global List<OpportunityCompetitor> OpportunityCompetitors;
76
+ global List<OpportunityContactRole> OpportunityContactRoles;
77
+ global List<OpportunityFeed> Feeds;
78
+ global List<OpportunityFieldHistory> Histories;
79
+ global List<OpportunityHistory> OpportunityHistories;
80
+ global List<OpportunityLineItem> OpportunityLineItems;
81
+ global List<OpportunityPartner> OpportunityPartnersFrom;
82
+ global List<OpportunityShare> Shares;
83
+ global List<Partner> Partners;
84
+ global List<ProcessInstance> ProcessInstances;
85
+ global List<ProcessInstanceHistory> ProcessSteps;
86
+ global List<RecordAction> RecordActions;
87
+ global List<RecordActionHistory> RecordActionHistories;
88
+ global List<ServiceAppointment> ServiceAppointments;
89
+ global List<Swarm> Swarms;
90
+ global List<SwarmMember> SwarmMembers;
91
+ global List<Task> Tasks;
92
+ global List<TopicAssignment> TopicAssignments;
93
+ global List<AIInsightValue> SobjectLookupValue;
94
+ global List<AIRecordInsight> Target;
95
+ global List<ContentDistribution> RelatedRecord;
96
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
97
+ global List<ContentVersion> FirstPublishLocation;
98
+ global List<EmailMessageChangeEvent> RelatedTo;
99
+ global List<EventChangeEvent> What;
100
+ global List<EventRelationChangeEvent> Relation;
101
+ global List<FeedComment> Parent;
102
+ global List<FlowExecutionErrorEvent> ContextRecord;
103
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
104
+ global List<Lead> ConvertedOpportunity;
105
+ global List<OpportunityContactRoleChangeEvent> Opportunity;
106
+ global List<OutgoingEmail> RelatedTo;
107
+ global List<ServiceAppointmentChangeEvent> ParentRecord;
108
+ global List<TaskChangeEvent> What;
109
+
110
+ global Opportunity ()
111
+ {
112
+ }
113
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Order.cls ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Order {
10
+ global Id Id;
11
+ global SObject Owner;
12
+ global Id OwnerId;
13
+ global Contract Contract;
14
+ global Id ContractId;
15
+ global Account Account;
16
+ global Id AccountId;
17
+ global Pricebook2 Pricebook2;
18
+ global Id Pricebook2Id;
19
+ global Order OriginalOrder;
20
+ global Id OriginalOrderId;
21
+ global Date EffectiveDate;
22
+ global Date EndDate;
23
+ global Boolean IsReductionOrder;
24
+ global String Status;
25
+ global String Description;
26
+ global Contact CustomerAuthorizedBy;
27
+ global Id CustomerAuthorizedById;
28
+ global Date CustomerAuthorizedDate;
29
+ global User CompanyAuthorizedBy;
30
+ global Id CompanyAuthorizedById;
31
+ global Date CompanyAuthorizedDate;
32
+ global String Type;
33
+ global String BillingStreet;
34
+ global String BillingCity;
35
+ global String BillingState;
36
+ global String BillingPostalCode;
37
+ global String BillingCountry;
38
+ global Double BillingLatitude;
39
+ global Double BillingLongitude;
40
+ global String BillingGeocodeAccuracy;
41
+ global Address BillingAddress;
42
+ global String ShippingStreet;
43
+ global String ShippingCity;
44
+ global String ShippingState;
45
+ global String ShippingPostalCode;
46
+ global String ShippingCountry;
47
+ global Double ShippingLatitude;
48
+ global Double ShippingLongitude;
49
+ global String ShippingGeocodeAccuracy;
50
+ global Address ShippingAddress;
51
+ global String Name;
52
+ global Date PoDate;
53
+ global String PoNumber;
54
+ global String OrderReferenceNumber;
55
+ global Contact BillToContact;
56
+ global Id BillToContactId;
57
+ global Contact ShipToContact;
58
+ global Id ShipToContactId;
59
+ global Datetime ActivatedDate;
60
+ global User ActivatedBy;
61
+ global Id ActivatedById;
62
+ global String StatusCode;
63
+ global String OrderNumber;
64
+ global Decimal TotalAmount;
65
+ global Datetime CreatedDate;
66
+ global User CreatedBy;
67
+ global Id CreatedById;
68
+ global Datetime LastModifiedDate;
69
+ global User LastModifiedBy;
70
+ global Id LastModifiedById;
71
+ global Boolean IsDeleted;
72
+ global Datetime SystemModstamp;
73
+ global Datetime LastViewedDate;
74
+ global Datetime LastReferencedDate;
75
+ global List<ActivityHistory> ActivityHistories;
76
+ global List<AppUsageAssignment> AppUsageAssignments;
77
+ global List<AttachedContentDocument> AttachedContentDocuments;
78
+ global List<Attachment> Attachments;
79
+ global List<CombinedAttachment> CombinedAttachments;
80
+ global List<ContentDocumentLink> ContentDocumentLinks;
81
+ global List<CreditMemo> CreditMemos;
82
+ global List<DigitalSignature> DigitalSignatures;
83
+ global List<EmailMessage> Emails;
84
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
85
+ global List<Event> Events;
86
+ global List<Invoice> Invoices;
87
+ global List<Note> Notes;
88
+ global List<NoteAndAttachment> NotesAndAttachments;
89
+ global List<OpenActivity> OpenActivities;
90
+ global List<Order> Orders;
91
+ global List<OrderFeed> Feeds;
92
+ global List<OrderHistory> Histories;
93
+ global List<OrderItem> OrderItems;
94
+ global List<OrderShare> Shares;
95
+ global List<PaymentGroup> PaymentGroups;
96
+ global List<ProcessException> ProcessExceptions;
97
+ global List<ProcessInstance> ProcessInstances;
98
+ global List<ProcessInstanceHistory> ProcessSteps;
99
+ global List<RecordAction> RecordActions;
100
+ global List<RecordActionHistory> RecordActionHistories;
101
+ global List<ReturnOrder> ReturnOrders;
102
+ global List<Task> Tasks;
103
+ global List<TopicAssignment> TopicAssignments;
104
+ global List<WorkOrderLineItem> WorkOrderLineItems;
105
+ global List<AIInsightValue> SobjectLookupValue;
106
+ global List<AIRecordInsight> Target;
107
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
108
+ global List<ContentVersion> FirstPublishLocation;
109
+ global List<DigitalSignatureChangeEvent> Parent;
110
+ global List<EmailMessageChangeEvent> RelatedTo;
111
+ global List<EventChangeEvent> What;
112
+ global List<EventRelationChangeEvent> Relation;
113
+ global List<FeedComment> Parent;
114
+ global List<FlowExecutionErrorEvent> ContextRecord;
115
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
116
+ global List<OrderChangeEvent> OriginalOrder;
117
+ global List<OrderItemChangeEvent> Order;
118
+ global List<OutgoingEmail> RelatedTo;
119
+ global List<ProcessExceptionEvent> AttachedTo;
120
+ global List<ReturnOrderChangeEvent> Order;
121
+ global List<TaskChangeEvent> What;
122
+ global List<WorkOrderLineItemChangeEvent> Order;
123
+
124
+ global Order ()
125
+ {
126
+ }
127
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Pricebook2 {
10
+ global Id Id;
11
+ global Boolean IsDeleted;
12
+ global String Name;
13
+ global Datetime CreatedDate;
14
+ global User CreatedBy;
15
+ global Id CreatedById;
16
+ global Datetime LastModifiedDate;
17
+ global User LastModifiedBy;
18
+ global Id LastModifiedById;
19
+ global Datetime SystemModstamp;
20
+ global Datetime LastViewedDate;
21
+ global Datetime LastReferencedDate;
22
+ global Boolean IsActive;
23
+ global Boolean IsArchived;
24
+ global String Description;
25
+ global Boolean IsStandard;
26
+ global List<AssetWarranty> AssetWarrantyPricebooks;
27
+ global List<Contract> Contracts;
28
+ global List<Opportunity> Opportunities;
29
+ global List<Order> Orders;
30
+ global List<Pricebook2History> Histories;
31
+ global List<PricebookEntry> PricebookEntries;
32
+ global List<RecordAction> RecordActions;
33
+ global List<RecordActionHistory> RecordActionHistories;
34
+ global List<ServiceContract> ServiceContracts;
35
+ global List<WarrantyTerm> Pricebook2;
36
+ global List<WorkOrder> WorkOrders;
37
+ global List<AIInsightValue> SobjectLookupValue;
38
+ global List<AIRecordInsight> Target;
39
+ global List<AssetWarrantyChangeEvent> Pricebook2;
40
+ global List<FlowExecutionErrorEvent> ContextRecord;
41
+ global List<FlowRecordRelation> RelatedRecord;
42
+ global List<OpportunityChangeEvent> Pricebook2;
43
+
44
+ global Pricebook2 ()
45
+ {
46
+ }
47
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class PricebookEntry {
10
+ global Id Id;
11
+ global String Name;
12
+ global Pricebook2 Pricebook2;
13
+ global Id Pricebook2Id;
14
+ global Product2 Product2;
15
+ global Id Product2Id;
16
+ global Decimal UnitPrice;
17
+ global Boolean IsActive;
18
+ global Boolean UseStandardPrice;
19
+ global Datetime CreatedDate;
20
+ global User CreatedBy;
21
+ global Id CreatedById;
22
+ global Datetime LastModifiedDate;
23
+ global User LastModifiedBy;
24
+ global Id LastModifiedById;
25
+ global Datetime SystemModstamp;
26
+ global String ProductCode;
27
+ global Boolean IsDeleted;
28
+ global Boolean IsArchived;
29
+ global List<ContractLineItem> ContractLineItems;
30
+ global List<OpportunityLineItem> OpportunityLineItems;
31
+ global List<OrderItem> OrderItems;
32
+ global List<PricebookEntryHistory> Histories;
33
+ global List<ProductConsumed> ProductsConsumed;
34
+ global List<RecordAction> RecordActions;
35
+ global List<RecordActionHistory> RecordActionHistories;
36
+ global List<WorkOrderLineItem> WorkOrderLineItems;
37
+ global List<AIInsightValue> SobjectLookupValue;
38
+ global List<AIRecordInsight> Target;
39
+ global List<ContractLineItemChangeEvent> PricebookEntry;
40
+ global List<FlowExecutionErrorEvent> ContextRecord;
41
+ global List<FlowRecordRelation> RelatedRecord;
42
+ global List<OrderItemChangeEvent> PricebookEntry;
43
+
44
+ global PricebookEntry ()
45
+ {
46
+ }
47
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Product2.cls ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Product2 {
10
+ global Id Id;
11
+ global String Name;
12
+ global String ProductCode;
13
+ global String Description;
14
+ global Boolean IsActive;
15
+ global Datetime CreatedDate;
16
+ global User CreatedBy;
17
+ global Id CreatedById;
18
+ global Datetime LastModifiedDate;
19
+ global User LastModifiedBy;
20
+ global Id LastModifiedById;
21
+ global Datetime SystemModstamp;
22
+ global String Family;
23
+ global Boolean IsSerialized;
24
+ global ExternalDataSource ExternalDataSource;
25
+ global Id ExternalDataSourceId;
26
+ global String ExternalId;
27
+ global String DisplayUrl;
28
+ global String QuantityUnitOfMeasure;
29
+ global Boolean IsDeleted;
30
+ global Boolean IsArchived;
31
+ global Datetime LastViewedDate;
32
+ global Datetime LastReferencedDate;
33
+ global String StockKeepingUnit;
34
+ global List<ActivityHistory> ActivityHistories;
35
+ global List<Asset> Assets;
36
+ global List<AttachedContentDocument> AttachedContentDocuments;
37
+ global List<Attachment> Attachments;
38
+ global List<CombinedAttachment> CombinedAttachments;
39
+ global List<ContentDocumentLink> ContentDocumentLinks;
40
+ global List<ContractLineItem> ContractLineItems;
41
+ global List<CreditMemoLine> CreditMemoLines;
42
+ global List<EmailMessage> Emails;
43
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
44
+ global List<Event> Events;
45
+ global List<InvoiceLine> InvoiceLines;
46
+ global List<Note> Notes;
47
+ global List<NoteAndAttachment> NotesAndAttachments;
48
+ global List<OpenActivity> OpenActivities;
49
+ global List<PricebookEntry> PricebookEntries;
50
+ global List<ProcessInstance> ProcessInstances;
51
+ global List<ProcessInstanceHistory> ProcessSteps;
52
+ global List<Product2Feed> Feeds;
53
+ global List<Product2History> Histories;
54
+ global List<ProductConsumed> ProductsConsumed;
55
+ global List<ProductConsumptionSchedule> ProductConsumptionSchedules;
56
+ global List<ProductItem> ProductItems;
57
+ global List<ProductRequestLineItem> ProductRequestLineItems;
58
+ global List<ProductRequired> ProductsRequired;
59
+ global List<ProductServiceCampaign> ProductServiceCampaignProducts;
60
+ global List<ProductServiceCampaignItem> ProductServiceCampaignItems;
61
+ global List<ProductTransfer> ProductTransfers;
62
+ global List<ProductWarrantyTerm> ProductWarrantyTermProducts;
63
+ global List<RecordAction> RecordActions;
64
+ global List<RecordActionHistory> RecordActionHistories;
65
+ global List<ReturnOrderLineItem> ReturnOrderLineItems;
66
+ global List<SerializedProduct> SerializedProducts;
67
+ global List<ShipmentItem> ShipmentItems;
68
+ global List<Task> Tasks;
69
+ global List<WorkOrderLineItem> WorkOrderLineItems;
70
+ global List<WorkPlanSelectionRule> WorkPlanSelectionRules;
71
+ global List<AIInsightValue> SobjectLookupValue;
72
+ global List<AIRecordInsight> Target;
73
+ global List<AssetChangeEvent> Product2;
74
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
75
+ global List<ContentVersion> FirstPublishLocation;
76
+ global List<EmailMessageChangeEvent> RelatedTo;
77
+ global List<EventChangeEvent> What;
78
+ global List<EventRelationChangeEvent> Relation;
79
+ global List<FeedComment> Parent;
80
+ global List<FlowExecutionErrorEvent> ContextRecord;
81
+ global List<FlowOrchestrationWorkItem> RelatedRecord;
82
+ global List<OpportunityLineItem> Product2;
83
+ global List<OutgoingEmail> RelatedTo;
84
+ global List<PricebookEntryChangeEvent> Product2;
85
+ global List<TaskChangeEvent> What;
86
+ global List<WorkOrderLineItemChangeEvent> Product2;
87
+
88
+ global Product2 ()
89
+ {
90
+ }
91
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/RecordType.cls ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class RecordType {
10
+ global Id Id;
11
+ global String Name;
12
+ global String DeveloperName;
13
+ global String NamespacePrefix;
14
+ global String Description;
15
+ global BusinessProcess BusinessProcess;
16
+ global Id BusinessProcessId;
17
+ global String SobjectType;
18
+ global Boolean IsActive;
19
+ global User CreatedBy;
20
+ global Id CreatedById;
21
+ global Datetime CreatedDate;
22
+ global User LastModifiedBy;
23
+ global Id LastModifiedById;
24
+ global Datetime LastModifiedDate;
25
+ global Datetime SystemModstamp;
26
+ global List<Campaign> CampaignMemberRecordType;
27
+ global List<ContentWorkspace> DefaultRecordType;
28
+ global List<GtwyProvPaymentMethodType> RecordType;
29
+ global List<PromptVersion> TargetRecordType;
30
+ global List<RecentlyViewed> RecordType;
31
+
32
+ global RecordType ()
33
+ {
34
+ }
35
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Report.cls ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Report {
10
+ global Id Id;
11
+ global SObject Owner;
12
+ global Id OwnerId;
13
+ global String FolderName;
14
+ global Datetime CreatedDate;
15
+ global User CreatedBy;
16
+ global Id CreatedById;
17
+ global Datetime LastModifiedDate;
18
+ global User LastModifiedBy;
19
+ global Id LastModifiedById;
20
+ global Boolean IsDeleted;
21
+ global String Name;
22
+ global String Description;
23
+ global String DeveloperName;
24
+ global String NamespacePrefix;
25
+ global Datetime LastRunDate;
26
+ global Datetime SystemModstamp;
27
+ global String Format;
28
+ global Datetime LastViewedDate;
29
+ global Datetime LastReferencedDate;
30
+ global List<AttachedContentDocument> AttachedContentDocuments;
31
+ global List<CombinedAttachment> CombinedAttachments;
32
+ global List<ContentDocumentLink> ContentDocumentLinks;
33
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
34
+ global List<ReportFeed> Feeds;
35
+ global List<ScorecardMetric> ScorecardMetrics;
36
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
37
+ global List<ContentVersion> FirstPublishLocation;
38
+ global List<DashboardComponent> CustomReport;
39
+ global List<FeedComment> Parent;
40
+ global List<FlowExecutionErrorEvent> ContextRecord;
41
+ global List<FlowRecordRelation> RelatedRecord;
42
+ global List<ReportEvent> Report;
43
+
44
+ global Report ()
45
+ {
46
+ }
47
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/Task.cls ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This file is generated as an Apex representation of the
2
+ // corresponding sObject and its fields.
3
+ // This read-only file is used by the Apex Language Server to
4
+ // provide code smartness, and is deleted each time you
5
+ // refresh your sObject definitions.
6
+ // To edit your sObjects and their fields, edit the corresponding
7
+ // .object-meta.xml and .field-meta.xml files.
8
+
9
+ global class Task {
10
+ global Id Id;
11
+ global SObject Who;
12
+ global Id WhoId;
13
+ global SObject What;
14
+ global Id WhatId;
15
+ global String Subject;
16
+ global Date ActivityDate;
17
+ global String Status;
18
+ global String Priority;
19
+ global Boolean IsHighPriority;
20
+ global SObject Owner;
21
+ global Id OwnerId;
22
+ global String Description;
23
+ global Boolean IsDeleted;
24
+ global Account Account;
25
+ global Id AccountId;
26
+ global Boolean IsClosed;
27
+ global Datetime CreatedDate;
28
+ global User CreatedBy;
29
+ global Id CreatedById;
30
+ global Datetime LastModifiedDate;
31
+ global User LastModifiedBy;
32
+ global Id LastModifiedById;
33
+ global Datetime SystemModstamp;
34
+ global Boolean IsArchived;
35
+ global Integer CallDurationInSeconds;
36
+ global String CallType;
37
+ global String CallDisposition;
38
+ global String CallObject;
39
+ global Datetime ReminderDateTime;
40
+ global Boolean IsReminderSet;
41
+ global Task RecurrenceActivity;
42
+ global Id RecurrenceActivityId;
43
+ global Boolean IsRecurrence;
44
+ global Date RecurrenceStartDateOnly;
45
+ global Date RecurrenceEndDateOnly;
46
+ global String RecurrenceTimeZoneSidKey;
47
+ global String RecurrenceType;
48
+ global Integer RecurrenceInterval;
49
+ global Integer RecurrenceDayOfWeekMask;
50
+ global Integer RecurrenceDayOfMonth;
51
+ global String RecurrenceInstance;
52
+ global String RecurrenceMonthOfYear;
53
+ global String RecurrenceRegeneratedType;
54
+ global String TaskSubtype;
55
+ global Datetime CompletedDateTime;
56
+ global List<ActivityFieldHistory> ActivityFieldHistories;
57
+ global List<AttachedContentDocument> AttachedContentDocuments;
58
+ global List<Attachment> Attachments;
59
+ global List<CombinedAttachment> CombinedAttachments;
60
+ global List<ContentDocumentLink> ContentDocumentLinks;
61
+ global List<EntitySubscription> FeedSubscriptionsForEntity;
62
+ global List<Task> RecurringTasks;
63
+ global List<TaskFeed> Feeds;
64
+ global List<TopicAssignment> TopicAssignments;
65
+ global List<AIInsightValue> SobjectLookupValue;
66
+ global List<AIRecordInsight> Target;
67
+ global List<ContentDocumentLinkChangeEvent> LinkedEntity;
68
+ global List<ContentVersion> FirstPublishLocation;
69
+ global List<EmailMessage> Activity;
70
+ global List<EmailStatus> Task;
71
+ global List<FeedComment> Parent;
72
+ global List<FlowExecutionErrorEvent> ContextRecord;
73
+ global List<FlowRecordRelation> RelatedRecord;
74
+ global List<TaskChangeEvent> RecurrenceActivity;
75
+
76
+ global Task ()
77
+ {
78
+ }
79
+ }
proxy-lite-work/.sfdx/tools/sobjects/standardObjects/User.cls ADDED
The diff for this file is too large to render. See raw diff
 
proxy-lite-work/.sfdx/tools/soqlMetadata/standardObjects/Account.json ADDED
@@ -0,0 +1,2952 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fields": [
3
+ {
4
+ "aggregatable": true,
5
+ "custom": false,
6
+ "defaultValue": null,
7
+ "extraTypeInfo": null,
8
+ "filterable": true,
9
+ "groupable": true,
10
+ "inlineHelpText": null,
11
+ "label": "Account ID",
12
+ "name": "Id",
13
+ "nillable": false,
14
+ "picklistValues": [],
15
+ "referenceTo": [],
16
+ "relationshipName": null,
17
+ "sortable": true,
18
+ "type": "id"
19
+ },
20
+ {
21
+ "aggregatable": false,
22
+ "custom": false,
23
+ "defaultValue": null,
24
+ "extraTypeInfo": null,
25
+ "filterable": true,
26
+ "groupable": true,
27
+ "inlineHelpText": null,
28
+ "label": "Deleted",
29
+ "name": "IsDeleted",
30
+ "nillable": false,
31
+ "picklistValues": [],
32
+ "referenceTo": [],
33
+ "relationshipName": null,
34
+ "sortable": true,
35
+ "type": "boolean"
36
+ },
37
+ {
38
+ "aggregatable": true,
39
+ "custom": false,
40
+ "defaultValue": null,
41
+ "extraTypeInfo": null,
42
+ "filterable": true,
43
+ "groupable": true,
44
+ "inlineHelpText": null,
45
+ "label": "Master Record ID",
46
+ "name": "MasterRecordId",
47
+ "nillable": true,
48
+ "picklistValues": [],
49
+ "referenceTo": [
50
+ "Account"
51
+ ],
52
+ "relationshipName": "MasterRecord",
53
+ "sortable": true,
54
+ "type": "reference"
55
+ },
56
+ {
57
+ "aggregatable": true,
58
+ "custom": false,
59
+ "defaultValue": null,
60
+ "extraTypeInfo": "switchablepersonname",
61
+ "filterable": true,
62
+ "groupable": true,
63
+ "inlineHelpText": null,
64
+ "label": "Account Name",
65
+ "name": "Name",
66
+ "nillable": false,
67
+ "picklistValues": [],
68
+ "referenceTo": [],
69
+ "relationshipName": null,
70
+ "sortable": true,
71
+ "type": "string"
72
+ },
73
+ {
74
+ "aggregatable": true,
75
+ "custom": false,
76
+ "defaultValue": null,
77
+ "extraTypeInfo": null,
78
+ "filterable": true,
79
+ "groupable": true,
80
+ "inlineHelpText": null,
81
+ "label": "Account Type",
82
+ "name": "Type",
83
+ "nillable": true,
84
+ "picklistValues": [
85
+ {
86
+ "active": true,
87
+ "defaultValue": false,
88
+ "label": "Prospect",
89
+ "validFor": null,
90
+ "value": "Prospect"
91
+ },
92
+ {
93
+ "active": true,
94
+ "defaultValue": false,
95
+ "label": "Customer - Direct",
96
+ "validFor": null,
97
+ "value": "Customer - Direct"
98
+ },
99
+ {
100
+ "active": true,
101
+ "defaultValue": false,
102
+ "label": "Customer - Channel",
103
+ "validFor": null,
104
+ "value": "Customer - Channel"
105
+ },
106
+ {
107
+ "active": true,
108
+ "defaultValue": false,
109
+ "label": "Channel Partner / Reseller",
110
+ "validFor": null,
111
+ "value": "Channel Partner / Reseller"
112
+ },
113
+ {
114
+ "active": true,
115
+ "defaultValue": false,
116
+ "label": "Installation Partner",
117
+ "validFor": null,
118
+ "value": "Installation Partner"
119
+ },
120
+ {
121
+ "active": true,
122
+ "defaultValue": false,
123
+ "label": "Technology Partner",
124
+ "validFor": null,
125
+ "value": "Technology Partner"
126
+ },
127
+ {
128
+ "active": true,
129
+ "defaultValue": false,
130
+ "label": "Other",
131
+ "validFor": null,
132
+ "value": "Other"
133
+ }
134
+ ],
135
+ "referenceTo": [],
136
+ "relationshipName": null,
137
+ "sortable": true,
138
+ "type": "picklist"
139
+ },
140
+ {
141
+ "aggregatable": true,
142
+ "custom": false,
143
+ "defaultValue": null,
144
+ "extraTypeInfo": null,
145
+ "filterable": true,
146
+ "groupable": true,
147
+ "inlineHelpText": null,
148
+ "label": "Parent Account ID",
149
+ "name": "ParentId",
150
+ "nillable": true,
151
+ "picklistValues": [],
152
+ "referenceTo": [
153
+ "Account"
154
+ ],
155
+ "relationshipName": "Parent",
156
+ "sortable": true,
157
+ "type": "reference"
158
+ },
159
+ {
160
+ "aggregatable": true,
161
+ "custom": false,
162
+ "defaultValue": null,
163
+ "extraTypeInfo": "plaintextarea",
164
+ "filterable": true,
165
+ "groupable": true,
166
+ "inlineHelpText": null,
167
+ "label": "Billing Street",
168
+ "name": "BillingStreet",
169
+ "nillable": true,
170
+ "picklistValues": [],
171
+ "referenceTo": [],
172
+ "relationshipName": null,
173
+ "sortable": true,
174
+ "type": "textarea"
175
+ },
176
+ {
177
+ "aggregatable": true,
178
+ "custom": false,
179
+ "defaultValue": null,
180
+ "extraTypeInfo": null,
181
+ "filterable": true,
182
+ "groupable": true,
183
+ "inlineHelpText": null,
184
+ "label": "Billing City",
185
+ "name": "BillingCity",
186
+ "nillable": true,
187
+ "picklistValues": [],
188
+ "referenceTo": [],
189
+ "relationshipName": null,
190
+ "sortable": true,
191
+ "type": "string"
192
+ },
193
+ {
194
+ "aggregatable": true,
195
+ "custom": false,
196
+ "defaultValue": null,
197
+ "extraTypeInfo": null,
198
+ "filterable": true,
199
+ "groupable": true,
200
+ "inlineHelpText": null,
201
+ "label": "Billing State/Province",
202
+ "name": "BillingState",
203
+ "nillable": true,
204
+ "picklistValues": [],
205
+ "referenceTo": [],
206
+ "relationshipName": null,
207
+ "sortable": true,
208
+ "type": "string"
209
+ },
210
+ {
211
+ "aggregatable": true,
212
+ "custom": false,
213
+ "defaultValue": null,
214
+ "extraTypeInfo": null,
215
+ "filterable": true,
216
+ "groupable": true,
217
+ "inlineHelpText": null,
218
+ "label": "Billing Zip/Postal Code",
219
+ "name": "BillingPostalCode",
220
+ "nillable": true,
221
+ "picklistValues": [],
222
+ "referenceTo": [],
223
+ "relationshipName": null,
224
+ "sortable": true,
225
+ "type": "string"
226
+ },
227
+ {
228
+ "aggregatable": true,
229
+ "custom": false,
230
+ "defaultValue": null,
231
+ "extraTypeInfo": null,
232
+ "filterable": true,
233
+ "groupable": true,
234
+ "inlineHelpText": null,
235
+ "label": "Billing Country",
236
+ "name": "BillingCountry",
237
+ "nillable": true,
238
+ "picklistValues": [],
239
+ "referenceTo": [],
240
+ "relationshipName": null,
241
+ "sortable": true,
242
+ "type": "string"
243
+ },
244
+ {
245
+ "aggregatable": true,
246
+ "custom": false,
247
+ "defaultValue": null,
248
+ "extraTypeInfo": null,
249
+ "filterable": true,
250
+ "groupable": false,
251
+ "inlineHelpText": null,
252
+ "label": "Billing Latitude",
253
+ "name": "BillingLatitude",
254
+ "nillable": true,
255
+ "picklistValues": [],
256
+ "referenceTo": [],
257
+ "relationshipName": null,
258
+ "sortable": true,
259
+ "type": "double"
260
+ },
261
+ {
262
+ "aggregatable": true,
263
+ "custom": false,
264
+ "defaultValue": null,
265
+ "extraTypeInfo": null,
266
+ "filterable": true,
267
+ "groupable": false,
268
+ "inlineHelpText": null,
269
+ "label": "Billing Longitude",
270
+ "name": "BillingLongitude",
271
+ "nillable": true,
272
+ "picklistValues": [],
273
+ "referenceTo": [],
274
+ "relationshipName": null,
275
+ "sortable": true,
276
+ "type": "double"
277
+ },
278
+ {
279
+ "aggregatable": true,
280
+ "custom": false,
281
+ "defaultValue": null,
282
+ "extraTypeInfo": null,
283
+ "filterable": true,
284
+ "groupable": true,
285
+ "inlineHelpText": null,
286
+ "label": "Billing Geocode Accuracy",
287
+ "name": "BillingGeocodeAccuracy",
288
+ "nillable": true,
289
+ "picklistValues": [
290
+ {
291
+ "active": true,
292
+ "defaultValue": false,
293
+ "label": "Address",
294
+ "validFor": null,
295
+ "value": "Address"
296
+ },
297
+ {
298
+ "active": true,
299
+ "defaultValue": false,
300
+ "label": "NearAddress",
301
+ "validFor": null,
302
+ "value": "NearAddress"
303
+ },
304
+ {
305
+ "active": true,
306
+ "defaultValue": false,
307
+ "label": "Block",
308
+ "validFor": null,
309
+ "value": "Block"
310
+ },
311
+ {
312
+ "active": true,
313
+ "defaultValue": false,
314
+ "label": "Street",
315
+ "validFor": null,
316
+ "value": "Street"
317
+ },
318
+ {
319
+ "active": true,
320
+ "defaultValue": false,
321
+ "label": "ExtendedZip",
322
+ "validFor": null,
323
+ "value": "ExtendedZip"
324
+ },
325
+ {
326
+ "active": true,
327
+ "defaultValue": false,
328
+ "label": "Zip",
329
+ "validFor": null,
330
+ "value": "Zip"
331
+ },
332
+ {
333
+ "active": true,
334
+ "defaultValue": false,
335
+ "label": "Neighborhood",
336
+ "validFor": null,
337
+ "value": "Neighborhood"
338
+ },
339
+ {
340
+ "active": true,
341
+ "defaultValue": false,
342
+ "label": "City",
343
+ "validFor": null,
344
+ "value": "City"
345
+ },
346
+ {
347
+ "active": true,
348
+ "defaultValue": false,
349
+ "label": "County",
350
+ "validFor": null,
351
+ "value": "County"
352
+ },
353
+ {
354
+ "active": true,
355
+ "defaultValue": false,
356
+ "label": "State",
357
+ "validFor": null,
358
+ "value": "State"
359
+ },
360
+ {
361
+ "active": true,
362
+ "defaultValue": false,
363
+ "label": "Unknown",
364
+ "validFor": null,
365
+ "value": "Unknown"
366
+ }
367
+ ],
368
+ "referenceTo": [],
369
+ "relationshipName": null,
370
+ "sortable": true,
371
+ "type": "picklist"
372
+ },
373
+ {
374
+ "aggregatable": false,
375
+ "custom": false,
376
+ "defaultValue": null,
377
+ "extraTypeInfo": null,
378
+ "filterable": true,
379
+ "groupable": false,
380
+ "inlineHelpText": null,
381
+ "label": "Billing Address",
382
+ "name": "BillingAddress",
383
+ "nillable": true,
384
+ "picklistValues": [],
385
+ "referenceTo": [],
386
+ "relationshipName": null,
387
+ "sortable": false,
388
+ "type": "address"
389
+ },
390
+ {
391
+ "aggregatable": true,
392
+ "custom": false,
393
+ "defaultValue": null,
394
+ "extraTypeInfo": "plaintextarea",
395
+ "filterable": true,
396
+ "groupable": true,
397
+ "inlineHelpText": null,
398
+ "label": "Shipping Street",
399
+ "name": "ShippingStreet",
400
+ "nillable": true,
401
+ "picklistValues": [],
402
+ "referenceTo": [],
403
+ "relationshipName": null,
404
+ "sortable": true,
405
+ "type": "textarea"
406
+ },
407
+ {
408
+ "aggregatable": true,
409
+ "custom": false,
410
+ "defaultValue": null,
411
+ "extraTypeInfo": null,
412
+ "filterable": true,
413
+ "groupable": true,
414
+ "inlineHelpText": null,
415
+ "label": "Shipping City",
416
+ "name": "ShippingCity",
417
+ "nillable": true,
418
+ "picklistValues": [],
419
+ "referenceTo": [],
420
+ "relationshipName": null,
421
+ "sortable": true,
422
+ "type": "string"
423
+ },
424
+ {
425
+ "aggregatable": true,
426
+ "custom": false,
427
+ "defaultValue": null,
428
+ "extraTypeInfo": null,
429
+ "filterable": true,
430
+ "groupable": true,
431
+ "inlineHelpText": null,
432
+ "label": "Shipping State/Province",
433
+ "name": "ShippingState",
434
+ "nillable": true,
435
+ "picklistValues": [],
436
+ "referenceTo": [],
437
+ "relationshipName": null,
438
+ "sortable": true,
439
+ "type": "string"
440
+ },
441
+ {
442
+ "aggregatable": true,
443
+ "custom": false,
444
+ "defaultValue": null,
445
+ "extraTypeInfo": null,
446
+ "filterable": true,
447
+ "groupable": true,
448
+ "inlineHelpText": null,
449
+ "label": "Shipping Zip/Postal Code",
450
+ "name": "ShippingPostalCode",
451
+ "nillable": true,
452
+ "picklistValues": [],
453
+ "referenceTo": [],
454
+ "relationshipName": null,
455
+ "sortable": true,
456
+ "type": "string"
457
+ },
458
+ {
459
+ "aggregatable": true,
460
+ "custom": false,
461
+ "defaultValue": null,
462
+ "extraTypeInfo": null,
463
+ "filterable": true,
464
+ "groupable": true,
465
+ "inlineHelpText": null,
466
+ "label": "Shipping Country",
467
+ "name": "ShippingCountry",
468
+ "nillable": true,
469
+ "picklistValues": [],
470
+ "referenceTo": [],
471
+ "relationshipName": null,
472
+ "sortable": true,
473
+ "type": "string"
474
+ },
475
+ {
476
+ "aggregatable": true,
477
+ "custom": false,
478
+ "defaultValue": null,
479
+ "extraTypeInfo": null,
480
+ "filterable": true,
481
+ "groupable": false,
482
+ "inlineHelpText": null,
483
+ "label": "Shipping Latitude",
484
+ "name": "ShippingLatitude",
485
+ "nillable": true,
486
+ "picklistValues": [],
487
+ "referenceTo": [],
488
+ "relationshipName": null,
489
+ "sortable": true,
490
+ "type": "double"
491
+ },
492
+ {
493
+ "aggregatable": true,
494
+ "custom": false,
495
+ "defaultValue": null,
496
+ "extraTypeInfo": null,
497
+ "filterable": true,
498
+ "groupable": false,
499
+ "inlineHelpText": null,
500
+ "label": "Shipping Longitude",
501
+ "name": "ShippingLongitude",
502
+ "nillable": true,
503
+ "picklistValues": [],
504
+ "referenceTo": [],
505
+ "relationshipName": null,
506
+ "sortable": true,
507
+ "type": "double"
508
+ },
509
+ {
510
+ "aggregatable": true,
511
+ "custom": false,
512
+ "defaultValue": null,
513
+ "extraTypeInfo": null,
514
+ "filterable": true,
515
+ "groupable": true,
516
+ "inlineHelpText": null,
517
+ "label": "Shipping Geocode Accuracy",
518
+ "name": "ShippingGeocodeAccuracy",
519
+ "nillable": true,
520
+ "picklistValues": [
521
+ {
522
+ "active": true,
523
+ "defaultValue": false,
524
+ "label": "Address",
525
+ "validFor": null,
526
+ "value": "Address"
527
+ },
528
+ {
529
+ "active": true,
530
+ "defaultValue": false,
531
+ "label": "NearAddress",
532
+ "validFor": null,
533
+ "value": "NearAddress"
534
+ },
535
+ {
536
+ "active": true,
537
+ "defaultValue": false,
538
+ "label": "Block",
539
+ "validFor": null,
540
+ "value": "Block"
541
+ },
542
+ {
543
+ "active": true,
544
+ "defaultValue": false,
545
+ "label": "Street",
546
+ "validFor": null,
547
+ "value": "Street"
548
+ },
549
+ {
550
+ "active": true,
551
+ "defaultValue": false,
552
+ "label": "ExtendedZip",
553
+ "validFor": null,
554
+ "value": "ExtendedZip"
555
+ },
556
+ {
557
+ "active": true,
558
+ "defaultValue": false,
559
+ "label": "Zip",
560
+ "validFor": null,
561
+ "value": "Zip"
562
+ },
563
+ {
564
+ "active": true,
565
+ "defaultValue": false,
566
+ "label": "Neighborhood",
567
+ "validFor": null,
568
+ "value": "Neighborhood"
569
+ },
570
+ {
571
+ "active": true,
572
+ "defaultValue": false,
573
+ "label": "City",
574
+ "validFor": null,
575
+ "value": "City"
576
+ },
577
+ {
578
+ "active": true,
579
+ "defaultValue": false,
580
+ "label": "County",
581
+ "validFor": null,
582
+ "value": "County"
583
+ },
584
+ {
585
+ "active": true,
586
+ "defaultValue": false,
587
+ "label": "State",
588
+ "validFor": null,
589
+ "value": "State"
590
+ },
591
+ {
592
+ "active": true,
593
+ "defaultValue": false,
594
+ "label": "Unknown",
595
+ "validFor": null,
596
+ "value": "Unknown"
597
+ }
598
+ ],
599
+ "referenceTo": [],
600
+ "relationshipName": null,
601
+ "sortable": true,
602
+ "type": "picklist"
603
+ },
604
+ {
605
+ "aggregatable": false,
606
+ "custom": false,
607
+ "defaultValue": null,
608
+ "extraTypeInfo": null,
609
+ "filterable": true,
610
+ "groupable": false,
611
+ "inlineHelpText": null,
612
+ "label": "Shipping Address",
613
+ "name": "ShippingAddress",
614
+ "nillable": true,
615
+ "picklistValues": [],
616
+ "referenceTo": [],
617
+ "relationshipName": null,
618
+ "sortable": false,
619
+ "type": "address"
620
+ },
621
+ {
622
+ "aggregatable": true,
623
+ "custom": false,
624
+ "defaultValue": null,
625
+ "extraTypeInfo": null,
626
+ "filterable": true,
627
+ "groupable": true,
628
+ "inlineHelpText": null,
629
+ "label": "Account Phone",
630
+ "name": "Phone",
631
+ "nillable": true,
632
+ "picklistValues": [],
633
+ "referenceTo": [],
634
+ "relationshipName": null,
635
+ "sortable": true,
636
+ "type": "phone"
637
+ },
638
+ {
639
+ "aggregatable": true,
640
+ "custom": false,
641
+ "defaultValue": null,
642
+ "extraTypeInfo": null,
643
+ "filterable": true,
644
+ "groupable": true,
645
+ "inlineHelpText": null,
646
+ "label": "Account Fax",
647
+ "name": "Fax",
648
+ "nillable": true,
649
+ "picklistValues": [],
650
+ "referenceTo": [],
651
+ "relationshipName": null,
652
+ "sortable": true,
653
+ "type": "phone"
654
+ },
655
+ {
656
+ "aggregatable": true,
657
+ "custom": false,
658
+ "defaultValue": null,
659
+ "extraTypeInfo": null,
660
+ "filterable": true,
661
+ "groupable": true,
662
+ "inlineHelpText": null,
663
+ "label": "Account Number",
664
+ "name": "AccountNumber",
665
+ "nillable": true,
666
+ "picklistValues": [],
667
+ "referenceTo": [],
668
+ "relationshipName": null,
669
+ "sortable": true,
670
+ "type": "string"
671
+ },
672
+ {
673
+ "aggregatable": true,
674
+ "custom": false,
675
+ "defaultValue": null,
676
+ "extraTypeInfo": null,
677
+ "filterable": true,
678
+ "groupable": true,
679
+ "inlineHelpText": null,
680
+ "label": "Website",
681
+ "name": "Website",
682
+ "nillable": true,
683
+ "picklistValues": [],
684
+ "referenceTo": [],
685
+ "relationshipName": null,
686
+ "sortable": true,
687
+ "type": "url"
688
+ },
689
+ {
690
+ "aggregatable": true,
691
+ "custom": false,
692
+ "defaultValue": null,
693
+ "extraTypeInfo": "imageurl",
694
+ "filterable": true,
695
+ "groupable": true,
696
+ "inlineHelpText": null,
697
+ "label": "Photo URL",
698
+ "name": "PhotoUrl",
699
+ "nillable": true,
700
+ "picklistValues": [],
701
+ "referenceTo": [],
702
+ "relationshipName": null,
703
+ "sortable": true,
704
+ "type": "url"
705
+ },
706
+ {
707
+ "aggregatable": true,
708
+ "custom": false,
709
+ "defaultValue": null,
710
+ "extraTypeInfo": null,
711
+ "filterable": true,
712
+ "groupable": true,
713
+ "inlineHelpText": null,
714
+ "label": "SIC Code",
715
+ "name": "Sic",
716
+ "nillable": true,
717
+ "picklistValues": [],
718
+ "referenceTo": [],
719
+ "relationshipName": null,
720
+ "sortable": true,
721
+ "type": "string"
722
+ },
723
+ {
724
+ "aggregatable": true,
725
+ "custom": false,
726
+ "defaultValue": null,
727
+ "extraTypeInfo": null,
728
+ "filterable": true,
729
+ "groupable": true,
730
+ "inlineHelpText": null,
731
+ "label": "Industry",
732
+ "name": "Industry",
733
+ "nillable": true,
734
+ "picklistValues": [
735
+ {
736
+ "active": true,
737
+ "defaultValue": false,
738
+ "label": "Agriculture",
739
+ "validFor": null,
740
+ "value": "Agriculture"
741
+ },
742
+ {
743
+ "active": true,
744
+ "defaultValue": false,
745
+ "label": "Apparel",
746
+ "validFor": null,
747
+ "value": "Apparel"
748
+ },
749
+ {
750
+ "active": true,
751
+ "defaultValue": false,
752
+ "label": "Banking",
753
+ "validFor": null,
754
+ "value": "Banking"
755
+ },
756
+ {
757
+ "active": true,
758
+ "defaultValue": false,
759
+ "label": "Biotechnology",
760
+ "validFor": null,
761
+ "value": "Biotechnology"
762
+ },
763
+ {
764
+ "active": true,
765
+ "defaultValue": false,
766
+ "label": "Chemicals",
767
+ "validFor": null,
768
+ "value": "Chemicals"
769
+ },
770
+ {
771
+ "active": true,
772
+ "defaultValue": false,
773
+ "label": "Communications",
774
+ "validFor": null,
775
+ "value": "Communications"
776
+ },
777
+ {
778
+ "active": true,
779
+ "defaultValue": false,
780
+ "label": "Construction",
781
+ "validFor": null,
782
+ "value": "Construction"
783
+ },
784
+ {
785
+ "active": true,
786
+ "defaultValue": false,
787
+ "label": "Consulting",
788
+ "validFor": null,
789
+ "value": "Consulting"
790
+ },
791
+ {
792
+ "active": true,
793
+ "defaultValue": false,
794
+ "label": "Education",
795
+ "validFor": null,
796
+ "value": "Education"
797
+ },
798
+ {
799
+ "active": true,
800
+ "defaultValue": false,
801
+ "label": "Electronics",
802
+ "validFor": null,
803
+ "value": "Electronics"
804
+ },
805
+ {
806
+ "active": true,
807
+ "defaultValue": false,
808
+ "label": "Energy",
809
+ "validFor": null,
810
+ "value": "Energy"
811
+ },
812
+ {
813
+ "active": true,
814
+ "defaultValue": false,
815
+ "label": "Engineering",
816
+ "validFor": null,
817
+ "value": "Engineering"
818
+ },
819
+ {
820
+ "active": true,
821
+ "defaultValue": false,
822
+ "label": "Entertainment",
823
+ "validFor": null,
824
+ "value": "Entertainment"
825
+ },
826
+ {
827
+ "active": true,
828
+ "defaultValue": false,
829
+ "label": "Environmental",
830
+ "validFor": null,
831
+ "value": "Environmental"
832
+ },
833
+ {
834
+ "active": true,
835
+ "defaultValue": false,
836
+ "label": "Finance",
837
+ "validFor": null,
838
+ "value": "Finance"
839
+ },
840
+ {
841
+ "active": true,
842
+ "defaultValue": false,
843
+ "label": "Food & Beverage",
844
+ "validFor": null,
845
+ "value": "Food & Beverage"
846
+ },
847
+ {
848
+ "active": true,
849
+ "defaultValue": false,
850
+ "label": "Government",
851
+ "validFor": null,
852
+ "value": "Government"
853
+ },
854
+ {
855
+ "active": true,
856
+ "defaultValue": false,
857
+ "label": "Healthcare",
858
+ "validFor": null,
859
+ "value": "Healthcare"
860
+ },
861
+ {
862
+ "active": true,
863
+ "defaultValue": false,
864
+ "label": "Hospitality",
865
+ "validFor": null,
866
+ "value": "Hospitality"
867
+ },
868
+ {
869
+ "active": true,
870
+ "defaultValue": false,
871
+ "label": "Insurance",
872
+ "validFor": null,
873
+ "value": "Insurance"
874
+ },
875
+ {
876
+ "active": true,
877
+ "defaultValue": false,
878
+ "label": "Machinery",
879
+ "validFor": null,
880
+ "value": "Machinery"
881
+ },
882
+ {
883
+ "active": true,
884
+ "defaultValue": false,
885
+ "label": "Manufacturing",
886
+ "validFor": null,
887
+ "value": "Manufacturing"
888
+ },
889
+ {
890
+ "active": true,
891
+ "defaultValue": false,
892
+ "label": "Media",
893
+ "validFor": null,
894
+ "value": "Media"
895
+ },
896
+ {
897
+ "active": true,
898
+ "defaultValue": false,
899
+ "label": "Not For Profit",
900
+ "validFor": null,
901
+ "value": "Not For Profit"
902
+ },
903
+ {
904
+ "active": true,
905
+ "defaultValue": false,
906
+ "label": "Recreation",
907
+ "validFor": null,
908
+ "value": "Recreation"
909
+ },
910
+ {
911
+ "active": true,
912
+ "defaultValue": false,
913
+ "label": "Retail",
914
+ "validFor": null,
915
+ "value": "Retail"
916
+ },
917
+ {
918
+ "active": true,
919
+ "defaultValue": false,
920
+ "label": "Shipping",
921
+ "validFor": null,
922
+ "value": "Shipping"
923
+ },
924
+ {
925
+ "active": true,
926
+ "defaultValue": false,
927
+ "label": "Technology",
928
+ "validFor": null,
929
+ "value": "Technology"
930
+ },
931
+ {
932
+ "active": true,
933
+ "defaultValue": false,
934
+ "label": "Telecommunications",
935
+ "validFor": null,
936
+ "value": "Telecommunications"
937
+ },
938
+ {
939
+ "active": true,
940
+ "defaultValue": false,
941
+ "label": "Transportation",
942
+ "validFor": null,
943
+ "value": "Transportation"
944
+ },
945
+ {
946
+ "active": true,
947
+ "defaultValue": false,
948
+ "label": "Utilities",
949
+ "validFor": null,
950
+ "value": "Utilities"
951
+ },
952
+ {
953
+ "active": true,
954
+ "defaultValue": false,
955
+ "label": "Other",
956
+ "validFor": null,
957
+ "value": "Other"
958
+ }
959
+ ],
960
+ "referenceTo": [],
961
+ "relationshipName": null,
962
+ "sortable": true,
963
+ "type": "picklist"
964
+ },
965
+ {
966
+ "aggregatable": true,
967
+ "custom": false,
968
+ "defaultValue": null,
969
+ "extraTypeInfo": null,
970
+ "filterable": true,
971
+ "groupable": false,
972
+ "inlineHelpText": null,
973
+ "label": "Annual Revenue",
974
+ "name": "AnnualRevenue",
975
+ "nillable": true,
976
+ "picklistValues": [],
977
+ "referenceTo": [],
978
+ "relationshipName": null,
979
+ "sortable": true,
980
+ "type": "currency"
981
+ },
982
+ {
983
+ "aggregatable": true,
984
+ "custom": false,
985
+ "defaultValue": null,
986
+ "extraTypeInfo": null,
987
+ "filterable": true,
988
+ "groupable": true,
989
+ "inlineHelpText": null,
990
+ "label": "Employees",
991
+ "name": "NumberOfEmployees",
992
+ "nillable": true,
993
+ "picklistValues": [],
994
+ "referenceTo": [],
995
+ "relationshipName": null,
996
+ "sortable": true,
997
+ "type": "int"
998
+ },
999
+ {
1000
+ "aggregatable": true,
1001
+ "custom": false,
1002
+ "defaultValue": null,
1003
+ "extraTypeInfo": null,
1004
+ "filterable": true,
1005
+ "groupable": true,
1006
+ "inlineHelpText": null,
1007
+ "label": "Ownership",
1008
+ "name": "Ownership",
1009
+ "nillable": true,
1010
+ "picklistValues": [
1011
+ {
1012
+ "active": true,
1013
+ "defaultValue": false,
1014
+ "label": "Public",
1015
+ "validFor": null,
1016
+ "value": "Public"
1017
+ },
1018
+ {
1019
+ "active": true,
1020
+ "defaultValue": false,
1021
+ "label": "Private",
1022
+ "validFor": null,
1023
+ "value": "Private"
1024
+ },
1025
+ {
1026
+ "active": true,
1027
+ "defaultValue": false,
1028
+ "label": "Subsidiary",
1029
+ "validFor": null,
1030
+ "value": "Subsidiary"
1031
+ },
1032
+ {
1033
+ "active": true,
1034
+ "defaultValue": false,
1035
+ "label": "Other",
1036
+ "validFor": null,
1037
+ "value": "Other"
1038
+ }
1039
+ ],
1040
+ "referenceTo": [],
1041
+ "relationshipName": null,
1042
+ "sortable": true,
1043
+ "type": "picklist"
1044
+ },
1045
+ {
1046
+ "aggregatable": true,
1047
+ "custom": false,
1048
+ "defaultValue": null,
1049
+ "extraTypeInfo": null,
1050
+ "filterable": true,
1051
+ "groupable": true,
1052
+ "inlineHelpText": null,
1053
+ "label": "Ticker Symbol",
1054
+ "name": "TickerSymbol",
1055
+ "nillable": true,
1056
+ "picklistValues": [],
1057
+ "referenceTo": [],
1058
+ "relationshipName": null,
1059
+ "sortable": true,
1060
+ "type": "string"
1061
+ },
1062
+ {
1063
+ "aggregatable": false,
1064
+ "custom": false,
1065
+ "defaultValue": null,
1066
+ "extraTypeInfo": "plaintextarea",
1067
+ "filterable": false,
1068
+ "groupable": false,
1069
+ "inlineHelpText": null,
1070
+ "label": "Account Description",
1071
+ "name": "Description",
1072
+ "nillable": true,
1073
+ "picklistValues": [],
1074
+ "referenceTo": [],
1075
+ "relationshipName": null,
1076
+ "sortable": false,
1077
+ "type": "textarea"
1078
+ },
1079
+ {
1080
+ "aggregatable": true,
1081
+ "custom": false,
1082
+ "defaultValue": null,
1083
+ "extraTypeInfo": null,
1084
+ "filterable": true,
1085
+ "groupable": true,
1086
+ "inlineHelpText": null,
1087
+ "label": "Account Rating",
1088
+ "name": "Rating",
1089
+ "nillable": true,
1090
+ "picklistValues": [
1091
+ {
1092
+ "active": true,
1093
+ "defaultValue": false,
1094
+ "label": "Hot",
1095
+ "validFor": null,
1096
+ "value": "Hot"
1097
+ },
1098
+ {
1099
+ "active": true,
1100
+ "defaultValue": false,
1101
+ "label": "Warm",
1102
+ "validFor": null,
1103
+ "value": "Warm"
1104
+ },
1105
+ {
1106
+ "active": true,
1107
+ "defaultValue": false,
1108
+ "label": "Cold",
1109
+ "validFor": null,
1110
+ "value": "Cold"
1111
+ }
1112
+ ],
1113
+ "referenceTo": [],
1114
+ "relationshipName": null,
1115
+ "sortable": true,
1116
+ "type": "picklist"
1117
+ },
1118
+ {
1119
+ "aggregatable": true,
1120
+ "custom": false,
1121
+ "defaultValue": null,
1122
+ "extraTypeInfo": null,
1123
+ "filterable": true,
1124
+ "groupable": true,
1125
+ "inlineHelpText": null,
1126
+ "label": "Account Site",
1127
+ "name": "Site",
1128
+ "nillable": true,
1129
+ "picklistValues": [],
1130
+ "referenceTo": [],
1131
+ "relationshipName": null,
1132
+ "sortable": true,
1133
+ "type": "string"
1134
+ },
1135
+ {
1136
+ "aggregatable": true,
1137
+ "custom": false,
1138
+ "defaultValue": null,
1139
+ "extraTypeInfo": null,
1140
+ "filterable": true,
1141
+ "groupable": true,
1142
+ "inlineHelpText": null,
1143
+ "label": "Owner ID",
1144
+ "name": "OwnerId",
1145
+ "nillable": false,
1146
+ "picklistValues": [],
1147
+ "referenceTo": [
1148
+ "User"
1149
+ ],
1150
+ "relationshipName": "Owner",
1151
+ "sortable": true,
1152
+ "type": "reference"
1153
+ },
1154
+ {
1155
+ "aggregatable": true,
1156
+ "custom": false,
1157
+ "defaultValue": null,
1158
+ "extraTypeInfo": null,
1159
+ "filterable": true,
1160
+ "groupable": false,
1161
+ "inlineHelpText": null,
1162
+ "label": "Created Date",
1163
+ "name": "CreatedDate",
1164
+ "nillable": false,
1165
+ "picklistValues": [],
1166
+ "referenceTo": [],
1167
+ "relationshipName": null,
1168
+ "sortable": true,
1169
+ "type": "datetime"
1170
+ },
1171
+ {
1172
+ "aggregatable": true,
1173
+ "custom": false,
1174
+ "defaultValue": null,
1175
+ "extraTypeInfo": null,
1176
+ "filterable": true,
1177
+ "groupable": true,
1178
+ "inlineHelpText": null,
1179
+ "label": "Created By ID",
1180
+ "name": "CreatedById",
1181
+ "nillable": false,
1182
+ "picklistValues": [],
1183
+ "referenceTo": [
1184
+ "User"
1185
+ ],
1186
+ "relationshipName": "CreatedBy",
1187
+ "sortable": true,
1188
+ "type": "reference"
1189
+ },
1190
+ {
1191
+ "aggregatable": true,
1192
+ "custom": false,
1193
+ "defaultValue": null,
1194
+ "extraTypeInfo": null,
1195
+ "filterable": true,
1196
+ "groupable": false,
1197
+ "inlineHelpText": null,
1198
+ "label": "Last Modified Date",
1199
+ "name": "LastModifiedDate",
1200
+ "nillable": false,
1201
+ "picklistValues": [],
1202
+ "referenceTo": [],
1203
+ "relationshipName": null,
1204
+ "sortable": true,
1205
+ "type": "datetime"
1206
+ },
1207
+ {
1208
+ "aggregatable": true,
1209
+ "custom": false,
1210
+ "defaultValue": null,
1211
+ "extraTypeInfo": null,
1212
+ "filterable": true,
1213
+ "groupable": true,
1214
+ "inlineHelpText": null,
1215
+ "label": "Last Modified By ID",
1216
+ "name": "LastModifiedById",
1217
+ "nillable": false,
1218
+ "picklistValues": [],
1219
+ "referenceTo": [
1220
+ "User"
1221
+ ],
1222
+ "relationshipName": "LastModifiedBy",
1223
+ "sortable": true,
1224
+ "type": "reference"
1225
+ },
1226
+ {
1227
+ "aggregatable": true,
1228
+ "custom": false,
1229
+ "defaultValue": null,
1230
+ "extraTypeInfo": null,
1231
+ "filterable": true,
1232
+ "groupable": false,
1233
+ "inlineHelpText": null,
1234
+ "label": "System Modstamp",
1235
+ "name": "SystemModstamp",
1236
+ "nillable": false,
1237
+ "picklistValues": [],
1238
+ "referenceTo": [],
1239
+ "relationshipName": null,
1240
+ "sortable": true,
1241
+ "type": "datetime"
1242
+ },
1243
+ {
1244
+ "aggregatable": true,
1245
+ "custom": false,
1246
+ "defaultValue": null,
1247
+ "extraTypeInfo": null,
1248
+ "filterable": true,
1249
+ "groupable": true,
1250
+ "inlineHelpText": null,
1251
+ "label": "Last Activity",
1252
+ "name": "LastActivityDate",
1253
+ "nillable": true,
1254
+ "picklistValues": [],
1255
+ "referenceTo": [],
1256
+ "relationshipName": null,
1257
+ "sortable": true,
1258
+ "type": "date"
1259
+ },
1260
+ {
1261
+ "aggregatable": true,
1262
+ "custom": false,
1263
+ "defaultValue": null,
1264
+ "extraTypeInfo": null,
1265
+ "filterable": true,
1266
+ "groupable": false,
1267
+ "inlineHelpText": null,
1268
+ "label": "Last Viewed Date",
1269
+ "name": "LastViewedDate",
1270
+ "nillable": true,
1271
+ "picklistValues": [],
1272
+ "referenceTo": [],
1273
+ "relationshipName": null,
1274
+ "sortable": true,
1275
+ "type": "datetime"
1276
+ },
1277
+ {
1278
+ "aggregatable": true,
1279
+ "custom": false,
1280
+ "defaultValue": null,
1281
+ "extraTypeInfo": null,
1282
+ "filterable": true,
1283
+ "groupable": false,
1284
+ "inlineHelpText": null,
1285
+ "label": "Last Referenced Date",
1286
+ "name": "LastReferencedDate",
1287
+ "nillable": true,
1288
+ "picklistValues": [],
1289
+ "referenceTo": [],
1290
+ "relationshipName": null,
1291
+ "sortable": true,
1292
+ "type": "datetime"
1293
+ },
1294
+ {
1295
+ "aggregatable": true,
1296
+ "custom": false,
1297
+ "defaultValue": null,
1298
+ "extraTypeInfo": null,
1299
+ "filterable": true,
1300
+ "groupable": true,
1301
+ "inlineHelpText": null,
1302
+ "label": "Data.com Key",
1303
+ "name": "Jigsaw",
1304
+ "nillable": true,
1305
+ "picklistValues": [],
1306
+ "referenceTo": [],
1307
+ "relationshipName": null,
1308
+ "sortable": true,
1309
+ "type": "string"
1310
+ },
1311
+ {
1312
+ "aggregatable": true,
1313
+ "custom": false,
1314
+ "defaultValue": null,
1315
+ "extraTypeInfo": null,
1316
+ "filterable": true,
1317
+ "groupable": true,
1318
+ "inlineHelpText": null,
1319
+ "label": "Jigsaw Company ID",
1320
+ "name": "JigsawCompanyId",
1321
+ "nillable": true,
1322
+ "picklistValues": [],
1323
+ "referenceTo": [],
1324
+ "relationshipName": "JigsawCompany",
1325
+ "sortable": true,
1326
+ "type": "string"
1327
+ },
1328
+ {
1329
+ "aggregatable": true,
1330
+ "custom": false,
1331
+ "defaultValue": null,
1332
+ "extraTypeInfo": null,
1333
+ "filterable": true,
1334
+ "groupable": true,
1335
+ "inlineHelpText": null,
1336
+ "label": "Clean Status",
1337
+ "name": "CleanStatus",
1338
+ "nillable": true,
1339
+ "picklistValues": [
1340
+ {
1341
+ "active": true,
1342
+ "defaultValue": false,
1343
+ "label": "In Sync",
1344
+ "validFor": null,
1345
+ "value": "Matched"
1346
+ },
1347
+ {
1348
+ "active": true,
1349
+ "defaultValue": false,
1350
+ "label": "Different",
1351
+ "validFor": null,
1352
+ "value": "Different"
1353
+ },
1354
+ {
1355
+ "active": true,
1356
+ "defaultValue": false,
1357
+ "label": "Reviewed",
1358
+ "validFor": null,
1359
+ "value": "Acknowledged"
1360
+ },
1361
+ {
1362
+ "active": true,
1363
+ "defaultValue": false,
1364
+ "label": "Not Found",
1365
+ "validFor": null,
1366
+ "value": "NotFound"
1367
+ },
1368
+ {
1369
+ "active": true,
1370
+ "defaultValue": false,
1371
+ "label": "Inactive",
1372
+ "validFor": null,
1373
+ "value": "Inactive"
1374
+ },
1375
+ {
1376
+ "active": true,
1377
+ "defaultValue": false,
1378
+ "label": "Not Compared",
1379
+ "validFor": null,
1380
+ "value": "Pending"
1381
+ },
1382
+ {
1383
+ "active": true,
1384
+ "defaultValue": false,
1385
+ "label": "Select Match",
1386
+ "validFor": null,
1387
+ "value": "SelectMatch"
1388
+ },
1389
+ {
1390
+ "active": true,
1391
+ "defaultValue": false,
1392
+ "label": "Skipped",
1393
+ "validFor": null,
1394
+ "value": "Skipped"
1395
+ }
1396
+ ],
1397
+ "referenceTo": [],
1398
+ "relationshipName": null,
1399
+ "sortable": true,
1400
+ "type": "picklist"
1401
+ },
1402
+ {
1403
+ "aggregatable": true,
1404
+ "custom": false,
1405
+ "defaultValue": null,
1406
+ "extraTypeInfo": null,
1407
+ "filterable": true,
1408
+ "groupable": true,
1409
+ "inlineHelpText": null,
1410
+ "label": "Account Source",
1411
+ "name": "AccountSource",
1412
+ "nillable": true,
1413
+ "picklistValues": [
1414
+ {
1415
+ "active": true,
1416
+ "defaultValue": false,
1417
+ "label": "Web",
1418
+ "validFor": null,
1419
+ "value": "Web"
1420
+ },
1421
+ {
1422
+ "active": true,
1423
+ "defaultValue": false,
1424
+ "label": "Phone Inquiry",
1425
+ "validFor": null,
1426
+ "value": "Phone Inquiry"
1427
+ },
1428
+ {
1429
+ "active": true,
1430
+ "defaultValue": false,
1431
+ "label": "Partner Referral",
1432
+ "validFor": null,
1433
+ "value": "Partner Referral"
1434
+ },
1435
+ {
1436
+ "active": true,
1437
+ "defaultValue": false,
1438
+ "label": "Purchased List",
1439
+ "validFor": null,
1440
+ "value": "Purchased List"
1441
+ },
1442
+ {
1443
+ "active": true,
1444
+ "defaultValue": false,
1445
+ "label": "Other",
1446
+ "validFor": null,
1447
+ "value": "Other"
1448
+ }
1449
+ ],
1450
+ "referenceTo": [],
1451
+ "relationshipName": null,
1452
+ "sortable": true,
1453
+ "type": "picklist"
1454
+ },
1455
+ {
1456
+ "aggregatable": true,
1457
+ "custom": false,
1458
+ "defaultValue": null,
1459
+ "extraTypeInfo": null,
1460
+ "filterable": true,
1461
+ "groupable": true,
1462
+ "inlineHelpText": null,
1463
+ "label": "D-U-N-S Number",
1464
+ "name": "DunsNumber",
1465
+ "nillable": true,
1466
+ "picklistValues": [],
1467
+ "referenceTo": [],
1468
+ "relationshipName": null,
1469
+ "sortable": true,
1470
+ "type": "string"
1471
+ },
1472
+ {
1473
+ "aggregatable": true,
1474
+ "custom": false,
1475
+ "defaultValue": null,
1476
+ "extraTypeInfo": null,
1477
+ "filterable": true,
1478
+ "groupable": true,
1479
+ "inlineHelpText": null,
1480
+ "label": "Tradestyle",
1481
+ "name": "Tradestyle",
1482
+ "nillable": true,
1483
+ "picklistValues": [],
1484
+ "referenceTo": [],
1485
+ "relationshipName": null,
1486
+ "sortable": true,
1487
+ "type": "string"
1488
+ },
1489
+ {
1490
+ "aggregatable": true,
1491
+ "custom": false,
1492
+ "defaultValue": null,
1493
+ "extraTypeInfo": null,
1494
+ "filterable": true,
1495
+ "groupable": true,
1496
+ "inlineHelpText": null,
1497
+ "label": "NAICS Code",
1498
+ "name": "NaicsCode",
1499
+ "nillable": true,
1500
+ "picklistValues": [],
1501
+ "referenceTo": [],
1502
+ "relationshipName": null,
1503
+ "sortable": true,
1504
+ "type": "string"
1505
+ },
1506
+ {
1507
+ "aggregatable": true,
1508
+ "custom": false,
1509
+ "defaultValue": null,
1510
+ "extraTypeInfo": null,
1511
+ "filterable": true,
1512
+ "groupable": true,
1513
+ "inlineHelpText": null,
1514
+ "label": "NAICS Description",
1515
+ "name": "NaicsDesc",
1516
+ "nillable": true,
1517
+ "picklistValues": [],
1518
+ "referenceTo": [],
1519
+ "relationshipName": null,
1520
+ "sortable": true,
1521
+ "type": "string"
1522
+ },
1523
+ {
1524
+ "aggregatable": true,
1525
+ "custom": false,
1526
+ "defaultValue": null,
1527
+ "extraTypeInfo": null,
1528
+ "filterable": true,
1529
+ "groupable": true,
1530
+ "inlineHelpText": null,
1531
+ "label": "Year Started",
1532
+ "name": "YearStarted",
1533
+ "nillable": true,
1534
+ "picklistValues": [],
1535
+ "referenceTo": [],
1536
+ "relationshipName": null,
1537
+ "sortable": true,
1538
+ "type": "string"
1539
+ },
1540
+ {
1541
+ "aggregatable": true,
1542
+ "custom": false,
1543
+ "defaultValue": null,
1544
+ "extraTypeInfo": null,
1545
+ "filterable": true,
1546
+ "groupable": true,
1547
+ "inlineHelpText": null,
1548
+ "label": "SIC Description",
1549
+ "name": "SicDesc",
1550
+ "nillable": true,
1551
+ "picklistValues": [],
1552
+ "referenceTo": [],
1553
+ "relationshipName": null,
1554
+ "sortable": true,
1555
+ "type": "string"
1556
+ },
1557
+ {
1558
+ "aggregatable": true,
1559
+ "custom": false,
1560
+ "defaultValue": null,
1561
+ "extraTypeInfo": null,
1562
+ "filterable": true,
1563
+ "groupable": true,
1564
+ "inlineHelpText": null,
1565
+ "label": "D&B Company ID",
1566
+ "name": "DandbCompanyId",
1567
+ "nillable": true,
1568
+ "picklistValues": [],
1569
+ "referenceTo": [
1570
+ "DandBCompany"
1571
+ ],
1572
+ "relationshipName": "DandbCompany",
1573
+ "sortable": true,
1574
+ "type": "reference"
1575
+ },
1576
+ {
1577
+ "aggregatable": true,
1578
+ "custom": false,
1579
+ "defaultValue": null,
1580
+ "extraTypeInfo": null,
1581
+ "filterable": true,
1582
+ "groupable": true,
1583
+ "inlineHelpText": null,
1584
+ "label": "Operating Hour ID",
1585
+ "name": "OperatingHoursId",
1586
+ "nillable": true,
1587
+ "picklistValues": [],
1588
+ "referenceTo": [
1589
+ "OperatingHours"
1590
+ ],
1591
+ "relationshipName": "OperatingHours",
1592
+ "sortable": true,
1593
+ "type": "reference"
1594
+ }
1595
+ ],
1596
+ "label": "Account",
1597
+ "childRelationships": [
1598
+ {
1599
+ "cascadeDelete": true,
1600
+ "childSObject": "AIInsightValue",
1601
+ "deprecatedAndHidden": false,
1602
+ "field": "SobjectLookupValueId",
1603
+ "junctionIdListNames": [],
1604
+ "junctionReferenceTo": [],
1605
+ "relationshipName": null,
1606
+ "restrictedDelete": false
1607
+ },
1608
+ {
1609
+ "cascadeDelete": true,
1610
+ "childSObject": "AIRecordInsight",
1611
+ "deprecatedAndHidden": false,
1612
+ "field": "TargetId",
1613
+ "junctionIdListNames": [],
1614
+ "junctionReferenceTo": [],
1615
+ "relationshipName": null,
1616
+ "restrictedDelete": false
1617
+ },
1618
+ {
1619
+ "cascadeDelete": false,
1620
+ "childSObject": "Account",
1621
+ "deprecatedAndHidden": false,
1622
+ "field": "ParentId",
1623
+ "junctionIdListNames": [],
1624
+ "junctionReferenceTo": [],
1625
+ "relationshipName": "ChildAccounts",
1626
+ "restrictedDelete": false
1627
+ },
1628
+ {
1629
+ "cascadeDelete": false,
1630
+ "childSObject": "AccountChangeEvent",
1631
+ "deprecatedAndHidden": false,
1632
+ "field": "ParentId",
1633
+ "junctionIdListNames": [],
1634
+ "junctionReferenceTo": [],
1635
+ "relationshipName": null,
1636
+ "restrictedDelete": false
1637
+ },
1638
+ {
1639
+ "cascadeDelete": true,
1640
+ "childSObject": "AccountCleanInfo",
1641
+ "deprecatedAndHidden": false,
1642
+ "field": "AccountId",
1643
+ "junctionIdListNames": [],
1644
+ "junctionReferenceTo": [],
1645
+ "relationshipName": "AccountCleanInfos",
1646
+ "restrictedDelete": false
1647
+ },
1648
+ {
1649
+ "cascadeDelete": true,
1650
+ "childSObject": "AccountContactRole",
1651
+ "deprecatedAndHidden": false,
1652
+ "field": "AccountId",
1653
+ "junctionIdListNames": [],
1654
+ "junctionReferenceTo": [],
1655
+ "relationshipName": "AccountContactRoles",
1656
+ "restrictedDelete": false
1657
+ },
1658
+ {
1659
+ "cascadeDelete": false,
1660
+ "childSObject": "AccountContactRoleChangeEvent",
1661
+ "deprecatedAndHidden": false,
1662
+ "field": "AccountId",
1663
+ "junctionIdListNames": [],
1664
+ "junctionReferenceTo": [],
1665
+ "relationshipName": null,
1666
+ "restrictedDelete": false
1667
+ },
1668
+ {
1669
+ "cascadeDelete": true,
1670
+ "childSObject": "AccountFeed",
1671
+ "deprecatedAndHidden": false,
1672
+ "field": "ParentId",
1673
+ "junctionIdListNames": [],
1674
+ "junctionReferenceTo": [],
1675
+ "relationshipName": "Feeds",
1676
+ "restrictedDelete": false
1677
+ },
1678
+ {
1679
+ "cascadeDelete": true,
1680
+ "childSObject": "AccountHistory",
1681
+ "deprecatedAndHidden": false,
1682
+ "field": "AccountId",
1683
+ "junctionIdListNames": [],
1684
+ "junctionReferenceTo": [],
1685
+ "relationshipName": "Histories",
1686
+ "restrictedDelete": false
1687
+ },
1688
+ {
1689
+ "cascadeDelete": true,
1690
+ "childSObject": "AccountPartner",
1691
+ "deprecatedAndHidden": false,
1692
+ "field": "AccountFromId",
1693
+ "junctionIdListNames": [],
1694
+ "junctionReferenceTo": [],
1695
+ "relationshipName": "AccountPartnersFrom",
1696
+ "restrictedDelete": false
1697
+ },
1698
+ {
1699
+ "cascadeDelete": true,
1700
+ "childSObject": "AccountPartner",
1701
+ "deprecatedAndHidden": false,
1702
+ "field": "AccountToId",
1703
+ "junctionIdListNames": [],
1704
+ "junctionReferenceTo": [],
1705
+ "relationshipName": "AccountPartnersTo",
1706
+ "restrictedDelete": false
1707
+ },
1708
+ {
1709
+ "cascadeDelete": true,
1710
+ "childSObject": "AccountShare",
1711
+ "deprecatedAndHidden": false,
1712
+ "field": "AccountId",
1713
+ "junctionIdListNames": [],
1714
+ "junctionReferenceTo": [],
1715
+ "relationshipName": "Shares",
1716
+ "restrictedDelete": false
1717
+ },
1718
+ {
1719
+ "cascadeDelete": true,
1720
+ "childSObject": "ActivityHistory",
1721
+ "deprecatedAndHidden": false,
1722
+ "field": "AccountId",
1723
+ "junctionIdListNames": [],
1724
+ "junctionReferenceTo": [],
1725
+ "relationshipName": "ActivityHistories",
1726
+ "restrictedDelete": false
1727
+ },
1728
+ {
1729
+ "cascadeDelete": false,
1730
+ "childSObject": "AlternativePaymentMethod",
1731
+ "deprecatedAndHidden": false,
1732
+ "field": "AccountId",
1733
+ "junctionIdListNames": [],
1734
+ "junctionReferenceTo": [],
1735
+ "relationshipName": "AlternativePaymentMethods",
1736
+ "restrictedDelete": false
1737
+ },
1738
+ {
1739
+ "cascadeDelete": true,
1740
+ "childSObject": "Asset",
1741
+ "deprecatedAndHidden": false,
1742
+ "field": "AccountId",
1743
+ "junctionIdListNames": [],
1744
+ "junctionReferenceTo": [],
1745
+ "relationshipName": "Assets",
1746
+ "restrictedDelete": false
1747
+ },
1748
+ {
1749
+ "cascadeDelete": false,
1750
+ "childSObject": "Asset",
1751
+ "deprecatedAndHidden": false,
1752
+ "field": "AssetProvidedById",
1753
+ "junctionIdListNames": [],
1754
+ "junctionReferenceTo": [],
1755
+ "relationshipName": "ProvidedAssets",
1756
+ "restrictedDelete": false
1757
+ },
1758
+ {
1759
+ "cascadeDelete": false,
1760
+ "childSObject": "Asset",
1761
+ "deprecatedAndHidden": false,
1762
+ "field": "AssetServicedById",
1763
+ "junctionIdListNames": [],
1764
+ "junctionReferenceTo": [],
1765
+ "relationshipName": "ServicedAssets",
1766
+ "restrictedDelete": false
1767
+ },
1768
+ {
1769
+ "cascadeDelete": false,
1770
+ "childSObject": "AssetChangeEvent",
1771
+ "deprecatedAndHidden": false,
1772
+ "field": "AccountId",
1773
+ "junctionIdListNames": [],
1774
+ "junctionReferenceTo": [],
1775
+ "relationshipName": null,
1776
+ "restrictedDelete": false
1777
+ },
1778
+ {
1779
+ "cascadeDelete": false,
1780
+ "childSObject": "AssetChangeEvent",
1781
+ "deprecatedAndHidden": false,
1782
+ "field": "AssetProvidedById",
1783
+ "junctionIdListNames": [],
1784
+ "junctionReferenceTo": [],
1785
+ "relationshipName": null,
1786
+ "restrictedDelete": false
1787
+ },
1788
+ {
1789
+ "cascadeDelete": false,
1790
+ "childSObject": "AssetChangeEvent",
1791
+ "deprecatedAndHidden": false,
1792
+ "field": "AssetServicedById",
1793
+ "junctionIdListNames": [],
1794
+ "junctionReferenceTo": [],
1795
+ "relationshipName": null,
1796
+ "restrictedDelete": false
1797
+ },
1798
+ {
1799
+ "cascadeDelete": true,
1800
+ "childSObject": "AssociatedLocation",
1801
+ "deprecatedAndHidden": false,
1802
+ "field": "ParentRecordId",
1803
+ "junctionIdListNames": [],
1804
+ "junctionReferenceTo": [],
1805
+ "relationshipName": "AssociatedLocations",
1806
+ "restrictedDelete": false
1807
+ },
1808
+ {
1809
+ "cascadeDelete": true,
1810
+ "childSObject": "AttachedContentDocument",
1811
+ "deprecatedAndHidden": false,
1812
+ "field": "LinkedEntityId",
1813
+ "junctionIdListNames": [],
1814
+ "junctionReferenceTo": [],
1815
+ "relationshipName": "AttachedContentDocuments",
1816
+ "restrictedDelete": false
1817
+ },
1818
+ {
1819
+ "cascadeDelete": true,
1820
+ "childSObject": "Attachment",
1821
+ "deprecatedAndHidden": false,
1822
+ "field": "ParentId",
1823
+ "junctionIdListNames": [],
1824
+ "junctionReferenceTo": [],
1825
+ "relationshipName": "Attachments",
1826
+ "restrictedDelete": false
1827
+ },
1828
+ {
1829
+ "cascadeDelete": false,
1830
+ "childSObject": "AuthorizationFormConsent",
1831
+ "deprecatedAndHidden": false,
1832
+ "field": "ConsentGiverId",
1833
+ "junctionIdListNames": [],
1834
+ "junctionReferenceTo": [],
1835
+ "relationshipName": "AuthorizationFormConsents",
1836
+ "restrictedDelete": true
1837
+ },
1838
+ {
1839
+ "cascadeDelete": false,
1840
+ "childSObject": "AuthorizationFormConsent",
1841
+ "deprecatedAndHidden": false,
1842
+ "field": "RelatedRecordId",
1843
+ "junctionIdListNames": [],
1844
+ "junctionReferenceTo": [],
1845
+ "relationshipName": "RelatedAuthorizationFormConsents",
1846
+ "restrictedDelete": false
1847
+ },
1848
+ {
1849
+ "cascadeDelete": false,
1850
+ "childSObject": "AuthorizationFormConsentChangeEvent",
1851
+ "deprecatedAndHidden": false,
1852
+ "field": "ConsentGiverId",
1853
+ "junctionIdListNames": [],
1854
+ "junctionReferenceTo": [],
1855
+ "relationshipName": null,
1856
+ "restrictedDelete": false
1857
+ },
1858
+ {
1859
+ "cascadeDelete": false,
1860
+ "childSObject": "AuthorizationFormConsentChangeEvent",
1861
+ "deprecatedAndHidden": false,
1862
+ "field": "RelatedRecordId",
1863
+ "junctionIdListNames": [],
1864
+ "junctionReferenceTo": [],
1865
+ "relationshipName": null,
1866
+ "restrictedDelete": false
1867
+ },
1868
+ {
1869
+ "cascadeDelete": false,
1870
+ "childSObject": "CampaignMember",
1871
+ "deprecatedAndHidden": false,
1872
+ "field": "LeadOrContactId",
1873
+ "junctionIdListNames": [],
1874
+ "junctionReferenceTo": [],
1875
+ "relationshipName": null,
1876
+ "restrictedDelete": false
1877
+ },
1878
+ {
1879
+ "cascadeDelete": false,
1880
+ "childSObject": "CardPaymentMethod",
1881
+ "deprecatedAndHidden": false,
1882
+ "field": "AccountId",
1883
+ "junctionIdListNames": [],
1884
+ "junctionReferenceTo": [],
1885
+ "relationshipName": "CardPaymentMethods",
1886
+ "restrictedDelete": false
1887
+ },
1888
+ {
1889
+ "cascadeDelete": false,
1890
+ "childSObject": "Case",
1891
+ "deprecatedAndHidden": false,
1892
+ "field": "AccountId",
1893
+ "junctionIdListNames": [],
1894
+ "junctionReferenceTo": [],
1895
+ "relationshipName": "Cases",
1896
+ "restrictedDelete": true
1897
+ },
1898
+ {
1899
+ "cascadeDelete": false,
1900
+ "childSObject": "CaseChangeEvent",
1901
+ "deprecatedAndHidden": false,
1902
+ "field": "AccountId",
1903
+ "junctionIdListNames": [],
1904
+ "junctionReferenceTo": [],
1905
+ "relationshipName": null,
1906
+ "restrictedDelete": false
1907
+ },
1908
+ {
1909
+ "cascadeDelete": true,
1910
+ "childSObject": "CollaborationGroupRecord",
1911
+ "deprecatedAndHidden": false,
1912
+ "field": "RecordId",
1913
+ "junctionIdListNames": [],
1914
+ "junctionReferenceTo": [],
1915
+ "relationshipName": "RecordAssociatedGroups",
1916
+ "restrictedDelete": false
1917
+ },
1918
+ {
1919
+ "cascadeDelete": true,
1920
+ "childSObject": "CombinedAttachment",
1921
+ "deprecatedAndHidden": false,
1922
+ "field": "ParentId",
1923
+ "junctionIdListNames": [],
1924
+ "junctionReferenceTo": [],
1925
+ "relationshipName": "CombinedAttachments",
1926
+ "restrictedDelete": false
1927
+ },
1928
+ {
1929
+ "cascadeDelete": false,
1930
+ "childSObject": "CommSubscriptionConsent",
1931
+ "deprecatedAndHidden": false,
1932
+ "field": "ConsentGiverId",
1933
+ "junctionIdListNames": [],
1934
+ "junctionReferenceTo": [],
1935
+ "relationshipName": "CommSubscriptionConsents",
1936
+ "restrictedDelete": true
1937
+ },
1938
+ {
1939
+ "cascadeDelete": false,
1940
+ "childSObject": "CommSubscriptionConsentChangeEvent",
1941
+ "deprecatedAndHidden": false,
1942
+ "field": "ConsentGiverId",
1943
+ "junctionIdListNames": [],
1944
+ "junctionReferenceTo": [],
1945
+ "relationshipName": null,
1946
+ "restrictedDelete": false
1947
+ },
1948
+ {
1949
+ "cascadeDelete": true,
1950
+ "childSObject": "Contact",
1951
+ "deprecatedAndHidden": false,
1952
+ "field": "AccountId",
1953
+ "junctionIdListNames": [],
1954
+ "junctionReferenceTo": [],
1955
+ "relationshipName": "Contacts",
1956
+ "restrictedDelete": false
1957
+ },
1958
+ {
1959
+ "cascadeDelete": false,
1960
+ "childSObject": "ContactChangeEvent",
1961
+ "deprecatedAndHidden": false,
1962
+ "field": "AccountId",
1963
+ "junctionIdListNames": [],
1964
+ "junctionReferenceTo": [],
1965
+ "relationshipName": null,
1966
+ "restrictedDelete": false
1967
+ },
1968
+ {
1969
+ "cascadeDelete": true,
1970
+ "childSObject": "ContactPointAddress",
1971
+ "deprecatedAndHidden": false,
1972
+ "field": "ParentId",
1973
+ "junctionIdListNames": [],
1974
+ "junctionReferenceTo": [],
1975
+ "relationshipName": "ContactPointAddresses",
1976
+ "restrictedDelete": false
1977
+ },
1978
+ {
1979
+ "cascadeDelete": false,
1980
+ "childSObject": "ContactPointAddressChangeEvent",
1981
+ "deprecatedAndHidden": false,
1982
+ "field": "ParentId",
1983
+ "junctionIdListNames": [],
1984
+ "junctionReferenceTo": [],
1985
+ "relationshipName": null,
1986
+ "restrictedDelete": false
1987
+ },
1988
+ {
1989
+ "cascadeDelete": true,
1990
+ "childSObject": "ContactPointEmail",
1991
+ "deprecatedAndHidden": false,
1992
+ "field": "ParentId",
1993
+ "junctionIdListNames": [],
1994
+ "junctionReferenceTo": [],
1995
+ "relationshipName": "ContactPointEmails",
1996
+ "restrictedDelete": false
1997
+ },
1998
+ {
1999
+ "cascadeDelete": false,
2000
+ "childSObject": "ContactPointEmailChangeEvent",
2001
+ "deprecatedAndHidden": false,
2002
+ "field": "ParentId",
2003
+ "junctionIdListNames": [],
2004
+ "junctionReferenceTo": [],
2005
+ "relationshipName": null,
2006
+ "restrictedDelete": false
2007
+ },
2008
+ {
2009
+ "cascadeDelete": true,
2010
+ "childSObject": "ContactPointPhone",
2011
+ "deprecatedAndHidden": false,
2012
+ "field": "ParentId",
2013
+ "junctionIdListNames": [],
2014
+ "junctionReferenceTo": [],
2015
+ "relationshipName": "ContactPointPhones",
2016
+ "restrictedDelete": false
2017
+ },
2018
+ {
2019
+ "cascadeDelete": false,
2020
+ "childSObject": "ContactPointPhoneChangeEvent",
2021
+ "deprecatedAndHidden": false,
2022
+ "field": "ParentId",
2023
+ "junctionIdListNames": [],
2024
+ "junctionReferenceTo": [],
2025
+ "relationshipName": null,
2026
+ "restrictedDelete": false
2027
+ },
2028
+ {
2029
+ "cascadeDelete": false,
2030
+ "childSObject": "ContactRequest",
2031
+ "deprecatedAndHidden": false,
2032
+ "field": "WhatId",
2033
+ "junctionIdListNames": [],
2034
+ "junctionReferenceTo": [],
2035
+ "relationshipName": "ContactRequests",
2036
+ "restrictedDelete": false
2037
+ },
2038
+ {
2039
+ "cascadeDelete": true,
2040
+ "childSObject": "ContentDistribution",
2041
+ "deprecatedAndHidden": false,
2042
+ "field": "RelatedRecordId",
2043
+ "junctionIdListNames": [],
2044
+ "junctionReferenceTo": [],
2045
+ "relationshipName": null,
2046
+ "restrictedDelete": false
2047
+ },
2048
+ {
2049
+ "cascadeDelete": true,
2050
+ "childSObject": "ContentDocumentLink",
2051
+ "deprecatedAndHidden": false,
2052
+ "field": "LinkedEntityId",
2053
+ "junctionIdListNames": [],
2054
+ "junctionReferenceTo": [],
2055
+ "relationshipName": "ContentDocumentLinks",
2056
+ "restrictedDelete": false
2057
+ },
2058
+ {
2059
+ "cascadeDelete": false,
2060
+ "childSObject": "ContentDocumentLinkChangeEvent",
2061
+ "deprecatedAndHidden": false,
2062
+ "field": "LinkedEntityId",
2063
+ "junctionIdListNames": [],
2064
+ "junctionReferenceTo": [],
2065
+ "relationshipName": null,
2066
+ "restrictedDelete": false
2067
+ },
2068
+ {
2069
+ "cascadeDelete": false,
2070
+ "childSObject": "ContentVersion",
2071
+ "deprecatedAndHidden": false,
2072
+ "field": "FirstPublishLocationId",
2073
+ "junctionIdListNames": [],
2074
+ "junctionReferenceTo": [],
2075
+ "relationshipName": null,
2076
+ "restrictedDelete": false
2077
+ },
2078
+ {
2079
+ "cascadeDelete": false,
2080
+ "childSObject": "ContentVersionChangeEvent",
2081
+ "deprecatedAndHidden": false,
2082
+ "field": "FirstPublishLocationId",
2083
+ "junctionIdListNames": [],
2084
+ "junctionReferenceTo": [],
2085
+ "relationshipName": null,
2086
+ "restrictedDelete": false
2087
+ },
2088
+ {
2089
+ "cascadeDelete": true,
2090
+ "childSObject": "Contract",
2091
+ "deprecatedAndHidden": false,
2092
+ "field": "AccountId",
2093
+ "junctionIdListNames": [],
2094
+ "junctionReferenceTo": [],
2095
+ "relationshipName": "Contracts",
2096
+ "restrictedDelete": true
2097
+ },
2098
+ {
2099
+ "cascadeDelete": false,
2100
+ "childSObject": "ContractChangeEvent",
2101
+ "deprecatedAndHidden": false,
2102
+ "field": "AccountId",
2103
+ "junctionIdListNames": [],
2104
+ "junctionReferenceTo": [],
2105
+ "relationshipName": null,
2106
+ "restrictedDelete": false
2107
+ },
2108
+ {
2109
+ "cascadeDelete": true,
2110
+ "childSObject": "CreditMemo",
2111
+ "deprecatedAndHidden": false,
2112
+ "field": "BillingAccountId",
2113
+ "junctionIdListNames": [],
2114
+ "junctionReferenceTo": [],
2115
+ "relationshipName": "CreditMemos",
2116
+ "restrictedDelete": false
2117
+ },
2118
+ {
2119
+ "cascadeDelete": false,
2120
+ "childSObject": "DigitalWallet",
2121
+ "deprecatedAndHidden": false,
2122
+ "field": "AccountId",
2123
+ "junctionIdListNames": [],
2124
+ "junctionReferenceTo": [],
2125
+ "relationshipName": "DigitalWallets",
2126
+ "restrictedDelete": false
2127
+ },
2128
+ {
2129
+ "cascadeDelete": true,
2130
+ "childSObject": "DuplicateRecordItem",
2131
+ "deprecatedAndHidden": false,
2132
+ "field": "RecordId",
2133
+ "junctionIdListNames": [],
2134
+ "junctionReferenceTo": [],
2135
+ "relationshipName": "DuplicateRecordItems",
2136
+ "restrictedDelete": false
2137
+ },
2138
+ {
2139
+ "cascadeDelete": false,
2140
+ "childSObject": "EmailMessage",
2141
+ "deprecatedAndHidden": false,
2142
+ "field": "RelatedToId",
2143
+ "junctionIdListNames": [],
2144
+ "junctionReferenceTo": [],
2145
+ "relationshipName": "Emails",
2146
+ "restrictedDelete": false
2147
+ },
2148
+ {
2149
+ "cascadeDelete": false,
2150
+ "childSObject": "EmailMessageChangeEvent",
2151
+ "deprecatedAndHidden": false,
2152
+ "field": "RelatedToId",
2153
+ "junctionIdListNames": [],
2154
+ "junctionReferenceTo": [],
2155
+ "relationshipName": null,
2156
+ "restrictedDelete": false
2157
+ },
2158
+ {
2159
+ "cascadeDelete": true,
2160
+ "childSObject": "Entitlement",
2161
+ "deprecatedAndHidden": false,
2162
+ "field": "AccountId",
2163
+ "junctionIdListNames": [],
2164
+ "junctionReferenceTo": [],
2165
+ "relationshipName": "Entitlements",
2166
+ "restrictedDelete": true
2167
+ },
2168
+ {
2169
+ "cascadeDelete": false,
2170
+ "childSObject": "EntitlementChangeEvent",
2171
+ "deprecatedAndHidden": false,
2172
+ "field": "AccountId",
2173
+ "junctionIdListNames": [],
2174
+ "junctionReferenceTo": [],
2175
+ "relationshipName": null,
2176
+ "restrictedDelete": false
2177
+ },
2178
+ {
2179
+ "cascadeDelete": true,
2180
+ "childSObject": "EntitySubscription",
2181
+ "deprecatedAndHidden": false,
2182
+ "field": "ParentId",
2183
+ "junctionIdListNames": [],
2184
+ "junctionReferenceTo": [],
2185
+ "relationshipName": "FeedSubscriptionsForEntity",
2186
+ "restrictedDelete": false
2187
+ },
2188
+ {
2189
+ "cascadeDelete": false,
2190
+ "childSObject": "Event",
2191
+ "deprecatedAndHidden": false,
2192
+ "field": "AccountId",
2193
+ "junctionIdListNames": [],
2194
+ "junctionReferenceTo": [],
2195
+ "relationshipName": null,
2196
+ "restrictedDelete": false
2197
+ },
2198
+ {
2199
+ "cascadeDelete": true,
2200
+ "childSObject": "Event",
2201
+ "deprecatedAndHidden": false,
2202
+ "field": "WhatId",
2203
+ "junctionIdListNames": [],
2204
+ "junctionReferenceTo": [],
2205
+ "relationshipName": "Events",
2206
+ "restrictedDelete": false
2207
+ },
2208
+ {
2209
+ "cascadeDelete": false,
2210
+ "childSObject": "EventChangeEvent",
2211
+ "deprecatedAndHidden": false,
2212
+ "field": "AccountId",
2213
+ "junctionIdListNames": [],
2214
+ "junctionReferenceTo": [],
2215
+ "relationshipName": null,
2216
+ "restrictedDelete": false
2217
+ },
2218
+ {
2219
+ "cascadeDelete": false,
2220
+ "childSObject": "EventChangeEvent",
2221
+ "deprecatedAndHidden": false,
2222
+ "field": "WhatId",
2223
+ "junctionIdListNames": [],
2224
+ "junctionReferenceTo": [],
2225
+ "relationshipName": null,
2226
+ "restrictedDelete": false
2227
+ },
2228
+ {
2229
+ "cascadeDelete": false,
2230
+ "childSObject": "EventRelationChangeEvent",
2231
+ "deprecatedAndHidden": false,
2232
+ "field": "RelationId",
2233
+ "junctionIdListNames": [],
2234
+ "junctionReferenceTo": [],
2235
+ "relationshipName": null,
2236
+ "restrictedDelete": false
2237
+ },
2238
+ {
2239
+ "cascadeDelete": false,
2240
+ "childSObject": "Expense",
2241
+ "deprecatedAndHidden": false,
2242
+ "field": "AccountId",
2243
+ "junctionIdListNames": [],
2244
+ "junctionReferenceTo": [],
2245
+ "relationshipName": "Expenses",
2246
+ "restrictedDelete": false
2247
+ },
2248
+ {
2249
+ "cascadeDelete": false,
2250
+ "childSObject": "ExpenseChangeEvent",
2251
+ "deprecatedAndHidden": false,
2252
+ "field": "AccountId",
2253
+ "junctionIdListNames": [],
2254
+ "junctionReferenceTo": [],
2255
+ "relationshipName": null,
2256
+ "restrictedDelete": false
2257
+ },
2258
+ {
2259
+ "cascadeDelete": false,
2260
+ "childSObject": "FeedComment",
2261
+ "deprecatedAndHidden": false,
2262
+ "field": "ParentId",
2263
+ "junctionIdListNames": [],
2264
+ "junctionReferenceTo": [],
2265
+ "relationshipName": null,
2266
+ "restrictedDelete": false
2267
+ },
2268
+ {
2269
+ "cascadeDelete": true,
2270
+ "childSObject": "FeedItem",
2271
+ "deprecatedAndHidden": false,
2272
+ "field": "ParentId",
2273
+ "junctionIdListNames": [],
2274
+ "junctionReferenceTo": [],
2275
+ "relationshipName": null,
2276
+ "restrictedDelete": false
2277
+ },
2278
+ {
2279
+ "cascadeDelete": false,
2280
+ "childSObject": "FinanceBalanceSnapshot",
2281
+ "deprecatedAndHidden": false,
2282
+ "field": "AccountId",
2283
+ "junctionIdListNames": [],
2284
+ "junctionReferenceTo": [],
2285
+ "relationshipName": "FinanceBalanceSnapshots",
2286
+ "restrictedDelete": false
2287
+ },
2288
+ {
2289
+ "cascadeDelete": false,
2290
+ "childSObject": "FinanceBalanceSnapshotChangeEvent",
2291
+ "deprecatedAndHidden": false,
2292
+ "field": "AccountId",
2293
+ "junctionIdListNames": [],
2294
+ "junctionReferenceTo": [],
2295
+ "relationshipName": null,
2296
+ "restrictedDelete": false
2297
+ },
2298
+ {
2299
+ "cascadeDelete": false,
2300
+ "childSObject": "FinanceTransaction",
2301
+ "deprecatedAndHidden": false,
2302
+ "field": "AccountId",
2303
+ "junctionIdListNames": [],
2304
+ "junctionReferenceTo": [],
2305
+ "relationshipName": "FinanceTransactions",
2306
+ "restrictedDelete": false
2307
+ },
2308
+ {
2309
+ "cascadeDelete": false,
2310
+ "childSObject": "FinanceTransactionChangeEvent",
2311
+ "deprecatedAndHidden": false,
2312
+ "field": "AccountId",
2313
+ "junctionIdListNames": [],
2314
+ "junctionReferenceTo": [],
2315
+ "relationshipName": null,
2316
+ "restrictedDelete": false
2317
+ },
2318
+ {
2319
+ "cascadeDelete": false,
2320
+ "childSObject": "FlowExecutionErrorEvent",
2321
+ "deprecatedAndHidden": false,
2322
+ "field": "ContextRecordId",
2323
+ "junctionIdListNames": [],
2324
+ "junctionReferenceTo": [],
2325
+ "relationshipName": null,
2326
+ "restrictedDelete": false
2327
+ },
2328
+ {
2329
+ "cascadeDelete": false,
2330
+ "childSObject": "FlowOrchestrationWorkItem",
2331
+ "deprecatedAndHidden": false,
2332
+ "field": "RelatedRecordId",
2333
+ "junctionIdListNames": [],
2334
+ "junctionReferenceTo": [],
2335
+ "relationshipName": null,
2336
+ "restrictedDelete": false
2337
+ },
2338
+ {
2339
+ "cascadeDelete": false,
2340
+ "childSObject": "FlowRecordRelation",
2341
+ "deprecatedAndHidden": false,
2342
+ "field": "RelatedRecordId",
2343
+ "junctionIdListNames": [],
2344
+ "junctionReferenceTo": [],
2345
+ "relationshipName": null,
2346
+ "restrictedDelete": false
2347
+ },
2348
+ {
2349
+ "cascadeDelete": true,
2350
+ "childSObject": "Invoice",
2351
+ "deprecatedAndHidden": false,
2352
+ "field": "BillingAccountId",
2353
+ "junctionIdListNames": [],
2354
+ "junctionReferenceTo": [],
2355
+ "relationshipName": "Invoices",
2356
+ "restrictedDelete": false
2357
+ },
2358
+ {
2359
+ "cascadeDelete": false,
2360
+ "childSObject": "Lead",
2361
+ "deprecatedAndHidden": false,
2362
+ "field": "ConvertedAccountId",
2363
+ "junctionIdListNames": [],
2364
+ "junctionReferenceTo": [],
2365
+ "relationshipName": null,
2366
+ "restrictedDelete": false
2367
+ },
2368
+ {
2369
+ "cascadeDelete": false,
2370
+ "childSObject": "LeadChangeEvent",
2371
+ "deprecatedAndHidden": false,
2372
+ "field": "ConvertedAccountId",
2373
+ "junctionIdListNames": [],
2374
+ "junctionReferenceTo": [],
2375
+ "relationshipName": null,
2376
+ "restrictedDelete": false
2377
+ },
2378
+ {
2379
+ "cascadeDelete": false,
2380
+ "childSObject": "MaintenancePlan",
2381
+ "deprecatedAndHidden": false,
2382
+ "field": "AccountId",
2383
+ "junctionIdListNames": [],
2384
+ "junctionReferenceTo": [],
2385
+ "relationshipName": "MaintenancePlans",
2386
+ "restrictedDelete": false
2387
+ },
2388
+ {
2389
+ "cascadeDelete": false,
2390
+ "childSObject": "MaintenancePlanChangeEvent",
2391
+ "deprecatedAndHidden": false,
2392
+ "field": "AccountId",
2393
+ "junctionIdListNames": [],
2394
+ "junctionReferenceTo": [],
2395
+ "relationshipName": null,
2396
+ "restrictedDelete": false
2397
+ },
2398
+ {
2399
+ "cascadeDelete": false,
2400
+ "childSObject": "MessagingEndUser",
2401
+ "deprecatedAndHidden": false,
2402
+ "field": "AccountId",
2403
+ "junctionIdListNames": [],
2404
+ "junctionReferenceTo": [],
2405
+ "relationshipName": "MessagingEndUsers",
2406
+ "restrictedDelete": false
2407
+ },
2408
+ {
2409
+ "cascadeDelete": false,
2410
+ "childSObject": "MessagingSession",
2411
+ "deprecatedAndHidden": false,
2412
+ "field": "EndUserAccountId",
2413
+ "junctionIdListNames": [],
2414
+ "junctionReferenceTo": [],
2415
+ "relationshipName": "MessagingSessions",
2416
+ "restrictedDelete": false
2417
+ },
2418
+ {
2419
+ "cascadeDelete": true,
2420
+ "childSObject": "Note",
2421
+ "deprecatedAndHidden": false,
2422
+ "field": "ParentId",
2423
+ "junctionIdListNames": [],
2424
+ "junctionReferenceTo": [],
2425
+ "relationshipName": "Notes",
2426
+ "restrictedDelete": false
2427
+ },
2428
+ {
2429
+ "cascadeDelete": true,
2430
+ "childSObject": "NoteAndAttachment",
2431
+ "deprecatedAndHidden": false,
2432
+ "field": "ParentId",
2433
+ "junctionIdListNames": [],
2434
+ "junctionReferenceTo": [],
2435
+ "relationshipName": "NotesAndAttachments",
2436
+ "restrictedDelete": false
2437
+ },
2438
+ {
2439
+ "cascadeDelete": true,
2440
+ "childSObject": "OpenActivity",
2441
+ "deprecatedAndHidden": false,
2442
+ "field": "AccountId",
2443
+ "junctionIdListNames": [],
2444
+ "junctionReferenceTo": [],
2445
+ "relationshipName": "OpenActivities",
2446
+ "restrictedDelete": false
2447
+ },
2448
+ {
2449
+ "cascadeDelete": true,
2450
+ "childSObject": "Opportunity",
2451
+ "deprecatedAndHidden": false,
2452
+ "field": "AccountId",
2453
+ "junctionIdListNames": [],
2454
+ "junctionReferenceTo": [],
2455
+ "relationshipName": "Opportunities",
2456
+ "restrictedDelete": false
2457
+ },
2458
+ {
2459
+ "cascadeDelete": false,
2460
+ "childSObject": "OpportunityChangeEvent",
2461
+ "deprecatedAndHidden": false,
2462
+ "field": "AccountId",
2463
+ "junctionIdListNames": [],
2464
+ "junctionReferenceTo": [],
2465
+ "relationshipName": null,
2466
+ "restrictedDelete": false
2467
+ },
2468
+ {
2469
+ "cascadeDelete": true,
2470
+ "childSObject": "OpportunityPartner",
2471
+ "deprecatedAndHidden": false,
2472
+ "field": "AccountToId",
2473
+ "junctionIdListNames": [],
2474
+ "junctionReferenceTo": [],
2475
+ "relationshipName": "OpportunityPartnersTo",
2476
+ "restrictedDelete": false
2477
+ },
2478
+ {
2479
+ "cascadeDelete": true,
2480
+ "childSObject": "Order",
2481
+ "deprecatedAndHidden": false,
2482
+ "field": "AccountId",
2483
+ "junctionIdListNames": [],
2484
+ "junctionReferenceTo": [],
2485
+ "relationshipName": "Orders",
2486
+ "restrictedDelete": true
2487
+ },
2488
+ {
2489
+ "cascadeDelete": false,
2490
+ "childSObject": "OrderChangeEvent",
2491
+ "deprecatedAndHidden": false,
2492
+ "field": "AccountId",
2493
+ "junctionIdListNames": [],
2494
+ "junctionReferenceTo": [],
2495
+ "relationshipName": null,
2496
+ "restrictedDelete": false
2497
+ },
2498
+ {
2499
+ "cascadeDelete": false,
2500
+ "childSObject": "OutgoingEmail",
2501
+ "deprecatedAndHidden": false,
2502
+ "field": "RelatedToId",
2503
+ "junctionIdListNames": [],
2504
+ "junctionReferenceTo": [],
2505
+ "relationshipName": null,
2506
+ "restrictedDelete": false
2507
+ },
2508
+ {
2509
+ "cascadeDelete": true,
2510
+ "childSObject": "Partner",
2511
+ "deprecatedAndHidden": false,
2512
+ "field": "AccountFromId",
2513
+ "junctionIdListNames": [],
2514
+ "junctionReferenceTo": [],
2515
+ "relationshipName": "PartnersFrom",
2516
+ "restrictedDelete": false
2517
+ },
2518
+ {
2519
+ "cascadeDelete": true,
2520
+ "childSObject": "Partner",
2521
+ "deprecatedAndHidden": false,
2522
+ "field": "AccountToId",
2523
+ "junctionIdListNames": [],
2524
+ "junctionReferenceTo": [],
2525
+ "relationshipName": "PartnersTo",
2526
+ "restrictedDelete": false
2527
+ },
2528
+ {
2529
+ "cascadeDelete": false,
2530
+ "childSObject": "Payment",
2531
+ "deprecatedAndHidden": false,
2532
+ "field": "AccountId",
2533
+ "junctionIdListNames": [],
2534
+ "junctionReferenceTo": [],
2535
+ "relationshipName": "Payments",
2536
+ "restrictedDelete": false
2537
+ },
2538
+ {
2539
+ "cascadeDelete": false,
2540
+ "childSObject": "PaymentAuthAdjustment",
2541
+ "deprecatedAndHidden": false,
2542
+ "field": "AccountId",
2543
+ "junctionIdListNames": [],
2544
+ "junctionReferenceTo": [],
2545
+ "relationshipName": "PaymentAuthAdjustments",
2546
+ "restrictedDelete": false
2547
+ },
2548
+ {
2549
+ "cascadeDelete": false,
2550
+ "childSObject": "PaymentAuthorization",
2551
+ "deprecatedAndHidden": false,
2552
+ "field": "AccountId",
2553
+ "junctionIdListNames": [],
2554
+ "junctionReferenceTo": [],
2555
+ "relationshipName": "PaymentAuthorizations",
2556
+ "restrictedDelete": false
2557
+ },
2558
+ {
2559
+ "cascadeDelete": false,
2560
+ "childSObject": "PaymentLineInvoice",
2561
+ "deprecatedAndHidden": false,
2562
+ "field": "AssociatedAccountId",
2563
+ "junctionIdListNames": [],
2564
+ "junctionReferenceTo": [],
2565
+ "relationshipName": "PaymentLinesInvoice",
2566
+ "restrictedDelete": false
2567
+ },
2568
+ {
2569
+ "cascadeDelete": false,
2570
+ "childSObject": "PaymentMethod",
2571
+ "deprecatedAndHidden": false,
2572
+ "field": "AccountId",
2573
+ "junctionIdListNames": [],
2574
+ "junctionReferenceTo": [],
2575
+ "relationshipName": null,
2576
+ "restrictedDelete": false
2577
+ },
2578
+ {
2579
+ "cascadeDelete": true,
2580
+ "childSObject": "ProcessInstance",
2581
+ "deprecatedAndHidden": false,
2582
+ "field": "TargetObjectId",
2583
+ "junctionIdListNames": [],
2584
+ "junctionReferenceTo": [],
2585
+ "relationshipName": "ProcessInstances",
2586
+ "restrictedDelete": false
2587
+ },
2588
+ {
2589
+ "cascadeDelete": false,
2590
+ "childSObject": "ProcessInstanceHistory",
2591
+ "deprecatedAndHidden": false,
2592
+ "field": "TargetObjectId",
2593
+ "junctionIdListNames": [],
2594
+ "junctionReferenceTo": [],
2595
+ "relationshipName": "ProcessSteps",
2596
+ "restrictedDelete": false
2597
+ },
2598
+ {
2599
+ "cascadeDelete": false,
2600
+ "childSObject": "ProductRequest",
2601
+ "deprecatedAndHidden": false,
2602
+ "field": "AccountId",
2603
+ "junctionIdListNames": [],
2604
+ "junctionReferenceTo": [],
2605
+ "relationshipName": "ProductRequests",
2606
+ "restrictedDelete": false
2607
+ },
2608
+ {
2609
+ "cascadeDelete": false,
2610
+ "childSObject": "ProductRequestChangeEvent",
2611
+ "deprecatedAndHidden": false,
2612
+ "field": "AccountId",
2613
+ "junctionIdListNames": [],
2614
+ "junctionReferenceTo": [],
2615
+ "relationshipName": null,
2616
+ "restrictedDelete": false
2617
+ },
2618
+ {
2619
+ "cascadeDelete": false,
2620
+ "childSObject": "ProductRequestLineItem",
2621
+ "deprecatedAndHidden": false,
2622
+ "field": "AccountId",
2623
+ "junctionIdListNames": [],
2624
+ "junctionReferenceTo": [],
2625
+ "relationshipName": "ProductRequestLineItems",
2626
+ "restrictedDelete": false
2627
+ },
2628
+ {
2629
+ "cascadeDelete": false,
2630
+ "childSObject": "ProductRequestLineItemChangeEvent",
2631
+ "deprecatedAndHidden": false,
2632
+ "field": "AccountId",
2633
+ "junctionIdListNames": [],
2634
+ "junctionReferenceTo": [],
2635
+ "relationshipName": null,
2636
+ "restrictedDelete": false
2637
+ },
2638
+ {
2639
+ "cascadeDelete": true,
2640
+ "childSObject": "RecordAction",
2641
+ "deprecatedAndHidden": false,
2642
+ "field": "RecordId",
2643
+ "junctionIdListNames": [],
2644
+ "junctionReferenceTo": [],
2645
+ "relationshipName": "RecordActions",
2646
+ "restrictedDelete": false
2647
+ },
2648
+ {
2649
+ "cascadeDelete": false,
2650
+ "childSObject": "RecordActionHistory",
2651
+ "deprecatedAndHidden": false,
2652
+ "field": "ParentRecordId",
2653
+ "junctionIdListNames": [],
2654
+ "junctionReferenceTo": [],
2655
+ "relationshipName": "RecordActionHistories",
2656
+ "restrictedDelete": false
2657
+ },
2658
+ {
2659
+ "cascadeDelete": false,
2660
+ "childSObject": "Refund",
2661
+ "deprecatedAndHidden": false,
2662
+ "field": "AccountId",
2663
+ "junctionIdListNames": [],
2664
+ "junctionReferenceTo": [],
2665
+ "relationshipName": "Refunds",
2666
+ "restrictedDelete": false
2667
+ },
2668
+ {
2669
+ "cascadeDelete": false,
2670
+ "childSObject": "RefundLinePayment",
2671
+ "deprecatedAndHidden": false,
2672
+ "field": "AssociatedAccountId",
2673
+ "junctionIdListNames": [],
2674
+ "junctionReferenceTo": [],
2675
+ "relationshipName": "RefundLinePayments",
2676
+ "restrictedDelete": false
2677
+ },
2678
+ {
2679
+ "cascadeDelete": true,
2680
+ "childSObject": "ResourcePreference",
2681
+ "deprecatedAndHidden": false,
2682
+ "field": "RelatedRecordId",
2683
+ "junctionIdListNames": [],
2684
+ "junctionReferenceTo": [],
2685
+ "relationshipName": "ResourcePreferences",
2686
+ "restrictedDelete": false
2687
+ },
2688
+ {
2689
+ "cascadeDelete": false,
2690
+ "childSObject": "ResourcePreferenceChangeEvent",
2691
+ "deprecatedAndHidden": false,
2692
+ "field": "RelatedRecordId",
2693
+ "junctionIdListNames": [],
2694
+ "junctionReferenceTo": [],
2695
+ "relationshipName": null,
2696
+ "restrictedDelete": false
2697
+ },
2698
+ {
2699
+ "cascadeDelete": false,
2700
+ "childSObject": "ReturnOrder",
2701
+ "deprecatedAndHidden": false,
2702
+ "field": "AccountId",
2703
+ "junctionIdListNames": [],
2704
+ "junctionReferenceTo": [],
2705
+ "relationshipName": "ReturnOrders",
2706
+ "restrictedDelete": false
2707
+ },
2708
+ {
2709
+ "cascadeDelete": false,
2710
+ "childSObject": "ReturnOrderChangeEvent",
2711
+ "deprecatedAndHidden": false,
2712
+ "field": "AccountId",
2713
+ "junctionIdListNames": [],
2714
+ "junctionReferenceTo": [],
2715
+ "relationshipName": null,
2716
+ "restrictedDelete": false
2717
+ },
2718
+ {
2719
+ "cascadeDelete": true,
2720
+ "childSObject": "ScorecardAssociation",
2721
+ "deprecatedAndHidden": false,
2722
+ "field": "TargetEntityId",
2723
+ "junctionIdListNames": [],
2724
+ "junctionReferenceTo": [],
2725
+ "relationshipName": "ScorecardAssociations",
2726
+ "restrictedDelete": false
2727
+ },
2728
+ {
2729
+ "cascadeDelete": false,
2730
+ "childSObject": "ServiceAppointment",
2731
+ "deprecatedAndHidden": false,
2732
+ "field": "AccountId",
2733
+ "junctionIdListNames": [],
2734
+ "junctionReferenceTo": [],
2735
+ "relationshipName": "ServiceAppointmentAccount",
2736
+ "restrictedDelete": false
2737
+ },
2738
+ {
2739
+ "cascadeDelete": true,
2740
+ "childSObject": "ServiceAppointment",
2741
+ "deprecatedAndHidden": false,
2742
+ "field": "ParentRecordId",
2743
+ "junctionIdListNames": [],
2744
+ "junctionReferenceTo": [],
2745
+ "relationshipName": "ServiceAppointments",
2746
+ "restrictedDelete": false
2747
+ },
2748
+ {
2749
+ "cascadeDelete": false,
2750
+ "childSObject": "ServiceAppointmentChangeEvent",
2751
+ "deprecatedAndHidden": false,
2752
+ "field": "AccountId",
2753
+ "junctionIdListNames": [],
2754
+ "junctionReferenceTo": [],
2755
+ "relationshipName": null,
2756
+ "restrictedDelete": false
2757
+ },
2758
+ {
2759
+ "cascadeDelete": false,
2760
+ "childSObject": "ServiceAppointmentChangeEvent",
2761
+ "deprecatedAndHidden": false,
2762
+ "field": "ParentRecordId",
2763
+ "junctionIdListNames": [],
2764
+ "junctionReferenceTo": [],
2765
+ "relationshipName": null,
2766
+ "restrictedDelete": false
2767
+ },
2768
+ {
2769
+ "cascadeDelete": false,
2770
+ "childSObject": "ServiceContract",
2771
+ "deprecatedAndHidden": false,
2772
+ "field": "AccountId",
2773
+ "junctionIdListNames": [],
2774
+ "junctionReferenceTo": [],
2775
+ "relationshipName": "ServiceContracts",
2776
+ "restrictedDelete": true
2777
+ },
2778
+ {
2779
+ "cascadeDelete": false,
2780
+ "childSObject": "ServiceContractChangeEvent",
2781
+ "deprecatedAndHidden": false,
2782
+ "field": "AccountId",
2783
+ "junctionIdListNames": [],
2784
+ "junctionReferenceTo": [],
2785
+ "relationshipName": null,
2786
+ "restrictedDelete": false
2787
+ },
2788
+ {
2789
+ "cascadeDelete": false,
2790
+ "childSObject": "ServiceResource",
2791
+ "deprecatedAndHidden": false,
2792
+ "field": "AccountId",
2793
+ "junctionIdListNames": [],
2794
+ "junctionReferenceTo": [],
2795
+ "relationshipName": "ServiceResources",
2796
+ "restrictedDelete": true
2797
+ },
2798
+ {
2799
+ "cascadeDelete": false,
2800
+ "childSObject": "ServiceResourceChangeEvent",
2801
+ "deprecatedAndHidden": false,
2802
+ "field": "AccountId",
2803
+ "junctionIdListNames": [],
2804
+ "junctionReferenceTo": [],
2805
+ "relationshipName": null,
2806
+ "restrictedDelete": false
2807
+ },
2808
+ {
2809
+ "cascadeDelete": true,
2810
+ "childSObject": "Swarm",
2811
+ "deprecatedAndHidden": false,
2812
+ "field": "RelatedRecordId",
2813
+ "junctionIdListNames": [],
2814
+ "junctionReferenceTo": [],
2815
+ "relationshipName": "Swarms",
2816
+ "restrictedDelete": false
2817
+ },
2818
+ {
2819
+ "cascadeDelete": true,
2820
+ "childSObject": "SwarmMember",
2821
+ "deprecatedAndHidden": false,
2822
+ "field": "RelatedRecordId",
2823
+ "junctionIdListNames": [],
2824
+ "junctionReferenceTo": [],
2825
+ "relationshipName": "SwarmMembers",
2826
+ "restrictedDelete": false
2827
+ },
2828
+ {
2829
+ "cascadeDelete": false,
2830
+ "childSObject": "Task",
2831
+ "deprecatedAndHidden": false,
2832
+ "field": "AccountId",
2833
+ "junctionIdListNames": [],
2834
+ "junctionReferenceTo": [],
2835
+ "relationshipName": null,
2836
+ "restrictedDelete": false
2837
+ },
2838
+ {
2839
+ "cascadeDelete": true,
2840
+ "childSObject": "Task",
2841
+ "deprecatedAndHidden": false,
2842
+ "field": "WhatId",
2843
+ "junctionIdListNames": [],
2844
+ "junctionReferenceTo": [],
2845
+ "relationshipName": "Tasks",
2846
+ "restrictedDelete": false
2847
+ },
2848
+ {
2849
+ "cascadeDelete": false,
2850
+ "childSObject": "TaskChangeEvent",
2851
+ "deprecatedAndHidden": false,
2852
+ "field": "AccountId",
2853
+ "junctionIdListNames": [],
2854
+ "junctionReferenceTo": [],
2855
+ "relationshipName": null,
2856
+ "restrictedDelete": false
2857
+ },
2858
+ {
2859
+ "cascadeDelete": false,
2860
+ "childSObject": "TaskChangeEvent",
2861
+ "deprecatedAndHidden": false,
2862
+ "field": "WhatId",
2863
+ "junctionIdListNames": [],
2864
+ "junctionReferenceTo": [],
2865
+ "relationshipName": null,
2866
+ "restrictedDelete": false
2867
+ },
2868
+ {
2869
+ "cascadeDelete": true,
2870
+ "childSObject": "TopicAssignment",
2871
+ "deprecatedAndHidden": false,
2872
+ "field": "EntityId",
2873
+ "junctionIdListNames": [],
2874
+ "junctionReferenceTo": [],
2875
+ "relationshipName": "TopicAssignments",
2876
+ "restrictedDelete": false
2877
+ },
2878
+ {
2879
+ "cascadeDelete": false,
2880
+ "childSObject": "User",
2881
+ "deprecatedAndHidden": false,
2882
+ "field": "AccountId",
2883
+ "junctionIdListNames": [],
2884
+ "junctionReferenceTo": [],
2885
+ "relationshipName": "Users",
2886
+ "restrictedDelete": false
2887
+ },
2888
+ {
2889
+ "cascadeDelete": false,
2890
+ "childSObject": "UserChangeEvent",
2891
+ "deprecatedAndHidden": false,
2892
+ "field": "AccountId",
2893
+ "junctionIdListNames": [],
2894
+ "junctionReferenceTo": [],
2895
+ "relationshipName": null,
2896
+ "restrictedDelete": false
2897
+ },
2898
+ {
2899
+ "cascadeDelete": false,
2900
+ "childSObject": "UserRole",
2901
+ "deprecatedAndHidden": false,
2902
+ "field": "PortalAccountId",
2903
+ "junctionIdListNames": [],
2904
+ "junctionReferenceTo": [],
2905
+ "relationshipName": null,
2906
+ "restrictedDelete": false
2907
+ },
2908
+ {
2909
+ "cascadeDelete": false,
2910
+ "childSObject": "WorkOrder",
2911
+ "deprecatedAndHidden": false,
2912
+ "field": "AccountId",
2913
+ "junctionIdListNames": [],
2914
+ "junctionReferenceTo": [],
2915
+ "relationshipName": "WorkOrders",
2916
+ "restrictedDelete": false
2917
+ },
2918
+ {
2919
+ "cascadeDelete": false,
2920
+ "childSObject": "WorkOrderChangeEvent",
2921
+ "deprecatedAndHidden": false,
2922
+ "field": "AccountId",
2923
+ "junctionIdListNames": [],
2924
+ "junctionReferenceTo": [],
2925
+ "relationshipName": null,
2926
+ "restrictedDelete": false
2927
+ },
2928
+ {
2929
+ "cascadeDelete": true,
2930
+ "childSObject": "WorkPlanSelectionRule",
2931
+ "deprecatedAndHidden": false,
2932
+ "field": "AccountId",
2933
+ "junctionIdListNames": [],
2934
+ "junctionReferenceTo": [],
2935
+ "relationshipName": "WorkPlanSelectionRules",
2936
+ "restrictedDelete": false
2937
+ },
2938
+ {
2939
+ "cascadeDelete": false,
2940
+ "childSObject": "WorkPlanSelectionRuleChangeEvent",
2941
+ "deprecatedAndHidden": false,
2942
+ "field": "AccountId",
2943
+ "junctionIdListNames": [],
2944
+ "junctionReferenceTo": [],
2945
+ "relationshipName": null,
2946
+ "restrictedDelete": false
2947
+ }
2948
+ ],
2949
+ "custom": false,
2950
+ "name": "Account",
2951
+ "queryable": true
2952
+ }