autotouch-cli 0.2.103__tar.gz → 0.2.105__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.103 → autotouch_cli-0.2.105}/PKG-INFO +19 -5
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/README.md +18 -4
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/cli.py +25 -2
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/list_build.py +68 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/sequences.py +60 -1
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/data/CLI_REFERENCE.md +63 -12
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/data/cli-manifest.json +353 -8
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/parser.py +7 -5
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/templates.py +101 -21
- autotouch_cli-0.2.105/autotouch_cli/workflows/__init__.py +5 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/workflows/registry.py +168 -6
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/PKG-INFO +19 -5
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/SOURCES.txt +1 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/list_build_contract.py +24 -0
- autotouch_cli-0.2.105/autotouch_shared/product_lifecycle.py +98 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/pyproject.toml +1 -1
- autotouch_cli-0.2.103/autotouch_cli/workflows/__init__.py +0 -5
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/MANIFEST.in +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/__init__.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/cli_contracts.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/__init__.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/agents.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/auth.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/cells.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/columns.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/integrations.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/jobs.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/leads.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/linkedin.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/prompts.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/rows.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/search.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/tables.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/tasks.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/webhooks.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/commands/workspace_secrets.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/__init__.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/auth.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/config.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/csv_import.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/http.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/io.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/output.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/polling.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/run.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/core/validation.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/exceptions.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/mongo_status.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/parser_groups.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli/sequence_support.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/dependency_links.txt +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/entry_points.txt +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/requires.txt +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_cli.egg-info/top_level.txt +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/__init__.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/linkedin_contract.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/linkedin_filters.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/provider_registry.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/autotouch_shared/search_contract.py +0 -0
- {autotouch_cli-0.2.103 → autotouch_cli-0.2.105}/setup.cfg +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.105
|
|
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
|
|
@@ -34,6 +34,19 @@ The CLI talks to the same API the product uses. For automation, prefer `--output
|
|
|
34
34
|
For a machine-readable local command contract, use `autotouch cli-manifest --output json`.
|
|
35
35
|
For a shipped human-readable reference generated from the installed parser, use `autotouch cli-reference`.
|
|
36
36
|
|
|
37
|
+
## Product Model
|
|
38
|
+
|
|
39
|
+
Autotouch helps GTM teams source records, land them in Smart Table, research and operate on those rows, then turn qualified accounts/leads into outreach actions.
|
|
40
|
+
|
|
41
|
+
Use the lifecycle to choose commands:
|
|
42
|
+
|
|
43
|
+
1. Source Records: use `autotouch list-build`, `autotouch search`, `autotouch agents`, imports, or webhooks.
|
|
44
|
+
2. Land In Smart Table: use `autotouch list-build sync-to-table`, `autotouch tables`, `autotouch rows`, or import/webhook ingest.
|
|
45
|
+
3. Research And Operate: use `autotouch columns recipe`, `autotouch columns run-next`, `autotouch jobs`, `autotouch rows`, and `autotouch cells`.
|
|
46
|
+
4. Engage: use `to_leads`, `to_sequence`, `to_outreach`, `to_crm`, `autotouch sequences`, and `autotouch tasks`.
|
|
47
|
+
|
|
48
|
+
Smart Table is the operating layer. Most workflows should land records there before enrichment, dedupe, routing, or engagement. Run `autotouch workflows list --output json` for lifecycle-grouped plans.
|
|
49
|
+
|
|
37
50
|
## Install
|
|
38
51
|
|
|
39
52
|
Released package:
|
|
@@ -180,7 +193,7 @@ Use `autotouch search similar-companies` as a convenience wrapper for Exa Compan
|
|
|
180
193
|
|
|
181
194
|
Use `autotouch search people` for provider-hidden people search when the target is niche, semantic, or hard to express with structured filters. People search currently returns at most 10 results per API call and costs 1 credit per API call.
|
|
182
195
|
|
|
183
|
-
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable LinkedIn/Sales Navigator 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,
|
|
196
|
+
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable LinkedIn/Sales Navigator 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, sync the records to a research table with `autotouch list-build sync-to-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.
|
|
184
197
|
|
|
185
198
|
LinkedIn is an optional campaign channel, not the default for every outbound workflow. Use it when the user explicitly wants LinkedIn-sourced lists, profile visits, connection requests, or LinkedIn follow-up tasks. Prefer email/call/custom sequences or research-table workflows when LinkedIn would unnecessarily constrain output because of provider limits, cooldowns, missing profile URLs, or campaign fit.
|
|
186
199
|
|
|
@@ -203,7 +216,7 @@ discover -> plan -> scaffold -> run primitives -> inspect
|
|
|
203
216
|
- `autotouch workflows scaffold --type <TYPE> --out-dir <DIR>` writes payload files and a command runbook.
|
|
204
217
|
- `autotouch columns recipe` and `autotouch sequences recipe` remain leaf-level templates.
|
|
205
218
|
|
|
206
|
-
Goal-level workflow types include `bulk-outreach`, `company-table-to-people`, `table-to-outreach`, `research-to-sequence`, `agent-to-sequence`, `account-research`, `signal-outreach`, `website-visitors`, and `list-build-to-table`. These keep CRM, outreach providers, Autotouch Leads, Autotouch Sequences, scheduled agents, webhooks, visitor sources, and external intent sources as sources/destinations inside one organized workflow layer instead of creating one-off top-level commands.
|
|
219
|
+
Goal-level workflow types include `bulk-outreach`, `company-table-to-people`, `table-to-outreach`, `research-to-sequence`, `agent-to-sequence`, `agent-to-leads`, `account-research`, `signal-outreach`, `website-visitors`, and `list-build-to-table`. These keep CRM, outreach providers, Autotouch Leads, Autotouch Sequences, scheduled agents, webhooks, visitor sources, and external intent sources as sources/destinations inside one organized workflow layer instead of creating one-off top-level commands.
|
|
207
220
|
|
|
208
221
|
## Sources And Destinations
|
|
209
222
|
|
|
@@ -273,16 +286,17 @@ For automation or agent-driven setup, use:
|
|
|
273
286
|
- `autotouch cli-manifest --output json` for the local machine-readable command contract
|
|
274
287
|
- `autotouch cli-reference` for the shipped parser-generated reference
|
|
275
288
|
- `autotouch capabilities --output json` for provider/workflow contracts
|
|
276
|
-
- `autotouch --version` should be `0.2.
|
|
289
|
+
- `autotouch --version` should be `0.2.105` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, Exa Company Search up to 100 results, scheduled agent `--target ACCOUNTS|LEADS`, `agents signals --target`, the `agent-to-sequence` and `agent-to-leads` workflow scaffolds, paced HTTP Request column contracts, branch-aware LinkedIn sequence recipes, real agent soft-delete with associated-table handling, research-table sequence handoff assignee and active-sequence-conflict guard config, backend-owned directional source/destination helpers, goal-level workflow plans, website visitor/external intent webhook workflow guidance, create-time agent assignment defaults, company-page signal configuration guidance, and sequence authoring warnings when AI draft is mixed with fixed templates
|
|
277
290
|
- `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
|
|
278
291
|
- `autotouch integrations list` and `autotouch integrations status --provider <provider>` before choosing source/destination workflows
|
|
279
292
|
- `autotouch workflows plan --type bulk-outreach` and `autotouch workflows scaffold --type bulk-outreach --out-dir workflow` for goal-level workflow planning
|
|
293
|
+
- `autotouch workflows plan --type agent-to-leads` and `autotouch workflows scaffold --type agent-to-leads --out-dir workflow` for scheduled agent discovery into qualified Autotouch Leads without sequence tasks
|
|
280
294
|
- `autotouch workflows plan --type agent-to-sequence` and `autotouch workflows scaffold --type agent-to-sequence --out-dir workflow` for scheduled agent discovery into Autotouch Sequence tasks
|
|
281
295
|
- `autotouch workflows plan --type website-visitors` and `autotouch workflows scaffold --type website-visitors --out-dir workflow` for website visitor or external intent provider webhook workflows
|
|
282
296
|
- `autotouch integrations recipe --type from_crm --provider hubspot` for CRM-to-research-table imports
|
|
283
297
|
- `autotouch columns recipe --type to_crm|to_outreach|to_leads|to_sequence` for research-table destination workflows
|
|
284
298
|
- `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
|
|
285
|
-
- `autotouch list-build companies` and `autotouch list-build
|
|
299
|
+
- `autotouch list-build companies`, `autotouch list-build leads`, and `autotouch list-build sync-to-table` for durable LinkedIn-sourced company/lead list builds and the first-class Smart Table handoff
|
|
286
300
|
- `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics
|
|
287
301
|
- `autotouch sequences recipe --type linkedin_outreach` only when the campaign should include LinkedIn touches; the emitted branch waits for connection acceptance before LinkedIn chat and uses email fallback after the wait window
|
|
288
302
|
- `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
|
|
@@ -9,6 +9,19 @@ The CLI talks to the same API the product uses. For automation, prefer `--output
|
|
|
9
9
|
For a machine-readable local command contract, use `autotouch cli-manifest --output json`.
|
|
10
10
|
For a shipped human-readable reference generated from the installed parser, use `autotouch cli-reference`.
|
|
11
11
|
|
|
12
|
+
## Product Model
|
|
13
|
+
|
|
14
|
+
Autotouch helps GTM teams source records, land them in Smart Table, research and operate on those rows, then turn qualified accounts/leads into outreach actions.
|
|
15
|
+
|
|
16
|
+
Use the lifecycle to choose commands:
|
|
17
|
+
|
|
18
|
+
1. Source Records: use `autotouch list-build`, `autotouch search`, `autotouch agents`, imports, or webhooks.
|
|
19
|
+
2. Land In Smart Table: use `autotouch list-build sync-to-table`, `autotouch tables`, `autotouch rows`, or import/webhook ingest.
|
|
20
|
+
3. Research And Operate: use `autotouch columns recipe`, `autotouch columns run-next`, `autotouch jobs`, `autotouch rows`, and `autotouch cells`.
|
|
21
|
+
4. Engage: use `to_leads`, `to_sequence`, `to_outreach`, `to_crm`, `autotouch sequences`, and `autotouch tasks`.
|
|
22
|
+
|
|
23
|
+
Smart Table is the operating layer. Most workflows should land records there before enrichment, dedupe, routing, or engagement. Run `autotouch workflows list --output json` for lifecycle-grouped plans.
|
|
24
|
+
|
|
12
25
|
## Install
|
|
13
26
|
|
|
14
27
|
Released package:
|
|
@@ -155,7 +168,7 @@ Use `autotouch search similar-companies` as a convenience wrapper for Exa Compan
|
|
|
155
168
|
|
|
156
169
|
Use `autotouch search people` for provider-hidden people search when the target is niche, semantic, or hard to express with structured filters. People search currently returns at most 10 results per API call and costs 1 credit per API call.
|
|
157
170
|
|
|
158
|
-
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable LinkedIn/Sales Navigator 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,
|
|
171
|
+
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable LinkedIn/Sales Navigator 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, sync the records to a research table with `autotouch list-build sync-to-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.
|
|
159
172
|
|
|
160
173
|
LinkedIn is an optional campaign channel, not the default for every outbound workflow. Use it when the user explicitly wants LinkedIn-sourced lists, profile visits, connection requests, or LinkedIn follow-up tasks. Prefer email/call/custom sequences or research-table workflows when LinkedIn would unnecessarily constrain output because of provider limits, cooldowns, missing profile URLs, or campaign fit.
|
|
161
174
|
|
|
@@ -178,7 +191,7 @@ discover -> plan -> scaffold -> run primitives -> inspect
|
|
|
178
191
|
- `autotouch workflows scaffold --type <TYPE> --out-dir <DIR>` writes payload files and a command runbook.
|
|
179
192
|
- `autotouch columns recipe` and `autotouch sequences recipe` remain leaf-level templates.
|
|
180
193
|
|
|
181
|
-
Goal-level workflow types include `bulk-outreach`, `company-table-to-people`, `table-to-outreach`, `research-to-sequence`, `agent-to-sequence`, `account-research`, `signal-outreach`, `website-visitors`, and `list-build-to-table`. These keep CRM, outreach providers, Autotouch Leads, Autotouch Sequences, scheduled agents, webhooks, visitor sources, and external intent sources as sources/destinations inside one organized workflow layer instead of creating one-off top-level commands.
|
|
194
|
+
Goal-level workflow types include `bulk-outreach`, `company-table-to-people`, `table-to-outreach`, `research-to-sequence`, `agent-to-sequence`, `agent-to-leads`, `account-research`, `signal-outreach`, `website-visitors`, and `list-build-to-table`. These keep CRM, outreach providers, Autotouch Leads, Autotouch Sequences, scheduled agents, webhooks, visitor sources, and external intent sources as sources/destinations inside one organized workflow layer instead of creating one-off top-level commands.
|
|
182
195
|
|
|
183
196
|
## Sources And Destinations
|
|
184
197
|
|
|
@@ -248,16 +261,17 @@ For automation or agent-driven setup, use:
|
|
|
248
261
|
- `autotouch cli-manifest --output json` for the local machine-readable command contract
|
|
249
262
|
- `autotouch cli-reference` for the shipped parser-generated reference
|
|
250
263
|
- `autotouch capabilities --output json` for provider/workflow contracts
|
|
251
|
-
- `autotouch --version` should be `0.2.
|
|
264
|
+
- `autotouch --version` should be `0.2.105` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, Exa Company Search up to 100 results, scheduled agent `--target ACCOUNTS|LEADS`, `agents signals --target`, the `agent-to-sequence` and `agent-to-leads` workflow scaffolds, paced HTTP Request column contracts, branch-aware LinkedIn sequence recipes, real agent soft-delete with associated-table handling, research-table sequence handoff assignee and active-sequence-conflict guard config, backend-owned directional source/destination helpers, goal-level workflow plans, website visitor/external intent webhook workflow guidance, create-time agent assignment defaults, company-page signal configuration guidance, and sequence authoring warnings when AI draft is mixed with fixed templates
|
|
252
265
|
- `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
|
|
253
266
|
- `autotouch integrations list` and `autotouch integrations status --provider <provider>` before choosing source/destination workflows
|
|
254
267
|
- `autotouch workflows plan --type bulk-outreach` and `autotouch workflows scaffold --type bulk-outreach --out-dir workflow` for goal-level workflow planning
|
|
268
|
+
- `autotouch workflows plan --type agent-to-leads` and `autotouch workflows scaffold --type agent-to-leads --out-dir workflow` for scheduled agent discovery into qualified Autotouch Leads without sequence tasks
|
|
255
269
|
- `autotouch workflows plan --type agent-to-sequence` and `autotouch workflows scaffold --type agent-to-sequence --out-dir workflow` for scheduled agent discovery into Autotouch Sequence tasks
|
|
256
270
|
- `autotouch workflows plan --type website-visitors` and `autotouch workflows scaffold --type website-visitors --out-dir workflow` for website visitor or external intent provider webhook workflows
|
|
257
271
|
- `autotouch integrations recipe --type from_crm --provider hubspot` for CRM-to-research-table imports
|
|
258
272
|
- `autotouch columns recipe --type to_crm|to_outreach|to_leads|to_sequence` for research-table destination workflows
|
|
259
273
|
- `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
|
|
260
|
-
- `autotouch list-build companies` and `autotouch list-build
|
|
274
|
+
- `autotouch list-build companies`, `autotouch list-build leads`, and `autotouch list-build sync-to-table` for durable LinkedIn-sourced company/lead list builds and the first-class Smart Table handoff
|
|
261
275
|
- `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics
|
|
262
276
|
- `autotouch sequences recipe --type linkedin_outreach` only when the campaign should include LinkedIn touches; the emitted branch waits for connection acceptance before LinkedIn chat and uses email fallback after the wait window
|
|
263
277
|
- `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
|
|
@@ -119,6 +119,7 @@ from autotouch_cli.commands.list_build import (
|
|
|
119
119
|
cmd_list_build_pricing as cmd_list_build_pricing_impl,
|
|
120
120
|
cmd_list_build_results as cmd_list_build_results_impl,
|
|
121
121
|
cmd_list_build_status as cmd_list_build_status_impl,
|
|
122
|
+
cmd_list_build_sync_to_table as cmd_list_build_sync_to_table_impl,
|
|
122
123
|
)
|
|
123
124
|
from autotouch_cli.commands.rows import (
|
|
124
125
|
RowCommandRuntime as RowCommandHandlerRuntime,
|
|
@@ -376,6 +377,7 @@ from autotouch_shared.list_build_contract import (
|
|
|
376
377
|
list_build_capabilities_contract,
|
|
377
378
|
list_build_endpoint_entries,
|
|
378
379
|
)
|
|
380
|
+
from autotouch_shared.product_lifecycle import product_lifecycle_contract
|
|
379
381
|
from autotouch_cli.exceptions import (
|
|
380
382
|
AutotouchAPIError,
|
|
381
383
|
AutotouchInputError,
|
|
@@ -1608,6 +1610,7 @@ _register("list_build_companies", cmd_list_build_companies_impl, _list_build_com
|
|
|
1608
1610
|
_register("list_build_leads", cmd_list_build_leads_impl, _list_build_command_runtime)
|
|
1609
1611
|
_register("list_build_status", cmd_list_build_status_impl, _list_build_command_runtime)
|
|
1610
1612
|
_register("list_build_results", cmd_list_build_results_impl, _list_build_command_runtime)
|
|
1613
|
+
_register("list_build_sync_to_table", cmd_list_build_sync_to_table_impl, _list_build_command_runtime)
|
|
1611
1614
|
_register("list_build_inputs", cmd_list_build_inputs_impl, _list_build_command_runtime)
|
|
1612
1615
|
_register("list_build_pricing", cmd_list_build_pricing_impl, _list_build_command_runtime)
|
|
1613
1616
|
|
|
@@ -1954,7 +1957,7 @@ def cmd_context_resolved(args: argparse.Namespace) -> None:
|
|
|
1954
1957
|
_print_json(data, compact=args.compact)
|
|
1955
1958
|
|
|
1956
1959
|
|
|
1957
|
-
def
|
|
1960
|
+
def _with_bundled_capabilities(data: Any) -> Any:
|
|
1958
1961
|
if not isinstance(data, dict):
|
|
1959
1962
|
return data
|
|
1960
1963
|
merged = dict(data)
|
|
@@ -1962,6 +1965,7 @@ def _with_bundled_linkedin_capabilities(data: Any) -> Any:
|
|
|
1962
1965
|
merged["endpoints"] = {**endpoints, **linkedin_endpoint_entries(), **list_build_endpoint_entries()}
|
|
1963
1966
|
merged["linkedin"] = linkedin_capabilities_contract()
|
|
1964
1967
|
merged["list_builds"] = list_build_capabilities_contract()
|
|
1968
|
+
merged["product_lifecycle"] = product_lifecycle_contract()
|
|
1965
1969
|
return merged
|
|
1966
1970
|
|
|
1967
1971
|
|
|
@@ -1976,7 +1980,7 @@ def cmd_capabilities(args: argparse.Namespace) -> None:
|
|
|
1976
1980
|
timeout=args.timeout,
|
|
1977
1981
|
verbose=args.verbose,
|
|
1978
1982
|
)
|
|
1979
|
-
data =
|
|
1983
|
+
data = _with_bundled_capabilities(data)
|
|
1980
1984
|
if OUTPUT_MODE == "human" and isinstance(data, dict):
|
|
1981
1985
|
execution = data.get("execution_policies") if isinstance(data.get("execution_policies"), dict) else {}
|
|
1982
1986
|
llm = execution.get("llm") if isinstance(execution.get("llm"), dict) else {}
|
|
@@ -1994,6 +1998,25 @@ def cmd_capabilities(args: argparse.Namespace) -> None:
|
|
|
1994
1998
|
if isinstance(scopes, list):
|
|
1995
1999
|
print(f"Scopes : {', '.join(str(s) for s in scopes)}")
|
|
1996
2000
|
|
|
2001
|
+
lifecycle = data.get("product_lifecycle") if isinstance(data.get("product_lifecycle"), dict) else {}
|
|
2002
|
+
stages = lifecycle.get("stages") if isinstance(lifecycle.get("stages"), list) else []
|
|
2003
|
+
if lifecycle:
|
|
2004
|
+
print("")
|
|
2005
|
+
print("Product lifecycle")
|
|
2006
|
+
print("-----------------")
|
|
2007
|
+
summary = lifecycle.get("product_summary")
|
|
2008
|
+
if summary:
|
|
2009
|
+
print(str(summary))
|
|
2010
|
+
principle = lifecycle.get("operating_principle")
|
|
2011
|
+
if principle:
|
|
2012
|
+
print(str(principle))
|
|
2013
|
+
if stages:
|
|
2014
|
+
print("Stages:")
|
|
2015
|
+
for stage in stages:
|
|
2016
|
+
if not isinstance(stage, dict):
|
|
2017
|
+
continue
|
|
2018
|
+
print(f" - {stage.get('label', stage.get('key', 'stage'))}: {stage.get('description', '')}")
|
|
2019
|
+
|
|
1997
2020
|
print("")
|
|
1998
2021
|
print("LLM output modes")
|
|
1999
2022
|
print("----------------")
|
|
@@ -86,6 +86,26 @@ def _wait(job_id: str, args: argparse.Namespace, *, runtime: ListBuildCommandRun
|
|
|
86
86
|
time.sleep(max(1, int(getattr(args, "poll_interval", 5) or 5)))
|
|
87
87
|
|
|
88
88
|
|
|
89
|
+
def _wait_sync(sync_job_id: str, args: argparse.Namespace, *, runtime: ListBuildCommandRuntime, token: Optional[str]) -> Any:
|
|
90
|
+
started = time.time()
|
|
91
|
+
while True:
|
|
92
|
+
data = runtime.request_api(
|
|
93
|
+
"GET",
|
|
94
|
+
f"/api/list-builds/sync-jobs/{sync_job_id}",
|
|
95
|
+
base_url=args.base_url,
|
|
96
|
+
token=token,
|
|
97
|
+
use_x_api_key=args.use_x_api_key,
|
|
98
|
+
timeout=args.timeout,
|
|
99
|
+
verbose=args.verbose,
|
|
100
|
+
)
|
|
101
|
+
if str(data.get("status") or "").lower() in {"completed", "error", "cancelled"}:
|
|
102
|
+
return data
|
|
103
|
+
timeout = int(getattr(args, "wait_timeout", 0) or 0)
|
|
104
|
+
if timeout and time.time() - started >= timeout:
|
|
105
|
+
raise AutotouchTimeoutError(f"Timed out waiting for list-build sync {sync_job_id}")
|
|
106
|
+
time.sleep(max(1, int(getattr(args, "poll_interval", 5) or 5)))
|
|
107
|
+
|
|
108
|
+
|
|
89
109
|
def _create(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime, kind: str) -> None:
|
|
90
110
|
token = runtime.resolve_token(args.token, required=True)
|
|
91
111
|
data = runtime.request_api(
|
|
@@ -103,6 +123,34 @@ def _create(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime, kind:
|
|
|
103
123
|
runtime.print_json(data, args.compact)
|
|
104
124
|
|
|
105
125
|
|
|
126
|
+
def cmd_list_build_sync_to_table(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
|
|
127
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
128
|
+
payload: Dict[str, Any] = {
|
|
129
|
+
"identity_key": args.identity_key,
|
|
130
|
+
"dedupe_mode": args.dedupe_mode,
|
|
131
|
+
"merge_mode": args.merge_mode,
|
|
132
|
+
}
|
|
133
|
+
for attr in ("type", "table_id", "table_name", "table_mode"):
|
|
134
|
+
value = getattr(args, attr, None)
|
|
135
|
+
if value:
|
|
136
|
+
payload[attr] = value
|
|
137
|
+
if getattr(args, "allow_partial", False):
|
|
138
|
+
payload["allow_partial"] = True
|
|
139
|
+
data = runtime.request_api(
|
|
140
|
+
"POST",
|
|
141
|
+
f"/api/list-builds/{args.job_id}/sync-to-table",
|
|
142
|
+
base_url=args.base_url,
|
|
143
|
+
token=token,
|
|
144
|
+
use_x_api_key=args.use_x_api_key,
|
|
145
|
+
payload=payload,
|
|
146
|
+
timeout=args.timeout,
|
|
147
|
+
verbose=args.verbose,
|
|
148
|
+
)
|
|
149
|
+
if getattr(args, "wait", False) and data.get("sync_job_id"):
|
|
150
|
+
data = _wait_sync(str(data["sync_job_id"]), args, runtime=runtime, token=token)
|
|
151
|
+
runtime.print_json(data, args.compact)
|
|
152
|
+
|
|
153
|
+
|
|
106
154
|
def cmd_list_build_companies(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
|
|
107
155
|
_create(args, runtime=runtime, kind="companies")
|
|
108
156
|
|
|
@@ -253,6 +301,26 @@ def register_list_build_subcommands(
|
|
|
253
301
|
add_api_common_arguments(results)
|
|
254
302
|
results.set_defaults(func=handlers["results"])
|
|
255
303
|
|
|
304
|
+
sync = sub.add_parser("sync-to-table", help="Sync list-build results into a Smart Table")
|
|
305
|
+
sync.add_argument("--job-id", required=True)
|
|
306
|
+
sync.add_argument("--type", choices=["items", "companies", "leads", "all"], help="Result type to sync; defaults to the job kind")
|
|
307
|
+
sync.add_argument("--table-id", help="Existing Smart Table id for append/upsert")
|
|
308
|
+
sync.add_argument("--table-name", help="New Smart Table name when creating a table")
|
|
309
|
+
sync.add_argument("--table-mode", choices=["create", "append"], help="Create a new table or append/upsert into --table-id")
|
|
310
|
+
sync.add_argument(
|
|
311
|
+
"--identity-key",
|
|
312
|
+
default="auto",
|
|
313
|
+
help="Dedupe identity key: auto, linkedin_url, linkedin_company_id, linkedin_company_url, or domain",
|
|
314
|
+
)
|
|
315
|
+
sync.add_argument("--dedupe-mode", choices=["allow", "skip", "upsert"], default="upsert", help="How to handle matching rows")
|
|
316
|
+
sync.add_argument("--merge-mode", choices=["fill_empty", "overwrite_mapped"], default="fill_empty", help="How upserts merge values")
|
|
317
|
+
sync.add_argument("--allow-partial", action="store_true", help="Allow syncing before the list-build job is completed")
|
|
318
|
+
sync.add_argument("--wait", action="store_true", help="Poll until sync completes")
|
|
319
|
+
sync.add_argument("--poll-interval", type=int, default=5, help="Polling interval seconds for --wait")
|
|
320
|
+
sync.add_argument("--wait-timeout", type=int, default=0, help="Max seconds to wait (0 = no timeout)")
|
|
321
|
+
add_api_common_arguments(sync)
|
|
322
|
+
sync.set_defaults(func=handlers["sync_to_table"])
|
|
323
|
+
|
|
256
324
|
inputs = sub.add_parser("inputs", help="Show valid list-build filter IDs and values")
|
|
257
325
|
inputs.add_argument("--type", choices=["geo", "industry", "service", "title_skill", "title-skills"], help="Search input type")
|
|
258
326
|
inputs.add_argument("--query", help="Search text for input ID lookup")
|
|
@@ -4,7 +4,7 @@ import argparse
|
|
|
4
4
|
import json
|
|
5
5
|
import sys
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from typing import Any, Callable, Dict, Optional, Sequence
|
|
7
|
+
from typing import Any, Callable, Dict, List, Optional, Sequence
|
|
8
8
|
|
|
9
9
|
from autotouch_cli.exceptions import (
|
|
10
10
|
AutotouchAPIError,
|
|
@@ -92,6 +92,64 @@ def _sequence_shape(sequence: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
|
|
95
|
+
def _sequence_template_ai_draft_warnings(payload: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
|
96
|
+
if not isinstance(payload, dict):
|
|
97
|
+
return []
|
|
98
|
+
steps = payload.get("steps")
|
|
99
|
+
if not isinstance(steps, list):
|
|
100
|
+
return []
|
|
101
|
+
|
|
102
|
+
warnings: List[Dict[str, Any]] = []
|
|
103
|
+
for idx, step in enumerate(steps):
|
|
104
|
+
if not isinstance(step, dict) or not bool(step.get("aiDraft")):
|
|
105
|
+
continue
|
|
106
|
+
template_fields = [
|
|
107
|
+
field
|
|
108
|
+
for field in ("subjectTemplate", "bodyTemplate", "scriptTemplate")
|
|
109
|
+
if isinstance(step.get(field), str) and step.get(field, "").strip()
|
|
110
|
+
]
|
|
111
|
+
if not template_fields:
|
|
112
|
+
continue
|
|
113
|
+
|
|
114
|
+
execution_mode = str(step.get("executionMode") or "").strip().upper()
|
|
115
|
+
if not execution_mode and str(step.get("kind") or "").strip().upper() == "EMAIL":
|
|
116
|
+
execution_mode = str(step.get("emailSendMode") or "").strip().upper()
|
|
117
|
+
automated = execution_mode == "AUTOMATED"
|
|
118
|
+
warnings.append(
|
|
119
|
+
{
|
|
120
|
+
"code": "automated_ai_draft_with_template" if automated else "ai_draft_with_template",
|
|
121
|
+
"step_index": idx,
|
|
122
|
+
"step_id": step.get("id"),
|
|
123
|
+
"step_kind": step.get("kind"),
|
|
124
|
+
"execution_mode": execution_mode or None,
|
|
125
|
+
"template_fields": template_fields,
|
|
126
|
+
"message": (
|
|
127
|
+
"This step has aiDraft=true plus template fields. AI will generate task content from context; "
|
|
128
|
+
"the template fields are guidance/context and are not guaranteed to be sent exactly. "
|
|
129
|
+
"For deterministic variable-filled template sending, set aiDraft=false. "
|
|
130
|
+
"For AI-personalized review, keep aiDraft=true and use executionMode=MANUAL."
|
|
131
|
+
),
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
return warnings
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _attach_sequence_authoring_warnings(output: Dict[str, Any], payload: Optional[Dict[str, Any]]) -> Dict[str, Any]:
|
|
138
|
+
warnings = _sequence_template_ai_draft_warnings(payload)
|
|
139
|
+
if not warnings:
|
|
140
|
+
return output
|
|
141
|
+
enriched = dict(output)
|
|
142
|
+
enriched["sequence_authoring_warnings"] = warnings
|
|
143
|
+
existing = enriched.get("warnings")
|
|
144
|
+
if isinstance(existing, list):
|
|
145
|
+
enriched["warnings"] = [*existing, *warnings]
|
|
146
|
+
elif existing:
|
|
147
|
+
enriched["warnings"] = [existing, *warnings]
|
|
148
|
+
else:
|
|
149
|
+
enriched["warnings"] = warnings
|
|
150
|
+
return enriched
|
|
151
|
+
|
|
152
|
+
|
|
95
153
|
def _fetch_sequence_readback(
|
|
96
154
|
sequence_id: str,
|
|
97
155
|
args: argparse.Namespace,
|
|
@@ -123,6 +181,7 @@ def _sequence_mutation_output(
|
|
|
123
181
|
sequence_id: Optional[str] = None,
|
|
124
182
|
) -> Dict[str, Any]:
|
|
125
183
|
output = dict(mutation_result)
|
|
184
|
+
output = _attach_sequence_authoring_warnings(output, submitted_payload)
|
|
126
185
|
submitted_shape = _sequence_shape(submitted_payload) if isinstance(submitted_payload, dict) else None
|
|
127
186
|
if submitted_shape:
|
|
128
187
|
output["submitted_shape"] = submitted_shape
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Autotouch CLI Reference
|
|
2
2
|
|
|
3
|
-
Generated from the installed parser for `autotouch-cli` `0.2.
|
|
3
|
+
Generated from the installed parser for `autotouch-cli` `0.2.105`.
|
|
4
4
|
Manifest schema version: `2`.
|
|
5
5
|
|
|
6
6
|
## Output Modes
|
|
@@ -2492,10 +2492,10 @@ Build durable LinkedIn-sourced company and lead lists
|
|
|
2492
2492
|
- Auth: `varies_by_subcommand`
|
|
2493
2493
|
- Stability: `stable`
|
|
2494
2494
|
- Destructive: `no`
|
|
2495
|
-
- Subcommands: `companies, leads, status, results, inputs, pricing`
|
|
2495
|
+
- Subcommands: `companies, leads, status, results, sync-to-table, inputs, pricing`
|
|
2496
2496
|
- Example:
|
|
2497
2497
|
- `autotouch list-build [-h]
|
|
2498
|
-
{companies,leads,status,results,inputs,pricing} ...`
|
|
2498
|
+
{companies,leads,status,results,sync-to-table,inputs,pricing} ...`
|
|
2499
2499
|
|
|
2500
2500
|
#### `autotouch list-build companies`
|
|
2501
2501
|
|
|
@@ -2724,6 +2724,57 @@ Get list-build job status
|
|
|
2724
2724
|
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
2725
2725
|
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
2726
2726
|
|
|
2727
|
+
#### `autotouch list-build sync-to-table`
|
|
2728
|
+
|
|
2729
|
+
Sync list-build results into a Smart Table
|
|
2730
|
+
|
|
2731
|
+
- Auth: `developer_key_or_user_session`
|
|
2732
|
+
- Stability: `stable`
|
|
2733
|
+
- Destructive: `no`
|
|
2734
|
+
- Required flags: `--job-id`
|
|
2735
|
+
- Output modes: `json, ndjson, human`
|
|
2736
|
+
- Example:
|
|
2737
|
+
- `autotouch list-build sync-to-table [-h] --job-id JOB_ID
|
|
2738
|
+
[--type {items,companies,leads,all}]
|
|
2739
|
+
[--table-id TABLE_ID]
|
|
2740
|
+
[--table-name TABLE_NAME]
|
|
2741
|
+
[--table-mode {create,append}]
|
|
2742
|
+
[--identity-key IDENTITY_KEY]
|
|
2743
|
+
[--dedupe-mode {allow,skip,upsert}]
|
|
2744
|
+
[--merge-mode {fill_empty,overwrite_mapped}]
|
|
2745
|
+
[--allow-partial] [--wait]
|
|
2746
|
+
[--poll-interval POLL_INTERVAL]
|
|
2747
|
+
[--wait-timeout WAIT_TIMEOUT]
|
|
2748
|
+
[--base-url BASE_URL]
|
|
2749
|
+
[--token TOKEN] [--use-x-api-key]
|
|
2750
|
+
[--timeout TIMEOUT]
|
|
2751
|
+
[--output {json,ndjson,human}]
|
|
2752
|
+
[--compact] [--select SELECT |
|
|
2753
|
+
--json-pointer JSON_POINTER]
|
|
2754
|
+
[--verbose]`
|
|
2755
|
+
- Options:
|
|
2756
|
+
- `--job-id` (required; kind=string)
|
|
2757
|
+
- `--type` (kind=string; choices=items,companies,leads,all): Result type to sync; defaults to the job kind
|
|
2758
|
+
- `--table-id` (kind=string): Existing Smart Table id for append/upsert
|
|
2759
|
+
- `--table-name` (kind=string): New Smart Table name when creating a table
|
|
2760
|
+
- `--table-mode` (kind=string; choices=create,append): Create a new table or append/upsert into --table-id
|
|
2761
|
+
- `--identity-key` (kind=string; default=auto): Dedupe identity key: auto, linkedin_url, linkedin_company_id, linkedin_company_url, or domain
|
|
2762
|
+
- `--dedupe-mode` (kind=string; choices=allow,skip,upsert; default=upsert): How to handle matching rows
|
|
2763
|
+
- `--merge-mode` (kind=string; choices=fill_empty,overwrite_mapped; default=fill_empty): How upserts merge values
|
|
2764
|
+
- `--allow-partial` (kind=boolean; when omitted=False; when present=True): Allow syncing before the list-build job is completed
|
|
2765
|
+
- `--wait` (kind=boolean; when omitted=False; when present=True): Poll until sync completes
|
|
2766
|
+
- `--poll-interval` (kind=integer; default=5): Polling interval seconds for --wait
|
|
2767
|
+
- `--wait-timeout` (kind=integer; default=0): Max seconds to wait (0 = no timeout)
|
|
2768
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
2769
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
2770
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
2771
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
2772
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
2773
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
2774
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
2775
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
2776
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
2777
|
+
|
|
2727
2778
|
### `onboarding`
|
|
2728
2779
|
|
|
2729
2780
|
#### `autotouch onboarding`
|
|
@@ -6057,7 +6108,7 @@ Update a webhook subscription
|
|
|
6057
6108
|
|
|
6058
6109
|
Goal-level workflow plans and scaffolds
|
|
6059
6110
|
|
|
6060
|
-
Use workflows for full user goals. Recipes are leaf templates; workflow plans describe the ordered path across
|
|
6111
|
+
Use workflows for full user goals. Autotouch workflows follow Source Records -> Land In Smart Table -> Research And Operate -> Engage. Recipes are leaf templates; workflow plans describe the ordered path across list building, imports/webhooks, Smart Table research, Leads, Sequences, CRM, and outreach destinations.
|
|
6061
6112
|
|
|
6062
6113
|
- Auth: `varies_by_subcommand`
|
|
6063
6114
|
- Stability: `stable`
|
|
@@ -6070,7 +6121,7 @@ Use workflows for full user goals. Recipes are leaf templates; workflow plans de
|
|
|
6070
6121
|
|
|
6071
6122
|
#### `autotouch workflows list`
|
|
6072
6123
|
|
|
6073
|
-
List common workflow blueprints
|
|
6124
|
+
List common workflow blueprints grouped by lifecycle stage
|
|
6074
6125
|
|
|
6075
6126
|
- Auth: `none`
|
|
6076
6127
|
- Stability: `stable`
|
|
@@ -6092,7 +6143,7 @@ List common workflow blueprints
|
|
|
6092
6143
|
|
|
6093
6144
|
Emit one goal-level workflow plan
|
|
6094
6145
|
|
|
6095
|
-
Plan the workflow before creating files or running side effects. Use this to choose
|
|
6146
|
+
Plan the workflow before creating files or running side effects. Use this to choose how records are sourced, landed in Smart Table, researched/operated on, and sent to the right engagement destination.
|
|
6096
6147
|
|
|
6097
6148
|
- Auth: `none`
|
|
6098
6149
|
- Stability: `stable`
|
|
@@ -6101,13 +6152,13 @@ Plan the workflow before creating files or running side effects. Use this to cho
|
|
|
6101
6152
|
- Output modes: `json, ndjson, human`
|
|
6102
6153
|
- Example:
|
|
6103
6154
|
- `autotouch workflows plan [-h]
|
|
6104
|
-
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6155
|
+
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6105
6156
|
[--out-file OUT_FILE]
|
|
6106
6157
|
[--output {json,ndjson,human}] [--compact]
|
|
6107
6158
|
[--select SELECT |
|
|
6108
6159
|
--json-pointer JSON_POINTER]`
|
|
6109
6160
|
- Options:
|
|
6110
|
-
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6161
|
+
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6111
6162
|
- `--out-file` (kind=file; input=file): Save raw workflow payload to file
|
|
6112
6163
|
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
6113
6164
|
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
@@ -6125,13 +6176,13 @@ Alias for `workflows plan`
|
|
|
6125
6176
|
- Output modes: `json, ndjson, human`
|
|
6126
6177
|
- Example:
|
|
6127
6178
|
- `autotouch workflows recipe [-h]
|
|
6128
|
-
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6179
|
+
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6129
6180
|
[--out-file OUT_FILE]
|
|
6130
6181
|
[--output {json,ndjson,human}] [--compact]
|
|
6131
6182
|
[--select SELECT |
|
|
6132
6183
|
--json-pointer JSON_POINTER]`
|
|
6133
6184
|
- Options:
|
|
6134
|
-
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6185
|
+
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6135
6186
|
- `--out-file` (kind=file; input=file): Save raw workflow payload to file
|
|
6136
6187
|
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
6137
6188
|
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
@@ -6149,13 +6200,13 @@ Emit ordered workflow files and commands for a blueprint
|
|
|
6149
6200
|
- Output modes: `json, ndjson, human`
|
|
6150
6201
|
- Example:
|
|
6151
6202
|
- `autotouch workflows scaffold [-h]
|
|
6152
|
-
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6203
|
+
--type {bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table}
|
|
6153
6204
|
[--out-dir OUT_DIR]
|
|
6154
6205
|
[--output {json,ndjson,human}] [--compact]
|
|
6155
6206
|
[--select SELECT |
|
|
6156
6207
|
--json-pointer JSON_POINTER]`
|
|
6157
6208
|
- Options:
|
|
6158
|
-
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6209
|
+
- `--type` (required; kind=string; choices=bulk-outreach,company-table-to-people,table-to-outreach,research-to-sequence,agent-to-sequence,agent-to-leads,account-research,signal-outreach,website-visitors,list-build-to-table): Workflow blueprint type
|
|
6159
6210
|
- `--out-dir` (kind=string): Directory to save scaffold payload files
|
|
6160
6211
|
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
6161
6212
|
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|