autotouch-cli 0.2.18__tar.gz → 0.2.20__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 (63) hide show
  1. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/PKG-INFO +99 -1
  2. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/PKG-INFO +99 -1
  3. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/docs/research-table/reference/autotouch-cli-pypi.md +98 -0
  4. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/pyproject.toml +1 -1
  5. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/smart_table_cli.py +7 -0
  6. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  7. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  8. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/entry_points.txt +0 -0
  9. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/requires.txt +0 -0
  10. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/autotouch_cli.egg-info/top_level.txt +0 -0
  11. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/__init__.py +0 -0
  12. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/add_column_unique_index.py +0 -0
  13. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/attach_csv_import_leads_to_research_table.py +0 -0
  14. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/bundle_sequences_backend.py +0 -0
  15. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/check_agent_traces.py +0 -0
  16. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/check_column_mode.py +0 -0
  17. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/exit_terminal_leads_from_sequences.py +0 -0
  18. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/fetch_lead.py +0 -0
  19. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/fix_lead_titles_from_csv.py +0 -0
  20. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250106_add_column_position.py +0 -0
  21. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250108_fix_legacy_column_fields.py +0 -0
  22. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250109_add_user_fields_to_tables.py +0 -0
  23. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250117_add_call_logs_webhook_indexes.py +0 -0
  24. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250117_rename_call_logs_collection.py +0 -0
  25. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250119_create_leads_unique_email_index.py +0 -0
  26. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250123_add_filter_indexes.py +0 -0
  27. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250123_add_llm_responses_collection.py +0 -0
  28. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250128_migrate_user_ids_to_objectid.py +0 -0
  29. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250208_backfill_task_research_values.py +0 -0
  30. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250604_add_origin_indexes.py +0 -0
  31. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250608_cleanup_agent_metadata.py +0 -0
  32. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250608_rename_agent_metadata_to_metadata.py +0 -0
  33. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250922_add_activity_indexes.py +0 -0
  34. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250926_migrate_single_to_arrays.py +0 -0
  35. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250928_add_missing_timestamp_fields.py +0 -0
  36. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250929_add_task_join_indexes.py +0 -0
  37. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250929_add_task_join_indexes_safe.py +0 -0
  38. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20250929_create_shared_phone_cache.py +0 -0
  39. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20251007_add_rows_position_id_index.py +0 -0
  40. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20251109_add_ttl_for_llm_and_preview_traces.py +0 -0
  41. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20260113_normalize_table_filter_operators.py +0 -0
  42. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20260113_set_user_permissions_user_admin.py +0 -0
  43. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20260204_sync_lead_owner_from_tasks.py +0 -0
  44. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/20260303_add_webhook_subscription_collections.py +0 -0
  45. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/migrate_org_user_credits.py +0 -0
  46. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/set_default_lead_status.py +0 -0
  47. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/migrations/update_lead_owner_from_tasks.py +0 -0
  48. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/reassign_sequence_owner.py +0 -0
  49. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/run_sidecar_orchestrator_demo.py +0 -0
  50. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/test_crm_company_policy.py +0 -0
  51. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/test_sequences_instantly_e2e.py +0 -0
  52. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/test_sequences_personal_e2e.py +0 -0
  53. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/test_task_error_logger.py +0 -0
  54. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/scripts/verify_azurite_voicemail.py +0 -0
  55. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/setup.cfg +0 -0
  56. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_custom.py +0 -0
  57. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_integration.py +0 -0
  58. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_multi_titles.py +0 -0
  59. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_pipeline.py +0 -0
  60. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_simple.py +0 -0
  61. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_contactout_v2_bulk.py +0 -0
  62. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/tests/test_lead_required_fields.py +0 -0
  63. {autotouch_cli-0.2.18 → autotouch_cli-0.2.20}/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.18
3
+ Version: 0.2.20
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Requires-Python: >=3.9
6
6
  Description-Content-Type: text/markdown
@@ -163,6 +163,38 @@ Notes:
163
163
  - `add_to_sequence` requires:
164
164
  - `sequenceId`
165
165
  - `sourceLeadColumn` pointing to a lead-id producing column (`add_to_crm` or `lead_finder` output)
