Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,19 @@ jobs:
else
echo "::warning::pi sandbox unavailable on this runner; tests/pi-sandbox.test.js integration cases will skip"
fi
# Live layout tests (phone-width checks, Perch @412x730 …) drive a private
# headless Chrome (tests/fixtures/headless-chrome.mjs), found under
# ~/.cache/ms-playwright. Pinned: playwright 1.63.0 = Chrome Headless
# Shell 153.0.8010.12 (build 1243). --with-deps installs its system libs.
- name: Headless Chrome for the live layout tests
run: npx --yes playwright@1.63.0 install --with-deps chromium-headless-shell
# GITHUB_ACTIONS=true applies tests/ci-exclusions.json (empty today);
# host-bound tests self-skip via in-file capability guards instead.
# CROW_REQUIRE_TEST_CHROME: a browser that fails to start fails the live
# tests instead of letting them skip silently.
- run: npm test
env:
CROW_REQUIRE_TEST_CHROME: "1"

static-checks:
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion bundles/data-dashboard/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "data-dashboard",
"name": "Data Dashboard",
"version": "1.0.2",
"version": "1.0.3",
"description": "Explore SQLite databases, run queries, build charts, create case studies, and publish to your blog",
"type": "bundle",
"author": "Crow",
Expand Down
2 changes: 1 addition & 1 deletion bundles/data-dashboard/panel/data-dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export default {
{ id: "cases", label: "Case Studies", icon: "📄" },
];

