pwn 0.5.707 → 0.5.709
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
- data/documentation/Installation.md +1 -0
- data/documentation/Reinforcement-Learning.md +2 -2
- data/etc/default_skills/pwn/ai/agent/curriculum/SKILL.md +1 -0
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
- data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
- data/etc/default_skills/pwn/ai/agent/metrics/SKILL.md +4 -0
- data/etc/default_skills/pwn/ai/agent/policy/SKILL.md +1 -1
- data/etc/default_skills/pwn/ai/agent/reward/SKILL.md +2 -0
- data/etc/default_skills/pwn/ai/agent/tool_guard/SKILL.md +2 -0
- data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
- data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
- data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
- data/lib/pwn/ai/agent/assembly.rb +4 -1
- data/lib/pwn/ai/agent/btc.rb +4 -1
- data/lib/pwn/ai/agent/burp_suite.rb +5 -2
- data/lib/pwn/ai/agent/curriculum.rb +140 -37
- data/lib/pwn/ai/agent/dispatch.rb +34 -16
- data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
- data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
- data/lib/pwn/ai/agent/extrospection.rb +185 -60
- data/lib/pwn/ai/agent/gqrx.rb +4 -1
- data/lib/pwn/ai/agent/hacker_one.rb +5 -2
- data/lib/pwn/ai/agent/learning.rb +161 -29
- data/lib/pwn/ai/agent/loop.rb +84 -47
- data/lib/pwn/ai/agent/metrics.rb +198 -21
- data/lib/pwn/ai/agent/mistakes.rb +137 -20
- data/lib/pwn/ai/agent/open_goal.rb +25 -9
- data/lib/pwn/ai/agent/policy.rb +204 -53
- data/lib/pwn/ai/agent/prompt_builder.rb +38 -16
- data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
- data/lib/pwn/ai/agent/reflect.rb +9 -5
- data/lib/pwn/ai/agent/registry.rb +65 -12
- data/lib/pwn/ai/agent/result.rb +19 -10
- data/lib/pwn/ai/agent/reward.rb +175 -38
- data/lib/pwn/ai/agent/sast.rb +4 -1
- data/lib/pwn/ai/agent/swarm.rb +72 -36
- data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
- data/lib/pwn/ai/agent/tool_guard.rb +124 -6
- data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
- data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
- data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
- data/lib/pwn/ai/agent.rb +4 -0
- data/lib/pwn/ai/anthropic.rb +41 -7
- data/lib/pwn/ai/gemini.rb +21 -11
- data/lib/pwn/ai/grok.rb +44 -6
- data/lib/pwn/ai/http_retry.rb +40 -12
- data/lib/pwn/ai/ollama.rb +19 -10
- data/lib/pwn/ai/open_ai.rb +81 -30
- data/lib/pwn/ai/open_web_ui.rb +20 -14
- data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
- data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
- data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
- data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
- data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
- data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
- data/lib/pwn/ai/red_team/overreliance.rb +7 -1
- data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
- data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
- data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
- data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
- data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
- data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
- data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
- data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
- data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
- data/lib/pwn/ai/red_team.rb +4 -0
- data/lib/pwn/ai.rb +4 -0
- data/lib/pwn/aws/acm.rb +5 -2
- data/lib/pwn/aws/api_gateway.rb +10 -7
- data/lib/pwn/aws/app_stream.rb +5 -2
- data/lib/pwn/aws/application_auto_scaling.rb +5 -2
- data/lib/pwn/aws/application_discovery_service.rb +5 -2
- data/lib/pwn/aws/auto_scaling.rb +5 -2
- data/lib/pwn/aws/batch.rb +5 -2
- data/lib/pwn/aws/budgets.rb +5 -2
- data/lib/pwn/aws/cloud_formation.rb +5 -2
- data/lib/pwn/aws/cloud_front.rb +7 -4
- data/lib/pwn/aws/cloud_hsm.rb +5 -2
- data/lib/pwn/aws/cloud_search.rb +5 -2
- data/lib/pwn/aws/cloud_search_domain.rb +5 -2
- data/lib/pwn/aws/cloud_trail.rb +5 -2
- data/lib/pwn/aws/cloud_watch.rb +5 -2
- data/lib/pwn/aws/cloud_watch_events.rb +5 -2
- data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
- data/lib/pwn/aws/code_build.rb +5 -2
- data/lib/pwn/aws/code_commit.rb +5 -2
- data/lib/pwn/aws/code_deploy.rb +5 -2
- data/lib/pwn/aws/code_pipeline.rb +5 -2
- data/lib/pwn/aws/cognito_identity.rb +5 -2
- data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
- data/lib/pwn/aws/cognito_sync.rb +5 -2
- data/lib/pwn/aws/config_service.rb +5 -2
- data/lib/pwn/aws/data_pipleline.rb +5 -2
- data/lib/pwn/aws/database_migration_service.rb +5 -2
- data/lib/pwn/aws/device_farm.rb +5 -2
- data/lib/pwn/aws/direct_connect.rb +5 -2
- data/lib/pwn/aws/directory_service.rb +5 -2
- data/lib/pwn/aws/dynamo_db.rb +5 -2
- data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
- data/lib/pwn/aws/ec2.rb +5 -2
- data/lib/pwn/aws/ecr.rb +5 -2
- data/lib/pwn/aws/ecs.rb +5 -2
- data/lib/pwn/aws/efs.rb +5 -2
- data/lib/pwn/aws/elasti_cache.rb +5 -2
- data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
- data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
- data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
- data/lib/pwn/aws/elastic_transcoder.rb +5 -2
- data/lib/pwn/aws/elasticsearch_service.rb +5 -2
- data/lib/pwn/aws/emr.rb +5 -2
- data/lib/pwn/aws/firehose.rb +5 -2
- data/lib/pwn/aws/game_lift.rb +5 -2
- data/lib/pwn/aws/glacier.rb +6 -3
- data/lib/pwn/aws/health.rb +5 -2
- data/lib/pwn/aws/iam.rb +10 -4
- data/lib/pwn/aws/import_export.rb +5 -2
- data/lib/pwn/aws/inspector.rb +5 -2
- data/lib/pwn/aws/iot.rb +5 -2
- data/lib/pwn/aws/iot_data_plane.rb +5 -2
- data/lib/pwn/aws/kinesis.rb +5 -2
- data/lib/pwn/aws/kinesis_analytics.rb +5 -2
- data/lib/pwn/aws/kms.rb +5 -2
- data/lib/pwn/aws/lambda.rb +5 -2
- data/lib/pwn/aws/lambda_preview.rb +5 -2
- data/lib/pwn/aws/lex.rb +5 -2
- data/lib/pwn/aws/lightsail.rb +5 -2
- data/lib/pwn/aws/machine_learning.rb +5 -2
- data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
- data/lib/pwn/aws/marketplace_metering.rb +5 -2
- data/lib/pwn/aws/ops_works.rb +5 -2
- data/lib/pwn/aws/ops_works_cm.rb +5 -2
- data/lib/pwn/aws/pinpoint.rb +5 -2
- data/lib/pwn/aws/polly.rb +5 -2
- data/lib/pwn/aws/rds.rb +5 -2
- data/lib/pwn/aws/redshift.rb +5 -2
- data/lib/pwn/aws/rekognition.rb +5 -2
- data/lib/pwn/aws/route53.rb +5 -2
- data/lib/pwn/aws/route53_domains.rb +5 -2
- data/lib/pwn/aws/s3.rb +5 -2
- data/lib/pwn/aws/service_catalog.rb +5 -2
- data/lib/pwn/aws/ses.rb +5 -2
- data/lib/pwn/aws/shield.rb +5 -2
- data/lib/pwn/aws/simple_db.rb +5 -2
- data/lib/pwn/aws/sms.rb +5 -2
- data/lib/pwn/aws/snowball.rb +5 -2
- data/lib/pwn/aws/sns.rb +5 -2
- data/lib/pwn/aws/sqs.rb +5 -2
- data/lib/pwn/aws/ssm.rb +5 -2
- data/lib/pwn/aws/states.rb +5 -2
- data/lib/pwn/aws/storage_gateway.rb +5 -2
- data/lib/pwn/aws/sts.rb +4 -1
- data/lib/pwn/aws/support.rb +5 -2
- data/lib/pwn/aws/swf.rb +5 -2
- data/lib/pwn/aws/waf.rb +5 -2
- data/lib/pwn/aws/waf_regional.rb +5 -2
- data/lib/pwn/aws/workspaces.rb +5 -2
- data/lib/pwn/aws/x_ray.rb +5 -2
- data/lib/pwn/aws.rb +4 -0
- data/lib/pwn/banner/anon.rb +3 -0
- data/lib/pwn/banner/bubble.rb +3 -0
- data/lib/pwn/banner/cheshire.rb +3 -0
- data/lib/pwn/banner/code_cave.rb +3 -0
- data/lib/pwn/banner/dont_panic.rb +3 -0
- data/lib/pwn/banner/f_society.rb +3 -0
- data/lib/pwn/banner/fork_bomb.rb +3 -0
- data/lib/pwn/banner/jmp_esp.rb +3 -0
- data/lib/pwn/banner/matrix.rb +5 -1
- data/lib/pwn/banner/ninja.rb +3 -0
- data/lib/pwn/banner/off_the_air.rb +3 -0
- data/lib/pwn/banner/pirate.rb +3 -0
- data/lib/pwn/banner/radare2.rb +3 -0
- data/lib/pwn/banner/radare2_ai.rb +3 -0
- data/lib/pwn/banner/white_rabbit.rb +3 -0
- data/lib/pwn/banner.rb +6 -2
- data/lib/pwn/blockchain/btc.rb +8 -3
- data/lib/pwn/blockchain/eth.rb +10 -3
- data/lib/pwn/blockchain.rb +4 -0
- data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
- data/lib/pwn/bounty.rb +4 -0
- data/lib/pwn/config.rb +86 -19
- data/lib/pwn/cron.rb +297 -20
- data/lib/pwn/driver.rb +2 -18
- data/lib/pwn/ffi/adalm_pluto.rb +65 -11
- data/lib/pwn/ffi/fftw.rb +31 -6
- data/lib/pwn/ffi/hack_rf.rb +59 -8
- data/lib/pwn/ffi/liquid.rb +63 -10
- data/lib/pwn/ffi/rtl_sdr.rb +35 -5
- data/lib/pwn/ffi/soapy_sdr.rb +60 -10
- data/lib/pwn/ffi/stdio.rb +5 -8
- data/lib/pwn/ffi/volk.rb +36 -7
- data/lib/pwn/ffi.rb +12 -0
- data/lib/pwn/memory.rb +136 -16
- data/lib/pwn/memory_index.rb +34 -19
- data/lib/pwn/migrate.rb +34 -24
- data/lib/pwn/module_skills.rb +39 -8
- data/lib/pwn/plugins/aflplusplus.rb +52 -0
- data/lib/pwn/plugins/android.rb +65 -245
- data/lib/pwn/plugins/artifact_registry.rb +71 -0
- data/lib/pwn/plugins/assembly.rb +9 -4
- data/lib/pwn/plugins/authentication_helper.rb +8 -5
- data/lib/pwn/plugins/baresip.rb +59 -12
- data/lib/pwn/plugins/basic_auth.rb +9 -3
- data/lib/pwn/plugins/beef.rb +28 -18
- data/lib/pwn/plugins/binary_parser.rb +133 -0
- data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
- data/lib/pwn/plugins/burp_suite.rb +98 -68
- data/lib/pwn/plugins/bus_pirate.rb +15 -8
- data/lib/pwn/plugins/char.rb +33 -3
- data/lib/pwn/plugins/credential_attack.rb +99 -0
- data/lib/pwn/plugins/credit_card.rb +6 -1
- data/lib/pwn/plugins/dao_ldap.rb +19 -13
- data/lib/pwn/plugins/dao_mongo.rb +11 -5
- data/lib/pwn/plugins/dao_postgres.rb +28 -19
- data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
- data/lib/pwn/plugins/defect_dojo.rb +38 -22
- data/lib/pwn/plugins/detect_os.rb +5 -0
- data/lib/pwn/plugins/doctor.rb +149 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_dev.rb +264 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +61 -0
- data/lib/pwn/plugins/fuzz.rb +9 -6
- data/lib/pwn/plugins/gdb.rb +95 -0
- data/lib/pwn/plugins/git.rb +19 -14
- data/lib/pwn/plugins/github.rb +38 -15
- data/lib/pwn/plugins/google_workspace.rb +188 -45
- data/lib/pwn/plugins/hacker_one.rb +159 -35
- data/lib/pwn/plugins/hunter.rb +6 -3
- data/lib/pwn/plugins/ip_info.rb +9 -4
- data/lib/pwn/plugins/irc.rb +28 -15
- data/lib/pwn/plugins/jenkins.rb +65 -57
- data/lib/pwn/plugins/jira_data_center.rb +30 -22
- data/lib/pwn/plugins/jobs.rb +109 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- data/lib/pwn/plugins/log.rb +113 -13
- data/lib/pwn/plugins/mail_agent.rb +87 -79
- data/lib/pwn/plugins/metasploit.rb +11 -6
- data/lib/pwn/plugins/monkey_patch.rb +3 -0
- data/lib/pwn/plugins/msr206.rb +42 -28
- data/lib/pwn/plugins/nessus_cloud.rb +44 -4
- data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
- data/lib/pwn/plugins/nmap_it.rb +14 -34
- data/lib/pwn/plugins/nuclei.rb +57 -0
- data/lib/pwn/plugins/oauth2.rb +11 -5
- data/lib/pwn/plugins/ocr.rb +3 -0
- data/lib/pwn/plugins/open_api.rb +5 -2
- data/lib/pwn/plugins/openvas.rb +33 -25
- data/lib/pwn/plugins/packet.rb +152 -31
- data/lib/pwn/plugins/pdf_parse.rb +5 -2
- data/lib/pwn/plugins/pony.rb +86 -1
- data/lib/pwn/plugins/process_tube.rb +120 -0
- data/lib/pwn/plugins/ps.rb +7 -1
- data/lib/pwn/plugins/pwn_logger.rb +6 -2
- data/lib/pwn/plugins/rabbit_mq.rb +12 -7
- data/lib/pwn/plugins/radare2.rb +253 -0
- data/lib/pwn/plugins/recon.rb +161 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- data/lib/pwn/plugins/serial.rb +24 -14
- data/lib/pwn/plugins/shodan.rb +54 -35
- data/lib/pwn/plugins/slack_client.rb +11 -6
- data/lib/pwn/plugins/sock.rb +16 -8
- data/lib/pwn/plugins/spider.rb +5 -2
- data/lib/pwn/plugins/sqlmap.rb +49 -0
- data/lib/pwn/plugins/ssn.rb +3 -0
- data/lib/pwn/plugins/thread_pool.rb +6 -9
- data/lib/pwn/plugins/tor.rb +9 -4
- data/lib/pwn/plugins/transparent_browser.rb +62 -107
- data/lib/pwn/plugins/tty_spinner.rb +16 -2
- data/lib/pwn/plugins/twitter_api.rb +6 -2
- data/lib/pwn/plugins/uri_scheme.rb +4 -1
- data/lib/pwn/plugins/vault.rb +12 -3
- data/lib/pwn/plugins/vin.rb +24 -12
- data/lib/pwn/plugins/voice.rb +7 -2
- data/lib/pwn/plugins/volatility.rb +48 -0
- data/lib/pwn/plugins/vsphere.rb +9 -5
- data/lib/pwn/plugins/xxd.rb +12 -43
- data/lib/pwn/plugins/zaproxy.rb +30 -16
- data/lib/pwn/plugins.rb +19 -0
- data/lib/pwn/reports/ai_red_team.rb +6 -2
- data/lib/pwn/reports/csv.rb +8 -1
- data/lib/pwn/reports/fuzz.rb +5 -2
- data/lib/pwn/reports/html.rb +8 -1
- data/lib/pwn/reports/html_footer.rb +4 -3
- data/lib/pwn/reports/html_header.rb +6 -2
- data/lib/pwn/reports/json.rb +8 -1
- data/lib/pwn/reports/markdown.rb +8 -1
- data/lib/pwn/reports/pdf.rb +8 -1
- data/lib/pwn/reports/phone.rb +5 -2
- data/lib/pwn/reports/sast.rb +6 -2
- data/lib/pwn/reports/uri_buster.rb +5 -2
- data/lib/pwn/reports/xml.rb +8 -1
- data/lib/pwn/reports.rb +19 -0
- data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
- data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
- data/lib/pwn/sast/aws.rb +9 -3
- data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
- data/lib/pwn/sast/base64.rb +9 -3
- data/lib/pwn/sast/beef_hook.rb +9 -3
- data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
- data/lib/pwn/sast/cmd_execution_java.rb +9 -3
- data/lib/pwn/sast/cmd_execution_python.rb +9 -3
- data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
- data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
- data/lib/pwn/sast/csrf.rb +9 -3
- data/lib/pwn/sast/deserial_java.rb +9 -3
- data/lib/pwn/sast/emoticon.rb +9 -3
- data/lib/pwn/sast/eval.rb +9 -3
- data/lib/pwn/sast/factory.rb +9 -3
- data/lib/pwn/sast/http_authorization_header.rb +9 -3
- data/lib/pwn/sast/inner_html.rb +9 -3
- data/lib/pwn/sast/keystore.rb +9 -3
- data/lib/pwn/sast/local_storage.rb +9 -3
- data/lib/pwn/sast/location_hash.rb +9 -3
- data/lib/pwn/sast/log4j.rb +9 -3
- data/lib/pwn/sast/logger.rb +9 -3
- data/lib/pwn/sast/md5.rb +9 -3
- data/lib/pwn/sast/outer_html.rb +9 -3
- data/lib/pwn/sast/padding_oracle.rb +9 -3
- data/lib/pwn/sast/password.rb +9 -3
- data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
- data/lib/pwn/sast/php_type_juggling.rb +9 -3
- data/lib/pwn/sast/pom_version.rb +9 -3
- data/lib/pwn/sast/port.rb +9 -3
- data/lib/pwn/sast/post_message.rb +9 -3
- data/lib/pwn/sast/private_key.rb +9 -3
- data/lib/pwn/sast/redirect.rb +9 -3
- data/lib/pwn/sast/redos.rb +9 -3
- data/lib/pwn/sast/shell.rb +9 -3
- data/lib/pwn/sast/signature.rb +9 -3
- data/lib/pwn/sast/sql.rb +9 -3
- data/lib/pwn/sast/ssl.rb +9 -3
- data/lib/pwn/sast/sudo.rb +9 -3
- data/lib/pwn/sast/task_tag.rb +9 -3
- data/lib/pwn/sast/test_case_engine.rb +11 -7
- data/lib/pwn/sast/throw_errors.rb +9 -3
- data/lib/pwn/sast/token.rb +9 -3
- data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
- data/lib/pwn/sast/use_after_free.rb +9 -3
- data/lib/pwn/sast/version.rb +9 -3
- data/lib/pwn/sast/window_location_hash.rb +9 -3
- data/lib/pwn/sast.rb +4 -0
- data/lib/pwn/sdr/decoder/adsb.rb +36 -5
- data/lib/pwn/sdr/decoder/apt.rb +9 -6
- data/lib/pwn/sdr/decoder/base.rb +74 -22
- data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
- data/lib/pwn/sdr/decoder/dect.rb +12 -3
- data/lib/pwn/sdr/decoder/dsp.rb +229 -39
- data/lib/pwn/sdr/decoder/flex.rb +59 -11
- data/lib/pwn/sdr/decoder/gps.rb +12 -3
- data/lib/pwn/sdr/decoder/gsm.rb +24 -4
- data/lib/pwn/sdr/decoder/iridium.rb +12 -3
- data/lib/pwn/sdr/decoder/lora.rb +13 -4
- data/lib/pwn/sdr/decoder/lte.rb +27 -3
- data/lib/pwn/sdr/decoder/morse.rb +12 -3
- data/lib/pwn/sdr/decoder/p25.rb +12 -3
- data/lib/pwn/sdr/decoder/pager.rb +8 -5
- data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
- data/lib/pwn/sdr/decoder/rds.rb +14 -8
- data/lib/pwn/sdr/decoder/rfid.rb +12 -3
- data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
- data/lib/pwn/sdr/decoder/rtty.rb +8 -5
- data/lib/pwn/sdr/decoder/wifi.rb +12 -3
- data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
- data/lib/pwn/sdr/decoder.rb +9 -0
- data/lib/pwn/sdr/flipper_zero.rb +17 -10
- data/lib/pwn/sdr/frequency_allocation.rb +4 -1
- data/lib/pwn/sdr/gqrx.rb +178 -119
- data/lib/pwn/sdr/rfidler.rb +4 -1
- data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
- data/lib/pwn/sdr.rb +14 -0
- data/lib/pwn/sessions.rb +86 -16
- data/lib/pwn/setup.rb +94 -37
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/app_cobalt_io.rb +11 -5
- data/lib/pwn/www/bing.rb +10 -5
- data/lib/pwn/www/bug_crowd.rb +11 -5
- data/lib/pwn/www/checkip.rb +8 -4
- data/lib/pwn/www/coinbase_pro.rb +11 -5
- data/lib/pwn/www/duckduckgo.rb +12 -6
- data/lib/pwn/www/facebook.rb +11 -5
- data/lib/pwn/www/github.rb +11 -5
- data/lib/pwn/www/google.rb +11 -5
- data/lib/pwn/www/hacker_one.rb +20 -9
- data/lib/pwn/www/linkedin.rb +11 -5
- data/lib/pwn/www/pandora.rb +11 -5
- data/lib/pwn/www/pastebin.rb +9 -4
- data/lib/pwn/www/paypal.rb +19 -11
- data/lib/pwn/www/synack.rb +11 -5
- data/lib/pwn/www/torch.rb +13 -8
- data/lib/pwn/www/trading_view.rb +11 -5
- data/lib/pwn/www/twitter.rb +11 -5
- data/lib/pwn/www/uber.rb +11 -5
- data/lib/pwn/www/upwork.rb +11 -5
- data/lib/pwn/www/wayback_machine.rb +12 -6
- data/lib/pwn/www/youtube.rb +10 -5
- data/lib/pwn/www.rb +4 -0
- data/spec/conventions_spec.rb +118 -2
- data/spec/integration/prompt_builder_spec.rb +1 -1
- data/spec/integration/reinforced_feedback_loop_spec.rb +8 -8
- data/spec/lib/pwn/ai/agent/injection_guard_spec.rb +65 -0
- data/spec/lib/pwn/ai/agent/metrics_spec.rb +15 -0
- data/spec/lib/pwn/ai/agent/mistakes_spec.rb +5 -2
- data/spec/lib/pwn/ai/agent/policy_spec.rb +33 -2
- data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
- data/spec/lib/pwn/ai/agent/scoreboard_roadmap_spec.rb +61 -0
- data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
- data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
- data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
- data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
- data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
- data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
- data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
- data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
- data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
- data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
- data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
- data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
- data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
- data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/third_party/pwn_rdoc.jsonl +136 -6
- metadata +49 -3
- data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
- data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
data/lib/pwn/ai/agent/metrics.rb
CHANGED
|
@@ -484,7 +484,69 @@ module PWN
|
|
|
484
484
|
# Supported Method Parameters::
|
|
485
485
|
# PWN::AI::Agent::Metrics.reset
|
|
486
486
|
|
|
487
|
+
public_class_method def self.calibration_green?(opts = {})
|
|
488
|
+
cal = calibration(engine: opts[:engine])
|
|
489
|
+
return false if cal[:n].to_i < 8
|
|
490
|
+
return false if cal[:overconfidence].nil?
|
|
491
|
+
|
|
492
|
+
cal[:overconfidence].to_f <= 0.08
|
|
493
|
+
rescue StandardError
|
|
494
|
+
false
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
public_class_method def self.scale_prediction(opts = {})
|
|
498
|
+
p = opts[:predicted].to_f.clamp(0.0, 1.0)
|
|
499
|
+
cal = calibration(engine: opts[:engine])
|
|
500
|
+
return p.round(3) if cal[:n].to_i < 8 || cal[:overconfidence].nil?
|
|
501
|
+
|
|
502
|
+
oc = cal[:overconfidence].to_f
|
|
503
|
+
return p.round(3) if oc <= 0.02
|
|
504
|
+
|
|
505
|
+
temp = (1.0 + (4.0 * oc.clamp(0.0, 1.0))).clamp(1.0, 8.0)
|
|
506
|
+
q = p.clamp(1.0e-6, 1.0 - 1.0e-6)
|
|
507
|
+
logit = Math.log(q / (1.0 - q))
|
|
508
|
+
scaled = 1.0 / (1.0 + Math.exp(-(logit / temp)))
|
|
509
|
+
scaled.round(3)
|
|
510
|
+
rescue StandardError
|
|
511
|
+
opts[:predicted].to_f.clamp(0.0, 1.0)
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
public_class_method def self.scoreboard(opts = {})
|
|
515
|
+
rows = summary(limit: 50)
|
|
516
|
+
tool_ok = if rows.empty?
|
|
517
|
+
nil
|
|
518
|
+
else
|
|
519
|
+
w = rows.sum { |r| r[:calls].to_f }
|
|
520
|
+
w.positive? ? (rows.sum { |r| r[:success_rate].to_f * r[:calls].to_i } / w).round(3) : nil
|
|
521
|
+
end
|
|
522
|
+
task_ok = nil
|
|
523
|
+
if defined?(Learning) && Learning.respond_to?(:outcomes)
|
|
524
|
+
rec = Learning.outcomes(limit: 200)
|
|
525
|
+
if rec.any?
|
|
526
|
+
hits = rec.count { |r| r[:success] == true || r[:score].to_f >= 0.6 }
|
|
527
|
+
task_ok = (hits.to_f / rec.length).round(3)
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
cal = calibration(engine: opts[:engine])
|
|
531
|
+
judge_ok = cal[:mean_actual]
|
|
532
|
+
if judge_ok.nil? && defined?(Reward) && Reward.respond_to?(:sentinel)
|
|
533
|
+
s = Reward.sentinel
|
|
534
|
+
judge_ok = s[:judge] if s.is_a?(Hash)
|
|
535
|
+
end
|
|
536
|
+
{
|
|
537
|
+
tool_ok: tool_ok,
|
|
538
|
+
task_ok: task_ok,
|
|
539
|
+
judge_ok: judge_ok,
|
|
540
|
+
mean_predicted: cal[:mean_predicted],
|
|
541
|
+
overconfidence: cal[:overconfidence],
|
|
542
|
+
n: cal[:n].to_i
|
|
543
|
+
}
|
|
544
|
+
rescue StandardError
|
|
545
|
+
{ tool_ok: nil, task_ok: nil, judge_ok: nil, n: 0 }
|
|
546
|
+
end
|
|
547
|
+
|
|
487
548
|
public_class_method def self.health_line
|
|
549
|
+
board = scoreboard
|
|
488
550
|
gap = nil
|
|
489
551
|
if defined?(Reward) && Reward.respond_to?(:sentinel)
|
|
490
552
|
s = Reward.sentinel
|
|
@@ -497,7 +559,9 @@ module PWN
|
|
|
497
559
|
end
|
|
498
560
|
traj = (Reward.generator_mix[:trajectory_fraction] if defined?(Reward) && Reward.respond_to?(:generator_mix))
|
|
499
561
|
parked = (Mistakes.operator_inbox(limit: 50)[:count] if defined?(Mistakes) && Mistakes.respond_to?(:operator_inbox))
|
|
500
|
-
"HEALTH
|
|
562
|
+
"HEALTH tool_ok=#{board[:tool_ok] || '-'} task_ok=#{board[:task_ok] || '-'} " \
|
|
563
|
+
"judge_ok=#{board[:judge_ok] || '-'} pred=#{board[:mean_predicted] || '-'} " \
|
|
564
|
+
"judge-proxy-gap=#{gap || '-'} repeating=#{trend[:status] || '-'} " \
|
|
501
565
|
"w1-traj=#{traj || '-'} parked-needs-human=#{parked || '-'}\n"
|
|
502
566
|
rescue StandardError
|
|
503
567
|
''
|
|
@@ -587,26 +651,139 @@ module PWN
|
|
|
587
651
|
# Display Usage for this Module
|
|
588
652
|
|
|
589
653
|
public_class_method def self.help
|
|
590
|
-
puts
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
654
|
+
puts "USAGE:
|
|
655
|
+
# Run load and return its result
|
|
656
|
+
#{self}.load
|
|
657
|
+
|
|
658
|
+
# Run save and return its result
|
|
659
|
+
#{self}.save(
|
|
660
|
+
metrics: 'required - Hash returned by .load / mutated in place'
|
|
661
|
+
)
|
|
662
|
+
|
|
663
|
+
# Run record and return its result
|
|
664
|
+
#{self}.record(
|
|
665
|
+
name: 'required - tool name that was dispatched',
|
|
666
|
+
success: 'required - Boolean, did the handler complete without error',
|
|
667
|
+
duration: 'optional - Float seconds the dispatch took',
|
|
668
|
+
error: 'optional - String error message when success is false',
|
|
669
|
+
engine: 'optional - Symbol/String AI engine that chose this tool (segments telemetry)'
|
|
670
|
+
)
|
|
671
|
+
|
|
672
|
+
# Run summary and return its result
|
|
673
|
+
#{self}.summary(
|
|
674
|
+
limit: 'optional - cap number of tools returned (default 25)',
|
|
675
|
+
engine: 'optional - only that engine\\s sub-bucket (falls back to global when absent)'
|
|
676
|
+
)
|
|
677
|
+
|
|
678
|
+
# Run to context and return its result
|
|
679
|
+
#{self}.to_context(
|
|
680
|
+
limit: 'optional - cap number of tools included (default 8)',
|
|
681
|
+
engine: 'optional - restrict to one engine\\s telemetry'
|
|
682
|
+
)
|
|
683
|
+
|
|
684
|
+
# P4 helper — Registry.rank calls this so β·advantage is scaled down
|
|
685
|
+
#{self}.proxy_trust
|
|
686
|
+
|
|
687
|
+
# Run ucb and return its result
|
|
688
|
+
#{self}.ucb(
|
|
689
|
+
name: 'optional - binary or identifier name',
|
|
690
|
+
c: 'optional - c value consumed by #ucb'
|
|
691
|
+
)
|
|
692
|
+
|
|
693
|
+
# Run thompson and return its result
|
|
694
|
+
#{self}.thompson(
|
|
695
|
+
name: 'optional - binary or identifier name'
|
|
696
|
+
)
|
|
697
|
+
|
|
698
|
+
# Run advantage and return its result
|
|
699
|
+
#{self}.advantage(
|
|
700
|
+
name: 'optional - binary or identifier name'
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
# Run prm advantage and return its result
|
|
704
|
+
#{self}.prm_advantage(
|
|
705
|
+
name: 'optional - binary or identifier name'
|
|
706
|
+
)
|
|
707
|
+
|
|
708
|
+
# Run prm n and return its result
|
|
709
|
+
#{self}.prm_n(
|
|
710
|
+
name: 'optional - binary or identifier name'
|
|
711
|
+
)
|
|
712
|
+
|
|
713
|
+
# P18 — called by Reward.prm after session annotate so live routing
|
|
714
|
+
#{self}.record_step_reward(
|
|
715
|
+
name: 'required - binary or identifier name',
|
|
716
|
+
reward: 'optional - reward value consumed by #record_step_reward'
|
|
717
|
+
)
|
|
718
|
+
|
|
719
|
+
# P20 — fold ORM judge (0..1) into per-tool telemetry so UCB /
|
|
720
|
+
#{self}.record_judge(
|
|
721
|
+
name: 'required - binary or identifier name',
|
|
722
|
+
score: 'optional - score value consumed by #record_judge',
|
|
723
|
+
confidence: 'optional - confidence value consumed by #record_judge',
|
|
724
|
+
source: 'optional - source value consumed by #record_judge'
|
|
725
|
+
)
|
|
726
|
+
|
|
727
|
+
# P1 — mean judge confidence for a tool (nil when no samples)
|
|
728
|
+
#{self}.judge_confidence(
|
|
729
|
+
name: 'optional - binary or identifier name'
|
|
730
|
+
)
|
|
731
|
+
|
|
732
|
+
# Mean judge score for a tool (nil when no ORM samples yet)
|
|
733
|
+
#{self}.judge_rate(
|
|
734
|
+
name: 'optional - binary or identifier name'
|
|
735
|
+
)
|
|
736
|
+
|
|
737
|
+
# Blended success rate: when proxy_distrust > 0 and judge samples
|
|
738
|
+
#{self}.effective_rate(
|
|
739
|
+
name: 'optional - binary or identifier name'
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
# Run changepoints and return its result
|
|
743
|
+
#{self}.changepoints(
|
|
744
|
+
cause: 'optional - :env_drift and does NOT count toward [REPEATING].',
|
|
745
|
+
within_secs: 'optional - within secs value consumed by #changepoints'
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
# W3 — plan_first emits p(success); Loop.run calls this with the
|
|
749
|
+
#{self}.record_calibration(
|
|
750
|
+
engine: 'optional - engine value consumed by #record_calibration (defaults to :global))',
|
|
751
|
+
brier: 'optional - brier value consumed by #record_calibration',
|
|
752
|
+
predicted: 'optional - predicted value consumed by #record_calibration',
|
|
753
|
+
actual: 'optional - actual value consumed by #record_calibration'
|
|
754
|
+
)
|
|
755
|
+
|
|
756
|
+
# Run calibration and return its result
|
|
757
|
+
#{self}.calibration(
|
|
758
|
+
engine: 'required - engine value consumed by #calibration'
|
|
759
|
+
)
|
|
760
|
+
|
|
761
|
+
# Run calibration green and return its result
|
|
762
|
+
#{self}.calibration_green?(
|
|
763
|
+
engine: 'optional - engine value consumed by #calibration_green?'
|
|
764
|
+
)
|
|
765
|
+
|
|
766
|
+
# Run scale prediction and return its result
|
|
767
|
+
#{self}.scale_prediction(
|
|
768
|
+
predicted: 'optional - predicted value consumed by #scale_prediction',
|
|
769
|
+
engine: 'optional - engine value consumed by #scale_prediction'
|
|
770
|
+
)
|
|
771
|
+
|
|
772
|
+
# Run scoreboard and return its result
|
|
773
|
+
#{self}.scoreboard(
|
|
774
|
+
engine: 'optional - engine value consumed by #scoreboard'
|
|
775
|
+
)
|
|
776
|
+
|
|
777
|
+
# Run health line and return its result
|
|
778
|
+
#{self}.health_line
|
|
779
|
+
|
|
780
|
+
# Run reset and return its result
|
|
781
|
+
#{self}.reset
|
|
782
|
+
|
|
783
|
+
# Print the AUTHOR(S) string for this module.
|
|
784
|
+
#{self}.authors
|
|
785
|
+
"
|
|
786
|
+
constants.sort
|
|
610
787
|
end
|
|
611
788
|
end
|
|
612
789
|
end
|
|
@@ -504,7 +504,12 @@ module PWN
|
|
|
504
504
|
# 2.6 — request-conditioned rank (sim × recency × count), same idea
|
|
505
505
|
# as exemplars_for. Stops injecting loudest scar (reward_signal ×13)
|
|
506
506
|
# on every unrelated turn.
|
|
507
|
-
|
|
507
|
+
include_open = opts[:include_open] == true || opts[:full] == true || request.match?(/mistake|known error|repeat/i)
|
|
508
|
+
open = if include_open
|
|
509
|
+
rank_for_request(rows: open_rows, request: request, limit: limit)
|
|
510
|
+
else
|
|
511
|
+
[]
|
|
512
|
+
end
|
|
508
513
|
closed = load.values.select { |m| m[:resolved] && m[:fix] }
|
|
509
514
|
closed = rank_for_request(rows: closed, request: request, limit: limit)
|
|
510
515
|
return '' if open.empty? && closed.empty?
|
|
@@ -779,7 +784,9 @@ module PWN
|
|
|
779
784
|
# Strip volatile substrings so semantically-identical failures
|
|
780
785
|
# collapse to one signature and their :count actually climbs.
|
|
781
786
|
private_class_method def self.normalize_error(opts = {})
|
|
782
|
-
e = opts[:error].to_s.strip
|
|
787
|
+
e = opts[:error].to_s.strip
|
|
788
|
+
klass = e[/\b([A-Z][A-Za-z0-9_]+(?:Error|Exception|Interrupt))\b/, 1].to_s
|
|
789
|
+
e = e.downcase
|
|
783
790
|
e = e.gsub(/0x[0-9a-f]{4,}/, '0xADDR')
|
|
784
791
|
e = e.gsub(%r{(/[\w.@+-]+)+/?}, '/PATH')
|
|
785
792
|
e = e.gsub(/:\d+:in\b/, ':LINE:in')
|
|
@@ -790,7 +797,8 @@ module PWN
|
|
|
790
797
|
e = e.gsub(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/, 'UUID')
|
|
791
798
|
e = e.gsub(/\bpid\s*\d+\b/, 'pid N')
|
|
792
799
|
e = e.gsub(/\b\d{4,}\b/, 'N')
|
|
793
|
-
e.gsub(/\s+/, ' ')[0,
|
|
800
|
+
body = e.gsub(/\s+/, ' ')[0, 180]
|
|
801
|
+
klass.empty? ? body : "#{klass.downcase}|#{body}"
|
|
794
802
|
end
|
|
795
803
|
|
|
796
804
|
# Age-weighted count for [REPEATING] threshold — a ×8 signature from
|
|
@@ -835,23 +843,132 @@ module PWN
|
|
|
835
843
|
# Display Usage for this Module
|
|
836
844
|
|
|
837
845
|
public_class_method def self.help
|
|
838
|
-
puts
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
846
|
+
puts "USAGE:
|
|
847
|
+
# Run load and return its result
|
|
848
|
+
#{self}.load
|
|
849
|
+
|
|
850
|
+
# Run save and return its result
|
|
851
|
+
#{self}.save(
|
|
852
|
+
store: 'optional - store value consumed by #save'
|
|
853
|
+
)
|
|
854
|
+
|
|
855
|
+
# Run signature and return its result
|
|
856
|
+
#{self}.signature(
|
|
857
|
+
tool: 'required - tool/component name that failed',
|
|
858
|
+
error: 'required - raw error text (will be normalised)'
|
|
859
|
+
)
|
|
860
|
+
|
|
861
|
+
# Run find and return its result
|
|
862
|
+
#{self}.find(
|
|
863
|
+
signature: 'optional - exact signature to fetch',
|
|
864
|
+
tool: 'optional - with error:, compute signature and fetch',
|
|
865
|
+
error: 'optional - raw error text (used with tool:)'
|
|
866
|
+
)
|
|
867
|
+
|
|
868
|
+
# Run for tool and return its result
|
|
869
|
+
#{self}.for_tool(
|
|
870
|
+
tool: 'required - tool name',
|
|
871
|
+
unresolved_only: 'optional - default false'
|
|
872
|
+
)
|
|
873
|
+
|
|
874
|
+
# Run record and return its result
|
|
875
|
+
#{self}.record(
|
|
876
|
+
tool: 'required - tool/component that produced the failure',
|
|
877
|
+
error: 'required - error text / message',
|
|
878
|
+
args: 'optional - args that triggered it (stored truncated as sample)',
|
|
879
|
+
session_id: 'optional - PWN::Sessions id',
|
|
880
|
+
source: 'optional - :tool | :user_correction | :loop | :model | :heuristic (default :tool)',
|
|
881
|
+
force: 'optional - force value consumed by #record',
|
|
882
|
+
meta: 'optional - meta value consumed by #record',
|
|
883
|
+
cause: 'optional - cause value consumed by #record (defaults to :self))',
|
|
884
|
+
shape: 'optional - shape value consumed by #record',
|
|
885
|
+
needs_code_change: 'optional - needs code change value consumed by #record'
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
# Run resolve and return its result
|
|
889
|
+
#{self}.resolve(
|
|
890
|
+
signature: 'required - mistake signature (from mistakes_list / .top)',
|
|
891
|
+
fix: 'required - what to do INSTEAD next time',
|
|
892
|
+
structured: 'optional - structured value consumed by #resolve',
|
|
893
|
+
clear_needs_code_change: 'optional - clear needs code change value consumed by #resolve'
|
|
894
|
+
)
|
|
895
|
+
|
|
896
|
+
# Run top and return its result
|
|
897
|
+
#{self}.top(
|
|
898
|
+
limit: 'optional - max rows (default 10)',
|
|
899
|
+
unresolved_only: 'optional - default true',
|
|
900
|
+
practiceable_only: 'optional - practiceable only value consumed by #top'
|
|
901
|
+
)
|
|
902
|
+
|
|
903
|
+
# Run extinguish and return its result
|
|
904
|
+
#{self}.extinguish!(
|
|
905
|
+
signature: 'optional - signature value consumed by #extinguish!',
|
|
906
|
+
shape: 'optional - shape value consumed by #extinguish!',
|
|
907
|
+
force: 'optional - force value consumed by #extinguish!'
|
|
908
|
+
)
|
|
909
|
+
|
|
910
|
+
# Auto-resolve parked items that already have a known extinguish recipe
|
|
911
|
+
#{self}.extinguish_parked!(
|
|
912
|
+
limit: 'optional - limit value consumed by #extinguish_parked!',
|
|
913
|
+
dry_run: 'optional - dry run value consumed by #extinguish_parked!'
|
|
914
|
+
)
|
|
915
|
+
|
|
916
|
+
# Run park and return its result
|
|
917
|
+
#{self}.park(
|
|
918
|
+
signature: 'required - signature value consumed by #park',
|
|
919
|
+
reason: 'optional - reason value consumed by #park'
|
|
920
|
+
)
|
|
921
|
+
|
|
922
|
+
# Operator inbox: parked / needs_code_change / needs_human scars that
|
|
923
|
+
#{self}.operator_inbox(
|
|
924
|
+
limit: 'optional - limit value consumed by #operator_inbox'
|
|
925
|
+
)
|
|
926
|
+
|
|
927
|
+
# Run to context and return its result
|
|
928
|
+
#{self}.to_context(
|
|
929
|
+
limit: 'optional - limit value consumed by #to_context (defaults to 6)',
|
|
930
|
+
request: 'optional - request value consumed by #to_context',
|
|
931
|
+
include_open: 'optional - include open value consumed by #to_context',
|
|
932
|
+
full: 'optional - full value consumed by #to_context'
|
|
933
|
+
)
|
|
934
|
+
|
|
935
|
+
# Run correction hint and return its result
|
|
936
|
+
#{self}.correction_hint(
|
|
937
|
+
tool: 'required - tool that just failed',
|
|
938
|
+
error: 'required - raw error it failed with'
|
|
939
|
+
)
|
|
940
|
+
|
|
941
|
+
# Run correction and return its result
|
|
942
|
+
#{self}.correction?(
|
|
943
|
+
request: 'optional - request value consumed by #correction?'
|
|
944
|
+
)
|
|
945
|
+
|
|
946
|
+
# Run check user correction and return its result
|
|
947
|
+
#{self}.check_user_correction(
|
|
948
|
+
request: 'required - the incoming user message',
|
|
949
|
+
session_id: 'optional - session to inspect for the previous answer'
|
|
950
|
+
)
|
|
951
|
+
|
|
952
|
+
# Run lean and return its result
|
|
953
|
+
#{self}.lean!(
|
|
954
|
+
dry_run: 'optional - Boolean (default false)',
|
|
955
|
+
max_resolved_kept: 'optional - cap on resolved-with-fix records',
|
|
956
|
+
resolved_min_age_days: 'optional - age before resolved count=1 may drop'
|
|
957
|
+
)
|
|
958
|
+
|
|
959
|
+
# Run reset and return its result
|
|
960
|
+
#{self}.reset
|
|
961
|
+
|
|
962
|
+
# Age-weighted count for [REPEATING] threshold — a ×8 signature from
|
|
963
|
+
#{self}.effective_count(
|
|
964
|
+
mistake: 'optional - mistake value consumed by #effective_count',
|
|
965
|
+
signature: 'optional - signature value consumed by #effective_count'
|
|
966
|
+
)
|
|
967
|
+
|
|
968
|
+
# Print the AUTHOR(S) string for this module.
|
|
969
|
+
#{self}.authors
|
|
970
|
+
"
|
|
971
|
+
constants.sort
|
|
855
972
|
end
|
|
856
973
|
end
|
|
857
974
|
end
|
|
@@ -67,15 +67,31 @@ module PWN
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
public_class_method def self.help
|
|
70
|
-
puts
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
puts "USAGE:
|
|
71
|
+
# Run goal file and return its result
|
|
72
|
+
#{self}.goal_file
|
|
73
|
+
|
|
74
|
+
# Run current and return its result
|
|
75
|
+
#{self}.current
|
|
76
|
+
|
|
77
|
+
# Run begin and return its result
|
|
78
|
+
#{self}.begin!(
|
|
79
|
+
request: 'required - request value consumed by #begin!',
|
|
80
|
+
session_id: 'optional - session id value consumed by #begin!'
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Run clear and return its result
|
|
84
|
+
#{self}.clear!
|
|
85
|
+
|
|
86
|
+
# Run resume and return its result
|
|
87
|
+
#{self}.resume?(
|
|
88
|
+
request: 'optional - request value consumed by #resume?'
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Print the AUTHOR(S) string for this module.
|
|
92
|
+
#{self}.authors
|
|
93
|
+
"
|
|
94
|
+
constants.sort
|
|
79
95
|
end
|
|
80
96
|
end
|
|
81
97
|
end
|