aspera-cli 4.27.5 → 4.28.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +160 -4
- data/CONTRIBUTING.md +4 -2
- data/README.md +1 -1
- data/bin/asession +1 -1
- data/docs/README.md +1086 -331
- data/docs/test-mcp-with-ai.md +5 -3
- data/lib/aspera/agent/direct.rb +15 -4
- data/lib/aspera/agent/factory.rb +2 -1
- data/lib/aspera/agent/node.rb +1 -1
- data/lib/aspera/api/cos_node.rb +1 -1
- data/lib/aspera/api/faspex.rb +1 -1
- data/lib/aspera/api/node.rb +6 -2
- data/lib/aspera/ascp/installation.rb +47 -11
- data/lib/aspera/ascp/management.rb +89 -43
- data/lib/aspera/cli/ascp_actions.rb +5 -19
- data/lib/aspera/cli/bootstrapper.rb +1 -2
- data/lib/aspera/cli/command_registry.rb +43 -3
- data/lib/aspera/cli/command_spec.rb +3 -0
- data/lib/aspera/cli/completion/ascli.bash +39 -5
- data/lib/aspera/cli/completion/ascli.fish +16 -8
- data/lib/aspera/cli/completion/ascli.ps1 +41 -0
- data/lib/aspera/cli/completion/ascli.zsh +20 -4
- data/lib/aspera/cli/completion_actions.rb +360 -0
- data/lib/aspera/cli/error.rb +42 -0
- data/lib/aspera/cli/extended_value.rb +30 -5
- data/lib/aspera/cli/formatter.rb +118 -56
- data/lib/aspera/cli/hints.rb +0 -1
- data/lib/aspera/cli/http.rb +6 -5
- data/lib/aspera/cli/info.rb +10 -4
- data/lib/aspera/cli/mailer.rb +1 -1
- data/lib/aspera/cli/mcp/http_servlet.rb +156 -0
- data/lib/aspera/cli/mcp/secrets.rb +143 -0
- data/lib/aspera/cli/mcp/tool.rb +231 -0
- data/lib/aspera/cli/option_value.rb +9 -1
- data/lib/aspera/cli/options.schema.yaml +390 -39
- data/lib/aspera/cli/parser.rb +14 -5
- data/lib/aspera/cli/plugins/aoc.rb +8 -11
- data/lib/aspera/cli/plugins/base.rb +36 -15
- data/lib/aspera/cli/plugins/config.rb +15 -44
- data/lib/aspera/cli/plugins/console.rb +3 -1
- data/lib/aspera/cli/plugins/factory.rb +1 -1
- data/lib/aspera/cli/plugins/faspex5.rb +9 -19
- data/lib/aspera/cli/plugins/faspio.rb +36 -5
- data/lib/aspera/cli/plugins/httpgw.rb +1 -0
- data/lib/aspera/cli/plugins/mcp.rb +177 -118
- data/lib/aspera/cli/plugins/node.rb +14 -8
- data/lib/aspera/cli/plugins/orchestrator.rb +351 -38
- data/lib/aspera/cli/plugins/server.rb +3 -1
- data/lib/aspera/cli/plugins/shares.rb +205 -35
- data/lib/aspera/cli/preset_actions.rb +15 -7
- data/lib/aspera/cli/preset_manager.rb +24 -2
- data/lib/aspera/cli/prompt.rb +3 -1
- data/lib/aspera/cli/result.rb +17 -4
- data/lib/aspera/cli/runner.rb +133 -43
- data/lib/aspera/cli/security.rb +134 -0
- data/lib/aspera/cli/table_fitter.rb +116 -0
- data/lib/aspera/cli/terminal_formatter.rb +23 -34
- data/lib/aspera/cli/transfer_agent.rb +4 -1
- data/lib/aspera/cli/vault_manager.rb +6 -5
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cli/web_secret.html.erb +61 -0
- data/lib/aspera/cli/web_secret.rb +220 -0
- data/lib/aspera/cli/wizard.rb +19 -9
- data/lib/aspera/command_line_builder.rb +26 -0
- data/lib/aspera/data_repository.rb +38 -24
- data/lib/aspera/duration.rb +42 -0
- data/lib/aspera/environment.rb +88 -24
- data/lib/aspera/exec_spec.rb +6 -5
- data/lib/aspera/faspex_gw.rb +98 -32
- data/lib/aspera/faspex_postproc.rb +187 -44
- data/lib/aspera/formatter_interface.rb +0 -1
- data/lib/aspera/id_generator.rb +2 -1
- data/lib/aspera/json_rpc/client.rb +51 -32
- data/lib/aspera/json_rpc/version.rb +1 -0
- data/lib/aspera/keychain/base.rb +5 -0
- data/lib/aspera/keychain/encrypted_hash.rb +6 -2
- data/lib/aspera/keychain/factory.rb +2 -3
- data/lib/aspera/keychain/hashicorp_vault.rb +7 -4
- data/lib/aspera/keychain/macos_security.rb +119 -13
- data/lib/aspera/keychain/one_password_api.rb +8 -3
- data/lib/aspera/keychain/one_password_base.rb +14 -9
- data/lib/aspera/keychain/one_password_cli.rb +4 -2
- data/lib/aspera/log.rb +3 -6
- data/lib/aspera/markdown.rb +152 -115
- data/lib/aspera/mime.rb +6 -0
- data/lib/aspera/nagios.rb +3 -1
- data/lib/aspera/node_emulator.rb +98 -101
- data/lib/aspera/oauth/{base.rb → client/base.rb} +5 -4
- data/lib/aspera/oauth/{boot.rb → client/boot.rb} +3 -2
- data/lib/aspera/oauth/{factory.rb → client/factory.rb} +7 -0
- data/lib/aspera/oauth/{generic.rb → client/generic.rb} +1 -1
- data/lib/aspera/oauth/{json_credentials.rb → client/json_credentials.rb} +1 -1
- data/lib/aspera/oauth/{jwt.rb → client/jwt.rb} +1 -1
- data/lib/aspera/oauth/{url_json.rb → client/url_json.rb} +1 -1
- data/lib/aspera/oauth/{web.rb → client/web.rb} +2 -2
- data/lib/aspera/oauth/server/authorize.html.erb +34 -0
- data/lib/aspera/oauth/server/pkce.rb +426 -0
- data/lib/aspera/orchestrator_workflow_checker.rb +561 -0
- data/lib/aspera/preview/terminal.rb +3 -2
- data/lib/aspera/rainbow.rb +27 -1
- data/lib/aspera/rest/aspera_errors.rb +51 -59
- data/lib/aspera/rest/client.rb +21 -14
- data/lib/aspera/rest/error_analyzer.rb +9 -0
- data/lib/aspera/rest/list.rb +6 -6
- data/lib/aspera/rest/util.rb +7 -1
- data/lib/aspera/rest.rb +0 -1
- data/lib/aspera/schema/IBM Aspera Faspex API-5.0-enhanced.yaml +0 -2
- data/lib/aspera/schema/IBM Aspera Orchestrator API-v1-enhanced.yaml +4001 -0
- data/lib/aspera/schema/IBM Aspera faspio Gateway API-1.0.0-enhanced.yaml +1097 -0
- data/lib/aspera/schema/IBM Aspera on Cloud Automation API-1.0.5-enhanced.yaml +35 -35
- data/lib/aspera/schema/IBM_Aspera_Shares.yaml +819 -7
- data/lib/aspera/schema/documentation.rb +50 -78
- data/lib/aspera/schema/reader.rb +39 -11
- data/lib/aspera/schema/registry.rb +8 -2
- data/lib/aspera/secret_hider.rb +94 -15
- data/lib/aspera/secret_strength.rb +114 -0
- data/lib/aspera/servlet_helpers.rb +111 -0
- data/lib/aspera/sync/args.schema.yaml +3 -1
- data/lib/aspera/sync/conf.schema.yaml +16 -6
- data/lib/aspera/sync/operations.rb +21 -1
- data/lib/aspera/temp_file_manager.rb +79 -20
- data/lib/aspera/transfer/parameters.rb +5 -0
- data/lib/aspera/transfer/spec.rb +52 -12
- data/lib/aspera/transfer/spec.schema.yaml +8 -5
- data/lib/aspera/web_auth/index.html.erb +16 -0
- data/lib/aspera/web_auth/server.rb +18 -10
- data/lib/aspera/web_page.html.erb +262 -0
- data/lib/aspera/web_page.rb +61 -0
- data/lib/aspera/web_server_simple.rb +76 -10
- data.tar.gz.sig +0 -0
- metadata +47 -32
- metadata.gz.sig +0 -0
- data/lib/aspera/cli/mcp_tool.rb +0 -189
- data/lib/aspera/oauth.rb +0 -9
- data/lib/aspera/schema/IBM Aspera Orchestrator API-v1.yaml +0 -1784
- data/lib/aspera/schema/IBM Aspera faspio Gateway API-1.0.0.yaml +0 -249
- data/lib/aspera/web_auth/index.html +0 -147
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 53275fa425245c33fe497658f6da1ba3cb13c1d02e0c0e4082d283c44b02af1c
|
|
4
|
+
data.tar.gz: 68f60148c6ec53c98143ed2211d8474dc666b29cbf41c43604dc1ec208faaa1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b8fe08d94ac160cf2ec56a351afbb2ba4afde34ce8d80333de9400f3fd26f342041bb63167dd3ce708f3e86add4cee7d0761d843b5362f0169fb574978ff8314
|
|
7
|
+
data.tar.gz: bb0c4deb1bd46b3e04a761e7de67730cfbe293a1580fa3a84c4acd33bb7b7d146a906f99985e05b15ba74c6884be1217240d92bf48f81dc2ceb3212fe40b18a7
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,161 @@
|
|
|
1
1
|
# Changes (Release notes)
|
|
2
2
|
|
|
3
|
+
## 4.28.0
|
|
4
|
+
|
|
5
|
+
Released: 2026-10-22
|
|
6
|
+
|
|
7
|
+
Highlights: security hardening of local web servers (authentication, minimum secret strength, cross-site requests refused), new option `security`, `mcp server` over HTTPS with token or OAuth authentication, JMESPath queries (`--out.query`), exit code by category of error, context-aware shell completion (also PowerShell), tables fitted to the terminal width. Ruby 3.2 or later is required.
|
|
8
|
+
|
|
9
|
+
### New Features
|
|
10
|
+
|
|
11
|
+
* `ascli`:
|
|
12
|
+
* Local web servers refuse a weak secret at startup (`auth_token` of `mcp server`, `secret_token` of `faspex5 postprocessing`, `password` of `node emulator` and gateways): minimum strength set by parameter `*_min_bits` (default `80`, `0` disables), estimated with gem `zxcvbn` if installed.
|
|
13
|
+
* New option `security`: level `medium` or `high` restricts extended values `@ruby:`, `@uri:`, `@env:` and `@file:` (see manual).
|
|
14
|
+
* `@secret:` asks for the secret on a local web page in the browser when option `ui` is `graphical`.
|
|
15
|
+
* Local web pages (authentication, secret request, OAuth consent) follow the light or dark theme of the system or browser.
|
|
16
|
+
* Option `ui` is extended (still compatible: `--ui=text|graphical`): sub-option `mode` (`auto`, `terminal`, `browser`) and `command` (array: browser command, URL appended). It replaces the environment variables `ASPERA_BROWSER` and `BROWSER`, which are no longer used.
|
|
17
|
+
* New option `--out.query`: [JMESPath](https://jmespath.org) expression (or `@ruby:` lambda) to filter and reshape results, as `--query` of the AWS and Azure CLIs. New gem dependency: `jmespath`.
|
|
18
|
+
* The exit code indicates the category of error (e.g. `3` authentication, `4` not found, `5` transfer, `6` network): see `ascli -h` or the manual.
|
|
19
|
+
* Tables fit the terminal width: text columns are wrapped. Parameter `width` of `--out.table` sets the maximum width.
|
|
20
|
+
* Schema tables (value `help` of an option or argument, `config ascp spec`, `config sync spec`, `config agents parameters`, manual) indicate required fields.
|
|
21
|
+
* Shell completion follows the context: options of plugin and command, values and types of options and arguments, keys of structures, aliases and abbreviations, local files for uploads, with descriptions in Zsh, Fish and PowerShell.
|
|
22
|
+
* New composite option `--temp` with sub-options `folder`, `clean` and `expiry`: age of `ascp` file lists left by interrupted commands, deleted when a command starts (a duration, e.g. `30d`, default `5d`, `false`: never, `0`: all). Options `--temp-folder` and `--clean-temp` are deprecated.
|
|
23
|
+
* `config`:
|
|
24
|
+
* New command `completion powershell` displays the completion script of PowerShell (see manual).
|
|
25
|
+
* `ascp spec`: Optional argument: name of agent, to display only the parameters it supports (as `config ascp schema`), or `overview`, for one column per agent.
|
|
26
|
+
* `mcp`:
|
|
27
|
+
* `server`: Authentication of transport `http` with a static token (`auth_token`) or OAuth 2.0 (`oauth`), new option `public_url`.
|
|
28
|
+
* `server`: HTTPS for transport `http` with options `url`, `cert`, `key` and `chain`. Options `bind` and `port` are deprecated: use `url`.
|
|
29
|
+
* `server`: `@secret:` asks the user on a web page (MCP URL mode elicitation): the secret is not sent to the AI model.
|
|
30
|
+
* `faspex5`:
|
|
31
|
+
* `postprocessing`: New parameters `secret_token` (`?token=` in URL) and `allowed_ips` (addresses or CIDR) restrict callers.
|
|
32
|
+
* `postprocessing`: Parameter `lambda` of the URL query evaluates a Ruby script returning a lambda, called with the webhook values (was ignored).
|
|
33
|
+
* `gateway` (and `aoc gateway`): New parameters `username` and `password` (HTTP Basic, as Faspex 4).
|
|
34
|
+
* `orchestrator`:
|
|
35
|
+
* New command `workflows development` displays the Workflow Authoring Guide, the Action Template Reference and the Plugin Manual (from GitHub), also used by AI assistants through `mcp server`: whole document, one section, or table of contents up to a level (default per document, or optional argument).
|
|
36
|
+
* `workflows export` with option `dependencies` saves a package (`.wkf`) with sub-workflows and remote nodes.
|
|
37
|
+
* `workflows import` takes an optional argument with options `folder_id`, `publish` and `link_to_subworkflows`. `workflows list` displays `folder_id`.
|
|
38
|
+
* New commands `monitors list` (monitors of a type: remote node monitors give the names of remote nodes), `queues list`, `pools status` and `journal files` (files recorded in a journal book). `--query=help` displays the query parameters of each API call, from the OpenAPI description of Orchestrator (corrected from the source code of Orchestrator 4.1.6, OpenAPI 3.1).
|
|
39
|
+
* New command `workflows check_import` checks a workflow file (`.yml` or `.wkf`) locally before import, and reports problems with a severity, a code and a location (as the web UI import does). `workflows import` logs these problems as warnings.
|
|
40
|
+
* New command `plugins spec` displays the specifications of action plugins (from GitHub, option `plugin_specs`): template attributes with their allowed values, inputs and outputs with the template settings they depend on. Used by AI assistants through `mcp server`, and by `workflows check_import` to check action templates and the inputs of steps (attributes and values, required inputs not mapped, inputs and outputs the plugin does not have).
|
|
41
|
+
* New command `workflows find_constraints` lists the conflicts and missing plugins found by Orchestrator for a file already on the server. `workflows import_with_constraints` refuses an import that Orchestrator would handle incorrectly (plugins not enabled, partial resolution of conflicts).
|
|
42
|
+
* `shares`:
|
|
43
|
+
* New commands `share list`, `share event create`, `admin directory`, `admin user|group search`, `admin group local users`, `admin authenticate`, and `admin user|group all transfer_settings delete` (reset to global settings).
|
|
44
|
+
* `health` uses the `/health_check` endpoint: status of each license and node.
|
|
45
|
+
* Help of `admin share user_permissions|group_permissions create|modify` shows the request body.
|
|
46
|
+
* `sync`:
|
|
47
|
+
* `target_rate` in `sync_info` accepts suffixes `k`, `m` and `g` (e.g. `100m`).
|
|
48
|
+
|
|
49
|
+
### Issues Fixed
|
|
50
|
+
|
|
51
|
+
* `ascli`:
|
|
52
|
+
* Tokens displayed by `bearer_token`, `bearer_token_node` (`aoc`, `faspex5`, `node`), `aoc admin node bearer_token` and `node basic_token` were returned to the AI client by `mcp server`. They are now hidden.
|
|
53
|
+
* Secrets are also hidden by value, wherever they appear in logs, results and `mcp server` responses (e.g. in an error message, or as a key name): values of secret options (e.g. `password`) and of presets (e.g. read alone with `@preset:<name>.password`), of `@secret:` and `@vault:`, OAuth tokens, generated bearer and basic tokens, secrets of transfer specs. In `mcp server` responses, a value shorter than 8 characters is also hidden as a word in a text.
|
|
54
|
+
* With option `security` level `medium` or `high` (default of `mcp server`), a secret read by `@secret:`, `@vault:` or `@preset:` cannot be processed by another extended value (e.g. `@list:`, `@json:`, or in a text with `@extend:`), nor be a parameter name of `config preset set`: the result could reveal it to the AI client.
|
|
55
|
+
* Secret values of URL query parameters (e.g. `token`, `client_secret`) are hidden in logs.
|
|
56
|
+
* Logs: secrets in a Ruby `Struct` or object (`password="..."`) were shown. Secrets of a dumped structure are now hidden by field name before it is rendered, whatever `log.format`.
|
|
57
|
+
* Local web servers (`faspex5 postprocessing`, `faspex5 gateway`, `aoc gateway`, `node emulator`, `mcp server`, `--auth=web`):
|
|
58
|
+
* Requests that a web page in the browser can send are refused: `Host` not loopback on a loopback server (DNS rebinding), `Origin` of another site.
|
|
59
|
+
* A `url` with an IPv6 address, or parameter `chain`, failed at startup.
|
|
60
|
+
* WEBrick messages are logged at debug level.
|
|
61
|
+
* `--auth=web`:
|
|
62
|
+
* Login could wait forever when the browser called back early, or when `redirect_uri` has a path (HTTP 404).
|
|
63
|
+
* A `redirect_uri` on loopback other than `127.0.0.1` (e.g. `[::1]`) was refused.
|
|
64
|
+
* Ctrl-C ended with an internal error instead of stopping the command.
|
|
65
|
+
* The page after login, whose URL contains the authorization code, could be cached, framed, or sent as referrer.
|
|
66
|
+
* Error messages of servers in Ruby (e.g. Orchestrator) included the backtrace of the exception: it is in the debug log only.
|
|
67
|
+
* Network errors and resources not found by name were reported as `Other(<exception class>)`.
|
|
68
|
+
* Terminal output:
|
|
69
|
+
* Unicode (`--out.utf8`): detection follows the precedence of locale variables (`LC_ALL=C` disables it), and supports Windows Terminal, VS Code, Git Bash, ConEmu and terminals setting `TERM`.
|
|
70
|
+
* Colors (`--out.colors`): `NO_COLOR`, `CLICOLOR` and `CLICOLOR_FORCE` follow conventions, and results written with `--out.file` no longer contain ANSI codes.
|
|
71
|
+
* Without Unicode, symbols are replaced with ASCII (e.g. hidden secret `🔑` becomes `***`).
|
|
72
|
+
* A boolean or decimal result (e.g. `config echo @json:true`) failed with an internal error.
|
|
73
|
+
* `--out.select` refused a Ruby lambda (`@ruby:`).
|
|
74
|
+
* Help and manual: a parameter with alternatives (`oneOf`) had no type (which broke the PDF manual), and alternatives had no title.
|
|
75
|
+
* Value `help` of an option or argument displays the schema as `config sync spec`: with fields of alternatives (`oneOf`), deprecations and examples, and for `--ts=help` the supported agents and `ascp` options. `config agents parameters` displays allowed values and defaults.
|
|
76
|
+
* Removed gem dependencies `blankslate` and `word_wrap`: descriptions in schema tables are wrapped to the terminal width instead of cut at 120 characters.
|
|
77
|
+
* Transfer spec parameter `target_rate` is in bps as documented (without suffix or with `k` it was taken as kbps, an integer was rejected), and `sync` ignored it (and `target_rate_kbps` with format `args`).
|
|
78
|
+
* An asynchronous transfer with agent `direct` (default of `mcp server`) failed with `failed to open input file list`: the file list was deleted at the end of the command. Temporary files of `ascp` are now deleted when the transfer ends.
|
|
79
|
+
* `--clean-temp=no` also kept the old `ascp` file lists left by interrupted commands, and two commands starting at the same time could fail when deleting the same old file list.
|
|
80
|
+
* `config`:
|
|
81
|
+
* `preset get`: The value of a secret option (e.g. `password`) was displayed, and returned to the AI client by `mcp server`. It is now hidden, unless `--out.secrets=yes` (command line only, never in `mcp server`).
|
|
82
|
+
* `preset`: A secret made of digits only (e.g. `password`, set with `config preset set`, or not quoted in the YAML file) was a number, shown in results and `mcp server` responses: it is now a `String`, hidden.
|
|
83
|
+
* `vault`:
|
|
84
|
+
* `system` (macOS): the password and `username` were not returned, and special characters were stored escaped.
|
|
85
|
+
* `file`: `password` did not migrate a vault of version 4.26.0 or earlier to PBKDF2. The file is loaded with YAML safe loading.
|
|
86
|
+
* `vault` (HashiCorp): `list` failed after a secret was deleted.
|
|
87
|
+
* `1password`: `url` is read from the website of the item.
|
|
88
|
+
* `preset secure` failed on a missing secret (`system`, `1password`), and `@vault:` on a label containing dots.
|
|
89
|
+
* `completion words`: Extended values on the command line were evaluated at each `Tab` (e.g. `@ruby:` code executed, `@stdin:` waiting for input).
|
|
90
|
+
* `completion`: Bash: words containing `=` or `:` (e.g. a URL) broke completion of the next words, and each `Tab` checked for a newer gem version on the network.
|
|
91
|
+
* `documentation`: In `toc`, lines of code blocks (e.g. shell comments) were taken as headings, and they ended the extracted section. `--select` did not apply to `toc` (keys were symbols).
|
|
92
|
+
* `transfer status`: For agent `direct`, `bytes_transferred` (sum of `TransferBytes` of the sessions) and `ended_at` were not set.
|
|
93
|
+
* `sync translate`: Options `-C`, `--ws-connect`, `-D`, `--scan-interval` and `--remote-scan-interval` were translated incorrectly.
|
|
94
|
+
* `mcp`:
|
|
95
|
+
* REST error messages were repeated once more at each tool call.
|
|
96
|
+
* `server`: Option `--out.query` was ignored.
|
|
97
|
+
* `faspex5`:
|
|
98
|
+
* `postprocessing`, `gateway` (and `aoc gateway`): Invalid requests return HTTP 400, 403 or 404 instead of 500, without stack trace or path of the script.
|
|
99
|
+
* `packages send` (and `aoc packages send`): In asynchronous mode, the job id of the transfer was not returned: it is in field `transfer` of the result.
|
|
100
|
+
* `node`:
|
|
101
|
+
* `emulator`: A symbolic link in the `docroot` leading out of it was followed by transfers.
|
|
102
|
+
* `emulator`: A `POST` with an empty body returned HTTP 500 instead of 400.
|
|
103
|
+
* `orchestrator`:
|
|
104
|
+
* `workflows import_with_constraints` failed with an internal error of Orchestrator (plugins not enabled), or silently imported copies (partial resolution of conflicts). The OpenAPI description of `find_constraints` and `import_with_constraints` was wrong.
|
|
105
|
+
* `workflows import`, `import_with_constraints` and `publish` sent requests rejected by Orchestrator, `import` did not report workflows not imported, and `start` with `synchronous` failed to display the work order.
|
|
106
|
+
* `workstep status` displayed fields that are YAML dumps of Orchestrator objects (`prerequisites`, `work_outputs`...): they are removed, inputs and outputs are in `inputs` and `outputs`.
|
|
107
|
+
* `shares`:
|
|
108
|
+
* The manual and the description of `admin user|group all share_permissions` (read-only) did not tell that permissions are granted with `admin share user_permissions|group_permissions`: AI assistants concluded that it was not possible. The argument of `show` is named `share_id`.
|
|
109
|
+
|
|
110
|
+
### Breaking Changes
|
|
111
|
+
|
|
112
|
+
* `ascli`:
|
|
113
|
+
* Secrets are hidden in results, whatever the output level or format (`--out.level=data`, `--format=json`...), unless `--out.secrets=yes`: before, `--out.level=data` (default with `--format=json`, `csv`...) showed them. This includes tokens displayed by `bearer_token`, `bearer_token_node`, `basic_token` and `config preset get <secret>`. Add `--out.secrets=yes` to scripts that use them (e.g. `$(ascli aoc bearer_token --out.secrets=yes)`).
|
|
114
|
+
* Ruby 3.2 or later is required (3.1 reached end of life in March 2025). Future minimum is 3.3. Policy: a Ruby version is supported until 18 months after its end of official support.
|
|
115
|
+
* The exit code on error indicates its category instead of always `1`: scripts shall test for a non-zero code. With `--format=nagios`, a failed command exits with `3` (UNKNOWN). Value `help` of a structured value exits with `0`.
|
|
116
|
+
* Local web servers on an address that is not loopback require authentication: `auth_token` for `mcp server`, `secret_token` or `allowed_ips` for `faspex5 postprocessing`, `username` and `password` for `node emulator`, `faspex5 gateway` and `aoc gateway`.
|
|
117
|
+
* Local web servers: a JSON body requires header `Content-Type: application/json`, else HTTP 415.
|
|
118
|
+
* `@secret:` asks in the browser by default on Windows and macOS (option `ui` is `graphical`): use `--ui=text` for the terminal.
|
|
119
|
+
* `config`:
|
|
120
|
+
* `completion`: Completion scripts saved in a folder shall be saved again (they call new command `config completion candidates`).
|
|
121
|
+
* `vault`: `create` fails if the label exists (`vault`, `1password`), `delete` fails if the secret does not exist (`file`). `1password`: `url` is stored as website of the item.
|
|
122
|
+
* `ascp spec`, `sync spec`, `agents parameters`, value `help` of an option or argument: Columns are `name`, `type` and `description` (no `required`), and `description` is a list of lines (formats `json`, `yaml`), absent when empty.
|
|
123
|
+
* `ascp spec`: Columns per agent are displayed with argument `overview`. By default, the description lists the supported agents, if not all (e.g. `(A, N)`).
|
|
124
|
+
* `agents show`: Displays only the agent description: parameters are displayed by `config agents parameters`.
|
|
125
|
+
* `mcp`:
|
|
126
|
+
* `server`: Option `security` is `high` by default and cannot be changed by the client, and `@stdin:` is refused: a preset reading a private key with `@file:` requires level `medium` or `low`.
|
|
127
|
+
* `server`: Keys of transport `http` are refused with `stdio` (the default), and `max_line_bytes` with `http`: they were ignored.
|
|
128
|
+
* `faspex5`:
|
|
129
|
+
* `postprocessing`, `gateway` (and `aoc gateway`): Parameters are validated at startup: unknown keys are refused instead of ignored, and a missing `script_folder` is reported.
|
|
130
|
+
* `postprocessing`: Only webhook values whose key starts with `faspex_` are passed to the script as environment variables, and a structured value as JSON.
|
|
131
|
+
* `orchestrator`:
|
|
132
|
+
* `workflows import` takes a file created by `workflows export`, and `workflows import_with_constraints` takes keys `filename`, `add_as_revision`, `subwf_constraints`, ... (see help).
|
|
133
|
+
* `monitors` is now `monitors snapshot`, with an optional type of monitors.
|
|
134
|
+
* `workorders output` displays values of variables as plain values instead of single-element arrays, and an empty value as `null`.
|
|
135
|
+
|
|
136
|
+
### Server Versions
|
|
137
|
+
|
|
138
|
+
| Plugin | Product | Version |
|
|
139
|
+
|--------------|--------------------|------------------|
|
|
140
|
+
| `aoc` | Aspera on Cloud | SaaS |
|
|
141
|
+
| `console` | IBM Aspera Console | 3.4.11 |
|
|
142
|
+
| `faspex5` | Faspex v5 | F5.0.17 |
|
|
143
|
+
| `httpgw` | HTTP Gateway | 2.3.4 |
|
|
144
|
+
| `node` | HSTS Node API | 4.4.8.2596 |
|
|
145
|
+
| `orchestrator` | Orchestrator | 4.1.6.2036-00000 |
|
|
146
|
+
| `shares` | IBM Aspera Shares | 1.11.5 |
|
|
147
|
+
|
|
148
|
+
### Transfer Agent Versions
|
|
149
|
+
|
|
150
|
+
| Agent | Product | Version |
|
|
151
|
+
|-----------|--------------------------------|---------|
|
|
152
|
+
| `connect` | IBM Aspera Connect Client | 4.2.14 |
|
|
153
|
+
| `desktop` | IBM Aspera Desktop Client | 4.4.3 |
|
|
154
|
+
| `direct` | IBM Aspera Transfer SDK (ascp) | 1.1.9 |
|
|
155
|
+
| `httpgw` | IBM Aspera HTTP Gateway Agent | 1.3.0 |
|
|
156
|
+
| `node` | IBM Aspera Node API Agent | 4.4.3 |
|
|
157
|
+
| `transferd` | IBM Aspera transferd daemon | 1.1.9 |
|
|
158
|
+
|
|
3
159
|
## 4.27.5
|
|
4
160
|
|
|
5
161
|
Released: 2026-10-06
|
|
@@ -15,7 +171,7 @@ Released: 2026-10-06
|
|
|
15
171
|
### Server Versions
|
|
16
172
|
|
|
17
173
|
| Plugin | Product | Version |
|
|
18
|
-
|
|
174
|
+
| -------------- | -------------------- | ------------------ |
|
|
19
175
|
| `aoc` | Aspera on Cloud | SaaS |
|
|
20
176
|
| `console` | IBM Aspera Console | 3.4.4 |
|
|
21
177
|
| `faspex5` | Faspex v5 | F5.0.17 |
|
|
@@ -27,7 +183,7 @@ Released: 2026-10-06
|
|
|
27
183
|
### Transfer Agent Versions
|
|
28
184
|
|
|
29
185
|
| Agent | Product | Version |
|
|
30
|
-
|
|
186
|
+
| ----------- | -------------------------------- | --------- |
|
|
31
187
|
| `connect` | IBM Aspera Connect Client | 4.2.14 |
|
|
32
188
|
| `desktop` | IBM Aspera Desktop Client | 4.4.3 |
|
|
33
189
|
| `direct` | IBM Aspera Transfer SDK (ascp) | 1.1.9 |
|
|
@@ -98,7 +254,7 @@ Released: 2026-10-05
|
|
|
98
254
|
### Server Versions
|
|
99
255
|
|
|
100
256
|
| Plugin | Product | Version |
|
|
101
|
-
|
|
257
|
+
| -------------- | -------------------- | ------------------ |
|
|
102
258
|
| `aoc` | Aspera on Cloud | SaaS |
|
|
103
259
|
| `console` | IBM Aspera Console | 3.4.4 |
|
|
104
260
|
| `faspex5` | Faspex v5 | F5.0.17 |
|
|
@@ -110,7 +266,7 @@ Released: 2026-10-05
|
|
|
110
266
|
### Transfer Agent Versions
|
|
111
267
|
|
|
112
268
|
| Agent | Product | Version |
|
|
113
|
-
|
|
269
|
+
| ----------- | -------------------------------- | --------- |
|
|
114
270
|
| `connect` | IBM Aspera Connect Client | 4.2.14 |
|
|
115
271
|
| `desktop` | IBM Aspera Desktop Client | 4.4.3 |
|
|
116
272
|
| `direct` | IBM Aspera Transfer SDK (ascp) | 1.1.9 |
|
data/CONTRIBUTING.md
CHANGED
|
@@ -127,14 +127,16 @@ Add one bullet under `### New Features` (or `### Issues Fixed` / `### Breaking C
|
|
|
127
127
|
|
|
128
128
|
Style rules:
|
|
129
129
|
|
|
130
|
-
-
|
|
130
|
+
- Entries are grouped by plugin: one first-level bullet per plugin, `` `ascli` `` (cross-cutting changes) first, then `` `config` ``, `` `mcp` ``, then the other plugins in alphabetical order.
|
|
131
|
+
- The entry is a second-level bullet under its plugin, prefixed with the command path inside the plugin, if any.
|
|
131
132
|
- Command path and argument names in backticks.
|
|
132
133
|
- One sentence per bullet; end without a period.
|
|
133
134
|
|
|
134
135
|
Example:
|
|
135
136
|
|
|
136
137
|
```markdown
|
|
137
|
-
* `config`:
|
|
138
|
+
* `config`:
|
|
139
|
+
* `agents`: New commands `list`, `show <name>` and `parameters <name>` to discover available transfer agents, their short identifier and their configurable parameters
|
|
138
140
|
```
|
|
139
141
|
|
|
140
142
|
#### 5 — Static analysis
|
data/README.md
CHANGED
data/bin/asession
CHANGED
|
@@ -26,7 +26,7 @@ class SimpleTransferManager
|
|
|
26
26
|
# Default SDK location
|
|
27
27
|
SDK_DEFAULT_DIR = File.join(Dir.home, '.aspera', 'sdk')
|
|
28
28
|
# Place transfer spec in that
|
|
29
|
-
SAMPLE_DEMO = '"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"
|
|
29
|
+
SAMPLE_DEMO = '"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"<PASSWORD>"'
|
|
30
30
|
SAMPLE_DEMO2 = '"direction":"receive","destination_root":"./test.dir"'
|
|
31
31
|
STDIN_INPUT = '@json:@stdin:'
|
|
32
32
|
class << self
|