166
+ - auto-attaches research context defaults during enrollment (`source_table_id`, plus optional table name); favorite fields resolve from current starred columns when explicit `fieldIds` are not provided
167
+
168
+ If you create custom `llm_enrichment` schemas:
169
+ - Use strict field-map schema shape (no root `type/properties` wrapper).
170
+ - Arrays must be explicit `{"type":"array","items":...}`.
171
+ - Avoid legacy/list schema values like `["string"]` or `[{...}]`.
172
+ - Prefer snake_case schema keys in payloads: `response_schema`, `user_schema`, `use_auto_schema`.
173
+
174
+ ## Parse enrichment outputs safely (important for agents)
175
+
176
+ Use a layered rule:
177
+
178
+ 1. Always inspect raw outputs first (sample at least 3 rows).
179
+ 2. Parse by column `dataType`:
180
+ - `json`: use key precedence below.
181
+ - scalar types (`text`, `number`, `date`, `boolean`, `email`, `url`): parse direct value (no JSON key paths).
182
+ 3. Only then publish found/missing counts.
183
+
184
+ Do not rely on a single key for JSON outputs.
185
+
186
+ - Phone extraction precedence: `mobile_number` -> `phone_numbers[0].number` -> `primary_phone`
187
+ - Email extraction precedence: `response` -> `email` -> `work_email`
188
+
189
+ If path A is missing, continue to B/C before declaring `not_found`.
190
+
191
+ JSON split note:
192
+ - Optional by default.
193
+ - Use only when downstream filters/mappings need stable flat keys.
194
+
195
+ Reference:
196
+ - `docs/research-table/guides/context-first-sequence-playbook.md`
197
+ - `docs/research-table/reference/runbooks/context-first-sequence.json`
166
198
 
167
199
  ## Recommended ICP buyer discovery pattern
168
200
 
@@ -195,6 +227,72 @@ Important:
195
227
  - These workflow routes support `actorUserId` query parameter.
196
228
  - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
197
229
 
230
+ ### Sequence step types and rules (quick reference)
231
+
232
+ Supported step kinds:
233
+ - `EMAIL`
234
+ - `CALL`
235
+ - `LINKEDIN`
236
+ - `LINKEDIN_CONNECT`
237
+ - `LINKEDIN_MESSAGE`
238
+ - `CUSTOM`
239
+
240
+ Email send modes:
241
+ - `AUTOMATED`
242
+ - `MANUAL`
243
+
244
+ External API validation rules:
245
+ - First email step cannot be reply (`first_email_reply_not_allowed`).
246
+ - Bulk mode cannot include manual email steps (`bulk_manual_email_not_allowed`).
247
+ - `aiDraft` is only allowed on manual-capable steps:
248
+ - `CALL`, `CUSTOM`, `LINKEDIN`, `LINKEDIN_CONNECT`, `LINKEDIN_MESSAGE`
249
+ - `EMAIL` only when `emailSendMode=MANUAL`
250
+ - `defaultAppendSignature` (sequence-level, optional) sets default signature behavior for email steps.
251
+ - `steps[].appendSignature` (step-level, optional) overrides signature behavior per email step.
252
+
253
+ Runtime behavior:
254
+ - `EMAIL + AUTOMATED` is sent by scheduler/provider flow.
255
+ - Manual/non-automated steps are created as Tasks for rep execution.
256
+
257
+ Minimal mixed-step example:
258
+
259
+ ```json
260
+ {
261
+ "name": "Outbound v1",
262
+ "sourceTableId": "tbl_123",
263
+ "defaultAppendSignature": true,
264
+ "steps": [
265
+ {
266
+ "id": "s1",
267
+ "kind": "EMAIL",
268
+ "emailSendMode": "AUTOMATED",
269
+ "emailIsReply": false,
270
+ "appendSignature": true,
271
+ "subjectTemplate": "Quick intro",
272
+ "bodyTemplate": "Hi {{first_name}}, ..."
273
+ },
274
+ {
275
+ "id": "s2",
276
+ "kind": "CALL",
277
+ "waitDays": 2,
278
+ "aiDraft": true
279
+ },
280
+ {
281
+ "id": "s3",
282
+ "kind": "EMAIL",
283
+ "waitDays": 4,
284
+ "emailSendMode": "MANUAL",
285
+ "emailIsReply": false,
286
+ "appendSignature": false,
287
+ "aiDraft": true
288
+ }
289
+ ]
290
+ }
291
+ ```
292
+
293
+ Canonical contract:
294
+ - `docs/platform/external-workflows-api.md`
295
+
198
296
  ## Outbound webhook subscriptions
