@ibgib/space-gib 0.0.33 β†’ 0.0.34

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 (112) hide show
  1. package/dist/client/bootstrap.mjs +24 -51
  2. package/dist/client/chunk-25PXC4HP.mjs +9914 -0
  3. package/dist/client/chunk-RXWLL2AI.mjs +30 -0
  4. package/dist/client/css/activity-bar.css +417 -0
  5. package/dist/client/css/base.css +167 -0
  6. package/dist/client/css/components.css +218 -0
  7. package/dist/client/css/cosmic.css +557 -0
  8. package/dist/client/css/dev-tools.css +163 -0
  9. package/dist/client/css/landing.css +184 -0
  10. package/dist/client/css/layout.css +896 -0
  11. package/dist/client/css/onboarding.css +181 -0
  12. package/dist/client/css/repos.css +740 -0
  13. package/dist/client/css/variables.css +64 -0
  14. package/dist/client/index.html +202 -31
  15. package/dist/client/index.mjs +32 -32
  16. package/dist/client/script.mjs +1 -1
  17. package/dist/client/style.css +11 -1056
  18. package/dist/respec-gib.node.mjs +5 -0
  19. package/dist/server/server.mjs +6879 -3109
  20. package/package.json +6 -6
  21. package/src/client/AUTO-GENERATED-version.mts +1 -1
  22. package/src/client/cosmos/seed-cosmos-workspace.mts +69 -0
  23. package/src/client/css/activity-bar.css +417 -0
  24. package/src/client/css/base.css +167 -0
  25. package/src/client/css/components.css +218 -0
  26. package/src/client/css/cosmic.css +557 -0
  27. package/src/client/css/dev-tools.css +163 -0
  28. package/src/client/css/landing.css +184 -0
  29. package/src/client/css/layout.css +896 -0
  30. package/src/client/css/onboarding.css +181 -0
  31. package/src/client/css/repos.css +740 -0
  32. package/src/client/css/variables.css +64 -0
  33. package/src/client/dev-tools/vcs-workspace.mts +3 -3
  34. package/src/client/index.html +202 -31
  35. package/src/client/style.css +11 -1056
  36. package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
  37. package/src/client/ui/component/chat-view/chat-view.css +381 -0
  38. package/src/client/ui/component/chat-view/chat-view.html +104 -0
  39. package/src/client/ui/component/chat-view/chat-view.mts +277 -0
  40. package/src/client/ui/component/chat-view/index.mts +9 -0
  41. package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
  42. package/src/client/ui/component/clone/clone-constants.mts +16 -0
  43. package/src/client/ui/component/clone/clone-types.mts +60 -0
  44. package/src/client/ui/component/clone/clone.css +383 -0
  45. package/src/client/ui/component/clone/clone.html +89 -0
  46. package/src/client/ui/component/clone/clone.mts +620 -0
  47. package/src/client/ui/component/clone/index.mts +11 -0
  48. package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
  49. package/src/client/ui/component/code-editor/code-editor.css +275 -0
  50. package/src/client/ui/component/code-editor/code-editor.html +54 -0
  51. package/src/client/ui/component/code-editor/code-editor.mts +427 -0
  52. package/src/client/ui/component/code-editor/index.mts +9 -0
  53. package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
  54. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
  55. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +97 -0
  56. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1084 -0
  57. package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
  58. package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
  59. package/src/client/ui/component/file-explorer/file-explorer.css +256 -0
  60. package/src/client/ui/component/file-explorer/file-explorer.html +75 -0
  61. package/src/client/ui/component/file-explorer/file-explorer.mts +346 -0
  62. package/src/client/ui/component/file-explorer/index.mts +9 -0
  63. package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
  64. package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
  65. package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
  66. package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
  67. package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
  68. package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
  69. package/src/client/ui/component/nested-chat/chat/chat.mts +646 -0
  70. package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
  71. package/src/client/ui/component/nested-chat/index.mts +14 -0
  72. package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
  73. package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
  74. package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
  75. package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
  76. package/src/client/ui/component/nested-chat/nested-chat.mts +393 -0
  77. package/src/client/ui/component/notes-explorer/index.mts +9 -0
  78. package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
  79. package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
  80. package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
  81. package/src/client/ui/component/notes-inspector/index.mts +9 -0
  82. package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
  83. package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
  84. package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
  85. package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
  86. package/src/client/ui/component/pitch/index.mts +9 -0
  87. package/src/client/ui/component/pitch/pitch.css +295 -0
  88. package/src/client/ui/component/pitch/pitch.html +97 -0
  89. package/src/client/ui/component/pitch/pitch.mts +135 -0
  90. package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
  91. package/src/client/ui/component/timeline/index.mts +9 -0
  92. package/src/client/ui/component/timeline/timeline.css +264 -0
  93. package/src/client/ui/component/timeline/timeline.html +23 -0
  94. package/src/client/ui/component/timeline/timeline.mts +317 -0
  95. package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
  96. package/src/client/ui/component/timeline-item-details/index.mts +9 -0
  97. package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
  98. package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
  99. package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
  100. package/src/client/ui/router/index.mts +3 -0
  101. package/src/client/ui/router/space-gib-router-helpers.mts +272 -0
  102. package/src/client/ui/router/space-gib-router-helpers.respec.mts +353 -0
  103. package/src/client/ui/router/space-gib-router-service.mts +186 -0
  104. package/src/client/ui/router/space-gib-router-types.mts +93 -0
  105. package/src/client/ui/shell/cosmic-big-bang.mts +844 -0
  106. package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
  107. package/src/client/ui/shell/space-gib-shell-service.mts +1728 -31
  108. package/src/server/server.mts +20 -1
  109. package/tsconfig.test.json +5 -1
  110. package/dist/client/chunk-CRJV762I.mjs +0 -3102
  111. package/dist/client/chunk-LXRCF5OS.mjs +0 -25
  112. package/dist/client/chunk-UBDQUZZV.mjs +0 -1
