@thierryteisseire/leadgenius-skill 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +37 -0
- package/SKILL.md +49 -0
- package/package.json +30 -0
- package/references/api_reference.md +97 -0
- package/references/openapi.json +215 -0
- package/scripts/api_call.py +47 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 LeadGenius Pro
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# LeadGenius Pro Agent API Skill
|
|
2
|
+
|
|
3
|
+
A specialized skill for AI agents to interact with the LeadGenius Pro B2B platform. This skill enables agents to manage ABM campaigns, enrich leads, and automate outreach workflows.
|
|
4
|
+
|
|
5
|
+
## 🚀 Installation
|
|
6
|
+
|
|
7
|
+
Add this skill to your agent environment:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx skills add https://github.com/thierryteisseire/leadgenius-skill
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 🛠️ Features
|
|
14
|
+
|
|
15
|
+
- **Lead Lifecycle**: List, create, and transition lead statuses.
|
|
16
|
+
- **AI Enrichment**: Trigger automated data augmentation for person and company data.
|
|
17
|
+
- **Campaign Management**: Handle ABM targets and monitor ROI metrics.
|
|
18
|
+
- **Analytics**: Pull pipeline performance and conversion trends.
|
|
19
|
+
- **Integrations**: Sync data with CRMs and configure webhooks.
|
|
20
|
+
|
|
21
|
+
## 📂 Repository Structure
|
|
22
|
+
|
|
23
|
+
- `SKILL.md`: Core instructions for AI agents.
|
|
24
|
+
- `references/`: Detailed documentation.
|
|
25
|
+
- `api_reference.md`: Human-readable endpoint documentation.
|
|
26
|
+
- `openapi.json`: Machine-readable specification.
|
|
27
|
+
- `scripts/`: Helper utilities.
|
|
28
|
+
- `api_call.py`: CLI tool for testing API requests.
|
|
29
|
+
|
|
30
|
+
## 🔑 Requirements
|
|
31
|
+
|
|
32
|
+
To use this skill, you need a LeadGenius Pro API Key.
|
|
33
|
+
- Base URL: `/api/agent`
|
|
34
|
+
- Headers: `X-API-Key: lgp_your_key`
|
|
35
|
+
|
|
36
|
+
## ⚖️ License
|
|
37
|
+
MIT License. See [LICENSE.txt](LICENSE.txt) for details.
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: leadgenius-api
|
|
3
|
+
description: Comprehensive toolset for interacting with LeadGenius Pro Agent APIs. Use for managing ABM campaigns, lead lifecycle, AI enrichment, target accounts, outreach sequences, and system integrations. Supports listing, creating, and updating resources via the LeadGenius RESTful API.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# LeadGenius Pro Agent API
|
|
7
|
+
|
|
8
|
+
This skill provides a comprehensive interface for interacting with the LeadGenius Pro Agent API.
|
|
9
|
+
|
|
10
|
+
## Core Workflows
|
|
11
|
+
|
|
12
|
+
### 1. Lead Management
|
|
13
|
+
- **Find Leads**: Use `GET /leads` to list contacts.
|
|
14
|
+
- **Enrich Leads**: Use `POST /enrichment/trigger` to start AI augmentation.
|
|
15
|
+
- **Update Status**: Use `PUT /leads/{id}/status` to track progress (New -> Qualified -> Contacted).
|
|
16
|
+
|
|
17
|
+
### 2. Campaign Operations
|
|
18
|
+
- **Overview**: List all active ABM campaigns with `GET /campaigns`.
|
|
19
|
+
- **Performance**: Monitor ROI with `GET /campaigns/{id}/metrics`.
|
|
20
|
+
- **Creation**: Launch new initiatives with `POST /campaigns`.
|
|
21
|
+
|
|
22
|
+
### 3. Targeted ABM
|
|
23
|
+
- **Account Lists**: Manage high-value targets with `GET /target-accounts`.
|
|
24
|
+
- **Scoring**: Update account intent and fit scores with `PUT /target-accounts/{id}/score`.
|
|
25
|
+
|
|
26
|
+
## Technical Reference
|
|
27
|
+
|
|
28
|
+
### Base URL
|
|
29
|
+
All requests are relative to: `/api/agent` (e.g. `https://your-domain.com/api/agent/leads`)
|
|
30
|
+
|
|
31
|
+
### Authentication
|
|
32
|
+
Include your API key in the headers:
|
|
33
|
+
```http
|
|
34
|
+
X-API-Key: lgp_your_secret_key
|
|
35
|
+
# OR
|
|
36
|
+
Authorization: Bearer lgp_your_secret_key
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Reference Material
|
|
40
|
+
- **OpenAPI Spec**: See [openapi.json](references/openapi.json) for a full list of endpoints, parameters, and schemas.
|
|
41
|
+
- **Documentation**: A detailed HTML guide is available at `/api/agent/docs`.
|
|
42
|
+
|
|
43
|
+
### Helper Scripts
|
|
44
|
+
Use [scripts/api_call.py](scripts/api_call.py) to make authenticated requests from the command line.
|
|
45
|
+
|
|
46
|
+
## Guardrails
|
|
47
|
+
- **Rate Limits**: Default limit is 60 requests per minute.
|
|
48
|
+
- **Batching**: Limit batch lead creation to 100 per request.
|
|
49
|
+
- **Permissions**: Ensure your API key has the required scope (Read/Write/Admin).
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@thierryteisseire/leadgenius-skill",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "LeadGenius Pro Agent API Skill for AI agents",
|
|
5
|
+
"main": "SKILL.md",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/thierryteisseire/leadgenius-skill.git"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"agent-skill",
|
|
12
|
+
"leadgenius",
|
|
13
|
+
"ai-agent",
|
|
14
|
+
"abm",
|
|
15
|
+
"lead-generation"
|
|
16
|
+
],
|
|
17
|
+
"author": "Thierry Teisseire",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/thierryteisseire/leadgenius-skill/issues"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/thierryteisseire/leadgenius-skill#readme",
|
|
23
|
+
"files": [
|
|
24
|
+
"SKILL.md",
|
|
25
|
+
"references/",
|
|
26
|
+
"scripts/",
|
|
27
|
+
"LICENSE.txt",
|
|
28
|
+
"README.md"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# LeadGenius Pro Agent API Reference
|
|
2
|
+
|
|
3
|
+
This document provides a detailed breakdown of all available endpoints in the LeadGenius Pro Agent API.
|
|
4
|
+
|
|
5
|
+
## Base URL
|
|
6
|
+
`https://your-domain.com/api/agent`
|
|
7
|
+
|
|
8
|
+
## Authentication
|
|
9
|
+
All requests require an API key passed in headers:
|
|
10
|
+
- `X-API-Key: lgp_...`
|
|
11
|
+
- OR `Authorization: Bearer lgp_...`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 📊 Campaigns
|
|
16
|
+
Manage ABM campaigns and track performance.
|
|
17
|
+
|
|
18
|
+
### `GET /campaigns`
|
|
19
|
+
List all campaigns.
|
|
20
|
+
- **Query Params**: `page`, `pageSize`, `status`, `campaignType`.
|
|
21
|
+
|
|
22
|
+
### `POST /campaigns`
|
|
23
|
+
Create a new campaign.
|
|
24
|
+
- **Body**: `{ name, description, campaignType, startDate, endDate, goals: { targetAccounts, targetEngagement, targetPipeline } }`
|
|
25
|
+
|
|
26
|
+
### `GET /campaigns/{id}`
|
|
27
|
+
Retrieve campaign details.
|
|
28
|
+
|
|
29
|
+
### `GET /campaigns/{id}/metrics`
|
|
30
|
+
Get real-time performance metrics (ROI, conversion rates, etc.).
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 👤 Leads
|
|
35
|
+
Lifecycle management for marketing and sales leads.
|
|
36
|
+
|
|
37
|
+
### `GET /leads`
|
|
38
|
+
List leads with advanced filtering.
|
|
39
|
+
- **Filters**: `status`, `campaignId`, `email`, `companyName`.
|
|
40
|
+
|
|
41
|
+
### `POST /leads`
|
|
42
|
+
Create a single lead.
|
|
43
|
+
|
|
44
|
+
### `POST /leads/batch`
|
|
45
|
+
Create up to 100 leads in a single request.
|
|
46
|
+
- **Body**: `{ leads: [...] }`
|
|
47
|
+
|
|
48
|
+
### `PUT /leads/{id}/status`
|
|
49
|
+
Transition a lead status (e.g., `new` -> `qualified`).
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## ✨ Enrichment
|
|
54
|
+
Trigger AI-powered data augmentation.
|
|
55
|
+
|
|
56
|
+
### `POST /enrichment/trigger`
|
|
57
|
+
Queue enrichment for specific lead IDs.
|
|
58
|
+
- **Body**: `{ leadIds: [], enrichmentType, priority }`
|
|
59
|
+
|
|
60
|
+
### `GET /enrichment/status/{jobId}`
|
|
61
|
+
Check the progress of an enrichment job.
|
|
62
|
+
|
|
63
|
+
### `GET /enrichment/services`
|
|
64
|
+
List all available third-party and AI enrichment services.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🏢 Target Accounts (ABM)
|
|
69
|
+
### `GET /target-accounts`
|
|
70
|
+
List high-value target accounts.
|
|
71
|
+
|
|
72
|
+
### `PUT /target-accounts/{id}/score`
|
|
73
|
+
Update account intent, engagement, and fit scores.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 📈 Analytics
|
|
78
|
+
### `GET /analytics/pipeline`
|
|
79
|
+
Overall funnel performance metrics.
|
|
80
|
+
|
|
81
|
+
### `GET /analytics/trends`
|
|
82
|
+
Historical conversion trends.
|
|
83
|
+
|
|
84
|
+
### `POST /analytics/reports`
|
|
85
|
+
Request a custom data export.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## ⚙️ Workflows & Integrations
|
|
90
|
+
### `GET /workflows`
|
|
91
|
+
List automated sequences and workflows.
|
|
92
|
+
|
|
93
|
+
### `GET /integrations`
|
|
94
|
+
Manage connections to CRMs (Salesforce, HubSpot) and Mail Platforms.
|
|
95
|
+
|
|
96
|
+
### `GET /webhooks`
|
|
97
|
+
Configure event-based real-time notifications.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"openapi": "3.0.3",
|
|
3
|
+
"info": {
|
|
4
|
+
"title": "LeadGenius Pro Agent API",
|
|
5
|
+
"description": "RESTful API for AI agents to manage ABM campaigns and lead lifecycle in LeadGenius Pro",
|
|
6
|
+
"version": "1.0.0"
|
|
7
|
+
},
|
|
8
|
+
"servers": [
|
|
9
|
+
{
|
|
10
|
+
"url": "/api/agent",
|
|
11
|
+
"description": "Agent API Base URL"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"paths": {
|
|
15
|
+
"/campaigns": {
|
|
16
|
+
"get": {
|
|
17
|
+
"summary": "List campaigns",
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "page",
|
|
21
|
+
"in": "query",
|
|
22
|
+
"schema": {
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"default": 1
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "pageSize",
|
|
29
|
+
"in": "query",
|
|
30
|
+
"schema": {
|
|
31
|
+
"type": "integer",
|
|
32
|
+
"default": 20
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "status",
|
|
37
|
+
"in": "query",
|
|
38
|
+
"schema": {
|
|
39
|
+
"type": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "campaignType",
|
|
44
|
+
"in": "query",
|
|
45
|
+
"schema": {
|
|
46
|
+
"type": "string"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"post": {
|
|
52
|
+
"summary": "Create campaign",
|
|
53
|
+
"requestBody": {
|
|
54
|
+
"content": {
|
|
55
|
+
"application/json": {
|
|
56
|
+
"schema": {
|
|
57
|
+
"$ref": "#/components/schemas/Campaign"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"/campaigns/{id}": {
|
|
65
|
+
"get": {
|
|
66
|
+
"summary": "Get campaign by ID"
|
|
67
|
+
},
|
|
68
|
+
"put": {
|
|
69
|
+
"summary": "Update campaign"
|
|
70
|
+
},
|
|
71
|
+
"delete": {
|
|
72
|
+
"summary": "Archive campaign"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"/leads": {
|
|
76
|
+
"get": {
|
|
77
|
+
"summary": "List leads",
|
|
78
|
+
"parameters": [
|
|
79
|
+
{
|
|
80
|
+
"name": "page",
|
|
81
|
+
"in": "query",
|
|
82
|
+
"schema": {
|
|
83
|
+
"type": "integer"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "pageSize",
|
|
88
|
+
"in": "query",
|
|
89
|
+
"schema": {
|
|
90
|
+
"type": "integer"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "status",
|
|
95
|
+
"in": "query",
|
|
96
|
+
"schema": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "campaignId",
|
|
102
|
+
"in": "query",
|
|
103
|
+
"schema": {
|
|
104
|
+
"type": "string"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"post": {
|
|
110
|
+
"summary": "Create lead"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"/leads/batch": {
|
|
114
|
+
"post": {
|
|
115
|
+
"summary": "Batch create leads"
|
|
116
|
+
},
|
|
117
|
+
"delete": {
|
|
118
|
+
"summary": "Batch delete leads"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"/enrichment/trigger": {
|
|
122
|
+
"post": {
|
|
123
|
+
"summary": "Trigger enrichment"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"/enrichment/status/{jobId}": {
|
|
127
|
+
"get": {
|
|
128
|
+
"summary": "Get enrichment job status"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"/target-accounts": {
|
|
132
|
+
"get": {
|
|
133
|
+
"summary": "List target accounts"
|
|
134
|
+
},
|
|
135
|
+
"post": {
|
|
136
|
+
"summary": "Create target account"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"/sequences": {
|
|
140
|
+
"get": {
|
|
141
|
+
"summary": "List sequences"
|
|
142
|
+
},
|
|
143
|
+
"post": {
|
|
144
|
+
"summary": "Create sequence"
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"/sequences/{id}/enroll": {
|
|
148
|
+
"post": {
|
|
149
|
+
"summary": "Enroll leads in sequence"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"/analytics/pipeline": {
|
|
153
|
+
"get": {
|
|
154
|
+
"summary": "Get pipeline metrics"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"/workflows": {
|
|
158
|
+
"get": {
|
|
159
|
+
"summary": "List workflows"
|
|
160
|
+
},
|
|
161
|
+
"post": {
|
|
162
|
+
"summary": "Create workflow"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"/integrations": {
|
|
166
|
+
"get": {
|
|
167
|
+
"summary": "List integrations"
|
|
168
|
+
},
|
|
169
|
+
"post": {
|
|
170
|
+
"summary": "Create integration"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"/webhooks": {
|
|
174
|
+
"get": {
|
|
175
|
+
"summary": "List webhooks"
|
|
176
|
+
},
|
|
177
|
+
"post": {
|
|
178
|
+
"summary": "Create webhook"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"components": {
|
|
183
|
+
"schemas": {
|
|
184
|
+
"Campaign": {
|
|
185
|
+
"type": "object",
|
|
186
|
+
"properties": {
|
|
187
|
+
"name": {
|
|
188
|
+
"type": "string"
|
|
189
|
+
},
|
|
190
|
+
"description": {
|
|
191
|
+
"type": "string"
|
|
192
|
+
},
|
|
193
|
+
"campaignType": {
|
|
194
|
+
"type": "string",
|
|
195
|
+
"enum": [
|
|
196
|
+
"abm",
|
|
197
|
+
"demand_gen",
|
|
198
|
+
"nurture"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
"status": {
|
|
202
|
+
"type": "string",
|
|
203
|
+
"enum": [
|
|
204
|
+
"draft",
|
|
205
|
+
"active",
|
|
206
|
+
"paused",
|
|
207
|
+
"completed",
|
|
208
|
+
"archived"
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import argparse
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
import requests
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
def main():
|
|
9
|
+
parser = argparse.ArgumentParser(description="Call LeadGenius Pro Agent API")
|
|
10
|
+
parser.add_argument("method", choices=["GET", "POST", "PUT", "DELETE"], help="HTTP method")
|
|
11
|
+
parser.add_argument("endpoint", help="API endpoint (e.g., /leads)")
|
|
12
|
+
parser.add_argument("--data", help="JSON data for POST/PUT requests")
|
|
13
|
+
parser.add_argument("--base-url", default="http://localhost:3000/api/agent", help="Base URL")
|
|
14
|
+
parser.add_argument("--key", help="API Key (defaults to LGP_API_KEY env var)")
|
|
15
|
+
|
|
16
|
+
args = parser.parse_args()
|
|
17
|
+
|
|
18
|
+
api_key = args.key or os.environ.get("LGP_API_KEY")
|
|
19
|
+
if not api_key:
|
|
20
|
+
print("Error: API Key is required. Use --key or set LGP_API_KEY environment variable.")
|
|
21
|
+
sys.exit(1)
|
|
22
|
+
|
|
23
|
+
url = f"{args.base_url.rstrip('/')}/{args.endpoint.lstrip('/')}"
|
|
24
|
+
headers = {
|
|
25
|
+
"X-API-Key": api_key,
|
|
26
|
+
"Content-Type": "application/json"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
data = None
|
|
31
|
+
if args.data:
|
|
32
|
+
data = json.loads(args.data)
|
|
33
|
+
|
|
34
|
+
response = requests.request(args.method, url, headers=headers, json=data)
|
|
35
|
+
|
|
36
|
+
print(f"Status: {response.status_code}")
|
|
37
|
+
try:
|
|
38
|
+
print(json.dumps(response.json(), indent=2))
|
|
39
|
+
except:
|
|
40
|
+
print(response.text)
|
|
41
|
+
|
|
42
|
+
except Exception as e:
|
|
43
|
+
print(f"Error: {e}")
|
|
44
|
+
sys.exit(1)
|
|
45
|
+
|
|
46
|
+
if __name__ == "__main__":
|
|
47
|
+
main()
|