autotouch-cli 0.2.11__tar.gz → 0.2.13__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.
Files changed (62) hide show
  1. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/PKG-INFO +61 -2
  2. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/PKG-INFO +61 -2
  3. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/docs/research-table/reference/autotouch-cli-pypi.md +60 -1
  4. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/pyproject.toml +1 -1
  5. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/smart_table_cli.py +34 -0
  6. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  7. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  8. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/entry_points.txt +0 -0
  9. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/requires.txt +0 -0
  10. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/autotouch_cli.egg-info/top_level.txt +0 -0
  11. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/__init__.py +0 -0
  12. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/add_column_unique_index.py +0 -0
  13. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/attach_csv_import_leads_to_research_table.py +0 -0
  14. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/bundle_sequences_backend.py +0 -0
  15. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/check_agent_traces.py +0 -0
  16. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/check_column_mode.py +0 -0
  17. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/exit_terminal_leads_from_sequences.py +0 -0
  18. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/fetch_lead.py +0 -0
  19. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/fix_lead_titles_from_csv.py +0 -0
  20. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250106_add_column_position.py +0 -0
  21. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250108_fix_legacy_column_fields.py +0 -0
  22. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250109_add_user_fields_to_tables.py +0 -0
  23. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250117_add_call_logs_webhook_indexes.py +0 -0
  24. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250117_rename_call_logs_collection.py +0 -0
  25. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250119_create_leads_unique_email_index.py +0 -0
  26. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250123_add_filter_indexes.py +0 -0
  27. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250123_add_llm_responses_collection.py +0 -0
  28. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250128_migrate_user_ids_to_objectid.py +0 -0
  29. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250208_backfill_task_research_values.py +0 -0
  30. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250604_add_origin_indexes.py +0 -0
  31. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250608_cleanup_agent_metadata.py +0 -0
  32. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250608_rename_agent_metadata_to_metadata.py +0 -0
  33. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250922_add_activity_indexes.py +0 -0
  34. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250926_migrate_single_to_arrays.py +0 -0
  35. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250928_add_missing_timestamp_fields.py +0 -0
  36. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250929_add_task_join_indexes.py +0 -0
  37. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250929_add_task_join_indexes_safe.py +0 -0
  38. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20250929_create_shared_phone_cache.py +0 -0
  39. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20251007_add_rows_position_id_index.py +0 -0
  40. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20251109_add_ttl_for_llm_and_preview_traces.py +0 -0
  41. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20260113_normalize_table_filter_operators.py +0 -0
  42. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20260113_set_user_permissions_user_admin.py +0 -0
  43. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/20260204_sync_lead_owner_from_tasks.py +0 -0
  44. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/migrate_org_user_credits.py +0 -0
  45. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/set_default_lead_status.py +0 -0
  46. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/migrations/update_lead_owner_from_tasks.py +0 -0
  47. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/reassign_sequence_owner.py +0 -0
  48. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/run_sidecar_orchestrator_demo.py +0 -0
  49. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/test_crm_company_policy.py +0 -0
  50. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/test_sequences_instantly_e2e.py +0 -0
  51. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/test_sequences_personal_e2e.py +0 -0
  52. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/test_task_error_logger.py +0 -0
  53. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/scripts/verify_azurite_voicemail.py +0 -0
  54. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/setup.cfg +0 -0
  55. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_custom.py +0 -0
  56. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_integration.py +0 -0
  57. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_multi_titles.py +0 -0
  58. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_pipeline.py +0 -0
  59. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_simple.py +0 -0
  60. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_contactout_v2_bulk.py +0 -0
  61. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/tests/test_lead_required_fields.py +0 -0
  62. {autotouch_cli-0.2.11 → autotouch_cli-0.2.13}/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.11
3
+ Version: 0.2.13
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Requires-Python: >=3.9
6
6
  Description-Content-Type: text/markdown
@@ -55,6 +55,17 @@ autotouch auth set-key --api-key stk_... --base-url https://app.autotouch.ai
55
55
  autotouch auth check
56
56
  ```
57
57
 
58
+ Developer keys support the same scope model as raw HTTP API calls.
59
+ Workflow-related scopes now include:
60
+ - `sequences:read`
61
+ - `sequences:write`
62
+ - `sequences:run`
63
+ - `tasks:read`
64
+ - `tasks:write`
65
+
66
+ Reference:
67
+ - `docs/platform/authentication.md`
68
+
58
69
  ## Preflight (recommended before writes)
59
70
 
60
71
  ```bash
@@ -158,6 +169,24 @@ This keeps quickstart short while documenting the full strategy:
158
169
  - one-person-per-row output contract,
159
170
  - JSON split + downstream enrichment chaining.
160
171
 
