clay-server 5.2.0-beta.6 → 5.2.0-beta.7
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/clay-control-presentation-binding.js +96 -0
- package/lib/clay-control-presentation.js +128 -0
- package/lib/clay-control-target-projection.js +26 -0
- package/lib/clay-mate-chat.js +1 -0
- package/lib/clay-mate-knowledge.js +1 -1
- package/lib/clay-product-control-tools.js +1 -1
- package/lib/clay-product-control.js +22 -12
- package/lib/clay-project-records.js +2 -1
- package/lib/clay-scheduling.js +1 -1
- package/lib/clay-screen-controls.js +13 -5
- package/lib/clay-workspace-controls.js +2 -1
- package/lib/contextual-screen-snapshot.js +38 -0
- package/lib/mate-context-service.js +138 -0
- package/lib/mate-context-tools.js +21 -0
- package/lib/project-connection.js +8 -5
- package/lib/project-control-git-view.js +12 -0
- package/lib/project-filesystem.js +5 -1
- package/lib/project-http.js +3 -0
- package/lib/project-notifications.js +5 -4
- package/lib/project-product-control.js +3 -1
- package/lib/project-scheduled-messages.js +4 -4
- package/lib/project-scheduled-task-control.js +1 -1
- package/lib/project-session-document.js +20 -5
- package/lib/project-shared-browser.js +22 -5
- package/lib/project-studio-presentation.js +58 -0
- package/lib/project-user-message.js +36 -0
- package/lib/project-workspace-query.js +11 -1
- package/lib/project.js +24 -7
- package/lib/public/app.js +24 -0
- package/lib/public/appearance-bootstrap.js +2 -0
- package/lib/public/css/contextual-clay.css +240 -0
- package/lib/public/modules/app-favicon.js +7 -7
- package/lib/public/modules/app-message-router.js +5 -1
- package/lib/public/modules/app-messages.js +14 -1
- package/lib/public/modules/app-notifications.js +10 -3
- package/lib/public/modules/app-projects.js +3 -0
- package/lib/public/modules/clay-control-activity.js +214 -0
- package/lib/public/modules/clay-control-copy.js +36 -0
- package/lib/public/modules/clay-control-detail-targets.js +44 -0
- package/lib/public/modules/clay-control-object-targets.js +52 -0
- package/lib/public/modules/clay-control-target-visibility.js +12 -0
- package/lib/public/modules/clay-control-targets.js +44 -0
- package/lib/public/modules/clay-navigation-render.js +52 -0
- package/lib/public/modules/clay-owner-navigation.js +11 -2
- package/lib/public/modules/clay-session-links.js +31 -0
- package/lib/public/modules/clay-studio-bridge.js +20 -0
- package/lib/public/modules/clay-studio-document.js +67 -0
- package/lib/public/modules/clay-studio-render.js +144 -0
- package/lib/public/modules/clay-tool-presentation.js +4 -0
- package/lib/public/modules/command-palette.js +26 -31
- package/lib/public/modules/contextual-ask-session.js +26 -0
- package/lib/public/modules/contextual-clay-geometry.js +155 -0
- package/lib/public/modules/contextual-clay-session.js +130 -0
- package/lib/public/modules/contextual-clay-workspace.js +157 -0
- package/lib/public/modules/contextual-clay.js +237 -0
- package/lib/public/modules/contextual-composer.js +91 -0
- package/lib/public/modules/contextual-mate-context.js +115 -0
- package/lib/public/modules/contextual-mate-hint.js +40 -0
- package/lib/public/modules/contextual-mate-identity.js +23 -0
- package/lib/public/modules/contextual-mate-sessions.js +134 -0
- package/lib/public/modules/contextual-search.js +137 -0
- package/lib/public/modules/contextual-session-citations.js +58 -0
- package/lib/public/modules/filebrowser.js +20 -1
- package/lib/public/modules/generation-stop.js +8 -5
- package/lib/public/modules/git-panel.js +3 -1
- package/lib/public/modules/icon-strip-tooltip.js +2 -1
- package/lib/public/modules/input.js +35 -1
- package/lib/public/modules/issues-render.js +3 -2
- package/lib/public/modules/knowledge-db-workbench.js +4 -4
- package/lib/public/modules/markdown.js +2 -34
- package/lib/public/modules/mate-knowledge-workbench.js +1 -1
- package/lib/public/modules/message-delivery.js +10 -0
- package/lib/public/modules/pane-bridge.js +2 -2
- package/lib/public/modules/pending-message-queue.js +1 -0
- package/lib/public/modules/product-review.js +26 -0
- package/lib/public/modules/project-chat-identity.js +13 -4
- package/lib/public/modules/project-logs-render.js +3 -0
- package/lib/public/modules/project-mate-navigation.js +58 -21
- package/lib/public/modules/scheduled-tasks.js +2 -0
- package/lib/public/modules/search-clay-chat.js +5 -454
- package/lib/public/modules/shared-browser.js +2 -0
- package/lib/public/modules/sidebar-mobile.js +4 -3
- package/lib/public/modules/sidebar-projects.js +1 -0
- package/lib/public/modules/sidebar-sessions.js +1 -0
- package/lib/public/modules/split-view.js +7 -16
- package/lib/public/modules/terminal.js +9 -0
- package/lib/public/modules/tools.js +4 -1
- package/lib/public/modules/wireframe-workbench.js +5 -2
- package/lib/public/style.css +2 -0
- package/lib/sdk-bridge.js +4 -0
- package/lib/server-contextual-clay-settings.js +40 -0
- package/lib/server-contextual-mate-sessions.js +70 -0
- package/lib/server-home-chat.js +7 -1
- package/lib/server-home-clay-entry.js +23 -4
- package/lib/server-home-clay-session-links.js +12 -0
- package/lib/server-owner-ui.js +49 -8
- package/lib/server-settings.js +2 -0
- package/lib/server.js +17 -0
- package/lib/sessions.js +8 -1
- package/lib/terminal-manager.js +18 -11
- package/lib/users-contextual-clay-preferences.js +31 -0
- package/lib/users.js +3 -0
- package/lib/workspace-assignment-service.js +25 -0
- package/lib/workspace-query-mcp-server.js +1 -1
- package/lib/ws-request.js +1 -0
- package/lib/ws-schema.js +10 -0
- package/lib/yoke/claude-hook-installer.js +4 -0
- package/package.json +1 -1
|
@@ -19,6 +19,8 @@ function attachWorkspaceAssignmentService(ctx) {
|
|
|
19
19
|
var records = [];
|
|
20
20
|
var unsubscribers = {};
|
|
21
21
|
var pendingRestartReplay = {};
|
|
22
|
+
var presentations = new WeakMap();
|
|
23
|
+
var presentationTargets = new WeakMap();
|
|
22
24
|
|
|
23
25
|
function recordFile(userId) {
|
|
24
26
|
return storageDir ? path.join(storageDir, userStorageKey(userId)) : null;
|
|
@@ -130,7 +132,27 @@ function attachWorkspaceAssignmentService(ctx) {
|
|
|
130
132
|
return { project: project, manager: manager, session: session };
|
|
131
133
|
}
|
|
132
134
|
|
|
135
|
+
function present(record, principal) {
|
|
136
|
+
try {
|
|
137
|
+
var display = ctx.getPresentation && ctx.getPresentation(principal), project = exactTarget(record);
|
|
138
|
+
if (!display || !project) return;
|
|
139
|
+
var view = { project: project, session: null, origin: null }; presentationTargets.set(record, view);
|
|
140
|
+
if (record.delivery === 'follow_up') project.getSessionManager().sessions.forEach(function (session) { if (ctx.sessionRef(record.targetProjectSlug, session) === record.targetSessionRef) { view.session = session; view.origin = session.sessionOriginId; } });
|
|
141
|
+
var projection = require('./clay-control-target-projection');
|
|
142
|
+
var target = view.session ? { kind: 'session', projectSlug: record.targetProjectSlug, sessionId: view.session.localId, sessionOriginId: view.origin } : { kind: 'project', projectSlug: record.targetProjectSlug, runtimeId: projection.runtime(project.getSessionManager()) };
|
|
143
|
+
var observer = display.track('assignment', record.delivery === 'follow_up' ? 'follow_up' : 'assign', target, function () {
|
|
144
|
+
if (exactTarget(record) !== project || view.session && (project.getSessionManager().sessions.get(view.session.localId) !== view.session || view.session.sessionOriginId !== view.origin || (view.session.ownerId || null) !== (record.userId || null))) throw new Error('Assignment target changed.');
|
|
145
|
+
}, 'review');
|
|
146
|
+
if (observer) { presentations.set(record, observer); var expiry = setTimeout(function () { presentations.delete(record); }, 300000); expiry.unref(); }
|
|
147
|
+
} catch (error) { /* Presentation never changes the assignment decision. */ }
|
|
148
|
+
}
|
|
133
149
|
function emit(record, eventType) {
|
|
150
|
+
var observer = presentations.get(record);
|
|
151
|
+
if (observer) {
|
|
152
|
+
if (record.status === 'starting') observer.phase('queued');
|
|
153
|
+
else if (record.status === 'running') observer.phase('running');
|
|
154
|
+
else if (record.status !== 'proposed') { observer.finish({ status: record.status === 'interrupted' ? 'failed' : record.status, outcome: record.status === 'interrupted' ? 'uncertain' : undefined }); presentations.delete(record); }
|
|
155
|
+
}
|
|
134
156
|
var source = exactSource(record);
|
|
135
157
|
if (!source) return;
|
|
136
158
|
source.manager.sendAndRecord(source.session, {
|
|
@@ -193,6 +215,7 @@ function attachWorkspaceAssignmentService(ctx) {
|
|
|
193
215
|
if (!exactSource(record)) throw new Error("Source conversation is no longer available.");
|
|
194
216
|
records.push(record);
|
|
195
217
|
saveUser(record.userId);
|
|
218
|
+
present(record, principal);
|
|
196
219
|
emit(record, "project_assignment_proposal");
|
|
197
220
|
return publicRecord(record);
|
|
198
221
|
}
|
|
@@ -229,6 +252,7 @@ function attachWorkspaceAssignmentService(ctx) {
|
|
|
229
252
|
if (!exactSource(record)) throw new Error("Source conversation is no longer available.");
|
|
230
253
|
records.push(record);
|
|
231
254
|
saveUser(record.userId);
|
|
255
|
+
present(record, principal);
|
|
232
256
|
emit(record, "project_assignment_proposal");
|
|
233
257
|
return publicRecord(record);
|
|
234
258
|
}
|
|
@@ -267,6 +291,7 @@ function attachWorkspaceAssignmentService(ctx) {
|
|
|
267
291
|
}
|
|
268
292
|
|
|
269
293
|
function watch(record, manager, session) {
|
|
294
|
+
var view = presentationTargets.get(record); if (view) { view.session = session; view.origin = session.sessionOriginId; var observer = presentations.get(record); if (observer && observer.target) observer.target({ kind: 'session', projectSlug: record.targetProjectSlug, sessionId: session.localId, sessionOriginId: session.sessionOriginId }); }
|
|
270
295
|
var unsubscribe = manager.subscribeSession(session.localId, function (event) {
|
|
271
296
|
if (event.type === "session_id") {
|
|
272
297
|
record.targetSessionRef = ctx.sessionRef(record.targetProjectSlug, session);
|
|
@@ -32,7 +32,7 @@ function handler(bound, method) {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
var SESSION_CITATION = "
|
|
35
|
+
var SESSION_CITATION = " Cite returned sessions as Markdown links: [short human label](session:OPAQUE_REFERENCE), replacing the entire target with the exact returned sessionRef. Do not prepend a project name, change the opaque reference, or wrap citations in backticks/code. For a specific returned entry, append #entry-<entryIndex> using its exact returned entry index. Legacy [clayos/<sessionRef> — short label] remains supported. Labels are presentation only; Clay Studio resolves the exact reference with the authenticated owner's permissions.";
|
|
36
36
|
|
|
37
37
|
function commonTools(bound) {
|
|
38
38
|
return [
|
package/lib/ws-request.js
CHANGED
package/lib/ws-schema.js
CHANGED
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
* Use it as a reference when adding new message types.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
+
// message.contextualSnapshot: version=1, viewId, nullable projectTitle,
|
|
15
|
+
// conversationTitle/projectSlug (160 characters), nullable positive sessionId,
|
|
16
|
+
// screen=Home|Project|Direct message. Private canonical owner delivery only.
|
|
17
|
+
// Persisted user_message metadata is echoed in message_ack only after recording;
|
|
18
|
+
// queued admission ACK has no snapshot. Never part of user text/pastes or authority.
|
|
14
19
|
var schema = {
|
|
15
20
|
|
|
16
21
|
// -----------------------------------------------------------------------
|
|
@@ -62,6 +67,7 @@ var schema = {
|
|
|
62
67
|
"project_assignment_response": { direction: "c2s", handler: "lib/workspace-assignment-service.js", description: "Approve or cancel an exact-session cross-project assignment proposal" },
|
|
63
68
|
"home_clay_session_resolve": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Resolve an opaque Mate session reference through the exact bound source session" },
|
|
64
69
|
"home_clay_session_target": { direction: "s2c", handler: "lib/public/modules/command-palette.js", description: "Return an owner-validated navigation target for a rendered Mate session reference" },
|
|
70
|
+
"home_clay_contextual_session": { direction: "s2c", handler: "lib/public/modules/contextual-search.js", description: "Return the exact fresh canonical session for an idempotent contextual Ask request; does not submit or execute a message" },
|
|
65
71
|
"issues_list": { direction: "c2s", handler: "lib/project-issues.js", description: "Project Issues issues list" },
|
|
66
72
|
"issue_read": { direction: "c2s", handler: "lib/project-issues.js", description: "Project Issues issue read" },
|
|
67
73
|
"issue_create": { direction: "c2s", handler: "lib/project-issues.js", description: "Project Issues issue create" },
|
|
@@ -482,6 +488,7 @@ var schema = {
|
|
|
482
488
|
"term_resized": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Terminal was resized" },
|
|
483
489
|
"term_exited": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Terminal process exited" },
|
|
484
490
|
"term_closed": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Terminal session was closed" },
|
|
491
|
+
"term_control_projection": { direction: "s2c", handler: "lib/public/modules/terminal.js", description: "Authoritative terminal identity/revision after owner resize without echoing resize input" },
|
|
485
492
|
"term_list": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Full list of open terminals" },
|
|
486
493
|
"term_error": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Terminal error (e.g. access denied)" },
|
|
487
494
|
"shell_command": { direction: "c2s", handler: "lib/project-shell-command.js", description: "Run a one-shot shell command for agent context" },
|
|
@@ -785,6 +792,7 @@ var schema = {
|
|
|
785
792
|
// -----------------------------------------------------------------------
|
|
786
793
|
"home_mate_open": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Open or restore the selected mate's embedded chat session" },
|
|
787
794
|
"home_clay_ask": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Start a fresh builtin Clay conversation from the global search drawer" },
|
|
795
|
+
"contextual_mate_sessions_result": { direction: "s2c", handler: "lib/public/modules/contextual-mate-sessions.js", description: "Exact owner-private saved Mate conversation list or selection receipt; no transcript tap or underlying navigation" },
|
|
788
796
|
"home_mate_sessions_list": { direction: "c2s", handler: "lib/server-home-chat.js", description: "List the current user's conversations with the selected mate" },
|
|
789
797
|
"home_mate_session_open": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Open one explicit conversation with the selected mate" },
|
|
790
798
|
"home_mate_send": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Send a message to the selected mate from the home hub" },
|
|
@@ -814,6 +822,8 @@ var schema = {
|
|
|
814
822
|
"clay_navigation_offer": { direction: "s2c", handler: "lib/public/modules/clay-owner-navigation.js", description: "Offer one exact reviewed navigation to a selected owner connection" },
|
|
815
823
|
"clay_navigation_claim": { direction: "c2s", handler: "lib/server-owner-ui.js", description: "Claim an offered navigation with live source/target revalidation" },
|
|
816
824
|
"clay_navigation_apply": { direction: "s2c", handler: "lib/public/modules/clay-owner-navigation.js", description: "Invoke the shared conversation navigator after live claim" },
|
|
825
|
+
"clay_studio_rendered": { direction: "c2s", handler: "lib/project-studio-presentation.js", description: "Exact source-viewer workbench render receipt; no product effects" },
|
|
826
|
+
"clay_navigation_rendered": { direction: "c2s", handler: "lib/server-owner-ui.js", description: "Bounded exact-viewer rendered conversation evidence; acceptance alone remains separate" },
|
|
817
827
|
"clay_navigation_ack": { direction: "c2s", handler: "lib/server-owner-ui.js", description: "Client invocation acknowledgement; never proof of visible rendering" },
|
|
818
828
|
"context_view_get": { direction: "c2s", handler: "lib/server-context-view.js", description: "Read the authenticated user's context display preference" },
|
|
819
829
|
"context_view_set": { direction: "c2s", handler: "lib/server-context-view.js", description: "Persist the authenticated user's context display preference" },
|
|
@@ -45,6 +45,10 @@ var CLAY_MANAGED_ALLOW = [
|
|
|
45
45
|
"mcp__clay-debate__propose_debate",
|
|
46
46
|
"mcp__clay-mate-creation__propose_mate",
|
|
47
47
|
"mcp__clay-history__*",
|
|
48
|
+
"mcp__clay-workspace__read_current_context",
|
|
49
|
+
"mcp__clay-workspace__read_selected_context",
|
|
50
|
+
"mcp__clay-workspace__open_context_conversation",
|
|
51
|
+
"mcp__clay-workspace__read_context_navigation_receipt",
|
|
48
52
|
"mcp__clay-workspace__read_owner_screen",
|
|
49
53
|
"mcp__clay-workspace__inspect_owner_screen_change",
|
|
50
54
|
"mcp__clay-workspace__control_owner_screen",
|
package/package.json
CHANGED