pwn 0.5.643 → 0.5.650
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/Agent-Tool-Registry.md +10 -5
- data/documentation/Cron.md +3 -2
- data/documentation/Home.md +2 -2
- data/documentation/How-PWN-Works.md +1 -1
- data/documentation/Mistakes.md +13 -0
- data/documentation/Reinforcement-Learning.md +72 -3
- data/documentation/Skills-Memory-Learning.md +5 -3
- data/documentation/What-is-PWN.md +1 -1
- data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +3 -3
- data/documentation/diagrams/dot/reinforcement-learning.dot +8 -8
- data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +318 -319
- data/documentation/diagrams/reinforcement-learning.svg +188 -187
- data/documentation/pwn-ai-Agent.md +6 -5
- data/lib/pwn/ai/agent/curriculum.rb +491 -35
- data/lib/pwn/ai/agent/extrospection.rb +18 -4
- data/lib/pwn/ai/agent/learning.rb +308 -54
- data/lib/pwn/ai/agent/loop.rb +145 -11
- data/lib/pwn/ai/agent/metrics.rb +200 -11
- data/lib/pwn/ai/agent/mistakes.rb +26 -8
- data/lib/pwn/ai/agent/registry.rb +24 -2
- data/lib/pwn/ai/agent/reward.rb +447 -7
- data/lib/pwn/ai/agent/tools/curriculum.rb +23 -0
- data/lib/pwn/ai/agent/tools/reward.rb +86 -0
- data/lib/pwn/ai/agent/tools/ruby_eval.rb +29 -6
- data/lib/pwn/cron.rb +14 -2
- data/lib/pwn/version.rb +1 -1
- data/spec/integration/reinforced_feedback_loop_spec.rb +806 -12
- data/spec/lib/pwn/ai/agent/reward_spec.rb +64 -1
- data/spec/lib/pwn/ai/agent/tools/ruby_eval_spec.rb +39 -1
- data/third_party/pwn_rdoc.jsonl +33 -4
- metadata +1 -1
|
@@ -35,7 +35,12 @@ describe PWN::AI::Agent::Reward do
|
|
|
35
35
|
stub_const('PWN::AI::Agent::Reward::DPO_DIR', tmp)
|
|
36
36
|
|
|
37
37
|
described_class.record_preference(prompt: 'p', rejected: 'bad', chosen: 'good', source: :user_correction)
|
|
38
|
-
|
|
38
|
+
# P21/P25 — mistakes_resolve requires a trajectory shape
|
|
39
|
+
described_class.record_preference(
|
|
40
|
+
prompt: 'p2', rejected: 'failing shell args',
|
|
41
|
+
chosen: "STRATEGY: x\nWINNING_TRACE:\nshell → uname -r\n#{'t' * 40}",
|
|
42
|
+
source: :mistakes_resolve, shape: :winning_trace
|
|
43
|
+
)
|
|
39
44
|
expect(described_class.preferences.length).to eq 2
|
|
40
45
|
expect(described_class.preferences(source: 'user_correction').length).to eq 1
|
|
41
46
|
|
|
@@ -144,4 +149,62 @@ describe PWN::AI::Agent::Reward do
|
|
|
144
149
|
expect(File.exist?(File.join(tmp, 's.json'))).to be false
|
|
145
150
|
expect(File.exist?(File.join(tmp, 'prefs.jsonl'))).to be true
|
|
146
151
|
end
|
|
152
|
+
it 'write_source_quota and weak pair geometry (P9)' do
|
|
153
|
+
tmp = Dir.mktmpdir
|
|
154
|
+
stub_const('PWN::AI::Agent::Reward::PREFERENCES_FILE', File.join(tmp, 'prefs.jsonl'))
|
|
155
|
+
r = described_class.record_preference(prompt: 'p', rejected: 'a', chosen: 'CORRECTION: no', source: :critic)
|
|
156
|
+
expect(r[:skipped]).to eq :weak_pair_geometry
|
|
157
|
+
11.times do |i|
|
|
158
|
+
described_class.record_preference(prompt: "p#{i}", rejected: "r#{i}", chosen: "c#{i}", source: :mistakes_resolve, force: true)
|
|
159
|
+
end
|
|
160
|
+
q = described_class.write_source_quota(source: 'mistakes_resolve')
|
|
161
|
+
expect(q[:over_cap]).to be true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'warm_sentinel fills from learning outcomes (P10)' do
|
|
165
|
+
tmp = Dir.mktmpdir
|
|
166
|
+
stub_const('PWN::AI::Agent::Reward::SENTINEL_FILE', File.join(tmp, 's.json'))
|
|
167
|
+
stub_const('PWN::AI::Agent::Learning::LEARNING_FILE', File.join(tmp, 'l.jsonl'))
|
|
168
|
+
50.times do |i|
|
|
169
|
+
PWN::AI::Agent::Learning.note_outcome(task: "t#{i}", success: true, score: 0.8, details: 'd')
|
|
170
|
+
end
|
|
171
|
+
r = described_class.warm_sentinel(limit: 60)
|
|
172
|
+
expect(r[:added]).to be > 0
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'scrub_preferences and usable_preference? (P15)' do
|
|
176
|
+
tmp = Dir.mktmpdir
|
|
177
|
+
stub_const('PWN::AI::Agent::Reward::PREFERENCES_FILE', File.join(tmp, 'prefs.jsonl'))
|
|
178
|
+
described_class.record_preference(
|
|
179
|
+
prompt: 'p', rejected: 'long rejected text ' * 20,
|
|
180
|
+
chosen: 'CORRECTION: no', source: :critic, force: true
|
|
181
|
+
)
|
|
182
|
+
described_class.record_preference(
|
|
183
|
+
prompt: 'q', rejected: 'bad',
|
|
184
|
+
chosen: "WINNING_TRACE:\n#{'shell ok ' * 30}",
|
|
185
|
+
source: :curriculum, shape: :winning_trace, force: true
|
|
186
|
+
)
|
|
187
|
+
dry = described_class.scrub_preferences(dry_run: true)
|
|
188
|
+
expect(dry[:dropped]).to be >= 1
|
|
189
|
+
wet = described_class.scrub_preferences(dry_run: false)
|
|
190
|
+
expect(wet[:after]).to be < wet[:before]
|
|
191
|
+
bal = described_class.preference_balance(scrub: true)
|
|
192
|
+
expect(bal).to have_key(:trajectory_fraction)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it 'export_dpo reports geometry_dropped (P15)' do
|
|
196
|
+
tmp = Dir.mktmpdir
|
|
197
|
+
stub_const('PWN::AI::Agent::Reward::PREFERENCES_FILE', File.join(tmp, 'prefs.jsonl'))
|
|
198
|
+
stub_const('PWN::AI::Agent::Reward::DPO_DIR', tmp)
|
|
199
|
+
described_class.record_preference(
|
|
200
|
+
prompt: 'p', rejected: 'r' * 500, chosen: 'CORRECTION: x', source: :mistakes_resolve, force: true
|
|
201
|
+
)
|
|
202
|
+
described_class.record_preference(
|
|
203
|
+
prompt: 'q', rejected: 'r', chosen: "WINNING_TRACE:\n#{'t' * 100}",
|
|
204
|
+
source: :counterfactual, shape: :real_dispatch, force: true
|
|
205
|
+
)
|
|
206
|
+
info = described_class.export_dpo(out: File.join(tmp, 'd.jsonl'))
|
|
207
|
+
expect(info[:geometry_dropped]).to be >= 1
|
|
208
|
+
expect(info[:scrubbed]).to be true
|
|
209
|
+
end
|
|
147
210
|
end
|
|
@@ -1,10 +1,48 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'spec_helper'
|
|
4
|
+
require 'json'
|
|
4
5
|
|
|
5
6
|
describe 'PWN::AI::Agent::Tools ruby_eval' do
|
|
6
|
-
|
|
7
|
+
before(:all) do
|
|
7
8
|
PWN::AI::Agent::Registry.discover
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'registers the pwn_eval tool' do
|
|
8
12
|
expect(PWN::AI::Agent::Registry.lookup(name: 'pwn_eval')).not_to be_nil
|
|
9
13
|
end
|
|
14
|
+
|
|
15
|
+
it 'returns structured error for SyntaxError payloads (constant block param)' do
|
|
16
|
+
entry = PWN::AI::Agent::Registry.lookup(name: 'pwn_eval')
|
|
17
|
+
result = entry.handler.call(code: 'results = probes.map do |R|')
|
|
18
|
+
expect(result).to be_a(Hash)
|
|
19
|
+
expect(result[:error]).to match(/SyntaxError/)
|
|
20
|
+
expect(result[:error]).to match(/\(pwn_eval\)/)
|
|
21
|
+
expect(result[:error]).not_to match(/ruby_eval\.rb:49/)
|
|
22
|
+
expect(result[:hint]).to match(/\|r\| not \|R\|/)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'evaluates valid code and returns stdout + value' do
|
|
26
|
+
entry = PWN::AI::Agent::Registry.lookup(name: 'pwn_eval')
|
|
27
|
+
result = entry.handler.call(code: '1 + 1')
|
|
28
|
+
expect(result[:error]).to be_nil
|
|
29
|
+
expect(result[:value]).to eq('2')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'Dispatch.call JSON-wraps syntax errors instead of raising' do
|
|
33
|
+
out = PWN::AI::Agent::Dispatch.call(
|
|
34
|
+
tool_call: {
|
|
35
|
+
id: 't1',
|
|
36
|
+
type: 'function',
|
|
37
|
+
function: {
|
|
38
|
+
name: 'pwn_eval',
|
|
39
|
+
arguments: JSON.generate(code: 'results = probes.map do |R|')
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
parsed = JSON.parse(out, symbolize_names: true)
|
|
44
|
+
# handler now rescues → success:true with error key in result
|
|
45
|
+
expect(parsed[:success]).to eq(true)
|
|
46
|
+
expect(parsed[:result][:error]).to match(/SyntaxError/)
|
|
47
|
+
end
|
|
10
48
|
end
|
data/third_party/pwn_rdoc.jsonl
CHANGED
|
@@ -13,15 +13,17 @@
|
|
|
13
13
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::BurpSuite.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BurpSuite.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
14
14
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::BurpSuite.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BurpSuite.help`: "}]}
|
|
15
15
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.ab_gate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.ab_gate`: "}]}
|
|
16
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.ab_gate_v2 Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.ab_gate_v2`: "}]}
|
|
16
17
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.ask_persona Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.ask_persona`: "}]}
|
|
17
18
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
18
19
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.axolotl_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.axolotl_config`: "}]}
|
|
19
20
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.build_eval_set Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.build_eval_set`: "}]}
|
|
20
21
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.build_telemetry Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.build_telemetry`: "}]}
|
|
21
22
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.bump_cooldown! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.bump_cooldown!`: "}]}
|
|
22
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.calibrate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.calibrate`:
|
|
23
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.calibrate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.calibrate`: "}]}
|
|
23
24
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.counterfactual Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.counterfactual`: "}]}
|
|
24
25
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.critic Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.critic`: Supported Method Parameters\n\nv = PWN::AI::Agent::Curriculum.critic(\n\nrequest: 'required - user request',\nfinal: 'required - candidate final answer',\nsession_id: 'optional - for evidence lookup'\n\n)\n\nReturns { verdict: :pass|:flaw, flaw:, confidence: }. On :flaw the (final, flaw) pair is recorded as a preference so a future self-correction becomes DPO signal.\n"}]}
|
|
26
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.critic_text_only Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.critic_text_only`: "}]}
|
|
25
27
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.detect_trainer Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.detect_trainer`: "}]}
|
|
26
28
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.enabled?`: "}]}
|
|
27
29
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.ensure_persona Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.ensure_persona`: "}]}
|
|
@@ -37,19 +39,26 @@
|
|
|
37
39
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.offline_judge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.offline_judge`: Supported Method Parameters\n\nr = PWN::AI::Agent::Curriculum.offline_judge(\n\nsince_hours: 'optional - lookback window (default 24)',\nlimit: 'optional - max sessions to score (default 40)',\nprm: 'optional - also run Process Reward Model (default true)',\ncommit: 'optional - write scores into learning/sentinel (default true)'\n\n)\n"}]}
|
|
38
40
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.ollama_create Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.ollama_create`: "}]}
|
|
39
41
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.practice Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.practice`: "}]}
|
|
42
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.practice_kpi Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.practice_kpi`: "}]}
|
|
40
43
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.practice_skip? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.practice_skip?`: "}]}
|
|
41
44
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.preference_balance Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.preference_balance`: "}]}
|
|
45
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.preference_diet_gate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.preference_diet_gate`: "}]}
|
|
42
46
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.python_site_package_roots Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.python_site_package_roots`: "}]}
|
|
43
47
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.red_team_plan Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.red_team_plan`: Supported Method Parameters\n\nhint = PWN::AI::Agent::Curriculum.red_team_plan(\n\nrequest: 'required - user goal',\nplan: 'required - numbered plan text from plan_first'\n\n)\n"}]}
|
|
44
48
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.reflect_available? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.reflect_available?`: "}]}
|
|
49
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.repeating_trend Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.repeating_trend`: "}]}
|
|
45
50
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.replay_on Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.replay_on`: "}]}
|
|
51
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.replay_on_detailed Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.replay_on_detailed`: "}]}
|
|
52
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.revise_after_flaw Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.revise_after_flaw`: "}]}
|
|
46
53
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.run_axolotl_trainer Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.run_axolotl_trainer`: "}]}
|
|
47
54
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.run_trainer Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.run_trainer`: "}]}
|
|
48
55
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.run_unsloth_trainer Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.run_unsloth_trainer`: "}]}
|
|
49
56
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.save_cooldown Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.save_cooldown`: "}]}
|
|
50
57
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.save_models Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.save_models`: "}]}
|
|
51
58
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.score_branch Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.score_branch`: "}]}
|
|
59
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.score_branch_detailed Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.score_branch_detailed`: "}]}
|
|
52
60
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.self_play Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.self_play`: "}]}
|
|
61
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.smoke_eval_set Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.smoke_eval_set`: "}]}
|
|
53
62
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.train_and_gate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.train_and_gate`: Supported Method Parameters\n\nr = PWN::AI::Agent::Curriculum.train_and_gate(\n\nbase_model: 'optional - ollama base tag (default PWN::Env[:ai][:ollama][:model])',\ntrainer: 'optional - :unsloth | :axolotl | :auto (default :auto)',\ndry_run: 'optional - export + build eval set but do not train (default true)'\n\n)\n\nBest-effort orchestrator. When a supported trainer is installed it produces ~/.pwn/finetune/pwn-vN/, cuts an ollama Modelfile with the LoRA adapter, then REPLAYS Mistakes.top against vN and vN+1 under Reward.judge. Promotes (writes MODELS_FILE) iff vN+1 resolves more signatures. When no trainer is present it still exports SFT+DPO and emits the exact CLI to run manually — so the pipeline is complete even on a box without GPU.\n"}]}
|
|
54
63
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.trainer_cli_path Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.trainer_cli_path`: "}]}
|
|
55
64
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Curriculum.trainer_installed? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Curriculum.trainer_installed?`: "}]}
|
|
@@ -251,13 +260,16 @@
|
|
|
251
260
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_introspect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_introspect`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.auto_introspect(\n\nsession_id: 'required - id of the just-completed session',\nrequest: 'optional - original user request (for outcome logging)',\nfinal: 'optional - final assistant answer (for outcome logging)'\n\n)\n\nCalled by Loop.run when PWN::Env[:agent] is truthy. Never raises — learning must not break the primary loop.\n"}]}
|
|
252
261
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_introspect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_introspect_enabled?`: "}]}
|
|
253
262
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.build_skill_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.build_skill_from_session`: "}]}
|
|
263
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.checkable_claim? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.checkable_claim?`: "}]}
|
|
254
264
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.compress_exemplar Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.compress_exemplar`: "}]}
|
|
265
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.compress_finetune_trace Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.compress_finetune_trace`: "}]}
|
|
255
266
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.consolidate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.consolidate`: Supported Method Parameters\n\nremoved = PWN::AI::Agent::Learning.consolidate(\n\nmax_entries: 'optional - hard cap on PWN::Memory size (default MAX_MEMORY_ENTRIES)'\n\n)\n\nDeduplicates near-identical lesson values and prunes the oldest entries once the cap is exceeded so the injected MEMORY block stays high-signal.\n"}]}
|
|
256
267
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.distill_skill Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.distill_skill`: Supported Method Parameters\n\nskill = PWN::AI::Agent::Learning.distill_skill(\n\nname: 'required - snake_case name for the new skill',\nsession_id: 'optional - PWN::Sessions id to mine (uses its transcript)',\ncontent: 'optional - explicit markdown body; overrides transcript mining',\nreferences: 'optional - Array of reference URLs / CWE / CVE / ATT&CK ids'\n\n)\n"}]}
|
|
257
268
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.exemplars_for Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.exemplars_for`: Supported Method Parameters\n\nmsgs = PWN::AI::Agent::Learning.exemplars_for(\n\nrequest: 'required - current user request',\nlimit: 'optional - max exemplar traces to return (default 1)',\nmax_msgs: 'optional - cap on messages per exemplar (default 6)'\n\n)\n\nRetrieval-augmented BEHAVIOUR: keyword-matches request against prior successful outcomes in learning.jsonl, loads the matching session, and compresses its (user, tool, assistant) trace into a short few-shot exemplar Loop.run splices between system and user. Local models are dramatically better with 1 concrete example than with 25 abstract lessons.\n"}]}
|
|
258
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.export_finetune Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.export_finetune`:
|
|
269
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.export_finetune Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.export_finetune`: "}]}
|
|
259
270
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.fact_check_local_final Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.fact_check_local_final`: "}]}
|
|
260
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.flip_last_outcome Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.flip_last_outcome`:
|
|
271
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.flip_last_outcome Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.flip_last_outcome`: "}]}
|
|
272
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.fold_judge_into_metrics Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.fold_judge_into_metrics`: "}]}
|
|
261
273
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.help`: "}]}
|
|
262
274
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.heuristic_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.heuristic_lessons`: "}]}
|
|
263
275
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.infer_success Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.infer_success`: "}]}
|
|
@@ -266,6 +278,7 @@
|
|
|
266
278
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.note_outcome Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.note_outcome`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Learning.note_outcome(\n\ntask: 'required - short description of what was attempted',\nsuccess: 'required - Boolean, did the attempt achieve its goal',\ndetails: 'optional - free-form notes / error / evidence',\nsession_id: 'optional - PWN::Sessions id this outcome belongs to',\ntags: 'optional - Array of String labels for later retrieval'\n\n)\n"}]}
|
|
267
279
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.outcomes Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.outcomes`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Learning.outcomes(\n\nlimit: 'optional - max entries returned newest-first (default 50)',\nsuccess: 'optional - filter by Boolean outcome',\ntag: 'optional - filter by tag substring'\n\n)\n"}]}
|
|
268
280
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.purge_noise Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.purge_noise`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.purge_noise\n\nOne-shot GC of the pre-R1 garbage: drops every PWN::Memory entry matching the old ‘SUCCESS: <req> — <final>` / `Avoid repeating failure pattern from <tool>: {“success”:true` shapes. Run once after upgrading; subsequent writes never produce these.\n"}]}
|
|
281
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.recover_predicted_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.recover_predicted_from_session`: "}]}
|
|
269
282
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.reflect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.reflect`: Supported Method Parameters\n\nreport = PWN::AI::Agent::Learning.reflect(\n\nsession_id: 'required - PWN::Sessions id to analyse',\ndry_run: 'optional - when true, do not write to Memory/Skills (default false)'\n\n)\n\nUses PWN::AI::Agent::Reflect (when available) to LLM-summarise the session into structured lessons. Falls back to a heuristic extractor when module_reflection is disabled so learning never stops.\n"}]}
|
|
270
283
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.reset`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.reset\n"}]}
|
|
271
284
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.semantic_merge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.semantic_merge`: "}]}
|
|
@@ -279,6 +292,7 @@
|
|
|
279
292
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.append_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.append_session`: "}]}
|
|
280
293
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.attribute_cause Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.attribute_cause`: "}]}
|
|
281
294
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
295
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.budget_exhaustion_hot? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.budget_exhaustion_hot?`: "}]}
|
|
282
296
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.calibration_state Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.calibration_state`: "}]}
|
|
283
297
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.call_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.call_engine`: Supported Method Parameters\n\nmsg = PWN::AI::Agent::Loop.call_engine(\n\nmessages: 'required - OpenAI-format messages array',\ntools: 'optional - OpenAI tools array'\n\n)\n\nReturns a normalised assistant message hash:\n\n{ role: 'assistant', content: String|nil,\n tool_calls: [ {id:, type:'function', function:{name:, arguments:}} ],\n _native_content: <provider raw> (when adapter needs round-trip) }\n"}]}
|
|
284
298
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.compact_history! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.compact_history!`: "}]}
|
|
@@ -302,12 +316,19 @@
|
|
|
302
316
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.calibration Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.calibration`: Supported Method Parameters\n\ncal = PWN::AI::Agent::Metrics.calibration(engine: :ollama)\n"}]}
|
|
303
317
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.changepoints Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.changepoints`: Supported Method Parameters\n\ncps = PWN::AI::Agent::Metrics.changepoints\n\nE1 — tools whose CUSUM tripped (success_rate regime change). The caller (Mistakes.record / Curriculum) triggers extro_snapshot + correlate on these so a Mistake caused by env drift is tagged cause: :env_drift and does NOT count toward [REPEATING].\n"}]}
|
|
304
318
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.decay Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.decay`: "}]}
|
|
319
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.effective_rate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.effective_rate`: "}]}
|
|
305
320
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.gamma_sample Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.gamma_sample`: "}]}
|
|
306
321
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.help`: "}]}
|
|
322
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.judge_confidence Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.judge_confidence`: "}]}
|
|
323
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.judge_rate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.judge_rate`: "}]}
|
|
307
324
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.load Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.load`: Supported Method Parameters\n\nmetrics = PWN::AI::Agent::Metrics.load\n"}]}
|
|
325
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.prm_advantage Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.prm_advantage`: "}]}
|
|
326
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.prm_n Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.prm_n`: "}]}
|
|
308
327
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.proxy_trust Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.proxy_trust`: "}]}
|
|
309
328
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.record Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.record`: Supported Method Parameters\n\nPWN::AI::Agent::Metrics.record(\n\nname: 'required - tool name that was dispatched',\nsuccess: 'required - Boolean, did the handler complete without error',\nduration: 'optional - Float seconds the dispatch took',\nerror: 'optional - String error message when success is false',\nengine: 'optional - Symbol/String AI engine that chose this tool (segments telemetry)'\n\n)\n"}]}
|
|
310
329
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.record_calibration Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.record_calibration`: Supported Method Parameters\n\nPWN::AI::Agent::Metrics.record_calibration(predicted:, actual:, brier:, engine:)\n\nW3 — plan_first emits p(success); Loop.run calls this with the realised outcome. Tracked per-engine so calibration of the local LoRA vs frontier is comparable.\n"}]}
|
|
330
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.record_judge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.record_judge`: "}]}
|
|
331
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.record_step_reward Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.record_step_reward`: "}]}
|
|
311
332
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.reset`: Supported Method Parameters\n\nPWN::AI::Agent::Metrics.reset\n"}]}
|
|
312
333
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.save Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.save`: Supported Method Parameters\n\nPWN::AI::Agent::Metrics.save(\n\nmetrics: 'required - Hash returned by .load / mutated in place'\n\n)\n"}]}
|
|
313
334
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.summary Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.summary`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Metrics.summary(\n\nlimit: 'optional - cap number of tools returned (default 25)',\nengine: 'optional - only that engine\\'s sub-bucket (falls back to global when absent)'\n\n)\n"}]}
|
|
@@ -382,30 +403,38 @@
|
|
|
382
403
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.empty_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.empty_sentinel`: "}]}
|
|
383
404
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.export_dpo Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.export_dpo`: "}]}
|
|
384
405
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.extract_cmd Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.extract_cmd`: "}]}
|
|
406
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.fold_step_reward_to_metrics Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.fold_step_reward_to_metrics`: "}]}
|
|
407
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.generator_mix Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.generator_mix`: "}]}
|
|
385
408
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.help`: "}]}
|
|
386
409
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.heuristic_judge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.heuristic_judge`: "}]}
|
|
387
410
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.heuristic_prm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.heuristic_prm`: "}]}
|
|
411
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.infer_shape Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.infer_shape`: "}]}
|
|
388
412
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.judge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.judge`: Supported Method Parameters\n\nv = PWN::AI::Agent::Reward.judge(\n\nrequest: 'required - original user request',\nfinal: 'required - assistant final answer',\nsession_id: 'optional - PWN::Sessions id (adds tool trace)',\ntrace: 'optional - Array of tool-result strings (overrides session_id)',\ncommit: 'optional - write score into learning.jsonl / sentinel (default true)'\n\n)\n"}]}
|
|
389
413
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.llm_judge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.llm_judge`: "}]}
|
|
390
414
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.llm_prm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.llm_prm`: "}]}
|
|
391
415
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.load_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.load_sentinel`: "}]}
|
|
392
416
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.load_trace Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.load_trace`: "}]}
|
|
393
417
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.normalize_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.normalize_sentinel`: "}]}
|
|
418
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.preference_balance Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.preference_balance`: "}]}
|
|
394
419
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.preferences Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.preferences`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Reward.preferences(limit: 500, source: nil)\n"}]}
|
|
395
420
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.prm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.prm`: Supported Method Parameters\n\nsteps = PWN::AI::Agent::Reward.prm(\n\nrequest: 'required - user goal',\nsession_id: 'optional - session to score in place',\ntrace: 'optional - Array of {name:, args:, result:} or Strings'\n\n)\n\nReturns [{idx:, step:, reward: -1|0|1}, …] and, when session_id is given, rewrites each tool line in the transcript with a ‘[step_reward=N]` prefix so exemplars_for / distill_skill can keep only reward>0 steps (C4 minimal sufficient trace).\n"}]}
|
|
396
421
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.proxy_distrust Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.proxy_distrust`: "}]}
|
|
397
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.record_preference Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.record_preference`:
|
|
422
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.record_preference Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.record_preference`: "}]}
|
|
398
423
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.record_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.record_sentinel`: "}]}
|
|
399
424
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.recoverable_shape Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.recoverable_shape`: "}]}
|
|
400
425
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.reflect_available? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.reflect_available?`: "}]}
|
|
401
426
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.reset`: "}]}
|
|
402
427
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.reset_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.reset_sentinel`: "}]}
|
|
428
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.scrub_preferences Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.scrub_preferences`: "}]}
|
|
403
429
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.semantic_ok Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.semantic_ok`: Supported Method Parameters\n\nh = PWN::AI::Agent::Reward.semantic_ok(\n\nname: 'required - tool name',\nraw: 'required - JSON string returned by Dispatch.call',\nargs: 'optional - the tool call arguments (used for BENIGN_EXIT)'\n\n)\n\nReturns { ok:, semantic_ok:, exit:, err:, benign: }. :ok is the old proxy (handler didn’t raise); :semantic_ok additionally knows that grep/diff/find exit≠0 with empty stderr is not a failure. Loop.run records Metrics on :ok but only records Mistakes on !semantic_ok.\n"}]}
|
|
404
430
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.sentinel`: Supported Method Parameters\n\nr = PWN::AI::Agent::Reward.sentinel\n"}]}
|
|
405
431
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.set_proxy_distrust Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.set_proxy_distrust`: "}]}
|
|
432
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.usable_preference? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.usable_preference?`: "}]}
|
|
406
433
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.user_correction_rate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.user_correction_rate`: "}]}
|
|
407
434
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.verify_as_reward Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.verify_as_reward`: Supported Method Parameters\n\ng = PWN::AI::Agent::Reward.verify_as_reward(final: text)\n"}]}
|
|
435
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.warm_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.warm_sentinel`: "}]}
|
|
408
436
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.window_means Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.window_means`: "}]}
|
|
437
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.write_source_quota Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.write_source_quota`: "}]}
|
|
409
438
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::SAST.analyze(\n\nrequest: 'required - A string containing the source code snippet to be analyzed for SAST antipatterns and vulnerabilities.'\n\n)\n"}]}
|
|
410
439
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
411
440
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.help`: "}]}
|