aspera-cli 4.26.1 → 4.27.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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +300 -22
  4. data/CONTRIBUTING.md +100 -12
  5. data/bin/ascli +5 -5
  6. data/docs/README.md +10757 -0
  7. data/docs/test-mcp-with-ai.md +202 -0
  8. data/lib/aspera/agent/base.rb +20 -6
  9. data/lib/aspera/agent/connect.rb +53 -16
  10. data/lib/aspera/agent/desktop.rb +52 -17
  11. data/lib/aspera/agent/direct.rb +27 -25
  12. data/lib/aspera/agent/factory.rb +4 -0
  13. data/lib/aspera/agent/httpgw.rb +2 -2
  14. data/lib/aspera/agent/node.rb +34 -2
  15. data/lib/aspera/agent/transferd.rb +39 -3
  16. data/lib/aspera/api/alee.rb +1 -1
  17. data/lib/aspera/api/aoc.rb +56 -51
  18. data/lib/aspera/api/cos_node.rb +2 -2
  19. data/lib/aspera/api/faspex.rb +22 -20
  20. data/lib/aspera/api/httpgw.rb +4 -4
  21. data/lib/aspera/api/node.rb +33 -30
  22. data/lib/aspera/api/queries/bss_subscription_account.graphql +18 -0
  23. data/lib/aspera/api/queries/bss_subscription_usage.graphql +18 -0
  24. data/lib/aspera/ascmd.rb +25 -23
  25. data/lib/aspera/ascp/installation.rb +43 -40
  26. data/lib/aspera/ascp/management.rb +2 -3
  27. data/lib/aspera/cli/ascp_actions.rb +155 -0
  28. data/lib/aspera/cli/async_transfer_store.rb +81 -0
  29. data/lib/aspera/cli/bootstrapper.rb +197 -0
  30. data/lib/aspera/cli/command_registry.rb +145 -0
  31. data/lib/aspera/cli/command_spec.rb +138 -0
  32. data/lib/aspera/cli/context.rb +71 -0
  33. data/lib/aspera/cli/error.rb +16 -0
  34. data/lib/aspera/cli/extended_value.rb +5 -3
  35. data/lib/aspera/cli/formatter.rb +122 -209
  36. data/lib/aspera/cli/gem_checker.rb +65 -0
  37. data/lib/aspera/cli/hints.rb +2 -2
  38. data/lib/aspera/cli/http.rb +218 -0
  39. data/lib/aspera/cli/info.rb +2 -0
  40. data/lib/aspera/cli/mailer.rb +97 -0
  41. data/lib/aspera/cli/mcp_tool.rb +198 -0
  42. data/lib/aspera/cli/options.schema.yaml +364 -7
  43. data/lib/aspera/cli/{manager.rb → parser.rb} +337 -144
  44. data/lib/aspera/cli/plugins/alee.rb +20 -22
  45. data/lib/aspera/cli/plugins/aoc.rb +1173 -849
  46. data/lib/aspera/cli/plugins/ats.rb +200 -161
  47. data/lib/aspera/cli/plugins/base.rb +470 -107
  48. data/lib/aspera/cli/plugins/basic_auth.rb +14 -4
  49. data/lib/aspera/cli/plugins/config.rb +434 -1032
  50. data/lib/aspera/cli/plugins/console.rb +106 -64
  51. data/lib/aspera/cli/plugins/cos.rb +44 -32
  52. data/lib/aspera/cli/plugins/factory.rb +7 -4
  53. data/lib/aspera/cli/plugins/faspex.rb +296 -259
  54. data/lib/aspera/cli/plugins/faspex5.rb +592 -344
  55. data/lib/aspera/cli/plugins/faspio.rb +49 -51
  56. data/lib/aspera/cli/plugins/httpgw.rb +18 -25
  57. data/lib/aspera/cli/plugins/mcp.rb +279 -0
  58. data/lib/aspera/cli/plugins/node.rb +1001 -797
  59. data/lib/aspera/cli/plugins/oauth.rb +7 -10
  60. data/lib/aspera/cli/plugins/orchestrator.rb +111 -139
  61. data/lib/aspera/cli/plugins/preview.rb +183 -142
  62. data/lib/aspera/cli/plugins/server.rb +125 -80
  63. data/lib/aspera/cli/plugins/shares.rb +301 -107
  64. data/lib/aspera/cli/preset_actions.rb +139 -0
  65. data/lib/aspera/cli/preset_manager.rb +236 -0
  66. data/lib/aspera/cli/result.rb +360 -0
  67. data/lib/aspera/cli/runner.rb +473 -0
  68. data/lib/aspera/cli/secret_finder.rb +40 -0
  69. data/lib/aspera/cli/special_values.rb +1 -0
  70. data/lib/aspera/cli/sync_actions.rb +84 -56
  71. data/lib/aspera/cli/terminal_formatter.rb +65 -0
  72. data/lib/aspera/cli/transfer_actions.rb +83 -0
  73. data/lib/aspera/cli/transfer_agent.rb +116 -51
  74. data/lib/aspera/cli/transfer_progress.rb +9 -9
  75. data/lib/aspera/cli/vault_manager.rb +57 -0
  76. data/lib/aspera/cli/version.rb +1 -1
  77. data/lib/aspera/cli/wizard.rb +26 -26
  78. data/lib/aspera/command_line_builder.rb +23 -23
  79. data/lib/aspera/data_repository.rb +6 -1
  80. data/lib/aspera/dot_container.rb +5 -5
  81. data/lib/aspera/environment.rb +39 -13
  82. data/lib/aspera/exec_spec.rb +13 -0
  83. data/lib/aspera/faspex_gw.rb +2 -2
  84. data/lib/aspera/faspex_postproc.rb +4 -3
  85. data/lib/aspera/graphql.rb +35 -0
  86. data/lib/aspera/hash_ext.rb +6 -0
  87. data/lib/aspera/json_rpc/client.rb +62 -0
  88. data/lib/aspera/json_rpc/version.rb +7 -0
  89. data/lib/aspera/keychain/base.rb +1 -1
  90. data/lib/aspera/keychain/encrypted_hash.rb +2 -2
  91. data/lib/aspera/keychain/factory.rb +4 -4
  92. data/lib/aspera/keychain/macos_security.rb +4 -4
  93. data/lib/aspera/link_header.rb +82 -0
  94. data/lib/aspera/log.rb +23 -5
  95. data/lib/aspera/markdown.rb +85 -2
  96. data/lib/aspera/nagios.rb +2 -2
  97. data/lib/aspera/node_simulator.rb +3 -1
  98. data/lib/aspera/oauth/base.rb +10 -10
  99. data/lib/aspera/oauth/boot.rb +43 -0
  100. data/lib/aspera/oauth/factory.rb +41 -15
  101. data/lib/aspera/oauth/jwt.rb +4 -4
  102. data/lib/aspera/oauth/web.rb +4 -4
  103. data/lib/aspera/oauth.rb +1 -0
  104. data/lib/aspera/persistency_action_once.rb +10 -10
  105. data/lib/aspera/persistency_folder.rb +10 -3
  106. data/lib/aspera/preview/file_types.rb +7 -3
  107. data/lib/aspera/preview/generator.rb +3 -3
  108. data/lib/aspera/preview/utils.rb +1 -1
  109. data/lib/aspera/products/connect.rb +4 -1
  110. data/lib/aspera/products/other.rb +1 -1
  111. data/lib/aspera/products/transferd.rb +3 -3
  112. data/lib/aspera/proxy_auto_config.rb +10 -9
  113. data/lib/aspera/rest.rb +18 -40
  114. data/lib/aspera/rest_error_analyzer.rb +7 -3
  115. data/lib/aspera/rest_errors_aspera.rb +0 -10
  116. data/lib/aspera/rest_list.rb +13 -6
  117. data/lib/aspera/schema/IBM Aspera Faspex API-5.0-enhanced.yaml +14 -4
  118. data/lib/aspera/schema/IBM Aspera on Cloud API-0.2.6-enhanced.yaml +2730 -648
  119. data/lib/aspera/schema/async_tables.yaml +361 -0
  120. data/lib/aspera/schema/documentation.rb +57 -26
  121. data/lib/aspera/schema/reader.rb +60 -11
  122. data/lib/aspera/schema/registry.rb +50 -10
  123. data/lib/aspera/secret_hider.rb +11 -2
  124. data/lib/aspera/ssl.rb +4 -4
  125. data/lib/aspera/sync/conf.schema.yaml +2 -2
  126. data/lib/aspera/sync/database.rb +14 -10
  127. data/lib/aspera/sync/operations.rb +15 -18
  128. data/lib/aspera/temp_file_manager.rb +5 -1
  129. data/lib/aspera/timer_limiter.rb +1 -1
  130. data/lib/aspera/transfer/faux_file.rb +24 -11
  131. data/lib/aspera/transfer/parameters.rb +27 -25
  132. data/lib/aspera/transfer/result.rb +74 -0
  133. data/lib/aspera/transfer/resumer.rb +7 -7
  134. data/lib/aspera/transfer/spec.rb +18 -1
  135. data/lib/aspera/transfer/spec.schema.yaml +26 -8
  136. data/lib/aspera/transfer/uri.rb +1 -1
  137. data/lib/aspera/uri_reader.rb +2 -2
  138. data/lib/aspera/web_auth.rb +2 -2
  139. data/lib/aspera/web_server_simple.rb +8 -5
  140. data/lib/aspera/yaml.rb +2 -1
  141. data.tar.gz.sig +0 -0
  142. metadata +45 -16
  143. metadata.gz.sig +0 -0
  144. data/lib/aspera/cli/main.rb +0 -480
  145. data/lib/aspera/json_rpc.rb +0 -51
