clay-server 5.1.0-beta.1 → 5.1.0-beta.2
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/LICENSES/README.md +4 -0
- package/LICENSES/dicebear-avatars.md +16 -0
- package/lib/daemon-project-access.js +7 -1
- package/lib/daemon.js +2 -0
- package/lib/dicebear-avatar.js +62 -0
- package/lib/knowledge-db-service.js +175 -0
- package/lib/knowledge-db-validation.js +0 -0
- package/lib/knowledge-document-index.js +49 -0
- package/lib/knowledge-draft-store.js +56 -0
- package/lib/knowledge-file-store.js +199 -0
- package/lib/knowledge-markdown.js +128 -0
- package/lib/mate-knowledge-mcp-server.js +29 -6
- package/lib/mate-knowledge-service.js +23 -2
- package/lib/mate-knowledge-sync.js +36 -21
- package/lib/mate-workspace-color.js +4 -0
- package/lib/mates.js +18 -0
- package/lib/project-connection.js +36 -2
- package/lib/project-debate-proposal.js +6 -0
- package/lib/project-debate-workspace.js +43 -0
- package/lib/project-debate.js +1 -0
- package/lib/project-knowledge.js +315 -136
- package/lib/project-mate-creation-proposal.js +1 -0
- package/lib/project-sessions.js +39 -2
- package/lib/project-user-knowledge.js +60 -0
- package/lib/project.js +59 -18
- package/lib/public/app.js +73 -34
- package/lib/public/clay-studio-wordmark-bold.svg +20 -0
- package/lib/public/css/clay-workspace.css +105 -0
- package/lib/public/css/debates-workbench.css +47 -0
- package/lib/public/css/home-debate-live.css +26 -0
- package/lib/public/css/home-hub.css +3 -1
- package/lib/public/css/home-mate-model-picker.css +15 -131
- package/lib/public/css/home-mate-settings.css +168 -16
- package/lib/public/css/icon-strip.css +249 -32
- package/lib/public/css/mate-conversation.css +176 -0
- package/lib/public/css/mate-knowledge-workbench.css +118 -0
- package/lib/public/css/mate-workspace-color.css +16 -0
- package/lib/public/css/mates.css +28 -28
- package/lib/public/css/messages.css +1 -114
- package/lib/public/css/mobile-nav.css +16 -16
- package/lib/public/css/overlays.css +8 -0
- package/lib/public/css/project-logs.css +7 -0
- package/lib/public/css/project-mate-creation.css +105 -0
- package/lib/public/css/right-workbench.css +3 -3
- package/lib/public/css/session-folders.css +80 -21
- package/lib/public/css/sidebar.css +183 -107
- package/lib/public/css/title-bar.css +151 -0
- package/lib/public/css/worker-delegation.css +47 -0
- package/lib/public/css/worker-proposal.css +72 -150
- package/lib/public/css/you.css +74 -0
- package/lib/public/index.html +33 -101
- package/lib/public/modules/account-island.js +230 -0
- package/lib/public/modules/app-cursors.js +19 -43
- package/lib/public/modules/app-debate-ui.js +4 -3
- package/lib/public/modules/app-header.js +106 -0
- package/lib/public/modules/app-message-router.js +12 -3
- package/lib/public/modules/app-messages.js +34 -9
- package/lib/public/modules/app-notifications.js +4 -7
- package/lib/public/modules/app-projects.js +5 -38
- package/lib/public/modules/app-rendering.js +12 -13
- package/lib/public/modules/avatar.js +25 -9
- package/lib/public/modules/chat-render-runtime.js +16 -4
- package/lib/public/modules/command-palette.js +2 -15
- package/lib/public/modules/cursor-sharing-preference.js +3 -3
- package/lib/public/modules/debate-controls.js +299 -0
- package/lib/public/modules/debate.js +2 -0
- package/lib/public/modules/debates-workbench.js +339 -0
- package/lib/public/modules/default-ai.js +81 -65
- package/lib/public/modules/home-debate-controls.js +18 -289
- package/lib/public/modules/home-mate-avatar-editor.js +228 -0
- package/lib/public/modules/home-mate-color-picker.js +66 -0
- package/lib/public/modules/home-mate-creation.js +1 -1
- package/lib/public/modules/home-mate-instructions.js +90 -0
- package/lib/public/modules/home-mate-model-picker.js +80 -271
- package/lib/public/modules/home-mate-profile-editor.js +72 -0
- package/lib/public/modules/home-mate-settings.js +118 -125
- package/lib/public/modules/home-shell.js +3 -0
- package/lib/public/modules/home-surface-boot.js +1 -9
- package/lib/public/modules/icon-strip-tooltip.js +95 -0
- package/lib/public/modules/knowledge-db-edit-state.js +35 -0
- package/lib/public/modules/knowledge-db-workbench.js +234 -0
- package/lib/public/modules/knowledge-history-state.js +55 -0
- package/lib/public/modules/knowledge-markdown-editor.js +57 -0
- package/lib/public/modules/knowledge-preview-links.js +70 -0
- package/lib/public/modules/knowledge-workbench-shell.js +21 -0
- package/lib/public/modules/mate-knowledge-workbench-state.js +174 -0
- package/lib/public/modules/mate-knowledge-workbench.js +500 -0
- package/lib/public/modules/mate-knowledge.js +11 -3
- package/lib/public/modules/mate-management.js +54 -10
- package/lib/public/modules/mate-sidebar.js +11 -1
- package/lib/public/modules/mate-workspace-color.js +33 -0
- package/lib/public/modules/mention.js +5 -13
- package/lib/public/modules/profile.js +51 -18
- package/lib/public/modules/project-chat-identity.js +79 -0
- package/lib/public/modules/project-debate-planning-workspace.js +250 -0
- package/lib/public/modules/project-debate-workspace.js +185 -0
- package/lib/public/modules/project-header-identity.js +127 -0
- package/lib/public/modules/project-logs-render.js +9 -4
- package/lib/public/modules/project-mate-creation-workspace.js +414 -0
- package/lib/public/modules/project-mate-navigation.js +238 -0
- package/lib/public/modules/project-session-navigation.js +29 -0
- package/lib/public/modules/project-switcher.js +6 -8
- package/lib/public/modules/projects-hub-view.js +5 -6
- package/lib/public/modules/projects-hub.js +2 -6
- package/lib/public/modules/qrcode.js +27 -8
- package/lib/public/modules/search-clay-chat.js +8 -11
- package/lib/public/modules/session-activity-tooltip.js +12 -0
- package/lib/public/modules/session-create-form.js +86 -14
- package/lib/public/modules/session-create.js +50 -7
- package/lib/public/modules/session-list-visibility.js +41 -0
- package/lib/public/modules/session-presence-ui.js +4 -1
- package/lib/public/modules/session-title-marquee.js +51 -0
- package/lib/public/modules/sidebar-mates.js +3 -50
- package/lib/public/modules/sidebar-mobile.js +63 -60
- package/lib/public/modules/sidebar-projects.js +84 -97
- package/lib/public/modules/sidebar-session-folders-ui.js +2 -2
- package/lib/public/modules/sidebar-session-hierarchy.js +149 -70
- package/lib/public/modules/sidebar-sessions.js +49 -50
- package/lib/public/modules/sidebar.js +11 -13
- package/lib/public/modules/thinking-lifecycle.js +7 -6
- package/lib/public/modules/tool-palette-order.js +4 -3
- package/lib/public/modules/tool-palette.js +13 -3
- package/lib/public/modules/tools.js +22 -22
- package/lib/public/modules/worker-proposal.js +42 -8
- package/lib/public/modules/worker-runtime-picker.js +115 -0
- package/lib/public/modules/you-activity.js +121 -0
- package/lib/public/modules/you.js +251 -0
- package/lib/public/style.css +16 -8
- package/lib/public/vendor/codemirror/LICENSE +21 -0
- package/lib/public/vendor/codemirror/codemirror.css +344 -0
- package/lib/public/vendor/codemirror/codemirror.js +9884 -0
- package/lib/public/vendor/codemirror/continuelist.js +101 -0
- package/lib/public/vendor/codemirror/markdown.js +886 -0
- package/lib/public/vendor/codemirror/show-hint.css +37 -0
- package/lib/public/vendor/codemirror/show-hint.js +523 -0
- package/lib/sdk-bridge.js +15 -3
- package/lib/server-admin.js +11 -0
- package/lib/server-home-chat-events.js +1 -1
- package/lib/server-home-chat.js +25 -3
- package/lib/server-home-debate-planning.js +4 -1
- package/lib/server-home-debates.js +2 -0
- package/lib/server-home-mate-creation.js +4 -1
- package/lib/server-mate-instructions.js +44 -0
- package/lib/server-mates.js +12 -3
- package/lib/server-palette.js +1 -1
- package/lib/server-settings.js +65 -1
- package/lib/server-user-knowledge.js +119 -0
- package/lib/server.js +21 -1
- package/lib/session-visibility.js +7 -2
- package/lib/sessions.js +32 -6
- package/lib/user-knowledge-service.js +167 -0
- package/lib/users-permissions.js +7 -0
- package/lib/users-project-mate-filter-preferences.js +39 -0
- package/lib/users.js +6 -0
- package/lib/workspace-query-access.js +4 -1
- package/lib/ws-schema.js +50 -0
- package/package.json +10 -1
|
@@ -6,6 +6,7 @@ var emailAccounts = require("./email-accounts");
|
|
|
6
6
|
var { getCodexConfig } = require("./codex-defaults");
|
|
7
7
|
var yoke = require("./yoke");
|
|
8
8
|
var permissionModes = require("./session-permission-mode");
|
|
9
|
+
var sessionProvenance = require("./session-provenance");
|
|
9
10
|
|
|
10
11
|
function dispatchMessageSafely(handleMessage, sendTo, slug, ws, msg) {
|
|
11
12
|
try {
|
|
@@ -45,6 +46,36 @@ function buildInitialModelInfo(sm, initialVendor, initialModel, initialModels, s
|
|
|
45
46
|
};
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
function buildRestoredSessionMessage(active, initialEffort, capabilities, permissionState) {
|
|
50
|
+
return {
|
|
51
|
+
type: "session_switched",
|
|
52
|
+
id: active.localId,
|
|
53
|
+
sessionOriginId: active.sessionOriginId || null,
|
|
54
|
+
sessionRole: sessionProvenance.isWorker(active) ? "worker" : "driver",
|
|
55
|
+
cliSessionId: active.cliSessionId || null,
|
|
56
|
+
loop: active.loop || null,
|
|
57
|
+
vendor: active.vendor || null,
|
|
58
|
+
model: active.model || null,
|
|
59
|
+
effort: active.effort || initialEffort || null,
|
|
60
|
+
hasHistory: !!(active.history && active.history.length > 0),
|
|
61
|
+
capabilities: capabilities,
|
|
62
|
+
isProcessing: !!active.isProcessing,
|
|
63
|
+
mateCreation: active.mateCreationMode === true,
|
|
64
|
+
mateCreationPhase: active.homeMateCreationPhase || null,
|
|
65
|
+
debatePlanning: active.debateSetupMode === true,
|
|
66
|
+
debatePhase: active.homeDebatePhase || null,
|
|
67
|
+
mode: active.mode || "gui",
|
|
68
|
+
terminalId: typeof active.terminalId === "number" ? active.terminalId : null,
|
|
69
|
+
runtimeMode: active.runtimeMode || null,
|
|
70
|
+
runtimeTerminalId: typeof active.runtimeTerminalId === "number" ? active.runtimeTerminalId : null,
|
|
71
|
+
tuiSuspended: !!active.tuiSuspended,
|
|
72
|
+
permissionMode: permissionState.requestedPermissionMode,
|
|
73
|
+
effectivePermissionMode: permissionState.effectivePermissionMode,
|
|
74
|
+
permissionCapabilities: permissionState.permissionCapabilities,
|
|
75
|
+
mcpPermissionModeOverrides: permissionState.mcpPermissionModeOverrides,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
48
79
|
/**
|
|
49
80
|
* Attach connection/disconnection handlers to a project context.
|
|
50
81
|
*
|
|
@@ -63,6 +94,8 @@ function attachConnection(ctx) {
|
|
|
63
94
|
var cwd = ctx.cwd;
|
|
64
95
|
var slug = ctx.slug;
|
|
65
96
|
var isMate = ctx.isMate;
|
|
97
|
+
var mateId = ctx.mateId || null;
|
|
98
|
+
var mateDisplayName = ctx.mateDisplayName || "";
|
|
66
99
|
var osUsers = ctx.osUsers;
|
|
67
100
|
var debug = ctx.debug;
|
|
68
101
|
var dangerouslySkipPermissions = ctx.dangerouslySkipPermissions;
|
|
@@ -184,7 +217,7 @@ function attachConnection(ctx) {
|
|
|
184
217
|
sm.saveSessionFile(restoredActive);
|
|
185
218
|
}
|
|
186
219
|
var initialModels = (sm.modelsByVendor && sm.modelsByVendor[initialVendor]) || sm.availableModels || [];
|
|
187
|
-
sendTo(ws, { type: "info", cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, dangerouslySkipPermissions: dangerouslySkipPermissions, osUsers: osUsers, lanHost: lanHost, projectCount: _filteredProjects.length, projects: _filteredProjects, projectOwnerId: projectOwnerId, ownerLocked: ownerLocked, vendors: yoke.VENDOR_REGISTRY });
|
|
220
|
+
sendTo(ws, { type: "info", cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, dangerouslySkipPermissions: dangerouslySkipPermissions, osUsers: osUsers, lanHost: lanHost, projectCount: _filteredProjects.length, projects: _filteredProjects, projectOwnerId: projectOwnerId, ownerLocked: ownerLocked, vendors: yoke.VENDOR_REGISTRY, isMate: isMate, mateId: isMate ? mateId : null, mateDisplayName: isMate ? (mateDisplayName || title || project || "Mate") : "" });
|
|
188
221
|
if (typeof sendCursorSharingState === "function") sendCursorSharingState(ws);
|
|
189
222
|
// Update notifications are pushed on a scheduled interval (see
|
|
190
223
|
// scheduleUpdateBroadcast). We no longer push on connect to avoid
|
|
@@ -262,7 +295,7 @@ function attachConnection(ctx) {
|
|
|
262
295
|
}
|
|
263
296
|
var _vendorCaps = (sm.capabilitiesByVendor && sm.capabilitiesByVendor[active.vendor || sm.defaultVendor || "claude"]) || {};
|
|
264
297
|
var activePermissionState = permissionModes.clientState(active, sm.currentPermissionMode, sm.defaultVendor);
|
|
265
|
-
sendTo(ws,
|
|
298
|
+
sendTo(ws, buildRestoredSessionMessage(active, initialEffort, _vendorCaps, activePermissionState));
|
|
266
299
|
if (ctx.autonomousRun) sendTo(ws, { type: "autonomous_run_state", sessionId: active.localId, run: ctx.autonomousRun.project(active.autonomousRun) });
|
|
267
300
|
// Send per-session context sources
|
|
268
301
|
var sessionSources = loadContextSources(slug, active.localId);
|
|
@@ -382,5 +415,6 @@ function attachConnection(ctx) {
|
|
|
382
415
|
module.exports = {
|
|
383
416
|
attachConnection: attachConnection,
|
|
384
417
|
buildInitialModelInfo: buildInitialModelInfo,
|
|
418
|
+
buildRestoredSessionMessage: buildRestoredSessionMessage,
|
|
385
419
|
dispatchMessageSafely: dispatchMessageSafely,
|
|
386
420
|
};
|
|
@@ -227,6 +227,12 @@ function attachDebateProposal(ctx) {
|
|
|
227
227
|
|
|
228
228
|
var found = findPendingProposal(ws, msg);
|
|
229
229
|
if (!found) return true;
|
|
230
|
+
if (msg.sessionId != null && (String(found.pending.session.localId) !== String(msg.sessionId)
|
|
231
|
+
|| String(ws._clayActiveSession) !== String(msg.sessionId)
|
|
232
|
+
|| (found.pending.session.ownerId && (!ws._clayUser || ws._clayUser.id !== found.pending.session.ownerId)))) {
|
|
233
|
+
ctx.sendTo(ws, { type: "debate_error", error: "This proposal belongs to a different session." });
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
230
236
|
startApprovedProposal(ws, msg, found).catch(function (error) {
|
|
231
237
|
delete pendingProposals[found.key];
|
|
232
238
|
rejectProposal(ws, found.pending, error && error.message ? error.message : "The selected debate models could not be verified.");
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Project-bound access to the same participation actions used by Home debates.
|
|
2
|
+
function handleProjectDebateControl(ws, msg, session, engine, sendTo) {
|
|
3
|
+
if (msg.type !== "project_debate_control" && msg.type !== "project_debate_state") return false;
|
|
4
|
+
var userId = ws && ws._clayUser && ws._clayUser.id;
|
|
5
|
+
var valid = session && msg.sessionId != null && String(session.localId) === String(msg.sessionId)
|
|
6
|
+
&& (!session.ownerId || session.ownerId === userId);
|
|
7
|
+
if (msg.type === "project_debate_state") {
|
|
8
|
+
sendTo(ws, { type: "project_debate_state", sessionId: msg.sessionId, header: valid ? debateHeader(session) : null });
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
var ok = false;
|
|
12
|
+
if (valid) {
|
|
13
|
+
if (session.homeDebatePlanning) ok = engine.handleHomeControl(ws, msg, session);
|
|
14
|
+
else if (msg.action === "hand_raise") { engine.handleDebateHandRaise(ws, session); ok = true; }
|
|
15
|
+
else if (msg.action === "stop") ok = engine.handleDebateStop(ws, session);
|
|
16
|
+
else if (msg.action === "cancel_stop") ok = engine.handleDebateCancelStop(ws, session);
|
|
17
|
+
else if (msg.action === "user_floor") { engine.handleDebateUserFloorResponse(ws, msg, session); ok = true; }
|
|
18
|
+
else if (msg.action === "conclude" || msg.action === "resume") {
|
|
19
|
+
engine.handleDebateConcludeResponse(ws, { action: msg.action === "resume" ? "continue" : msg.response, text: msg.text || "" }, session);
|
|
20
|
+
ok = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
sendTo(ws, { type: "project_debate_control_result", sessionId: msg.sessionId, ok: !!ok, error: ok ? null : "This debate action is no longer available. Reopen the debate and try again." });
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
function debateHeader(session) {
|
|
27
|
+
var header = null;
|
|
28
|
+
(session.history || []).forEach(function (event) {
|
|
29
|
+
if (event.type === "debate_started") header = Object.assign({}, event, { role: "debate_header", phase: "live", round: 1, interaction: null, handRaised: false });
|
|
30
|
+
if (!header) return;
|
|
31
|
+
if (event.round) header.round = event.round;
|
|
32
|
+
if (event.type === "debate_conclude_confirm") header.interaction = "conclude";
|
|
33
|
+
if (event.type === "debate_user_floor") header.interaction = "user_floor";
|
|
34
|
+
if (event.type === "debate_user_floor_done") { header.interaction = null; header.handRaised = false; }
|
|
35
|
+
if (event.type === "debate_hand_raised") header.handRaised = true;
|
|
36
|
+
if (event.type === "debate_stop_requested") header.stopping = true;
|
|
37
|
+
if (event.type === "debate_stop_cancelled") header.stopping = false;
|
|
38
|
+
if (event.type === "debate_turn" || event.type === "debate_resumed") { header.interaction = null; header.phase = "live"; }
|
|
39
|
+
if (event.type === "debate_ended") { header.phase = event.reason === "interrupted" ? "interrupted" : "ended"; header.reason = event.reason; header.interaction = null; header.stopping = false; }
|
|
40
|
+
});
|
|
41
|
+
return header;
|
|
42
|
+
}
|
|
43
|
+
module.exports = { handleProjectDebateControl: handleProjectDebateControl, debateHeader: debateHeader };
|
package/lib/project-debate.js
CHANGED
|
@@ -1859,6 +1859,7 @@ function attachDebate(ctx) {
|
|
|
1859
1859
|
handleDebateHandRaise: handleDebateHandRaise,
|
|
1860
1860
|
handleDebateComment: handleDebateComment,
|
|
1861
1861
|
handleDebateStop: handleDebateStop,
|
|
1862
|
+
handleDebateCancelStop: handleDebateCancelStop,
|
|
1862
1863
|
handleDebateConcludeResponse: handleDebateConcludeResponse,
|
|
1863
1864
|
handleDebateConfirmBrief: handleDebateConfirmBrief,
|
|
1864
1865
|
handleDebateUserFloorResponse: handleDebateUserFloorResponse,
|