Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f4f0d86d1f | |||
| 4bae7bfb72 | |||
| ea06442d44 |
@@ -20,7 +20,7 @@ jobs:
|
||||
- name: Detektera ändrade tools
|
||||
id: changed
|
||||
run: |
|
||||
TOOLS="pixel-sprite-maker mesh-tool bitmap-font-maker sfx-maker hitbox-tool notifyr svg-maker waitfor cronr giteactl"
|
||||
TOOLS="pixel-sprite-maker mesh-tool bitmap-font-maker sfx-maker hitbox-tool notifyr svg-maker waitfor cronr giteactl fleet"
|
||||
BEFORE="${{ github.event.before }}"
|
||||
CHANGED=""
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ] \
|
||||
@@ -64,6 +64,7 @@ jobs:
|
||||
waitfor) BIN=waitfor ;;
|
||||
cronr) BIN=cronr ;;
|
||||
giteactl) BIN=giteactl ;;
|
||||
fleet) BIN=fleet ;;
|
||||
*) echo "okänt tool $t"; exit 1 ;;
|
||||
esac
|
||||
echo "=== $t ($BIN) ==="
|
||||
@@ -98,6 +99,7 @@ jobs:
|
||||
waitfor) BIN=waitfor ;;
|
||||
cronr) BIN=cronr ;;
|
||||
giteactl) BIN=giteactl ;;
|
||||
fleet) BIN=fleet ;;
|
||||
esac
|
||||
TAG="$t-latest"
|
||||
BODY="$t (binär: $BIN) - rullande bygge från senaste master. Commit: ${{ github.sha }}. Arkitekturer: linux x64 + arm64 (Pi5)."
|
||||
|
||||
27
.vscode/tasks.json
vendored
27
.vscode/tasks.json
vendored
@@ -241,6 +241,30 @@
|
||||
"$go"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "build fleet",
|
||||
"type": "shell",
|
||||
"command": "go build -trimpath -ldflags '-s -w' -o build/fleet .",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/fleet"
|
||||
},
|
||||
"group": "build",
|
||||
"problemMatcher": [
|
||||
"$go"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "test fleet",
|
||||
"type": "shell",
|
||||
"command": "go test ./...",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/fleet"
|
||||
},
|
||||
"group": "test",
|
||||
"problemMatcher": [
|
||||
"$go"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "build",
|
||||
"dependsOn": [
|
||||
@@ -253,7 +277,8 @@
|
||||
"build svg-maker",
|
||||
"build waitfor",
|
||||
"build cronr",
|
||||
"build giteactl"
|
||||
"build giteactl",
|
||||
"build fleet"
|
||||
],
|
||||
"dependsOrder": "parallel",
|
||||
"group": {
|
||||
|
||||
@@ -18,6 +18,7 @@ agent understands the result without opening an image viewer.
|
||||
| [`waitfor/`](waitfor/) | `waitfor` | Blocks until a shell condition holds (exit 0 + optional regex match) — replaces hand-rolled poll loops. `--then` hook composes with notifyr. |
|
||||
| [`cronr/`](cronr/) | `cronr` | Recurring/one-shot jobs as systemd user timers that survive session exit and reboot. add/list/run/logs/rm, schedules validated by systemd-analyze. |
|
||||
| [`giteactl/`](giteactl/) | `giteactl` | Gitea Actions runs, job logs (API/web/ssh+zstd fallback), `wait` (block until green) and `wait-quiet` (the "serialize heavy builds" rule), release assets. |
|
||||
| [`fleet/`](fleet/) | `fleet` | One-shot homelab health snapshot: container states, disk fill and failed systemd units across hosts, via read-only commands. Exit 2 = findings. |
|
||||
|
||||
Each tool has its own folder, its own README with the full format/CLI
|
||||
reference, its own tests and its own dev branch (`dev/<tool>`).
|
||||
@@ -27,8 +28,8 @@ reference, its own tests and its own dev branch (`dev/<tool>`).
|
||||
[`doc/tool-parity.md`](doc/tool-parity.md) compares the Google agent's
|
||||
built-in tools with Claude Code's, and specs the CLI tools that close
|
||||
the gaps so any agent gets the same capabilities via its shell tool.
|
||||
Built so far: `notifyr`, `waitfor`, `cronr`, `giteactl`, `svgc`
|
||||
(2026-08-07). Still on the list: `fleet`, `envaudit`, `reghelper`,
|
||||
Built so far: `notifyr`, `waitfor`, `cronr`, `giteactl`, `svgc`,
|
||||
`fleet` (2026-08-07). Still on the list: `envaudit`, `reghelper`,
|
||||
`pagepub`, `nbcell`, `wtreectl`, `fanout`. Build order and rationale
|
||||
live there and in [`doc/plan.md`](doc/plan.md). Agy finds the tools
|
||||
through the `agent-tools` skill in `~/.gemini/config/skills/`.
|
||||
|
||||
@@ -31,7 +31,7 @@ master/main. Only tools whose folders changed get rebuilt.
|
||||
send/read), `waitfor` (block on condition), `cronr` (systemd user
|
||||
timers), `giteactl` (CI runs/logs/wait/wait-quiet/releases) and
|
||||
`svgc` (`svg-maker/`: .svgd → SVG for agent-helm, Björns direkta
|
||||
önskemål). Alla smoke-testade mot riktig infra; agy-integration
|
||||
önskemål) samt `fleet` (hälsosnapshot). Alla smoke-testade mot riktig infra; agy-integration
|
||||
via `agent-tools`-skill + AGENTS.md i `~/.gemini/config/`.
|
||||
|
||||
## Roadmap / expansion ideas (not agreed yet)
|
||||
|
||||
@@ -292,7 +292,7 @@ binaries), same philosophy — don't duplicate those here.
|
||||
1. ✅ `notifyr` — smallest, everything else composes with it, ntfy already runs. *(built 2026-08-07)*
|
||||
2. ✅ `giteactl` — removes the biggest daily friction (CI logs + build serialization). *(built 2026-08-07; private repos need an API token in the config)*
|
||||
3. ✅ `waitfor` + `cronr` — turns both agents into unattended operators. *(built 2026-08-07)*
|
||||
4. `fleet` — replaces the hand-rolled health loops in every runbook.
|
||||
4. ✅ `fleet` — replaces the hand-rolled health loops in every runbook. *(built 2026-08-07)*
|
||||
5. `envaudit`, `reghelper`, `pagepub`, `nbcell`, `wtreectl` — as needed.
|
||||
6. `fanout` — only if a concrete multi-agent need shows up.
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ canvas** — so mistakes surface as text even without the preview.
|
||||
Errors carry line numbers (`card.svgd: line 7: "four" is not a
|
||||
number — rect needs: rect <x> <y> <w> <h>`).
|
||||
|
||||
The example above, rendered (this exact file is
|
||||
[`examples/gauge.svgd`](examples/gauge.svgd) → [`examples/gauge.svg`](examples/gauge.svg)):
|
||||
|
||||

|
||||
|
||||
## The .svgd format
|
||||
|
||||
One element per line, `#` comments, `key=value` attributes last:
|
||||
|
||||
8
svg-maker/examples/gauge.svg
Normal file
8
svg-maker/examples/gauge.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 120" width="240" height="120">
|
||||
<rect width="100%" height="100%" fill="#12161f"/>
|
||||
<rect x="8" y="8" width="224" height="104" fill="none" rx="10" stroke="#262d3a" stroke-width="2"/>
|
||||
<circle cx="40" cy="60" r="22" fill="none" stroke="#3fca7c" stroke-width="6"/>
|
||||
<path d="M30,60 L38,68 L52,50" fill="none" stroke="#3fca7c" stroke-linecap="round" stroke-width="5"/>
|
||||
<text x="76" y="54" fill="#8a93a5" font-size="13">backups</text>
|
||||
<text x="76" y="76" fill="white" font-size="17" font-weight="bold">all green</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 586 B |
Reference in New Issue
Block a user