palmier 0.8.0 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +13 -0
- package/README.md +11 -11
- package/dist/agents/agent.d.ts +0 -4
- package/dist/agents/claude.js +1 -1
- package/dist/agents/codex.js +2 -2
- package/dist/agents/cursor.js +1 -1
- package/dist/agents/deepagents.js +1 -1
- package/dist/agents/gemini.js +3 -2
- package/dist/agents/goose.js +1 -1
- package/dist/agents/hermes.js +1 -1
- package/dist/agents/kiro.js +1 -1
- package/dist/agents/opencode.js +1 -1
- package/dist/agents/qoder.js +1 -1
- package/dist/agents/shared-prompt.d.ts +0 -3
- package/dist/agents/shared-prompt.js +0 -3
- package/dist/app-registry.d.ts +10 -0
- package/dist/app-registry.js +44 -0
- package/dist/commands/info.d.ts +0 -3
- package/dist/commands/info.js +0 -5
- package/dist/commands/init.d.ts +0 -3
- package/dist/commands/init.js +2 -11
- package/dist/commands/pair.d.ts +1 -4
- package/dist/commands/pair.js +1 -12
- package/dist/commands/restart.d.ts +0 -3
- package/dist/commands/restart.js +0 -3
- package/dist/commands/run.d.ts +1 -14
- package/dist/commands/run.js +18 -61
- package/dist/commands/serve.d.ts +0 -3
- package/dist/commands/serve.js +33 -27
- package/dist/config.d.ts +0 -8
- package/dist/config.js +0 -8
- package/dist/device-capabilities.d.ts +1 -1
- package/dist/event-queues.d.ts +6 -21
- package/dist/event-queues.js +6 -21
- package/dist/events.d.ts +0 -6
- package/dist/events.js +1 -9
- package/dist/index.js +0 -1
- package/dist/mcp-handler.js +1 -2
- package/dist/mcp-tools.d.ts +0 -3
- package/dist/mcp-tools.js +14 -18
- package/dist/nats-client.d.ts +0 -3
- package/dist/nats-client.js +1 -4
- package/dist/pending-requests.d.ts +4 -18
- package/dist/pending-requests.js +4 -18
- package/dist/platform/index.d.ts +1 -4
- package/dist/platform/index.js +1 -4
- package/dist/platform/linux.d.ts +3 -9
- package/dist/platform/linux.js +9 -20
- package/dist/platform/platform.d.ts +1 -4
- package/dist/platform/windows.d.ts +2 -5
- package/dist/platform/windows.js +19 -39
- package/dist/pwa/assets/index-B0F9mtid.css +1 -0
- package/dist/pwa/assets/index-SYs3mcdJ.js +120 -0
- package/dist/pwa/assets/{web-CF-N8Di6.js → web-C6lkQj9J.js} +1 -1
- package/dist/pwa/assets/{web-BpM3fNCn.js → web-Z1623me-.js} +1 -1
- package/dist/pwa/index.html +2 -2
- package/dist/pwa/service-worker.js +1 -1
- package/dist/rpc-handler.d.ts +0 -6
- package/dist/rpc-handler.js +19 -48
- package/dist/spawn-command.d.ts +10 -25
- package/dist/spawn-command.js +7 -15
- package/dist/task.d.ts +6 -64
- package/dist/task.js +7 -70
- package/dist/transports/http-transport.d.ts +0 -4
- package/dist/transports/http-transport.js +6 -28
- package/dist/transports/nats-transport.d.ts +0 -4
- package/dist/transports/nats-transport.js +3 -9
- package/dist/types.d.ts +3 -7
- package/dist/update-checker.d.ts +1 -4
- package/dist/update-checker.js +2 -5
- package/package.json +1 -1
- package/palmier-server/README.md +1 -1
- package/palmier-server/pwa/src/App.css +170 -20
- package/palmier-server/pwa/src/App.tsx +15 -1
- package/palmier-server/pwa/src/components/HostMenu.tsx +282 -473
- package/palmier-server/pwa/src/components/RunDetailView.tsx +3 -3
- package/palmier-server/pwa/src/components/SessionsView.tsx +57 -25
- package/palmier-server/pwa/src/components/SwipeToDeleteRow.tsx +160 -0
- package/palmier-server/pwa/src/components/TaskCard.tsx +12 -4
- package/palmier-server/pwa/src/components/TaskForm.tsx +230 -33
- package/palmier-server/pwa/src/components/TasksView.tsx +5 -0
- package/palmier-server/pwa/src/constants.ts +1 -1
- package/palmier-server/pwa/src/native/Device.ts +66 -0
- package/palmier-server/pwa/src/pages/Dashboard.tsx +11 -6
- package/palmier-server/pwa/src/pages/PairHost.tsx +18 -2
- package/palmier-server/pwa/src/types.ts +1 -1
- package/palmier-server/server/src/index.ts +7 -7
- package/palmier-server/server/src/routes/device.ts +4 -4
- package/palmier-server/spec.md +47 -6
- package/src/agents/agent.ts +0 -4
- package/src/agents/claude.ts +1 -1
- package/src/agents/codex.ts +2 -2
- package/src/agents/cursor.ts +1 -1
- package/src/agents/deepagents.ts +1 -1
- package/src/agents/gemini.ts +3 -2
- package/src/agents/goose.ts +1 -1
- package/src/agents/hermes.ts +1 -1
- package/src/agents/kiro.ts +1 -1
- package/src/agents/opencode.ts +1 -1
- package/src/agents/qoder.ts +1 -1
- package/src/agents/shared-prompt.ts +0 -3
- package/src/app-registry.ts +52 -0
- package/src/commands/info.ts +0 -5
- package/src/commands/init.ts +2 -11
- package/src/commands/pair.ts +1 -12
- package/src/commands/restart.ts +0 -3
- package/src/commands/run.ts +18 -65
- package/src/commands/serve.ts +31 -27
- package/src/config.ts +0 -8
- package/src/device-capabilities.ts +4 -3
- package/src/event-queues.ts +6 -21
- package/src/events.ts +1 -9
- package/src/index.ts +0 -1
- package/src/mcp-handler.ts +1 -2
- package/src/mcp-tools.ts +14 -20
- package/src/nats-client.ts +1 -4
- package/src/pending-requests.ts +4 -18
- package/src/platform/index.ts +1 -4
- package/src/platform/linux.ts +9 -20
- package/src/platform/platform.ts +1 -4
- package/src/platform/windows.ts +19 -40
- package/src/rpc-handler.ts +20 -48
- package/src/spawn-command.ts +11 -27
- package/src/task.ts +7 -70
- package/src/transports/http-transport.ts +6 -39
- package/src/transports/nats-transport.ts +3 -9
- package/src/types.ts +3 -10
- package/src/update-checker.ts +2 -5
- package/test/task-parsing.test.ts +2 -3
- package/test/windows-xml.test.ts +11 -12
- package/dist/pwa/assets/index-FP1Mipr6.js +0 -120
- package/dist/pwa/assets/index-bLTn8zBj.css +0 -1
|
@@ -736,6 +736,7 @@ body {
|
|
|
736
736
|
display: flex;
|
|
737
737
|
flex-direction: column;
|
|
738
738
|
gap: 10px;
|
|
739
|
+
padding-bottom: calc(56px + var(--space-lg) * 2 + env(safe-area-inset-bottom, 0px));
|
|
739
740
|
}
|
|
740
741
|
|
|
741
742
|
/* ===== Task Card ===== */
|
|
@@ -1792,25 +1793,16 @@ body {
|
|
|
1792
1793
|
z-index: 101;
|
|
1793
1794
|
display: flex;
|
|
1794
1795
|
flex-direction: column;
|
|
1796
|
+
overflow-y: auto;
|
|
1797
|
+
overscroll-behavior: contain;
|
|
1795
1798
|
animation: drawerSlideIn 0.25s ease;
|
|
1796
1799
|
}
|
|
1797
1800
|
|
|
1798
|
-
.drawer-header {
|
|
1799
|
-
display: flex;
|
|
1800
|
-
align-items: center;
|
|
1801
|
-
justify-content: space-between;
|
|
1802
|
-
padding: var(--space-md);
|
|
1803
|
-
border-bottom: 1px solid var(--color-border);
|
|
1804
|
-
}
|
|
1805
|
-
|
|
1806
|
-
.drawer-title {
|
|
1807
|
-
font-size: 1.125rem;
|
|
1808
|
-
font-weight: 800;
|
|
1809
|
-
color: var(--color-primary);
|
|
1810
|
-
letter-spacing: -0.04em;
|
|
1811
|
-
}
|
|
1812
|
-
|
|
1813
1801
|
.drawer-close-btn {
|
|
1802
|
+
position: absolute;
|
|
1803
|
+
top: 8px;
|
|
1804
|
+
right: 8px;
|
|
1805
|
+
z-index: 1;
|
|
1814
1806
|
display: flex;
|
|
1815
1807
|
align-items: center;
|
|
1816
1808
|
justify-content: center;
|
|
@@ -1846,6 +1838,18 @@ body {
|
|
|
1846
1838
|
margin-bottom: var(--space-sm);
|
|
1847
1839
|
}
|
|
1848
1840
|
|
|
1841
|
+
.drawer-toggle-group {
|
|
1842
|
+
display: flex;
|
|
1843
|
+
flex-direction: column;
|
|
1844
|
+
gap: var(--space-sm);
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
.drawer-toggle-group-divided {
|
|
1848
|
+
border-top: 1px solid var(--color-border);
|
|
1849
|
+
padding-top: var(--space-sm);
|
|
1850
|
+
margin-top: var(--space-xs);
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1849
1853
|
.drawer-toggle {
|
|
1850
1854
|
display: flex;
|
|
1851
1855
|
align-items: center;
|
|
@@ -1960,17 +1964,42 @@ body {
|
|
|
1960
1964
|
|
|
1961
1965
|
/* ===== Tab bar ===== */
|
|
1962
1966
|
|
|
1963
|
-
.
|
|
1964
|
-
display: flex;
|
|
1965
|
-
align-items: center;
|
|
1966
|
-
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
|
|
1967
|
-
border-bottom: 1px solid var(--color-border);
|
|
1967
|
+
.app-header {
|
|
1968
1968
|
position: sticky;
|
|
1969
1969
|
top: 0;
|
|
1970
1970
|
z-index: 10;
|
|
1971
|
+
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
|
|
1972
|
+
border-bottom: 1px solid var(--color-border);
|
|
1971
1973
|
backdrop-filter: blur(8px);
|
|
1972
1974
|
}
|
|
1973
1975
|
|
|
1976
|
+
.app-title-bar {
|
|
1977
|
+
position: relative;
|
|
1978
|
+
display: flex;
|
|
1979
|
+
align-items: center;
|
|
1980
|
+
justify-content: center;
|
|
1981
|
+
padding: 8px 0;
|
|
1982
|
+
}
|
|
1983
|
+
|
|
1984
|
+
.app-title-bar .hamburger-btn {
|
|
1985
|
+
position: absolute;
|
|
1986
|
+
left: 4px;
|
|
1987
|
+
top: 50%;
|
|
1988
|
+
transform: translateY(-50%);
|
|
1989
|
+
}
|
|
1990
|
+
|
|
1991
|
+
.app-title {
|
|
1992
|
+
margin: 0;
|
|
1993
|
+
font-size: 1rem;
|
|
1994
|
+
font-weight: 600;
|
|
1995
|
+
color: var(--color-text);
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
.tab-bar {
|
|
1999
|
+
display: flex;
|
|
2000
|
+
align-items: center;
|
|
2001
|
+
}
|
|
2002
|
+
|
|
1974
2003
|
.tab-btn {
|
|
1975
2004
|
flex: 1;
|
|
1976
2005
|
display: flex;
|
|
@@ -2612,6 +2641,7 @@ body {
|
|
|
2612
2641
|
display: flex;
|
|
2613
2642
|
flex-direction: column;
|
|
2614
2643
|
overflow-y: auto;
|
|
2644
|
+
overscroll-behavior: contain;
|
|
2615
2645
|
animation: none;
|
|
2616
2646
|
}
|
|
2617
2647
|
|
|
@@ -2624,4 +2654,124 @@ body {
|
|
|
2624
2654
|
.dashboard-main {
|
|
2625
2655
|
padding: var(--space-lg);
|
|
2626
2656
|
}
|
|
2657
|
+
|
|
2658
|
+
.fab {
|
|
2659
|
+
right: max(var(--space-lg), calc((100vw - 1080px) / 2));
|
|
2660
|
+
}
|
|
2661
|
+
}
|
|
2662
|
+
|
|
2663
|
+
/* ===== Swipe-to-delete row ===== */
|
|
2664
|
+
|
|
2665
|
+
.swipe-row {
|
|
2666
|
+
position: relative;
|
|
2667
|
+
overflow: hidden;
|
|
2668
|
+
touch-action: pan-y; /* let vertical scroll through; capture horizontal ourselves */
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2671
|
+
.swipe-row-action {
|
|
2672
|
+
position: absolute;
|
|
2673
|
+
top: 0;
|
|
2674
|
+
right: 0;
|
|
2675
|
+
bottom: 0;
|
|
2676
|
+
display: flex;
|
|
2677
|
+
align-items: center;
|
|
2678
|
+
justify-content: center;
|
|
2679
|
+
background: var(--color-error, #dc2626);
|
|
2680
|
+
color: #fff;
|
|
2681
|
+
border: none;
|
|
2682
|
+
font-size: 0.9375rem;
|
|
2683
|
+
font-weight: 600;
|
|
2684
|
+
cursor: pointer;
|
|
2685
|
+
padding: 0;
|
|
2686
|
+
}
|
|
2687
|
+
|
|
2688
|
+
.swipe-row-action:focus-visible {
|
|
2689
|
+
outline: 2px solid var(--color-accent, #2E5CE5);
|
|
2690
|
+
outline-offset: -4px;
|
|
2691
|
+
}
|
|
2692
|
+
|
|
2693
|
+
.swipe-row-content {
|
|
2694
|
+
position: relative;
|
|
2695
|
+
background: var(--color-surface);
|
|
2696
|
+
transition: transform 0.2s cubic-bezier(0.22, 1, 0.36, 1);
|
|
2697
|
+
will-change: transform;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
/* During an active drag, skip the transition so the row tracks the finger 1:1.
|
|
2701
|
+
On release the class is removed and the snap animates. */
|
|
2702
|
+
.swipe-row-content-dragging {
|
|
2703
|
+
transition: none;
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
.app-filter-help {
|
|
2707
|
+
margin-top: var(--space-xs);
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
.app-combobox {
|
|
2711
|
+
position: relative;
|
|
2712
|
+
}
|
|
2713
|
+
|
|
2714
|
+
.app-combobox-list {
|
|
2715
|
+
position: absolute;
|
|
2716
|
+
top: calc(100% + 2px);
|
|
2717
|
+
left: 0;
|
|
2718
|
+
right: 0;
|
|
2719
|
+
max-height: 280px;
|
|
2720
|
+
overflow-y: auto;
|
|
2721
|
+
overscroll-behavior: contain;
|
|
2722
|
+
background: var(--color-surface);
|
|
2723
|
+
border: 1px solid var(--color-border);
|
|
2724
|
+
border-radius: var(--radius-md);
|
|
2725
|
+
box-shadow: var(--shadow-md);
|
|
2726
|
+
list-style: none;
|
|
2727
|
+
margin: 0;
|
|
2728
|
+
padding: var(--space-xs) 0;
|
|
2729
|
+
z-index: 20;
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2732
|
+
.app-combobox-row {
|
|
2733
|
+
display: flex;
|
|
2734
|
+
align-items: center;
|
|
2735
|
+
gap: var(--space-md);
|
|
2736
|
+
padding: 8px var(--space-md);
|
|
2737
|
+
cursor: pointer;
|
|
2738
|
+
user-select: none;
|
|
2739
|
+
}
|
|
2740
|
+
|
|
2741
|
+
.app-combobox-row:hover {
|
|
2742
|
+
background: var(--color-hover, rgba(0, 0, 0, 0.04));
|
|
2743
|
+
}
|
|
2744
|
+
|
|
2745
|
+
.app-combobox-icon {
|
|
2746
|
+
width: 28px;
|
|
2747
|
+
height: 28px;
|
|
2748
|
+
border-radius: 6px;
|
|
2749
|
+
flex-shrink: 0;
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
.app-combobox-icon-placeholder {
|
|
2753
|
+
background: var(--color-border);
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
.app-combobox-labels {
|
|
2757
|
+
display: flex;
|
|
2758
|
+
flex-direction: column;
|
|
2759
|
+
min-width: 0;
|
|
2760
|
+
flex: 1;
|
|
2761
|
+
}
|
|
2762
|
+
|
|
2763
|
+
.app-combobox-name {
|
|
2764
|
+
font-size: 0.9375rem;
|
|
2765
|
+
font-weight: 500;
|
|
2766
|
+
white-space: nowrap;
|
|
2767
|
+
overflow: hidden;
|
|
2768
|
+
text-overflow: ellipsis;
|
|
2769
|
+
}
|
|
2770
|
+
|
|
2771
|
+
.app-combobox-pkg {
|
|
2772
|
+
font-size: 0.75rem;
|
|
2773
|
+
color: var(--color-muted);
|
|
2774
|
+
white-space: nowrap;
|
|
2775
|
+
overflow: hidden;
|
|
2776
|
+
text-overflow: ellipsis;
|
|
2627
2777
|
}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { Routes, Route, useNavigate } from "react-router-dom";
|
|
2
3
|
import { HostStoreProvider } from "./contexts/HostStoreContext";
|
|
3
4
|
import { HostConnectionProvider } from "./contexts/HostConnectionContext";
|
|
5
|
+
import { Device } from "./native/Device";
|
|
4
6
|
import Dashboard from "./pages/Dashboard";
|
|
5
7
|
import PairHost from "./pages/PairHost";
|
|
6
8
|
|
|
9
|
+
/** Routes FCM notification taps (fired by DevicePlugin) into the client-side router. */
|
|
10
|
+
function DeepLinkRouter() {
|
|
11
|
+
const navigate = useNavigate();
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (!Device) return;
|
|
14
|
+
const handle = Device.addListener("deepLink", ({ path }) => navigate(path));
|
|
15
|
+
return () => { handle.then((h) => h.remove()); };
|
|
16
|
+
}, [navigate]);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
|
|
7
20
|
export default function App() {
|
|
8
21
|
return (
|
|
9
22
|
<HostStoreProvider>
|
|
10
23
|
<HostConnectionProvider>
|
|
24
|
+
<DeepLinkRouter />
|
|
11
25
|
<Routes>
|
|
12
26
|
<Route path="/" element={<Dashboard />} />
|
|
13
27
|
<Route path="/tasks" element={<Dashboard />} />
|