@@ -0,0 +1,48 @@
1
+ # space-gib-chat-view Web Component Specification
2
+
3
+ ## 1. Overview & Architectural Role
4
+
5
+ `space-gib-chat-view` is an `@ibgib` Web Component that provides a live discussion and companion note thread directly inside the Right Panel (`#right-panel`).
6
+
7
+ ### Inverted Soft Rel8ns & Living Discussions
8
+ In standard VCS platforms (GitHub, GitLab), review comments and discussion threads live outside version control in centralized database tables. In `ibgib`:
9
+ - Discussions, notes, and comments are first-class **metatext ibgibs** (`b2tfs_file` or comment nodes).
10
+ - They link to target code entities (files, directories, commit tips) via **inverted soft rel8ns** (`data.targetAddr`).
11
+ - Discussions travel with branches and merge accretively across spaces without polluting code ASTs.
12
+ - This component renders those linked discussions in a natural, conversational chat interface.
13
+
14
+ ---
15
+
16
+ ## 2. Component Design & Capabilities
17
+
18
+ - **Tag Name**: `<space-gib-chat-view>`
19
+ - **Host Container**: `#code-chat-view-container` inside `#right-panel`
20
+ - **Context Header**:
21
+ - Displays the active conversation context (e.g., `πŸ’¬ Discussions: src/index.ts`).
22
+ - Active branch & tip indicator (`🌿 main @ 7f8a1b2`).
23
+ - Collapse / Close button (`β—¨`) to toggle the Right Panel.
24
+ - **Message Stream**:
25
+ - Dynamic scrollable thread of discussion messages.
26
+ - Message metadata: author keystone badge (e.g., `Alice (Session Keystone)`), timestamp (`2m ago`), and target anchor badge (`πŸ”— L1-18`).
27
+ - Markdown-friendly body displaying architectural rationales, questions, and replies.
28
+ - **Compose & Send Bar**:
29
+ - Auto-growing message input textarea.
30
+ - Attach / anchor button to pin comment to specific code lines.
31
+ - Send button (`Send πŸ’¬`) dispatching `space-gib-chat-message-sent`.
32
+
33
+ ---
34
+
35
+ ## 3. Custom Event Contracts
36
+
37
+ - `space-gib-chat-message-sent`: Detail `{ text: string, targetAddr?: string, targetFile: string, author: string, timestamp: number }`
38
+ - `space-gib-chat-anchor-clicked`: Detail `{ targetFile: string, lines?: string }`
39
+ - `space-gib-chat-close-requested`: Detail `{}`
40
+
41
+ ---
42
+
43
+ ## 4. Lifecycle & Integration
44
+
45
+ - Scaffolds `ChatViewComponentMeta` (extends `IbGibDynamicComponentMetaBase`)
46
+ - Scaffolds `ChatViewComponentInstance` (extends `IbGibDynamicComponentInstanceBase<IbGib_V1, ChatViewElements>`)
47
+ - Implements `initialize()`, `created()`, `renderUI()`, `disconnected(): Promise<void>`
48
+ - Registered in `SpaceGibShellService` via `registerChatViewComponent()`.
@@ -0,0 +1,381 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ height: 100%;
6
+ background: var(--clr-bg-surface, #0d1322);
7
+ color: var(--clr-text-primary, #f0f4fc);
8
+ font-family: var(--font-sans, system-ui, -apple-system, sans-serif);
9
+ font-size: 0.85rem;
10
+ overflow: hidden;
11
+ border-left: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
12
+ }
13
+
14
+ .chat-root {
15
+ display: flex;
16
+ flex-direction: column;
17
+ width: 100%;
18
+ height: 100%;
19
+ overflow: hidden;
20
+ }
21
+
22
+ /* ── Header ── */
23
+ .chat-header {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ padding: 0.75rem 1rem;
28
+ background: rgba(5, 8, 15, 0.6);
29
+ border-bottom: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .chat-header-info {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 0.6rem;
37
+ min-width: 0;
38
+ }
39
+
40
+ .chat-header-icon {
41
+ font-size: 1.15rem;
42
+ line-height: 1;
43
+ }
44
+
45
+ .chat-title-group {
46
+ display: flex;
47
+ flex-direction: column;
48
+ min-width: 0;
49
+ }
50
+
51
+ .chat-title {
52
+ margin: 0;
53
+ font-size: 0.875rem;
54
+ font-weight: 600;
55
+ color: var(--clr-text-primary, #f0f4fc);
56
+ line-height: 1.2;
57
+ }
58
+
59
+ .chat-target-badge {
60
+ font-size: 0.725rem;
61
+ font-family: var(--font-mono, monospace);
62
+ color: var(--clr-accent, #78f87e);
63
+ white-space: nowrap;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ }
67
+
68
+ .chat-header-actions {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 0.35rem;
72
+ }
73
+
74
+ .chat-header-btn {
75
+ background: transparent;
76
+ border: 1px solid transparent;
77
+ color: var(--clr-text-muted, #7e8c9f);
78
+ padding: 0.3rem 0.45rem;
79
+ border-radius: var(--radius-sm, 4px);
80
+ cursor: pointer;
81
+ font-size: 0.9rem;
82
+ transition: all 120ms ease;
83
+ }
84
+
85
+ .chat-header-btn:hover {
86
+ background: rgba(255, 255, 255, 0.08);
87
+ color: var(--clr-text-primary, #f0f4fc);
88
+ border-color: var(--clr-border, rgba(255, 255, 255, 0.1));
89
+ }
90
+
91
+ /* ── Context Sub-Bar ── */
92
+ .chat-sub-bar {
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: space-between;
96
+ padding: 0.35rem 1rem;
97
+ background: rgba(0, 0, 0, 0.25);
98
+ border-bottom: 1px solid var(--clr-border, rgba(255, 255, 255, 0.05));
99
+ font-size: 0.75rem;
100
+ color: var(--clr-text-secondary, #b4c0d3);
101
+ flex-shrink: 0;
102
+ }
103
+
104
+ .chat-context-item {
105
+ display: flex;
106
+ align-items: center;
107
+ gap: 0.35rem;
108
+ font-family: var(--font-mono, monospace);
109
+ }
110
+
111
+ .context-icon {
112
+ font-size: 0.8rem;
113
+ }
114
+
115
+ .filter-text {
116
+ color: var(--clr-text-muted, #7e8c9f);
117
+ }
118
+
119
+ /* ── Messages Stream ── */
120
+ .chat-messages {
121
+ flex: 1;
122
+ overflow-y: auto;
123
+ padding: 0.85rem 1rem;
124
+ display: flex;
125
+ flex-direction: column;
126
+ gap: 0.85rem;
127
+ min-height: 0;
128
+ }
129
+
130
+ .chat-message {
131
+ background: rgba(18, 25, 42, 0.6);
132
+ border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.07));
133
+ border-radius: var(--radius-sm, 6px);
134
+ padding: 0.75rem;
135
+ display: flex;
136
+ flex-direction: column;
137
+ gap: 0.5rem;
138
+ transition: border-color 150ms ease;
139
+ }
140
+
141
+ .chat-message:hover {
142
+ border-color: rgba(255, 255, 255, 0.15);
143
+ }
144
+
145
+ .chat-message.in-band-note {
146
+ border-left: 3px solid var(--clr-accent, #78f87e);
147
+ background: rgba(120, 248, 126, 0.03);
148
+ }
149
+
150
+ .msg-header {
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: space-between;
154
+ }
155
+
156
+ .msg-author-group {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 0.4rem;
160
+ }
161
+
162
+ .msg-avatar {
163
+ font-size: 0.95rem;
164
+ line-height: 1;
165
+ }
166
+
167
+ .msg-author {
168
+ font-weight: 600;
169
+ font-size: 0.825rem;
170
+ color: var(--clr-text-primary, #f0f4fc);
171
+ }
172
+
173
+ .msg-badge {
174
+ font-size: 0.65rem;
175
+ padding: 0.1rem 0.35rem;
176
+ border-radius: 999px;
177
+ background: rgba(120, 248, 126, 0.12);
178
+ color: var(--clr-accent, #78f87e);
179
+ font-weight: 600;
180
+ text-transform: uppercase;
181
+ }
182
+
183
+ .peer-comment .msg-badge {
184
+ background: rgba(99, 102, 241, 0.15);
185
+ color: #a5b4fc;
186
+ }
187
+
188
+ .msg-time {
189
+ font-size: 0.7rem;
190
+ color: var(--clr-text-muted, #7e8c9f);
191
+ }
192
+
193
+ .msg-anchor {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: 0.35rem;
197
+ font-size: 0.725rem;
198
+ font-family: var(--font-mono, monospace);
199
+ color: var(--clr-warn, #ffd166);
200
+ background: rgba(255, 209, 102, 0.08);
201
+ padding: 0.2rem 0.45rem;
202
+ border-radius: 4px;
203
+ width: fit-content;
204
+ cursor: pointer;
205
+ }
206
+
207
+ .msg-anchor:hover {
208
+ background: rgba(255, 209, 102, 0.16);
209
+ }
210
+
211
+ .anchor-tag {
212
+ font-size: 0.65rem;
213
+ color: var(--clr-text-muted, #7e8c9f);
214
+ margin-left: 0.35rem;
215
+ border-left: 1px solid rgba(255, 255, 255, 0.1);
216
+ padding-left: 0.35rem;
217
+ }
218
+
219
+ .msg-body {
220
+ font-size: 0.825rem;
221
+ line-height: 1.45;
222
+ color: var(--clr-text-secondary, #b4c0d3);
223
+ }
224
+
225
+ .msg-body p {
226
+ margin: 0 0 0.4rem 0;
227
+ }
228
+
229
+ .msg-body p:last-child {
230
+ margin-bottom: 0;
231
+ }
232
+
233
+ .msg-lead {
234
+ color: var(--clr-text-primary, #f0f4fc);
235
+ }
236
+
237
+ .msg-callout {
238
+ display: flex;
239
+ gap: 0.5rem;
240
+ padding: 0.55rem 0.65rem;
241
+ margin-top: 0.45rem;
242
+ border-radius: 4px;
243
+ background: rgba(120, 248, 126, 0.06);
244
+ border: 1px solid rgba(120, 248, 126, 0.15);
245
+ font-size: 0.775rem;
246
+ color: var(--clr-text-primary, #f0f4fc);
247
+ }
248
+
249
+ .callout-emoji {
250
+ font-size: 0.9rem;
251
+ line-height: 1;
252
+ }
253
+
254
+ .callout-text {
255
+ line-height: 1.35;
256
+ }
257
+
258
+ .msg-footer {
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 0.5rem;
262
+ margin-top: 0.2rem;
263
+ }
264
+
265
+ .msg-action-btn {
266
+ background: transparent;
267
+ border: none;
268
+ color: var(--clr-text-muted, #7e8c9f);
269
+ font-size: 0.725rem;
270
+ cursor: pointer;
271
+ padding: 0.15rem 0.4rem;
272
+ border-radius: 3px;
273
+ transition: all 120ms ease;
274
+ }
275
+
276
+ .msg-action-btn:hover {
277
+ background: rgba(255, 255, 255, 0.06);
278
+ color: var(--clr-text-primary, #f0f4fc);
279
+ }
280
+
281
+ /* ── Compose Footer ── */
282
+ .chat-compose-footer {
283
+ padding: 0.75rem 1rem;
284
+ background: rgba(5, 8, 15, 0.75);
285
+ border-top: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
286
+ flex-shrink: 0;
287
+ }
288
+
289
+ .compose-box {
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 0.45rem;
293
+ background: rgba(18, 25, 42, 0.8);
294
+ border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.12));
295
+ border-radius: var(--radius-sm, 6px);
296
+ padding: 0.5rem 0.65rem;
297
+ transition: border-color 150ms ease;
298
+ }
299
+
300
+ .compose-box:focus-within {
301
+ border-color: var(--clr-accent, #78f87e);
302
+ box-shadow: 0 0 0 1px rgba(120, 248, 126, 0.2);
303
+ }
304
+
305
+ .chat-textarea {
306
+ width: 100%;
307
+ background: transparent;
308
+ border: none;
309
+ outline: none;
310
+ color: var(--clr-text-primary, #f0f4fc);
311
+ font-family: inherit;
312
+ font-size: 0.825rem;
313
+ line-height: 1.4;
314
+ resize: none;
315
+ min-height: 48px;
316
+ box-sizing: border-box;
317
+ }
318
+
319
+ .chat-textarea::placeholder {
320
+ color: var(--clr-text-muted, #7e8c9f);
321
+ }
322
+
323
+ .compose-toolbar {
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
328
+ padding-top: 0.4rem;
329
+ }
330
+
331
+ .compose-tools-left {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 0.35rem;
335
+ }
336
+
337
+ .compose-tool-btn {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: 0.3rem;
341
+ background: rgba(255, 255, 255, 0.04);
342
+ border: 1px solid rgba(255, 255, 255, 0.08);
343
+ color: var(--clr-text-secondary, #b4c0d3);
344
+ padding: 0.2rem 0.45rem;
345
+ border-radius: 4px;
346
+ font-size: 0.725rem;
347
+ font-family: var(--font-mono, monospace);
348
+ cursor: pointer;
349
+ transition: all 120ms ease;
350
+ }
351
+
352
+ .compose-tool-btn:hover {
353
+ border-color: var(--clr-accent, #78f87e);
354
+ color: var(--clr-text-primary, #f0f4fc);
355
+ }
356
+
357
+ .compose-tool-btn.active {
358
+ background: rgba(120, 248, 126, 0.1);
359
+ border-color: rgba(120, 248, 126, 0.3);
360
+ color: var(--clr-accent, #78f87e);
361
+ }
362
+
363
+ .compose-send-btn {
364
+ display: flex;
365
+ align-items: center;
366
+ gap: 0.35rem;
367
+ background: var(--clr-accent, #78f87e);
368
+ border: none;
369
+ color: #05080f;
370
+ font-weight: 600;
371
+ font-size: 0.775rem;
372
+ padding: 0.3rem 0.75rem;
373
+ border-radius: 4px;
374
+ cursor: pointer;
375
+ transition: all 120ms ease;
376
+ }
377
+
378
+ .compose-send-btn:hover {
379
+ background: #9fffa5;
380
+ box-shadow: 0 0 12px rgba(120, 248, 126, 0.4);
381
+ }
@@ -0,0 +1,104 @@
1
+ <div class="chat-root" id="chat-root">
2
+ <!-- Header Bar -->
3
+ <header class="chat-header">
4
+ <div class="chat-header-info">
5
+ <span class="chat-header-icon">πŸ’¬</span>
6
+ <div class="chat-title-group">
7
+ <h3 class="chat-title">Discussions</h3>
8
+ <span class="chat-target-badge" id="chat-target-file">src/index.ts</span>
9
+ </div>
10
+ </div>
11
+ <div class="chat-header-actions">
12
+ <button id="btn-chat-close" class="chat-header-btn" type="button" title="Collapse Panel">β—¨</button>
13
+ </div>
14
+ </header>
15
+
16
+ <!-- Context Sub-Bar -->
17
+ <div class="chat-sub-bar">
18
+ <div class="chat-context-item">
19
+ <span class="context-icon">🌿</span>
20
+ <span class="context-text" id="chat-branch-tip">main @ 7f8a1b2</span>
21
+ </div>
22
+ <div class="chat-filter-item">
23
+ <span class="filter-text">2 Notes</span>
24
+ </div>
25
+ </div>
26
+
27
+ <!-- Messages Stream -->
28
+ <div class="chat-messages" id="chat-messages">
29
+ <!-- Message 1: Architectural Note -->
30
+ <div class="chat-message in-band-note">
31
+ <div class="msg-header">
32
+ <div class="msg-author-group">
33
+ <span class="msg-avatar">πŸ‘©β€πŸ’»</span>
34
+ <span class="msg-author">Alice</span>
35
+ <span class="msg-badge">Keystone</span>
36
+ </div>
37
+ <span class="msg-time">2m ago</span>
38
+ </div>
39
+ <div class="msg-anchor">
40
+ <span class="anchor-icon">πŸ”—</span>
41
+ <span class="anchor-label">src/index.ts#L1-18</span>
42
+ <span class="anchor-tag">Inverted Rel8n</span>
43
+ </div>
44
+ <div class="msg-body">
45
+ <p class="msg-lead"><strong>Architectural Rationale</strong></p>
46
+ <p>This entrypoint initializes the virtual repository workspace within the browser’s local IndexedDB metaspace.
47
+ </p>
48
+ <div class="msg-callout">
49
+ <span class="callout-emoji">πŸ’‘</span>
50
+ <div class="callout-text">
51
+ <strong>Why Living Comments?</strong> Unlike centralized SaaS review comments, this discussion node is an
52
+ in-band Merkle ibgib traveling directly with the branch DAG.
53
+ </div>
54
+ </div>
55
+ </div>
56
+ <div class="msg-footer">
57
+ <button class="msg-action-btn" type="button">Reply</button>
58
+ <button class="msg-action-btn" type="button">πŸ‘ 1</button>
59
+ </div>
60
+ </div>
61
+
62
+ <!-- Message 2: Code Review Discussion -->
63
+ <div class="chat-message peer-comment">
64
+ <div class="msg-header">
65
+ <div class="msg-author-group">
66
+ <span class="msg-avatar">πŸ‘¨β€πŸš€</span>
67
+ <span class="msg-author">Bob</span>
68
+ <span class="msg-badge">Peer</span>
69
+ </div>
70
+ <span class="msg-time">1m ago</span>
71
+ </div>
72
+ <div class="msg-anchor">
73
+ <span class="anchor-icon">πŸ”—</span>
74
+ <span class="anchor-label">src/index.ts#L36-42</span>
75
+ </div>
76
+ <div class="msg-body">
77
+ <p>Looks super clean! Should we add an async try/catch boundary around <code>boot()</code> as well?</p>
78
+ </div>
79
+ <div class="msg-footer">
80
+ <button class="msg-action-btn" type="button">Reply</button>
81
+ <button class="msg-action-btn" type="button">πŸ‘</button>
82
+ </div>
83
+ </div>
84
+ </div>
85
+
86
+ <!-- Compose Footer -->
87
+ <footer class="chat-compose-footer">
88
+ <div class="compose-box">
89
+ <textarea id="chat-input" class="chat-textarea" placeholder="Add a comment to this context." rows="2"></textarea>
90
+ <div class="compose-toolbar">
91
+ <div class="compose-tools-left">
92
+ <button id="btn-chat-pin" class="compose-tool-btn active" type="button" title="Pin to current line selection">
93
+ <span class="tool-icon">πŸ”—</span>
94
+ <span class="tool-label">src/index.ts</span>
95
+ </button>
96
+ </div>
97
+ <button id="btn-chat-send" class="compose-send-btn" type="button">
98
+ <span>Send</span>
99
+ <span class="send-icon">πŸ’¬</span>
100
+ </button>
101
+ </div>
102
+ </div>
103
+ </footer>
104
+ </div>