@@ -12,20 +12,20 @@ module Aspera
12
12
  # @param iter_max [Integer] Maximum number of executions
13
13
  # @param sleep_initial [Integer] Initial wait to re-execute
14
14
  # @param sleep_factor [Integer] Multiplier
15
- # @param sleep_max. [Integer] Max iterations
15
+ # @param sleep_max [Integer] Max iterations
16
16
  def initialize(
17
17
  iter_max: 7,
18
18
  sleep_initial: 2,
19
19
  sleep_factor: 2,
20
20
  sleep_max: 60
21
21
  )
22
- Aspera.assert_type(iter_max, Integer){k}
22
+ Aspera.assert_type(iter_max, Integer){'iter_max'}
23
23
  @iter_max = iter_max
24
- Aspera.assert_type(sleep_initial, Integer){k}
24
+ Aspera.assert_type(sleep_initial, Integer){'sleep_initial'}
25
25
  @sleep_initial = sleep_initial
26
- Aspera.assert_type(sleep_factor, Integer){k}
26
+ Aspera.assert_type(sleep_factor, Integer){'sleep_factor'}
27
27
  @sleep_factor = sleep_factor
28
- Aspera.assert_type(sleep_max, Integer){k}
28
+ Aspera.assert_type(sleep_max, Integer){'sleep_max'}
29
29
  @sleep_max = sleep_max
