pwn 0.5.776 → 0.5.778
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/Gemfile +2 -2
- data/Rakefile +1 -2
- data/build_gem.sh +14 -0
- data/documentation/General-PWN-Usage.md +16 -11
- data/documentation/Installation.md +21 -2
- data/documentation/pwn-REPL.md +9 -7
- data/etc/default_skills/pwn/plugins/repl/mesh/references/urls.md +1 -0
- data/lib/pwn/plugins/repl/mesh.rb +3484 -2713
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/module_skills_spec.rb +71 -32
- data/spec/lib/pwn/plugins/repl_mesh_console_spec.rb +2 -1
- data/spec/lib/pwn/plugins/repl_mesh_layout_spec.rb +118 -0
- data/spec/lib/pwn/plugins/repl_mesh_multi_rx_spec.rb +3 -1
- data/spec/lib/pwn/plugins/repl_mesh_origin_gps_spec.rb +157 -15
- data/spec/lib/pwn/plugins/repl_mesh_scroll_spec.rb +43 -0
- data/spec/lib/pwn/plugins/repl_mesh_transport_label_spec.rb +11 -7
- data/third_party/pwn_rdoc.jsonl +3 -23
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3bd715a7f2fae3e39f56f1c2e0d47629de11144461591acbfcbc7399e8a1da9a
|
|
4
|
+
data.tar.gz: 80b713ca6f117ba5f9862416f2796f777e3c4a1e1bba68fdf05fda02ea758635
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e17ff89a41133b10913a559880f90220940fa02ae6e74694e6c914d1c74af793d94907b05bd5655f7a9ee27afac498e896888c2d8a0c206381e7910ed8233dca
|
|
7
|
+
data.tar.gz: acc1ceac0c1e58354e730a115e06d312d5873cabaf1775ab7f39149ebfa99bb20094e83eae12b9e33108d046bcba61ab0887b7c869471fe9c0a9c655d29a2c72
|
data/Gemfile
CHANGED
|
@@ -24,7 +24,7 @@ gem 'bundler', '>=4.0.23'
|
|
|
24
24
|
gem 'bundler-audit', '>=0.9.3'
|
|
25
25
|
gem 'bunny', '3.4.0'
|
|
26
26
|
gem 'colorize', '1.1.0'
|
|
27
|
-
gem 'credit_card_validations', '
|
|
27
|
+
gem 'credit_card_validations', '10.0.0'
|
|
28
28
|
gem 'curses', '1.7.0'
|
|
29
29
|
gem 'diffy', '3.4.4'
|
|
30
30
|
gem 'eventmachine', '1.2.7'
|
|
@@ -49,7 +49,7 @@ gem 'jwt', '3.3.0'
|
|
|
49
49
|
gem 'libusb', '0.8.0'
|
|
50
50
|
gem 'luhn', '3.0.0'
|
|
51
51
|
gem 'mail', '2.9.1'
|
|
52
|
-
gem 'mcp', '1.
|
|
52
|
+
gem 'mcp', '1.8.0'
|
|
53
53
|
gem 'meshtastic', '0.0.188'
|
|
54
54
|
gem 'metasm', '1.0.6'
|
|
55
55
|
gem 'mongo', '2.26.0'
|
data/Rakefile
CHANGED
|
@@ -38,9 +38,8 @@ default_tasks = %i[spec rubocop]
|
|
|
38
38
|
default_tasks << :rerdoc if defined?(RDoc::Task)
|
|
39
39
|
task default: default_tasks
|
|
40
40
|
|
|
41
|
-
desc 'Regenerate etc/default_skills/pwn from live PWN modules'
|
|
41
|
+
desc 'Regenerate etc/default_skills/pwn from live PWN modules. Not a spec dependency: writing the checkout blocks git merge on upgrade.'
|
|
42
42
|
task :module_skills do
|
|
43
43
|
require 'pwn'
|
|
44
44
|
PWN::ModuleSkills.refresh!
|
|
45
45
|
end
|
|
46
|
-
Rake::Task[:spec].enhance([:module_skills])
|
data/build_gem.sh
CHANGED
|
@@ -19,6 +19,20 @@ git config pull.rebase false
|
|
|
19
19
|
# Sync fork with upstream to avoid merge conflicts and ensure we are building the latest codebase
|
|
20
20
|
git remote -v | grep 'upstream' || git remote add upstream https://github.com/0dayinc/pwn.git
|
|
21
21
|
git fetch upstream
|
|
22
|
+
# Preserve legacy generated-skill changes before switching branches or merging.
|
|
23
|
+
# Leave the stash saved: popping it would recreate the next upgrade conflict.
|
|
24
|
+
generated_skills=()
|
|
25
|
+
while IFS= read -r skill; do
|
|
26
|
+
[[ -f "$skill" ]] || continue
|
|
27
|
+
[[ "$skill" == */SKILL.md ]] || continue
|
|
28
|
+
grep -Eq '^[[:space:]]*generated:[[:space:]]*true[[:space:]]*$' "$skill" || continue
|
|
29
|
+
grep -Eq '^[[:space:]]*preserve:[[:space:]]*true[[:space:]]*$' "$skill" && continue
|
|
30
|
+
generated_skills+=("$skill")
|
|
31
|
+
done < <(git diff --name-only HEAD -- etc/default_skills/pwn)
|
|
32
|
+
if (( ${#generated_skills[@]} )); then
|
|
33
|
+
git stash push -m 'pwn upgrade: saved generated module skills' -- "${generated_skills[@]}"
|
|
34
|
+
printf '%s\n' 'Generated skill edits saved in git stash; not reapplied after upgrade.'
|
|
35
|
+
fi
|
|
22
36
|
git checkout master
|
|
23
37
|
git merge upstream/master
|
|
24
38
|
git pull
|
|
@@ -59,10 +59,11 @@ MQTT receiver when the primary is Serial, Bluetooth, or TCP. Missing/empty
|
|
|
59
59
|
MQTT configuration makes no additional connection attempt; primary MQTT uses
|
|
60
60
|
only one subscription. MQTT connection failures leave the primary usable and
|
|
61
61
|
are reported in the UI. `/transport` reconnects both subscriptions; `/back`
|
|
62
|
-
closes them. Ctrl+T
|
|
63
|
-
|
|
64
|
-
Up/Down
|
|
65
|
-
|
|
62
|
+
closes them. Ctrl+T cycles COMPOSE, CONVERSATION, SENDER, and RECEIVER.
|
|
63
|
+
COMPOSE keeps Up/Down history. CONVERSATION selects messages
|
|
64
|
+
with Up/Down, a page with PgUp/PgDn, Home for the first, and End for the
|
|
65
|
+
latest, including when every message already fits. The latest selection is
|
|
66
|
+
not row 0, so End stays on the last message. Typing or
|
|
66
67
|
Enter returns to COMPOSE; Enter does not send while CONVERSATION is active.
|
|
67
68
|
The active title is reversed and marked active.
|
|
68
69
|
|
|
@@ -79,14 +80,18 @@ uses sender, packet ID, network/channel path, destination and payload (not
|
|
|
79
80
|
text alone), retaining at most 1000 packets for five minutes. No-ID packets
|
|
80
81
|
cannot be safely merged.
|
|
81
82
|
|
|
82
|
-
Each header ends with
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
Each header ends with its direction and transport. Sender and receiver positions
|
|
84
|
+
are not painted there. `SENDER` and `RECEIVER` sit to the right of
|
|
85
|
+
CONVERSATION. A broadcast destination shows the channel name, not the word
|
|
86
|
+
broadcast. Ctrl+T cycles COMPOSE, CONVERSATION, SENDER, and RECEIVER.
|
|
87
|
+
A valid fix is the underlined coordinate.
|
|
88
|
+
Click it, or press `g` while CONVERSATION, SENDER, or RECEIVER is active, to open
|
|
89
|
+
`https://maps.google.com/?q=lat,lon`. The URL is not painted. Curses cannot
|
|
90
|
+
hide a link inside the coordinate text. Unknown, unset, or
|
|
91
|
+
out-of-range positions display `GPS: N/A` and omit the URL. A broadcast
|
|
92
|
+
receiver has no single position, so that field is `GPS: N/A`. `0,0` is kept when
|
|
88
93
|
a real location source is present and omitted when the source is unset. The
|
|
89
|
-
value is the last position recorded for that
|
|
94
|
+
value is the last position recorded for that node, not a freshness guarantee.
|
|
90
95
|
|
|
91
96
|
MQTT TX uses `channel.<name>.from` when set, otherwise the connected radio's
|
|
92
97
|
node number, otherwise a node-shaped `mqtt.client_id`. It does not publish the
|
|
@@ -381,8 +381,27 @@ edited SOP `SKILL.md`). Generated module skills under `etc/default_skills/pwn/`
|
|
|
381
381
|
`PWN::` module, plus `references/` when the source has CWE/NIST/URLs) are
|
|
382
382
|
copied to `~/.pwn/skills/pwn/` and **are** overwritten on
|
|
383
383
|
`pwn setup --migrate` / first launch so they stay in sync with `lib/pwn`.
|
|
384
|
-
`bundle exec rake`
|
|
385
|
-
|
|
384
|
+
`bundle exec rake` does not rewrite `etc/default_skills/pwn`. `rake module_skills`
|
|
385
|
+
is the explicit regenerate. A spec or rake run that writes the checkout
|
|
386
|
+
leaves a local `SKILL.md` edit, and the next `upgrade_pwn.sh` merge aborts.
|
|
387
|
+
The upgrade saves modified generated module `SKILL.md` files in a named Git
|
|
388
|
+
stash before merging; it does not automatically reapply those stale files.
|
|
389
|
+
Skills marked `preserve: true` and unrelated edits are left alone.
|
|
390
|
+
|
|
391
|
+
For a clone already blocked before it can obtain this fix, no reclone is needed:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
cd /opt/pwn
|
|
395
|
+
git stash push -m 'pwn: preserve legacy generated skills before upgrade' -- etc/default_skills/pwn
|
|
396
|
+
./upgrade_pwn.sh
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
The stash preserves the prior skill edits for review with `git stash list` and
|
|
400
|
+
`git stash show -p`. Do not blindly pop it after upgrading: that restores stale
|
|
401
|
+
generated files and can recreate the conflict. The one-time command saves all
|
|
402
|
+
edits under that skill subtree, including any hand-edited skills; recover those
|
|
403
|
+
selectively after reviewing them. Other local changes are not stashed.
|
|
404
|
+
|
|
386
405
|
`pwn setup --migrate` and `pwn-ai` start copy that tree to `~/.pwn/skills/pwn`. Add at least one
|
|
387
406
|
LLM engine key with the `pwn-vault` REPL command to enable `pwn-ai` - see
|
|
388
407
|
[Configuration](Configuration.md). `pwn setup` will report the AI-engine
|
data/documentation/pwn-REPL.md
CHANGED
|
@@ -102,14 +102,16 @@ session only; it is not written to disk.
|
|
|
102
102
|
|
|
103
103
|
### Message transport labels
|
|
104
104
|
|
|
105
|
-
Each CONVERSATION header ends with
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
configured `auto` value. Received messages retain the subscribing transport's
|
|
105
|
+
Each CONVERSATION header ends with `RX via <TRANSPORT>` or `TX via <TRANSPORT>`.
|
|
106
|
+
SENDER and RECEIVER do not show that label. Ctrl+T cycles COMPOSE,
|
|
107
|
+
CONVERSATION, SENDER, and RECEIVER. In `auto` mode this is the
|
|
108
|
+
resolved connection, not the configured `auto` value. Received messages retain the subscribing transport's
|
|
109
109
|
origin through queued rendering, even if the current transport changes.
|
|
110
110
|
Missing origin metadata is shown as `Unknown`, not guessed from the current pin.
|
|
111
|
+
GPS is not part of the header. SENDER and RECEIVER sit to the right of
|
|
112
|
+
CONVERSATION. A broadcast receiver shows the channel name.
|
|
111
113
|
|
|
112
|
-
Headers use `timestamp encryption · SHORT NAME · source path · destination path ·
|
|
114
|
+
Headers use `timestamp encryption · SHORT NAME · source path · destination path · RX via <TRANSPORT>`,
|
|
113
115
|
with exactly one space on either side of each `·`. RX uses the sender's
|
|
114
116
|
`User.short_name` (`shortName` in JSON); TX uses the sending local node's User,
|
|
115
117
|
never the destination's name. Device connections use their NodeInfo/NODEINFO
|
|
@@ -125,8 +127,8 @@ Unicode text and internal spaces are retained. Names are labels, not authenticat
|
|
|
125
127
|
For example (placeholder node IDs):
|
|
126
128
|
|
|
127
129
|
```text
|
|
128
|
-
2026-01-02 03:04:05+0000 🔍 · PEER · US/CA/2/e/LongFast/!aabbccdd · US/CA/2/e/LongFast/#
|
|
129
|
-
2026-01-02 03:04:06+0000 🔍 · SELF · US/CA/2/e/LongFast/!bbccddee (ME) · US/CA/2/e/LongFast/#
|
|
130
|
+
2026-01-02 03:04:05+0000 🔍 · PEER · US/CA/2/e/LongFast/!aabbccdd · US/CA/2/e/LongFast/#
|
|
131
|
+
2026-01-02 03:04:06+0000 🔍 · SELF · US/CA/2/e/LongFast/!bbccddee (ME) · US/CA/2/e/LongFast/#
|
|
130
132
|
```
|
|
131
133
|
|
|
132
134
|
The timestamp, encryption indicator, source/destination paths, channel and
|