172
+ ## Sequences/Tasks workflow APIs (current CLI coverage)
173
+
174
+ The installable `autotouch` CLI currently provides first-class commands for research-table APIs.
175
+
176
+ Sequence/task workflow endpoints are available today via HTTP with the same developer key:
177
+ - `docs/platform/external-workflows-api.md`
178
+
179
+ Examples include:
180
+ - `POST /api/sequences`
181
+ - `PATCH /api/sequences/{sequence_id}/status`
182
+ - `POST /api/sequences/{sequence_id}/enroll`
183
+ - `POST /api/task-queue/create`
184
+ - `POST /api/task-queue/{task_id}/draft`
185
+
186
+ Important:
187
+ - These workflow routes support `actorUserId` query parameter.
188
+ - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
189
+
161
190
  ## Create basic/manual fields (text, number, date, etc.)
162
191
 
163
192
  Use `kind=manual` for non-enrichment columns.
@@ -294,10 +323,16 @@ autotouch columns run-next \
294
323
 
295
324
  - Treat a run as started only when you receive `job_id`.
296
325
  - Treat a run as done only when `jobs get/watch` returns terminal status.
326
+ - `columns run --wait` now emits structured progress events and includes:
327
+ - `job_id`
328
+ - `job_status_url`
329
+ - `watch_command`
297
330
 
298
331
  ```bash
299
332
  autotouch jobs get --job-id <JOB_ID> --output json
300
333
  autotouch jobs watch --job-id <JOB_ID> --interval 2 --output json
334
+ # Recover latest job id if local output lost it:
335
+ autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 1 --output json
301
336
  ```
302
337
 
303
338
  Terminal statuses:
@@ -306,6 +341,25 @@ Terminal statuses:
306
341
  - `error`
307
342
  - `cancelled`
308
343
 
344
+ Non-terminal statuses:
345
+ - `queued`
346
+ - `distributing`
347
+ - `processing`
348
+
349
+ Recommended status fields to inspect while waiting:
350
+ - `processed_rows`
351
+ - `error_rows`
352
+ - `skipped_rows`
353
+ - `total_rows`
354
+ - `pending_batches`
355
+ - `terminal_reason`
356
+
357
+ CLI-protected failure statuses:
358
+ - `not_found`
359
+ - `unknown_not_found`
360
+
361
+ If either failure status appears, treat the run as unconfirmed/inconsistent, verify row state, and rerun.
362
+
309
363
  ## Troubleshooting
310
364
 
311
365
  1. Import appears to run but rows are missing:
@@ -320,7 +374,12 @@ Terminal statuses:
320
374
  - Re-run with same `--checkpoint-file` and `--wait`.
321
375
  - CLI can resume/poll an in-flight task from checkpoint state.
322
376
 
323
- 4. Need to stop a running column job:
377
+ 4. Run queued but job id missing from local output:
378
+ - Recover from backend history:
379
+ - `autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 5 --output json`
380
+ - Then poll the returned `job_id` with `autotouch jobs get` / `autotouch jobs watch`.
381
+
382
+ 5. Need to stop a running column job:
324
383
 
325
384
  ```bash
326
385
  autotouch columns stop --table-id <TABLE_ID> --column-id <COLUMN_ID>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.11
3
+ Version: 0.2.13
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Requires-Python: >=3.9
6
6
  Description-Content-Type: text/markdown
@@ -55,6 +55,17 @@ autotouch auth set-key --api-key stk_... --base-url https://app.autotouch.ai
55
55
  autotouch auth check
56
56
  ```
57
57
 
58
+ Developer keys support the same scope model as raw HTTP API calls.
59
+ Workflow-related scopes now include:
60
+ - `sequences:read`
61
+ - `sequences:write`
62
+ - `sequences:run`
63
+ - `tasks:read`
64
+ - `tasks:write`
65
+
66
+ Reference:
67
+ - `docs/platform/authentication.md`
68
+
58
69
  ## Preflight (recommended before writes)
59
70
 
60
71
  ```bash
@@ -158,6 +169,24 @@ This keeps quickstart short while documenting the full strategy:
158
169
  - one-person-per-row output contract,
159
170
  - JSON split + downstream enrichment chaining.
160
171
 
172
+ ## Sequences/Tasks workflow APIs (current CLI coverage)
173
+
174
+ The installable `autotouch` CLI currently provides first-class commands for research-table APIs.
175
+
176
+ Sequence/task workflow endpoints are available today via HTTP with the same developer key:
177
+ - `docs/platform/external-workflows-api.md`
178
+
179
+ Examples include:
180
+ - `POST /api/sequences`
181
+ - `PATCH /api/sequences/{sequence_id}/status`
182
+ - `POST /api/sequences/{sequence_id}/enroll`
183
+ - `POST /api/task-queue/create`
184
+ - `POST /api/task-queue/{task_id}/draft`
185
+
186
+ Important:
187
+ - These workflow routes support `actorUserId` query parameter.
188
+ - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
189
+
161
190
  ## Create basic/manual fields (text, number, date, etc.)
162
191
 
163
192
  Use `kind=manual` for non-enrichment columns.
@@ -294,10 +323,16 @@ autotouch columns run-next \
294
323
 
295
324
  - Treat a run as started only when you receive `job_id`.
296
325
  - Treat a run as done only when `jobs get/watch` returns terminal status.
326
+ - `columns run --wait` now emits structured progress events and includes:
327
+ - `job_id`
328
+ - `job_status_url`
329
+ - `watch_command`
297
330
 
298
331
  ```bash
