autotouch-cli 0.2.60__tar.gz → 0.2.61__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 (51) hide show
  1. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/PKG-INFO +1 -1
  2. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/columns.py +16 -1
  3. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/data/CLI_REFERENCE.md +15 -1
  4. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/data/cli-manifest.json +3 -3
  5. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/PKG-INFO +1 -1
  6. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_shared/provider_registry.py +43 -2
  7. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/pyproject.toml +1 -1
  8. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/MANIFEST.in +0 -0
  9. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/README.md +0 -0
  10. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/__init__.py +0 -0
  11. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/cli.py +0 -0
  12. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/cli_contracts.py +0 -0
  13. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/__init__.py +0 -0
  14. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/auth.py +0 -0
  15. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/cells.py +0 -0
  16. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/jobs.py +0 -0
  17. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/leads.py +0 -0
  18. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/linkedin.py +0 -0
  19. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/prompts.py +0 -0
  20. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/rows.py +0 -0
  21. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/search.py +0 -0
  22. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/sequences.py +0 -0
  23. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/tables.py +0 -0
  24. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/tasks.py +0 -0
  25. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/webhooks.py +0 -0
  26. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/commands/workspace_secrets.py +0 -0
  27. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/__init__.py +0 -0
  28. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/auth.py +0 -0
  29. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/config.py +0 -0
  30. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/csv_import.py +0 -0
  31. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/http.py +0 -0
  32. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/io.py +0 -0
  33. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/output.py +0 -0
  34. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/polling.py +0 -0
  35. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/run.py +0 -0
  36. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/core/validation.py +0 -0
  37. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/exceptions.py +0 -0
  38. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/mongo_status.py +0 -0
  39. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/parser.py +0 -0
  40. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/parser_groups.py +0 -0
  41. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/sequence_support.py +0 -0
  42. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli/templates.py +0 -0
  43. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  44. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  45. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/entry_points.txt +0 -0
  46. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/requires.txt +0 -0
  47. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_cli.egg-info/top_level.txt +0 -0
  48. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_shared/__init__.py +0 -0
  49. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_shared/linkedin_contract.py +0 -0
  50. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/autotouch_shared/search_contract.py +0 -0
  51. {autotouch_cli-0.2.60 → autotouch_cli-0.2.61}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.60
