Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
d6a65c3
feat(policy): validator + YAML-aware error mapping (Day 1 PoC)
Apr 22, 2026
f8ad2dc
feat(policy): compiler-style error formatter + precise locator
Apr 22, 2026
76a475d
feat(policy): wire validate/new/migrate subcommands (Day 3)
Apr 22, 2026
d86aa5f
test(policy): cover validate/load/command surface (Day 4)
Apr 22, 2026
b0d0197
release: 2.8.0 — policy command group + docs + CI schema drift guard …
Apr 22, 2026
8e9abdc
chore: sync post-2.8.0 doc counts and expose policy commands in boots…
Apr 22, 2026
b020d84
docs: add policy reference + integrate policy awareness into agent guide
Apr 22, 2026
4c4bd02
test: pin bootstrap quickReference keys and per-block policy null han…
Apr 22, 2026
07bff92
design: draft policy schema v0.2 and Phase 4 rules schema notes
Apr 22, 2026
0964fc4
design: phase 3 one-command install blueprint
Apr 22, 2026
36e3c9e
design: phase 4 rule engine runtime blueprint
Apr 22, 2026
5ea3034
feat(doctor): add policy section reporting file + validation state
Apr 22, 2026
1883451
feat(agent-bootstrap): expose policyStatus in compact payload
Apr 22, 2026
cd33181
feat(mcp): expose policy_validate / policy_new / policy_migrate tools
Apr 22, 2026
43755ab
docs(examples): add policy library covering minimal/cautious/permissi…
Apr 22, 2026
22f8157
feat(policy): dispatch validator by schema version (v0.1 + v0.2)
Apr 22, 2026
0821d6e
feat(policy): implement migrate v0.1 -> v0.2 preserving comments
Apr 22, 2026
c266b9b
feat(policy): reject destructive commands in v0.2 rules
Apr 22, 2026
d14976e
chore(policy): surface v0.2 support in doctor/mcp/bootstrap/docs
Apr 22, 2026
67115f8
feat(rules): add rules engine core with MQTT trigger and dry_run
Apr 22, 2026
3a88fcf
feat(rules): add rules run|list|lint subcommands with MQTT PoC
Apr 22, 2026
a9b5866
docs(rules): add PoC walkthrough + automation.yaml example
Apr 22, 2026
5b2f6ac
feat(credentials): add keychain abstraction with 4 backends
Apr 22, 2026
08e41de
feat(auth): bridge CLI credential read to keychain with file fallback
Apr 22, 2026
4ddef7a
feat(auth): add keychain subcommand group (describe/get/set/delete/mi…
Apr 22, 2026
e91f01a
chore(auth): wire keychain into doctor + agent-bootstrap
Apr 22, 2026
e7bee32
feat(install): add install orchestrator library (preflight + rollback)
Apr 23, 2026
e11e0cd
docs(auth): surface keychain support in README and Phase 3 design doc
Apr 23, 2026
a8219b0
feat(rules): add cron trigger runtime
Apr 23, 2026
018f305
feat(rules): add webhook trigger runtime with bearer token
Apr 23, 2026
9e8aae5
feat(rules): add device_state condition with per-tick caching
Apr 23, 2026
e6e945f
feat(rules): add SIGHUP hot reload with pid-file fallback
Apr 23, 2026
4a3e4f5
feat(rules): add tail + replay subcommands for rule audit
Apr 23, 2026
e2843c4
docs(rules): refresh README + phase-4 banner for shipped cron/webhook…
Apr 23, 2026
5519bab
docs: add quickstart + clarify rules-engine phase + skill pointer
Apr 23, 2026
b309d92
docs: add roadmap + UX principles + phase-1 manual-orchestration
Apr 23, 2026
226c5dc
release: 2.9.0 — policy v0.2 + rules engine + keychain
Apr 23, 2026
e2f3209
release: 2.10.0 — switchbot install / uninstall one-command UX
Apr 23, 2026
8bbc883
release: 2.11.0 — install polish, CI matrix, rules day_of_week + and/…
Apr 23, 2026
391f70b
release: 2.12.0 — plan suggest, plan run --require-approval, plan_sug…
Apr 23, 2026
8483f88
release: 2.13.0 — L3 autonomous rule authoring (rules suggest, policy…
Apr 23, 2026
95a3d50
feat(mcp): policy_diff, plan_run, audit_query, audit_stats; dry_run d…
Apr 24, 2026
865e939
chore: v0.2 policy default, contract hardening, markdownlint, docs ba…
Apr 24, 2026
8976896
docs(design): sync phase3-install.md to use openclaw product names (f…
Apr 24, 2026
87083b4
feat!: v3.0.0 — remove destructive:boolean, drop policy v0.1 support
Apr 24, 2026
4d08d50
test: update test suite for v3.0 breaking changes
Apr 24, 2026
49b90b8
fix: harden keychain writes and align docs
Apr 24, 2026
5ed79d5
Add status-sync command family
Apr 24, 2026
4610c1d
fix: resolve pre-release issues ahead of v3.0 merge
Apr 24, 2026
1334f1e
chore: remove docs/superpowers planning drafts, add to .gitignore
Apr 24, 2026
55d9879
docs: update README for v3.0 — fix policy schema, rules engine, test …
Apr 24, 2026
91e422b
fix: remove extra blank lines in CHANGELOG to pass markdownlint
Apr 24, 2026
98e4993
fix(ci): update policy-schema-sync to v0.2, skip gracefully on 404
Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,21 @@ on:
branches: [main]

jobs:
docs-lint:
name: Markdown lint (changelog)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- run: npm ci
- run: npm run lint:md:changelog

test:
runs-on: ubuntu-latest
needs: docs-lint
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
Expand Down Expand Up @@ -75,3 +88,34 @@ jobs:
echo "FAIL: budget is 15000, got $BYTES"
exit 1
fi

policy-schema-sync:
name: Policy schema sync with skill repo
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- name: Fetch skill repo's mirrored schema
run: |
HTTP=$(curl -o /tmp/skill-policy.schema.json -w "%{http_code}" -fsSL --retry 3 \
https://raw.githubusercontent.com/OpenWonderLabs/openclaw-switchbot-skill/main/examples/policy.schema.json \
2>/dev/null || echo "000")
if [ "$HTTP" = "404" ] || [ "$HTTP" = "000" ]; then
echo "SKIP: skill repo schema not yet published (HTTP $HTTP). Skipping drift check."
exit 0
fi
if [ "$HTTP" != "200" ]; then
echo "WARN: unexpected HTTP $HTTP fetching skill schema. Skipping drift check."
exit 0
fi
echo "Fetched skill schema (HTTP $HTTP). Diffing against CLI v0.2 source of truth..."
if ! diff -u /tmp/skill-policy.schema.json src/policy/schema/v0.2.json; then
echo ""
echo "FAIL: policy schema drift detected."
echo " CLI source: src/policy/schema/v0.2.json"
echo " Skill copy: https://github.com/OpenWonderLabs/openclaw-switchbot-skill/blob/main/examples/policy.schema.json"
echo ""
echo "Sync the skill's examples/policy.schema.json from the CLI file and cut a matching skill release."
exit 1
fi
echo "OK: policy schema matches skill repo."
101 changes: 101 additions & 0 deletions .github/workflows/keychain-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Keychain OS Matrix

on:
push:
branches: [main]
paths:
- 'src/credentials/**'
- 'src/install/**'
- 'tests/credentials/**'
- 'tests/install/**'
pull_request:
branches: [main]
paths:
- 'src/credentials/**'
- 'src/install/**'
- 'tests/credentials/**'
- 'tests/install/**'
workflow_dispatch:

# Each job installs Node, builds, and runs the credential + install-step
# test suites against the real OS keychain backend. The unit tests (which
# mock spawn) pass on ubuntu-latest in the main CI; here we verify
# that the live system commands are available and callable.

jobs:
keychain-macos:
name: Keychain — macOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- run: npm ci
- run: npm run build

# Create and unlock a temporary keychain so the macOS backend can
# write entries without prompting the System Keychain.
- name: Set up temporary keychain
run: |
security create-keychain -p "" switchbot-ci.keychain
security set-keychain-settings -lut 3600 switchbot-ci.keychain
security unlock-keychain -p "" switchbot-ci.keychain
security list-keychains -d user -s switchbot-ci.keychain $(security list-keychains -d user | sed s/\"//g)
echo "SWITCHBOT_CI_KEYCHAIN=switchbot-ci.keychain" >> "$GITHUB_ENV"

- name: Run credential + install-step tests
run: npm test -- tests/credentials tests/install

- name: Delete temporary keychain
if: always()
run: |
security delete-keychain switchbot-ci.keychain || true

keychain-linux:
name: Keychain — Linux (libsecret)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm

- name: Install libsecret + D-Bus session tooling
run: |
sudo apt-get update -q
sudo apt-get install -y --no-install-recommends \
libsecret-tools \
gnome-keyring \
dbus-x11

- run: npm ci
- run: npm run build

# Start a D-Bus session and unlock gnome-keyring so secret-tool can
# store entries. The keyring is unlocked with an empty password.
- name: Run credential + install-step tests inside D-Bus session
run: |
eval "$(dbus-launch --sh-syntax)"
echo "" | gnome-keyring-daemon --daemonize --unlock --components=secrets
export DBUS_SESSION_BUS_ADDRESS
npm test -- tests/credentials tests/install

keychain-windows:
name: Keychain — Windows (Credential Manager)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- run: npm ci
- run: npm run build

# Windows Credential Manager is available to any logged-in user on
# GitHub-hosted Windows runners; no extra setup required.
- name: Run credential + install-step tests
run: npm test -- tests/credentials tests/install
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@ CLAUDE.md
2026-04-10-155920-command-messageinitcommand-message.txt
tmp/
smoke-v3/
switchbot-skill/
docs/superpowers/
7 changes: 7 additions & 0 deletions .markdownlint.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"default": true,
"MD013": false,
"MD024": {
"siblings_only": true
}
}
Loading
Loading