privateboard 0.1.0
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/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/cli.js +10502 -0
- package/dist/cli.js.map +1 -0
- package/package.json +63 -0
- package/public/adjourn-overlay.css +253 -0
- package/public/agent-overlay.css +444 -0
- package/public/agent-overlay.js +604 -0
- package/public/agent-profile.css +3230 -0
- package/public/agent-profile.js +3329 -0
- package/public/app.js +6629 -0
- package/public/auto-hide-scroll.js +90 -0
- package/public/avatar-skill.js +793 -0
- package/public/avatars/chair.svg +98 -0
- package/public/avatars/first-principles.svg +122 -0
- package/public/avatars/long-horizon.svg +147 -0
- package/public/avatars/open_ai.png +0 -0
- package/public/avatars/phenomenologist.svg +130 -0
- package/public/avatars/socrates.svg +187 -0
- package/public/avatars/user-empathy.svg +117 -0
- package/public/avatars/value-investor.svg +117 -0
- package/public/favicon.svg +10 -0
- package/public/fonts/agent-Italic.woff2 +0 -0
- package/public/fonts/human-sans.woff2 +0 -0
- package/public/icons.css +103 -0
- package/public/models-cache.js +57 -0
- package/public/new-agent.css +1359 -0
- package/public/new-agent.js +675 -0
- package/public/onboarding.css +628 -0
- package/public/onboarding.js +782 -0
- package/public/prototype-dashboard.html +7596 -0
- package/public/report/spines/a16z-thesis.css +1055 -0
- package/public/report/spines/anthropic-essay.css +556 -0
- package/public/report/spines/boardroom-dark.css +1082 -0
- package/public/report/spines/gartner-note.css +538 -0
- package/public/report/spines/mckinsey-deck.css +523 -0
- package/public/report/spines/openai-paper.css +516 -0
- package/public/report.html +1417 -0
- package/public/room-settings.css +895 -0
- package/public/room-settings.js +1039 -0
- package/public/themes.css +338 -0
- package/public/user-settings.css +1236 -0
- package/public/user-settings.js +1291 -0
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "privateboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "PrivateBoard · your private board meeting, on call. Local-first, multi-agent thinking amplifier.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"privateboard": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"public",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "tsup --watch --onSuccess \"node dist/cli.js --no-open\"",
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"start": "node dist/cli.js",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/kaysaith1900/privateboard.git"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://github.com/kaysaith1900/privateboard#readme",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/kaysaith1900/privateboard/issues"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@ai-sdk/anthropic": "^1.2.5",
|
|
36
|
+
"@ai-sdk/google": "^1.2.10",
|
|
37
|
+
"@ai-sdk/openai": "^1.3.13",
|
|
38
|
+
"@ai-sdk/openai-compatible": "^0.2.4",
|
|
39
|
+
"@ai-sdk/xai": "^1.2.10",
|
|
40
|
+
"@hono/node-server": "^1.13.7",
|
|
41
|
+
"ai": "^4.3.16",
|
|
42
|
+
"better-sqlite3": "^11.7.0",
|
|
43
|
+
"commander": "^12.1.0",
|
|
44
|
+
"hono": "^4.6.14",
|
|
45
|
+
"open": "^10.1.0",
|
|
46
|
+
"yaml": "^2.8.4"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
50
|
+
"@types/node": "^22.10.0",
|
|
51
|
+
"tsup": "^8.3.5",
|
|
52
|
+
"typescript": "^5.7.2",
|
|
53
|
+
"vitest": "^2.1.8"
|
|
54
|
+
},
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"keywords": [
|
|
57
|
+
"ai",
|
|
58
|
+
"multi-agent",
|
|
59
|
+
"local-first",
|
|
60
|
+
"thinking",
|
|
61
|
+
"boardroom"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════
|
|
2
|
+
ADJOURN OVERLAY · brief-format gallery picker
|
|
3
|
+
═══════════════════════════════════════════
|
|
4
|
+
The user picks a report style at adjourn-time. Each style ships
|
|
5
|
+
an inline-SVG preview thumb that hints at the document layout —
|
|
6
|
+
stacked exec-bullets, magic-quadrant chart, narrative wall of
|
|
7
|
+
prose, sectioned research note, or chunky 8-bit pixel character.
|
|
8
|
+
The "End without filing a brief" opt-out is deliberately styled
|
|
9
|
+
as a quiet secondary text-link below the gallery so it never
|
|
10
|
+
competes with the visual cards.
|
|
11
|
+
═══════════════════════════════════════════ */
|
|
12
|
+
.adjourn-overlay {
|
|
13
|
+
position: fixed;
|
|
14
|
+
inset: 0;
|
|
15
|
+
z-index: 9400;
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
padding: 24px;
|
|
20
|
+
font-family: var(--mono);
|
|
21
|
+
}
|
|
22
|
+
.adjourn-backdrop {
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset: 0;
|
|
25
|
+
background: rgba(0, 0, 0, 0.6);
|
|
26
|
+
backdrop-filter: blur(2px);
|
|
27
|
+
-webkit-backdrop-filter: blur(2px);
|
|
28
|
+
}
|
|
29
|
+
.adjourn-modal {
|
|
30
|
+
position: relative;
|
|
31
|
+
z-index: 1;
|
|
32
|
+
width: 100%;
|
|
33
|
+
max-width: 880px;
|
|
34
|
+
max-height: calc(100vh - 48px);
|
|
35
|
+
background: var(--panel);
|
|
36
|
+
border: 0.5px solid var(--line-strong);
|
|
37
|
+
color: var(--text);
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* ─── Classification strip + Head · matches room-settings's
|
|
43
|
+
.rs-classification + .rs-head pattern so both modals read as the
|
|
44
|
+
same family. The dot uses amber instead of lime to flag that this
|
|
45
|
+
is a terminal / destructive action — visual contrast against
|
|
46
|
+
room-settings's calmer lime classification. */
|
|
47
|
+
.adjourn-classification {
|
|
48
|
+
background: var(--panel-2, #1A1A18);
|
|
49
|
+
border-bottom: 0.5px solid var(--line-bright, #2A2A26);
|
|
50
|
+
padding: 6px 14px;
|
|
51
|
+
font-family: var(--mono);
|
|
52
|
+
font-size: 9px;
|
|
53
|
+
letter-spacing: 0.2em;
|
|
54
|
+
text-transform: uppercase;
|
|
55
|
+
color: var(--amber, #C99826);
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
align-items: center;
|
|
59
|
+
}
|
|
60
|
+
.adjourn-classification .dot {
|
|
61
|
+
color: var(--amber, #C99826);
|
|
62
|
+
}
|
|
63
|
+
.adjourn-classification .right {
|
|
64
|
+
color: var(--text-faint, #3A382F);
|
|
65
|
+
letter-spacing: 0.12em;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.adjourn-head {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: 1fr auto;
|
|
71
|
+
gap: 14px;
|
|
72
|
+
align-items: start;
|
|
73
|
+
padding: 16px 22px 14px;
|
|
74
|
+
border-bottom: 0.5px dashed var(--line-bright, #2A2A26);
|
|
75
|
+
}
|
|
76
|
+
.adjourn-head .meta {
|
|
77
|
+
font-family: var(--mono);
|
|
78
|
+
font-size: 9.5px;
|
|
79
|
+
color: var(--text-dim, #5C5A52);
|
|
80
|
+
text-transform: uppercase;
|
|
81
|
+
letter-spacing: 0.12em;
|
|
82
|
+
margin-bottom: 6px;
|
|
83
|
+
}
|
|
84
|
+
.adjourn-head .meta .live {
|
|
85
|
+
color: var(--lime, #6FB572);
|
|
86
|
+
font-weight: 700;
|
|
87
|
+
}
|
|
88
|
+
.adjourn-head .meta .live::before {
|
|
89
|
+
content: "● ";
|
|
90
|
+
animation: adjourn-pulse 1.6s ease-in-out infinite;
|
|
91
|
+
}
|
|
92
|
+
.adjourn-head .meta .status {
|
|
93
|
+
color: var(--text-soft, #8E8B83);
|
|
94
|
+
font-weight: 700;
|
|
95
|
+
}
|
|
96
|
+
@keyframes adjourn-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.45; } }
|
|
97
|
+
.adjourn-head .title {
|
|
98
|
+
font-family: var(--font-human);
|
|
99
|
+
font-size: 17px;
|
|
100
|
+
font-weight: 700;
|
|
101
|
+
color: var(--text, #C8C5BE);
|
|
102
|
+
letter-spacing: -0.012em;
|
|
103
|
+
line-height: 1.3;
|
|
104
|
+
}
|
|
105
|
+
.adjourn-head .title::before {
|
|
106
|
+
content: "▸ ";
|
|
107
|
+
color: var(--lime, #6FB572);
|
|
108
|
+
}
|
|
109
|
+
.adjourn-close {
|
|
110
|
+
width: 28px;
|
|
111
|
+
height: 28px;
|
|
112
|
+
flex-shrink: 0;
|
|
113
|
+
background: transparent;
|
|
114
|
+
border: 0.5px solid var(--line-bright, #2A2A26);
|
|
115
|
+
color: var(--text-dim, #5C5A52);
|
|
116
|
+
font-size: 14px;
|
|
117
|
+
line-height: 1;
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
font-family: var(--mono);
|
|
120
|
+
transition: all 0.12s;
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
justify-content: center;
|
|
124
|
+
}
|
|
125
|
+
.adjourn-close:hover {
|
|
126
|
+
border-color: var(--lime, #6FB572);
|
|
127
|
+
color: var(--lime, #6FB572);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* ─── Body ─── */
|
|
131
|
+
.adjourn-body {
|
|
132
|
+
padding: 18px 22px;
|
|
133
|
+
display: flex;
|
|
134
|
+
flex-direction: column;
|
|
135
|
+
gap: 14px;
|
|
136
|
+
overflow-y: auto;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Summary panel · compact key/value pairs that confirm what's about to
|
|
140
|
+
be filed. No format picker — the report has one standard layout. */
|
|
141
|
+
.adjourn-summary {
|
|
142
|
+
display: flex;
|
|
143
|
+
flex-direction: column;
|
|
144
|
+
border: 0.5px solid var(--line-bright);
|
|
145
|
+
background: var(--panel-2);
|
|
146
|
+
}
|
|
147
|
+
.adjourn-summary-row {
|
|
148
|
+
display: grid;
|
|
149
|
+
grid-template-columns: 96px 1fr;
|
|
150
|
+
gap: 12px;
|
|
151
|
+
padding: 10px 14px;
|
|
152
|
+
align-items: baseline;
|
|
153
|
+
}
|
|
154
|
+
.adjourn-summary-row + .adjourn-summary-row {
|
|
155
|
+
border-top: 0.5px solid var(--line);
|
|
156
|
+
}
|
|
157
|
+
.adjourn-summary-key {
|
|
158
|
+
font-family: var(--mono);
|
|
159
|
+
font-size: 9.5px;
|
|
160
|
+
letter-spacing: 0.14em;
|
|
161
|
+
text-transform: uppercase;
|
|
162
|
+
color: var(--text-faint);
|
|
163
|
+
}
|
|
164
|
+
.adjourn-summary-val {
|
|
165
|
+
font-family: var(--font-human);
|
|
166
|
+
font-size: 13px;
|
|
167
|
+
color: var(--text);
|
|
168
|
+
line-height: 1.4;
|
|
169
|
+
word-break: break-word;
|
|
170
|
+
}
|
|
171
|
+
.adjourn-summary-note {
|
|
172
|
+
margin: 0;
|
|
173
|
+
font-family: var(--font-human);
|
|
174
|
+
font-size: 12px;
|
|
175
|
+
color: var(--text-soft);
|
|
176
|
+
line-height: 1.5;
|
|
177
|
+
letter-spacing: -0.003em;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* ─── Footer ─── skip-button on the left, primary actions on the right.
|
|
181
|
+
The skip moves out of the gallery-body and into a real button slot
|
|
182
|
+
so the visual weight matches Cancel / Adjourn (peers in size and
|
|
183
|
+
placement); amber accent keeps it distinct as the "alternate
|
|
184
|
+
terminal path". */
|
|
185
|
+
.adjourn-foot {
|
|
186
|
+
display: flex;
|
|
187
|
+
align-items: center;
|
|
188
|
+
justify-content: space-between;
|
|
189
|
+
gap: 12px;
|
|
190
|
+
padding: 12px 22px;
|
|
191
|
+
border-top: 0.5px solid var(--line-bright);
|
|
192
|
+
}
|
|
193
|
+
.adjourn-foot-actions { display: flex; gap: 8px; }
|
|
194
|
+
|
|
195
|
+
.adjourn-skip-btn {
|
|
196
|
+
display: inline-flex;
|
|
197
|
+
align-items: center;
|
|
198
|
+
gap: 8px;
|
|
199
|
+
font-family: var(--mono);
|
|
200
|
+
font-size: 10.5px;
|
|
201
|
+
font-weight: 700;
|
|
202
|
+
letter-spacing: 0.14em;
|
|
203
|
+
text-transform: uppercase;
|
|
204
|
+
padding: 8px 14px;
|
|
205
|
+
cursor: pointer;
|
|
206
|
+
background: transparent;
|
|
207
|
+
border: 0.5px solid var(--amber, #C99826);
|
|
208
|
+
color: var(--amber, #C99826);
|
|
209
|
+
transition: background 0.12s, color 0.12s;
|
|
210
|
+
}
|
|
211
|
+
.adjourn-skip-btn:hover {
|
|
212
|
+
background: var(--amber, #C99826);
|
|
213
|
+
color: var(--bg);
|
|
214
|
+
}
|
|
215
|
+
.adjourn-skip-btn.picked {
|
|
216
|
+
background: var(--amber, #C99826);
|
|
217
|
+
color: var(--bg);
|
|
218
|
+
}
|
|
219
|
+
.adjourn-skip-btn .adjourn-skip-mark {
|
|
220
|
+
font-size: 12px;
|
|
221
|
+
line-height: 1;
|
|
222
|
+
}
|
|
223
|
+
.adjourn-cancel,
|
|
224
|
+
.adjourn-confirm {
|
|
225
|
+
font-family: var(--mono);
|
|
226
|
+
font-size: 10.5px;
|
|
227
|
+
font-weight: 700;
|
|
228
|
+
letter-spacing: 0.14em;
|
|
229
|
+
text-transform: uppercase;
|
|
230
|
+
padding: 8px 14px;
|
|
231
|
+
cursor: pointer;
|
|
232
|
+
background: transparent;
|
|
233
|
+
border: 0.5px solid var(--line-strong);
|
|
234
|
+
color: var(--text-soft);
|
|
235
|
+
transition: border-color 0.1s, color 0.1s, background 0.1s;
|
|
236
|
+
}
|
|
237
|
+
.adjourn-cancel:hover { border-color: var(--text-soft); color: var(--text); }
|
|
238
|
+
.adjourn-confirm {
|
|
239
|
+
background: var(--lime);
|
|
240
|
+
border-color: var(--lime);
|
|
241
|
+
color: var(--bg);
|
|
242
|
+
}
|
|
243
|
+
.adjourn-confirm:hover { background: transparent; color: var(--lime); }
|
|
244
|
+
.adjourn-confirm[disabled] {
|
|
245
|
+
opacity: 0.55;
|
|
246
|
+
pointer-events: none;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* Narrow modal */
|
|
250
|
+
@media (max-width: 640px) {
|
|
251
|
+
.adjourn-modal { max-width: 100%; }
|
|
252
|
+
.adjourn-summary-row { grid-template-columns: 78px 1fr; gap: 10px; padding: 9px 12px; }
|
|
253
|
+
}
|