199
297
 
200
298
  Use webhook subscriptions to receive customer-facing event notifications.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.18
3
+ Version: 0.2.20
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Requires-Python: >=3.9
6
6
  Description-Content-Type: text/markdown
@@ -163,6 +163,38 @@ Notes:
163
163
  - `add_to_sequence` requires:
164
164
  - `sequenceId`
165
165
  - `sourceLeadColumn` pointing to a lead-id producing column (`add_to_crm` or `lead_finder` output)
166
+ - auto-attaches research context defaults during enrollment (`source_table_id`, plus optional table name); favorite fields resolve from current starred columns when explicit `fieldIds` are not provided
167
+
168
+ If you create custom `llm_enrichment` schemas:
169
+ - Use strict field-map schema shape (no root `type/properties` wrapper).
170
+ - Arrays must be explicit `{"type":"array","items":...}`.
171
+ - Avoid legacy/list schema values like `["string"]` or `[{...}]`.
172
+ - Prefer snake_case schema keys in payloads: `response_schema`, `user_schema`, `use_auto_schema`.
173
+
174
+ ## Parse enrichment outputs safely (important for agents)
175
+
176
+ Use a layered rule:
177
+
178
+ 1. Always inspect raw outputs first (sample at least 3 rows).
179
+ 2. Parse by column `dataType`:
180
+ - `json`: use key precedence below.
181
+ - scalar types (`text`, `number`, `date`, `boolean`, `email`, `url`): parse direct value (no JSON key paths).
182
+ 3. Only then publish found/missing counts.
183
+
184
+ Do not rely on a single key for JSON outputs.
185
+
186
+ - Phone extraction precedence: `mobile_number` -> `phone_numbers[0].number` -> `primary_phone`
187
+ - Email extraction precedence: `response` -> `email` -> `work_email`
188
+
189
+ If path A is missing, continue to B/C before declaring `not_found`.
190
+
191
+ JSON split note:
192
+ - Optional by default.
193
+ - Use only when downstream filters/mappings need stable flat keys.
194
+
195
+ Reference:
196
+ - `docs/research-table/guides/context-first-sequence-playbook.md`
197
+ - `docs/research-table/reference/runbooks/context-first-sequence.json`
166
198
 
167
199
  ## Recommended ICP buyer discovery pattern
168
200
 
@@ -195,6 +227,72 @@ Important:
195
227
  - These workflow routes support `actorUserId` query parameter.
196
228
  - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
197
229
 
230
+ ### Sequence step types and rules (quick reference)
231
+
232
+ Supported step kinds:
233
+ - `EMAIL`
234
+ - `CALL`
235
+ - `LINKEDIN`
236
+ - `LINKEDIN_CONNECT`
237
+ - `LINKEDIN_MESSAGE`
238
+ - `CUSTOM`
239
+
240
+ Email send modes:
241
+ - `AUTOMATED`
242
+ - `MANUAL`
243
+
244
+ External API validation rules:
245
+ - First email step cannot be reply (`first_email_reply_not_allowed`).
246
+ - Bulk mode cannot include manual email steps (`bulk_manual_email_not_allowed`).
247
+ - `aiDraft` is only allowed on manual-capable steps:
248
+ - `CALL`, `CUSTOM`, `LINKEDIN`, `LINKEDIN_CONNECT`, `LINKEDIN_MESSAGE`
249
+ - `EMAIL` only when `emailSendMode=MANUAL`
250
+ - `defaultAppendSignature` (sequence-level, optional) sets default signature behavior for email steps.
251
+ - `steps[].appendSignature` (step-level, optional) overrides signature behavior per email step.
252
+
253
+ Runtime behavior:
254
+ - `EMAIL + AUTOMATED` is sent by scheduler/provider flow.
255
+ - Manual/non-automated steps are created as Tasks for rep execution.
256
+
257
+ Minimal mixed-step example:
258
+
259
+ ```json
260
+ {
261
+ "name": "Outbound v1",
262
+ "sourceTableId": "tbl_123",
263
+ "defaultAppendSignature": true,
264
+ "steps": [
265
+ {
266
+ "id": "s1",
267
+ "kind": "EMAIL",
268
+ "emailSendMode": "AUTOMATED",
269
+ "emailIsReply": false,
270
+ "appendSignature": true,
271
+ "subjectTemplate": "Quick intro",
272
+ "bodyTemplate": "Hi {{first_name}}, ..."
273
+ },
274
+ {
275
+ "id": "s2",
276
+ "kind": "CALL",
277
+ "waitDays": 2,
278
+ "aiDraft": true
279
+ },
280
+ {
281
+ "id": "s3",
282
+ "kind": "EMAIL",
283
+ "waitDays": 4,
284
+ "emailSendMode": "MANUAL",
285
+ "emailIsReply": false,
286
+ "appendSignature": false,
287
+ "aiDraft": true
288
+ }
289
+ ]
290
+ }
291
+ ```
292
+
293
+ Canonical contract:
294
+ - `docs/platform/external-workflows-api.md`
295
+
198
296
  ## Outbound webhook subscriptions
