Revision history for Perl extension App-Greple-xlate

2.01 2026-07-09T05:59:30Z

    - Renew the `xlate` command-line front-end for the 2.0 module.
      Incompatible changes in the `xlate` command (the -Mxlate module
      interface is unchanged):
        * The default engine changes from deepl to gpt5.  Cache file
          names include the engine name, so run with `-e deepl` to keep
          using DeepL for existing documents.
        * API translation is now the default.  The clipboard-based
          manual translation mode is now `--no-api` (`-a`/`--api`
          remains valid as an explicit default).
        * `-n` is now a counting flag: once prints the composed greple
          command as before, twice (`-nn`) runs it with --xlate-dryrun
          to preview the transmission payload without calling the API.
    - Add first-class `xlate` options for the 2.0 module features:
      --anonymize, --mark, --template, --frontmatter, --seed and
      --context, mapping to the corresponding --xlate-* options.
    - share/XLATE.mk defaults to gpt5 and carries the new options via
      XLATE_ANONYMIZE, XLATE_MARK, XLATE_TEMPLATE, XLATE_FRONTMATTER,
      XLATE_SEED and XLATE_CONTEXT_WINDOW; a per-file FILE.ANONYMIZE
      control file is used as that file's anonymization dictionary.
    - Fix: --xlate-dryrun no longer prints "!!! TRANSLATION ERROR !!!"
      for cache misses with a substituting output format.
    - Fix: --xlate-dryrun combined with --xlate-cache=clear no longer
      truncates the on-disk cache file.
    - Fix a stray masking tag left in the Korean DeepL documentation.

