@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 +1 -1
- package/web/app.css +31 -58
- package/web/chat.html +1 -2
- package/web/chat.js +1 -1
- package/web/ended.html +1 -0
- package/web/home.js +1 -1
- package/web/icon-180.png +0 -0
- package/web/icon.png +0 -0
- package/web/icon.svg +1 -1
- package/web/missing.html +1 -0
- package/web/panel.html +1 -0
package/package.json
CHANGED
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.
|
|
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
|
|
6
|
-
|
|
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: #
|
|
15
|
-
--panel: #
|
|
16
|
-
--subtle: #
|
|
17
|
-
--hover: #
|
|
18
|
-
--line: #
|
|
19
|
-
--line-strong: #
|
|
20
|
-
--text: #
|
|
21
|
-
--muted: #
|
|
22
|
-
--faint: #
|
|
23
|
-
--accent: #
|
|
24
|
-
--accent-fill: #
|
|
25
|
-
--accent-soft: #
|
|
26
|
-
--accent-ink: #
|
|
27
|
-
--tile: #
|
|
28
|
-
--guest: #
|
|
29
|
-
--guest-ink: #
|
|
30
|
-
--ok: #
|
|
31
|
-
--warn: #
|
|
32
|
-
--danger: #
|
|
33
|
-
--shadow: 0 1px 2px rgba(
|
|
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:
|
|
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:
|
|
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 {
|
|
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:
|
|
251
|
-
.thinking { display: inline-flex; align-items: center; gap:
|
|
252
|
-
.thinking span { width: 7px; height: 7px; border-radius:
|
|
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
|
-
|
|
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);
|
|
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="#
|
|
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
|
|
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
|
|
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="#
|
|
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">
|