clay-server 3.8.1 → 4.0.0-beta.10
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/lib/ask-user-mcp-server.js +5 -119
- package/lib/background-task-timing.js +105 -0
- package/lib/builtin-mates.js +6 -6
- package/lib/claude-hook-installer.js +15 -0
- package/lib/clay-history-mcp-server.js +62 -297
- package/lib/daemon.js +23 -1
- package/lib/debate-model-selection.js +119 -0
- package/lib/home-debate-tool-policy.js +164 -0
- package/lib/home-response-notifications.js +26 -0
- package/lib/knowledge-import.js +436 -0
- package/lib/knowledge-record-store.js +188 -0
- package/lib/knowledge-search.js +224 -0
- package/lib/mate-creation-mcp-server.js +55 -0
- package/lib/mate-knowledge-mcp-server.js +151 -0
- package/lib/mate-knowledge-migration.js +283 -0
- package/lib/mate-knowledge-service.js +488 -0
- package/lib/mate-knowledge-sync.js +482 -0
- package/lib/mate-ready-creation.js +95 -0
- package/lib/mates.js +2 -0
- package/lib/notes.js +2 -1
- package/lib/project-ask-user.js +64 -0
- package/lib/project-capsule-catalog.js +101 -0
- package/lib/project-connection.js +17 -0
- package/lib/project-debate-proposal.js +133 -17
- package/lib/project-debate.js +214 -110
- package/lib/project-delegated-follow-up.js +84 -0
- package/lib/project-delegated-session.js +53 -0
- package/lib/project-filesystem.js +7 -9
- package/lib/project-knowledge.js +23 -0
- package/lib/project-logs-comments.js +137 -0
- package/lib/project-logs-mcp-server.js +290 -0
- package/lib/project-logs-query.js +167 -0
- package/lib/project-logs-root.js +67 -0
- package/lib/project-logs-schema.js +259 -0
- package/lib/project-logs-service.js +357 -0
- package/lib/project-logs-snapshot.js +202 -0
- package/lib/project-logs-store.js +498 -0
- package/lib/project-logs-versioning.js +128 -0
- package/lib/project-logs.js +347 -0
- package/lib/project-mate-creation-proposal.js +120 -0
- package/lib/project-mate-interaction.js +14 -0
- package/lib/project-mate-knowledge.js +110 -0
- package/lib/project-memory.js +36 -7
- package/lib/project-models.js +157 -32
- package/lib/project-session-notes.js +2 -2
- package/lib/project-session-pair.js +8 -8
- package/lib/project-sessions.js +66 -51
- package/lib/project-vendor-login.js +414 -0
- package/lib/project-worker-proposal.js +25 -25
- package/lib/project-workspace-query.js +144 -0
- package/lib/project.js +433 -102
- package/lib/public/app.js +109 -48
- package/lib/public/css/avatar-imprints.css +0 -1
- package/lib/public/css/base.css +4 -0
- package/lib/public/css/capsule-ui.css +389 -0
- package/lib/public/css/command-palette.css +306 -6
- package/lib/public/css/home-capsule-library.css +243 -0
- package/lib/public/css/home-capsule-source.css +192 -0
- package/lib/public/css/home-debate-live.css +146 -0
- package/lib/public/css/home-debate-planning.css +125 -0
- package/lib/public/css/home-debates-archive.css +281 -0
- package/lib/public/css/home-hub.css +896 -405
- package/lib/public/css/home-mate-creation.css +34 -0
- package/lib/public/css/home-mate-model-picker.css +131 -0
- package/lib/public/css/home-mate-settings.css +344 -0
- package/lib/public/css/home-session-actions.css +265 -0
- package/lib/public/css/home-sidebar.css +667 -0
- package/lib/public/css/icon-strip.css +1 -2
- package/lib/public/css/input.css +79 -25
- package/lib/public/css/mates.css +7 -34
- package/lib/public/css/pane.css +1 -1
- package/lib/public/css/playbook.css +0 -80
- package/lib/public/css/project-logs.css +234 -0
- package/lib/public/css/scheduler.css +1 -1
- package/lib/public/css/sticky-notes.css +53 -117
- package/lib/public/css/tui-attention.css +0 -44
- package/lib/public/css/workspace-assignment.css +45 -0
- package/lib/public/fonts/source-serif-4/LICENSE.md +93 -0
- package/lib/public/fonts/source-serif-4/SourceSerif4Caption-Semibold.ttf.woff2 +0 -0
- package/lib/public/index.html +96 -74
- package/lib/public/modules/app-connection.js +100 -5
- package/lib/public/modules/app-dm.js +43 -160
- package/lib/public/modules/app-home-hub.js +328 -585
- package/lib/public/modules/app-message-cards.js +242 -0
- package/lib/public/modules/app-message-router.js +84 -0
- package/lib/public/modules/app-messages.js +124 -38
- package/lib/public/modules/app-notifications.js +8 -119
- package/lib/public/modules/app-panels.js +43 -2
- package/lib/public/modules/app-projects.js +9 -1
- package/lib/public/modules/app-rendering.js +21 -602
- package/lib/public/modules/avatar-imprint.js +11 -8
- package/lib/public/modules/background-tasks-ui.js +139 -16
- package/lib/public/modules/chat-bubble-renderer.js +152 -0
- package/lib/public/modules/chat-render-runtime.js +198 -0
- package/lib/public/modules/command-palette.js +225 -436
- package/lib/public/modules/dm-render.js +82 -0
- package/lib/public/modules/home-capsule-creation-intent.js +31 -0
- package/lib/public/modules/home-capsule-library.js +146 -0
- package/lib/public/modules/home-capsule-source.js +383 -0
- package/lib/public/modules/home-chat-identity.js +35 -0
- package/lib/public/modules/home-chat-scroll.js +77 -0
- package/lib/public/modules/home-chat-stream-state.js +34 -0
- package/lib/public/modules/home-composer-focus.js +25 -0
- package/lib/public/modules/home-conversations-sheet.js +179 -0
- package/lib/public/modules/home-debate-activity.js +48 -0
- package/lib/public/modules/home-debate-controls.js +295 -0
- package/lib/public/modules/home-debate-launch.js +41 -0
- package/lib/public/modules/home-debate-live.js +284 -0
- package/lib/public/modules/home-debate-models.js +73 -0
- package/lib/public/modules/home-debate-planning.js +335 -0
- package/lib/public/modules/home-debates-archive.js +279 -0
- package/lib/public/modules/home-dock-resize.js +74 -0
- package/lib/public/modules/home-dock.js +446 -0
- package/lib/public/modules/home-mate-chat.js +496 -0
- package/lib/public/modules/home-mate-creation.js +109 -0
- package/lib/public/modules/home-mate-model-picker.js +281 -0
- package/lib/public/modules/home-mate-selection.js +38 -0
- package/lib/public/modules/home-mate-settings-menu.js +131 -0
- package/lib/public/modules/home-mate-settings.js +383 -0
- package/lib/public/modules/home-session-actions.js +373 -0
- package/lib/public/modules/home-session-model-confirmation.js +13 -0
- package/lib/public/modules/home-shell.js +9 -0
- package/lib/public/modules/home-sidebar-chat-list.js +63 -0
- package/lib/public/modules/home-sidebar.js +165 -0
- package/lib/public/modules/home-sub-surface.js +19 -0
- package/lib/public/modules/home-surface-boot.js +68 -0
- package/lib/public/modules/home-surface.js +141 -0
- package/lib/public/modules/home-tools.js +271 -0
- package/lib/public/modules/markdown.js +50 -2
- package/lib/public/modules/mate-management.js +86 -0
- package/lib/public/modules/mate-sidebar.js +0 -8
- package/lib/public/modules/mate-wizard.js +0 -7
- package/lib/public/modules/mention.js +17 -19
- package/lib/public/modules/pane-bridge.js +9 -0
- package/lib/public/modules/profile.js +4 -5
- package/lib/public/modules/project-logs-ambient.js +238 -0
- package/lib/public/modules/project-logs-render.js +359 -0
- package/lib/public/modules/project-logs.js +328 -0
- package/lib/public/modules/project-settings.js +34 -28
- package/lib/public/modules/project-switcher.js +11 -5
- package/lib/public/modules/project-workspace-assignment.js +23 -0
- package/lib/public/modules/scheduler.js +17 -3
- package/lib/public/modules/search-clay-chat.js +402 -0
- package/lib/public/modules/server-settings.js +14 -12
- package/lib/public/modules/session-actions.js +1 -1
- package/lib/public/modules/sidebar-mates.js +56 -552
- package/lib/public/modules/sidebar-mobile.js +12 -73
- package/lib/public/modules/sidebar-presence.js +37 -0
- package/lib/public/modules/sidebar-sessions.js +25 -1
- package/lib/public/modules/split-pair-ui.js +13 -13
- package/lib/public/modules/split-view.js +7 -0
- package/lib/public/modules/sticky-notes.js +106 -53
- package/lib/public/modules/tool-input-composition.js +48 -0
- package/lib/public/modules/tool-llm-status.js +167 -0
- package/lib/public/modules/tool-palette.js +76 -4
- package/lib/public/modules/tool-renderer-advanced.js +285 -0
- package/lib/public/modules/tool-renderer-chart.js +158 -0
- package/lib/public/modules/tool-renderer-semantics.js +35 -0
- package/lib/public/modules/tool-renderer.js +464 -0
- package/lib/public/modules/tool-runtime.js +309 -0
- package/lib/public/modules/tool-ui-evaluator.js +97 -0
- package/lib/public/modules/tool-ui-tree.js +21 -0
- package/lib/public/modules/tui-attention.js +10 -0
- package/lib/public/modules/user-settings.js +16 -23
- package/lib/public/modules/vendor-login.js +287 -0
- package/lib/public/modules/worker-proposal.js +2 -2
- package/lib/public/modules/workspace-assignment-card.js +149 -0
- package/lib/public/modules/workspace-assignment-routing.js +4 -0
- package/lib/public/style.css +14 -2
- package/lib/runtime-env.js +65 -0
- package/lib/sdk-bridge.js +120 -32
- package/lib/sdk-message-processor.js +34 -13
- package/lib/server-home-capsule-creation.js +36 -0
- package/lib/server-home-chat-events.js +287 -0
- package/lib/server-home-chat.js +518 -0
- package/lib/server-home-clay-entry.js +65 -0
- package/lib/server-home-clay-session-links.js +26 -0
- package/lib/server-home-debate-planning.js +214 -0
- package/lib/server-home-debates.js +137 -0
- package/lib/server-home-mate-creation.js +261 -0
- package/lib/server-home-models.js +241 -0
- package/lib/server-home-preferences.js +61 -0
- package/lib/server-mates.js +37 -0
- package/lib/server-tools.js +377 -0
- package/lib/server.js +166 -59
- package/lib/session-pair-mcp-server.js +6 -6
- package/lib/sessions.js +22 -4
- package/lib/tool-capsule-source.js +142 -0
- package/lib/tool-control-mcp-server.js +126 -0
- package/lib/tool-llm.js +48 -0
- package/lib/tool-storage.js +77 -0
- package/lib/tool-ui-spec-advanced.js +82 -0
- package/lib/tool-ui-spec.js +261 -0
- package/lib/tools-registry.js +286 -0
- package/lib/users-home-dock-preferences.js +77 -0
- package/lib/users-home-surface-preferences.js +99 -0
- package/lib/users-preferences.js +4 -7
- package/lib/users.js +12 -0
- package/lib/whats-new-content.js +3 -3
- package/lib/workspace-assignment-service.js +420 -0
- package/lib/workspace-query-mcp-server.js +154 -0
- package/lib/workspace-query-service.js +492 -0
- package/lib/ws-schema.js +107 -12
- package/lib/yoke/adapters/acp.js +2 -1
- package/lib/yoke/adapters/antigravity.js +2 -1
- package/lib/yoke/adapters/claude-worker.js +11 -4
- package/lib/yoke/adapters/claude.js +141 -46
- package/lib/yoke/adapters/codex.js +79 -11
- package/lib/yoke/adapters/kiro.js +2 -1
- package/lib/yoke/claude-user-input.js +38 -0
- package/lib/yoke/codex-app-server.js +20 -2
- package/lib/yoke/codex-background-tasks.js +8 -2
- package/lib/yoke/codex-user-input.js +64 -0
- package/lib/yoke/complete-once.js +164 -0
- package/lib/yoke/index.js +5 -1
- package/lib/yoke/interface.js +19 -0
- package/lib/yoke/mcp-bridge-server.js +2 -6
- package/lib/yoke/user-input.js +254 -0
- package/package.json +4 -3
- package/lib/public/css/home-chat.css +0 -380
- package/lib/public/modules/home-chat.js +0 -438
- package/lib/server-clay-home.js +0 -245
package/lib/public/css/input.css
CHANGED
|
@@ -667,49 +667,103 @@
|
|
|
667
667
|
position: relative;
|
|
668
668
|
}
|
|
669
669
|
|
|
670
|
+
/* Sidebar session-row badge. Formerly shared its rule with the composer's
|
|
671
|
+
background-tasks chip; it is standalone now that the composer bar no longer
|
|
672
|
+
uses a filled numeric badge. */
|
|
673
|
+
.session-background-task-count {
|
|
674
|
+
display: inline-flex;
|
|
675
|
+
align-items: center;
|
|
676
|
+
justify-content: center;
|
|
677
|
+
min-width: 16px;
|
|
678
|
+
height: 16px;
|
|
679
|
+
padding: 0 4px;
|
|
680
|
+
border-radius: 8px;
|
|
681
|
+
background: var(--accent);
|
|
682
|
+
color: var(--bg);
|
|
683
|
+
font-size: 10px;
|
|
684
|
+
font-weight: 700;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/* --- Background tasks status line (above the composer) ---
|
|
688
|
+
Reads as a calm status line that belongs to the input surface: subtle
|
|
689
|
+
border, no fill, muted text. Progress is conveyed by the animated dots
|
|
690
|
+
rather than by color or size. */
|
|
670
691
|
.background-tasks-bar {
|
|
671
692
|
max-width: var(--content-width);
|
|
672
|
-
margin: 0 auto
|
|
673
|
-
border: 1px solid var(--border);
|
|
674
|
-
border-radius:
|
|
675
|
-
background:
|
|
693
|
+
margin: 0 auto 6px;
|
|
694
|
+
border: 1px solid var(--border-subtle);
|
|
695
|
+
border-radius: 10px;
|
|
696
|
+
background: transparent;
|
|
676
697
|
overflow: hidden;
|
|
698
|
+
transition: border-color .15s ease, background-color .15s ease;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.background-tasks-bar:hover,
|
|
702
|
+
.background-tasks-bar.expanded {
|
|
703
|
+
border-color: var(--border);
|
|
704
|
+
background: var(--input-bg);
|
|
677
705
|
}
|
|
678
706
|
|
|
679
707
|
.background-tasks-toggle {
|
|
680
708
|
width: 100%;
|
|
681
709
|
display: flex;
|
|
682
710
|
align-items: center;
|
|
683
|
-
gap:
|
|
684
|
-
padding:
|
|
711
|
+
gap: 9px;
|
|
712
|
+
padding: 7px 11px;
|
|
685
713
|
border: 0;
|
|
686
714
|
background: transparent;
|
|
687
|
-
color: var(--text-
|
|
715
|
+
color: var(--text-muted);
|
|
688
716
|
cursor: pointer;
|
|
689
717
|
font: inherit;
|
|
718
|
+
font-size: 12px;
|
|
690
719
|
text-align: left;
|
|
691
720
|
}
|
|
692
721
|
|
|
693
|
-
.background-tasks-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
722
|
+
.background-tasks-toggle:hover { color: var(--text-secondary); }
|
|
723
|
+
.background-tasks-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: 10px; }
|
|
724
|
+
|
|
725
|
+
.background-tasks-summary { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
726
|
+
|
|
727
|
+
/* Quiet three-dot activity indicator. Same motion as the Home debate dots
|
|
728
|
+
(home-debate-planning.css) but muted instead of accent-colored, since this
|
|
729
|
+
is ambient status rather than something asking to be read. */
|
|
730
|
+
.background-tasks-activity { display: inline-flex; align-items: center; gap: 3px; color: var(--text-muted); flex: none; }
|
|
731
|
+
.background-tasks-activity i { width: 4px; height: 4px; border-radius: 50%; background: currentColor; animation: background-tasks-pulse 1.4s ease-in-out infinite; }
|
|
732
|
+
.background-tasks-activity i:nth-child(2) { animation-delay: .18s; }
|
|
733
|
+
.background-tasks-activity i:nth-child(3) { animation-delay: .36s; }
|
|
734
|
+
@keyframes background-tasks-pulse { 0%, 70%, 100% { opacity: .28; } 35% { opacity: .95; } }
|
|
735
|
+
|
|
736
|
+
.background-tasks-chevron { display: inline-flex; flex: none; color: var(--text-muted); transition: transform .15s ease; }
|
|
737
|
+
.background-tasks-chevron i { width: 14px; height: 14px; }
|
|
738
|
+
.background-tasks-bar.expanded .background-tasks-chevron { transform: rotate(90deg); }
|
|
739
|
+
|
|
740
|
+
.background-tasks-list { padding: 0 11px 7px; }
|
|
741
|
+
.background-task-row { display: flex; align-items: center; gap: 9px; padding: 7px 0; border-top: 1px solid var(--border-subtle); font-size: 12px; }
|
|
742
|
+
.background-task-icon { display: inline-flex; flex: none; color: var(--text-muted); }
|
|
743
|
+
.background-task-icon i { width: 13px; height: 13px; }
|
|
744
|
+
.background-task-description { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-secondary); }
|
|
745
|
+
/* Housekeeping group: visible so the user can see what Clay runs on its own,
|
|
746
|
+
but subordinate to the work they actually asked for. */
|
|
747
|
+
.background-tasks-section-label { padding: 9px 0 1px; border-top: 1px solid var(--border-subtle); color: var(--text-muted); font-size: 10px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; }
|
|
748
|
+
.background-tasks-section-label + .background-task-row { border-top: 0; }
|
|
749
|
+
.background-task-row.ambient .background-task-description { color: var(--text-muted); }
|
|
750
|
+
.background-task-row.ambient .background-task-icon { opacity: .7; }
|
|
751
|
+
.background-task-meta { display: inline-flex; align-items: center; gap: 7px; flex: none; color: var(--text-muted); }
|
|
752
|
+
.background-task-type { font-size: 11px; }
|
|
753
|
+
.background-task-elapsed { font-variant-numeric: tabular-nums; font-size: 11px; min-width: 44px; text-align: right; }
|
|
754
|
+
.background-task-stop { flex: none; border: 1px solid var(--border-subtle); border-radius: 6px; padding: 3px 8px; background: transparent; color: var(--text-muted); cursor: pointer; font: inherit; font-size: 11px; }
|
|
755
|
+
.background-task-stop:hover { color: var(--text); border-color: var(--border); }
|
|
756
|
+
.background-task-stop:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
757
|
+
|
|
758
|
+
@media (prefers-reduced-motion: reduce) {
|
|
759
|
+
.background-tasks-activity i { animation: none; opacity: .7; }
|
|
760
|
+
.background-tasks-bar, .background-tasks-chevron { transition: none; }
|
|
705
761
|
}
|
|
706
762
|
|
|
707
|
-
|
|
708
|
-
.background-task-
|
|
709
|
-
.background-task-
|
|
710
|
-
|
|
711
|
-
.background-task-stop { border: 1px solid var(--border); border-radius: 5px; padding: 3px 7px; background: transparent; color: var(--text-secondary); cursor: pointer; font: inherit; font-size: 12px; }
|
|
712
|
-
.background-task-stop:hover { color: var(--text); border-color: var(--text-muted); }
|
|
763
|
+
@media (max-width: 600px) {
|
|
764
|
+
.background-task-meta { gap: 5px; }
|
|
765
|
+
.background-task-type { display: none; }
|
|
766
|
+
}
|
|
713
767
|
|
|
714
768
|
#input-row {
|
|
715
769
|
display: flex;
|
package/lib/public/css/mates.css
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
.mate-sidebar-avatar,
|
|
3
3
|
.mate-collapsed-avatar,
|
|
4
4
|
.dm-bubble-avatar,
|
|
5
|
-
.dm-bubble-avatar-me
|
|
6
|
-
.home-hub-mate-avatar {
|
|
5
|
+
.dm-bubble-avatar-me {
|
|
7
6
|
image-rendering: -webkit-optimize-contrast;
|
|
8
7
|
image-rendering: smooth;
|
|
9
8
|
-webkit-backface-visibility: hidden;
|
|
@@ -502,17 +501,11 @@
|
|
|
502
501
|
background: var(--border, #333);
|
|
503
502
|
}
|
|
504
503
|
|
|
505
|
-
/*
|
|
504
|
+
/* Mate colors are muted in the generated source; custom images stay intact. */
|
|
506
505
|
.icon-strip-mate .icon-strip-user-avatar {
|
|
507
506
|
border-radius: 8px;
|
|
508
|
-
filter: saturate(0.65);
|
|
509
|
-
}
|
|
510
|
-
.icon-strip-mate:hover .icon-strip-user-avatar,
|
|
511
|
-
.icon-strip-mate.mention-active .icon-strip-user-avatar {
|
|
512
|
-
filter: saturate(1);
|
|
513
507
|
}
|
|
514
508
|
.icon-strip-mate.active .icon-strip-user-avatar {
|
|
515
|
-
filter: saturate(1);
|
|
516
509
|
box-shadow: 0 0 0 2px var(--accent);
|
|
517
510
|
border-radius: 8px;
|
|
518
511
|
}
|
|
@@ -2916,31 +2909,11 @@ body.mate-dm-active .activity-inline:not(.mention-activity-bar):not(.mate-pre-ac
|
|
|
2916
2909
|
}
|
|
2917
2910
|
}
|
|
2918
2911
|
|
|
2919
|
-
/* ===
|
|
2920
|
-
/*
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
other users) but greys out and disables the Mates-specific bits. */
|
|
2925
|
-
|
|
2926
|
-
/* Always hide pure-Mates UI: rotating switch hint, individual mate
|
|
2927
|
-
avatars in the icon strip, the home-hub mates strip, and the
|
|
2928
|
-
"Ask Mate" button in the chat input. These never contain anything
|
|
2929
|
-
but mates, so they collapse in both modes. */
|
|
2930
|
-
body.mates-disabled .icon-strip-mate,
|
|
2931
|
-
body.mates-disabled #icon-strip-hint-mate,
|
|
2932
|
-
body.mates-disabled #home-hub-mates,
|
|
2933
|
-
body.mates-disabled #ask-mate-btn {
|
|
2934
|
-
display: none !important;
|
|
2935
|
-
}
|
|
2936
|
-
|
|
2937
|
-
/* Single-user only: collapse the whole icon-strip mate wrapper since it
|
|
2938
|
-
shares space with the user-strip but has no other users to display in
|
|
2939
|
-
single-user mode. The DM picker stays visible in both modes so the
|
|
2940
|
-
user always has a way to discover the toggle (single-user can't reach
|
|
2941
|
-
the picker today since the + button lives inside the wrapper, but if
|
|
2942
|
-
that ever changes the same disabled UX applies). */
|
|
2943
|
-
body.mates-disabled:not(.is-multi-user) #icon-strip-mate-section {
|
|
2912
|
+
/* === Project Mate DM gate === */
|
|
2913
|
+
/* This preference hides only legacy/project-local Mate DM shortcuts.
|
|
2914
|
+
Home, Mate mentions, creation, debates, and memory remain available. */
|
|
2915
|
+
body.project-mate-dms-disabled .icon-strip-mate,
|
|
2916
|
+
body.project-mate-dms-disabled #icon-strip-hint-mate {
|
|
2944
2917
|
display: none !important;
|
|
2945
2918
|
}
|
|
2946
2919
|
|
package/lib/public/css/pane.css
CHANGED
|
@@ -135,7 +135,7 @@ body.pane-mode #input-area {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
.split-pair-role-driver { color: var(--accent); background: color-mix(in srgb, var(--accent) 13%, transparent); }
|
|
138
|
-
.split-pair-role-worker { color: var(--text-secondary); background: var(--bg-alt); }
|
|
138
|
+
.split-pair-role-split-worker { color: var(--text-secondary); background: var(--bg-alt); }
|
|
139
139
|
|
|
140
140
|
/* Pair roles are status labels. Control remains with the Driver through MCP. */
|
|
141
141
|
|
|
@@ -175,90 +175,10 @@
|
|
|
175
175
|
color: var(--text);
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
/* --- Hub playbook cards --- */
|
|
179
|
-
.hub-playbooks {
|
|
180
|
-
animation: hubCardIn 0.4s ease 0.20s both;
|
|
181
|
-
}
|
|
182
|
-
.hub-playbooks-grid {
|
|
183
|
-
display: flex;
|
|
184
|
-
gap: 8px;
|
|
185
|
-
flex-wrap: wrap;
|
|
186
|
-
}
|
|
187
|
-
.hub-playbook-card {
|
|
188
|
-
display: flex;
|
|
189
|
-
align-items: center;
|
|
190
|
-
gap: 10px;
|
|
191
|
-
padding: 10px 14px;
|
|
192
|
-
background: rgba(var(--overlay-rgb), 0.03);
|
|
193
|
-
border: 1px solid var(--border-subtle);
|
|
194
|
-
border-radius: 10px;
|
|
195
|
-
cursor: pointer;
|
|
196
|
-
transition: background 0.15s, border-color 0.15s;
|
|
197
|
-
flex: 1;
|
|
198
|
-
min-width: 180px;
|
|
199
|
-
}
|
|
200
|
-
.hub-playbook-card:hover {
|
|
201
|
-
background: rgba(var(--overlay-rgb), 0.07);
|
|
202
|
-
border-color: var(--accent);
|
|
203
|
-
}
|
|
204
|
-
.hub-playbook-card.completed {
|
|
205
|
-
background: rgba(76, 175, 80, 0.08);
|
|
206
|
-
border-color: rgba(76, 175, 80, 0.25);
|
|
207
|
-
}
|
|
208
|
-
.hub-playbook-card.completed:hover {
|
|
209
|
-
background: rgba(76, 175, 80, 0.14);
|
|
210
|
-
border-color: rgba(76, 175, 80, 0.4);
|
|
211
|
-
}
|
|
212
|
-
.hub-playbook-card-icon {
|
|
213
|
-
font-size: 18px;
|
|
214
|
-
flex-shrink: 0;
|
|
215
|
-
}
|
|
216
|
-
.hub-playbook-card-body {
|
|
217
|
-
flex: 1;
|
|
218
|
-
min-width: 0;
|
|
219
|
-
}
|
|
220
|
-
.hub-playbook-card-title {
|
|
221
|
-
font-size: 13px;
|
|
222
|
-
font-weight: 600;
|
|
223
|
-
color: var(--text);
|
|
224
|
-
}
|
|
225
|
-
.hub-playbook-card-desc {
|
|
226
|
-
font-size: 11px;
|
|
227
|
-
color: var(--text-dimmer);
|
|
228
|
-
overflow: hidden;
|
|
229
|
-
text-overflow: ellipsis;
|
|
230
|
-
white-space: nowrap;
|
|
231
|
-
}
|
|
232
|
-
.hub-playbook-card-check {
|
|
233
|
-
color: var(--success);
|
|
234
|
-
font-size: 14px;
|
|
235
|
-
flex-shrink: 0;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/* --- Tip "Try it" button (inline after text) --- */
|
|
239
|
-
.hub-tip-try {
|
|
240
|
-
display: inline;
|
|
241
|
-
padding: 0;
|
|
242
|
-
border: none;
|
|
243
|
-
background: none;
|
|
244
|
-
color: var(--accent);
|
|
245
|
-
font-size: inherit;
|
|
246
|
-
font-weight: 600;
|
|
247
|
-
cursor: pointer;
|
|
248
|
-
margin-left: 6px;
|
|
249
|
-
font-family: inherit;
|
|
250
|
-
}
|
|
251
|
-
.hub-tip-try:hover {
|
|
252
|
-
background: var(--accent-12);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
178
|
/* --- Mobile --- */
|
|
256
179
|
@media (max-width: 768px) {
|
|
257
180
|
.playbook-modal {
|
|
258
181
|
width: 95vw;
|
|
259
182
|
border-radius: 12px;
|
|
260
183
|
}
|
|
261
|
-
.hub-playbook-card {
|
|
262
|
-
min-width: 140px;
|
|
263
|
-
}
|
|
264
184
|
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/* Project Logs — restrained, factual project ledger. */
|
|
2
|
+
|
|
3
|
+
/* Wide screens: bounded workbench window beside #app, matching the geometry of
|
|
4
|
+
the document viewer and the terminal. */
|
|
5
|
+
@media (min-width: 1024px) {
|
|
6
|
+
#project-logs-panel {
|
|
7
|
+
width: 50%;
|
|
8
|
+
max-width: 720px;
|
|
9
|
+
min-width: 360px;
|
|
10
|
+
height: calc(100% - 16px);
|
|
11
|
+
min-height: 0;
|
|
12
|
+
align-self: center;
|
|
13
|
+
margin: 8px 8px 8px 10px;
|
|
14
|
+
border: 1px solid var(--border);
|
|
15
|
+
border-radius: 12px;
|
|
16
|
+
background: var(--bg);
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
box-shadow:
|
|
22
|
+
4px 8px 18px rgba(var(--shadow-rgb), 0.14),
|
|
23
|
+
2px 2px 4px rgba(var(--shadow-rgb), 0.08),
|
|
24
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
|
25
|
+
animation: workbench-panel-in 0.18s cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
26
|
+
transition: max-width 0.2s ease, width 0.2s ease, box-shadow 0.2s ease;
|
|
27
|
+
}
|
|
28
|
+
#project-logs-panel.hidden { display: none; }
|
|
29
|
+
#project-logs-panel.project-logs-wide {
|
|
30
|
+
width: 70%;
|
|
31
|
+
max-width: 1200px;
|
|
32
|
+
}
|
|
33
|
+
#project-logs-panel.panel-fullscreen {
|
|
34
|
+
width: 100%;
|
|
35
|
+
max-width: none;
|
|
36
|
+
min-width: 0;
|
|
37
|
+
height: 100%;
|
|
38
|
+
margin: 0;
|
|
39
|
+
border: 0;
|
|
40
|
+
border-radius: 0;
|
|
41
|
+
box-shadow: none;
|
|
42
|
+
animation: none;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media (prefers-reduced-motion: reduce) {
|
|
47
|
+
#project-logs-panel { animation: none; }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Narrow screens: full overlay, like the other workbench tools. */
|
|
51
|
+
@media (max-width: 1023px) {
|
|
52
|
+
#project-logs-panel {
|
|
53
|
+
position: fixed;
|
|
54
|
+
top: 0;
|
|
55
|
+
left: 0;
|
|
56
|
+
right: 0;
|
|
57
|
+
bottom: 0;
|
|
58
|
+
padding-top: var(--safe-top);
|
|
59
|
+
padding-bottom: var(--safe-bottom);
|
|
60
|
+
background: var(--bg);
|
|
61
|
+
z-index: 300;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
}
|
|
66
|
+
#project-logs-panel.hidden { display: none; }
|
|
67
|
+
/* Sizing controls are meaningless in the overlay presentation. */
|
|
68
|
+
#project-logs-wide,
|
|
69
|
+
#project-logs-fullscreen { display: none; }
|
|
70
|
+
}
|
|
71
|
+
.project-logs-topbar {
|
|
72
|
+
height: 48px;
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
gap: 12px;
|
|
76
|
+
padding: 0 16px;
|
|
77
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
78
|
+
flex: 0 0 auto;
|
|
79
|
+
}
|
|
80
|
+
.project-logs-title { display: inline-flex; align-items: center; gap: 7px; font-weight: 700; color: var(--text); }
|
|
81
|
+
.project-logs-title .lucide { width: 15px; color: var(--accent); }
|
|
82
|
+
.project-logs-subtitle { flex: 1; color: var(--text-dimmer); font-size: 12px; }
|
|
83
|
+
.project-logs-icon-btn {
|
|
84
|
+
border: 1px solid var(--border);
|
|
85
|
+
border-radius: 7px;
|
|
86
|
+
background: var(--bg-alt);
|
|
87
|
+
color: var(--text-secondary);
|
|
88
|
+
font: inherit;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
.project-logs-icon-btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
|
|
92
|
+
.project-logs-icon-btn.hidden { display: none; }
|
|
93
|
+
.project-logs-icon-btn .lucide { width: 15px; }
|
|
94
|
+
.project-logs-icon-btn[aria-pressed="true"] { border-color: var(--accent); color: var(--accent); }
|
|
95
|
+
.project-logs-icon-btn:disabled { opacity: 0.4; cursor: default; }
|
|
96
|
+
.project-logs-window-actions { display: inline-flex; align-items: center; gap: 6px; }
|
|
97
|
+
/* --- Ambient edge handle ---------------------------------------------
|
|
98
|
+
A slim notch on the right workbench boundary, offered only where a real
|
|
99
|
+
pointer can hover. Touch keeps the explicit toolbar route. */
|
|
100
|
+
@media (min-width: 1024px) {
|
|
101
|
+
.project-logs-handle {
|
|
102
|
+
position: absolute;
|
|
103
|
+
top: 50%;
|
|
104
|
+
right: 0;
|
|
105
|
+
transform: translateY(-50%);
|
|
106
|
+
width: 14px;
|
|
107
|
+
height: 88px;
|
|
108
|
+
padding: 0;
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
justify-content: center;
|
|
112
|
+
border: 1px solid var(--border);
|
|
113
|
+
border-right: 0;
|
|
114
|
+
border-radius: 8px 0 0 8px;
|
|
115
|
+
background: var(--bg-alt);
|
|
116
|
+
cursor: pointer;
|
|
117
|
+
z-index: 40;
|
|
118
|
+
transition: width 0.16s ease, background 0.16s ease;
|
|
119
|
+
}
|
|
120
|
+
.project-logs-handle:hover,
|
|
121
|
+
.project-logs-handle:focus-visible { width: 18px; background: var(--bg); }
|
|
122
|
+
.project-logs-handle:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
123
|
+
.project-logs-handle.hidden { display: none; }
|
|
124
|
+
.project-logs-handle-notch {
|
|
125
|
+
width: 3px;
|
|
126
|
+
height: 34px;
|
|
127
|
+
border-radius: 999px;
|
|
128
|
+
background: var(--border);
|
|
129
|
+
transition: background 0.16s ease, height 0.16s ease;
|
|
130
|
+
}
|
|
131
|
+
.project-logs-handle:hover .project-logs-handle-notch { background: var(--text-dimmer); }
|
|
132
|
+
/* Unread: a brighter notch, no motion of its own. */
|
|
133
|
+
.project-logs-handle.has-unread .project-logs-handle-notch { background: var(--accent); height: 46px; }
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* Touch and narrow viewports never depend on hover. */
|
|
137
|
+
@media (max-width: 1023px) {
|
|
138
|
+
.project-logs-handle { display: none; }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* A preview is the same pane, revealed but uncommitted. */
|
|
142
|
+
#project-logs-panel.project-logs-previewing { box-shadow: 0 0 0 1px var(--accent), 4px 8px 24px rgba(var(--shadow-rgb), 0.2); }
|
|
143
|
+
|
|
144
|
+
/* --- Unread cues --- */
|
|
145
|
+
#project-logs-btn.project-logs-unread { color: var(--accent); }
|
|
146
|
+
#project-logs-count { background: var(--accent); color: #fff; }
|
|
147
|
+
|
|
148
|
+
@keyframes project-logs-pulse {
|
|
149
|
+
0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 45%, transparent); }
|
|
150
|
+
70% { box-shadow: 0 0 0 7px transparent; }
|
|
151
|
+
100% { box-shadow: 0 0 0 0 transparent; }
|
|
152
|
+
}
|
|
153
|
+
.project-logs-pulse { animation: project-logs-pulse 1.1s ease-out 2; }
|
|
154
|
+
|
|
155
|
+
/* Reduced motion keeps the static unread marker and drops every flourish. */
|
|
156
|
+
@media (prefers-reduced-motion: reduce) {
|
|
157
|
+
.project-logs-pulse { animation: none; }
|
|
158
|
+
.project-logs-handle { transition: none; }
|
|
159
|
+
.project-logs-handle-notch { transition: none; }
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* --- Ledger toolbar --- */
|
|
163
|
+
.project-logs-toolbar { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--border-subtle); flex: 0 0 auto; }
|
|
164
|
+
.project-logs-toolbar.hidden { display: none; }
|
|
165
|
+
.project-logs-search { flex: 1; min-width: 0; height: 32px; display: flex; align-items: center; gap: 7px; padding: 0 9px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text-dimmer); }
|
|
166
|
+
.project-logs-search .lucide { width: 14px; flex: 0 0 auto; }
|
|
167
|
+
.project-logs-search input { width: 100%; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-size: 12px; }
|
|
168
|
+
.project-logs-filter { height: 32px; max-width: 42%; padding: 0 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text-secondary); font: inherit; font-size: 12px; cursor: pointer; }
|
|
169
|
+
|
|
170
|
+
/* --- Ledger list: full pane, chronological, commit-history feel --- */
|
|
171
|
+
.project-logs-list { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 0; }
|
|
172
|
+
.project-logs-list.hidden { display: none; }
|
|
173
|
+
.project-log-row { width: 100%; display: block; padding: 12px 14px; border: 0; border-bottom: 1px solid var(--border-subtle); background: transparent; color: inherit; text-align: left; cursor: pointer; }
|
|
174
|
+
.project-log-row:hover { background: rgba(var(--overlay-rgb), 0.05); }
|
|
175
|
+
.project-log-row:last-child { border-bottom: 0; }
|
|
176
|
+
.project-log-row-head { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; }
|
|
177
|
+
.project-log-row-title { flex: 1; min-width: 0; font-size: 13px; font-weight: 650; color: var(--text); }
|
|
178
|
+
.project-log-row-summary { margin: 5px 0 0; color: var(--text-secondary); font-size: 12px; line-height: 1.5; }
|
|
179
|
+
.project-log-row-meta { margin-top: 6px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
180
|
+
.project-logs-list-empty { padding: 32px 20px; color: var(--text-dimmer); font-size: 12px; text-align: center; line-height: 1.6; }
|
|
181
|
+
|
|
182
|
+
/* Category chip and priority signal. Categories are project-defined, so the
|
|
183
|
+
chip is deliberately neutral: no per-category selectors and no exhaustive
|
|
184
|
+
class list, because the vocabulary is not known at build time. Priority
|
|
185
|
+
carries the only stable colour, since urgency is a fixed scale. */
|
|
186
|
+
.project-log-chip { flex: 0 0 auto; max-width: 14em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 2px 7px; border-radius: 999px; background: rgba(var(--overlay-rgb), 0.08); color: var(--text-secondary); font-size: 10px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; }
|
|
187
|
+
.project-log-priority { flex: 0 0 auto; padding: 2px 6px; border-radius: 5px; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; }
|
|
188
|
+
.project-log-priority[data-priority="important"] { background: color-mix(in srgb, #f5a524 18%, transparent); color: #f5a524; }
|
|
189
|
+
.project-log-priority[data-priority="urgent"] { background: color-mix(in srgb, #e5484d 20%, transparent); color: #e5484d; }
|
|
190
|
+
|
|
191
|
+
/* --- Entry detail: full pane, replaces the list --- */
|
|
192
|
+
.project-logs-detail { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; }
|
|
193
|
+
.project-logs-detail.hidden { display: none; }
|
|
194
|
+
.project-log-document { max-width: 820px; margin: 0 auto; padding: 22px 22px 40px; }
|
|
195
|
+
#project-logs-panel.panel-fullscreen .project-log-document { padding: clamp(28px, 5vw, 64px); }
|
|
196
|
+
.project-log-doc-chips { display: flex; align-items: center; gap: 7px; margin-bottom: 10px; }
|
|
197
|
+
.project-log-document h1 { margin: 0 0 8px; color: var(--text); font-family: var(--font-display); font-size: clamp(20px, 2.4vw, 28px); line-height: 1.2; }
|
|
198
|
+
.project-log-doc-summary { margin: 0 0 10px; color: var(--text-secondary); font-size: 13px; line-height: 1.55; }
|
|
199
|
+
.project-log-byline { margin: 0 0 18px; padding-bottom: 16px; border-bottom: 1px solid var(--border-subtle); color: var(--text-dimmer); font-size: 11px; font-family: var(--font-mono); }
|
|
200
|
+
.project-log-markdown { line-height: 1.65; }
|
|
201
|
+
|
|
202
|
+
/* --- Discussion --- */
|
|
203
|
+
.project-log-discussion { margin-top: 30px; padding-top: 18px; border-top: 1px solid var(--border-subtle); }
|
|
204
|
+
.project-log-discussion h2 { margin: 0 0 12px; color: var(--text); font-family: var(--font-display); font-size: 15px; }
|
|
205
|
+
.project-log-discussion-empty { margin: 0; color: var(--text-dimmer); font-size: 12px; }
|
|
206
|
+
.project-log-comment { padding: 10px 12px; margin-bottom: 8px; border: 1px solid var(--border-subtle); border-radius: 9px; background: var(--bg-alt); }
|
|
207
|
+
.project-log-comment-meta { margin: 0 0 5px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
208
|
+
.project-log-comment-body { margin: 0; color: var(--text); font-size: 13px; line-height: 1.55; white-space: pre-wrap; }
|
|
209
|
+
.project-log-comment-status-badge { display: inline-block; margin-top: 7px; padding: 2px 7px; border-radius: 999px; background: rgba(var(--overlay-rgb), 0.08); color: var(--text-dimmer); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; }
|
|
210
|
+
.project-log-comment-status-badge[data-status="incorporated"] { background: color-mix(in srgb, var(--brand-green) 16%, transparent); color: var(--brand-green); }
|
|
211
|
+
.project-log-comment-status-badge[data-status="clarification-needed"] { background: color-mix(in srgb, #f5a524 18%, transparent); color: #f5a524; }
|
|
212
|
+
.project-log-comment-response { margin-top: 9px; padding: 8px 10px; border-left: 2px solid var(--accent); background: rgba(var(--overlay-rgb), 0.04); border-radius: 0 7px 7px 0; }
|
|
213
|
+
.project-log-comment-response-meta { margin: 0 0 4px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
214
|
+
.project-log-comment-response-body { margin: 0; color: var(--text); font-size: 12.5px; line-height: 1.55; white-space: pre-wrap; }
|
|
215
|
+
.project-log-history { margin-top: 26px; padding-top: 16px; border-top: 1px solid var(--border-subtle); }
|
|
216
|
+
.project-log-history h2 { margin: 0 0 10px; color: var(--text); font-family: var(--font-display); font-size: 14px; }
|
|
217
|
+
.project-log-history-list { margin: 0; padding: 0; list-style: none; display: grid; gap: 5px; }
|
|
218
|
+
.project-log-history-row { display: flex; align-items: baseline; gap: 8px; font-size: 11.5px; }
|
|
219
|
+
.project-log-history-label { flex: 0 0 auto; color: var(--text-dimmer); font-family: var(--font-mono); font-weight: 700; }
|
|
220
|
+
.project-log-history-text { color: var(--text-secondary); }
|
|
221
|
+
.project-log-history-reason { color: var(--text-dimmer); font-style: italic; }
|
|
222
|
+
.project-log-comment-form { display: grid; gap: 8px; margin-top: 18px; }
|
|
223
|
+
.project-log-comment-form label { color: var(--text-secondary); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }
|
|
224
|
+
.project-log-comment-form textarea { width: 100%; min-height: 80px; padding: 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-alt); color: var(--text); font: inherit; font-size: 13px; line-height: 1.55; resize: vertical; box-sizing: border-box; }
|
|
225
|
+
.project-log-comment-form textarea:focus { outline: 2px solid color-mix(in srgb, var(--accent) 35%, transparent); border-color: var(--accent); }
|
|
226
|
+
.project-log-comment-status { min-height: 16px; margin: 0; color: var(--text-dimmer); font-size: 11px; }
|
|
227
|
+
.project-log-comment-actions { display: flex; justify-content: flex-end; }
|
|
228
|
+
.project-log-comment-actions button { padding: 7px 14px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text-secondary); font: inherit; font-weight: 700; font-size: 12px; cursor: pointer; }
|
|
229
|
+
.project-log-comment-actions button.primary { border-color: var(--accent); background: var(--accent); color: #fff; }
|
|
230
|
+
|
|
231
|
+
@media (max-width: 768px) {
|
|
232
|
+
.project-logs-subtitle { display: none; }
|
|
233
|
+
.project-log-document { padding: 18px 16px 32px; }
|
|
234
|
+
}
|