← Commit history

Publish 1.0.0

Drew Owens ·433889f4c0 ·3mo ago ·parent 294485a
7 files changed +144
SKILL.mdadded+89
@@ -0,0 +1,89 @@+---+name: adom-rss-gchat+description: Set up and manage RSS-to-Google-Chat feed posting. Use when the user wants new RSS/Atom feed items (news, blogs, release notes, status pages) posted automatically into a Google Chat space, wants to add/remove/edit which feeds post, or asks about adom-rss-gchat. Trigger words - rss to chat, feed to google chat, post articles to chat, watch a feed, status page in chat, rss notifications, feed bot, adom-rss-gchat.+---++# adom-rss-gchat++A small always-on service that polls RSS feeds and posts each new item into a+Google Chat space via webhook. Feeds are managed from a token-gated web editor+the user pins to their Chat space. Runs on the user's own small Adom container;+no central service, no shared credentials.++## Architecture (what runs where)++- **Service container** (default-light, user-owned): runs the `adom-rss-gchat`+  binary (poll loop, default every 30 min) plus a tiny Python feed editor on+  port 8842, both supervised by a 2-minute cron watchdog.+- **Data** lives in `~/rss-gchat/` on that container: `feeds.json` (live feed+  list, hot-reloaded each cycle), `state.json` (per-feed seen-item sets — never+  posts a duplicate), `editor.token` (capability token), `env` (config).+- **Feed edits** go through the editor URL; a save is live within one poll+  cycle. New feeds seed silently — only items published after adding are posted.++## First-time setup (walk the user through this)++1. **Create a dedicated service container** (from the user's dev container):++   ```bash+   IMAGE_ID=$(adom-cli carbon containers images | jq -r '.[] | select(.name=="default-light") | .id')+   # Container must be attached to a repo at creation. Use (or create) one:+   adom-cli carbon user repo-create rss-gchat --private --description "RSS to Google Chat service"+   REPO_ID=$(adom-cli carbon user repos | jq -r '.[] | select(.name=="rss-gchat") | .id')+   adom-cli carbon containers create --image-id "$IMAGE_ID" --class small --repo-id "$REPO_ID"+   ```++   Note the `slug` and `ssh_credentials.username` from the response. Wait+   ~20s for SSH to come up.++2. **Install on the service container** (one-liner, no Rust/git needed):++   ```bash+   ssh -o StrictHostKeyChecking=accept-new <ssh-username>@adom.cloud \+     'curl -fsSL https://wiki.adom.inc/download/adom/adom-rss-gchat/1.0.0/install.sh | bash'+   ```++   The installer prints the editor token and the exact next steps.++3. **Expose the editor** (back on the dev container):++   ```bash+   adom-cli carbon containers port-add <slug> --port 8842 --prefix rss-editor+   ```++   Editor URL = `https://<returned-hostname>/?token=<token-from-step-2>`.++4. **Hand the user the editor URL.** Its on-page setup guide covers the+   Google Chat side: open the space, space name menu, Apps & integrations,+   Webhooks, Add webhook, copy the URL, paste it into the feed row. Tell the+   user to **pin the editor URL to the space** afterward.++## Managing feeds++Prefer sending the user to their editor URL (it validates, backs up, and+hot-reloads). For direct automation, edit `~/rss-gchat/feeds.json` on the+service container over SSH — same format:++```json+{ "feeds": [ { "url": "https://example.com/feed.xml", "label": "Example",+              "dedup": "guid", "webhook": "https://chat.googleapis.com/..." } ] }+```++- `dedup: "guid"` — post once per item (news, blogs).+- `dedup: "guid+date"` — re-post when an item's pubDate changes (status pages:+  Investigating, Monitoring, Resolved each post).+- `webhook` — per-feed Chat webhook. Feeds route independently, so one service+  instance can post different feeds to different spaces.+- Saving an empty list pauses all posting (nothing is forgotten; state stays).++## Operations++- Logs: `~/rss-gchat/bridge.log`, `~/rss-gchat/editor.log` on the container.+- Upgrade: re-run the install one-liner (data/feeds/token all preserved).+- Rotate a leaked editor URL: `rm ~/rss-gchat/editor.token`, re-run installer,+  re-pin the new URL.+- Cold-boot caveat: if the whole container restarts, start cron once:+  `ssh <user>@adom.cloud 'sudo service cron start'` — the watchdog then+  revives everything within 2 minutes.+- Never `pkill -f` the binary path over SSH (self-matches the SSH wrapper+  shell); use `pidof adom-rss-gchat`.
docs/editor-feeds.pngadded
⋯ 1 unchanged line ⋯
docs/editor-setup.pngadded
⋯ 1 unchanged line ⋯
docs/hero.pngadded
⋯ 1 unchanged line ⋯
install.shadded+8
@@ -0,0 +1,8 @@+#!/bin/sh+# Dev-container install for adom-rss-gchat: the runtime lives on a dedicated+# service container, so there is nothing to install here beyond the skill+# (which the registry places automatically). Point the user at the setup flow.+set -e+echo "adom-rss-gchat: skill installed."+echo "The service itself runs on a dedicated container. Ask your agent to"+echo "'set up adom-rss-gchat' or follow: https://wiki.adom.inc/adom/adom-rss-gchat"
package.jsonadded+42
@@ -0,0 +1,42 @@+{+  "slug": "adom-rss-gchat",+  "title": "RSS to Google Chat",+  "type": "app",+  "version": "1.0.0",+  "description": "Post new RSS feed items straight into your Google Chat spaces. A small always-on poller with a pinnable web editor: click the link in your space, add or edit feeds, Save \u2014 live within one poll cycle. Per-feed dedup handles both news feeds (post once) and status pages (re-post on updates).",+  "tags": [+    "rss",+    "google-chat",+    "notifications",+    "service"+  ],+  "dependencies": {},+  "discovery_triggers": [+    "post an rss feed to google chat",+    "rss to chat",+    "feed notifications in a chat space",+    "watch a blog and post new articles to chat",+    "status page updates in google chat",+    "set up adom-rss-gchat"+  ],+  "discovery_pitch": "When a user wants new RSS/Atom feed items (news, blogs, status pages) posted automatically into a Google Chat space, with a web editor to manage the feed list.",+  "sample_prompts": [+    {+      "label": "Vendor news into Chat",+      "prompt": "Post new articles from our vendor's news RSS feed into our team's Google Chat space"+    },+    {+      "label": "Status page alerts",+      "prompt": "I want incident updates from a status page's RSS feed to show up in Google Chat"+    }+  ],+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "hero": {+    "headline": "RSS to Google Chat",+    "subhead": "New feed items, posted to your space. Edit feeds from a link pinned right next to them.",+    "screenshot": "docs/hero.png"+  }+}\ No newline at end of file
uninstall.shadded+5
@@ -0,0 +1,5 @@+#!/bin/sh+# Removes the dev-container skill only. The service container (if any) is+# user-owned and untouched — delete it via adom-cli if no longer wanted.+set -e+echo "adom-rss-gchat: skill removed. Any service container you created is untouched."