From 626ec88a88022fd2aa8862e8f344137c9eb72491 Mon Sep 17 00:00:00 2001 From: Ops Agent Date: Sun, 11 Oct 2026 09:14:20 +0200 Subject: [PATCH] Adopt Ghostwire name and approved ghost mascot --- AGENTS.md | 6 +++++- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 2 +- README.md | 11 +++++++++-- assets/README.md | 10 ++++++++++ assets/ghostwire-icon.png | Bin 0 -> 14480 bytes assets/ghostwire-icon.svg | 8 ++++++++ docs/ARCHITECTURE.md | 2 +- docs/CLI.md | 2 +- skills/whatsapp-suite-development/SKILL.md | 4 ++-- 10 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 assets/README.md create mode 100644 assets/ghostwire-icon.png create mode 100644 assets/ghostwire-icon.svg diff --git a/AGENTS.md b/AGENTS.md index 21dd66d..b2a917c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,8 @@ -# Project instructions +# Ghostwire project instructions + +The project name is Ghostwire. Keep the existing `whatsapp.py` launcher, `whatsapp_suite` package and configured repository URL unless explicitly migrating them. + +For clickable local Windows file links, use the actual absolute path starting with `C:/`, never `/C:/`. Wrap Markdown targets containing spaces in angle brackets. This format was confirmed to work in Karl's chat on 2026-10-11. Use `whatsapp_suite/` as canonical source. `whatsapp.py` is generated; rebuild it after changing Python, assets or tests. Documentation-only changes do not require rebuilding. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a5de9a..9566f55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Ghostwire identity — 2026-10-11 + +- Adopt the Ghostwire name and the approved monochrome ghost mascot. +- Add editable SVG and PNG logo assets and usage guidance. +- Preserve the existing launcher, package and repository URL. + ## Documentation and development guide — 2026-10-11 - Rewrite the user entry point and CLI guide around practical tasks. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b934cb4..eba9cc2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Develop and extend the suite +# Develop and extend Ghostwire The editable implementation is `whatsapp_suite/`. The single-file `whatsapp.py` is a generated distribution. Changes to the encoded payload will be overwritten by the builder. diff --git a/README.md b/README.md index 06fed51..91b25ae 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,14 @@ -# WhatsApp Desktop Suite +

+ Ghostwire ghost mascot +

