autotouch-cli 0.2.81__tar.gz → 0.2.82__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 (56) hide show
  1. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/PKG-INFO +8 -7
  2. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/README.md +7 -6
  3. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/cli.py +6 -2
  4. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/cli_contracts.py +0 -1
  5. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/linkedin.py +1 -62
  6. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/list_build.py +36 -1
  7. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/search.py +1 -1
  8. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/data/CLI_REFERENCE.md +59 -263
  9. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/data/cli-manifest.json +297 -1694
  10. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/parser.py +2 -0
  11. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/PKG-INFO +8 -7
  12. autotouch_cli-0.2.82/autotouch_shared/linkedin_contract.py +102 -0
  13. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_shared/list_build_contract.py +8 -4
  14. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_shared/search_contract.py +4 -3
  15. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/pyproject.toml +1 -1
  16. autotouch_cli-0.2.81/autotouch_shared/linkedin_contract.py +0 -235
  17. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/MANIFEST.in +0 -0
  18. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/__init__.py +0 -0
  19. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/__init__.py +0 -0
  20. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/agents.py +0 -0
  21. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/auth.py +0 -0
  22. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/cells.py +0 -0
  23. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/columns.py +0 -0
  24. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/jobs.py +0 -0
  25. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/leads.py +0 -0
  26. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/prompts.py +0 -0
  27. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/rows.py +0 -0
  28. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/sequences.py +0 -0
  29. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/tables.py +0 -0
  30. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/tasks.py +0 -0
  31. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/webhooks.py +0 -0
  32. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/commands/workspace_secrets.py +0 -0
  33. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/__init__.py +0 -0
  34. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/auth.py +0 -0
  35. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/config.py +0 -0
  36. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/csv_import.py +0 -0
  37. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/http.py +0 -0
  38. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/io.py +0 -0
  39. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/output.py +0 -0
  40. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/polling.py +0 -0
  41. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/run.py +0 -0
  42. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/core/validation.py +0 -0
  43. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/exceptions.py +0 -0
  44. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/mongo_status.py +0 -0
  45. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/parser_groups.py +0 -0
  46. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/sequence_support.py +0 -0
  47. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli/templates.py +0 -0
  48. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  49. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  50. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/entry_points.txt +0 -0
  51. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/requires.txt +0 -0
  52. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_cli.egg-info/top_level.txt +0 -0
  53. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_shared/__init__.py +0 -0
  54. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_shared/linkedin_filters.py +0 -0
  55. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/autotouch_shared/provider_registry.py +0 -0
  56. {autotouch_cli-0.2.81 → autotouch_cli-0.2.82}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.81
3
+ Version: 0.2.82
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Project-URL: Homepage, https://app.autotouch.ai
6
6
  Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
@@ -133,9 +133,9 @@ autotouch rows get --table-id "$TABLE_ID" --row-id "$ROW_ID" --output json
133
133
  - Inspect one cell: `autotouch cells get`
134
134
  - Create a workflow column: `autotouch columns recipe`, `autotouch columns create`
135
135
  - Run neural search for niche/specific company or people discovery: `autotouch search companies`, `autotouch search people`
136
- - Inspect LinkedIn filters: `autotouch linkedin filters --category people`
136
+ - Inspect list-build inputs: `autotouch list-build inputs`
137
137
  - Build durable company and lead lists on Smart Table workers: `autotouch list-build companies`, `autotouch list-build leads`
138
- - Run one LinkedIn search page/debug replay: `autotouch linkedin search`
138
+ - Check connected LinkedIn account status/limits: `autotouch linkedin status`, `autotouch linkedin limits`
139
139
  - Run controlled slices: `autotouch columns run-next`
140
140
  - Poll authoritative state: `autotouch jobs get`
141
141
  - Create/activate sequences: `autotouch sequences recipe`, `autotouch sequences create`, `autotouch sequences activate`
@@ -148,7 +148,7 @@ Autotouch has two different company/people discovery paths.
148
148
 
