Changelog
=========

0.2.0
------

Changed functionality:
- Run Utility, Run AI Agent and Run Machine Learning tasks now build
  runConfiguration.commandArgs automatically when saved. The utility's parameter
  definitions are fetched from the platform and the platform's own command-args
  service (POST /utility/command-args, the same code path the DataStar UI uses)
  produces the string, so the task launches with exactly the command line the UI
  would produce for the same values. Pass only
  utility_configuration={"properties": {...}} with native Python values: a list
  for columnSelect / multiselect / stringList parameters, True/False for a
  toggle, a number for a number. A commandArgs supplied in run_configuration is
  still used verbatim.
- Before anything is saved, a property the utility does not declare, a missing
  required parameter, a value of the wrong shape for its parameter type, or a
  rejection by the service raises ValueError. A task is never saved with
  malformed args. A task with no properties is saved without commandArgs.
- Macro.add_task() and add_tasks() save the copy the same way, so a copied
  task gets commandArgs built from its own properties.
- RunUtilityTask.build_command_args_from_properties() is deprecated. It no
  longer formats the string locally (that logic, which collapsed list values
  into one malformed argument and dropped False toggles, is removed) and now
  delegates to the command-args service. Its output for booleans changed: a
  toggle is emitted as "--flag true" / "--flag false" instead of a bare flag.
- dstar_tool create no longer emits a build_command_args_from_properties()
  call; multi-value parameters are scaffolded as Python lists.
- New optional env var OPTILOGIC_COMMAND_ARGS_API_URL sends only the
  command-args call to another platform host. Leave it unset normally.

0.1.0
------

New functionality:
- Added datastar.discovery: public access to the task-type and connector-type
  schemas the Datastar service publishes, with a description of every field
  (task_type_schemas(), connection_type_schemas(), TypeSchema). Schemas are
  fetched live and fall back to a copy bundled with the package.
- Exposed the type registries publicly (TASK_TYPES, CONNECTION_TYPES) plus
  task_class_for() / connection_class_for() lookups by service type name.
- Every task class declares TASK_TYPE and every connection class declares
  CONNECTION_TYPE (the service's type name); both expose get_schema().
- StartTask is now exported from datastar and datastar.tasks.

Changed functionality:
- Documented the shared configuration shapes in datastar.tasks.join_helper and
  the snake_case-argument / camelCase-wire convention on Task.
- Task.get_task_type() is implemented once on the base class from TASK_TYPE
  instead of being overridden in every subclass. Behaviour is unchanged.

0.0.24b1
--------

New functionality:
- Added new task types for building macros:
  - Select: query/join/filter into a destination table
  - Group By: aggregations with joins and filters
  - Run Macro: run another macro as a nested step
  - Run AI Agent
  - Run Machine Learning
  - Solve Model: trigger a model solve with a chosen solve mode and engine
- Added a new dstar_tool CLI for discovering available Datastar utilities
  and AI agent/ML jobs and generating ready-to-run scripts for them:
  - list: show available utilities, optionally filtered by category
  - create: generate a Python script pre-filled with a utility's parameters
  - file / raw: dump the full utility catalog to a file or stdout
  - docs: copy the bundled PDF guides to a local docs folder
  - examples: copy the bundled example scripts to a local examples folder
- Re-enabled the Excel (XLS) connector, which was previously non-functional.

Changed functionality:
- DSV connector: added several new properties:
  - header row
  - quote character
  - decimal separator
  - thousand separator
  - record limit
  - date format
  - null value handling
  - per-column configuration
- XLS connector: replaced the old sheet_name/workbook_password fields with a
  single, more flexible sheet_configs list.
- Import, Update, and Delete tasks now support structured filter conditions
  and explicit table joins, instead of a plain string filter.
- Task positions now use decimal coordinates, and tasks expose their
  validation status when read back.
- Import tasks no longer force a default "replace" behavior when writing to
  a destination table.

Fixes:
- Fixed a bug that made the run-utility task helper uncallable as documented.