+ +# Ghostwire + +**Inside the process. Across the wire.** Read, search and export local WhatsApp Desktop messages and contacts. Install a message listener that delivers events to an HTTPS webhook. -The main commands run JavaScript inside the signed-in Windows Desktop app through a bundled native bridge. They use neither CDP nor UI automation. This is an independent, reverse-engineered toolkit; it is not an official WhatsApp API. +The main commands run JavaScript inside the signed-in Windows Desktop app through a bundled native bridge. They use neither CDP nor UI automation. Ghostwire is an independent, reverse-engineered toolkit; it is not an official WhatsApp API. ## Start here @@ -89,6 +95,7 @@ Edit `whatsapp_suite/`; `whatsapp.py` is generated. The portable file is about 2 | [Architecture](docs/ARCHITECTURE.md) | Understand the bridge and choose the right extension point | | [Contributing](CONTRIBUTING.md) | Add a command, change JavaScript, rebuild native helpers | | [Agent skill](skills/whatsapp-suite-development/SKILL.md) | Repository-specific guidance for coding agents | +| [Brand assets](assets/README.md) | Logo files and usage | | [Troubleshooting](docs/TROUBLESHOOTING.md) | Resolve common setup and runtime problems | | [Validation](docs/VALIDATION.md) | Distinguish tested behavior from assumptions | | [Security](SECURITY.md) | Handle private data and credentials | diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 0000000..aa6f04d --- /dev/null +++ b/assets/README.md @@ -0,0 +1,10 @@ +# Ghostwire brand assets + +Ghostwire's mascot is a minimal white ghost with a black outline, angry eyes and a mischievous smile. Use it with the project name **Ghostwire**. The optional tagline is **Inside the process. Across the wire.** + +- [ghostwire-icon.svg](ghostwire-icon.svg): editable vector master, white ghost on a transparent background. +- [ghostwire-icon.png](ghostwire-icon.png): 512 × 512 PNG on white, suitable for repository avatars and previews. + +Prefer the SVG for resizing. Preserve the silhouette, facial expression and proportions. Use on a light background, with space around the icon. Avoid gradients, shadows or stretching. The icon is independent of WhatsApp's branding. + +These are visual identity assets, not runtime dependencies. See [licensing status](../LICENSE.md) for the repository's current terms. diff --git a/assets/ghostwire-icon.png b/assets/ghostwire-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53a29b2a9bcb89a940b3816bb18e583f9165559b GIT binary patch literal 14480 zcmeHucQ}^)|My9k87jMEq)0|YWMyP$glrj^*=3LHBqSusmc7X=TOvaCUXi``9>2G` z>;C7IEc^txx2gT#2qg|HwNxQ@D&2IO(oP zHqiX!F+SEViFL7Z&!(Nvs^}eYaUF5r>{e}ZaNTx@xo7=d!0a?Ff;^Ve)q?xU^MoHi zh~W-B?qkERa+lx-x6gn6_qf-dspTTgzQ?Mw~2z?mT(ejWe9O*V2o zFJ?SU5pPUD7C&NvWy14?bCUBuU+N z+1l9HASQ0?>?|;DjSZ!jy(=jxdGDV4+62!0ceHYd{5LauoAXjqQVI$RH8nN%_V!-5 z=kcDyv-1D5xD>c`E7P7i6ST6j^5zZk zkP&XaFyb-6&dyFR7v0bu#ozPT!6AFHueseh~DU-os7VW)$)Aj^0 zMa9>R2A?mULPH^4FX2TwIRaeV&(c-aH?2nauU$(oExpi*$LWQ5gd1{2-Le?yDm1y@ z!|JeN?&;~Nm2ihqV zXWoYotLy9YJ=ue>-zhQ?ghWI{WMn1q)LmU&&CShby*XM{ZinAv_t4mhR)uwho zcw%k6Ru@1vsyN!*FMD#K%o12DxYKiUSBqYj;il0lV z<7u#w9l`YUbT>CQ8SN;@-|eO0aAx&{-BuRJu0qGv@!;UI-Zj-p-LL}IWep;C;nduZ zeo&K;BzMjlxZPkU$Aip-Dp29FecdX246+^a^%N$a?pnkC%F5#dMg$uU;?&e} zGcz;uy}1S2rG&$uY_4)~^^A_{6gNG*c_A?|arGTq>?MTTZgHT9fReXi{f@rAJ_ppT z%M!1C%zPuuS7VlVb@BXd=R)(Ep%40BA&eSt*u?W=BUH&rNnPppC5nyT4OO~EZTffb z*~VbvUubw7@!-J&`-Q$5=elYH-GjBeyPLzPIe2V+gv(;Uyf5#4LV_2p&Q3_st9_1d zF;Ez?=R9j$Iy3X=B2xspUdAIu?r`jVx|W^+1R<ZnW3diX=$$>wS6Q zF35>?69+9`{R|a<@XVoJVmr6tw>O_Z-|3Nl=FZ5>d@!$b%-BA5XSmePWoPBmg=}SP z#G>@c&*!4cXKZKM#uoYuvU;(q?53I{wiXAapVXZ~N4FgM==sWw5M9VS=fS7(pFc$o zeX85rZ*XyumiRNhg~XAOc{Bdx=H`5F)#EYr`AsxeY$Ut!+qboijie(&Hpi78(a{%s z0=&tZ8XM2^JF;z}t!!+3xolX7g%*D;^@VJSezTW*tW|2eJDVD(mWwAjRPIy&P1AO|roDZ&+Vj*$sz^_y?FIC> z-VEh{ag~yS0?j;KPyg62r>l&)qN)zoq)S_))0H!OAj;b+vLi`S zL_>3l=b@2V41K&&xBA%L{(Ez?K?QR>f)?)#$(p!d>3)24_#~*Ro|uFLpOW{@cyL#a z7KI?~BLrP&IKQA^zB^OGOqBxfc?5^?xCON=1TQ2O=Y_z+l)Bp5pB>54S>YHe!bn%yFG0)cRo6B(P#6hoCR#!hct<%qQqVb?SG;TYtc#PK$d3$-Sq-o1NsB)`N zFEA>kPlbNN&2*>YERvz5u73W)g}Y{Fwio)>+Y=?SdQofFn3>`Du4eDf4iqtcM=4!H zdF-h%zlA*3D04X2Sq%#dgJss4kex4H#B+*4mVN1OH+_c4$F&OVzx=%{|$g=?iKxawSi9t$Q-jwp6k;l6&XVWt1RR=evbkXppWe zw{ORM3#AMc|Cu5irIw5NM(<~Rppxa8qJo0j^=I7}Xz>@EoSc+m=Pb?4%50|P;4+3# zZa$Qhl(?1h-@a{QW22snsZEM5M46G9S>~{8d3a>|__3s{EZmZOLRXg(78cgLaTc69 zq;;0+DOR{7L1*f{5;x<4fdRMmmRnij=--OmkKGureif6DDA2|&Cq{YTE{s$R?wxVN z$E<~zR%gX{V+sAJ$DJy^bGGtm&#Xt0m*prw^P8Vq&Du!30LS2l`E-CZZR zpkRHnDIDIX4Z-k8Sy>s%Rl!lW`{cJU_&n3s!NIzRtTE8Nax*gYDu^AaP#y`cd$Xx3 zmUo2DLL${VQ^pGbNGf*Q64+nh=$ZGJ7DgCU#l@f3=;m2t9c{ZG-8PI;zd7eQOUB7<4URj&^NVwU^CRHvbt6v|Q5(WlFRxjEB^pHe)*+?~xIM~Bm5i;<%V^2gr7&cwA zplo4r(S2tOt0w?q;d9x_3QMhn|2}A=4zSRLu31}KL%q-H*8l*ZSApGD>2sP)gCjX7 zC&yuV#IOQ;M-UrH&RgSIhI+>l)sjVqHUPCiL_{Pzq8k8n0bGU}a^f6=;*MpUU%RJ9W4|-yw zGsen2Y-HcsaVz8V}Q`&*0p73e}po)LRQ7LOU+JVxseO!}qa zGSxDBi}7}gk#Zg?%I1r1r*zF*B00ZkN}hf8>=~+u32}q9>Kql0cPVYKk+*QLHmJuVgWLr;_#N88%ks(&(RehEuIBji^()aC8<+qd^PN3; z9U9(?TQUVkEqM=x6kzfCREwX4b7zWdmTL7i6mrU_;1iUyFJ*?UvA3BsFdbt7))NKU z%FCZ!GS){&tFFE^`c$M`8E`;Nf`JDa6jriT-JkDkWM~lbnZXj)e){%VTR0s(1@`Iy zLn9+XETPd#*LJ<#OUT6Am>AioE5=Z&4RgujF(K9^xCVJ+mH;`<6g8hktfOw45cU(C zLyh%)(9iEZEq@AR^)f*MfY;>(}Ys7F3rR_7TG9ZY zo$z76w>^_KC^VYTwKePU=|{P0AMWI^qs^!lo1gD5EGsR28x}Uk-f#*QSPT}2EMgfO z8(%!Yc`&?EtpAmuXL21KEq;TwK~zkvQTZ|=>%QBh(_rKV+4+%hO$ceY#LC+G=qBL; zDn`y>@*9b|DN6oZ_y|;Q0E3Tj8+ah{8;i&9-@nf%#-{OWYm?7!{7QyC;fVx`NJ?V& za{)~8X2w959Jg}cr|6&f8Ndn`m0YUv#xhtw=H}&n`{s?L4vmKrfTx(~Xzb^sx@<#L z?$l)Brr5}&z`n!K$0r@CSTxztp7M9U7I+zYAi)pd+#0#6;Tp-g1VS1nCME{!f{%X) zJ)lUxgd_p()w8m?$94!K!Oj-zBaeRbt<}{_edv$@kSbYCz1%2|LI8ilY-a+S5T$O1dj=F}WKxRQ2#(gr$DX<~7{V`JzI>B^9qGR46M%&w4cGf}>fHA7 zD663sVm(-5McuFcA|Rl)`!xZ&(4A9Q1XtcUs;c(F?00P*Jy=s&nWX>8jL37mnqLbT zp^ZVQLJCxOzymW^!gw;wcV+_R5*dVPg zr-R-QYf_eEFzkN!$Z1EY>yA( zffvr1<3{6LqC|Np!Qd&)Hcxa_?oAdgQa|Flt>q=FP-3ao<6{QxSG{VH{_0if`{xiB z7{KTT$)FtQX_awZLauyp-M9C;);qs>f-h5Ok*&4$bvs_lnx1O?aXK#~_)DQlCw2-y z1A}CwHS&g*jV)N$OeRhs#%^rj84@fC7s5`tc+Uf^E`N|+A%vAy_wB7x z5nlq>mE`1PJTs&pCcGYn>TT6)wiD|Tj0m$S%C zN|*q2Q{cR=uqy)%F{-MZt6c$e8-IXuH*78$1;t?A!`e}uQC_>byzG|N)*#&ipsNa4 zH1*-#i$kA6byEOSUT2>i8(Wnqn%&&X%gY1WC!p?gv1D2ZkXh$0i}&^Q9khpKYnJ3( zh>P6bt~!pf=)d5N#G628HszmMF%3!F9Of-HG{ZypNZDPVCTiZ8XbcrgiQOfw;pp%049ZajfBq%9PQ};^RYNY^l7VR)o{<387O`)M;8_rHlNoid~{B@A4oER z!F)~#n9djHE@K-x!z4_5KU<@SFw2`yqJN}QDjw((+WRoJUuAHCl4Rc0Lk?#TFo5>m zEHvu?nIe-;@pv?cSNWx>p+Z15ilv;O*zkBj+Aja>IH2iQx+y_aw;9>Hfj#o1f>9I( z@WR5ILp*nV>hz?fr2#;_Yk!pF81XJH(`KUKoL4?n(AM7%-&O8p;}s#`uoT^(6er+{ z!uj!Cp?_)iN?VDQPDpxI7PD8rX5pin--{=fm+!H40;ng7aGuXDK{dkS^GmZzKci-W z$)RH?gTd*ahcH-fWfvTIwlI5<(}zzYxhyrb8lqP;1%_N<`Qo@Z>R&rkeZ)Ki!Qw9i zBYF*cA#$)9;1+)Sdgyg4mbboD!0mZxBU0lHRq!YlVeE$5|erZTuON+%itF-iF zWPJGWp$hD!E^vD0y>7=xu3q^%PLm|R&xjs+wO7P-Mn=L2jSAvi?-K3~R`&_uixby1H_Hg0zxi}JEos{}W9eE_0z;$>y;nXy=07WoqC`b|EQd?!82sv& zE{2W8%AuE7jT#M;7cG&o2;WM#zaMi-OI_WBjT|*;GFo|9YB&Gw+c!}XMkXfc3tE6| zF(z-2&QClN8)seXUCVmmesF{mrZ z(YW6xn=!1kDD<_y9ycT58HWVj$@|x*Tgm?C`)2@M3CFw};>jp<;WaY_WSD>+Oww9v zD*Nk+icZDE#j&PEm_uHy$9|9e*3?Aw-!EWFHRHTFhr_r%mzjHaI2oG2X~xv(^{$4w zzt1q`c`|BZglT?!{Ju*|1AfL^TUG9+q~RHC{=Lz4q1LEdL0N7-z^=1j%!-MM%4}wB zsVML3Q&TwqKQ5;7-A@SDz5XE}P7F>yySX?2%XOk;QXnW!XB0u}b-GYwF~}ucWZIi! z!5$%MNTZ29pTUVSoHQUCc4i~^k_gIfZENf8BE@Gw`XeJFUc5k6C@JCP)8+ly!CfJ% zk#cqUs}ZBUN8KlRv~MM&ZcL0g{fug=+1E~j##Ar9d(*HN()5FA7fh5Gn~&NPd^)H;$rPXcbG1nF zneI&0(~M&i6K~?;S~C;?f&foLs-y?=c*5skmS=X|kzSUHiz)P&rRC)hSR@8pBRG65 za*bMJS<-}|$Tc-JiTPa8JpE_OvhfNTm#|>IHW3rU7!+4lQNhH(!0}H_D-%2pG-t`m z>>;)dHN92D-bNZg$IY!KU%XtoFQ?=I923*Q`QR8{JH>&r<9i`2zJEUXIp!YBUMEtA zVjv}-iqcD9EphJ}8XG%oEvPGmG^l*}6Nj3ovilN)C~jE-F{7_=-{<7I?wMdEt~7>L~q7o97fKO$nZ>y zfT9H1qN&7{pZwvUXz7{}(y4In?(J38&DN=M1H78xrL3yDJ>MH-7l+c(8O>D9_4k)3 z=KXU>1C%Fqv)E!#MK|?+s+>P><66+0H*aj`y8Ip{4isB3)h6CZr_rSO^LVmnY^9_c zut=IYo*U|J=w^JX<&hNy!&9x4moF%zBs$`k6C=`^{rH&ED4N2ESJTHW%7) z!ay*~+kZ}v{@$sW*RRKymsut2flxJ>?j_=ePlCBOd0tUSNXXhc|FzYYJ3&6(pDdp+ zk7r_HQq59p|M*1TlhM28?D_NR^71sMcc9%G7+l%Z!MJeC@*)|Ts=E5M4ATD3>i@*M zHBTFTsL9t?lrWZ%W~Fq_?rqG5hK13Yeh(5n>ML`wV*FZfw>0DgE9gU|lz8$d|9+%P zJnMsxY&KKPFlTzv_x1Pt`1;22ImmSt!dU=U9OCM~G(Am5LSnbKVWPmqJ<5951CoLs zbB_$@O|5drRX~ZrP{(!>R%lb7Jqx$|30~;vPz<2}_y=@`A55j#*lqKhttKJi;k~dN z;C5CY(d}%{!_ODdJxp(%L#jflvH2qL1F|Rt*$Qx`LDK9&3->ropu$EnhD8xXw<-7V!bd(`qa&;Tg;?4L&TLu7O*djES}(;3h{ax1n5qzPVW=k|6?qxG>iU;2HZoKJxL zHEN0Meq;*dUQz^={@-ISF9dO|y{RcP<#H#$yp|2}zqj#YGATLvQ)ww-vorwGo1OX# zWK(Amr7}O{tW#CVp&@Wh6oKOTCc;QwrSq?9Pmdl?zg;XLDhi?afNb54ur-rlvZ>7;?%7Q_DpLoVQ_Z1-6*)O%2f zxpC3|y?6&~O1@>GY4;rDUcw#}+}1e3(V801Z<+3Z_@t$!#Vl&v9ulAl6-8ltxPzua zx*8B8mr8Nl*;Y>ORhq_$jsZGwSh$<;S)jmFRaEFr3ARoHjd+q^ZP*^E(b3UUt#P@f zw{BB`BJ*TilyP}SkQ1aD7@rja8ZLbPr=bv?ve?uVsv28dtkA3T2Odgc6%Z2{i-uCF z9HnRM_J|A2?tT}zh&662!@S;zP-P*BmW?u1{;`QV$Q&< zzs>bVTT+Qeu5rI5^Cm&VtsXp%K}DmVfjI_k0oRU17jByJ^xf z5x`pc(PsJ;Ln08Bxs`hvKoxhnS2;1Vv9a;-X-=F{5BLL1^x}`*A#_eqC=FeV-1gpl zF2K)NL3iypGQz?&U}YF}o@bd~wsd|4i6H2_AvuAm9{%sU;|xKQg;|OuNfqR8uo-;$ z@&!hhd8=3_AiV{FFAfseO9MiY*lPYMJ@hFcbBe7@8-ub`|A3DhZSFLztjkqL^Hr$x zK$6&lNZ0Cqv>vYG_6fihP&gof?gz=mU1wl8(c^(TgE?rwU4k0_JbRKtqIiDT-0bY` zu*0a|!6h@Ye>c%4Tf1VQu~AC*TTf5%chU%qlhK5w7bxQnJ!)OEGcny3(T_m_dZ!`%(=iEqUcY-pqvEjRdXJ^=XISE>G=x| z$Y;V;ptX~b&~5r=;!cc@=iAOI7WB*5Z7BI=dH#DPPFrY)z`o-Qk;8z7M9}WW~W9-NuQ&XV6Hv{2)cRiWYK+Ev&g;Ky~@N{==@&rknf_?(;cx;z*3N3#m z{~v(#MX2+>g2IP~waGssrxqT9347lpPf4aS1Jl$gui-4?fk|Ux`>7B3r z{P}fg=&H8hR)GIW{|m+LCcK#mnly~kFg6m#)XFe3Ffh>5Pr>{Fvz34W{-5c?&-3jF zjNq`jyWouhz5;szg^Bt7-Ho5V)Na8K8#R3X7H)QDz?Ps$(_X#|`aEN6KxILJ4b0L2 z48OE;XkPhu<;$T87Y7KN_V)JM&Kr+yY!Wy9t=P!Dyu8GNs4Boo0Qod_=vtchr=tj+ zhdDI-?ORf6YHCVK5WcNIn#01xbar$EXN9pgEm#?#0;uY^7D0CX{2CModHMt<92fm{k z>KA{*GM)uU2JK>Vbu~3LNY7ZoVQp<~@Sa6Nh=7vKLfX`HF!mQm=oWnqqBb@%0-Ayo z^iFzudR|^$NQ@@dDsTYUh>O>QT=D1ugQF)<5_R?UK>sVGcAmp4ii;aHj&lVX_VAzz z<1fB=0dL~Ce%-PwO#yHztND9xZxQe<9q;v4rKF^QprTOWL8A@)BGlM|z`#Hu5%6um zIAg>W71yu+H)hlPAUB}&Ky43P_}ZNMuq{`o3Y<$IO)FHq=7-|*dC;oL0*I3VjUv-c zAQBI^mrsWrn!FrH{Dn01;&q@y4S@I$Y^X`a7Z6P3qPbTOcGs11ud+gMqQ4iL)jN-I z4d#7&UIL|H`91{@G1QMAnJyHMh z_fm`BzzTCu9oT(v;9P5vPVEGhaKYzR!ecX-5vi!C(D^8NZE5zY)g9!1F*9F;j^)5` zR#sM4{UR{11-yMv3fgi3y0{;#epRgc$x4}_`PShCWa-7bPlE9UJcj3p;{hZB!lLY! z&Q<}d6VyJh$Pbq9e{n^Ao=4#za`W==;P}7qoE-to3MD#3A8s8iQeNLaEG7K2j+e#{Ks=Rx`h;WJmVQ4K=JOX9)3UNI^4Vv_U&`Xk__dkV{B5U6ndN(1 z-z_aIUAuNIA%%pDtZ8fbbbp>@#;<#7oD>4u225?I8Iw9^6A}|;=|j`RK<~zN=X-@W zUupV_>^i`=H8Gim7{K712j=r+MrQ#f;Dm`Sd|_wy`^LXx^0Kl9?d(VU!({5dG{mF8 z1U8(GyoVxw&fUPs!Kr?aghQ5qt`(kN-3dN@AahL_qEj2cA5+W{KxOK zHsRyG58%jfr%U*)_!{~NRV9GAchan8F5VCnthxuN8Ay-T0~fHWf(z^>@G+{|PGZ5$ zX$pyeHN{B2H8g-RFL^K!02H_rdedG4)Q1Q<{W>Jeo&OH-l%X$5m+mw+Hzyr&q|ji4 z!%tF9&aE-75(uB(T%F?qvs|2xnXdHEIVyqZ*x03o1(^>xkp6J7t4vdHN?;L--+a(G z8b8dF^B!nQDTB6nVHk!JE`Wk?-<`U?x7PvW7x#_6zUe$QW)LN|fI7L-27&{?IR!en zZPD$CWYDeG0e`8e03+I+B1_@Pb@#Tn`<+`Rw6U|G=?z!7sE%EB`caK0AtB+v6UOhY_dL z{Cvf(Jv$t1?2pcy8KTKklaoHrpDU){Pr%)MX4x?T=x6frylp9*=CdF8PiD;r3jM}! zxh^a$5E2q5Wo|)*I-zU`b>;&7x+~M?QpOtrjw~@X&u&JQLCw^dV6~(iLHS$ zapEut8|Hr0M#D6EKGkq@uA4Z>aeZ_1w$oZt7iUz<)F+#1#bf7;s;Xmn)0vqsJS0fHc7chz@7F`9w;0Y+*A?cvY+&|dK(f|4iicUU> zI~Z(rbaXr!uU<`sLH9)#i&~z?xSgNB|Lff{D;TEDI+AeIi{K)m1xhU=vCKg?%8?$07=r(jcsrE_8#3qZE>S~AM+e#|%r-6bTGeKl4PGo+ytsGfEDHle zuoDYJ%X`O_4DH;Ypdhk-&_JF}$2gcO**t#CR_n!y1NtA#S?QypBkx79`l)p6mPc;; zr-HkYmu^TLwo7jAUfMS7pxePmbLocG)@9&pvd3Y-0$e7Fp$0T|jjm%vB-D%KGATbz zY-I1%MV>o{ll9%*c0iscd;w$h)2B}#bwghQtjNSz3p@YFRrJ_OJn;#1d-kDxJCLRQ z~~SP2j42+ff=ps=V&xvTZvv5KGlI%WMDv5g0lDNgi(Qg~5^_6{mQ7YzX0!Z7bkyPfTi4 z`+7is!A7KLh9xHcgt=9;&Lv_y28WxEk5w%%9zby903a#gcx6^yv>8jUgJIp{A}Omj zb6rrh7meeu`J-ziVhYR-pnIgcnZF7Mkal)1O(O*772$2}-quztFx#L;bJ(L=;7bGV zj}AHQw8(;O>cQisr>B?1eWRtNMfSNq)eO|z(4}+F zVJe=3)}p;Ore{qmU1V=R*MDp5Y#FGH3sI*^t>HQpGU`qnFqX~gIr$>ZbWFnZ%Kf>*R|&f{J>d^G`t zpVE@CrYV@jvvYEchVRJZqY#&-aMtjdsf*WUHus=izR(B<0(xobdYZ3xuIlHS%=qir zh!|KNluS zz-hK4nfQ!U*d4$^fKI=cD#zc&MhtghSfi`B75!2!b^nL=nWLFZnMel^U;PLI^Rz`p zpM^=BL2Ct1;5y_We0c)fUjeLET4nZrPnoV?2X5`nUXvc@_{0Q20s5XmG&^ukc0tpF zaBJKX6DMcW6#~3JZ^Tdszyxp!J;RAP3nZsTu&g_S^#{&equlX>twh7^xZGS;0o8*F z_%Z+}92^Hq)x*QCP-XGz&lO^$#e?AK1fyg4dhJ7?M(pOgUcV;nkyg!trUE=s)A6ge zhLFoe8{KBQ1mFXO5WKIX^roVsA}N;@Y;R*@W8thiMime2xS?m5Z~I|lVNvrt25k3ottgvjb-hpvb7=ZW|aZ_lSv!nZZ;K z$XRKG%oNapt?f;L*`f}}BQTJG$DKi5&&-Su`W64zb60#2`414YBupx{%Of#AoI>F{ zHU2MO%1BF}m=Js4Q-UlGnGOOw^{PTHZ%hu%F5td6@k6Sf8t_HhykL+>PDz1#nucx( z-)XP_jmv#KACxp|a&mG~QZ8_HgEp=8$=b)R@d6Nh0PQN_OB03W{cDDn=hrqjUH2DD z;2Si61L{ice?XNipaR31yu7@c+KXDx{*0_FeqfvK-u(vRBG~S$cE$tXF<@T%`t>VZ w>ktwO>dZ@Nl=gqV6o&l2`z<-4iO%CwPsh_U>n-Ag;64#4F*(tkJGx%~1#Qk0DgXcg literal 0 HcmV?d00001 diff --git a/assets/ghostwire-icon.svg b/assets/ghostwire-icon.svg new file mode 100644 index 0000000..85f608c --- /dev/null +++ b/assets/ghostwire-icon.svg @@ -0,0 +1,8 @@ + + Ghostwire ghost mascot + A minimal white ghost with a black outline, angry eyes and a mischievous smile. + + + + diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index a5c1870..e4c15de 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,4 +1,4 @@ -# Architecture +# Ghostwire architecture ## Two ways to run the same code diff --git a/docs/CLI.md b/docs/CLI.md index 1a0e938..d5b9d4c 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -1,4 +1,4 @@ -# CLI reference +# Ghostwire CLI reference Use the portable file from a writable folder: diff --git a/skills/whatsapp-suite-development/SKILL.md b/skills/whatsapp-suite-development/SKILL.md index b7550e3..e56e11f 100644 --- a/skills/whatsapp-suite-development/SKILL.md +++ b/skills/whatsapp-suite-development/SKILL.md @@ -1,9 +1,9 @@ --- name: whatsapp-suite-development -description: Maintain and extend this repository's WhatsApp Desktop Python suite, WebView bridge, message exports and webhook listener. Use for implementation, debugging, packaging or documentation in this project. +description: Maintain and extend Ghostwire, this repository's WhatsApp Desktop Python suite, WebView bridge, message exports and webhook listener. Use for implementation, debugging, packaging or documentation in this project. --- -# WhatsApp suite development +# Ghostwire development Use the repository containing this file. It has two distributions of the same code: editable `whatsapp_suite/` and generated portable `whatsapp.py`. The core path is Python ctypes → temporary Windows hook → bundled native DLL → existing WhatsApp WebView JavaScript. Core commands require no CDP or UI automation; separate research commands may use other transports.