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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a6df0a18952a14c2cd3acf7263a3e3393fb1406bf04d742fb80706b094a73df
4
- data.tar.gz: abbe212e8cdfa3e4bc042b817092f05fa68ce20518587f432120563822049544
3
+ metadata.gz: 3bd715a7f2fae3e39f56f1c2e0d47629de11144461591acbfcbc7399e8a1da9a
4
+ data.tar.gz: 80b713ca6f117ba5f9862416f2796f777e3c4a1e1bba68fdf05fda02ea758635
5
5
  SHA512:
6
- metadata.gz: 19dea9476ce02f9c29d35783856054e8a4910dbe6e1366a96c280e9e76864274e5fe5b119f8d17d76937dba828f16407ebd4ab1be50e7bdbec11be39e7e6cb69
7
- data.tar.gz: b7d5a2ae8f764dd3ffbf3cf2d73aa3a995f896b722279bae74e438ccabef6ac9571ace8f3bb5eddbf227cd2af105a847fa1b8967902de23030151ce4fe2d9bc7
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', '9.0.0'
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.7.0'
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 switches the active pane between COMPOSE and
63
- CONVERSATION. COMPOSE keeps Up/Down history. CONVERSATION scrolls with
64
- Up/Down one row, PgUp/PgDn a page, Home to the top, and End to the live
65
- bottom. The live bottom is not row 0, so PgDn there stays put. Typing or
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 the sender's last known position. A valid fix is
83
- `lat,lon >> https://maps.google.com/?q=lat,lon` on that same header. The pane
84
- wraps on ` · `, and only at ` >> ` if the GPS field itself does not fit, so
85
- the coordinate is not split. This is the compact Maps URL; a maps.app.goo.gl
86
- code cannot be minted without a Google share request. Unknown, unset, or
87
- out-of-range positions display `GPS N/A` and omit the URL. `0,0` is kept when
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 sender, not a freshness guarantee.
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` runs `:module_skills` (`PWN::ModuleSkills.refresh!`)
385
- before spec so `etc/default_skills/pwn` matches live `PWN::` class methods.
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
@@ -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 its direction and the transport used for
106
- that individual message: `· RX via MQTT`, `· TX via Serial`, `· RX via Bluetooth`,
107
- or `· TX via TCP`. In `auto` mode this is the resolved connection, not the
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 · direction via transport`,
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/# · RX via MQTT
129
- 2026-01-02 03:04:06+0000 🔍 · SELF · US/CA/2/e/LongFast/!bbccddee (ME) · US/CA/2/e/LongFast/# · TX via Serial
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
@@ -1,3 +1,4 @@
1
1
  # PWN::Plugins::REPL::Mesh source links
2
2
 
3
3
  - https://maps.google.com/?q=[redacted]
4
+ - https://maps\.google\.com/\?q=-?\d+\.\d+,-?\d+\.\d+\z}