30
30
  end
31
31
 
@@ -34,7 +34,7 @@ module Aspera
34
34
  #
35
35
  # @yieldreturn [void] Executes the transfer operation
36
36
  def execute_with_resume
37
- Aspera.assert(block_given?)
37
+ Aspera.assert(block_given?, 'block required for execute_with_resume')
38
38
  # maximum of retry
39
39
  remaining_resumes = @iter_max
40
40
  sleep_seconds = @sleep_initial
@@ -53,7 +53,7 @@ module Aspera
53
53
  # do not retry non-retryable
54
54
  raise unless e.retryable?
55
55
  # exit if we exceed the max number of retry
56
- raise Error, "Maximum number of retry reached: #{@iter_max}" if remaining_resumes <= 0
56
+ Aspera.assert(remaining_resumes > 0, type: Error){"Maximum number of retry reached: #{@iter_max}"}
57
57
  end
58
58
 
59
59
  # take this retry in account
@@ -34,7 +34,13 @@ module Aspera
34
34
  'sparse_csum' => 'sparse_checksum',
35
35
  'full_csum' => 'full_checksum'
36
36
  }
37
- private_constant :POLICY_FIX
37
+ # Multipliers for target_rate suffix (result is in kbps)
38
+ RATE_SUFFIX_KBPS = {
39
+ 'k' => 1,
40
+ 'm' => 1_000,
41
+ 'g' => 1_000_000
42
+ }.freeze
43
+ private_constant :POLICY_FIX, :RATE_SUFFIX_KBPS
38
44
  # translate upload/download to send/receive
39
45
  def transfer_type_to_direction(transfer_type)
40
46
  XFER_TYPE_TO_DIR.fetch(transfer_type)
@@ -45,6 +51,17 @@ module Aspera
45
51
  XFER_DIR_TO_TYPE.fetch(direction)
46
52
  end
47
53
 