2.00 2026-07-06T19:58:24Z

    - New llm backend: the gpt5 engine now calls the general-purpose
      llm command (https://llm.datasette.io/) instead of gpty.  The
      gpty-based engines (gpt3, gpt4, gpt4o) are retained under the
      gpty namespace; engine names are resolved backend-first (llm,
      then gpty, then bare).  Use --xlate-setopt backend=gpty to force
      a specific backend.
    - Context-aware differential translation: when a cached document
      is edited, each changed region is translated in its own API call
      together with the surrounding translated pairs, the raw source
      text around the change, and the previous translation of the
      edited part, so unchanged wording is preserved.  Controlled by
      --xlate-context-window (default 2, set 0 to disable).
    - Anonymization: conceal sensitive strings from the translation
      API with --xlate-anonymize (JSON or line-format dictionary) or
      --xlate-anonymize-mark (inline first-occurrence marks).  Strings
      are replaced by category tags like <person id=1 /> during
      transmission and restored in the output; local cache files keep
      restored plain text.
    - Template support: --xlate-template protects Jinja2-style
      expressions as opaque placeholders and verifies that they
      survive translation; --xlate-frontmatter excludes YAML front
      matter from translation and anonymizes its values.  Designed to
      work with macro processors such as pandoc-embedz.
    - Add --xlate-cache-seed to initialize a new document's cache from
      another document's cache file (useful for periodic reports).
    - Behavior change: the progress From display and the --xlate-dryrun
      preview now show each payload as transmitted, after anonymization
      and masking.
    - A failed translation run no longer discards cache data: results
      already obtained are saved and the cache file is left untouched
      afterward.
    - Fix cache lookup bugs: duplicate normalized keys could fake
      cache hits, and default settings were shared between cache
      objects.
    - Revise the manual for the new engine layout; document the
      previously missing --xlate-dryrun and --xlate-from options and
      the GREPLE_XLATE_CACHE environment variable.
    - Move the generated multilingual documentation from docs/ to
      i18n/; docs/ now holds development documentation only.

1.0202 2026-06-17T09:49:59Z

    - Revert gpt5 default batch size to 3000 chars; 10000 made large
      translations (e.g. FR/KO) exceed the gpty 60s timeout
    - Install Docker Python tools (deepl, gpty, llm) into a venv so the image
      builds on Ubuntu 26.04, whose system Python is externally-managed (PEP 668)

1.0201 2026-06-17T08:10:25Z

    - Install libcrypt-dev in the Docker image so XS modules build against
      perl 5.40+ (Ubuntu 26.04); fixes the image build broken by a missing
      crypt.h

1.02 2026-06-17T07:17:31Z

    - Update the gpt5 engine to use OpenAI's gpt-5.5 model by default,
      with reasoning_effort "none" and tuned batch and output token limits
    - Make the gpt5 engine honor the --xlate-maxline option
    - Remove the gpt4 engine from the documentation; the gpt4.pm module is
      retained and still usable via --xlate-engine=gpt4

1.01 2026-03-11T07:21:18Z

    - Replace embedded getoptlong.sh with Getopt::Long::Bash module
    - Fix option parsing to stop at first non-option argument (PERMUTE)
    - Add documentation about DeepL next-gen model behavior changes
    - Fix MASKPATTERN markup in documentation

1.00 2026-01-23T01:53:06Z

    - Replace App::cdif::Command with Command::Run
    - Remove App::sdif dependency from cpanfile
    - Reorganize SEE ALSO section structure in documentation

0.9924 2025-12-20T00:41:26Z

    - fix test failure in CPAN test environment (add perl bin to PATH)

0.9923 2025-12-19T10:15:57Z

    - Docker build improvements:
      * use git clone with submodules instead of cpanm direct install
      * introduce COMMIT and TAG build arguments for clearer separation
      * only clone share/getoptlong submodule (skip t/runner)
    - Makefile simplification:
      * use dozo for container execution
      * add latest tag alongside version tag
    - change t/runner submodule URL from SSH to HTTPS

0.9922 2025-12-15T07:10:27Z

    - improve dozo help message formatting (consistent spacing and argument notation)
    - add docker run execution info display in dozo (image, env count, container, command)
    - implement debug mode in dozo (-d shows full docker command, unaffected by -q)
    - separate trace option: dozo uses -x, xlate uses --trace only (keep -t for --to-lang)
    - add debug() function for debug output independent of quiet mode

0.9921 2025-12-15T00:16:56Z

    - fix -D option to override -I from .dozorc (use hook)

0.9920 2025-12-14T10:42:27Z

    - fix dist_dir to not load App::Greple::xlate module
      (avoids Text::ANSI::Fold dependency error in CPAN test)
    - simplify dockopt array construction in dozo
    - use prove -b in GitHub Actions for CPAN-like test environment

0.9919 2025-12-14T07:00:34Z

    - rename xrun to dozo (Docker Zone)
    - fix .dozorc parsing to handle quoted arguments using xargs
    - use POD for dozo help output
    - add USAGE section with practical examples

0.9918 2025-12-14T02:43:25Z

    - add --version option to xrun
    - add -D/--default option and XRUN_DEFAULT_IMAGE env for default image
    - improve test isolation from .xrunrc files

0.9917 2025-12-13T15:04:34Z

    - use native ARM64 runner for faster Docker image builds
    - add concurrency control to Docker workflow
    - add xrun to release hook for automatic version updates
    - move API and Docker tests to xt/author to prevent
      unintended API calls and image downloads during cpanm install

0.9916 2025-12-13T13:24:26Z

    - implement GNU-style long options using getoptlong.sh library
    - all options now have both short and long forms
      (e.g., -t/--to-lang, -e/--engine, -f/--file)
    - extract xrun as standalone Docker runner script
    - xrun supports .xrunrc for default container settings

0.9915 2025-11-14T01:11:02Z

    - add Arabic document
    - add llm-openrouter in docker image

0.9914 2025-10-08T11:10:18Z

    - add GPT-5 engine support to documentation
    - add llm version display to Docker build
    - include gpt5 translations in docs

0.9913 2025-10-07T08:29:37Z

    - introduce --xlate-context option
    - update gpt5 module to include contexts in system prompt
    - update gpt5.pm documentation with latest API specifications
    - improve script/xlate documentation clarity

0.9912 2025-05-07T06:49:43Z

    - fix mask/unmask behabior
    - use JSON format for translation interface
    - udpate examples/Makefile
    - use deepl and gpt4 (gpt-4.1) for example translations
    - update examples/README

0.9911 2025-05-06T10:45:43Z

    - module dies when the masking tag is missing in the output
    - require greple@9.23 to fix the behavior of --of filter
    - remove trailing spaces from the XLATE output
    - improve gpt-4.1 prompt

0.9910 2025-05-03T11:09:27Z

    - use gpt4.1 as gpt4 engine
    - update prompt for ChatGPT to improve translation quality
    - introduce -Mxlate::Filter module
    - requires perl v5.26

0.9909 2025-04-16T08:51:03Z

    - make sure to use GNU Make
    - fix .xlaterc read bug
    - introduce experimental "xlate -J" option

0.9908 2025-03-17T00:40:36Z

    - install App::Greple::L
    - read ~/.xlaterc
    - introduce -B option for batch mode

0.9907 2025-03-16T09:02:13Z

    - trial implementation of reading .xlaterc

0.9906 2025-02-28T13:05:13Z

    - add paused container handling
    - remove -S option

0.9905 2025-01-14T12:38:56Z

    - fix bug of script/xlate
    - introduce App::Greple::xlate::Text
    - add optex setup in Docker image
    - deprecate xlate -A option

0.9904 2025-01-10T07:26:52Z

    - update script/xlate options
      * -f -> -b : base language
      * -z -> -f : pattern file

0.9903 2025-01-10T05:39:50Z

    - always create result file including engine name
    - update script/xlate
      * add -z option to specify pattern file
      * introduce -L option to manage live container
      * -f option set --xlate-from option

0.9902 2025-01-01T02:24:46Z

    - execute "docker run" with "--init" option
    - update xlate options
      * make -G option as default and remove from usage
      * add -W option to mount current directory

0.9901 2024-11-23T13:19:05Z

    - update "xlate" command options
      * rename -Q -> -K
      * rename -K -> -L
      * create -S

0.99 2024-11-22T15:36:57Z

    - rename xlate options: -L -> -A | -X -> -Q

0.45 2024-11-22T02:14:44Z

    - introduce -L and -K/-X option in xlate script
    - install "yq" in docker

0.44 2024-11-01T08:14:59Z

    - run docker with --tty option when stdin is terminal
    - -H option set HOME to the mount point

0.43 2024-10-31T09:51:34Z

    - install "llm" in Docker image
    - inherit "-u" option to MAKE environment
    - introduce "xlate -H" option to mount the home directory

0.42 2024-10-24T15:44:24Z

    - introduce "xlate -U" option
    - add AI generated manual for "xlate"

0.4101 2024-10-10T08:17:43Z

    - duplication in unmasking process can happen

0.41 2024-10-10T06:34:16Z

    - introduce xlate -x option

0.40 2024-10-09T11:03:07Z

    - introduce --xlate-mask

0.39 2024-10-08T07:10:21Z

    - introduce --xlate-stripe option

0.38 2024-10-05T07:45:54Z

    - maintain cache data in ordered list format rather than hash
    - introduce --xlate-update option to force update cache data
    - undocument --cache-clear option (use --xlate-cache=clear)

0.37 2024-10-04T06:39:51Z

    - introduce --xlate-format colon parameter

0.36 2024-09-29T04:03:54Z

    - update pod translation area to include line start with punct char

0.35 2024-09-26T15:30:33Z

    - introduce output format "space+"

0.3401 2024-09-20T03:49:59Z

    - update gpt4o module
    - include documents translated by gpt4o

0.34 2024-09-02T13:24:56Z

    - introduce gpt4o engine

0.33 2024-08-22T01:38:55Z

    - introduce experimental data masking capability

0.3202 2024-08-13T12:24:41Z

    - fix a bug of --xlate-labor option not to work

0.3201 2024-08-09T23:44:53Z

    - requires perl v5.18.2

0.32 2024-08-09T09:17:36Z

    - introduce different patterns for normalized and non-normalized text

0.3101 2024-03-21T03:43:52Z

    - fix bug in xlate.el
    - include sdif output in README

0.31 2024-03-01T10:33:50Z

    - introduce --prompt option
    - implement EN -> EN-US alias in xlate.el

0.30 2024-02-12T07:19:06Z

    - ad hoc support for ChatGPT-4

0.29 2024-01-22T04:34:48Z

    - produce files without engine-name when single engine used

0.28 2023-11-10T06:32:41Z

    - update cache management strategy
    - make -t option and XLATE_LANG required
    - make -n works for normal execution
    - make .stxt file for .docx and such
    - do not process -G option on docker
    - add xlate -v option
    - add --xlate-debug option

0.27 2023-11-07T15:57:53Z

    - use monotone colormap
    - add Minilla release.hooks

0.26 2023-11-07T10:22:47Z

    - support ChatGPT-3.5 (gpt3) translation engine

0.25 2023-06-28T04:04:11Z

    - new docker image release

0.24 2023-06-13T10:41:41Z

    - update xlate.el

0.23 2023-03-29T02:43:35Z

    - use .stxt suffix for temporary file

0.22 2023-03-28T05:44:04Z

    - update JSON cache file format
    - create temporary text file to process MS document

0.21 2023-03-25T04:12:11Z

    - introduce xlate -l option
    - update xlate.el to complete language list

0.20 2023-03-23T05:55:33Z

    - pass -t and -o parameters to make

0.19 2023-03-22T12:40:45Z

    - update xlate.el
    - change --match-entire to --match-all
    - set default format as "xtxt" and "cm"
    - set DISPLAY only when DISPLAY is set
    - require 'Clipboard' module on demand

0.18 2023-03-19T11:20:45Z

    - introduce -R option
    - make debug message concise

0.17 2023-03-14T10:06:34Z

    - fix XLATE.mk to use -o option instead of -x

0.16 2023-03-14T09:47:33Z

    - update examples/data_shishin.docx to the latest version
    - change workdir to /work
    - introduce -C and -B option
    - introduce -G option

0.15 2023-03-13T09:25:51Z

    - xlate includes container version
    - container includes standard tools and configuration

0.14 2023-03-13T01:58:23Z

    - release "xlate" command as a front-end cli tool
    - implement automatic make mechanism
    - implement companion Docker container (tecolicom/xlate)

0.13 2023-03-10T04:38:06Z

    - set STDERR to utf8 to avoid error in docker

0.12 2023-03-08T07:33:57Z

    - introduce --xlate-maxlen option
    - update examples

0.11 2023-03-06T05:14:31Z

    - make alias 'cm' for 'conflict'
    - introduce --xlate-format='xtxt' instead of 'none'
    - make 'examples' directory

0.10 2023-03-01T02:31:09Z

    - rename --refresh to --cache-clear
    - fix bug about max length

0.09 2023-02-27T09:47:19Z

    - introduce --xlate-labor option
    - introduce --refresh option
    - make docs directory and multilingual READMEs

0.08 2023-02-21T14:30:17Z

    - introduce docs/ directory

0.07 2023-02-11T07:13:01Z

    - update --xlate-fold optin to perform translation by itself

0.06 2023-02-08T05:58:20Z

    - fix --xlate-format=ifdef bug

0.05 2023-02-06T10:08:10Z

    - some minor improvements

0.04 2023-02-03T01:07:48Z

    - re-implement cache update strategy
      now call `deepl' command just once for translation
    - use --callback interface
    - --xlate calls --xlate-color with --color=never option

0.03 2023-02-02T05:00:57Z

    - implement --xlate-batch-update option

0.02 2023-01-31T12:39:26Z

    - convert all \s+ to single space for normalization

0.01 2023-01-29T15:04:13Z

    - original version