299
332
  autotouch jobs get --job-id <JOB_ID> --output json
300
333
  autotouch jobs watch --job-id <JOB_ID> --interval 2 --output json
334
+ # Recover latest job id if local output lost it:
335
+ autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 1 --output json
301
336
  ```
302
337
 
303
338
  Terminal statuses:
@@ -306,6 +341,25 @@ Terminal statuses:
306
341
  - `error`
307
342
  - `cancelled`
308
343
 
344
+ Non-terminal statuses:
345
+ - `queued`
346
+ - `distributing`
347
+ - `processing`
348
+
349
+ Recommended status fields to inspect while waiting:
350
+ - `processed_rows`
351
+ - `error_rows`
352
+ - `skipped_rows`
353
+ - `total_rows`
354
+ - `pending_batches`
355
+ - `terminal_reason`
356
+
357
+ CLI-protected failure statuses:
358
+ - `not_found`
359
+ - `unknown_not_found`
360
+
361
+ If either failure status appears, treat the run as unconfirmed/inconsistent, verify row state, and rerun.
362
+
309
363
  ## Troubleshooting
310
364
 
311
365
  1. Import appears to run but rows are missing:
@@ -320,7 +374,12 @@ Terminal statuses:
320
374
  - Re-run with same `--checkpoint-file` and `--wait`.
321
375
  - CLI can resume/poll an in-flight task from checkpoint state.
322
376
 
323
- 4. Need to stop a running column job:
377
+ 4. Run queued but job id missing from local output:
378
+ - Recover from backend history:
379
+ - `autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 5 --output json`
380
+ - Then poll the returned `job_id` with `autotouch jobs get` / `autotouch jobs watch`.
381
+
382
+ 5. Need to stop a running column job:
324
383
 
325
384
  ```bash
326
385
  autotouch columns stop --table-id <TABLE_ID> --column-id <COLUMN_ID>
@@ -46,6 +46,17 @@ autotouch auth set-key --api-key stk_... --base-url https://app.autotouch.ai
46
46
  autotouch auth check
47
47
  ```
48
48
 
49
+ Developer keys support the same scope model as raw HTTP API calls.
50
+ Workflow-related scopes now include:
51
+ - `sequences:read`
52
+ - `sequences:write`
53
+ - `sequences:run`
54
+ - `tasks:read`
55
+ - `tasks:write`
56
+
57
+ Reference:
58
+ - `docs/platform/authentication.md`
59
+
49
60
  ## Preflight (recommended before writes)
50
61
 
51
62
  ```bash
@@ -149,6 +160,24 @@ This keeps quickstart short while documenting the full strategy:
149
160
  - one-person-per-row output contract,
150
161
  - JSON split + downstream enrichment chaining.
151
162
 
163
+ ## Sequences/Tasks workflow APIs (current CLI coverage)
164
+
165
+ The installable `autotouch` CLI currently provides first-class commands for research-table APIs.
166
+
167
+ Sequence/task workflow endpoints are available today via HTTP with the same developer key:
168
+ - `docs/platform/external-workflows-api.md`
169
+
170
+ Examples include:
171
+ - `POST /api/sequences`
172
+ - `PATCH /api/sequences/{sequence_id}/status`
173
+ - `POST /api/sequences/{sequence_id}/enroll`
174
+ - `POST /api/task-queue/create`
175
+ - `POST /api/task-queue/{task_id}/draft`
176
+
177
+ Important:
178
+ - These workflow routes support `actorUserId` query parameter.
179
+ - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
180
+
152
181
  ## Create basic/manual fields (text, number, date, etc.)
153
182
 
154
183
  Use `kind=manual` for non-enrichment columns.
@@ -285,10 +314,16 @@ autotouch columns run-next \
285
314
 
286
315
  - Treat a run as started only when you receive `job_id`.
287
316
  - Treat a run as done only when `jobs get/watch` returns terminal status.
317
+ - `columns run --wait` now emits structured progress events and includes:
318
+ - `job_id`
319
+ - `job_status_url`
320
+ - `watch_command`
288
321
 