54
+ # Parse a human-readable rate string (as accepted by ascp -l) into an integer kbps value.
55
+ # Accepted: plain integer (kbps), or integer + suffix k/K (kbps), m/M (x1000 kbps), g/G (x1000000 kbps).
56
+ # @param value [String] e.g. "100m", "500000", "1g"
57
+ # @return [Integer] value in kbps
58
+ def rate_string_to_kbps(value)
59
+ m = value.to_s.strip.match(/\A(\d+)([kKmMgG])?\z/)
60
+ Aspera.assert(m){"Invalid rate value: #{value.inspect}. Expected integer with optional suffix k/K, m/M or g/G."}
61
+ multiplier = m[2] ? RATE_SUFFIX_KBPS.fetch(m[2].downcase) : 1
62
+ return m[1].to_i * multiplier
63
+ end
64
+
48
65
  def fix_transferd_resume_policy(transfer_spec)
49
66
  # Fix discrepancy in transfer spec
50
67
  transfer_spec['resume_policy'] = POLICY_FIX[transfer_spec['resume_policy']] if transfer_spec.key?('resume_policy')
@@ -377,6 +377,7 @@ properties:
377
377
  description: Specifies whether to precalculate the job size.
378
378
  type: boolean
379
379
  x-cli-switch: true
380
+ x-cli-false: --precalculate-disable
380
381
  preserve_access_time:
381
382
  description: >-
382
383
  Preserve the source-file access timestamps at the destination.
@@ -706,7 +707,17 @@ properties:
706
707
  - transferd
707
708
  x-cli-option: -i
708
709
  symlink_policy:
709
- description: Handle source side symbolic links.
710
+ description: >-
711
+ Handle source side symbolic links.
712
+ Refer to HSTS manual for more details.
713
+
714
+ - `follow`: Follow a symbolic link and transfer the contents of the linked file or directory when the link target is in the user's docroot.
715
+
716
+ - `copy`: Copy only the symbolic link. If a file with the same name exists at the destination, the symbolic link does not replace the file.
717
+
718
+ - `skip`: Skip-symbolic links. The link or the file to which it points are not transferred.
719
+
720
+ - `copy+force`: Copy only the symbolic link. If a file with the same name exists at the destination, the symbolic link replaces the file. If the file of the same name at the destination is a symbolic link to a directory, it is not replaced.
710
721
  type: string
711
722
  enum:
712
723
  - follow
@@ -719,15 +730,13 @@ properties:
719
730
  description: >-
720
731
  Metadata for transfer as JSON.
721
732
  Key `aspera` is reserved.
722
- Key `aspera.xfer_retry` specifies a retry timeout for node API initiated transfers.
733
+ Key `aspera.xfer_retry` specifies a "retry timeout" but is not actually used for node API initiated transfers.
723
734
  type: object
724
735
  x-cli-option: --tags64
725
736
  x-cli-convert: json64
726
737
  tags64:
727
738
  description: >-
728
- Metadata for transfer as JSON.
729
- Key `aspera` is reserved.
730
- Key `aspera.xfer_retry` specifies a retry timeout for node API initiated transfers.
739
+ Base64 string for `tags`.
731
740
  type: string
732
741
  x-agents:
733
742
  - direct
@@ -745,6 +754,14 @@ properties:
745
754
  description: Specifies desired speed for the transfer.
746
755
  type: integer
747
756
  x-cli-option: -l
757
+ target_rate:
758
+ description: >-
759
+ Pseudo-parameter: desired transfer rate as a human-readable string with an optional unit suffix.
760
+ Converted to `target_rate_kbps` before the transfer is started, overriding it if both are present.
761
+ Accepted formats: plain integer (kbps), or integer followed by `k`/`K` (kbps), `m`/`M` (x1000 kbps), `g`/`G` (x1000000 kbps).
762
+ Examples: `100000`, `100000k`, `100m`, `1g`.
763
+ type: string
764
+ x-cli-special: true
748
765
  title:
749
766
  description: Title of the transfer.
750
767
  type: string
@@ -753,11 +770,12 @@ properties:
753
770
  - connect
754
771
  - transferd
755
772
  token:
756
- description: "Authorization token. Type: Bearer, Basic or ATM. (Also arg -W)"
773
+ $comment: Also arg -W
774
+ description: Authorization token. Type is Bearer, Basic or ATM.
757
775
  type: string
758
776
  x-cli-envvar: ASPERA_SCP_TOKEN
759
777
  use_ascp4:
760
- description: Specify version of protocol. Do not use `ascp4`.
778
+ description: Specify version of protocol. `ascp4` will be deprecated.
761
779
  type: boolean
762
780
  default: false
763
781
  x-agents:
@@ -881,7 +899,7 @@ properties:
881
899
  xfer_max_retries:
882
900
  description: >-
883
901
  Maximum number of retries, for node API initiated transfers.
884
- Shall not exceed `aspera.conf` parameter `transfer_manager_max_retries` (default 5).
902
+ Shall not exceed `aspera.conf` parameter `transfer_manager_max_retries` (default 3).
885
903
  type: integer
886
904
  x-agents:
887
905
  - node
@@ -13,7 +13,7 @@ module Aspera
13
13
  SCHEME = 'faspe'
14
14
  def initialize(fasp_link)
15
15
  @fasp_uri = URI.parse(fasp_link.gsub(' ', '%20'))
16
- Aspera.assert(@fasp_uri.scheme == SCHEME, "Invalid scheme: #{@fasp_uri.scheme}")
16
+ Aspera.assert_values(@fasp_uri.scheme, [SCHEME]){"Invalid scheme: #{@fasp_uri.scheme}"}
17
17
  end
18
18
 
19
19
  # Generate transfer spec from provided faspe: URL
@@ -45,14 +45,14 @@ module Aspera
45
45
  end
46
46
  when SCHEME_FILE, NilClass
47
47
  local_file_path = uri.path
48
- raise Error, 'URL shall have a path, check syntax' if local_file_path.nil?
48
+ Aspera.assert(!local_file_path.nil?, type: Error){'URL shall have a path, check syntax'}
49
49
  local_file_path = File.expand_path(local_file_path.gsub(%r{^/}, '')) if %r{^/(~|.|..)/}.match?(local_file_path)
50
50
  return File.read(local_file_path)
51
51
  else Aspera.error_unexpected_value(uri.scheme){"scheme for [#{uri_to_read}]"}
52
52
  end
53
53
  end
54
54
 
55
- # @return Path to file with content at URL
55
+ # @return [String] path to file with content at URL
56
56
  def read_as_file(url)
57
57
  if url.start_with?(SCHEME_FILE_PFX1)
58
58
  # for file scheme, return directly the path
@@ -6,8 +6,8 @@ require 'aspera/assert'
6
6
  module Aspera
7
7
  # servlet called on callback: it records the callback request
8
8
  class WebAuthServlet < WEBrick::HTTPServlet::AbstractServlet
9
- # @param server [WEBrick::HTTPServer]
10
- # @param web_auth [WebAuth]
9
+ # @param server [WEBrick::HTTPServer] the HTTP server instance
10
+ # @param web_auth [WebAuth] the WebAuth instance to record the callback
11
11
  def initialize(server, web_auth)
12
12
  Log.log.debug('WebAuthServlet initialize')
13
13
  super(server)
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'webrick'
4
- require 'webrick/https'
5
4
  require 'aspera/log'
6
5
  require 'aspera/assert'
7
6
  require 'aspera/hash_ext'
8
- require 'openssl'
9
7
 
10
8
  module Aspera
11
9
  # Simple WEBrick server with HTTPS support
@@ -42,7 +40,7 @@ module Aspera
42
40
  cert
43
41
  end
44
42
 
45
- # @return a list of Certificates from chain file
43
+ # @return [Array<OpenSSL::X509::Certificate>] list of Certificates from chain file
46
44
  def read_chain_file(chain)
47
45
  File.read(chain).scan(/-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----/m).map{ |i| OpenSSL::X509::Certificate.new(i)}
48
46
  end
@@ -66,13 +64,18 @@ module Aspera
66
64
  when 'http'
67
65
  Log.log.debug('HTTP mode')
68
66
  when 'https'
67
+ # Required lazily: webrick/ssl.rb reads OpenSSL::OPENSSL_VERSION at load time,
68
+ # a constant CosmoRuby's OpenSSL shim does not define, so requiring it
69
+ # unconditionally at file load would break any command in a Cosmo build
70
+ # even when no HTTPS server is ever started.
71
+ require 'webrick/https'
69
72
  webrick_options[:SSLEnable] = true
70
73
  if cert.nil? && key.nil?
71
74
  webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
72
75
  elsif cert && PKCS12_EXT.include?(File.extname(cert).downcase)
73
76
  # PKCS12
74
77
  Log.log.debug('Using PKCS12 certificate')
75
- raise Error, 'PKCS12 requires a key (password)' if key.nil?
78
+ Aspera.assert(!key.nil?, type: Error){'PKCS12 requires a key (password)'}
76
79
  pkcs12 = OpenSSL::PKCS12.new(File.read(cert), key)
77
80
  webrick_options[:SSLCertificate] = pkcs12.certificate
78
81
  webrick_options[:SSLPrivateKey] = pkcs12.key
@@ -90,7 +93,7 @@ module Aspera
90
93
  OpenSSL::X509::Certificate.new(File.read(cert))
91
94
  end
92
95
  webrick_options[:SSLExtraChainCert] = read_chain_file(chain) unless chain.nil?
93
- raise Error, 'key and cert do not match' unless webrick_options[:SSLCertificate].public_key.to_der == webrick_options[:SSLPrivateKey].public_key.to_der
96
+ Aspera.assert(webrick_options[:SSLCertificate].public_key.to_der == webrick_options[:SSLPrivateKey].public_key.to_der, type: Error){'key and cert do not match'}
94
97
  end
95
98
  end
96
99
  # call constructor of parent class, but capture STDERR
data/lib/aspera/yaml.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'aspera/assert'
3
4
  require 'yaml'
4
5
 
5
6
  module Aspera
@@ -42,7 +43,7 @@ module Aspera
42
43
  # @raise [RuntimeError] If duplicate keys are found
43
44
  def safe_load(yaml)
44
45
  duplicate_keys = find_duplicate_keys(Psych.parse_stream(yaml))
45
- raise "Duplicate keys: #{duplicate_keys.join('; ')}" unless duplicate_keys.empty?
46
+ Aspera.assert(duplicate_keys.empty?){"Duplicate keys: #{duplicate_keys.join('; ')}"}
46
47
  YAML.safe_load(yaml, permitted_classes: [Time, Date, Symbol])
47
48
  end
48
49
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspera-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.26.1
4
+ version: 4.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Martin
@@ -11,8 +11,8 @@ cert_chain:
11
11
  -----BEGIN CERTIFICATE-----
12
12
  MIIEzDCCAzSgAwIBAgIBATANBgkqhkiG9w0BAQsFADBeMR4wHAYDVQQDDBVsYXVy
13
13
  ZW50Lm1hcnRpbi5hc3BlcmExEjAQBgoJkiaJk/IsZAEZFgJmcjETMBEGCgmSJomT
14
- 8ixkARkWA2libTETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yMzA2MjcwODUwMDRa
15
- Fw0yNjA3MDEwODUwMDRaMF4xHjAcBgNVBAMMFWxhdXJlbnQubWFydGluLmFzcGVy
14
+ 8ixkARkWA2libTETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNjA3MTcxMjE0MzNa
15
+ Fw0yODA3MTYxMjE0MzNaMF4xHjAcBgNVBAMMFWxhdXJlbnQubWFydGluLmFzcGVy
16
16
  YTESMBAGCgmSJomT8ixkARkWAmZyMRMwEQYKCZImiZPyLGQBGRYDaWJtMRMwEQYK
17
17
  CZImiZPyLGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA
18
18
  1E7e2PvDM1xOXrAQKYzkFG2uZcPC+uAdcq2zqUdfLv2iwAXhGQ/P5f/6uDt/cL5b
@@ -26,15 +26,15 @@ cert_chain:
26
26
  AgMBAAGjgZQwgZEwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFPZD
27
27
  HBRnWTjzjeZq3Sx/yv7hhY9rMCsGA1UdEQQkMCKBIGxhdXJlbnQubWFydGluLmFz
28
28
  cGVyYUBmci5pYm0uY29tMCsGA1UdEgQkMCKBIGxhdXJlbnQubWFydGluLmFzcGVy
29
- YUBmci5pYm0uY29tMA0GCSqGSIb3DQEBCwUAA4IBgQCtbncBw6IjRWDjiaeH6gmQ
30
- GrfPX53oAJOMnyjhhgKfLd/PPJIckCxz/Tscsuq9+ZUDTubz2E3ltycdxrz0OOul
31
- M8cWfkJ4cvdGAGTtqhmv3GGWZwFN8V8WYmmXrgej4o33vx6o8B6uwBn38hvkkAlB
32
- ixQDORrk0ck1GVUYYo2UmDOlqArf6paaqd7rziY0dntYl0DfFWe7eJYA467FKjM6
33
- /V3L2mTuHg4nCqC2febbAG+W+n158UrEkIKoOpAvQsykuuRtMaTpSTnYd0kLtQIF
34
- qNyjadnjZB8iMIedYmEOKApKUJS/9BN1iXHxVbL03AS4o5xMQO3PPjXcwwaybE8G
35
- sqAiwQUoawi1m3fZ8u3Xx+GmWE7tE9oxnPA48Y44EkiiWozq263f4S2Xa449ODoh
36
- eTf9kxhVM40wGQOECVNA8UsEEZHD48eF+csUYZtAJOF5oxTI8UyV9T/o6CgO0c9/
37
- Gzz+Qm5ULOUcPiJLjSpaiTrkiIVYiDGnqNSr6R1Hb1c=
29
+ YUBmci5pYm0uY29tMA0GCSqGSIb3DQEBCwUAA4IBgQDIMFaig1C/3xA+ccAZD89x
30
+ CF16MUxdTWkmDh1uWrC87tJzdSDwRUnvXvqnGCGU7L0slEfYfP2Aa2n/+3C70Eks
31
+ rE/SbOWEw1jvAGCZkzQehbg33rEGWymAzFzcBdwoF7AQTyux6ylhcfd0XCO+LQHW
32
+ CimlmOrKfR72Hahk7rt0fc72XY1M9q4IAc7PE/ldaiHKKzX5RbelvM8nMS8oV6tT
33
+ dIOyDDZFhBRhOmeAh6Rix57FA65pw7rxxxlMqtNYmM60s8Yzdb6YNW2p+Kk9IWgz
34
+ PCv9trmuKaozXi9HAQ7285yPMjeccIX28FWZzALu/OZt/98+E+l15rb2qq6AhYvn
35
+ FOfe1hzTtPWN7gAcyb+9pVICat2KG0WNzmM9wvLMc1IuPgaMGfeMg2moeELGAwqS
36
+ Mar5Df73cC83QnpW3RalwgGSb5ch8Cz8L9j/DaLIy/RoZ0lpNqGOvm8DUDQ/XoqM
37
+ IWpYzVavdZxwcrakRXil3x0kelFqCzC57twcNj0b0QI=
38
38
  -----END CERTIFICATE-----
39
39
  date: 1980-01-02 00:00:00.000000000 Z
40
40
  dependencies:
@@ -319,6 +319,8 @@ files:
319
319
  - README.md
320
320
  - bin/ascli
321
321
  - bin/asession
322
+ - docs/README.md
323
+ - docs/test-mcp-with-ai.md
322
324
  - lib/aspera/agent/base.rb
323
325
  - lib/aspera/agent/connect.rb
324
326
  - lib/aspera/agent/desktop.rb
@@ -334,18 +336,29 @@ files:
334
336
  - lib/aspera/api/faspex.rb
335
337
  - lib/aspera/api/httpgw.rb
336
338
  - lib/aspera/api/node.rb
339
+ - lib/aspera/api/queries/bss_subscription_account.graphql
340
+ - lib/aspera/api/queries/bss_subscription_usage.graphql
337
341
  - lib/aspera/ascmd.rb
338
342
  - lib/aspera/ascp/installation.rb
339
343
  - lib/aspera/ascp/management.rb
340
344
  - lib/aspera/assert.rb
345
+ - lib/aspera/cli/ascp_actions.rb
346
+ - lib/aspera/cli/async_transfer_store.rb
347
+ - lib/aspera/cli/bootstrapper.rb
348
+ - lib/aspera/cli/command_registry.rb
349
+ - lib/aspera/cli/command_spec.rb
350
+ - lib/aspera/cli/context.rb
341
351
  - lib/aspera/cli/error.rb
342
352
  - lib/aspera/cli/extended_value.rb
343
353
  - lib/aspera/cli/formatter.rb
354
+ - lib/aspera/cli/gem_checker.rb
344
355
  - lib/aspera/cli/hints.rb
356
+ - lib/aspera/cli/http.rb
345
357
  - lib/aspera/cli/info.rb
346
- - lib/aspera/cli/main.rb
347
- - lib/aspera/cli/manager.rb
358
+ - lib/aspera/cli/mailer.rb
359
+ - lib/aspera/cli/mcp_tool.rb
348
360
  - lib/aspera/cli/options.schema.yaml
361
+ - lib/aspera/cli/parser.rb
349
362
  - lib/aspera/cli/plugins/alee.rb
350
363
  - lib/aspera/cli/plugins/aoc.rb
351
364
  - lib/aspera/cli/plugins/ats.rb
@@ -359,16 +372,25 @@ files:
359
372
  - lib/aspera/cli/plugins/faspex5.rb
360
373
  - lib/aspera/cli/plugins/faspio.rb
361
374
  - lib/aspera/cli/plugins/httpgw.rb
375
+ - lib/aspera/cli/plugins/mcp.rb
362
376
  - lib/aspera/cli/plugins/node.rb
363
377
  - lib/aspera/cli/plugins/oauth.rb
364
378
  - lib/aspera/cli/plugins/orchestrator.rb
365
379
  - lib/aspera/cli/plugins/preview.rb
366
380
  - lib/aspera/cli/plugins/server.rb
367
381
  - lib/aspera/cli/plugins/shares.rb
382
+ - lib/aspera/cli/preset_actions.rb
383
+ - lib/aspera/cli/preset_manager.rb
384
+ - lib/aspera/cli/result.rb
385
+ - lib/aspera/cli/runner.rb
386
+ - lib/aspera/cli/secret_finder.rb
368
387
  - lib/aspera/cli/special_values.rb
369
388
  - lib/aspera/cli/sync_actions.rb
389
+ - lib/aspera/cli/terminal_formatter.rb
390
+ - lib/aspera/cli/transfer_actions.rb
370
391
  - lib/aspera/cli/transfer_agent.rb
371
392
  - lib/aspera/cli/transfer_progress.rb
393
+ - lib/aspera/cli/vault_manager.rb
372
394
  - lib/aspera/cli/version.rb
373
395
  - lib/aspera/cli/wizard.rb
374
396
  - lib/aspera/colors.rb
@@ -384,24 +406,29 @@ files:
384
406
  - lib/aspera/data_repository.rb
385
407
  - lib/aspera/dot_container.rb
386
408
  - lib/aspera/environment.rb
409
+ - lib/aspera/exec_spec.rb
387
410
  - lib/aspera/faspex_gw.rb
388
411
  - lib/aspera/faspex_postproc.rb
389
412
  - lib/aspera/formatter_interface.rb
413
+ - lib/aspera/graphql.rb
390
414
  - lib/aspera/hash_ext.rb
391
415
  - lib/aspera/id_generator.rb
392
- - lib/aspera/json_rpc.rb
416
+ - lib/aspera/json_rpc/client.rb
417
+ - lib/aspera/json_rpc/version.rb
393
418
  - lib/aspera/keychain/base.rb
394
419
  - lib/aspera/keychain/encrypted_hash.rb
395
420
  - lib/aspera/keychain/factory.rb
396
421
  - lib/aspera/keychain/hashicorp_vault.rb
397
422
  - lib/aspera/keychain/macos_security.rb
398
423
  - lib/aspera/line_logger.rb
424
+ - lib/aspera/link_header.rb
399
425
  - lib/aspera/log.rb
400
426
  - lib/aspera/markdown.rb
401
427
  - lib/aspera/nagios.rb
402
428
  - lib/aspera/node_simulator.rb
403
429
  - lib/aspera/oauth.rb
404
430
  - lib/aspera/oauth/base.rb
431
+ - lib/aspera/oauth/boot.rb
405
432
  - lib/aspera/oauth/factory.rb
406
433
  - lib/aspera/oauth/generic.rb
407
434
  - lib/aspera/oauth/jwt.rb
@@ -429,6 +456,7 @@ files:
429
456
  - lib/aspera/rest_list.rb
430
457
  - lib/aspera/schema/IBM Aspera Faspex API-5.0-enhanced.yaml
431
458
  - lib/aspera/schema/IBM Aspera on Cloud API-0.2.6-enhanced.yaml
459
+ - lib/aspera/schema/async_tables.yaml
432
460
  - lib/aspera/schema/documentation.rb
433
461
  - lib/aspera/schema/reader.rb
434
462
  - lib/aspera/schema/registry.rb
@@ -444,6 +472,7 @@ files:
444
472
  - lib/aspera/transfer/error.rb
445
473
  - lib/aspera/transfer/faux_file.rb
446
474
  - lib/aspera/transfer/parameters.rb
475
+ - lib/aspera/transfer/result.rb
447
476
  - lib/aspera/transfer/resumer.rb
448
477
  - lib/aspera/transfer/spec.rb
449
478
  - lib/aspera/transfer/spec.schema.yaml
@@ -479,7 +508,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
479
508
  version: '0'
480
509
  requirements:
481
510
  - Read the manual for any requirement
482
- rubygems_version: 4.0.10
511
+ rubygems_version: 4.0.16
483
512
  specification_version: 4
484
513
  summary: 'Execute actions using command line on IBM Aspera Server products: Aspera
485
514
  on Cloud, Faspex, Shares, Node, Console, Orchestrator, High Speed Transfer Server'
metadata.gz.sig CHANGED
Binary file