149
149
  Use `autotouch search companies` and `autotouch search people` for neural search when the target is niche, semantic, or hard to express with structured filters. Examples: "AI workflow platforms for healthcare", "AI workflow startups selling to law firms", or "RevOps operators at PLG SaaS companies". Neural company/people search returns at most 10 results per API call and costs 1 credit per API call.
150
150
 
151
- Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This is the default path for larger LinkedIn-sourced company and lead lists using filters like geography IDs, company size, industry IDs, title/persona, and current company IDs. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
151
+ Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
152
152
 
153
153
  For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
154
154
 
@@ -160,10 +160,11 @@ For automation or agent-driven setup, use:
160
160
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
161
161
  - `autotouch cli-reference` for the shipped parser-generated reference
162
162
  - `autotouch capabilities --output json` for provider/workflow contracts
163
- - `autotouch --version` should be `0.2.81` or newer for the research-workspace list-build guidance, 10-result neural search cap, and provider-hidden `autotouch list-build ...`; older CLIs may still show the removed `autotouch linkedin list-build` surface
163
+ - `autotouch --version` should be `0.2.82` or newer for the single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
164
164
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
165
- - `autotouch list-build companies` and `autotouch list-build leads` for durable provider-hidden company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned network connection requirement
166
- - `autotouch linkedin search` for one-page LinkedIn/Sales Navigator replay/debug searches; it is not the recommended path for large lists
165
+ - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
166
+ - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
167
+ - `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics; do not use connected LinkedIn search/search-params for list building
167
168
  - `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
168
169
  - `autotouch sequences ...` and `autotouch tasks ...` for sequence/task workflows
169
170
  - `pip install 'autotouch-cli[mongo]'` if you need the Mongo-backed `status` / `watch` commands
@@ -108,9 +108,9 @@ autotouch rows get --table-id "$TABLE_ID" --row-id "$ROW_ID" --output json
108
108
  - Inspect one cell: `autotouch cells get`
109
109
  - Create a workflow column: `autotouch columns recipe`, `autotouch columns create`
110
110
  - Run neural search for niche/specific company or people discovery: `autotouch search companies`, `autotouch search people`
111
- - Inspect LinkedIn filters: `autotouch linkedin filters --category people`
111
+ - Inspect list-build inputs: `autotouch list-build inputs`
112
112
  - Build durable company and lead lists on Smart Table workers: `autotouch list-build companies`, `autotouch list-build leads`
113
- - Run one LinkedIn search page/debug replay: `autotouch linkedin search`
113
+ - Check connected LinkedIn account status/limits: `autotouch linkedin status`, `autotouch linkedin limits`
114
114
  - Run controlled slices: `autotouch columns run-next`
115
115
  - Poll authoritative state: `autotouch jobs get`
116
116
  - Create/activate sequences: `autotouch sequences recipe`, `autotouch sequences create`, `autotouch sequences activate`
@@ -123,7 +123,7 @@ Autotouch has two different company/people discovery paths.
123
123
 
124
124
  Use `autotouch search companies` and `autotouch search people` for neural search when the target is niche, semantic, or hard to express with structured filters. Examples: "AI workflow platforms for healthcare", "AI workflow startups selling to law firms", or "RevOps operators at PLG SaaS companies". Neural company/people search returns at most 10 results per API call and costs 1 credit per API call.
125
125
 
126
- Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This is the default path for larger LinkedIn-sourced company and lead lists using filters like geography IDs, company size, industry IDs, title/persona, and current company IDs. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
126
+ Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
127
127
 
128
128
  For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
129
129
 
@@ -135,10 +135,11 @@ For automation or agent-driven setup, use:
135
135
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
136
136
  - `autotouch cli-reference` for the shipped parser-generated reference
137
137
  - `autotouch capabilities --output json` for provider/workflow contracts
138
- - `autotouch --version` should be `0.2.81` or newer for the research-workspace list-build guidance, 10-result neural search cap, and provider-hidden `autotouch list-build ...`; older CLIs may still show the removed `autotouch linkedin list-build` surface
138
+ - `autotouch --version` should be `0.2.82` or newer for the single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
139
139
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
140
- - `autotouch list-build companies` and `autotouch list-build leads` for durable provider-hidden company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned network connection requirement
141
- - `autotouch linkedin search` for one-page LinkedIn/Sales Navigator replay/debug searches; it is not the recommended path for large lists
140
+ - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
141
+ - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
142
+ - `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics; do not use connected LinkedIn search/search-params for list building
142
143
  - `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
