@isaacriehm/cairn-core 0.4.2 → 0.4.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.
Files changed (68) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/attention/bulk-accept.js +1 -1
  3. package/dist/attention/bulk-accept.js.map +1 -1
  4. package/dist/attention/dedup.d.ts +2 -2
  5. package/dist/attention/dedup.js +15 -4
  6. package/dist/attention/dedup.js.map +1 -1
  7. package/dist/attention/index.d.ts +1 -0
  8. package/dist/attention/index.js +1 -0
  9. package/dist/attention/index.js.map +1 -1
  10. package/dist/attention/restore.js +1 -1
  11. package/dist/attention/restore.js.map +1 -1
  12. package/dist/attention/serve/api.d.ts +23 -0
  13. package/dist/attention/serve/api.js +344 -0
  14. package/dist/attention/serve/api.js.map +1 -0
  15. package/dist/attention/serve/index.d.ts +62 -0
  16. package/dist/attention/serve/index.js +205 -0
  17. package/dist/attention/serve/index.js.map +1 -0
  18. package/dist/decision-capture/id.d.ts +62 -25
  19. package/dist/decision-capture/id.js +78 -57
  20. package/dist/decision-capture/id.js.map +1 -1
  21. package/dist/decision-capture/index.d.ts +3 -3
  22. package/dist/decision-capture/index.js +3 -3
  23. package/dist/decision-capture/index.js.map +1 -1
  24. package/dist/ground/schemas.js +2 -2
  25. package/dist/ground/schemas.js.map +1 -1
  26. package/dist/ground/scope-index.js +2 -2
  27. package/dist/ground/scope-index.js.map +1 -1
  28. package/dist/hooks/post-tool-use/citation-scanner.d.ts +1 -1
  29. package/dist/hooks/post-tool-use/citation-scanner.js +3 -3
  30. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
  31. package/dist/hooks/post-tool-use/copy-scanner.js +1 -1
  32. package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -1
  33. package/dist/hooks/post-tool-use/legend-builder.d.ts +1 -1
  34. package/dist/hooks/post-tool-use/legend-builder.js +2 -2
  35. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  36. package/dist/init/ingest-docs.js +10 -6
  37. package/dist/init/ingest-docs.js.map +1 -1
  38. package/dist/init/mapper-parallel.js +1 -1
  39. package/dist/init/mapper-parallel.js.map +1 -1
  40. package/dist/init/rules-merge/ingest.js +9 -2
  41. package/dist/init/rules-merge/ingest.js.map +1 -1
  42. package/dist/init/source-comments/ingest.js +16 -4
  43. package/dist/init/source-comments/ingest.js.map +1 -1
  44. package/dist/mcp/history/summarizer.js +1 -1
  45. package/dist/mcp/history/summarizer.js.map +1 -1
  46. package/dist/mcp/schemas.d.ts +1 -1
  47. package/dist/mcp/schemas.js +5 -5
  48. package/dist/mcp/schemas.js.map +1 -1
  49. package/dist/mcp/tools/archive.js +1 -1
  50. package/dist/mcp/tools/archive.js.map +1 -1
  51. package/dist/mcp/tools/attention-restore.js +1 -1
  52. package/dist/mcp/tools/attention-restore.js.map +1 -1
  53. package/dist/mcp/tools/attention-serve.d.ts +23 -0
  54. package/dist/mcp/tools/attention-serve.js +78 -0
  55. package/dist/mcp/tools/attention-serve.js.map +1 -0
  56. package/dist/mcp/tools/attention-wait.d.ts +18 -0
  57. package/dist/mcp/tools/attention-wait.js +74 -0
  58. package/dist/mcp/tools/attention-wait.js.map +1 -0
  59. package/dist/mcp/tools/index.js +4 -0
  60. package/dist/mcp/tools/index.js.map +1 -1
  61. package/dist/mcp/tools/record-decision.js +14 -2
  62. package/dist/mcp/tools/record-decision.js.map +1 -1
  63. package/dist/mcp/tools/resolve-attention.js +2 -2
  64. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  65. package/package.json +1 -1
  66. package/templates/attention-ui/app.css +406 -0
  67. package/templates/attention-ui/app.js +384 -0
  68. package/templates/attention-ui/index.html +56 -0