199
297
 
200
298
  Use webhook subscriptions to receive customer-facing event notifications.
@@ -154,6 +154,38 @@ Notes:
154
154
  - `add_to_sequence` requires:
155
155
  - `sequenceId`
156
156
  - `sourceLeadColumn` pointing to a lead-id producing column (`add_to_crm` or `lead_finder` output)
157
+ - auto-attaches research context defaults during enrollment (`source_table_id`, plus optional table name); favorite fields resolve from current starred columns when explicit `fieldIds` are not provided
158
+
159
+ If you create custom `llm_enrichment` schemas:
160
+ - Use strict field-map schema shape (no root `type/properties` wrapper).
161
+ - Arrays must be explicit `{"type":"array","items":...}`.
162
+ - Avoid legacy/list schema values like `["string"]` or `[{...}]`.
163
+ - Prefer snake_case schema keys in payloads: `response_schema`, `user_schema`, `use_auto_schema`.
164
+
165
+ ## Parse enrichment outputs safely (important for agents)
166
+
167
+ Use a layered rule:
168
+
169
+ 1. Always inspect raw outputs first (sample at least 3 rows).
170
+ 2. Parse by column `dataType`:
171
+ - `json`: use key precedence below.
172
+ - scalar types (`text`, `number`, `date`, `boolean`, `email`, `url`): parse direct value (no JSON key paths).
173
+ 3. Only then publish found/missing counts.
174
+
175
+ Do not rely on a single key for JSON outputs.
176
+
177
+ - Phone extraction precedence: `mobile_number` -> `phone_numbers[0].number` -> `primary_phone`
178
+ - Email extraction precedence: `response` -> `email` -> `work_email`
179
+
180
+ If path A is missing, continue to B/C before declaring `not_found`.
181
+
182
+ JSON split note:
183
+ - Optional by default.
184
+ - Use only when downstream filters/mappings need stable flat keys.
185
+
186
+ Reference:
187
+ - `docs/research-table/guides/context-first-sequence-playbook.md`
188
+ - `docs/research-table/reference/runbooks/context-first-sequence.json`
157
189
 
158
190
  ## Recommended ICP buyer discovery pattern
159
191
 
@@ -186,6 +218,72 @@ Important:
186
218
  - These workflow routes support `actorUserId` query parameter.
187
219
  - External sequence validation rules (manual vs automated vs AI draft constraints) are documented in the workflow reference above.
188
220
 
