13.9 C
Canberra
Monday, March 9, 2026

Future Updates | Cocoanetics


As a substitute of writing weblog posts about particular person package deal updates, I feel I’ll be altering issues up a bit. My brokers do a greater job than me in summarizing the adjustments for particular person releases, so I’ll to any extent further group them collectively, referencing the discharge notes on GitHub.

I’m working quite a bit on a non-public venture for a consumer at this second the place I’m making MCP for all communication. Beforehand I might have hand-rolled REST API calls with URL classes and JSON decoding for speaking to Google Drive or Parse platform.

SwiftMCP

However for this new venture I figured I wished to up the sport and use MCP wherever potential. The principle benefit is that you’ve static varieties and in addition a again channel that enables me to stream notifications and log occasions to purchasers. Additionally as I defined earlier since I’m proudly owning each side of the MCP communication, all I must do is to seat up my @MCPServer correctly, and the consumer half will get routinely generated for me.

Lengthy story quick, this compelled me to deal with a few shortcomings in SwiftMCP. One such drawback was how the Bojour+TCP transport would resolve the server. This was solely on the lookout for _mcp._tcp and whereas I had solely a single one which was nice. However then I began having a number of MCP servers on my native machine – my consumer venture daemon in addition to the Publish daemon – and all of the sudden my mail room stopped having the ability to trash processed emails.

Then I spotted that it was connecting to the improper server. So I enhanced the bonjour promoting to incorporate the server identify as effectively.

There was one other shortcoming of Linux. The one manner how I can know if my elements would work on Linux are the GitHub actions that compile them for this platform. SwiftMCP on Linux was lacking SSE communication for the consumer aspect. That’s now been remedied. I’m on the lookout for a time when I will truly deploy my Swift code on Linux platforms.

And I wanted to broadcast log occasions to all linked MCP purchasers. So we fastened an issue the place every session wanted to be made present in order that the sending wouldn’t crash with a precondition failure. See the total SwiftMCP 1.1.0 change log for particulars.

SwiftMail

SwiftMail appears to have sparked extra curiosity as I can see from fixes and enhancements being contributed. This element has seen lots of use on my half as effectively as a result of it’s the core enabler for my Publish CLI, which my mail-room agent is utilizing to maintain abreast my emails.

We had accomplished the aptitude matrix for the key electronic mail servers Gmail, iCloud, Trade, and Dovecot. And on the software program aspect NIOIMAP and SwiftMail. The options which had been in NIOIMAP and most servers, however not but in SwiftMail very apparent candidates for inclusion.

Loads of tinkering went into determining to look at mail servers over a very long time and take care of server-side disconnects and different methods how the postd may crash. Unresolved guarantees and what not. Due to different individuals’s testing we discovered fairly just a few locations that wanted stabilizing.

The most recent change was to make use of the first connection for IDLE and to spin up – and join – a brand new connection when a brand new electronic mail is available in. It seems that establishing such ephermeral connections is definitely fast and ache much less anyway. See the total SwiftMail 1.2.0 change log for particulars.

SwiftText

One of many features of SwiftText is the flexibility to generate HTML and PDFs from markdown. That is additionally uncovered through the swifttest CLI through the render subcommand. HTML just isn’t actually editable for people and PDFs are basically static printouts additionally web meant to be edited by mere mortals. Currently I’ve been warming to DOCX – vulgo “Phrase format”.

When speaking editable paperwork with the non-Apple world it is vitally helpful to take action with DOCX recordsdata. Behind the scenes these are like a strict XML dialect with many parallels to HTML. Due to this I applied conversion of DOCX to markdown some time in the past.

Within the newest model I closed the loop and now you’ll be able to flip markdown again into DOCX. The concepts is that in case you have markdown output from an agent, you’ll be able to simply run it by means of swifttext and you’ve got a format that the “outdoors world” can reuse and edit.

There stays a small space the place Linux is behind the world of Apple: the usage of WebKit. I’m utilizing WebKit to learn net pages which have some JavaScript loading or rendering, to attend till the ultimate DOM has been created after which I can pull the HTML and convert it to markdown.

One other space is that for some invoices that I get by electronic mail – taking a look at you Apple! – I would like to avoid wasting the e-mail as PDF for my accountant. WebKit has a operate to “print” an online web page into PDF. So there are some availability gates round this code in order that SwiftText nonetheless builds on Linux.

The excellent news for DTCoreText – which is caught in historical Goal-C historical past – is that my brokers had been in a position to determine construct for Linux and use libxml2 for parsing HTML. With the assistance of a contributor this half is now absolutely Swift. It now turns into potential to lastly improve DTCoreText to full Swift as effectively. SwiftText has a HTML parser utilizing libxml2 to construct a DOM which then is transformed to markdown.

