pwn 0.5.702 → 0.5.704
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/Rakefile +7 -0
- data/build_gem.sh +1 -1
- data/documentation/General-PWN-Usage.md +2 -1
- data/documentation/Installation.md +5 -3
- data/documentation/pwn-REPL.md +2 -1
- data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +4 -0
- data/etc/default_skills/pwn/ai/agent/loop/SKILL.md +4 -0
- data/etc/default_skills/pwn/ai/agent/mistakes/SKILL.md +4 -0
- data/etc/default_skills/pwn/ai/agent/open_goal/SKILL.md +3 -0
- data/etc/default_skills/pwn/ai/agent/policy/SKILL.md +11 -0
- data/etc/default_skills/pwn/ai/agent/prompt_cache/SKILL.md +1 -0
- data/etc/default_skills/pwn/ai/agent/reward/SKILL.md +1 -0
- data/etc/default_skills/pwn/ai/agent/task_summarizer/SKILL.md +12 -0
- data/etc/default_skills/pwn/ai/agent/tool_guard/SKILL.md +9 -0
- data/etc/default_skills/pwn/ai/agent/turn_finalizer/SKILL.md +5 -0
- data/etc/default_skills/pwn/ai/http_retry/SKILL.md +1 -0
- data/etc/default_skills/pwn/banner/matrix/SKILL.md +1 -0
- data/etc/default_skills/pwn/cron/SKILL.md +7 -0
- data/etc/default_skills/pwn/ffi/SKILL.md +1 -0
- data/etc/default_skills/pwn/ffi/adalm_pluto/SKILL.md +2 -0
- data/etc/default_skills/pwn/ffi/fftw/SKILL.md +10 -0
- data/etc/default_skills/pwn/ffi/hack_rf/SKILL.md +22 -0
- data/etc/default_skills/pwn/ffi/liquid/SKILL.md +33 -0
- data/etc/default_skills/pwn/ffi/rtl_sdr/SKILL.md +18 -0
- data/etc/default_skills/pwn/ffi/soapy_sdr/SKILL.md +24 -0
- data/etc/default_skills/pwn/ffi/stdio/SKILL.md +4 -0
- data/etc/default_skills/pwn/ffi/volk/SKILL.md +17 -0
- data/etc/default_skills/pwn/memory/SKILL.md +4 -0
- data/etc/default_skills/pwn/memory_index/SKILL.md +1 -0
- data/etc/default_skills/pwn/migrate/SKILL.md +1 -0
- data/etc/default_skills/pwn/module_skills/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/log/SKILL.md +16 -0
- data/etc/default_skills/pwn/plugins/pony/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/repl/SKILL.md +4 -0
- data/etc/default_skills/pwn/plugins/tty_spinner/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/vault/SKILL.md +1 -0
- data/etc/default_skills/pwn/sdr/decoder/adsb/SKILL.md +1 -0
- data/etc/default_skills/pwn/sdr/decoder/base/SKILL.md +1 -0
- data/etc/default_skills/pwn/sdr/decoder/dsp/SKILL.md +3 -0
- data/etc/default_skills/pwn/sdr/decoder/flex/SKILL.md +1 -0
- data/etc/default_skills/pwn/sessions/SKILL.md +1 -0
- data/etc/default_skills/pwn/version/SKILL.md +1 -1
- data/lib/pwn/ai/agent/loop.rb +31 -10
- data/lib/pwn/ai/agent/tool_guard.rb +24 -13
- data/lib/pwn/config.rb +90 -91
- data/lib/pwn/module_skills.rb +71 -1
- data/lib/pwn/plugins/github.rb +1 -1
- data/lib/pwn/plugins/log.rb +71 -8
- data/lib/pwn/plugins/repl.rb +35 -3
- data/lib/pwn/plugins/tty_spinner.rb +1 -1
- data/lib/pwn/plugins/zaproxy.rb +1 -1
- data/lib/pwn/version.rb +1 -1
- data/spec/integration/config_spec.rb +29 -1
- data/spec/lib/pwn/ai/agent/loop_spec.rb +12 -0
- data/spec/lib/pwn/ai/agent/tools/ruby_eval_spec.rb +13 -0
- data/spec/lib/pwn/module_skills_spec.rb +12 -0
- data/spec/lib/pwn/plugins/log_spec.rb +88 -9
- data/spec/lib/pwn/plugins/repl_pwn_vault_spec.rb +37 -1
- data/spec/lib/pwn/plugins/repl_spec.rb +16 -1
- data/third_party/pwn_rdoc.jsonl +15 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4bd3437e2c7ee97e783659b63d69dd21368ce47a284c29f97b6d8ddd64631134
|
|
4
|
+
data.tar.gz: 9e71c1bbabee3abd02f3d4f252fa1eed48854f2c2379b2df914515ed2a593775
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ffb5ae45ac796c161ab9fa29816c823e1f937404f845a23bf3757d412f82a5ccbe950d93bfe6b1771af1ee8ffefd9b8374fbda07024bec7278195c969a04f0be
|
|
7
|
+
data.tar.gz: 649a698b9da06319331c4d3289c603c0907e763f6a4a2a508f6c1a97426a969483fea38766002dbf364830a574cc0b5012d44ae8ea1881303c61acae4eb427b7
|
data/Rakefile
CHANGED
|
@@ -33,3 +33,10 @@ end
|
|
|
33
33
|
default_tasks = %i[spec rubocop]
|
|
34
34
|
default_tasks << :rerdoc if defined?(RDoc::Task)
|
|
35
35
|
task default: default_tasks
|
|
36
|
+
|
|
37
|
+
desc 'Regenerate etc/default_skills/pwn from live PWN modules'
|
|
38
|
+
task :module_skills do
|
|
39
|
+
require 'pwn'
|
|
40
|
+
PWN::ModuleSkills.refresh!
|
|
41
|
+
end
|
|
42
|
+
Rake::Task[:spec].enhance([:module_skills])
|
data/build_gem.sh
CHANGED
|
@@ -45,7 +45,8 @@ history # what you've typed → copy into a driver
|
|
|
45
45
|
| `pwn-ai-sessions` | List / view / delete transcripts |
|
|
46
46
|
| `pwn-ai-cron` | List / run scheduled jobs |
|
|
47
47
|
| `pwn-ai-delegate` | Hand a task to a Swarm persona |
|
|
48
|
-
| `toggle-debug` | Stage log per request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log`
|
|
48
|
+
| `toggle-debug` | Stage log per request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log` |
|
|
49
|
+
| `toggle-trace` | Same as `toggle-debug` plus TracePoint; ENTER after each loop step. Pry.config, not Env. Off turns both off. |
|
|
49
50
|
| `toggle-pwn-ai-speaks` | TTS every final answer on/off |
|
|
50
51
|
| `welcome-banner` | Redraw a random `PWN::Banner` |
|
|
51
52
|
| `toggle-pager` | Pry pager on/off |
|
|
@@ -265,12 +265,14 @@ The first `pwn` launch creates `~/.pwn/` and an **encrypted**
|
|
|
265
265
|
- `att&ck`
|
|
266
266
|
|
|
267
267
|
Source lives in the gem at `etc/default_skills/`. `PWN::Config.install_default_skills`
|
|
268
|
-
|
|
269
|
-
module skills under `etc/default_skills/pwn/`
|
|
268
|
+
walks every `SKILL.md` recursively (idempotent SOP copies; never overwrites an
|
|
269
|
+
edited SOP `SKILL.md`). Generated module skills under `etc/default_skills/pwn/`
|
|
270
270
|
`PWN::` module, plus `references/` when the source has CWE/NIST/URLs) are
|
|
271
271
|
copied to `~/.pwn/skills/pwn/` and **are** overwritten on
|
|
272
272
|
`pwn setup --migrate` / first launch so they stay in sync with `lib/pwn`.
|
|
273
|
-
`bundle exec rake`
|
|
273
|
+
`bundle exec rake` runs `:module_skills` (`PWN::ModuleSkills.refresh!`)
|
|
274
|
+
before spec so `etc/default_skills/pwn` matches live `PWN::` class methods.
|
|
275
|
+
`pwn setup --migrate` and `pwn-ai` start copy that tree to `~/.pwn/skills/pwn`. Add at least one
|
|
274
276
|
LLM engine key with the `pwn-vault` REPL command to enable `pwn-ai` - see
|
|
275
277
|
[Configuration](Configuration.md). `pwn setup` will report the AI-engine
|
|
276
278
|
row as `MISSING` until a key is set.
|
data/documentation/pwn-REPL.md
CHANGED
|
@@ -27,7 +27,8 @@ commands.
|
|
|
27
27
|
| `pwn-ai-cron` | `PWN::Cron` | List/run/toggle scheduled jobs |
|
|
28
28
|
| `pwn-ai-delegate` | `Agent::Swarm` | Send one request to a persona |
|
|
29
29
|
| `pwn-irc` | *(deprecated)* | Prints a pointer to `Agent::Swarm` - the IRC daemon transport is gone |
|
|
30
|
-
| `toggle-debug` | `Agent::Loop` / `Plugins::Log` | Stage log per operator request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log
|
|
30
|
+
| `toggle-debug` | `Agent::Loop` / `Plugins::Log` | Stage log per operator request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log` |
|
|
31
|
+
| `toggle-trace` | `Agent::Loop` / `Plugins::Log` | Turns `toggle-debug` on with TracePoint; ENTER after each engine/tool step. Pry.config, not Env. Off turns both off. |
|
|
31
32
|
| `toggle-pwn-ai-speaks` | `Plugins::Voice` | TTS every final answer on/off |
|
|
32
33
|
| `welcome-banner` | `PWN::Banner` | Redraw a random banner |
|
|
33
34
|
| `toggle-pager` | Pry | Page long output on/off |
|
|
@@ -63,6 +63,17 @@ PWN::AI::Agent::Policy.state(opts)
|
|
|
63
63
|
- `help`
|
|
64
64
|
- `warmup`
|
|
65
65
|
- `maybe_warmup`
|
|
66
|
+
- `attach_episode!`
|
|
67
|
+
- `cold?`
|
|
68
|
+
- `detach_episode!`
|
|
69
|
+
- `enabled?`
|
|
70
|
+
- `episode_budget_met?`
|
|
71
|
+
- `lean!`
|
|
72
|
+
- `maybe_warmup!`
|
|
73
|
+
- `update_pg!`
|
|
74
|
+
- `update_q!`
|
|
75
|
+
- `warm?`
|
|
76
|
+
- `warmup!`
|
|
66
77
|
|
|
67
78
|
## Source
|
|
68
79
|
|
|
@@ -64,6 +64,18 @@ PWN::AI::Agent::TaskSummarizer.enabled(opts)
|
|
|
64
64
|
- `flush`
|
|
65
65
|
- `authors`
|
|
66
66
|
- `help`
|
|
67
|
+
- `apply_prm_advancement!`
|
|
68
|
+
- `emit!`
|
|
69
|
+
- `emit_plan!`
|
|
70
|
+
- `enabled?`
|
|
71
|
+
- `flush!`
|
|
72
|
+
- `llm_plan_enabled?`
|
|
73
|
+
- `needs_task_breakdown?`
|
|
74
|
+
- `plan_open?`
|
|
75
|
+
- `record!`
|
|
76
|
+
- `tool_jargon_task?`
|
|
77
|
+
- `unify_plan!`
|
|
78
|
+
- `verbose?`
|
|
67
79
|
|
|
68
80
|
## Source
|
|
69
81
|
|
|
@@ -39,6 +39,7 @@ PWN::AI::Agent::ToolGuard.present(opts)
|
|
|
39
39
|
- `shell_bash`
|
|
40
40
|
- `shell_name`
|
|
41
41
|
- `protect_http`
|
|
42
|
+
- `protect_core_constants`
|
|
42
43
|
- `coerce_args`
|
|
43
44
|
- `invalid_payload`
|
|
44
45
|
- `host_load`
|
|
@@ -53,6 +54,14 @@ PWN::AI::Agent::ToolGuard.present(opts)
|
|
|
53
54
|
- `timeout_prior_count`
|
|
54
55
|
- `authors`
|
|
55
56
|
- `help`
|
|
57
|
+
- `bashism?`
|
|
58
|
+
- `note_timeout!`
|
|
59
|
+
- `placeholder?`
|
|
60
|
+
- `present?`
|
|
61
|
+
- `protect_core_constants!`
|
|
62
|
+
- `protect_http!`
|
|
63
|
+
- `reset_timeout_budget!`
|
|
64
|
+
- `shell_bash?`
|
|
56
65
|
|
|
57
66
|
## Source
|
|
58
67
|
|
|
@@ -100,6 +100,13 @@ PWN::Cron.cron_dir(opts)
|
|
|
100
100
|
- `uninstall_schtasks_job`
|
|
101
101
|
- `authors`
|
|
102
102
|
- `help`
|
|
103
|
+
- `apply_native?`
|
|
104
|
+
- `cron_enabled?`
|
|
105
|
+
- `crontab_available?`
|
|
106
|
+
- `due?`
|
|
107
|
+
- `schtasks_available?`
|
|
108
|
+
- `systemd_user_available?`
|
|
109
|
+
- `windows?`
|
|
103
110
|
|
|
104
111
|
## References
|
|
105
112
|
|
|
@@ -40,6 +40,16 @@ PWN::FFI::FFTW.available(opts)
|
|
|
40
40
|
- `cfft`
|
|
41
41
|
- `authors`
|
|
42
42
|
- `help`
|
|
43
|
+
- `available?`
|
|
44
|
+
- `fftwf_cleanup`
|
|
45
|
+
- `fftwf_destroy_plan`
|
|
46
|
+
- `fftwf_execute`
|
|
47
|
+
- `fftwf_free`
|
|
48
|
+
- `fftwf_malloc`
|
|
49
|
+
- `fftwf_plan_dft_1d`
|
|
50
|
+
- `fftwf_plan_dft_c2r_1d`
|
|
51
|
+
- `fftwf_plan_dft_r2c_1d`
|
|
52
|
+
- `load_error`
|
|
43
53
|
|
|
44
54
|
## Source
|
|
45
55
|
|
|
@@ -45,6 +45,28 @@ PWN::FFI::HackRF.available(opts)
|
|
|
45
45
|
- `capture`
|
|
46
46
|
- `authors`
|
|
47
47
|
- `help`
|
|
48
|
+
- `available?`
|
|
49
|
+
- `hackrf_board_id_name`
|
|
50
|
+
- `hackrf_board_id_read`
|
|
51
|
+
- `hackrf_close`
|
|
52
|
+
- `hackrf_error_name`
|
|
53
|
+
- `hackrf_exit`
|
|
54
|
+
- `hackrf_init`
|
|
55
|
+
- `hackrf_is_streaming`
|
|
56
|
+
- `hackrf_library_release`
|
|
57
|
+
- `hackrf_library_version`
|
|
58
|
+
- `hackrf_open`
|
|
59
|
+
- `hackrf_open_by_serial`
|
|
60
|
+
- `hackrf_set_amp_enable`
|
|
61
|
+
- `hackrf_set_baseband_filter_bandwidth`
|
|
62
|
+
- `hackrf_set_freq`
|
|
63
|
+
- `hackrf_set_lna_gain`
|
|
64
|
+
- `hackrf_set_sample_rate`
|
|
65
|
+
- `hackrf_set_vga_gain`
|
|
66
|
+
- `hackrf_start_rx`
|
|
67
|
+
- `hackrf_stop_rx`
|
|
68
|
+
- `hackrf_version_string_read`
|
|
69
|
+
- `load_error`
|
|
48
70
|
|
|
49
71
|
## Source
|
|
50
72
|
|
|
@@ -44,6 +44,39 @@ PWN::FFI::Liquid.available(opts)
|
|
|
44
44
|
- `mfsk_demod`
|
|
45
45
|
- `authors`
|
|
46
46
|
- `help`
|
|
47
|
+
- `available?`
|
|
48
|
+
- `firfilt_rrrf_create_dc_blocker`
|
|
49
|
+
- `firfilt_rrrf_create_kaiser`
|
|
50
|
+
- `firfilt_rrrf_destroy`
|
|
51
|
+
- `firfilt_rrrf_execute_block`
|
|
52
|
+
- `firfilt_rrrf_reset`
|
|
53
|
+
- `freqdem_create`
|
|
54
|
+
- `freqdem_demodulate_block`
|
|
55
|
+
- `freqdem_destroy`
|
|
56
|
+
- `freqdem_print`
|
|
57
|
+
- `freqdem_reset`
|
|
58
|
+
- `fskdem_create`
|
|
59
|
+
- `fskdem_demodulate`
|
|
60
|
+
- `fskdem_destroy`
|
|
61
|
+
- `gmskdem_create`
|
|
62
|
+
- `gmskdem_demodulate`
|
|
63
|
+
- `gmskdem_destroy`
|
|
64
|
+
- `gmskdem_reset`
|
|
65
|
+
- `load_error`
|
|
66
|
+
- `msresamp_crcf_create`
|
|
67
|
+
- `msresamp_crcf_destroy`
|
|
68
|
+
- `msresamp_crcf_execute`
|
|
69
|
+
- `msresamp_rrrf_create`
|
|
70
|
+
- `msresamp_rrrf_destroy`
|
|
71
|
+
- `msresamp_rrrf_execute`
|
|
72
|
+
- `msresamp_rrrf_get_delay`
|
|
73
|
+
- `msresamp_rrrf_get_num_output`
|
|
74
|
+
- `msresamp_rrrf_get_rate`
|
|
75
|
+
- `msresamp_rrrf_reset`
|
|
76
|
+
- `nco_crcf_create`
|
|
77
|
+
- `nco_crcf_destroy`
|
|
78
|
+
- `nco_crcf_mix_block_down`
|
|
79
|
+
- `nco_crcf_set_frequency`
|
|
47
80
|
|
|
48
81
|
## Source
|
|
49
82
|
|
|
@@ -42,6 +42,24 @@ PWN::FFI::RTLSdr.available(opts)
|
|
|
42
42
|
- `tuner_gains`
|
|
43
43
|
- `authors`
|
|
44
44
|
- `help`
|
|
45
|
+
- `available?`
|
|
46
|
+
- `load_error`
|
|
47
|
+
- `rtlsdr_close`
|
|
48
|
+
- `rtlsdr_get_center_freq`
|
|
49
|
+
- `rtlsdr_get_device_count`
|
|
50
|
+
- `rtlsdr_get_device_name`
|
|
51
|
+
- `rtlsdr_get_device_usb_strings`
|
|
52
|
+
- `rtlsdr_get_sample_rate`
|
|
53
|
+
- `rtlsdr_get_tuner_gains`
|
|
54
|
+
- `rtlsdr_open`
|
|
55
|
+
- `rtlsdr_read_sync`
|
|
56
|
+
- `rtlsdr_reset_buffer`
|
|
57
|
+
- `rtlsdr_set_agc_mode`
|
|
58
|
+
- `rtlsdr_set_center_freq`
|
|
59
|
+
- `rtlsdr_set_freq_correction`
|
|
60
|
+
- `rtlsdr_set_sample_rate`
|
|
61
|
+
- `rtlsdr_set_tuner_gain`
|
|
62
|
+
- `rtlsdr_set_tuner_gain_mode`
|
|
45
63
|
|
|
46
64
|
## Source
|
|
47
65
|
|
|
@@ -47,6 +47,30 @@ PWN::FFI::SoapySDR.available(opts)
|
|
|
47
47
|
- `close`
|
|
48
48
|
- `authors`
|
|
49
49
|
- `help`
|
|
50
|
+
- `SoapySDRDevice_activateStream`
|
|
51
|
+
- `SoapySDRDevice_closeStream`
|
|
52
|
+
- `SoapySDRDevice_deactivateStream`
|
|
53
|
+
- `SoapySDRDevice_enumerate`
|
|
54
|
+
- `SoapySDRDevice_getDriverKey`
|
|
55
|
+
- `SoapySDRDevice_getHardwareKey`
|
|
56
|
+
- `SoapySDRDevice_getStreamMTU`
|
|
57
|
+
- `SoapySDRDevice_lastError`
|
|
58
|
+
- `SoapySDRDevice_make`
|
|
59
|
+
- `SoapySDRDevice_makeStrArgs`
|
|
60
|
+
- `SoapySDRDevice_readStream`
|
|
61
|
+
- `SoapySDRDevice_setBandwidth`
|
|
62
|
+
- `SoapySDRDevice_setFrequency`
|
|
63
|
+
- `SoapySDRDevice_setGain`
|
|
64
|
+
- `SoapySDRDevice_setGainMode`
|
|
65
|
+
- `SoapySDRDevice_setSampleRate`
|
|
66
|
+
- `SoapySDRDevice_setupStream`
|
|
67
|
+
- `SoapySDRDevice_unmake`
|
|
68
|
+
- `SoapySDRKwargsList_clear`
|
|
69
|
+
- `SoapySDR_getABIVersion`
|
|
70
|
+
- `SoapySDR_getAPIVersion`
|
|
71
|
+
- `SoapySDR_getLibVersion`
|
|
72
|
+
- `available?`
|
|
73
|
+
- `load_error`
|
|
50
74
|
|
|
51
75
|
## Source
|
|
52
76
|
|
|
@@ -42,6 +42,23 @@ PWN::FFI::Volk.available(opts)
|
|
|
42
42
|
- `dot_prod`
|
|
43
43
|
- `authors`
|
|
44
44
|
- `help`
|
|
45
|
+
- `available?`
|
|
46
|
+
- `load_error`
|
|
47
|
+
- `volk_16i_s32f_convert_32f`
|
|
48
|
+
- `volk_16i_s32f_convert_32f=`
|
|
49
|
+
- `volk_32f_accumulator_s32f`
|
|
50
|
+
- `volk_32f_accumulator_s32f=`
|
|
51
|
+
- `volk_32f_s32f_multiply_32f`
|
|
52
|
+
- `volk_32f_s32f_multiply_32f=`
|
|
53
|
+
- `volk_32f_sqrt_32f`
|
|
54
|
+
- `volk_32f_sqrt_32f=`
|
|
55
|
+
- `volk_32f_x2_dot_prod_32f`
|
|
56
|
+
- `volk_32f_x2_dot_prod_32f=`
|
|
57
|
+
- `volk_32fc_magnitude_squared_32f`
|
|
58
|
+
- `volk_32fc_magnitude_squared_32f=`
|
|
59
|
+
- `volk_free`
|
|
60
|
+
- `volk_get_alignment`
|
|
61
|
+
- `volk_malloc`
|
|
45
62
|
|
|
46
63
|
## Source
|
|
47
64
|
|
|
@@ -37,6 +37,7 @@ PWN::Plugins::Log.append(opts)
|
|
|
37
37
|
- `debug_enabled`
|
|
38
38
|
- `debug_log_path`
|
|
39
39
|
- `start_debug`
|
|
40
|
+
- `trace_enabled`
|
|
40
41
|
- `next_request_log`
|
|
41
42
|
- `finish_request_log`
|
|
42
43
|
- `stop_debug`
|
|
@@ -51,8 +52,23 @@ PWN::Plugins::Log.append(opts)
|
|
|
51
52
|
- `mirror_tui`
|
|
52
53
|
- `start_trace`
|
|
53
54
|
- `stop_trace`
|
|
55
|
+
- `wait_trace_step`
|
|
54
56
|
- `authors`
|
|
55
57
|
- `help`
|
|
58
|
+
- `capture_stderr!`
|
|
59
|
+
- `debug_enabled?`
|
|
60
|
+
- `finish_request_log!`
|
|
61
|
+
- `loud_tui!`
|
|
62
|
+
- `mirror_tui!`
|
|
63
|
+
- `next_request_log!`
|
|
64
|
+
- `note_exception!`
|
|
65
|
+
- `note_interrupt!`
|
|
66
|
+
- `quiet_tui!`
|
|
67
|
+
- `spinner_frame?`
|
|
68
|
+
- `start_trace!`
|
|
69
|
+
- `stop_trace!`
|
|
70
|
+
- `trace_enabled?`
|
|
71
|
+
- `wait_trace_step!`
|
|
56
72
|
|
|
57
73
|
## Source
|
|
58
74
|
|