autotouch-cli 0.2.28__tar.gz → 0.2.31__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.28 → autotouch_cli-0.2.31}/PKG-INFO +154 -23
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli/cli.py +924 -10
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/PKG-INFO +154 -23
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/SOURCES.txt +1 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/docs/research-table/reference/autotouch-cli.md +153 -22
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/pyproject.toml +1 -1
- autotouch_cli-0.2.31/tests/test_column_prompt_compiler.py +178 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli/__init__.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/dependency_links.txt +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/entry_points.txt +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/requires.txt +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/autotouch_cli.egg-info/top_level.txt +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/setup.cfg +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_custom.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_integration.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_multi_titles.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_pipeline.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_simple.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_contactout_v2_bulk.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_lead_required_fields.py +0 -0
- {autotouch_cli-0.2.28 → autotouch_cli-0.2.31}/tests/test_phone_provider_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autotouch-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.31
|
|
4
4
|
Summary: Autotouch Smart Table CLI
|
|
5
5
|
Requires-Python: >=3.9
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -21,7 +21,7 @@ Use this order when you are orienting in the CLI:
|
|
|
21
21
|
2. Use the API endpoint -> CLI command map when translating an existing API workflow.
|
|
22
22
|
3. Use `autotouch columns recipe` before creating provider-backed workflow columns.
|
|
23
23
|
4. Use `autotouch jobs get` as the source of truth for async run state.
|
|
24
|
-
5. Use `autotouch sequences ...` for sequence definitions
|
|
24
|
+
5. Use `autotouch sequences ...` for sequence definitions/enrollments and `autotouch tasks ...` for task queue work.
|
|
25
25
|
|
|
26
26
|
### Quick decision guide
|
|
27
27
|
|
|
@@ -39,17 +39,19 @@ Use this order when you are orienting in the CLI:
|
|
|
39
39
|
| create/manage sequence definitions directly | `autotouch sequences recipe`, then `autotouch sequences create/update/activate` |
|
|
40
40
|
| enroll leads directly into a sequence | `autotouch sequences enroll --sequence-id <SEQUENCE_ID> ...` |
|
|
41
41
|
| enroll table rows into an existing sequence | `autotouch columns recipe --type add_to_sequence`, then `autotouch columns create` + `autotouch columns run` |
|
|
42
|
+
| seed org context from a company website | `autotouch onboarding submit-domain --website acme.com` |
|
|
43
|
+
| inspect or update org/personal value prop context | `autotouch org-context get/set`, `autotouch personal-context get/set`, `autotouch context resolved` |
|
|
42
44
|
| create or update a CRM lead | `autotouch leads recipe --type create`, then `autotouch leads create` / `autotouch leads update` |
|
|
43
45
|
| add email or phone contact info to a lead | `autotouch leads recipe --type contact_upsert`, then `autotouch leads upsert-contact-channels --lead-id <LEAD_ID> ...` |
|
|
44
46
|
| bulk update lead status or owner | `autotouch leads update-status` / `autotouch leads reassign-owner` |
|
|
45
|
-
| manage tasks directly |
|
|
47
|
+
| manage tasks directly | `autotouch tasks query`, `autotouch tasks get`, `autotouch tasks update`, `autotouch tasks draft` |
|
|
46
48
|
| query/filter CRM leads and attached research | `autotouch leads query` then `autotouch leads research` |
|
|
47
49
|
|
|
48
50
|
### Operating model
|
|
49
51
|
|
|
50
52
|
- This file is the full CLI reference and the package readme published to PyPI.
|
|
51
53
|
- The installed package gives you CLI entrypoints and package metadata; do not assume there is a separate installed docs directory.
|
|
52
|
-
- Research-table APIs, sequence commands,
|
|
54
|
+
- Research-table APIs, sequence commands, lead create/query/update operations, and public task-queue workflows are first-class CLI surface areas today.
|
|
53
55
|
- For async operations, backend bulk-job state is authoritative; local terminal output is only a convenience layer.
|
|
54
56
|
- For staged or cost-sensitive runs, estimate first and prefer filtered scopes plus `firstN` or `run-next`.
|
|
55
57
|
|
|
@@ -69,6 +71,13 @@ Developer keys and scopes are identical to raw API usage (`stk_...`, same scope
|
|
|
69
71
|
autotouch auth set-key --api-key stk_... --base-url https://app.autotouch.ai
|
|
70
72
|
autotouch auth check
|
|
71
73
|
autotouch auth show
|
|
74
|
+
autotouch auth whoami
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
For user/admin endpoints like onboarding, org context, and personal context, sign in with a user session too:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
autotouch auth login --email ada@yourcompany.com
|
|
72
81
|
```
|
|
73
82
|
|
|
74
83
|
Credentials are stored in `~/.config/autotouch/config.json` by default.
|
|
@@ -82,28 +91,46 @@ Developer key scope reference (including workflow scopes like `sequences:*` and
|
|
|
82
91
|
If an agent/user does not have an account + developer key yet, bootstrap both in one call:
|
|
83
92
|
|
|
84
93
|
```bash
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
"organization_name": "Your Company",
|
|
93
|
-
"key_name": "Agent bootstrap key"
|
|
94
|
-
}'
|
|
94
|
+
autotouch auth bootstrap \
|
|
95
|
+
--first-name Ada \
|
|
96
|
+
--last-name Lovelace \
|
|
97
|
+
--email ada@yourcompany.com \
|
|
98
|
+
--password 'use-a-strong-random-password' \
|
|
99
|
+
--organization-name "Your Company" \
|
|
100
|
+
--save-key
|
|
95
101
|
```
|
|
96
102
|
|
|
97
|
-
|
|
103
|
+
Or pass a full payload file:
|
|
98
104
|
|
|
99
105
|
```bash
|
|
100
|
-
autotouch auth
|
|
101
|
-
autotouch auth check
|
|
106
|
+
autotouch auth bootstrap --data-file bootstrap.json --save-key
|
|
102
107
|
```
|
|
103
108
|
|
|
104
109
|
Notes:
|
|
105
110
|
- New orgs created through signup/bootstrap start with `50` credits.
|
|
111
|
+
- `--save-key` stores the returned `apiKey` and also signs in the same user so the saved config has both the developer key and the user session.
|
|
106
112
|
- Identity linking is email-based: later human sign-in with the same normalized email maps to the same user/org.
|
|
113
|
+
- `auth whoami` shows which user/org the saved session belongs to.
|
|
114
|
+
|
|
115
|
+
## Onboarding and context
|
|
116
|
+
|
|
117
|
+
Recommended setup for agent-mode LLM enrichment:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
autotouch auth login --email ada@yourcompany.com
|
|
121
|
+
autotouch onboarding submit-domain --website yourcompany.com
|
|
122
|
+
autotouch org-context get
|
|
123
|
+
autotouch personal-context get
|
|
124
|
+
autotouch context resolved
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Notes:
|
|
128
|
+
- `submit-domain` seeds organization context from the company website.
|
|
129
|
+
- `org-context set` is where you refine value proposition, ideal titles, buyer persona, user persona, and voice profile.
|
|
130
|
+
- `personal-context set` is where you refine rep-specific title, territories, personal value proposition, and personal voice profile.
|
|
131
|
+
- `context resolved` shows the effective requester context the enrichment/runtime layer will actually use after org + personal overrides.
|
|
132
|
+
- Agent-mode prompt generation and compiled LLM enrichment prompts always include requester/company context.
|
|
133
|
+
- Basic mode stays manual-prompt-first; write the prompt directly based on the user goal/preferences and include explicit placeholders when row data should be referenced.
|
|
107
134
|
|
|
108
135
|
## API endpoint -> CLI command map
|
|
109
136
|
|
|
@@ -170,7 +197,26 @@ Notes:
|
|
|
170
197
|
| `POST /api/webhook-subscriptions/{subscription_id}/resume` | `autotouch webhooks subscriptions resume --subscription-id <SUBSCRIPTION_ID>` |
|
|
171
198
|
| `POST /api/webhook-subscriptions/{subscription_id}/rotate-secret` | `autotouch webhooks subscriptions rotate-secret --subscription-id <SUBSCRIPTION_ID>` |
|
|
172
199
|
| `POST /api/webhook-subscriptions/{subscription_id}/test` | `autotouch webhooks subscriptions test --subscription-id <SUBSCRIPTION_ID>` |
|
|
173
|
-
| `POST /api/auth/agent-bootstrap` |
|
|
200
|
+
| `POST /api/auth/agent-bootstrap` | `autotouch auth bootstrap --data-file bootstrap.json --save-key` |
|
|
201
|
+
| `POST /api/auth/login` | `autotouch auth login --email ada@yourcompany.com` |
|
|
202
|
+
| `POST /api/onboarding/submit-domain` | `autotouch onboarding submit-domain --website yourcompany.com` |
|
|
203
|
+
| `GET /api/org/context` | `autotouch org-context get` |
|
|
204
|
+
| `POST /api/org/context` | `autotouch org-context set --data-file org-context.json` |
|
|
205
|
+
| `GET /api/onboarding/personal-context` | `autotouch personal-context get` |
|
|
206
|
+
| `POST /api/onboarding/personal-context` | `autotouch personal-context set --data-file personal-context.json` |
|
|
207
|
+
| `GET /api/llm/company-context` | `autotouch context resolved` |
|
|
208
|
+
| `POST /api/task-queue/query` | `autotouch tasks query --data-file task-query.json` |
|
|
209
|
+
| `POST /api/task-queue/query/count` | `autotouch tasks count --data-file task-query.json` |
|
|
210
|
+
| `POST /api/task-queue/assignee-counts` | `autotouch tasks assignee-counts --data-file task-query.json` |
|
|
211
|
+
| `GET /api/task-queue/{task_id}` | `autotouch tasks get --task-id <TASK_ID>` |
|
|
212
|
+
| `GET /api/task-queue/stats/summary` | `autotouch tasks stats` |
|
|
213
|
+
| `POST /api/task-queue/create` | `autotouch tasks create --data-file task-create.json --actor-user-id <USER_ID>` |
|
|
214
|
+
| `PUT /api/task-queue/{task_id}` | `autotouch tasks update --task-id <TASK_ID> --data-file task-update.json --actor-user-id <USER_ID>` |
|
|
215
|
+
| `DELETE /api/task-queue/{task_id}` | `autotouch tasks delete --task-id <TASK_ID> --actor-user-id <USER_ID>` |
|
|
216
|
+
| `POST /api/task-queue/bulk-update` | `autotouch tasks bulk-update --data-file task-bulk-update.json --actor-user-id <USER_ID>` |
|
|
217
|
+
| `POST /api/task-queue/bulk-delete` | `autotouch tasks bulk-delete --data-file task-bulk-delete.json --actor-user-id <USER_ID>` |
|
|
218
|
+
| `POST /api/task-queue/{task_id}/draft` | `autotouch tasks draft --task-id <TASK_ID> --force --actor-user-id <USER_ID>` |
|
|
219
|
+
| `POST /api/task-queue/{task_id}/email/schedule` | `autotouch tasks schedule-email --task-id <TASK_ID> --data-file schedule.json --actor-user-id <USER_ID>` |
|
|
174
220
|
|
|
175
221
|
## Delete column
|
|
176
222
|
|
|
@@ -188,7 +234,6 @@ autotouch columns delete --table-id <TABLE_ID> --column-id <COLUMN_ID> --yes
|
|
|
188
234
|
## Sequence commands
|
|
189
235
|
|
|
190
236
|
The CLI now exposes the public Sequences endpoints under `autotouch sequences`.
|
|
191
|
-
Tasks still use raw HTTP plus `docs/platform/external-workflows-api.md`.
|
|
192
237
|
|
|
193
238
|
Common commands:
|
|
194
239
|
- `autotouch sequences recipe --type create --out-file sequence.json`
|
|
@@ -215,7 +260,6 @@ Important contract notes:
|
|
|
215
260
|
- `autotouch sequences enroll --wait` polls `/api/bulk-jobs/{job_id}` and preserves the API response `task_id` as the bulk job id.
|
|
216
261
|
- Research-table `add_to_sequence` is still available through `autotouch columns create/update/run` and still targets an existing sequence.
|
|
217
262
|
- Real enrollment requires the target sequence to be `ACTIVE` unless direct enroll uses `reviewOnly=true`.
|
|
218
|
-
- Tasks remain HTTP-only.
|
|
219
263
|
|
|
220
264
|
AI draft outputs:
|
|
221
265
|
- Manual new email: subject + body
|
|
@@ -379,6 +423,60 @@ autotouch leads filters-metadata
|
|
|
379
423
|
autotouch leads research-tables
|
|
380
424
|
```
|
|
381
425
|
|
|
426
|
+
## Task commands
|
|
427
|
+
|
|
428
|
+
The CLI now exposes the public task queue endpoints under `autotouch tasks`.
|
|
429
|
+
|
|
430
|
+
Use this pattern:
|
|
431
|
+
|
|
432
|
+
1. `autotouch tasks query` to page through tasks with the same `TaskQueryRequest` payload used by the API.
|
|
433
|
+
2. `autotouch tasks get` when you need one fully hydrated task by id.
|
|
434
|
+
3. `autotouch tasks create` for direct task creation from a JSON payload.
|
|
435
|
+
4. `autotouch tasks update` / `autotouch tasks bulk-update` for task status, owner, due date, and content changes.
|
|
436
|
+
5. `autotouch tasks draft` when you need just-in-time AI generation for a manual-capable task.
|
|
437
|
+
6. `autotouch tasks schedule-email` to schedule or immediately send a personal/manual email task.
|
|
438
|
+
7. `autotouch tasks delete` / `autotouch tasks bulk-delete` to soft-delete tasks by marking them skipped.
|
|
439
|
+
|
|
440
|
+
Important contract notes:
|
|
441
|
+
- Mutating task commands accept `--actor-user-id` for developer-key actor resolution.
|
|
442
|
+
- Query/count/assignee-counts use the backend `TaskQueryRequest` JSON shape directly.
|
|
443
|
+
- `draft` supports `--force` if you want to re-generate content even when a task already has content.
|
|
444
|
+
- `schedule-email` expects the same payload as `POST /api/task-queue/{task_id}/email/schedule`.
|
|
445
|
+
- AI draft outputs follow the same step behavior as sequences:
|
|
446
|
+
- manual new email: subject + body
|
|
447
|
+
- manual reply email: reply body
|
|
448
|
+
- LinkedIn connect: connection note
|
|
449
|
+
- LinkedIn message: message copy
|
|
450
|
+
- call: call script
|
|
451
|
+
|
|
452
|
+
Examples:
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
autotouch tasks query --data-file task-query.json
|
|
456
|
+
autotouch tasks count --data-file task-query.json
|
|
457
|
+
autotouch tasks assignee-counts --data-file task-query.json
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
autotouch tasks get --task-id <TASK_ID>
|
|
462
|
+
autotouch tasks stats
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
autotouch tasks create --data-file task-create.json --actor-user-id <USER_ID>
|
|
467
|
+
autotouch tasks update --task-id <TASK_ID> --data-file task-update.json --actor-user-id <USER_ID>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
autotouch tasks draft --task-id <TASK_ID> --force --actor-user-id <USER_ID>
|
|
472
|
+
autotouch tasks schedule-email --task-id <TASK_ID> --data-file schedule.json --actor-user-id <USER_ID>
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
```bash
|
|
476
|
+
autotouch tasks bulk-update --data-file task-bulk-update.json --actor-user-id <USER_ID>
|
|
477
|
+
autotouch tasks bulk-delete --data-file task-bulk-delete.json --actor-user-id <USER_ID>
|
|
478
|
+
```
|
|
479
|
+
|
|
382
480
|
## Bulk job status contract (authoritative run state)
|
|
383
481
|
|
|
384
482
|
Use bulk jobs as the source of truth for run lifecycle:
|
|
@@ -496,6 +594,8 @@ Recommendation:
|
|
|
496
594
|
|
|
497
595
|
### 4) `llm_enrichment`
|
|
498
596
|
|
|
597
|
+
Recommended for `agent` mode: use `instructions` and let the API compile the runnable prompt. In `basic` mode, write the prompt directly and keep it tailored to the user goal/preferences.
|
|
598
|
+
|
|
499
599
|
`llm-enrichment.json`:
|
|
500
600
|
|
|
501
601
|
```json
|
|
@@ -507,17 +607,48 @@ Recommendation:
|
|
|
507
607
|
"origin": "ai",
|
|
508
608
|
"autoRun": "never",
|
|
509
609
|
"config": {
|
|
510
|
-
"
|
|
610
|
+
"instructions": "Research the company in this row and return JSON with icp_fit, summary, and risks.",
|
|
511
611
|
"mode": "agent",
|
|
512
612
|
"temperature": 0.7,
|
|
513
613
|
"batchSize": 50,
|
|
514
|
-
"promptSource": "
|
|
614
|
+
"promptSource": "generated",
|
|
615
|
+
"useCompanyContext": true,
|
|
515
616
|
"structuredOutput": true,
|
|
516
617
|
"useAutoSchema": true
|
|
517
618
|
}
|
|
518
619
|
}
|
|
519
620
|
```
|
|
520
621
|
|
|
622
|
+
Notes:
|
|
623
|
+
- In `agent` mode, `instructions` is the recommended authoring surface.
|
|
624
|
+
- The API compiles those instructions into the stored runnable prompt on create/update.
|
|
625
|
+
- Company/requester context is always enabled for generated `agent`-mode prompts.
|
|
626
|
+
- In `basic` mode, the recommended path is a hand-authored prompt. Use explicit placeholders like `{{company_name}}`, `{{domain}}`, or requester context placeholders from `autotouch context resolved` when the prompt should reference row/requester data.
|
|
627
|
+
|
|
628
|
+
Prompt variables:
|
|
629
|
+
- Row variables come from the current table row, for example `{{company_name}}`, `{{domain}}`, `{{first_name}}`, `{{linkedin_url}}`.
|
|
630
|
+
- Requester/company-context variables come from onboarding + org/personal context, for example `{{user_company_name}}`, `{{user_value_proposition}}`, `{{buyer_persona}}`, `{{user_persona}}`.
|
|
631
|
+
- The runtime only injects variables that the prompt explicitly references. If the prompt needs row/context data, include those `{{...}}` placeholders directly.
|
|
632
|
+
- Use `autotouch context resolved` to inspect the requester/company-context variables available for the current user/session.
|
|
633
|
+
|
|
634
|
+
Basic-mode example:
|
|
635
|
+
|
|
636
|
+
```json
|
|
637
|
+
{
|
|
638
|
+
"key": "fit_summary",
|
|
639
|
+
"label": "Fit Summary",
|
|
640
|
+
"kind": "enrichment",
|
|
641
|
+
"dataType": "text",
|
|
642
|
+
"origin": "ai",
|
|
643
|
+
"autoRun": "never",
|
|
644
|
+
"config": {
|
|
645
|
+
"mode": "basic",
|
|
646
|
+
"prompt": "Write a short fit summary for {{company_name}} (website {{domain}}) and explain why it matches {{user_value_proposition}}.",
|
|
647
|
+
"useCompanyContext": true
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
```
|
|
651
|
+
|
|
521
652
|
If you provide a custom schema, use strict Schema V2 field-map shape:
|
|
522
653
|
|
|
523
654
|
```json
|
|
@@ -738,7 +869,7 @@ Sequence creation note:
|
|
|
738
869
|
- The CLI can create/update/activate sequence definitions directly with `autotouch sequences ...`.
|
|
739
870
|
- Research-table `add_to_sequence` columns and direct `autotouch sequences enroll` both target an existing sequence.
|
|
740
871
|
- Real enrollment still requires that sequence to be `ACTIVE` unless direct enroll uses `reviewOnly=true`.
|
|
741
|
-
-
|
|
872
|
+
- Downstream task queue work is available through `autotouch tasks ...`.
|
|
742
873
|
|
|
743
874
|
## Safe run patterns (`firstN` + `--unprocessed-only`)
|
|
744
875
|
|