3
+ Version: 0.2.61
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
@@ -379,7 +379,22 @@ def register_columns_subcommands(
379
379
  add_api_common_arguments(pcl)
380
380
  pcl.set_defaults(func=handlers["list"])
381
381
 
382
- pcc = col_sub.add_parser("create", help="Create a column")
382
+ pcc = col_sub.add_parser(
383
+ "create",
384
+ help="Create a column",
385
+ description=(
386
+ "Create a column from a ColumnCreate payload.\n"
387
+ "For llm_enrichment, there are two valid authoring paths:\n"
388
+ "- generated path: send config.instructions and let the API compile config.advancedPrompt\n"
389
+ "- manual path: send config.advancedPrompt directly when you want exact prompt control"
390
+ ),
391
+ epilog=(
392
+ "Recommended flow for llm_enrichment:\n\n"
393
+ "autotouch columns recipe --type llm_enrichment --output human\n\n"
394
+ "The runnable prompt is always config.advancedPrompt before execution."
395
+ ),
396
+ formatter_class=argparse.RawDescriptionHelpFormatter,
397
+ )
383
398
  pcc.add_argument("--table-id", required=True)
384
399
  pcc.add_argument("--data-json", help="ColumnCreate payload JSON")
385
400
  pcc.add_argument("--data-file", help="ColumnCreate payload file path")
@@ -1,6 +1,6 @@
1
1
  # Autotouch CLI Reference
2
2
 
3
- Generated from the installed parser for `autotouch-cli` `0.2.60`.
3
+ Generated from the installed parser for `autotouch-cli` `0.2.61`.
4
4
  Manifest schema version: `2`.
5
5
 
6
6
  ## Output Modes
@@ -653,6 +653,11 @@ Column operations
653
653
 
654
654
  Create a column
655
655
 
656
+ Create a column from a ColumnCreate payload.
657
+ For llm_enrichment, there are two valid authoring paths:
658
+ - generated path: send config.instructions and let the API compile config.advancedPrompt
659
+ - manual path: send config.advancedPrompt directly when you want exact prompt control
660
+
656
661
  - Auth: `developer_key_or_user_session`
657
662
  - Stability: `stable`
658
663
  - Destructive: `no`
@@ -669,6 +674,15 @@ Create a column
669
674
  [--output {json,ndjson,human}] [--compact]
670
675
  [--select SELECT |
671
676
  --json-pointer JSON_POINTER] [--verbose]`
677
+ - Notes:
678
+
679
+ ```text
680
+ Recommended flow for llm_enrichment:
681
+
682
+ autotouch columns recipe --type llm_enrichment --output human
683
+
684
+ The runnable prompt is always config.advancedPrompt before execution.
685
+ ```
672
686
  - Options:
673
687
  - `--table-id` (required; kind=string)
674
688
  - `--data-json` (kind=json; input=json): ColumnCreate payload JSON
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.60",
2
+ "version": "0.2.61",
3
3
  "manifest_schema_version": 2,
4
4
  "entry_points": {
5
5
  "autotouch": "autotouch_cli.cli:main",
@@ -14777,8 +14777,8 @@
14777
14777
  "aliases": [],
14778
14778
  "group": "columns",
14779
14779
  "help": "Create a column",
14780
- "description": null,
14781
- "notes": null,
14780
+ "description": "Create a column from a ColumnCreate payload.\nFor llm_enrichment, there are two valid authoring paths:\n- generated path: send config.instructions and let the API compile config.advancedPrompt\n- manual path: send config.advancedPrompt directly when you want exact prompt control",
14781
+ "notes": "Recommended flow for llm_enrichment:\n\nautotouch columns recipe --type llm_enrichment --output human\n\nThe runnable prompt is always config.advancedPrompt before execution.",
14782
14782
  "required_flags": [
14783
14783
  "--table-id"
14784
14784
  ],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.60
3
+ Version: 0.2.61
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
@@ -158,6 +158,14 @@ def _mapping_text(value: Any) -> str:
158
158
  return _text(value)
159
159
 
160
160
 
161
+ def _llm_advanced_prompt_text(config: Dict[str, Any]) -> str:
162
+ return (
163
+ _text(config.get("advancedPrompt"))
164
+ or _text(config.get("advanced_prompt"))
165
+ or _text(config.get("prompt"))
166
+ )
167
+
168
+
161
169
  def _llm_provider_values() -> Tuple[str, ...]:
162
170
  return ("llm", "gemini", "xai", "openai", "anthropic", "groq")
163
171
 
@@ -378,13 +386,14 @@ _PROVIDER_CONTRACTS: Tuple[ResearchTableProviderContract, ...] = (
378
386
  },
379
387
  },
380
388
  recipe_notes=(
381
- "Recommended default for agent mode: provide instructions and let the API compile the runnable prompt.",
389
+ "The runnable prompt is always config.advancedPrompt before execution.",
390
+ "Generated path: provide instructions and let the API compile config.advancedPrompt for you.",
391
+ "Manual path: write config.advancedPrompt directly when you want exact control over the final prompt.",
382
392
  "When the platform generates the runnable prompt from instructions, keep useAutoSchema=true unless you intentionally want to own the schema yourself.",
383
393
  "Do not send user_schema/response_schema in that default generated-prompt path; prompt/schema drift is possible if you later change the generated prompt but keep a frozen custom schema.",
384
394
  "Basic is for extraction, scoring, or classification using fields already in the row. Agent is for tasks that may need outside lookup or web research.",
385
395
  "Create/update always materializes the runnable prompt into config.advancedPrompt before execution.",
386
396
  "Generated agent-mode prompts always include company/requester context.",
387
- "Basic mode stays manual-prompt-first; write the prompt directly from the user goal/preferences.",
388
397
  "Runtime only injects values for placeholders the prompt explicitly references.",
389
398
  "Manual/basic prompts should use explicit placeholders like {{company_name}}, {{domain}}, or {{user_value_proposition}} when those values are needed.",
390
399
  "Agent mode is JSON-oriented.",
@@ -1357,6 +1366,38 @@ def validate_column_provider_contract(
1357
1366
  )
1358
1367
  return contract
1359
1368
 
1369
+ if contract.key == "llm":
1370
+ prompt_source = _normalize(cfg.get("promptSource") or cfg.get("prompt_source"))
1371
+ instructions = _text(cfg.get("instructions"))
1372
+ advanced_prompt = _llm_advanced_prompt_text(cfg)
1373
+
1374
+ if prompt_source == "generated":
1375
+ if not instructions:
1376
+ raise ProviderContractValidationError(
1377
+ "missing_required_field",
1378
+ "Generated LLM prompt mode requires config.instructions.",
1379
+ hint="Use instructions for shorthand/high-level intent, or switch to config.promptSource='manual' and write config.advancedPrompt directly.",
1380
+ )
1381
+ return contract
1382
+
1383
+ if prompt_source == "manual":
1384
+ if not advanced_prompt:
1385
+ raise ProviderContractValidationError(
1386
+ "missing_required_field",
1387
+ "Manual LLM prompt mode requires config.advancedPrompt.",
1388
+ hint="Write config.advancedPrompt directly, or remove config.promptSource and supply config.instructions for the generated path.",
1389
+ )
1390
+ return contract
1391
+
1392
+ if instructions or advanced_prompt:
1393
+ return contract
1394
+
1395
+ raise ProviderContractValidationError(
1396
+ "missing_required_field",
1397
+ "LLM enrichment columns require either config.instructions or config.advancedPrompt.",
1398
+ hint="Use instructions for the generated path or write config.advancedPrompt directly for the manual path.",
1399
+ )
1400
+
1360
1401
  if contract.key == "add_to_sequence":
1361
1402
  if not _text(cfg.get("sequenceId")):
1362
1403
  raise ProviderContractValidationError(
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "autotouch-cli"
7
- version = "0.2.60"
7
+ version = "0.2.61"
8
8
  description = "Autotouch Smart Table CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes