pwn 0.5.428 → 0.5.429

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb4a896d76b2eff5600f7e7464227b6223a4287e4cd4e6fba7a60df29d40bc64
4
- data.tar.gz: 93dbd97045e6ac60c4a46446bb8c681629ab462186092657e4f75bdb975eb7c9
3
+ metadata.gz: d62d95361763fc4363d172024859e5fc8cc9ea1b96b2765a37c679b468c9a22f
4
+ data.tar.gz: 8def884e714ec444f10fae2c952087acb64fc4c5f06bef088f19e3f0a39fc157
5
5
  SHA512:
6
- metadata.gz: 50aaa55f8d403788d10610c52a877bc99494678c0606b9d83fcdf623470faae899bfa6e095e0de4114832575184308d5a9303d0b5f1f15d0038f3e13b5c9e1b1
7
- data.tar.gz: fdc901980719c87ac59a14e247f352074271ed8b43572bdbd446462fb621e772db5cb065c117c07b55c68caee5bd559094e536c5316c958af8fcab1f5f7ad602
6
+ metadata.gz: d46e4790ac2a3023a6210d77641c530226127429000c3994919750fcefa3a4610b0bf7390d4790be85081a9a7846c88e1bfa6ebda334375922276678239066cc
7
+ data.tar.gz: 2f96f89617d314c6f1b9094580890b67a9b722fd9a58ee8e05642ba7c8bdd51e8f598f3e7c2cc3df267da05ba77efebbb23e29e15ccd684414b385531cad122c
data/Gemfile CHANGED
@@ -46,7 +46,7 @@ gem 'jsonpath', '1.1.5'
46
46
  gem 'json_schemer', '2.4.0'
47
47
  gem 'jwt', '3.1.2'
48
48
  gem 'libusb', '0.7.2'
49
- gem 'luhn', '1.0.2'
49
+ gem 'luhn', '2.0.0'
50
50
  gem 'mail', '2.8.1'
51
51
  gem 'meshtastic', '0.0.126'
52
52
  gem 'metasm', '1.0.5'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ cd /opt/pwn
37
37
  $ ./install.sh
38
38
  $ ./install.sh ruby-gem
39
39
  $ pwn
40
- pwn[v0.5.428]:001 >>> PWN.help
40
+ pwn[v0.5.429]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.4.4@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.428]:001 >>> PWN.help
55
+ pwn[v0.5.429]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
  If you're using a multi-user install of RVM do:
@@ -62,7 +62,7 @@ $ rvm use ruby-3.4.4@pwn
62
62
  $ rvmsudo gem uninstall --all --executables pwn
63
63
  $ rvmsudo gem install --verbose pwn
64
64
  $ pwn
65
- pwn[v0.5.428]:001 >>> PWN.help
65
+ pwn[v0.5.429]:001 >>> PWN.help
66
66
  ```
67
67
 
68
68
  PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
data/etc/pwn.yaml.EXAMPLE CHANGED
@@ -1,7 +1,30 @@
1
1
  # Drop this file in $HOME/.pwn/pwn.yaml
2
2
  # Use PWN::Plugins::Vault.create(file: 'pwn.yaml') to encrypt this file
3
+
3
4
  # ai_engine: 'openai' || 'ollama'
4
- ai_engine: 'grok'
5
+ ai:
6
+ active: 'grok'
7
+ introspection: false
8
+ grok:
9
+ base_uri: 'optional - Base URI for Grok - Use private base OR defaults to https://api.x.ai/v1'
10
+ key: 'required - OpenAI API Key'
11
+ model: 'optional - Grok model to use'
12
+ system_role_content: 'You are an ethically hacking OpenAI agent.'
13
+ temp: 'optional - OpenAI temperature'
14
+
15
+ openai:
16
+ base_uri: 'optional - Base URI for OpenAI - Use private base OR defaults to https://api.openai.com/v1'
17
+ key: 'required - OpenAI API Key'
18
+ model: 'optional - OpenAI model to use'
19
+ system_role_content: 'You are an ethically hacking OpenAI agent.'
20
+ temp: 'optional - OpenAI temperature'
21
+
22
+ ollama:
23
+ base_uri: 'required - Base URI for Open WebUI - e.g. https://ollama.local'
24
+ key: 'required - Open WebUI API Key Under Settings >> Account >> JWT Token'
25
+ model: 'required - Ollama model to use'
26
+ system_role_content: 'You are an ethically hacking Ollama agent.'
27
+ temp: 'optional - Ollama temperature'
5
28
 
6
29
  # Use PWN::Plugins::Assembly.list_supported_archs to list supported architectures
7
30
  asm:
@@ -28,27 +51,6 @@ irc:
28
51
  hunter:
29
52
  api_key: 'hunter.how API Key'
30
53
 
31
- grok:
32
- base_uri: 'optional - Base URI for Grok - Use private base OR defaults to https://api.x.ai/v1'
33
- key: 'required - OpenAI API Key'
34
- model: 'optional - Grok model to use'
35
- system_role_content: 'You are an ethically hacking OpenAI agent.'
36
- temp: 'optional - OpenAI temperature'
37
-
38
- openai:
39
- base_uri: 'optional - Base URI for OpenAI - Use private base OR defaults to https://api.openai.com/v1'
40
- key: 'required - OpenAI API Key'
41
- model: 'optional - OpenAI model to use'
42
- system_role_content: 'You are an ethically hacking OpenAI agent.'
43
- temp: 'optional - OpenAI temperature'
44
-
45
- ollama:
46
- base_uri: 'required - Base URI for Open WebUI - e.g. https://ollama.local'
47
- key: 'required - Open WebUI API Key Under Settings >> Account >> JWT Token'
48
- model: 'required - Ollama model to use'
49
- system_role_content: 'You are an ethically hacking Ollama agent.'
50
- temp: 'optional - Ollama temperature'
51
-
52
54
  meshtastic:
53
55
  psks:
54
56
  LongFast: 'required - PSK for LongFast channel'
@@ -21,7 +21,7 @@ module PWN
21
21
  if Pry.config.refresh
22
22
  # puts "Refreshing PWN env via #{opts[:yaml_config_path]}"
23
23
  opts[:pi] = pi
24
- PWN::Plugins::Vault.refresh_config_for_repl(opts)
24
+ PWN::Plugins::Vault.refresh_config(opts)
25
25
  end
26
26
 
27
27
  pi.config.pwn_repl_line += 1
@@ -48,13 +48,13 @@ module PWN
48
48
  end
49
49
 
50
50
  if pi.config.pwn_ai
51
- ai_engine = pi.config.pwn[:ai_engine]
52
- model = pi.config.pwn[ai_engine][:model]
53
- system_role_content = pi.config.pwn[ai_engine][:system_role_content]
54
- temp = pi.config.pwn[ai_engine][:temp]
55
- pname = "pwn.ai:#{ai_engine}"
56
- pname = "pwn.ai:#{ai_engine}/#{model}" if model
57
- pname = "pwn.ai:#{ai_engine}/#{model}.SPEAK" if pi.config.pwn_ai_speak
51
+ engine = pi.config.pwn[:ai][:active].to_s.downcase.to_sym
52
+ model = pi.config.pwn[:ai][engine][:model]
53
+ system_role_content = pi.config.pwn[:ai][engine][:system_role_content]
54
+ temp = pi.config.pwn[:ai][engine][:temp]
55
+ pname = "pwn.ai:#{engine}"
56
+ pname = "pwn.ai:#{engine}/#{model}" if model
57
+ pname = "pwn.ai:#{engine}/#{model}.SPEAK" if pi.config.pwn_ai_speak
58
58
  pi.config.prompt_name = pname
59
59
 
60
60
  name = "\001\e[1m\002\001\e[33m\002#{pi.config.prompt_name}\001\e[0m\002"
@@ -306,12 +306,12 @@ module PWN
306
306
  next unless dm_agent == nick
307
307
 
308
308
  response_history = ai_agents[dm_agent.to_sym][:response_history]
309
- ai_engine = pi.config.pwn[:ai_engine]
310
- base_uri = pi.config.pwn[ai_engine][:base_uri]
311
- key = pi.config.pwn[ai_engine][:key] ||= ''
312
- temp = pi.config.pwn[ai_engine][:temp]
313
- model = pi.config.pwn[ai_engine][:model]
314
- system_role_content = pi.config.pwn[ai_engine][:system_role_content]
309
+ engine = pi.config.pwn[:ai][:active].to_s.downcase.to_sym
310
+ base_uri = pi.config.pwn[:ai][engine][:base_uri]
311
+ key = pi.config.pwn[:ai][engine][:key] ||= ''
312
+ temp = pi.config.pwn[:ai][engine][:temp]
313
+ model = pi.config.pwn[:ai][engine][:model]
314
+ system_role_content = pi.config.pwn[:ai][engine][:system_role_content]
315
315
 
316
316
  users_in_chan = PWN::Plugins::IRC.names(
317
317
  irc_obj: irc_obj,
@@ -342,7 +342,7 @@ module PWN
342
342
  message.
343
343
  "
344
344
 
345
- case ai_engine
345
+ case engine
346
346
  when :grok
347
347
  response = PWN::AI::Grok.chat(
348
348
  base_uri: base_uri,
@@ -459,7 +459,7 @@ module PWN
459
459
  end
460
460
  end
461
461
 
462
- Pry::Commands.create_command 'pwn-vault-edit' do
462
+ Pry::Commands.create_command 'pwn-vault' do
463
463
  description 'Edit the pwn.yaml configuration file.'
464
464
 
465
465
  def process
@@ -541,7 +541,7 @@ module PWN
541
541
  Pry.config.hooks.add_hook(:before_session, :init_opts) do |_output, _binding, pi|
542
542
  # puts "Refreshing PWN env via #{opts[:yaml_config_path]}"
543
543
  opts[:pi] = pi
544
- PWN::Plugins::Vault.refresh_config_for_repl(opts)
544
+ PWN::Plugins::Vault.refresh_config(opts)
545
545
  end
546
546
 
547
547
  Pry.config.hooks.add_hook(:after_read, :pwn_asm_hook) do |request, pi|
@@ -585,23 +585,23 @@ module PWN
585
585
  if pi.config.pwn_ai && !request.chomp.empty?
586
586
  request = pi.input.line_buffer.to_s
587
587
  debug = pi.config.pwn_ai_debug
588
- ai_engine = pi.config.pwn[:ai_engine]
589
- base_uri = pi.config.pwn[ai_engine][:base_uri]
590
- key = pi.config.pwn[ai_engine][:key] ||= ''
588
+ engine = pi.config.pwn[:ai][:active].to_s.downcase.to_sym
589
+ base_uri = pi.config.pwn[:ai][engine][:base_uri]
590
+ key = pi.config.pwn[:ai][engine][:key] ||= ''
591
591
  if key.empty?
592
592
  key = PWN::Plugins::AuthenticationHelper.mask_password(
593
593
  prompt: 'pwn-ai Key'
594
594
  )
595
- pi.config.pwn[ai_engine][:key] = key
595
+ pi.config.pwn[:ai][engine][:key] = key
596
596
  end
597
597
 
598
- response_history = pi.config.pwn_ai_response_history
598
+ response_history = pi.config.pwn[:ai][engine][:response_history]
599
599
  speak_answer = pi.config.pwn_ai_speak
600
- model = pi.config.pwn[ai_engine][:model]
601
- system_role_content = pi.config.pwn[ai_engine][:system_role_content]
602
- temp = pi.config.pwn[ai_engine][:temp]
600
+ model = pi.config.pwn[:ai][engine][:model]
601
+ system_role_content = pi.config.pwn[:ai][engine][:system_role_content]
602
+ temp = pi.config.pwn[:ai][engine][:temp]
603
603
 
604
- case ai_engine
604
+ case engine
605
605
  when :grok
606
606
  response = PWN::AI::Grok.chat(
607
607
  base_uri: base_uri,
@@ -639,7 +639,7 @@ module PWN
639
639
  spinner: true
640
640
  )
641
641
  else
642
- raise "ERROR: Unsupported AI Engine: #{ai_engine}"
642
+ raise "ERROR: Unsupported AI Engine: #{engine}"
643
643
  end
644
644
  # puts response.inspect
645
645
 
@@ -668,7 +668,7 @@ module PWN
668
668
  pp response_history
669
669
  puts "\nresponse_history[:choices] Length: #{response_history[:choices].length}\n" unless response_history.nil?
670
670
  end
671
- pi.config.pwn_ai_response_history = response_history
671
+ pi.config.pwn[:ai][engine][:response_history] = response_history
672
672
  end
673
673
  end
674
674
  rescue StandardError => e
@@ -687,6 +687,9 @@ module PWN
687
687
 
688
688
  pwn_config_root = "#{Dir.home}/.pwn"
689
689
  FileUtils.mkdir_p(pwn_config_root)
690
+
691
+ Pry.config.history_file = "#{pwn_config_root}/pwn_history"
692
+
690
693
  opts[:yaml_config_path] ||= "#{pwn_config_root}/pwn.yaml"
691
694
  opts[:yaml_decryptor_path] ||= "#{pwn_config_root}/pwn.decryptor.yaml"
692
695
 
@@ -235,12 +235,12 @@ module PWN
235
235
  end
236
236
 
237
237
  # Supported Method Parameters::
238
- # PWN::Plugins::Vault.refresh_config_for_repl(
238
+ # PWN::Plugins::Vault.refresh_config(
239
239
  # yaml_config_path: 'required - full path to pwn.yaml file',
240
240
  # pi: 'optional - Pry instance (default: Pry)',
241
241
  # yaml_decryptor_path: 'optional - full path to decryption YAML file'
242
242
  # )
243
- public_class_method def self.refresh_config_for_repl(opts = {})
243
+ public_class_method def self.refresh_config(opts = {})
244
244
  yaml_config_path = opts[:yaml_config_path]
245
245
 
246
246
  return false unless File.exist?(yaml_config_path)
@@ -279,16 +279,15 @@ module PWN
279
279
  ]
280
280
 
281
281
  # Convert ai_engine to symbol and downcase to ensure stability
282
- yaml_config[:ai_engine] = yaml_config[:ai_engine].to_s.downcase.to_sym
283
282
  pi.config.pwn = yaml_config
284
- ai_engine = pi.config.pwn[:ai_engine]
285
- raise "ERROR: Unsupported AI Engine: #{ai_engine} in #{yaml_config_path}. Supported AI Engines:\n#{valid_ai_engines.inspect}" unless valid_ai_engines.include?(ai_engine)
283
+ engine = pi.config.pwn[:ai][:active].to_s.downcase.to_sym
284
+ raise "ERROR: Unsupported AI Engine: #{engine} in #{yaml_config_path}. Supported AI Engines:\n#{valid_ai_engines.inspect}" unless valid_ai_engines.include?(engine)
286
285
 
287
- model = pi.config.pwn[ai_engine][:model]
288
- system_role_content = pi.config.pwn[ai_engine][:system_role_content]
286
+ model = pi.config.pwn[:ai][engine][:model]
287
+ system_role_content = pi.config.pwn[:ai][engine][:system_role_content]
289
288
 
290
- # Reset the ai response history for new configurations
291
- pi.config.pwn_ai_response_history = {
289
+ # Reset the ai response history on config refresh
290
+ pi.config.pwn[:ai][engine][:response_history] = {
292
291
  id: '',
293
292
  object: '',
294
293
  model: model,
@@ -364,7 +363,7 @@ module PWN
364
363
  file: 'required - file to check if encrypted'
365
364
  )
366
365
 
367
- #{self}.refresh_config_for_repl(
366
+ #{self}.refresh_config(
368
367
  yaml_config_path: 'required - full path to pwn.yaml file',
369
368
  pi: 'optional - Pry instance (default: Pry)',
370
369
  yaml_decryptor_path: 'optional - full path to decryption YAML file'
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.5.428'
4
+ VERSION = '0.5.429'
5
5
  end
@@ -438,6 +438,17 @@
438
438
  {"messages":[{"role":"user","content":"PWN::Banner::WhiteRabbit.authors Usage"},{"role":"assistant","content":"`PWN::Banner::WhiteRabbit.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
439
439
  {"messages":[{"role":"user","content":"PWN::Banner::WhiteRabbit.get Usage"},{"role":"assistant","content":"`PWN::Banner::WhiteRabbit.get`: Supported Method Parameters\n\nPWN::Banner::WhiteRabbit.get\n"}]}
440
440
  {"messages":[{"role":"user","content":"PWN::Banner::WhiteRabbit.help Usage"},{"role":"assistant","content":"`PWN::Banner::WhiteRabbit.help`: "}]}
441
+ {"messages":[{"role":"user","content":"PWN::Blockchain.help Usage"},{"role":"assistant","content":"`PWN::Blockchain.help`: "}]}
442
+ {"messages":[{"role":"user","content":"PWN::Blockchain::BTC.authors Usage"},{"role":"assistant","content":"`PWN::Blockchain::BTC.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
443
+ {"messages":[{"role":"user","content":"PWN::Blockchain::BTC.btc_rest_call Usage"},{"role":"assistant","content":"`PWN::Blockchain::BTC.btc_rest_call`: Supported Method Parameters\n\nbtc_rest_call(\n\nhttp_method: 'optional HTTP method (defaults to GET)\nrest_call: 'required rest call to make per the schema',\nparams: 'optional params passed in the URI or HTTP Headers',\nhttp_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST',\ntimeout: 'optional timeout in seconds (defaults to 180)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
444
+ {"messages":[{"role":"user","content":"PWN::Blockchain::BTC.get_block_details Usage"},{"role":"assistant","content":"`PWN::Blockchain::BTC.get_block_details`: Supported Method Parameters\n\nPWN::Blockchain::BTC.get_block_details(\n\nheight: 'required - block height number',\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
445
+ {"messages":[{"role":"user","content":"PWN::Blockchain::BTC.get_latest_block Usage"},{"role":"assistant","content":"`PWN::Blockchain::BTC.get_latest_block`: Supported Method Parameters\n\nlatest_block = PWN::Blockchain::BTC.get_latest_block(\n\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
446
+ {"messages":[{"role":"user","content":"PWN::Blockchain::BTC.help Usage"},{"role":"assistant","content":"`PWN::Blockchain::BTC.help`: "}]}
447
+ {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.authors Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
448
+ {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.eth_rest_call Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.eth_rest_call`: Supported Method Parameters\n\neth_rest_call(\n\nhttp_method: 'optional HTTP method (defaults to GET)\nrest_call: 'required rest call to make per the schema',\nparams: 'optional params passed in the URI or HTTP Headers',\nhttp_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST',\ntimeout: 'optional timeout in seconds (defaults to 180)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
449
+ {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.get_block_details Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.get_block_details`: Supported Method Parameters\n\nPWN::Blockchain::ETH.get_block_details(\n\nheight: 'required - block height number',\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
450
+ {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.get_latest_block Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.get_latest_block`: Supported Method Parameters\n\nlatest_block = PWN::Blockchain::ETH.get_latest_block(\n\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
451
+ {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.help Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.help`: "}]}
441
452
  {"messages":[{"role":"user","content":"PWN::FFI.help Usage"},{"role":"assistant","content":"`PWN::FFI.help`: "}]}
442
453
  {"messages":[{"role":"user","content":"PWN::FFI::Stdio.authors Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
443
454
  {"messages":[{"role":"user","content":"PWN::FFI::Stdio.help Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.help`: "}]}
@@ -1023,7 +1034,7 @@
1023
1034
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.encrypt Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.encrypt`: Supported Method Parameters\n\nPWN::Plugins::Vault.encrypt(\n\nfile: 'required - file to encrypt',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt'\n\n)\n"}]}
1024
1035
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.file_encrypted? Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.file_encrypted?`: Supported Method Parameters\n\nPWN::Plugins::Vault.file_encrypted?(\n\nfile: 'required - file to check if encrypted'\n\n)\n"}]}
1025
1036
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.help`: "}]}
1026
- {"messages":[{"role":"user","content":"PWN::Plugins::Vault.refresh_config_for_repl Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.refresh_config_for_repl`: Supported Method Parameters\n\nPWN::Plugins::Vault.refresh_config_for_repl(\n\n yaml_config_path: 'required - full path to pwn.yaml file',\n pi: 'optional - Pry instance (default: Pry)',\n decryption_file: 'optional - full path to decryption YAML file'\n)\n"}]}
1037
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.refresh_config_for_repl Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.refresh_config_for_repl`: Supported Method Parameters\n\nPWN::Plugins::Vault.refresh_config_for_repl(\n\n yaml_config_path: 'required - full path to pwn.yaml file',\n pi: 'optional - Pry instance (default: Pry)',\n yaml_decryptor_path: 'optional - full path to decryption YAML file'\n)\n"}]}
1027
1038
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.refresh_encryption_secrets Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.refresh_encryption_secrets`: Supported Method Parameters\n\nPWN::Plugins::Vault.refresh_encryption_secrets(\n\nfile: 'required - file to encrypt with new key and iv',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt'\n\n)\n"}]}
1028
1039
  {"messages":[{"role":"user","content":"PWN::Plugins::Voice.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Voice.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1029
1040
  {"messages":[{"role":"user","content":"PWN::Plugins::Voice.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Voice.help`: "}]}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.428
4
+ version: 0.5.429
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -477,14 +477,14 @@ dependencies:
477
477
  requirements:
478
478
  - - '='
479
479
  - !ruby/object:Gem::Version
480
- version: 1.0.2
480
+ version: 2.0.0
481
481
  type: :runtime
482
482
  prerelease: false
483
483
  version_requirements: !ruby/object:Gem::Requirement
484
484
  requirements:
485
485
  - - '='
486
486
  - !ruby/object:Gem::Version
487
- version: 1.0.2
487
+ version: 2.0.0
488
488
  - !ruby/object:Gem::Dependency
489
489
  name: mail
490
490
  requirement: !ruby/object:Gem::Requirement