DTCoreText works considerably in another way although. It retains a stack of parts, however flushes items of NSAttributedString right into a mutable attributed string. And trendy code may wish to generated SwiftUI AttributedString from HTML. So would I add this performance to SwiftText and gate it for Apple platforms? Or would I make a DTCoreText 2 department that implements these?

I’m leaning in direction of the latter. The benefit is likely to be that we will migrate the nice variety of unit assessments now we have in DTCoreText to Swift Testing after which changing all with Swift needs to be a straightforward train … for an agent.

See the total SwiftText 1.1.0 change log for particulars.

Publish

As I’ve alluded to above the second massive driver for updates is my refining and enhacing of Publish. For just a few days now I’m having fun with a kind of Inbox Zero with the mail-room talent I’m engaged on. This archives markdown model of all newsletters I get, marks spam emails that had been missed by my server-side spam filter and kinds out invoices for my enterprise or non-public.

The emails from GitLab or GitHub regarding sure tasks of mine get reported to Discord threads of the identical identify. So if a CI motion on GitHub fails, I see it in the principle thread about it. Similar goes for feedback to PRs and all different kinds of notifications.

Received a comment on a SwiftMail PR in the #SwiftMail Discord thread

The principle operate that allows that is that Publish can name a script each time a brand new mail arrives. This script will get a JSON illustration of an important meta information in regards to the electronic mail in addition to a markdown illustration…. I’ll cease myself right here from revealing an excessive amount of extra, as a result of this warrants a weblog submit of its personal when I’m able to launch the OpenClaw talent to the general public.

Again to Publish now. My accountant managed to crash Publish by sending me an electronic mail that had a single

containing 157 extra ranges, which produced a stack overflow making an attempt to transform it to markdown. So I addressed that by flattening such ludicrious hierarchies. Then there have been some points with quoted printable decoding and passing the improper charset into libxml2 inflicting tousled german particular characters.

Brokers are capable of create draft emails from markdown. Publish turns the markdown into good HTML for the principle physique and retains the markdown because the plain textual content model. That wanted some enhancements. There’s additionally help for replying to – and quoting – a message. That’s been there for some time however it’s maturing properly. Quickly it is possible for you to to say: “draft a reply to this new electronic mail from x, touch upon the person factors and fasten the most recent PR as PDF”

And eventually, a lot of the adjustments had been ease-of-use enhancements. Like for instance I wished to retailer bill with a sure format like Apple_123123123123_20260513.pdf. Beforehand I needed to obtain the file with its authentic identify to a temp folder, discover the file after which rename it. Now uniformly you should use the --output possibility for specifying a folder or file identify. Within the former case the unique file identify is used, within the latter the required file identify.

Learn extra within the full Publish 1.2.0 launch notes.

Conclusion

Me and my agent group are very busy as of late, however – truthfully – the best reward is to get questions, bug reviews and even full pull requests from individuals who prefer to construct on my OSS. It feels extremely validating to really feel some curiosity for a labor of affection.

On the OpenClaw entrance, I've nothing new to report, Peter Steinberger stubbornly ignored an X DM, a private electronic mail, my electronic mail to the OpenClaw contributor tackle, one other X DM and me publicly venting. This degree of ignoring me can now not be unintended. What have I finished improper to not even get any response?

A bit pick-me-up got here – how would have ever anticipated that – through LinkedIn…

Their loss is your acquire! So on a constructive word, I've quite a bit to do as of late in any case, and OpenClaw doesn’t need my assist, then I’ll put my power into extra rewarding areas, like those I discussed on this right here article.


Tagged as: , , ,

Classes: Updates


Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

[td_block_social_counter facebook="tagdiv" twitter="tagdivofficial" youtube="tagdiv" style="style8 td-social-boxed td-social-font-icons" tdc_css="eyJhbGwiOnsibWFyZ2luLWJvdHRvbSI6IjM4IiwiZGlzcGxheSI6IiJ9LCJwb3J0cmFpdCI6eyJtYXJnaW4tYm90dG9tIjoiMzAiLCJkaXNwbGF5IjoiIn0sInBvcnRyYWl0X21heF93aWR0aCI6MTAxOCwicG9ydHJhaXRfbWluX3dpZHRoIjo3Njh9" custom_title="Stay Connected" block_template_id="td_block_template_8" f_header_font_family="712" f_header_font_transform="uppercase" f_header_font_weight="500" f_header_font_size="17" border_color="#dd3333"]
- Advertisement -spot_img

Latest Articles