143
144
  - `autotouch sequences ...` and `autotouch tasks ...` for sequence/task workflows
144
145
  - `pip install 'autotouch-cli[mongo]'` if you need the Mongo-backed `status` / `watch` commands
@@ -106,7 +106,9 @@ from autotouch_cli.commands.linkedin import (
106
106
  from autotouch_cli.commands.list_build import (
107
107
  ListBuildCommandRuntime as ListBuildCommandHandlerRuntime,
108
108
  cmd_list_build_companies as cmd_list_build_companies_impl,
109
+ cmd_list_build_inputs as cmd_list_build_inputs_impl,
109
110
  cmd_list_build_leads as cmd_list_build_leads_impl,
111
+ cmd_list_build_pricing as cmd_list_build_pricing_impl,
110
112
  cmd_list_build_results as cmd_list_build_results_impl,
111
113
  cmd_list_build_status as cmd_list_build_status_impl,
112
114
  )
@@ -1580,6 +1582,8 @@ _register("list_build_companies", cmd_list_build_companies_impl, _list_build_com
1580
1582
  _register("list_build_leads", cmd_list_build_leads_impl, _list_build_command_runtime)
1581
1583
  _register("list_build_status", cmd_list_build_status_impl, _list_build_command_runtime)
1582
1584
  _register("list_build_results", cmd_list_build_results_impl, _list_build_command_runtime)
1585
+ _register("list_build_inputs", cmd_list_build_inputs_impl, _list_build_command_runtime)
1586
+ _register("list_build_pricing", cmd_list_build_pricing_impl, _list_build_command_runtime)
1583
1587
 
1584
1588
  # -- Template emitter commands (use _template_runtime) --
1585
1589
  _register("schema", emit_schema, _template_runtime)
@@ -2016,8 +2020,8 @@ def cmd_capabilities(args: argparse.Namespace) -> None:
2016
2020
  print(f" - {item}")
2017
2021
  filter_count = len((linkedin.get("filter_catalog") or {}).get("filters") or [])
2018
2022
  if filter_count:
2019
- print(f"Structured filters: {filter_count} exposed via `autotouch linkedin filters`")
2020
- print("Tip: run `autotouch linkedin recipe` for example payloads.")
2023
+ print(f"Structured filters: {filter_count} exposed via `autotouch list-build inputs`")
2024
+ print("Tip: run `autotouch list-build inputs` for list-building IDs and values.")
2021
2025
  if isinstance(search, dict):
2022
2026
  print("")
2023
2027
  print("Provider-hidden search")
@@ -25,7 +25,6 @@ _AUTH_MODE_EXACT: Dict[str, str] = {
25
25
  "webhooks.ingest": "webhook_token",
26
26
  "cli-manifest": "none",
27
27
  "cli-reference": "none",
28
- "linkedin.filters": "none",
29
28
  "schema": "none",
30
29
  "status": "none",
31
30
  "watch": "none",
@@ -305,15 +305,9 @@ def register_linkedin_subcommands(
305
305
  handlers: Dict[str, Callable[[argparse.Namespace], None]],
306
306
  recipe_types: Sequence[str],
307
307
  ) -> None:
308
- parser = subparsers.add_parser("linkedin", help="Connected LinkedIn search and engagement operations")
308
+ parser = subparsers.add_parser("linkedin", help="Connected LinkedIn account operations")
309
309
  linkedin_sub = parser.add_subparsers(dest="linkedin_cmd", required=True)
310
310
 
311
- recipe_parser = linkedin_sub.add_parser("recipe", help="Print LinkedIn payload recipes for search and list-building")
312
- recipe_parser.add_argument("--type", choices=["all", *recipe_types], default="all")
313
- recipe_parser.add_argument("--out-file", help="Optional path to save the selected payload JSON")
314
- add_api_common_arguments(recipe_parser)
315
- recipe_parser.set_defaults(func=handlers["recipe"])
316
-
317
311
  status_parser = linkedin_sub.add_parser("status", help="Check LinkedIn connection status")
318
312
  add_api_common_arguments(status_parser)
319
313
  status_parser.set_defaults(func=handlers["status"])
@@ -321,58 +315,3 @@ def register_linkedin_subcommands(
321
315
  limits_parser = linkedin_sub.add_parser("limits", help="View LinkedIn send limits and usage")
322
316
  add_api_common_arguments(limits_parser)
323
317
  limits_parser.set_defaults(func=handlers["limits"])
324
-
325
- search_parser = linkedin_sub.add_parser("search", help="Search LinkedIn for people, companies, jobs, or posts")
326
- search_parser.add_argument("--data-json", help="Explicit search payload JSON (overrides individual flags)")
327
- search_parser.add_argument("--data-file", help="Path to search payload JSON file")
328
- search_parser.add_argument("--url", help="Full LinkedIn/Sales Navigator search URL (overrides keyword filters)")
329
- search_parser.add_argument("--category", choices=["people", "companies", "jobs", "posts"], default="people", help="Search category (default: people)")
330
- search_parser.add_argument("--keywords", help="Free-text keyword search")
331
- search_parser.add_argument("--linkedin-api", choices=["auto", "classic", "sales_navigator"], default="auto", help=argparse.SUPPRESS)
332
- search_parser.add_argument("--cursor", help="Pagination cursor from previous response")
333
- search_parser.add_argument("--limit", type=int, default=25, help="Results per page, 1-100 (default: 25)")
334
- search_parser.add_argument("--extra-params-json", help="JSON object with additional search filters (location IDs, industry, etc.)")
335
- add_api_common_arguments(search_parser)
336
- search_parser.set_defaults(func=handlers["search"])
337
-
338
- params_parser = linkedin_sub.add_parser("search-params", help="Resolve names to LinkedIn parameter IDs for search filters")
339
- params_parser.add_argument("--type", required=True, help="Parameter type: location, industry, company, school, title, language, etc.")
340
- params_parser.add_argument("--keywords", default="", help="Search text to match")
341
- params_parser.add_argument("--linkedin-api", choices=["auto", "classic", "sales_navigator"], default="auto", help=argparse.SUPPRESS)
342
- params_parser.add_argument("--limit", type=int, default=25, help="Max results, 1-250 (default: 25)")
343
- add_api_common_arguments(params_parser)
344
- params_parser.set_defaults(func=handlers["search_params"])
345
-
346
- filters_parser = linkedin_sub.add_parser("filters", help="Print the LinkedIn/Sales Navigator structured filter catalog")
347
- filters_parser.add_argument("--api", choices=["all", "classic", "sales_navigator"], default="all", help="Filter by API mode")
348
- filters_parser.add_argument("--category", choices=["all", "people", "companies", "jobs", "posts"], default="all", help="Filter by search category")
349
- filters_parser.add_argument("--field", help="Show one filter field or alias, e.g. headcount, company_headcount, role")
350
- filters_parser.add_argument("--out-file", help="Optional path to save the selected catalog JSON")
351
- add_api_common_arguments(filters_parser)
352
- filters_parser.set_defaults(func=handlers["filters"])
353
-
354
- posts_parser = linkedin_sub.add_parser("posts", help="List LinkedIn posts for a user")
355
- posts_parser.add_argument("--identifier", required=True, help="LinkedIn profile URL, public ID, or URN")
356
- posts_parser.add_argument("--cursor", help="Pagination cursor from previous response")
357
- posts_parser.add_argument("--limit", type=int, default=25, help="Results per page, 1-100 (default: 25)")
358
- add_api_common_arguments(posts_parser)
359
- posts_parser.set_defaults(func=handlers["posts"])
360
-
361
- post_parser = linkedin_sub.add_parser("post", help="Get full details for a single LinkedIn post")
362
- post_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
363
- add_api_common_arguments(post_parser)
364
- post_parser.set_defaults(func=handlers["post"])
365
-
366
- comments_parser = linkedin_sub.add_parser("comments", help="List comments on a LinkedIn post")
367
- comments_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
368
- comments_parser.add_argument("--cursor", help="Pagination cursor from previous response")
369
- comments_parser.add_argument("--limit", type=int, default=100, help="Results per page, 1-100 (default: 100)")
370
- add_api_common_arguments(comments_parser)
371
- comments_parser.set_defaults(func=handlers["comments"])
372
-
373
- reactions_parser = linkedin_sub.add_parser("reactions", help="List reactions on a LinkedIn post")
374
- reactions_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
375
- reactions_parser.add_argument("--cursor", help="Pagination cursor from previous response")
376
- reactions_parser.add_argument("--limit", type=int, default=100, help="Results per page, 1-100 (default: 100)")
377
- add_api_common_arguments(reactions_parser)
378
- reactions_parser.set_defaults(func=handlers["reactions"])
@@ -132,13 +132,41 @@ def cmd_list_build_results(args: argparse.Namespace, *, runtime: ListBuildComman
132
132
  runtime.print_json(data, args.compact)
133
133
 
134
134
 
135
+ def cmd_list_build_inputs(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
136
+ token = runtime.resolve_token(args.token, required=True)
137
+ data = runtime.request_api(
138
+ "GET",
139
+ "/api/list-builds/inputs",
140
+ base_url=args.base_url,
141
+ token=token,
142
+ use_x_api_key=args.use_x_api_key,
143
+ timeout=args.timeout,
144
+ verbose=args.verbose,
145
+ )
146
+ runtime.print_json(data, args.compact)
147
+
148
+
149
+ def cmd_list_build_pricing(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
150
+ token = runtime.resolve_token(args.token, required=True)
151
+ data = runtime.request_api(
152
+ "GET",
153
+ "/api/list-builds/pricing",
154
+ base_url=args.base_url,
155
+ token=token,
156
+ use_x_api_key=args.use_x_api_key,
157
+ timeout=args.timeout,
158
+ verbose=args.verbose,
159
+ )
160
+ runtime.print_json(data, args.compact)
161
+
162
+
135
163
  def register_list_build_subcommands(
136
164
  subparsers: argparse._SubParsersAction[argparse.ArgumentParser],
137
165
  *,
138
166
  add_api_common_arguments: Callable[[argparse.ArgumentParser], None],
139
167
  handlers: Dict[str, Callable[[argparse.Namespace], None]],
140
168
  ) -> None:
141
- parser = subparsers.add_parser("list-build", help="Build durable company and lead lists")
169
+ parser = subparsers.add_parser("list-build", help="Build durable LinkedIn-sourced company and lead lists")
142
170
  sub = parser.add_subparsers(dest="list_build_cmd", required=True)
143
171
 
144
172
  def add_create_args(p: argparse.ArgumentParser) -> None:
@@ -183,3 +211,10 @@ def register_list_build_subcommands(
183
211
  add_api_common_arguments(results)
184
212
  results.set_defaults(func=handlers["results"])
185
213
 
214
+ inputs = sub.add_parser("inputs", help="Show valid list-build filter IDs and values")
215
+ add_api_common_arguments(inputs)
216
+ inputs.set_defaults(func=handlers["inputs"])
217
+
218
+ pricing = sub.add_parser("pricing", help="Show list-build pricing rules")
219
+ add_api_common_arguments(pricing)
220
+ pricing.set_defaults(func=handlers["pricing"])
@@ -255,7 +255,7 @@ def register_search_subcommands(
255
255
  handlers: Dict[str, Callable[[argparse.Namespace], None]],
256
256
  recipe_types: Sequence[str],
257
257
  ) -> None:
258
- parser = subparsers.add_parser("search", help="Provider-hidden search and list-building operations")
258
+ parser = subparsers.add_parser("search", help="Provider-hidden search operations")
259
259
  search_sub = parser.add_subparsers(dest="search_cmd", required=True)
260
260
 
261
261
  recipe_parser = search_sub.add_parser("recipe", help="Print search payload recipes")