221
+ ### Sequence step types and rules (quick reference)
222
+
223
+ Supported step kinds:
224
+ - `EMAIL`
225
+ - `CALL`
226
+ - `LINKEDIN`
227
+ - `LINKEDIN_CONNECT`
228
+ - `LINKEDIN_MESSAGE`
229
+ - `CUSTOM`
230
+
231
+ Email send modes:
232
+ - `AUTOMATED`
233
+ - `MANUAL`
234
+
235
+ External API validation rules:
236
+ - First email step cannot be reply (`first_email_reply_not_allowed`).
237
+ - Bulk mode cannot include manual email steps (`bulk_manual_email_not_allowed`).
238
+ - `aiDraft` is only allowed on manual-capable steps:
239
+ - `CALL`, `CUSTOM`, `LINKEDIN`, `LINKEDIN_CONNECT`, `LINKEDIN_MESSAGE`
240
+ - `EMAIL` only when `emailSendMode=MANUAL`
241
+ - `defaultAppendSignature` (sequence-level, optional) sets default signature behavior for email steps.
242
+ - `steps[].appendSignature` (step-level, optional) overrides signature behavior per email step.
243
+
244
+ Runtime behavior:
245
+ - `EMAIL + AUTOMATED` is sent by scheduler/provider flow.
246
+ - Manual/non-automated steps are created as Tasks for rep execution.
247
+
248
+ Minimal mixed-step example:
249
+
250
+ ```json
251
+ {
252
+ "name": "Outbound v1",
253
+ "sourceTableId": "tbl_123",
254
+ "defaultAppendSignature": true,
255
+ "steps": [
256
+ {
257
+ "id": "s1",
258
+ "kind": "EMAIL",
259
+ "emailSendMode": "AUTOMATED",
260
+ "emailIsReply": false,
261
+ "appendSignature": true,
262
+ "subjectTemplate": "Quick intro",
263
+ "bodyTemplate": "Hi {{first_name}}, ..."
264
+ },
265
+ {
266
+ "id": "s2",
267
+ "kind": "CALL",
268
+ "waitDays": 2,
269
+ "aiDraft": true
270
+ },
271
+ {
272
+ "id": "s3",
273
+ "kind": "EMAIL",
274
+ "waitDays": 4,
275
+ "emailSendMode": "MANUAL",
276
+ "emailIsReply": false,
277
+ "appendSignature": false,
278
+ "aiDraft": true
279
+ }
280
+ ]
281
+ }
282
+ ```
283
+
284
+ Canonical contract:
285
+ - `docs/platform/external-workflows-api.md`
286
+
189
287
  ## Outbound webhook subscriptions
190
288
 
191
289
  Use webhook subscriptions to receive customer-facing event notifications.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "autotouch-cli"
7
- version = "0.2.18"
7
+ version = "0.2.20"
8
8
  description = "Autotouch Smart Table CLI"
9
9
  readme = "docs/research-table/reference/autotouch-cli-pypi.md"
10
10
  requires-python = ">=3.9"
@@ -51,6 +51,7 @@ TERMINAL_JOB_STATUSES = {
51
51
  "completed",
52
52
  "partial",
53
53
  "error",
54
+ "timed_out",
54
55
  "cancelled",
55
56
  "failed",
56
57
  "completed_with_errors",
@@ -246,16 +247,22 @@ COLUMN_RECIPE_NOTES: Dict[str, List[str]] = {
246
247
  RUN_SOP_GUIDE: Dict[str, Any] = {
247
248
  "title": "Credit-safe enrichment SOP",
248
249
  "rules": [
250
+ "Use --output json for automation; avoid parsing human-format output.",
249
251
  "Filter first before running billable columns.",
250
252
  "Estimate first with the same payload you plan to run.",
251
253
  "Start with a small firstN pilot before scaling.",
252
254
  "For exact bounded batches, prefer run-next with a small count.",
253
255
  "For add_to_crm, generate payload from columns recipe before create/update.",
254
256
  "Keep unprocessedOnly enabled unless you intentionally reprocess rows.",
257
+ "Treat bulk job state as source of truth: queued/distributing/processing are non-terminal; completed/partial/error/cancelled are terminal.",
258
+ "Always inspect raw outputs before summary counts; parse by column dataType (json vs scalar).",
259
+ "When summarizing enrichment outputs, parse by key precedence (phone: mobile_number -> phone_numbers[0].number -> primary_phone; email: response -> email -> work_email).",
255
260
  ],
256
261
  "clarifications": [
257
262
  "Email/phone enrichment does not require add_to_crm.",
258
263
  "add_to_crm is an optional export action to Leads CRM (non-billable).",
264
+ "For custom LLM schemas, use strict field-map shape (no root type/properties wrapper; arrays must use {type:\"array\",items:...}).",
265
+ "Do not report not_found from a single missing key when fallback keys exist.",
259
266
  ],
260
267
  "default_run_payload": {
261
268
  "scope": "filtered",
File without changes