@parley-im/parley 0.2.7 → 0.2.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parley-im/parley",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "Send someone a link. They talk to a read-only Claude or Codex in your project, on your computer, and you get everything they said.",
5
5
  "keywords": [
6
6
  "claude",
package/web/app.css CHANGED
@@ -1,9 +1,9 @@
1
1
  /* parley: one stylesheet for the guest chat, your session view, your
2
- control panel and parley's site. Deep, murky ocean green on paper, for the
2
+ control panel and parley's site. Dark, with lilac for the accents, for the
3
3
  people who use Claude Code and Codex: Instrument Sans for everything
4
4
  people read, JetBrains Mono for the wordmark, labels, files and numbers.
5
- The agent's words are marked with a dot, as in Claude Code, and while it
6
- writes, P goes by in Morse. The fonts are served from here, never from a
5
+ The agent's words are marked with a dot, as in Claude Code, and three
6
+ dots pulse while it writes. The fonts are served from here, never from a
7
7
  font service, so guest pages only ever talk to parley. */
8
8
 
9
9
  @font-face { font-family: "Instrument Sans"; src: url("/static/fonts/instrument-sans.woff2") format("woff2"); font-weight: 400 700; font-style: normal; font-display: swap; }
@@ -11,55 +11,30 @@
11
11
  @font-face { font-family: "JetBrains Mono"; src: url("/static/fonts/jetbrains-mono.woff2") format("woff2"); font-weight: 100 800; font-style: normal; font-display: swap; }
12
12
 
13
13
  :root {
14
- --bg: #f2f4f1; /* paper, a little sea-washed */
15
- --panel: #ffffff;
16
- --subtle: #eaeeea;
17
- --hover: #e1e7e3;
18
- --line: #dde4e0;
19
- --line-strong: #c6d0cb;
20
- --text: #0f1d1a; /* abyss */
21
- --muted: #55645e;
22
- --faint: #8c9893;
23
- --accent: #22574c; /* deep murky green, for links and marks */
24
- --accent-fill: #22574c; /* buttons */
25
- --accent-soft: #e1eae5;
26
- --accent-ink: #ffffff;
27
- --tile: #22574c; /* the mark's tile */
28
- --guest: #e1eae5; /* your own messages */
29
- --guest-ink: #183a32;
30
- --ok: #2f7d5b;
31
- --warn: #a8741c;
32
- --danger: #c4383a;
33
- --shadow: 0 1px 2px rgba(15, 29, 26, 0.05), 0 12px 32px -16px rgba(15, 29, 26, 0.24);
14
+ --bg: #0c0c0d;
15
+ --panel: #131315;
16
+ --subtle: #19191c;
17
+ --hover: #212125;
18
+ --line: #26262b;
19
+ --line-strong: #36363c;
20
+ --text: #ececef;
21
+ --muted: #9b9ba4;
22
+ --faint: #66666f;
23
+ --accent: #9d92ff; /* lilac */
24
+ --accent-fill: #9d92ff; /* buttons, with dark text */
25
+ --accent-soft: #221f3d;
26
+ --accent-ink: #0c0c0d;
27
+ --tile: #9d92ff; /* the mark's tile */
28
+ --guest: #221f3d; /* your own messages */
29
+ --guest-ink: #e6e2ff;
30
+ --ok: #3ccf7a;
31
+ --warn: #e3a948;
32
+ --danger: #ff6b63;
33
+ --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 12px 32px -16px rgba(0, 0, 0, 0.8);
34
34
  --sans: "Instrument Sans", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
35
35
  --display: var(--sans);
36
36
  --mono: "JetBrains Mono", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
37
- color-scheme: light;
38
- }
39
- @media (prefers-color-scheme: dark) {
40
- :root:not([data-theme="light"]) {
41
- --bg: #0b1513; /* the deep */
42
- --panel: #111c19;
43
- --subtle: #16231f;
44
- --hover: #1d2b27;
45
- --line: #1f2d29;
46
- --line-strong: #30423c;
47
- --text: #e3ebe7;
48
- --muted: #9baea6;
49
- --faint: #62726b;
50
- --accent: #86c2ae; /* sea glass, through murky water */
51
- --accent-fill: #2e6c5f;
52
- --accent-soft: #19302a;
53
- --accent-ink: #ffffff;
54
- --tile: #2e6c5f;
55
- --guest: #1b2e28;
56
- --guest-ink: #dbe9e3;
57
- --ok: #5fc296;
58
- --warn: #dba54a;
59
- --danger: #ff6f6b;
60
- --shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 12px 32px -16px rgba(0, 0, 0, 0.7);
61
- color-scheme: dark;
62
- }
37
+ color-scheme: dark;
63
38
  }
64
39
 
65
40
  * { box-sizing: border-box; }
@@ -86,7 +61,7 @@ code, kbd, pre { font-family: var(--mono); }
86
61
  .mark { display: inline-block; width: 24px; height: 24px; flex: none; }
87
62
  .mark svg { display: block; width: 100%; height: 100%; }
88
63
  .mark .tile { fill: var(--tile); }
89
- .mark .glyph { fill: #ffffff; }
64
+ .mark .glyph { fill: var(--accent-ink); }
90
65
  .wordmark { font-family: var(--mono); font-weight: 700; letter-spacing: -0.04em; }
91
66
 
92
67
  .topbar {
@@ -123,7 +98,7 @@ code, kbd, pre { font-family: var(--mono); }
123
98
  .btn:hover { background: var(--subtle); }
124
99
  .btn:disabled { opacity: 0.5; cursor: default; }
125
100
  .btn.primary { background: var(--accent-fill); color: var(--accent-ink); border-color: var(--accent-fill); }
126
- .btn.primary:hover { opacity: 0.88; }
101
+ .btn.primary:hover { filter: brightness(1.18); }
127
102
  .btn.danger { color: var(--danger); }
128
103
  .btn.confirm { background: var(--danger); color: #fff; border-color: var(--danger); }
129
104
  .btn.ghost { border-color: transparent; background: transparent; color: var(--muted); }
@@ -247,14 +222,12 @@ body:has(> .app) { overflow: hidden; overscroll-behavior: none; }
247
222
  .body th { background: var(--subtle); font-weight: 600; white-space: nowrap; }
248
223
  .body tr:last-child td { border-bottom: 0; }
249
224
 
250
- /* Writing: P in Morse (dot, dash, dash, dot), passing by. */
251
- .thinking { display: inline-flex; align-items: center; gap: 4px; height: 26px; }
252
- .thinking span { width: 7px; height: 7px; border-radius: 4px; background: var(--accent); opacity: 0.25; animation: morse 1.6s ease-in-out infinite; }
253
- .thinking span:nth-child(2), .thinking span:nth-child(3) { width: 17px; }
225
+ /* Writing: three dots, pulsing in turn. */
226
+ .thinking { display: inline-flex; align-items: center; gap: 5px; height: 26px; }
227
+ .thinking span { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); opacity: 0.3; animation: pulse-dot 1.2s ease-in-out infinite; }
254
228
  .thinking span:nth-child(2) { animation-delay: 0.16s; }
255
229
  .thinking span:nth-child(3) { animation-delay: 0.32s; }
256
- .thinking span:nth-child(4) { animation-delay: 0.48s; }
257
- @keyframes morse { 0%, 70%, 100% { opacity: 0.25; } 30% { opacity: 1; } }
230
+ @keyframes pulse-dot { 0%, 70%, 100% { opacity: 0.3; transform: none; } 30% { opacity: 1; transform: translateY(-2px); } }
258
231
  @keyframes blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
259
232
  .cursor::after { content: ""; display: inline-block; width: 7px; height: 1.05em; background: var(--accent); border-radius: 1px; margin-left: 3px; vertical-align: -3px; animation: blink 1.06s steps(1) infinite; }
260
233
  @media (prefers-reduced-motion: reduce) { .thinking span, .cursor::after, .dot.busy { animation: none; } .thinking span { opacity: 0.7; } }
@@ -291,7 +264,7 @@ textarea::placeholder { color: var(--faint); }
291
264
  .icon-btn:hover { background: var(--subtle); color: var(--text); }
292
265
  .icon-btn svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
293
266
  .send { background: var(--accent-fill); color: var(--accent-ink); border-radius: 11px; }
294
- .send:hover { background: var(--accent-fill); color: var(--accent-ink); opacity: 0.9; }
267
+ .send:hover { background: var(--accent-fill); color: var(--accent-ink); filter: brightness(1.18); }
295
268
  .send:disabled { background: var(--subtle); color: var(--faint); cursor: default; opacity: 1; }
296
269
  .attachments { display: flex; gap: 8px; padding: 10px 10px 0; flex-wrap: wrap; }
297
270
  .thumb { position: relative; }
package/web/chat.html CHANGED
@@ -5,8 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content">
6
6
  <meta name="robots" content="noindex, nofollow">
7
7
  <meta name="referrer" content="no-referrer">
8
- <meta name="theme-color" content="#0b1513" media="(prefers-color-scheme: dark)">
9
- <meta name="theme-color" content="#f2f4f1" media="(prefers-color-scheme: light)">
8
+ <meta name="theme-color" content="#0c0c0d">
10
9
  <meta property="og:title" content="{{PREVIEW_TITLE}}">
11
10
  <meta property="og:description" content="{{PREVIEW_TEXT}}">
12
11
  <meta property="og:site_name" content="parley">
package/web/chat.js CHANGED
@@ -222,7 +222,7 @@
222
222
  if (live.text.trim()) {
223
223
  live.bodyEl.innerHTML = window.renderMarkdown(live.text);
224
224
  live.bodyEl.lastElementChild?.classList.add("cursor");
225
- } else live.bodyEl.innerHTML = `<span class="thinking" role="img" aria-label="Writing"><span></span><span></span><span></span><span></span></span>`;
225
+ } else live.bodyEl.innerHTML = `<span class="thinking" role="img" aria-label="Writing"><span></span><span></span><span></span></span>`;
226
226
  // The last few things it looked at, newest highlighted.
227
227
  live.stepsEl.textContent = "";
228
228
  live.steps.slice(-4).forEach((line, i, shown) => live.stepsEl.append(el("li", { className: i === shown.length - 1 ? "now" : "", textContent: line })));
package/web/ended.html CHANGED
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="#0c0c0d">
6
7
  <meta name="robots" content="noindex, nofollow">
7
8
  <title>This parley has ended</title>
8
9
  <link rel="icon" href="/static/icon.svg?v=5" type="image/svg+xml">
package/web/home.js CHANGED
@@ -55,7 +55,7 @@
55
55
  // Working: the agent looks something up in the project, then writes.
56
56
  const node = el("li", "msg agent");
57
57
  const body = el("div", "body");
58
- body.innerHTML = `<span class="thinking" role="img" aria-label="Writing"><span></span><span></span><span></span><span></span></span>`;
58
+ body.innerHTML = `<span class="thinking" role="img" aria-label="Writing"><span></span><span></span><span></span></span>`;
59
59
  const steps = el("ul", "steps");
60
60
  node.append(body, steps);
61
61
  list.append(node);
package/web/icon-180.png CHANGED
Binary file
package/web/icon.png CHANGED
Binary file
package/web/icon.svg CHANGED
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#22574C"/><rect x="19.5" y="16" width="7" height="32" rx="1.5" fill="#FFFFFF"/><path fill="#FFFFFF" fill-rule="evenodd" d="M44.5 25.5A10 10 0 1 1 24.5 25.5A10 10 0 1 1 44.5 25.5ZM38.5 25.5A4 4 0 1 0 30.5 25.5A4 4 0 1 0 38.5 25.5Z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#9D92FF"/><rect x="19.5" y="16" width="7" height="32" rx="1.5" fill="#0C0C0D"/><path fill="#0C0C0D" fill-rule="evenodd" d="M44.5 25.5A10 10 0 1 1 24.5 25.5A10 10 0 1 1 44.5 25.5ZM38.5 25.5A4 4 0 1 0 30.5 25.5A4 4 0 1 0 38.5 25.5Z"/></svg>
package/web/missing.html CHANGED
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="#0c0c0d">
6
7
  <meta name="robots" content="noindex, nofollow">
7
8
  <title>Link not found</title>
8
9
  <link rel="icon" href="/static/icon.svg?v=5" type="image/svg+xml">
package/web/panel.html CHANGED
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="#0c0c0d">
6
7
  <title>Control panel · parley</title>
7
8
  <link rel="icon" href="/static/icon.svg?v=5" type="image/svg+xml">
8
9
  <link rel="stylesheet" href="/static/app.css">