clay-server 5.0.2-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-file-path.js +2 -3
- package/lib/project-knowledge.js +315 -136
- package/lib/project-mate-creation-proposal.js +1 -0
- package/lib/project-request-access.js +13 -1
- 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/filebrowser.css +10 -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/filebrowser.js +28 -8
- 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/html-preview.js +19 -0
- 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,
|
package/lib/project-file-path.js
CHANGED
|
@@ -12,9 +12,8 @@ function inside(base, target) {
|
|
|
12
12
|
return relative !== ".." && !relative.startsWith(".." + path.sep) && !path.isAbsolute(relative);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
// Scope is server-derived for each request.
|
|
16
|
-
//
|
|
17
|
-
// Unmapped multi-user deployments retain the project and symlink boundary.
|
|
15
|
+
// Scope is server-derived for each request. File-viewer operations follow the
|
|
16
|
+
// executing OS identity within the account-derived project boundary, if any.
|
|
18
17
|
function resolveFilePath(cwd, requested, scope) {
|
|
19
18
|
if (typeof requested !== "string" || !requested || requested.indexOf("\0") !== -1) {
|
|
20
19
|
throw failure("INVALID_PATH", "Invalid file path");
|