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/reward.rb
CHANGED
|
@@ -177,7 +177,16 @@ module PWN
|
|
|
177
177
|
v[:confidence] = [v[:confidence].to_f, ground[:confidence].to_f].max if ground[:confidence]
|
|
178
178
|
end
|
|
179
179
|
|
|
180
|
-
v[:success] =
|
|
180
|
+
v[:success] = promote_to_success?(
|
|
181
|
+
orm: v[:source].to_s != 'heuristic' && v[:score].to_f >= 0.6,
|
|
182
|
+
verify: if ground.nil?
|
|
183
|
+
nil
|
|
184
|
+
else
|
|
185
|
+
ground[:verdict] == :confirmed
|
|
186
|
+
end,
|
|
187
|
+
critic: opts.key?(:critic_pass) ? opts[:critic_pass] : nil
|
|
188
|
+
)
|
|
189
|
+
v[:needs_spot_check] = v[:success] && v[:score].to_f >= 0.85 && (rand < 0.05)
|
|
181
190
|
v[:engine] = eng
|
|
182
191
|
# W3 — write Brier on every judged turn so overconfidence can
|
|
183
192
|
# throttle max_iters/critic even when plan_first never fired.
|
|
@@ -195,9 +204,16 @@ module PWN
|
|
|
195
204
|
{ score: 0.5, verdict: :unknown, rationale: "judge error: #{e.class}", success: !final.strip.empty?, error: e.message, confidence: 0.2, source: :error }
|
|
196
205
|
end
|
|
197
206
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
207
|
+
public_class_method def self.promote_to_success?(opts = {})
|
|
208
|
+
flags = []
|
|
209
|
+
flags << (opts[:orm] ? true : false) unless opts[:orm].nil?
|
|
210
|
+
flags << (opts[:verify] ? true : false) unless opts[:verify].nil?
|
|
211
|
+
flags << (opts[:critic] ? true : false) unless opts[:critic].nil?
|
|
212
|
+
return false if flags.empty?
|
|
213
|
+
return flags.first if flags.length == 1
|
|
214
|
+
|
|
215
|
+
flags.count(true) >= 2
|
|
216
|
+
end
|
|
201
217
|
|
|
202
218
|
# Supported Method Parameters::
|
|
203
219
|
# steps = PWN::AI::Agent::Reward.prm(
|
|
@@ -1315,12 +1331,16 @@ module PWN
|
|
|
1315
1331
|
req_toks = request.downcase.scan(/[a-z0-9_]{3,}/).uniq
|
|
1316
1332
|
fin_toks = final.downcase.scan(/[a-z0-9_]{3,}/).uniq
|
|
1317
1333
|
overlap = req_toks.empty? ? 1.0 : (req_toks & fin_toks).length.to_f / req_toks.length
|
|
1318
|
-
|
|
1319
|
-
|
|
1334
|
+
long_analytical = final.length >= 800
|
|
1335
|
+
score = [score, 0.35].min if overlap < 0.08 && req_toks.length >= 4 && score > 0.35 && !long_analytical
|
|
1336
|
+
ev_score = ev ? ev[:score].to_f : 0.0
|
|
1320
1337
|
bad = trace.count { |t| !semantic_ok(name: 'shell', raw: t.to_s)[:semantic_ok] }
|
|
1321
1338
|
ratio = trace.empty? ? 0.5 : 1.0 - (bad.to_f / trace.length)
|
|
1322
1339
|
score = ((score * 0.85) + (ratio * 0.15)).round(3)
|
|
1323
|
-
score = score.
|
|
1340
|
+
score = [score, 0.45].min if overlap >= 0.4 && ev_score < 0.55
|
|
1341
|
+
score = [score, 0.45].min if ratio <= 0.15
|
|
1342
|
+
score = [score, 0.70].min
|
|
1343
|
+
score = score.round(2).clamp(0.0, 0.70)
|
|
1324
1344
|
verdict = if score >= 0.6 then :solved
|
|
1325
1345
|
elsif score >= 0.3 then :partial
|
|
1326
1346
|
else :wrong
|
|
@@ -1710,37 +1730,154 @@ module PWN
|
|
|
1710
1730
|
# Display Usage for this Module
|
|
1711
1731
|
|
|
1712
1732
|
public_class_method def self.help
|
|
1713
|
-
puts
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1733
|
+
puts "USAGE:
|
|
1734
|
+
# R1 — LLM Outcome Reward Model
|
|
1735
|
+
#{self}.judge(
|
|
1736
|
+
request: 'required - original user request',
|
|
1737
|
+
final: 'required - assistant final answer',
|
|
1738
|
+
session_id: 'optional - PWN::Sessions id (adds tool trace)',
|
|
1739
|
+
trace: 'optional - Array of tool-result strings (overrides session_id)',
|
|
1740
|
+
commit: 'optional - write score into learning.jsonl / sentinel (default true)',
|
|
1741
|
+
critic_pass: 'optional - critic pass value consumed by #judge',
|
|
1742
|
+
predicted: 'optional - predicted value consumed by #judge',
|
|
1743
|
+
proxy_ok: 'optional - proxy ok value consumed by #judge'
|
|
1744
|
+
)
|
|
1745
|
+
|
|
1746
|
+
# Run promote to success and return its result
|
|
1747
|
+
#{self}.promote_to_success?(
|
|
1748
|
+
orm: 'optional - orm value consumed by #promote_to_success?',
|
|
1749
|
+
verify: 'optional - verify value consumed by #promote_to_success?',
|
|
1750
|
+
critic: 'optional - critic value consumed by #promote_to_success?'
|
|
1751
|
+
)
|
|
1752
|
+
|
|
1753
|
+
# Run prm and return its result
|
|
1754
|
+
#{self}.prm(
|
|
1755
|
+
request: 'required - user goal',
|
|
1756
|
+
session_id: 'optional - session to score in place',
|
|
1757
|
+
trace: 'optional - Array of {name:, args:, result:} or Strings'
|
|
1758
|
+
)
|
|
1759
|
+
|
|
1760
|
+
# Plan-quality soft signal (W3 feature / Learning tag)
|
|
1761
|
+
#{self}.plan_coverage(
|
|
1762
|
+
plan: 'required - Array of task strings or outline text',
|
|
1763
|
+
final: 'required - assistant final answer',
|
|
1764
|
+
request: 'optional - original user request',
|
|
1765
|
+
trace: 'optional - Array of tool-result strings',
|
|
1766
|
+
session_id: 'optional - load trace from session when trace empty'
|
|
1767
|
+
)
|
|
1768
|
+
|
|
1769
|
+
# R3 — Reward-hacking sentinel
|
|
1770
|
+
#{self}.sentinel
|
|
1771
|
+
|
|
1772
|
+
# P4 — scalar 0.0..1.0 haircut applied to Metrics success / Registry β when
|
|
1773
|
+
#{self}.proxy_distrust
|
|
1774
|
+
|
|
1775
|
+
# Run set proxy distrust and return its result
|
|
1776
|
+
#{self}.set_proxy_distrust(
|
|
1777
|
+
gap: 'optional - gap value consumed by #set_proxy_distrust',
|
|
1778
|
+
proxy: 'optional - scheme://proxy_host:port, or tor',
|
|
1779
|
+
judge: 'optional - judge value consumed by #set_proxy_distrust'
|
|
1780
|
+
)
|
|
1781
|
+
|
|
1782
|
+
# Run clear proxy distrust and return its result
|
|
1783
|
+
#{self}.clear_proxy_distrust
|
|
1784
|
+
|
|
1785
|
+
# One-shot: wipe sentinel window + distrust after deploying the
|
|
1786
|
+
#{self}.reset_sentinel
|
|
1787
|
+
|
|
1788
|
+
# P10 — backfill the R3 ring from Learning outcomes so offline/local
|
|
1789
|
+
#{self}.warm_sentinel(
|
|
1790
|
+
limit: 'optional - limit value consumed by #warm_sentinel'
|
|
1791
|
+
)
|
|
1792
|
+
|
|
1793
|
+
# R4 — Structured tool-result classifier
|
|
1794
|
+
#{self}.semantic_ok(
|
|
1795
|
+
name: 'required - tool name',
|
|
1796
|
+
raw: 'required - JSON string returned by Dispatch.call',
|
|
1797
|
+
args: 'optional - the tool call arguments (used for BENIGN_EXIT)'
|
|
1798
|
+
)
|
|
1799
|
+
|
|
1800
|
+
# 2.2 — coarse recoverable shape beside the fingerprint. Paths are
|
|
1801
|
+
#{self}.recoverable_shape(
|
|
1802
|
+
err: 'optional - err value consumed by #recoverable_shape',
|
|
1803
|
+
stderr: 'optional - stderr value consumed by #recoverable_shape',
|
|
1804
|
+
exit_code: 'optional - exit code value consumed by #recoverable_shape'
|
|
1805
|
+
)
|
|
1806
|
+
|
|
1807
|
+
# E3 — verify-as-reward (ground truth without a human)
|
|
1808
|
+
#{self}.verify_as_reward(
|
|
1809
|
+
final: 'optional - final value consumed by #verify_as_reward'
|
|
1810
|
+
)
|
|
1811
|
+
|
|
1812
|
+
# Run record preference and return its result
|
|
1813
|
+
#{self}.record_preference(
|
|
1814
|
+
prompt: 'required - prompt value consumed by #record_preference',
|
|
1815
|
+
rejected: 'required - rejected value consumed by #record_preference',
|
|
1816
|
+
chosen: 'required - chosen value consumed by #record_preference',
|
|
1817
|
+
force: 'optional - force value consumed by #record_preference',
|
|
1818
|
+
source: 'optional - source value consumed by #record_preference (defaults to :unknown))',
|
|
1819
|
+
shape: 'optional - shape value consumed by #record_preference',
|
|
1820
|
+
meta: 'optional - meta value consumed by #record_preference'
|
|
1821
|
+
)
|
|
1822
|
+
|
|
1823
|
+
# Share of `source` among the newest WRITE_SOURCE_WINDOW prefs
|
|
1824
|
+
#{self}.write_source_quota(
|
|
1825
|
+
source: 'optional - source value consumed by #write_source_quota'
|
|
1826
|
+
)
|
|
1827
|
+
|
|
1828
|
+
# P0 — online generator mix report + urgency flags. Controllers
|
|
1829
|
+
#{self}.generator_mix(
|
|
1830
|
+
limit: 'optional - limit value consumed by #generator_mix (defaults to WRITE_SOURCE_WINDOW)'
|
|
1831
|
+
)
|
|
1832
|
+
|
|
1833
|
+
# P0 ops — infer trajectory shape for legacy ledger rows that predate
|
|
1834
|
+
#{self}.infer_shape(
|
|
1835
|
+
row: 'optional - row value consumed by #infer_shape'
|
|
1836
|
+
)
|
|
1837
|
+
|
|
1838
|
+
# P15 — keep only usable preference pairs for balance/export/promote
|
|
1839
|
+
#{self}.usable_preference?(
|
|
1840
|
+
row: 'optional - row value consumed by #usable_preference?'
|
|
1841
|
+
)
|
|
1842
|
+
|
|
1843
|
+
# P15 — one-shot ledger hygiene. Filters in place (rewrite jsonl) or
|
|
1844
|
+
#{self}.scrub_preferences(
|
|
1845
|
+
dry_run: 'optional - dry run value consumed by #scrub_preferences'
|
|
1846
|
+
)
|
|
1847
|
+
|
|
1848
|
+
# P15/P5 — geometry-aware source mix. scrub:true uses usable_preference?
|
|
1849
|
+
#{self}.preference_balance(
|
|
1850
|
+
limit: 'optional - limit value consumed by #preference_balance (defaults to 10_000)',
|
|
1851
|
+
scrub: 'optional - scrub value consumed by #preference_balance'
|
|
1852
|
+
)
|
|
1853
|
+
|
|
1854
|
+
# Run preferences and return its result
|
|
1855
|
+
#{self}.preferences(
|
|
1856
|
+
limit: 'optional - limit value consumed by #preferences (defaults to 500)',
|
|
1857
|
+
source: 'required - source value consumed by #preferences'
|
|
1858
|
+
)
|
|
1859
|
+
|
|
1860
|
+
# Run export dpo and return its result
|
|
1861
|
+
#{self}.export_dpo(
|
|
1862
|
+
format: 'optional - format value consumed by #export_dpo (defaults to :dpo))',
|
|
1863
|
+
out: 'optional - out value consumed by #export_dpo',
|
|
1864
|
+
scrub: 'optional - scrub value consumed by #export_dpo',
|
|
1865
|
+
balance: 'optional - balance value consumed by #export_dpo',
|
|
1866
|
+
source_cap: 'optional - source cap value consumed by #export_dpo'
|
|
1867
|
+
)
|
|
1868
|
+
|
|
1869
|
+
# Run reset and return its result
|
|
1870
|
+
#{self}.reset
|
|
1871
|
+
|
|
1872
|
+
# Weight a judge sample for sentinel / Learning haircuts
|
|
1873
|
+
#{self}.judge_sample_weight(
|
|
1874
|
+
source: 'optional - source value consumed by #judge_sample_weight'
|
|
1875
|
+
)
|
|
1876
|
+
|
|
1877
|
+
# Print the AUTHOR(S) string for this module.
|
|
1878
|
+
#{self}.authors
|
|
1879
|
+
"
|
|
1880
|
+
constants.sort
|
|
1744
1881
|
end
|
|
1745
1882
|
end
|
|
1746
1883
|
end
|
data/lib/pwn/ai/agent/sast.rb
CHANGED
|
@@ -37,12 +37,15 @@ module PWN
|
|
|
37
37
|
|
|
38
38
|
public_class_method def self.help
|
|
39
39
|
puts "USAGE:
|
|
40
|
-
|
|
40
|
+
# Run analyze and return its result
|
|
41
|
+
#{self}.analyze(
|
|
41
42
|
request: 'required - A string containing the source code snippet to be analyzed for SAST antipatterns and vulnerabilities.'
|
|
42
43
|
)
|
|
43
44
|
|
|
45
|
+
# Print the AUTHOR(S) string for this module.
|
|
44
46
|
#{self}.authors
|
|
45
47
|
"
|
|
48
|
+
constants.sort
|
|
46
49
|
end
|
|
47
50
|
end
|
|
48
51
|
end
|
data/lib/pwn/ai/agent/swarm.rb
CHANGED
|
@@ -396,42 +396,78 @@ module PWN
|
|
|
396
396
|
# Display Usage for this Module
|
|
397
397
|
|
|
398
398
|
public_class_method def self.help
|
|
399
|
-
puts
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
399
|
+
puts "USAGE:
|
|
400
|
+
# Persona registry (~/.pwn/agents.yml)
|
|
401
|
+
#{self}.personas
|
|
402
|
+
|
|
403
|
+
# Run spawn and return its result
|
|
404
|
+
#{self}.spawn(
|
|
405
|
+
name: 'required - persona name (snake_case)',
|
|
406
|
+
role: 'required - system_role_content overlay for this persona',
|
|
407
|
+
toolsets: 'optional - Array of Registry toolset names',
|
|
408
|
+
engine: 'optional - :openai / :anthropic / :grok / :gemini / :ollama / :openwebui',
|
|
409
|
+
max_iters: 'optional - per-turn iteration cap for this persona'
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
# Run retire and return its result
|
|
413
|
+
#{self}.retire(
|
|
414
|
+
name: 'optional - binary or identifier name'
|
|
415
|
+
)
|
|
416
|
+
|
|
417
|
+
# Swarm lifecycle & bus
|
|
418
|
+
#{self}.create(
|
|
419
|
+
topic: 'optional - topic value consumed by #create'
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
# Run list and return its result
|
|
423
|
+
#{self}.list
|
|
424
|
+
|
|
425
|
+
# Run bus append and return its result
|
|
426
|
+
#{self}.bus_append(
|
|
427
|
+
swarm_id: 'required - required, from: required, content: required',
|
|
428
|
+
to: 'optional - optional (default :all)',
|
|
429
|
+
from: 'optional - sender account or address to bind as operator',
|
|
430
|
+
content: 'optional - content value consumed by #bus_append'
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
# Run bus tail and return its result
|
|
434
|
+
#{self}.bus_tail(
|
|
435
|
+
swarm_id: 'optional - swarm id value consumed by #bus_tail',
|
|
436
|
+
limit: 'optional - limit value consumed by #bus_tail'
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
# Core: run a single persona turn under Loop.run
|
|
440
|
+
#{self}.ask(
|
|
441
|
+
name: 'required - persona name from ~/.pwn/agents.yml',
|
|
442
|
+
request: 'required - what to ask/instruct the persona',
|
|
443
|
+
swarm_id: 'optional - join an existing swarm (created if omitted)',
|
|
444
|
+
to: 'optional - addressee recorded on the bus (default :all)',
|
|
445
|
+
on_tool: 'optional - ->(name, args, result) live-UI callback',
|
|
446
|
+
from: 'optional - sender account or address to bind as operator (defaults to caller_label)',
|
|
447
|
+
text_only: 'required - text only value consumed by #ask'
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
# Run debate and return its result
|
|
451
|
+
#{self}.debate(
|
|
452
|
+
names: 'required - Array of persona names, order = speaking order',
|
|
453
|
+
topic: 'required - opening question / claim',
|
|
454
|
+
rounds: 'optional - full passes over names (default 2)',
|
|
455
|
+
swarm_id: 'optional - join an existing swarm',
|
|
456
|
+
on_tool: 'optional - ->(name, args, result) live-UI callback'
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
# Run broadcast and return its result
|
|
460
|
+
#{self}.broadcast(
|
|
461
|
+
request: 'required - required, names: optional - default all personas',
|
|
462
|
+
swarm_id: 'optional - swarm id value consumed by #broadcast',
|
|
463
|
+
names: 'required - Array names value consumed by #broadcast',
|
|
464
|
+
on_tool: 'optional - on tool value consumed by #broadcast'
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
# Print the AUTHOR(S) string for this module.
|
|
468
|
+
#{self}.authors
|
|
469
|
+
"
|
|
470
|
+
constants.sort
|
|
435
471
|
end
|
|
436
472
|
end
|
|
437
473
|
end
|
|
@@ -1808,42 +1808,171 @@ module PWN
|
|
|
1808
1808
|
# Display Usage for this Module
|
|
1809
1809
|
|
|
1810
1810
|
public_class_method def self.help
|
|
1811
|
-
puts
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1811
|
+
puts "USAGE:
|
|
1812
|
+
# Run enabled and return its result
|
|
1813
|
+
#{self}.enabled?
|
|
1814
|
+
|
|
1815
|
+
# Run verbose and return its result
|
|
1816
|
+
#{self}.verbose?
|
|
1817
|
+
|
|
1818
|
+
# LLM plan generation is on by default. Set
|
|
1819
|
+
#{self}.llm_plan_enabled?
|
|
1820
|
+
|
|
1821
|
+
# Run every n and return its result
|
|
1822
|
+
#{self}.every_n
|
|
1823
|
+
|
|
1824
|
+
# Run interval s and return its result
|
|
1825
|
+
#{self}.interval_s
|
|
1826
|
+
|
|
1827
|
+
# Per-run state (also safe for nested/swarm if callers keep their own hash)
|
|
1828
|
+
#{self}.fresh(
|
|
1829
|
+
request: 'optional - original user goal string'
|
|
1830
|
+
)
|
|
1831
|
+
|
|
1832
|
+
# Every request gets a task compass. There is no request type
|
|
1833
|
+
#{self}.needs_task_breakdown?
|
|
1834
|
+
|
|
1835
|
+
# Request → ordered tangible tasks (each may map to many tools)
|
|
1836
|
+
#{self}.plan(
|
|
1837
|
+
request: 'required - user goal string',
|
|
1838
|
+
state: 'optional - fresh() hash to mutate',
|
|
1839
|
+
tasks: 'optional - Array injected plan array (tests)',
|
|
1840
|
+
llm_tasks: 'optional - injected LLM task array (tests)'
|
|
1841
|
+
)
|
|
1842
|
+
|
|
1843
|
+
# Format the full plan as the task-summary body (shown in entirety)
|
|
1844
|
+
#{self}.format_plan(
|
|
1845
|
+
tasks: 'required - Array of task strings',
|
|
1846
|
+
request: 'optional - goal string'
|
|
1847
|
+
)
|
|
1848
|
+
|
|
1849
|
+
# Run emit plan and return its result
|
|
1850
|
+
#{self}.emit_plan!(
|
|
1851
|
+
state: 'required - state value consumed by #emit_plan!',
|
|
1852
|
+
request: 'required - request value consumed by #emit_plan!'
|
|
1853
|
+
)
|
|
1854
|
+
|
|
1855
|
+
# Prefer Reflect when module_reflection is on (teacher engine / gated)
|
|
1856
|
+
#{self}.chat_for_plan(
|
|
1857
|
+
request: 'required - user goal to decompose'
|
|
1858
|
+
)
|
|
1859
|
+
|
|
1860
|
+
# Parse JSON array, fenced JSON, or numbered/bulleted plain text
|
|
1861
|
+
#{self}.parse_llm_tasks(
|
|
1862
|
+
raw: 'required - raw LLM response text'
|
|
1863
|
+
)
|
|
1864
|
+
|
|
1865
|
+
# Thin offline fallback when the LLM is disabled or unavailable
|
|
1866
|
+
#{self}.fallback_decompose(
|
|
1867
|
+
goal: 'required - user goal string'
|
|
1868
|
+
)
|
|
1869
|
+
|
|
1870
|
+
# Back-compat alias used by older call sites / specs
|
|
1871
|
+
#{self}.heuristic_decompose(
|
|
1872
|
+
goal: 'required - user goal string'
|
|
1873
|
+
)
|
|
1874
|
+
|
|
1875
|
+
# High-level brief for a collection of impending tool calls
|
|
1876
|
+
#{self}.about_to(
|
|
1877
|
+
tools: 'optional - array of {name:, args:} or bare names',
|
|
1878
|
+
name: 'optional - single tool name (legacy one-tool path)',
|
|
1879
|
+
args: 'optional - single tool args (ignored for brief content)',
|
|
1880
|
+
request: 'optional - goal text',
|
|
1881
|
+
state: 'optional - fresh() hash'
|
|
1882
|
+
)
|
|
1883
|
+
|
|
1884
|
+
# Active plain-English plan item (and index/n) for Loop / model steering
|
|
1885
|
+
#{self}.active_task(
|
|
1886
|
+
state: 'required - fresh() hash',
|
|
1887
|
+
messages: 'optional - messages value consumed by #active_task'
|
|
1888
|
+
)
|
|
1889
|
+
|
|
1890
|
+
# Remaining English work units that lack tool-result evidence
|
|
1891
|
+
#{self}.unfinished_tasks(
|
|
1892
|
+
state: 'required - fresh() hash',
|
|
1893
|
+
messages: 'optional - Loop message array for extra coverage'
|
|
1894
|
+
)
|
|
1895
|
+
|
|
1896
|
+
# True while a multi-step English plan still has uncovered work
|
|
1897
|
+
#{self}.plan_open?(
|
|
1898
|
+
state: 'required - fresh() hash',
|
|
1899
|
+
messages: 'optional - Loop message array'
|
|
1900
|
+
)
|
|
1901
|
+
|
|
1902
|
+
# Short block for engine messages: full plan + focus on active English task
|
|
1903
|
+
#{self}.plan_context(
|
|
1904
|
+
state: 'required - fresh() hash'
|
|
1905
|
+
)
|
|
1906
|
+
|
|
1907
|
+
# Build a Registry/tool-router relevance string from English tasks
|
|
1908
|
+
#{self}.relevance_query(
|
|
1909
|
+
state: 'optional - fresh() hash',
|
|
1910
|
+
request: 'optional - original user goal fallback'
|
|
1911
|
+
)
|
|
1912
|
+
|
|
1913
|
+
# Inject / refresh the active-task focus into Loop messages when plan_idx changes
|
|
1914
|
+
#{self}.active_task_prompt(
|
|
1915
|
+
state: 'required - fresh() hash',
|
|
1916
|
+
force: 'optional - Boolean re-emit even if idx unchanged',
|
|
1917
|
+
messages: 'optional - messages value consumed by #active_task_prompt',
|
|
1918
|
+
request: 'optional - request value consumed by #active_task_prompt'
|
|
1919
|
+
)
|
|
1920
|
+
|
|
1921
|
+
# Pull the operators original ask out of curriculum / critic / GOAL+PLAN
|
|
1922
|
+
#{self}.canonical_request(
|
|
1923
|
+
request: 'required - raw user or wrapper string'
|
|
1924
|
+
)
|
|
1925
|
+
|
|
1926
|
+
# True when a candidate plan item is tool jargon (e.g. `shell`,
|
|
1927
|
+
#{self}.tool_jargon_task?(
|
|
1928
|
+
item: 'required - candidate task string'
|
|
1929
|
+
)
|
|
1930
|
+
|
|
1931
|
+
# Parse a plan_first / red_team surviving outline into tangible tasks
|
|
1932
|
+
#{self}.parse_outline_tasks(
|
|
1933
|
+
outline: 'required - free-text plan outline'
|
|
1934
|
+
)
|
|
1935
|
+
|
|
1936
|
+
# After S4 red_team / plan_first: optionally rewrite ts_state[:plan]
|
|
1937
|
+
#{self}.unify_plan!(
|
|
1938
|
+
state: 'required - fresh() hash',
|
|
1939
|
+
outline: 'required - plan_first text and/or red_team hint',
|
|
1940
|
+
source: 'optional - :plan_first|:red_team|:merged (default :merged)'
|
|
1941
|
+
)
|
|
1942
|
+
|
|
1943
|
+
# Advance or hold plan_idx from an R2 step batch
|
|
1944
|
+
#{self}.apply_prm_advancement!(
|
|
1945
|
+
state: 'required - fresh() hash',
|
|
1946
|
+
rewards: 'required - Array of -1|0|1 (batch order)',
|
|
1947
|
+
intents: 'optional - Array of intent verb strings for the batch',
|
|
1948
|
+
names: 'optional - Array tool names in the batch',
|
|
1949
|
+
result: 'optional - latest tool result string',
|
|
1950
|
+
mistake: 'optional - truthy when a mistake fingerprint hit this batch'
|
|
1951
|
+
)
|
|
1952
|
+
|
|
1953
|
+
# Record a completed tool. Does NOT emit task lines with results
|
|
1954
|
+
#{self}.record!(
|
|
1955
|
+
state: 'required - fresh() hash',
|
|
1956
|
+
name: 'required - tool name',
|
|
1957
|
+
args: 'optional - tool args',
|
|
1958
|
+
result: 'optional - tool result string'
|
|
1959
|
+
)
|
|
1960
|
+
|
|
1961
|
+
# Optional progress / done line (verbose or flush). Still plain English;
|
|
1962
|
+
#{self}.emit!(
|
|
1963
|
+
state: 'required - fresh() hash',
|
|
1964
|
+
final: 'optional - Boolean closing brief (default: false)'
|
|
1965
|
+
)
|
|
1966
|
+
|
|
1967
|
+
# Run flush and return its result
|
|
1968
|
+
#{self}.flush!(
|
|
1969
|
+
state: 'required - fresh() hash'
|
|
1970
|
+
)
|
|
1971
|
+
|
|
1972
|
+
# Print the AUTHOR(S) string for this module.
|
|
1973
|
+
#{self}.authors
|
|
1974
|
+
"
|
|
1975
|
+
constants.sort
|
|
1847
1976
|
end
|
|
1848
1977
|
end
|
|
1849
1978
|
end
|