289
322
  ```bash
290
323
  autotouch jobs get --job-id <JOB_ID> --output json
291
324
  autotouch jobs watch --job-id <JOB_ID> --interval 2 --output json
325
+ # Recover latest job id if local output lost it:
326
+ autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 1 --output json
292
327
  ```
293
328
 
294
329
  Terminal statuses:
@@ -297,6 +332,25 @@ Terminal statuses:
297
332
  - `error`
298
333
  - `cancelled`
299
334
 
335
+ Non-terminal statuses:
336
+ - `queued`
337
+ - `distributing`
338
+ - `processing`
339
+
340
+ Recommended status fields to inspect while waiting:
341
+ - `processed_rows`
342
+ - `error_rows`
343
+ - `skipped_rows`
344
+ - `total_rows`
345
+ - `pending_batches`
346
+ - `terminal_reason`
347
+
348
+ CLI-protected failure statuses:
349
+ - `not_found`
350
+ - `unknown_not_found`
351
+
352
+ If either failure status appears, treat the run as unconfirmed/inconsistent, verify row state, and rerun.
353
+
300
354
  ## Troubleshooting
301
355
 
302
356
  1. Import appears to run but rows are missing:
@@ -311,7 +365,12 @@ Terminal statuses:
311
365
  - Re-run with same `--checkpoint-file` and `--wait`.
312
366
  - CLI can resume/poll an in-flight task from checkpoint state.
313
367
 
314
- 4. Need to stop a running column job:
368
+ 4. Run queued but job id missing from local output:
369
+ - Recover from backend history:
370
+ - `autotouch jobs list --table-id <TABLE_ID> --column-id <COLUMN_ID> --limit 5 --output json`
371
+ - Then poll the returned `job_id` with `autotouch jobs get` / `autotouch jobs watch`.
372
+
373
+ 5. Need to stop a running column job:
315
374
 
316
375
  ```bash
317
376
  autotouch columns stop --table-id <TABLE_ID> --column-id <COLUMN_ID>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "autotouch-cli"
7
- version = "0.2.11"
7
+ version = "0.2.13"
8
8
  description = "Autotouch Smart Table CLI"
9
9
  readme = "docs/research-table/reference/autotouch-cli-pypi.md"
10
10
  requires-python = ">=3.9"
@@ -2589,6 +2589,31 @@ def cmd_jobs_get(args: argparse.Namespace) -> None:
2589
2589
  _print_json(data, compact=args.compact)
2590
2590
 
2591
2591
 
2592
+ def cmd_jobs_list(args: argparse.Namespace) -> None:
2593
+ token = _resolve_token(args.token, required=True)
2594
+ params: Dict[str, Any] = {"limit": int(args.limit or 20)}
2595
+ if args.table_id:
2596
+ params["table_id"] = args.table_id
2597
+ if args.column_id:
2598
+ params["column_id"] = args.column_id
2599
+ if args.status:
2600
+ params["status"] = args.status
2601
+ if args.provider:
2602
+ params["provider"] = args.provider
2603
+
2604
+ data = _request_api(
2605
+ "GET",
2606
+ "/api/bulk-jobs",
2607
+ base_url=args.base_url,
2608
+ token=token,
2609
+ use_x_api_key=args.use_x_api_key,
2610
+ params=params,
2611
+ timeout=args.timeout,
2612
+ verbose=args.verbose,
2613
+ )
2614
+ _print_json(data, compact=args.compact)
2615
+
2616
+
2592
2617
  def cmd_jobs_watch(args: argparse.Namespace) -> None:
2593
2618
  token = _resolve_token(args.token, required=True)
2594
2619
  poll_result = _poll_job(
@@ -3039,6 +3064,15 @@ def build_parser() -> argparse.ArgumentParser:
3039
3064
  _add_api_common_arguments(pjg)
3040
3065
  pjg.set_defaults(func=cmd_jobs_get)
3041
3066
 
3067
+ pjl = jobs_sub.add_parser("list", help="List recent bulk jobs (recover latest job_id)")
3068
+ pjl.add_argument("--table-id", help="Filter by table id")
3069
+ pjl.add_argument("--column-id", help="Filter by column id")
3070
+ pjl.add_argument("--status", help="Filter by status (or comma-separated statuses)")
3071
+ pjl.add_argument("--provider", help="Filter by provider")
3072
+ pjl.add_argument("--limit", type=int, default=20, help="Max jobs to return (1-100)")
3073
+ _add_api_common_arguments(pjl)
3074
+ pjl.set_defaults(func=cmd_jobs_list)
3075
+
3042
3076
  pjw = jobs_sub.add_parser("watch", help="Poll bulk job status until terminal (or once)")
3043
3077
  pjw.add_argument("--job-id", required=True)
3044
3078
  pjw.add_argument("--once", action="store_true", help="Fetch once and exit")
File without changes