@@ -0,0 +1,406 @@
1
+ /* Cairn attention triage UI — dark theme, vanilla CSS, no build step. */
2
+
3
+ :root {
4
+ --bg: #0c0c0e;
5
+ --bg-1: #131316;
6
+ --bg-2: #1c1c21;
7
+ --bg-3: #2a2a30;
8
+ --fg: #ececef;
9
+ --fg-dim: #9a9aa3;
10
+ --fg-faint: #666670;
11
+ --accent: #d4ad57;
12
+ --accent-dim: #8a7037;
13
+ --good: #66bb88;
14
+ --warn: #d49a57;
15
+ --bad: #d46d6d;
16
+ --border: #2a2a30;
17
+ --radius: 6px;
18
+ }
19
+
20
+ * {
21
+ box-sizing: border-box;
22
+ }
23
+
24
+ html,
25
+ body {
26
+ margin: 0;
27
+ padding: 0;
28
+ background: var(--bg);
29
+ color: var(--fg);
30
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "SF Mono",
31
+ monospace;
32
+ font-size: 14px;
33
+ line-height: 1.5;
34
+ height: 100%;
35
+ }
36
+
37
+ body {
38
+ display: flex;
39
+ flex-direction: column;
40
+ min-height: 100vh;
41
+ }
42
+
43
+ /* ── topbar ─────────────────────────────────────────────────────── */
44
+
45
+ .topbar {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: space-between;
49
+ padding: 12px 20px;
50
+ background: var(--bg-1);
51
+ border-bottom: 1px solid var(--border);
52
+ position: sticky;
53
+ top: 0;
54
+ z-index: 10;
55
+ }
56
+
57
+ .brand {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 10px;
61
+ font-weight: 600;
62
+ }
63
+
64
+ .brand .hex {
65
+ color: var(--accent);
66
+ font-size: 18px;
67
+ }
68
+
69
+ .counters {
70
+ display: flex;
71
+ gap: 18px;
72
+ font-variant-numeric: tabular-nums;
73
+ color: var(--fg-dim);
74
+ }
75
+
76
+ .counters .pill {
77
+ display: inline-flex;
78
+ align-items: center;
79
+ gap: 6px;
80
+ }
81
+
82
+ .counters .pill .num {
83
+ color: var(--fg);
84
+ font-weight: 600;
85
+ }
86
+
87
+ .actions {
88
+ display: flex;
89
+ gap: 8px;
90
+ }
91
+
92
+ button {
93
+ background: var(--bg-2);
94
+ color: var(--fg);
95
+ border: 1px solid var(--border);
96
+ border-radius: var(--radius);
97
+ padding: 6px 12px;
98
+ font: inherit;
99
+ cursor: pointer;
100
+ transition: background 80ms ease, border-color 80ms ease, transform 80ms ease;
101
+ }
102
+
103
+ button:hover {
104
+ background: var(--bg-3);
105
+ border-color: var(--accent-dim);
106
+ }
107
+
108
+ button:active {
109
+ transform: translateY(1px);
110
+ }
111
+
112
+ button.primary {
113
+ background: var(--accent);
114
+ color: #1a1410;
115
+ border-color: var(--accent);
116
+ font-weight: 600;
117
+ }
118
+
119
+ button.primary:hover {
120
+ background: #e8c270;
121
+ border-color: #e8c270;
122
+ }
123
+
124
+ button.ghost {
125
+ background: transparent;
126
+ color: var(--fg-dim);
127
+ }
128
+
129
+ button.ghost:hover {
130
+ color: var(--fg);
131
+ }
132
+
133
+ button.danger {
134
+ color: var(--bad);
135
+ border-color: rgba(212, 109, 109, 0.4);
136
+ }
137
+
138
+ button.danger:hover {
139
+ background: rgba(212, 109, 109, 0.1);
140
+ }
141
+
142
+ /* ── grid ───────────────────────────────────────────────────────── */
143
+
144
+ .grid {
145
+ flex: 1;
146
+ display: grid;
147
+ grid-template-columns: 280px 1fr 260px;
148
+ gap: 0;
149
+ min-height: 0;
150
+ }
151
+
152
+ .left,
153
+ .right {
154
+ background: var(--bg-1);
155
+ padding: 20px;
156
+ overflow-y: auto;
157
+ border-right: 1px solid var(--border);
158
+ }
159
+
160
+ .right {
161
+ border-right: none;
162
+ border-left: 1px solid var(--border);
163
+ }
164
+
165
+ .center {
166
+ padding: 20px 28px;
167
+ overflow-y: auto;
168
+ }
169
+
170
+ h2 {
171
+ font-size: 11px;
172
+ text-transform: uppercase;
173
+ letter-spacing: 0.12em;
174
+ color: var(--fg-faint);
175
+ margin: 0 0 12px;
176
+ font-weight: 600;
177
+ }
178
+
179
+ /* ── cluster list ───────────────────────────────────────────────── */
180
+
181
+ .cluster-list {
182
+ display: flex;
183
+ flex-direction: column;
184
+ gap: 6px;
185
+ }
186
+
187
+ .cluster-item {
188
+ padding: 10px 12px;
189
+ border-radius: var(--radius);
190
+ background: var(--bg-2);
191
+ cursor: pointer;
192
+ border: 1px solid transparent;
193
+ transition: border-color 80ms ease, background 80ms ease;
194
+ }
195
+
196
+ .cluster-item:hover {
197
+ border-color: var(--accent-dim);
198
+ }
199
+
200
+ .cluster-item.active {
201
+ border-color: var(--accent);
202
+ background: var(--bg-3);
203
+ }
204
+
205
+ .cluster-item .row {
206
+ display: flex;
207
+ justify-content: space-between;
208
+ align-items: center;
209
+ gap: 8px;
210
+ }
211
+
212
+ .cluster-item .badge {
213
+ font-size: 11px;
214
+ padding: 1px 6px;
215
+ border-radius: 3px;
216
+ background: var(--bg-3);
217
+ color: var(--fg-dim);
218
+ }
219
+
220
+ .cluster-item .badge.definite {
221
+ background: rgba(212, 173, 87, 0.15);
222
+ color: var(--accent);
223
+ }
224
+
225
+ .cluster-item .badge.potential {
226
+ background: rgba(212, 154, 87, 0.15);
227
+ color: var(--warn);
228
+ }
229
+
230
+ .cluster-item .meta {
231
+ margin-top: 4px;
232
+ font-size: 12px;
233
+ color: var(--fg-faint);
234
+ }
235
+
236
+ .empty {
237
+ padding: 60px 20px;
238
+ text-align: center;
239
+ color: var(--fg-faint);
240
+ }
241
+
242
+ .hidden {
243
+ display: none !important;
244
+ }
245
+
246
+ /* ── draft cards ────────────────────────────────────────────────── */
247
+
248
+ .draft-list {
249
+ display: flex;
250
+ flex-direction: column;
251
+ gap: 14px;
252
+ }
253
+
254
+ .draft-card {
255
+ background: var(--bg-1);
256
+ border: 1px solid var(--border);
257
+ border-radius: var(--radius);
258
+ padding: 16px 18px;
259
+ transition: border-color 80ms ease, transform 80ms ease;
260
+ }
261
+
262
+ .draft-card.focus {
263
+ border-color: var(--accent);
264
+ }
265
+
266
+ .draft-card .title {
267
+ display: flex;
268
+ align-items: baseline;
269
+ gap: 8px;
270
+ font-size: 15px;
271
+ font-weight: 600;
272
+ margin-bottom: 6px;
273
+ }
274
+
275
+ .draft-card .title .id {
276
+ color: var(--accent);
277
+ font-family: "SF Mono", "Menlo", monospace;
278
+ font-size: 12px;
279
+ font-weight: 500;
280
+ }
281
+
282
+ .draft-card .meta {
283
+ font-size: 12px;
284
+ color: var(--fg-faint);
285
+ display: flex;
286
+ flex-wrap: wrap;
287
+ gap: 12px;
288
+ margin-bottom: 10px;
289
+ }
290
+
291
+ .draft-card .meta .chip {
292
+ background: var(--bg-2);
293
+ padding: 2px 8px;
294
+ border-radius: 3px;
295
+ }
296
+
297
+ .draft-card .body {
298
+ background: var(--bg-2);
299
+ padding: 12px 14px;
300
+ border-radius: var(--radius);
301
+ font-family: "SF Mono", "Menlo", monospace;
302
+ font-size: 12.5px;
303
+ white-space: pre-wrap;
304
+ word-break: break-word;
305
+ color: var(--fg-dim);
306
+ max-height: 240px;
307
+ overflow-y: auto;
308
+ }
309
+
310
+ .draft-card .actions-row {
311
+ display: flex;
312
+ gap: 8px;
313
+ margin-top: 12px;
314
+ }
315
+
316
+ .draft-card.cluster-card .body {
317
+ max-height: 140px;
318
+ }
319
+
320
+ /* ── editor ─────────────────────────────────────────────────────── */
321
+
322
+ .editor {
323
+ display: flex;
324
+ flex-direction: column;
325
+ gap: 8px;
326
+ margin-top: 10px;
327
+ }
328
+
329
+ .editor input,
330
+ .editor textarea {
331
+ background: var(--bg-2);
332
+ color: var(--fg);
333
+ border: 1px solid var(--border);
334
+ border-radius: var(--radius);
335
+ padding: 8px 10px;
336
+ font: inherit;
337
+ font-family: "SF Mono", "Menlo", monospace;
338
+ font-size: 13px;
339
+ }
340
+
341
+ .editor input:focus,
342
+ .editor textarea:focus {
343
+ outline: none;
344
+ border-color: var(--accent);
345
+ }
346
+
347
+ .editor textarea {
348
+ min-height: 120px;
349
+ resize: vertical;
350
+ }
351
+
352
+ /* ── shortcuts panel ────────────────────────────────────────────── */
353
+
354
+ .keys {
355
+ list-style: none;
356
+ padding: 0;
357
+ margin: 0 0 24px;
358
+ font-size: 13px;
359
+ color: var(--fg-dim);
360
+ display: flex;
361
+ flex-direction: column;
362
+ gap: 6px;
363
+ }
364
+
365
+ kbd {
366
+ background: var(--bg-2);
367
+ border: 1px solid var(--border);
368
+ border-radius: 3px;
369
+ padding: 1px 6px;
370
+ font-family: "SF Mono", "Menlo", monospace;
371
+ font-size: 11px;
372
+ color: var(--fg);
373
+ }
374
+
375
+ .status {
376
+ margin-top: 18px;
377
+ padding-top: 18px;
378
+ border-top: 1px solid var(--border);
379
+ font-size: 12px;
380
+ color: var(--fg-faint);
381
+ font-family: "SF Mono", "Menlo", monospace;
382
+ }
383
+
384
+ /* ── responsive ─────────────────────────────────────────────────── */
385
+
386
+ @media (max-width: 1024px) {
387
+ .grid {
388
+ grid-template-columns: 220px 1fr;
389
+ }
390
+
391
+ .right {
392
+ display: none;
393
+ }
394
+ }
395
+
396
+ @media (max-width: 720px) {
397
+ .grid {
398
+ grid-template-columns: 1fr;
399
+ }
400
+
401
+ .left {
402
+ border-right: none;
403
+ border-bottom: 1px solid var(--border);
404
+ max-height: 200px;
405
+ }
406
+ }