const tabNav = `<div style="display:flex;gap:0;border-bottom:1px solid var(--crow-border);margin-bottom:1rem">
const tabNav = `<div style="display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--crow-border);margin-bottom:1rem">
${tabs.map(t => {
const active = t.id === tab;
return `<a href="/dashboard/data-dashboard?tab=${t.id}${backendId ? `&backend_id=${backendId}` : ""}"
Expand Down
2 changes: 1 addition & 1 deletion bundles/matrix-dendrite/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "matrix-dendrite",
"name": "Matrix (Dendrite)",
"version": "1.0.2",
"version": "1.0.3",
"description": "Matrix homeserver on Dendrite — federated real-time chat with end-to-end encryption. Lighter than Synapse, monolithic binary. Joins the Matrix federation graph via HTTPS federation (:8448 or .well-known delegation).",
"type": "bundle",
"author": "Crow",
Expand Down
3 changes: 2 additions & 1 deletion bundles/matrix-dendrite/panel/matrix-dendrite.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,9 @@ function styles() {
letter-spacing: 0.05em; margin: 0 0 0.7rem; }
.mx-card { background: var(--crow-bg-elevated); border: 1px solid var(--crow-border);
border-radius: 10px; padding: 1rem; }
.mx-row { display: flex; justify-content: space-between; padding: .25rem 0; font-size: .9rem; color: var(--crow-text-primary); }
.mx-row { display: flex; flex-wrap: wrap; column-gap: .75rem; justify-content: space-between; padding: .25rem 0; font-size: .9rem; color: var(--crow-text-primary); }
.mx-row b { color: var(--crow-text-muted); font-weight: 500; min-width: 160px; }
.mx-row span { min-width: 0; overflow-wrap: anywhere; }
.mx-fed-badge { display: inline-block; font-size: .8rem; font-weight: 600; padding: .3rem .6rem;
border-radius: 6px; letter-spacing: .05em; margin-bottom: .7rem; }
.mx-fed-ok { background: rgba(34,197,94,.15); color: #22c55e; }
Expand Down
2 changes: 1 addition & 1 deletion bundles/media/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "media",
"name": "Media Hub",
"version": "1.1.3",
"version": "1.1.4",
"description": "News aggregation, RSS feeds, YouTube channels, podcasts, a daily spoken briefing read by the local voice, playlists, smart folders, email digests",
"type": "mcp-server",
"author": "Crow",
Expand Down
2 changes: 1 addition & 1 deletion bundles/media/panel/media.js
Original file line number Diff line number Diff line change
Expand Up @@ -594,7 +594,7 @@ export default {
<select name="source_id"><option value="">All sources</option>${sourceOptions}</select>
<button type="submit" class="btn btn-sm btn-primary">Filter</button>
</form>
<div style="display:flex;gap:0.35rem;margin-bottom:1rem">
<div style="display:flex;flex-wrap:wrap;gap:0.35rem;margin-bottom:1rem">
<a href="/dashboard/media?tab=${tab}" class="filter-btn ${!filterUnread && !filterStarred ? "active" : ""}">All</a>
<a href="/dashboard/media${buildQs(currentParams, { unread_only: filterUnread ? "" : "true", starred_only: "" })}" class="filter-btn ${filterUnread ? "active" : ""}">Unread</a>
<a href="/dashboard/media${buildQs(currentParams, { starred_only: filterStarred ? "" : "true", unread_only: "" })}" class="filter-btn ${filterStarred ? "active" : ""}">Starred</a>
Expand Down
2 changes: 1 addition & 1 deletion bundles/writefreely/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "writefreely",
"name": "WriteFreely",
"version": "1.0.1",
"version": "1.0.2",
"description": "Lightweight, minimalist ActivityPub blogging platform. Single-binary, single-SQLite-file footprint — ideal for long-form writing federated to the fediverse. Complements GoToSocial (microblog) and Crow's own blog.",
"type": "bundle",
"author": "Crow",
Expand Down
3 changes: 2 additions & 1 deletion bundles/writefreely/panel/writefreely.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,9 @@ function styles() {
letter-spacing: 0.05em; margin: 0 0 0.7rem; }
.wf-card { background: var(--crow-bg-elevated); border: 1px solid var(--crow-border);
border-radius: 10px; padding: 1rem; }
.wf-row { display: flex; justify-content: space-between; padding: .25rem 0; font-size: .9rem; color: var(--crow-text-primary); }
.wf-row { display: flex; flex-wrap: wrap; column-gap: .75rem; justify-content: space-between; padding: .25rem 0; font-size: .9rem; color: var(--crow-text-primary); }
.wf-row b { color: var(--crow-text-muted); font-weight: 500; min-width: 140px; }
.wf-row span { min-width: 0; overflow-wrap: anywhere; }
.wf-coll-list { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .6rem; }
.wf-coll-chip { display: flex; align-items: center; gap: .5rem; background: var(--crow-bg);
border: 1px solid var(--crow-border); border-radius: 6px; padding: .3rem .6rem;
Expand Down
8 changes: 4 additions & 4 deletions registry/add-ons.json
Original file line number Diff line number Diff line change
Expand Up @@ -1008,7 +1008,7 @@
{
"id": "data-dashboard",
"name": "Data Dashboard",
"version": "1.0.2",
"version": "1.0.3",
"description": "Explore SQLite databases, run queries, build charts, create case studies, and publish to your blog",
"type": "bundle",
"author": "Crow",
Expand Down Expand Up @@ -3207,7 +3207,7 @@
{
"id": "matrix-dendrite",
"name": "Matrix (Dendrite)",
"version": "1.0.2",
"version": "1.0.3",
"description": "Matrix homeserver on Dendrite — federated real-time chat with end-to-end encryption. Lighter than Synapse, monolithic binary. Joins the Matrix federation graph via HTTPS federation (:8448 or .well-known delegation).",
"type": "bundle",
"author": "Crow",
Expand Down Expand Up @@ -3310,7 +3310,7 @@
{
"id": "media",
"name": "Media Hub",
"version": "1.1.3",
"version": "1.1.4",
"description": "News aggregation, RSS feeds, YouTube channels, podcasts, a daily spoken briefing read by the local voice, playlists, smart folders, email digests",
"type": "mcp-server",
"author": "Crow",
Expand Down Expand Up @@ -6597,7 +6597,7 @@
{
"id": "writefreely",
"name": "WriteFreely",
"version": "1.0.1",
"version": "1.0.2",
"description": "Lightweight, minimalist ActivityPub blogging platform. Single-binary, single-SQLite-file footprint — ideal for long-form writing federated to the fediverse. Complements GoToSocial (microblog) and Crow's own blog.",
"type": "bundle",
"author": "Crow",
Expand Down
Loading
Loading