autotouch-cli 0.2.10__tar.gz → 0.2.11__tar.gz
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.
- {autotouch_cli-0.2.10/autotouch_cli.egg-info → autotouch_cli-0.2.11}/PKG-INFO +14 -1
- autotouch_cli-0.2.10/docs/research-table/reference/autotouch-cli-pypi.md → autotouch_cli-0.2.11/autotouch_cli.egg-info/PKG-INFO +22 -0
- autotouch_cli-0.2.10/PKG-INFO → autotouch_cli-0.2.11/docs/research-table/reference/autotouch-cli-pypi.md +13 -9
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/pyproject.toml +1 -1
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/smart_table_cli.py +83 -15
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/autotouch_cli.egg-info/SOURCES.txt +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/autotouch_cli.egg-info/dependency_links.txt +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/autotouch_cli.egg-info/entry_points.txt +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/autotouch_cli.egg-info/requires.txt +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/autotouch_cli.egg-info/top_level.txt +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/__init__.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/add_column_unique_index.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/attach_csv_import_leads_to_research_table.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/bundle_sequences_backend.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/check_agent_traces.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/check_column_mode.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/exit_terminal_leads_from_sequences.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/fetch_lead.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/fix_lead_titles_from_csv.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250106_add_column_position.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250108_fix_legacy_column_fields.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250109_add_user_fields_to_tables.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250117_add_call_logs_webhook_indexes.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250117_rename_call_logs_collection.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250119_create_leads_unique_email_index.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250123_add_filter_indexes.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250123_add_llm_responses_collection.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250128_migrate_user_ids_to_objectid.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250208_backfill_task_research_values.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250604_add_origin_indexes.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250608_cleanup_agent_metadata.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250608_rename_agent_metadata_to_metadata.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250922_add_activity_indexes.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250926_migrate_single_to_arrays.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250928_add_missing_timestamp_fields.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250929_add_task_join_indexes.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250929_add_task_join_indexes_safe.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250929_create_shared_phone_cache.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20251007_add_rows_position_id_index.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20251109_add_ttl_for_llm_and_preview_traces.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20260113_normalize_table_filter_operators.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20260113_set_user_permissions_user_admin.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20260204_sync_lead_owner_from_tasks.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/migrate_org_user_credits.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/set_default_lead_status.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/update_lead_owner_from_tasks.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/reassign_sequence_owner.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/run_sidecar_orchestrator_demo.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/test_crm_company_policy.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/test_sequences_instantly_e2e.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/test_sequences_personal_e2e.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/test_task_error_logger.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/verify_azurite_voicemail.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/setup.cfg +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_custom.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_integration.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_multi_titles.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_pipeline.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_simple.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_contactout_v2_bulk.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_lead_required_fields.py +0 -0
- {autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/tests/test_phone_provider_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autotouch-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.11
|
|
4
4
|
Summary: Autotouch Smart Table CLI
|
|
5
5
|
Requires-Python: >=3.9
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -145,6 +145,19 @@ Notes:
|
|
|
145
145
|
- Email/phone enrichment does not require creating/running `add_to_crm`.
|
|
146
146
|
- For `add_to_crm`, required mapping keys are `linkedinUrl` and `companyDomain`.
|
|
147
147
|
|
|
148
|
+
## Recommended ICP buyer discovery pattern
|
|
149
|
+
|
|
150
|
+
Use the dedicated guide:
|
|
151
|
+
|
|
152
|
+
- `docs/research-table/guides/icp-buyer-discovery.md`
|
|
153
|
+
|
|
154
|
+
This keeps quickstart short while documenting the full strategy:
|
|
155
|
+
|
|
156
|
+
- when to use `lead_finder` vs agent research,
|
|
157
|
+
- responsibility-based targeting (not exact title matching),
|
|
158
|
+
- one-person-per-row output contract,
|
|
159
|
+
- JSON split + downstream enrichment chaining.
|
|
160
|
+
|
|
148
161
|
## Create basic/manual fields (text, number, date, etc.)
|
|
149
162
|
|
|
150
163
|
Use `kind=manual` for non-enrichment columns.
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: autotouch-cli
|
|
3
|
+
Version: 0.2.11
|
|
4
|
+
Summary: Autotouch Smart Table CLI
|
|
5
|
+
Requires-Python: >=3.9
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: requests>=2.31.0
|
|
8
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
9
|
+
|
|
1
10
|
# Autotouch CLI Quickstart (`autotouch`)
|
|
2
11
|
|
|
3
12
|
This is the package-facing quickstart for agents and humans using the installable CLI.
|
|
@@ -136,6 +145,19 @@ Notes:
|
|
|
136
145
|
- Email/phone enrichment does not require creating/running `add_to_crm`.
|
|
137
146
|
- For `add_to_crm`, required mapping keys are `linkedinUrl` and `companyDomain`.
|
|
138
147
|
|
|
148
|
+
## Recommended ICP buyer discovery pattern
|
|
149
|
+
|
|
150
|
+
Use the dedicated guide:
|
|
151
|
+
|
|
152
|
+
- `docs/research-table/guides/icp-buyer-discovery.md`
|
|
153
|
+
|
|
154
|
+
This keeps quickstart short while documenting the full strategy:
|
|
155
|
+
|
|
156
|
+
- when to use `lead_finder` vs agent research,
|
|
157
|
+
- responsibility-based targeting (not exact title matching),
|
|
158
|
+
- one-person-per-row output contract,
|
|
159
|
+
- JSON split + downstream enrichment chaining.
|
|
160
|
+
|
|
139
161
|
## Create basic/manual fields (text, number, date, etc.)
|
|
140
162
|
|
|
141
163
|
Use `kind=manual` for non-enrichment columns.
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: autotouch-cli
|
|
3
|
-
Version: 0.2.10
|
|
4
|
-
Summary: Autotouch Smart Table CLI
|
|
5
|
-
Requires-Python: >=3.9
|
|
6
|
-
Description-Content-Type: text/markdown
|
|
7
|
-
Requires-Dist: requests>=2.31.0
|
|
8
|
-
Requires-Dist: python-dotenv>=1.0.0
|
|
9
|
-
|
|
10
1
|
# Autotouch CLI Quickstart (`autotouch`)
|
|
11
2
|
|
|
12
3
|
This is the package-facing quickstart for agents and humans using the installable CLI.
|
|
@@ -145,6 +136,19 @@ Notes:
|
|
|
145
136
|
- Email/phone enrichment does not require creating/running `add_to_crm`.
|
|
146
137
|
- For `add_to_crm`, required mapping keys are `linkedinUrl` and `companyDomain`.
|
|
147
138
|
|
|
139
|
+
## Recommended ICP buyer discovery pattern
|
|
140
|
+
|
|
141
|
+
Use the dedicated guide:
|
|
142
|
+
|
|
143
|
+
- `docs/research-table/guides/icp-buyer-discovery.md`
|
|
144
|
+
|
|
145
|
+
This keeps quickstart short while documenting the full strategy:
|
|
146
|
+
|
|
147
|
+
- when to use `lead_finder` vs agent research,
|
|
148
|
+
- responsibility-based targeting (not exact title matching),
|
|
149
|
+
- one-person-per-row output contract,
|
|
150
|
+
- JSON split + downstream enrichment chaining.
|
|
151
|
+
|
|
148
152
|
## Create basic/manual fields (text, number, date, etc.)
|
|
149
153
|
|
|
150
154
|
Use `kind=manual` for non-enrichment columns.
|
|
@@ -1039,18 +1039,24 @@ def _execute_run_flow(
|
|
|
1039
1039
|
output = run_data if context is None else {"context": context, "run": run_data}
|
|
1040
1040
|
_print_json(output, compact=args.compact)
|
|
1041
1041
|
sys.exit(1)
|
|
1042
|
+
job_id = str(job_id)
|
|
1043
|
+
status_url = f"{_api_url(args.base_url)}/api/bulk-jobs/{job_id}"
|
|
1044
|
+
watch_command = f"autotouch jobs watch --job-id {job_id}"
|
|
1042
1045
|
if not args.quiet_wait:
|
|
1043
1046
|
_print_json(
|
|
1044
1047
|
{
|
|
1045
|
-
"
|
|
1048
|
+
"event": "run.wait_started",
|
|
1049
|
+
"job_id": job_id,
|
|
1046
1050
|
"status": "polling_started",
|
|
1051
|
+
"status_url": status_url,
|
|
1052
|
+
"watch_command": watch_command,
|
|
1047
1053
|
"hint": "polling /api/bulk-jobs/{job_id}",
|
|
1048
1054
|
},
|
|
1049
1055
|
compact=args.compact,
|
|
1050
1056
|
)
|
|
1051
1057
|
|
|
1052
1058
|
poll_result = _poll_job(
|
|
1053
|
-
job_id=
|
|
1059
|
+
job_id=job_id,
|
|
1054
1060
|
base_url=args.base_url,
|
|
1055
1061
|
token=token,
|
|
1056
1062
|
use_x_api_key=args.use_x_api_key,
|
|
@@ -1064,10 +1070,17 @@ def _execute_run_flow(
|
|
|
1064
1070
|
)
|
|
1065
1071
|
final_job = poll_result.get("job") or {}
|
|
1066
1072
|
timed_out = bool(poll_result.get("timed_out"))
|
|
1073
|
+
final_status = str((final_job or {}).get("status") or "").lower()
|
|
1067
1074
|
output = {
|
|
1075
|
+
"event": "run.timed_out" if timed_out else "run.completed",
|
|
1068
1076
|
"run": run_data,
|
|
1069
1077
|
"estimate": estimate_data if args.show_estimate or args.max_credits is not None else None,
|
|
1078
|
+
"job": final_job,
|
|
1070
1079
|
"final_job": final_job,
|
|
1080
|
+
"job_id": job_id,
|
|
1081
|
+
"job_status_url": status_url,
|
|
1082
|
+
"watch_command": watch_command,
|
|
1083
|
+
"status": final_status,
|
|
1071
1084
|
"timed_out": timed_out,
|
|
1072
1085
|
"polls": int(poll_result.get("polls") or 0),
|
|
1073
1086
|
}
|
|
@@ -1077,18 +1090,45 @@ def _execute_run_flow(
|
|
|
1077
1090
|
|
|
1078
1091
|
if timed_out:
|
|
1079
1092
|
sys.exit(4)
|
|
1080
|
-
final_status
|
|
1093
|
+
if final_status in {"not_found", "unknown_not_found"}:
|
|
1094
|
+
print(
|
|
1095
|
+
f"ERROR: job {job_id} disappeared before terminal status; verify row state and rerun if needed",
|
|
1096
|
+
file=sys.stderr,
|
|
1097
|
+
)
|
|
1098
|
+
sys.exit(1)
|
|
1081
1099
|
if args.fail_on_error and final_status in {"error", "cancelled"}:
|
|
1082
1100
|
sys.exit(1)
|
|
1083
1101
|
if args.fail_on_partial and final_status == "partial":
|
|
1084
1102
|
sys.exit(1)
|
|
1085
1103
|
return
|
|
1086
1104
|
|
|
1105
|
+
job_id = run_data.get("job_id") or run_data.get("jobId")
|
|
1106
|
+
status_url = None
|
|
1107
|
+
watch_command = None
|
|
1108
|
+
if job_id:
|
|
1109
|
+
status_url = f"{_api_url(args.base_url)}/api/bulk-jobs/{job_id}"
|
|
1110
|
+
watch_command = f"autotouch jobs watch --job-id {job_id}"
|
|
1111
|
+
|
|
1087
1112
|
output_any: Any = run_data
|
|
1088
1113
|
if estimate_data is not None and args.show_estimate:
|
|
1089
1114
|
output_any = {"estimate": estimate_data, "run": run_data}
|
|
1090
1115
|
if context is not None:
|
|
1091
1116
|
output_any = {"context": context, "result": output_any}
|
|
1117
|
+
if isinstance(output_any, dict):
|
|
1118
|
+
output_any = dict(output_any)
|
|
1119
|
+
output_any.setdefault("event", "run.queued")
|
|
1120
|
+
if job_id:
|
|
1121
|
+
output_any.setdefault("job_id", str(job_id))
|
|
1122
|
+
output_any["job_status_url"] = status_url
|
|
1123
|
+
output_any["watch_command"] = watch_command
|
|
1124
|
+
elif job_id:
|
|
1125
|
+
output_any = {
|
|
1126
|
+
"event": "run.queued",
|
|
1127
|
+
"job_id": str(job_id),
|
|
1128
|
+
"job_status_url": status_url,
|
|
1129
|
+
"watch_command": watch_command,
|
|
1130
|
+
"result": output_any,
|
|
1131
|
+
}
|
|
1092
1132
|
_print_json(output_any, compact=args.compact)
|
|
1093
1133
|
|
|
1094
1134
|
|
|
@@ -1266,8 +1306,11 @@ def _poll_job(
|
|
|
1266
1306
|
polls = 0
|
|
1267
1307
|
heartbeat_every_polls = 5
|
|
1268
1308
|
max_consecutive_poll_errors = 6
|
|
1309
|
+
max_not_found_grace_polls = max(3, int(20 // interval) + 1)
|
|
1269
1310
|
consecutive_poll_errors = 0
|
|
1311
|
+
not_found_polls = 0
|
|
1270
1312
|
last_status: Optional[str] = None
|
|
1313
|
+
last_job_doc: Optional[Dict[str, Any]] = None
|
|
1271
1314
|
url = f"{_api_url(base_url)}/api/bulk-jobs/{job_id}"
|
|
1272
1315
|
headers = _auth_headers(token, use_x_api_key=use_x_api_key)
|
|
1273
1316
|
|
|
@@ -1286,6 +1329,7 @@ def _poll_job(
|
|
|
1286
1329
|
if print_updates and (consecutive_poll_errors == 1 or consecutive_poll_errors % 3 == 0):
|
|
1287
1330
|
_print_json(
|
|
1288
1331
|
{
|
|
1332
|
+
"event": "job.polling_error",
|
|
1289
1333
|
"job_id": job_id,
|
|
1290
1334
|
"status": "polling_error",
|
|
1291
1335
|
"polls": polls,
|
|
@@ -1314,6 +1358,7 @@ def _poll_job(
|
|
|
1314
1358
|
if print_updates and (consecutive_poll_errors == 1 or consecutive_poll_errors % 3 == 0):
|
|
1315
1359
|
_print_json(
|
|
1316
1360
|
{
|
|
1361
|
+
"event": "job.polling_error",
|
|
1317
1362
|
"job_id": job_id,
|
|
1318
1363
|
"status": "polling_error",
|
|
1319
1364
|
"polls": polls,
|
|
@@ -1343,18 +1388,34 @@ def _poll_job(
|
|
|
1343
1388
|
|
|
1344
1389
|
consecutive_poll_errors = 0
|
|
1345
1390
|
|
|
1346
|
-
if response.status_code == 404
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1391
|
+
if response.status_code == 404:
|
|
1392
|
+
not_found_polls += 1
|
|
1393
|
+
if not once and last_job_doc is None and not_found_polls <= max_not_found_grace_polls:
|
|
1394
|
+
job_doc = {
|
|
1395
|
+
"job_id": job_id,
|
|
1396
|
+
"status": "queued",
|
|
1397
|
+
"provider": None,
|
|
1398
|
+
"processed_rows": 0,
|
|
1399
|
+
"total_rows": 0,
|
|
1400
|
+
"error_rows": 0,
|
|
1401
|
+
"credits_used": 0.0,
|
|
1402
|
+
"billable": False,
|
|
1403
|
+
"updated_at": None,
|
|
1404
|
+
"not_found_polls": not_found_polls,
|
|
1405
|
+
}
|
|
1406
|
+
elif last_job_doc is not None:
|
|
1407
|
+
unknown_job = dict(last_job_doc)
|
|
1408
|
+
unknown_job["status"] = "unknown_not_found"
|
|
1409
|
+
unknown_job["not_found_polls"] = not_found_polls
|
|
1410
|
+
unknown_job["note"] = "job endpoint returned 404 before terminal status"
|
|
1411
|
+
return {"job": unknown_job, "polls": polls, "timed_out": False}
|
|
1412
|
+
else:
|
|
1413
|
+
missing_job = {
|
|
1414
|
+
"job_id": job_id,
|
|
1415
|
+
"status": "not_found",
|
|
1416
|
+
"not_found_polls": not_found_polls,
|
|
1417
|
+
}
|
|
1418
|
+
return {"job": missing_job, "polls": polls, "timed_out": False}
|
|
1358
1419
|
else:
|
|
1359
1420
|
content_type = response.headers.get("content-type", "").lower()
|
|
1360
1421
|
if "application/json" in content_type:
|
|
@@ -1377,9 +1438,14 @@ def _poll_job(
|
|
|
1377
1438
|
print(f"ERROR: unexpected bulk job response: {parsed_body}", file=sys.stderr)
|
|
1378
1439
|
sys.exit(1)
|
|
1379
1440
|
job_doc = parsed_body
|
|
1441
|
+
last_job_doc = job_doc
|
|
1442
|
+
not_found_polls = 0
|
|
1380
1443
|
|
|
1381
1444
|
status = str(job_doc.get("status") or "").lower()
|
|
1382
1445
|
snapshot = _job_snapshot(job_doc)
|
|
1446
|
+
snapshot["event"] = "job.progress"
|
|
1447
|
+
snapshot["terminal"] = status in TERMINAL_JOB_STATUSES
|
|
1448
|
+
snapshot["status_url"] = url
|
|
1383
1449
|
snapshot["polls"] = polls
|
|
1384
1450
|
snapshot["elapsed_seconds"] = int(max(0.0, time.monotonic() - started))
|
|
1385
1451
|
|
|
@@ -2545,8 +2611,10 @@ def cmd_jobs_watch(args: argparse.Namespace) -> None:
|
|
|
2545
2611
|
return
|
|
2546
2612
|
|
|
2547
2613
|
final_summary = {
|
|
2614
|
+
"event": "job.timed_out" if timed_out else "job.completed",
|
|
2548
2615
|
"job_id": final_job.get("job_id") or final_job.get("jobId") or args.job_id,
|
|
2549
2616
|
"status": final_job.get("status"),
|
|
2617
|
+
"job_status_url": f"{_api_url(args.base_url)}/api/bulk-jobs/{args.job_id}",
|
|
2550
2618
|
"timed_out": timed_out,
|
|
2551
2619
|
"polls": int(poll_result.get("polls") or 0),
|
|
2552
2620
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/attach_csv_import_leads_to_research_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250106_add_column_position.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250123_add_filter_indexes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250604_add_origin_indexes.py
RENAMED
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250608_cleanup_agent_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250922_add_activity_indexes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/20250929_add_task_join_indexes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/migrate_org_user_credits.py
RENAMED
|
File without changes
|
|
File without changes
|
{autotouch_cli-0.2.10 → autotouch_cli-0.2.11}/scripts/migrations/update_lead_owner_from_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|