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/ws-schema.js
CHANGED
|
@@ -39,8 +39,11 @@ var schema = {
|
|
|
39
39
|
"split_group_dissolve": { direction: "c2s", handler: "lib/session-split-groups.js", description: "Separate a split group without deleting its sessions" },
|
|
40
40
|
"split_group_set_pair": { direction: "c2s", handler: "lib/session-split-groups.js", description: "Assign Driver/Worker roles on a split group (driverId null clears them)" },
|
|
41
41
|
"pair_session_options": { direction: "c2s", handler: "lib/project-session-pair.js", description: "Request vendors/models for the pair-session dialog (response reuses the same type)" },
|
|
42
|
-
"pair_session_create": { direction: "c2s", handler: "lib/project-session-pair.js", description: "Create a Driver/Worker session pair as a split group" },
|
|
42
|
+
"pair_session_create": { direction: "c2s", handler: "lib/project-session-pair.js", description: "Create a Driver/Split Worker session pair as a split group" },
|
|
43
43
|
"worker_proposal_response": { direction: "c2s", handler: "lib/project-worker-proposal.js", description: "Accept or decline a Fable Worker suggestion with the selected runtime" },
|
|
44
|
+
"project_assignment_response": { direction: "c2s", handler: "lib/workspace-assignment-service.js", description: "Approve or cancel an exact-session cross-project assignment proposal" },
|
|
45
|
+
"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" },
|
|
46
|
+
"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" },
|
|
44
47
|
|
|
45
48
|
"session_list": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Full list of sessions for the sidebar" },
|
|
46
49
|
"session_switched": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Confirmation that active session changed" },
|
|
@@ -61,6 +64,11 @@ var schema = {
|
|
|
61
64
|
"pair_session_created": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Result of pair_session_create; carries the new group" },
|
|
62
65
|
"worker_proposal": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Inline Fable suggestion to delegate execution to a Worker" },
|
|
63
66
|
"worker_proposal_update": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Worker suggestion lifecycle update" },
|
|
67
|
+
"project_assignment_proposal": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Approval card for a new owner-bound project assignment" },
|
|
68
|
+
"project_assignment_status": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Durable project assignment lifecycle update" },
|
|
69
|
+
"project_assignment_error": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Rejected or stale project assignment response" },
|
|
70
|
+
"home_project_assignment_proposal": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Home-projected exact-session assignment approval card" },
|
|
71
|
+
"home_project_assignment_status": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Home-projected exact-session assignment lifecycle" },
|
|
64
72
|
"split_delegation": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "A pair delegation started or ended (drives the split-view flow indicator)" },
|
|
65
73
|
|
|
66
74
|
// -----------------------------------------------------------------------
|
|
@@ -163,6 +171,13 @@ var schema = {
|
|
|
163
171
|
// Auth
|
|
164
172
|
// -----------------------------------------------------------------------
|
|
165
173
|
"auth_required": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Authentication required (e.g. API key needed)" },
|
|
174
|
+
"vendor_login_start": { direction: "c2s", handler: "lib/project-vendor-login.js", description: "Start (or re-attach to) the per-vendor login terminal" },
|
|
175
|
+
"vendor_login_cancel": { direction: "c2s", handler: "lib/project-vendor-login.js", description: "Dismiss the login flow and kill its terminal" },
|
|
176
|
+
"vendor_login_state_request": { direction: "c2s", handler: "lib/project-vendor-login.js", description: "Ask for the project's active login flows" },
|
|
177
|
+
"vendor_login_ready": { direction: "s2c", handler: "lib/public/modules/vendor-login.js", description: "Login terminal is available; open/re-attach the modal to it" },
|
|
178
|
+
"vendor_login_state": { direction: "s2c", handler: "lib/public/modules/vendor-login.js", description: "Active login flows for this project (one per vendor)" },
|
|
179
|
+
"vendor_login_error": { direction: "s2c", handler: "lib/public/modules/vendor-login.js", description: "The login flow could not be started" },
|
|
180
|
+
"auth_refreshed": { direction: "s2c", handler: "lib/public/modules/vendor-login.js", description: "Login completed and the vendor adapter was restarted" },
|
|
166
181
|
|
|
167
182
|
// -----------------------------------------------------------------------
|
|
168
183
|
// Rate limiting / scheduling
|
|
@@ -242,6 +257,14 @@ var schema = {
|
|
|
242
257
|
"whats_new_state": { direction: "s2c", handler: "lib/public/modules/whats-new.js", description: "Unseen What's New entries for the connecting user" },
|
|
243
258
|
"whats_new_seen": { direction: "c2s", handler: "lib/project-sessions.js", description: "Mark a What's New entry as dismissed by the current user" },
|
|
244
259
|
"whats_new_seen_result": { direction: "s2c", handler: "lib/public/modules/whats-new.js", description: "Result of marking a What's New entry seen" },
|
|
260
|
+
"home_dock_get": { direction: "c2s", handler: "lib/server-home-preferences.js", description: "Request the current user's home dock preference" },
|
|
261
|
+
"home_dock_set": { direction: "c2s", handler: "lib/server-home-preferences.js", description: "Persist the current user's home dock preference" },
|
|
262
|
+
"home_dock_state": { direction: "s2c", handler: "lib/public/modules/home-dock.js", description: "Current user home dock preference" },
|
|
263
|
+
"home_surface_get": { direction: "c2s", handler: "lib/server-home-preferences.js", description: "Request the current user's durable primary surface and Home conversation selection" },
|
|
264
|
+
"home_surface_set": { direction: "c2s", handler: "lib/server-home-preferences.js", description: "Persist the current user's primary surface and Home conversation selection" },
|
|
265
|
+
"home_surface_state": { direction: "s2c", handler: "lib/public/modules/home-surface.js", description: "Current user primary surface and Home conversation selection" },
|
|
266
|
+
"home_debates_list": { direction: "c2s", handler: "lib/server-home-debates.js", description: "Request the current user's durable Home debate archive" },
|
|
267
|
+
"home_debates_state": { direction: "s2c", handler: "lib/public/modules/home-debates-archive.js", description: "Current user's durable Home debate archive" },
|
|
245
268
|
|
|
246
269
|
// -----------------------------------------------------------------------
|
|
247
270
|
// Process stats
|
|
@@ -379,6 +402,20 @@ var schema = {
|
|
|
379
402
|
"note_bring_front": { direction: "c2s", handler: "lib/project-user-message.js", description: "Bring a note to front (update z-order)" },
|
|
380
403
|
"notes_list": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Full list of sticky notes" },
|
|
381
404
|
|
|
405
|
+
// -----------------------------------------------------------------------
|
|
406
|
+
// Project Logs
|
|
407
|
+
// -----------------------------------------------------------------------
|
|
408
|
+
"project_logs_list": { direction: "c2s", handler: "lib/project-logs.js", description: "List or search this project's logs (project scope is bound server-side)" },
|
|
409
|
+
"project_log_read": { direction: "c2s", handler: "lib/project-logs.js", description: "Read one project log entry by opaque ref" },
|
|
410
|
+
"project_log_comment": { direction: "c2s", handler: "lib/project-logs.js", description: "Append an attributed comment to a project log entry (append-only; author comes from the connection)" },
|
|
411
|
+
"project_log_create": { direction: "c2s", handler: "lib/project-logs.js", description: "Retired. Canonical entries are written only by project agent sessions; this is always refused" },
|
|
412
|
+
"project_log_update": { direction: "c2s", handler: "lib/project-logs.js", description: "Retired. Canonical revisions are written only by project agent sessions; this is always refused" },
|
|
413
|
+
"project_logs_state": { direction: "s2c", handler: "lib/public/modules/project-logs.js", description: "Correlated project log index for a list or search request" },
|
|
414
|
+
"project_log_entry": { direction: "s2c", handler: "lib/public/modules/project-logs.js", description: "Correlated full project log entry" },
|
|
415
|
+
"project_log_commented": { direction: "s2c", handler: "lib/public/modules/project-logs.js", description: "Correlated project log entry after a comment was appended" },
|
|
416
|
+
"project_log_updated": { direction: "s2c", handler: "lib/public/modules/project-logs.js", description: "A canonical log entry was created or revised by this project's agent session (bounded ledger metadata only)" },
|
|
417
|
+
"project_logs_error": { direction: "s2c", handler: "lib/public/modules/project-logs.js", description: "Correlated project log request failure" },
|
|
418
|
+
|
|
382
419
|
// -----------------------------------------------------------------------
|
|
383
420
|
// Browser extension
|
|
384
421
|
// -----------------------------------------------------------------------
|
|
@@ -435,6 +472,30 @@ var schema = {
|
|
|
435
472
|
"mate_available_builtins": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Available built-in mates list" },
|
|
436
473
|
"mate_error": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Mate operation error" },
|
|
437
474
|
|
|
475
|
+
// -----------------------------------------------------------------------
|
|
476
|
+
// User-installed home tools
|
|
477
|
+
// -----------------------------------------------------------------------
|
|
478
|
+
"tools_list": { direction: "c2s", handler: "lib/server-tools.js", description: "List installed tool definitions" },
|
|
479
|
+
"tool_get": { direction: "c2s", handler: "lib/server-tools.js", description: "Get one installed tool definition" },
|
|
480
|
+
"tool_install": { direction: "c2s", handler: "lib/server-tools.js", description: "Install a new declarative tool" },
|
|
481
|
+
"tool_source_get": { direction: "c2s", handler: "lib/server-tools.js", description: "Read authored Capsule source for the current user" },
|
|
482
|
+
"tool_mate_access_set": { direction: "c2s", handler: "lib/server-tools.js", description: "Set whether Mates may inspect and edit one Capsule" },
|
|
483
|
+
"tool_remove": { direction: "c2s", handler: "lib/server-tools.js", description: "Remove an installed tool" },
|
|
484
|
+
"tool_storage_op": { direction: "c2s", handler: "lib/server-tools.js", description: "Run an operation against scoped tool storage" },
|
|
485
|
+
"tool_llm_op": { direction: "c2s", handler: "lib/server-tools.js", description: "Run a permission-gated vendor-neutral capsule LLM completion" },
|
|
486
|
+
"tool_llm_config_get": { direction: "c2s", handler: "lib/server-tools.js", description: "Get the concrete configured provider and model used by Capsule LLM calls" },
|
|
487
|
+
"tool_control_response": { direction: "c2s", handler: "lib/server-tools.js", description: "Resolve a mate tool-control request with browser runtime state or an error" },
|
|
488
|
+
"tools_state": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Full installed tool definitions" },
|
|
489
|
+
"tool_installed": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "An installed tool changed" },
|
|
490
|
+
"tool_source_state": { direction: "s2c", handler: "lib/public/modules/home-capsule-source.js", description: "Correlated authored Capsule source or read error" },
|
|
491
|
+
"tool_mate_access_state": { direction: "s2c", handler: "lib/public/modules/home-capsule-source.js", description: "Server-confirmed Mate editing permission" },
|
|
492
|
+
"tool_removed": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "An installed tool was removed" },
|
|
493
|
+
"tool_storage_result": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Result of a scoped tool storage operation" },
|
|
494
|
+
"tool_llm_result": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Result of a capsule LLM completion" },
|
|
495
|
+
"tool_llm_config_state": { direction: "s2c", handler: "lib/public/modules/tool-llm-status.js", description: "Concrete provider and model state for Capsule LLM calls" },
|
|
496
|
+
"tool_control_request": { direction: "s2c", handler: "lib/public/modules/home-tools.js", description: "Ask the connected home client to snapshot or drive a sandboxed tool" },
|
|
497
|
+
"tools_error": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Tool registry, runtime, or storage error" },
|
|
498
|
+
|
|
438
499
|
// -----------------------------------------------------------------------
|
|
439
500
|
// Mentions (@mate)
|
|
440
501
|
// -----------------------------------------------------------------------
|
|
@@ -458,7 +519,7 @@ var schema = {
|
|
|
458
519
|
"debate_stop": { direction: "c2s", handler: "lib/project.js", description: "Stop the current debate" },
|
|
459
520
|
"debate_conclude_response": { direction: "c2s", handler: "lib/project.js", description: "Respond to a debate conclude prompt (end or continue)" },
|
|
460
521
|
"debate_confirm_brief": { direction: "c2s", handler: "lib/project.js", description: "Confirm the debate brief and start the debate" },
|
|
461
|
-
"debate_proposal_response": { direction: "c2s", handler: "lib/project.js", description: "Respond to a debate proposal" },
|
|
522
|
+
"debate_proposal_response": { direction: "c2s", handler: "lib/project.js", description: "Respond to a debate proposal with optional per-participant model overrides" },
|
|
462
523
|
"debate_user_floor_response": { direction: "c2s", handler: "lib/project.js", description: "User submits their statement during user floor turn" },
|
|
463
524
|
"debate_preparing": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Debate is being prepared" },
|
|
464
525
|
"debate_brief_ready": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Debate brief is ready for user approval" },
|
|
@@ -467,6 +528,9 @@ var schema = {
|
|
|
467
528
|
"debate_activity": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Debate panelist activity indicator" },
|
|
468
529
|
"debate_stream": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Incremental debate response text" },
|
|
469
530
|
"debate_turn_done": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Debate turn completed with full text" },
|
|
531
|
+
"debate_tool_decision": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Moderator tool permission decision for a debate participant" },
|
|
532
|
+
"debate_stop_requested": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Debate will stop after the active turn" },
|
|
533
|
+
"debate_stop_cancelled": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Pending debate stop was cancelled" },
|
|
470
534
|
"debate_hand_raised": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "User hand raise was acknowledged" },
|
|
471
535
|
"debate_comment_queued": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "User comment was queued for injection" },
|
|
472
536
|
"debate_comment_injected": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "User comment was injected into the debate" },
|
|
@@ -556,16 +620,47 @@ var schema = {
|
|
|
556
620
|
"ralph_files_content": { direction: "s2c", handler: "lib/public/modules/app-messages.js", description: "Loop file contents (prompt and judge)" },
|
|
557
621
|
|
|
558
622
|
// -----------------------------------------------------------------------
|
|
559
|
-
//
|
|
560
|
-
// -----------------------------------------------------------------------
|
|
561
|
-
"
|
|
562
|
-
"
|
|
563
|
-
"
|
|
564
|
-
"
|
|
565
|
-
"
|
|
566
|
-
"
|
|
567
|
-
"
|
|
568
|
-
"
|
|
623
|
+
// Embedded mate chat
|
|
624
|
+
// -----------------------------------------------------------------------
|
|
625
|
+
"home_mate_open": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Open or restore the selected mate's embedded chat session" },
|
|
626
|
+
"home_clay_ask": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Start a fresh builtin Clay conversation from the global search drawer" },
|
|
627
|
+
"home_mate_sessions_list": { direction: "c2s", handler: "lib/server-home-chat.js", description: "List the current user's conversations with the selected mate" },
|
|
628
|
+
"home_mate_session_open": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Open one explicit conversation with the selected mate" },
|
|
629
|
+
"home_mate_send": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Send a message to the selected mate from the home hub" },
|
|
630
|
+
"home_mate_new_session": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Start a fresh embedded session with the selected mate, optionally with a typed creation intent" },
|
|
631
|
+
"home_mate_debate_plan": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Start a fresh server-seeded debate planning conversation with Clay using an optional prefilled topic" },
|
|
632
|
+
"home_mate_creation_plan": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Start a fresh server-seeded Mate creation interview with Clay" },
|
|
633
|
+
"home_mate_creation_question_response": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Answer an exact pending question in a Clay-led Mate creation interview" },
|
|
634
|
+
"home_mate_creation_proposal_response": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Approve or cancel an exact Mate creation proposal" },
|
|
635
|
+
"home_debate_proposal_response": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Approve or cancel an exact Home debate proposal with optional per-participant model overrides" },
|
|
636
|
+
"home_debate_question_response": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Answer the exact pending AskUserQuestion in an owned Home debate planning session" },
|
|
637
|
+
"home_debate_control": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Control or resume the exact owned Home debate session" },
|
|
638
|
+
"home_mate_close": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Tear down the embedded mate session tap" },
|
|
639
|
+
"home_mate_present": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Report whether Home is visibly presenting its active exact Mate conversation" },
|
|
640
|
+
"home_mate_memory_list": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Request a correlated read-only memory projection for one owned Mate" },
|
|
641
|
+
"home_mate_knowledge_list": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Request a correlated read-only knowledge file list for one owned Mate" },
|
|
642
|
+
"home_mate_models_get": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Request an available vendor and model catalog for the selected Mate" },
|
|
643
|
+
"home_mate_model_set": { direction: "c2s", handler: "lib/server-home-chat.js", description: "Validate and persist the Mate vendor/model, optionally applying it to an exact owned pristine Home draft" },
|
|
644
|
+
"home_mate_history": { direction: "s2c", handler: "lib/public/modules/home-mate-chat.js", description: "Selected mate's initial or refreshed chat history" },
|
|
645
|
+
"home_clay_activity": { direction: "s2c", handler: "lib/public/modules/search-clay-chat.js", description: "Sanitized progress stage for a query-bound global-search Clay conversation" },
|
|
646
|
+
"home_mate_session_identity": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Promote an active Home session from its local reference to its durable runtime identity" },
|
|
647
|
+
"home_mate_sessions_state": { direction: "s2c", handler: "lib/public/modules/home-mate-chat.js", description: "Owned visible Mate conversations with sanitized runtime identity, model, status, and timestamps" },
|
|
648
|
+
"home_mate_delta": { direction: "s2c", handler: "lib/public/modules/home-mate-chat.js", description: "Selected mate's streaming assistant text delta" },
|
|
649
|
+
"home_mate_done": { direction: "s2c", handler: "lib/public/modules/home-mate-chat.js", description: "Selected mate's turn finished" },
|
|
650
|
+
"home_debate_proposal": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Session-bound debate proposal for the active Home transcript" },
|
|
651
|
+
"home_debate_proposal_resolved": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Server-confirmed result for a Home debate proposal" },
|
|
652
|
+
"home_debate_question": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Session-bound AskUserQuestion card for Home debate planning" },
|
|
653
|
+
"home_debate_question_resolved": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Server-confirmed answer or expiry for a Home debate question" },
|
|
654
|
+
"home_debate_event": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Correlated live debate event for the active Home transcript" },
|
|
655
|
+
"home_mate_creation_question": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Session-bound question in a Clay-led Mate creation interview" },
|
|
656
|
+
"home_mate_creation_question_resolved": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Server-confirmed Mate interview answer or expiry" },
|
|
657
|
+
"home_mate_creation_proposal": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Session-bound new Mate proposal" },
|
|
658
|
+
"home_mate_creation_proposal_resolved": { direction: "s2c", handler: "lib/public/modules/app-message-router.js", description: "Server-confirmed result for a Mate creation proposal" },
|
|
659
|
+
"home_mate_error": { direction: "s2c", handler: "lib/public/modules/home-mate-chat.js", description: "Embedded mate chat error" },
|
|
660
|
+
"home_mate_memory_state": { direction: "s2c", handler: "lib/public/modules/home-mate-settings.js", description: "Selected mate's read-only memory summary and entries" },
|
|
661
|
+
"home_mate_knowledge_state": { direction: "s2c", handler: "lib/public/modules/home-mate-settings.js", description: "Selected mate's read-only knowledge file list" },
|
|
662
|
+
"home_mate_models_state": { direction: "s2c", handler: "lib/public/modules/home-mate-settings.js", description: "Correlated Mate model catalog state" },
|
|
663
|
+
"home_mate_model_result": { direction: "s2c", handler: "lib/public/modules/home-mate-settings.js", description: "Correlated Mate model selection result" }
|
|
569
664
|
};
|
|
570
665
|
|
|
571
666
|
module.exports = { schema: schema };
|
package/lib/yoke/adapters/acp.js
CHANGED
|
@@ -220,7 +220,7 @@ function createAcpAdapter(vendor, opts) {
|
|
|
220
220
|
if (!initialized || !acp || !acp.started) await adapter.init(queryOpts);
|
|
221
221
|
if (shuttingDown) throw new Error(driver.displayName + " adapter is shutting down");
|
|
222
222
|
var controller = queryOpts.abortController || new AbortController();
|
|
223
|
-
var sharedSkills = skillDiscovery.discoverSkills(queryOpts.cwd || cwd);
|
|
223
|
+
var sharedSkills = queryOpts.skipSkills ? [] : skillDiscovery.discoverSkills(queryOpts.cwd || cwd);
|
|
224
224
|
var skillIndex = skillDiscovery.buildSkillIndex(sharedSkills);
|
|
225
225
|
var acpOptions = (queryOpts.adapterOptions && queryOpts.adapterOptions.ACP) || {};
|
|
226
226
|
var handle = null;
|
|
@@ -254,6 +254,7 @@ function createAcpAdapter(vendor, opts) {
|
|
|
254
254
|
for (var i = 0; i < messages.length; i++) prompt += "User message " + (i + 1) + ": " + messages[i] + "\n";
|
|
255
255
|
var handle = await adapter.createQuery({
|
|
256
256
|
cwd: (titleOpts && titleOpts.cwd) || cwd,
|
|
257
|
+
env: titleOpts && titleOpts.env,
|
|
257
258
|
systemPrompt: "You generate concise conversation titles. Output only the title.",
|
|
258
259
|
canUseTool: function() { return Promise.resolve({ behavior: "deny" }); },
|
|
259
260
|
});
|
|
@@ -376,7 +376,7 @@ function createAntigravityAdapter(opts) {
|
|
|
376
376
|
var handle;
|
|
377
377
|
handle = createAntigravityQueryHandle(binaryPath, Object.assign({}, queryOpts, {
|
|
378
378
|
dangerouslySkipPermissions: !!antigravityOpts.dangerouslySkipPermissions,
|
|
379
|
-
env: antigravityOpts.env || null,
|
|
379
|
+
env: antigravityOpts.env || queryOpts.env || null,
|
|
380
380
|
_spawn: opts._spawn || null,
|
|
381
381
|
}), function() {
|
|
382
382
|
var index = activeHandles.indexOf(handle);
|
|
@@ -388,6 +388,7 @@ function createAntigravityAdapter(opts) {
|
|
|
388
388
|
generateTitle: async function(messages, titleOpts) {
|
|
389
389
|
var handle = await adapter.createQuery({
|
|
390
390
|
cwd: (titleOpts && titleOpts.cwd) || cwd,
|
|
391
|
+
env: titleOpts && titleOpts.env,
|
|
391
392
|
systemPrompt: "Generate a concise conversation title of 3 to 8 words. Output only the title.",
|
|
392
393
|
});
|
|
393
394
|
var prompt = messages.join("\n");
|
|
@@ -491,10 +491,12 @@ async function handleQueryStart(msg) {
|
|
|
491
491
|
}
|
|
492
492
|
return cp;
|
|
493
493
|
};
|
|
494
|
+
var nativeUserInput = options.userInputMode !== "fallback";
|
|
495
|
+
delete options.userInputMode;
|
|
494
496
|
options.canUseTool = function(toolName, input, toolOpts) {
|
|
495
497
|
// AskUserQuestion is handled specially: we send it as a separate IPC type
|
|
496
498
|
// so the daemon can use its own AskUserQuestion handling logic
|
|
497
|
-
if (toolName === "AskUserQuestion") {
|
|
499
|
+
if (toolName === "AskUserQuestion" && nativeUserInput) {
|
|
498
500
|
var toolUseId = toolOpts.toolUseID || "";
|
|
499
501
|
sendToDaemon({
|
|
500
502
|
type: "ask_user_request",
|
|
@@ -511,11 +513,16 @@ async function handleQueryStart(msg) {
|
|
|
511
513
|
}
|
|
512
514
|
});
|
|
513
515
|
}
|
|
516
|
+
if (toolName === "AskUserQuestion") {
|
|
517
|
+
return Promise.resolve({ behavior: "deny", message: "Use the query's structured input fallback tool." });
|
|
518
|
+
}
|
|
514
519
|
return canUseTool(toolName, input, toolOpts);
|
|
515
520
|
};
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
521
|
+
if (nativeUserInput) {
|
|
522
|
+
options.onElicitation = function(request, elicitOpts) {
|
|
523
|
+
return onElicitation(request, elicitOpts);
|
|
524
|
+
};
|
|
525
|
+
}
|
|
519
526
|
// supportedDialogKinds arrives serialized via msg.options (already on `options`);
|
|
520
527
|
// the callback is non-serializable so we wire it here.
|
|
521
528
|
options.onUserDialog = function(request, dialogOpts) {
|
|
@@ -12,6 +12,7 @@ var crypto = require("crypto");
|
|
|
12
12
|
var { spawn } = require("child_process");
|
|
13
13
|
var { resolveOsUserInfo } = require("../../os-users");
|
|
14
14
|
var skillDiscovery = require("../skill-discovery");
|
|
15
|
+
var claudeUserInput = require("../claude-user-input");
|
|
15
16
|
|
|
16
17
|
// SDK-specific knowledge stays in the adapter (not the relay): the host dialog
|
|
17
18
|
// kinds this client can render, declared to the SDK when an onUserDialog
|
|
@@ -19,6 +20,49 @@ var skillDiscovery = require("../skill-discovery");
|
|
|
19
20
|
// emitted. Keep in sync with the client's generic user-dialog renderer.
|
|
20
21
|
var SUPPORTED_DIALOG_KINDS = ["refusal_fallback_prompt"];
|
|
21
22
|
|
|
23
|
+
// Clay renders a per-task Stop control in the composer's background-tasks bar
|
|
24
|
+
// (public/modules/background-tasks-ui.js), wired through project-sessions.js
|
|
25
|
+
// `stop_task` -> adapter.stopTask -> rawQuery.stopTask (worker path: the
|
|
26
|
+
// stop_task message in claude-worker.js). Declaring that affordance makes an
|
|
27
|
+
// interrupt spare running background tasks so Stop only aborts the current
|
|
28
|
+
// turn. The CLI fails CLOSED on absence: without this, every interrupt would
|
|
29
|
+
// also kill background tasks, since a consumer with no per-task control could
|
|
30
|
+
// not otherwise stop a runaway one.
|
|
31
|
+
//
|
|
32
|
+
// Declared identically on the in-process and OS-user worker paths. The CLI
|
|
33
|
+
// takes first-attached-client-wins on multi-client sessions, so the two paths
|
|
34
|
+
// must not disagree, or which one connected first would decide whether Stop
|
|
35
|
+
// kills background work.
|
|
36
|
+
var PER_TASK_STOP_AFFORDANCE = true;
|
|
37
|
+
|
|
38
|
+
// --- System prompt recording (SDK `snapshot`) ---
|
|
39
|
+
// Records the conversation's system prompt once and replays it verbatim on
|
|
40
|
+
// every later request and resume, which keeps the prompt-cache prefix and
|
|
41
|
+
// extended-thinking context stable across CLI upgrades and flag changes.
|
|
42
|
+
//
|
|
43
|
+
// OFF for Clay's persistent sessions, deliberately. getSessionSystemPrompt
|
|
44
|
+
// (project.js) recomposes the append from live state every time the query is
|
|
45
|
+
// rebuilt - sticky notes, pair/Driver role, and the Mate Capsule catalog - and
|
|
46
|
+
// three call sites exist purely to force that re-render mid-conversation
|
|
47
|
+
// (project-capsule-catalog.js refreshSessions, project.js pair regrouping,
|
|
48
|
+
// sdk-bridge refreshEnvironmentRuntime). Because Clay resumes those
|
|
49
|
+
// conversations, a recorded prompt would pin the first render and silently
|
|
50
|
+
// swallow every later update until compaction.
|
|
51
|
+
//
|
|
52
|
+
// Callers whose prompt is fixed for the life of the conversation opt in with
|
|
53
|
+
// queryOpts.systemPromptSnapshot. A bare string prompt cannot be recorded, so
|
|
54
|
+
// it is promoted to the custom form the SDK requires.
|
|
55
|
+
function applySystemPromptSnapshot(systemPrompt, enabled) {
|
|
56
|
+
if (!enabled || !systemPrompt) return systemPrompt;
|
|
57
|
+
if (typeof systemPrompt === "string" || Array.isArray(systemPrompt)) {
|
|
58
|
+
return { type: "custom", prompt: systemPrompt, snapshot: true };
|
|
59
|
+
}
|
|
60
|
+
if (typeof systemPrompt === "object") {
|
|
61
|
+
return Object.assign({}, systemPrompt, { snapshot: true });
|
|
62
|
+
}
|
|
63
|
+
return systemPrompt;
|
|
64
|
+
}
|
|
65
|
+
|
|
22
66
|
function getSharedSkillPlugins(homeDir, existingPlugins) {
|
|
23
67
|
var plugins = Array.isArray(existingPlugins) ? existingPlugins.slice() : [];
|
|
24
68
|
var bridgePath = skillDiscovery.ensureClaudeCodexPlugin(homeDir ? { homeDir: homeDir } : null);
|
|
@@ -26,6 +70,42 @@ function getSharedSkillPlugins(homeDir, existingPlugins) {
|
|
|
26
70
|
return plugins;
|
|
27
71
|
}
|
|
28
72
|
|
|
73
|
+
function buildWorkerQueryOptions(queryOpts, claudeOpts, workerCwd) {
|
|
74
|
+
var queryOptions = {
|
|
75
|
+
cwd: workerCwd,
|
|
76
|
+
userInputMode: queryOpts.userInputMode || "auto",
|
|
77
|
+
};
|
|
78
|
+
if (queryOpts.env) queryOptions.env = queryOpts.env;
|
|
79
|
+
queryOptions.settingSources = claudeOpts.settingSources || ["user", "project", "local"];
|
|
80
|
+
if (queryOpts.title) queryOptions.title = queryOpts.title;
|
|
81
|
+
if (claudeOpts.includePartialMessages != null) queryOptions.includePartialMessages = claudeOpts.includePartialMessages;
|
|
82
|
+
if (claudeOpts.enableFileCheckpointing != null) queryOptions.enableFileCheckpointing = claudeOpts.enableFileCheckpointing;
|
|
83
|
+
if (claudeOpts.extraArgs) queryOptions.extraArgs = claudeOpts.extraArgs;
|
|
84
|
+
if (claudeOpts.promptSuggestions != null) queryOptions.promptSuggestions = claudeOpts.promptSuggestions;
|
|
85
|
+
if (claudeOpts.agentProgressSummaries != null) queryOptions.agentProgressSummaries = claudeOpts.agentProgressSummaries;
|
|
86
|
+
if (claudeOpts.thinking) queryOptions.thinking = claudeOpts.thinking;
|
|
87
|
+
if (claudeOpts.betas && claudeOpts.betas.length > 0) queryOptions.betas = claudeOpts.betas;
|
|
88
|
+
if (claudeOpts.permissionMode) queryOptions.permissionMode = claudeOpts.permissionMode;
|
|
89
|
+
if (claudeOpts.allowDangerouslySkipPermissions) queryOptions.allowDangerouslySkipPermissions = true;
|
|
90
|
+
if (claudeOpts.settings) queryOptions.settings = claudeOpts.settings;
|
|
91
|
+
if (queryOpts.appendSystemPrompt) {
|
|
92
|
+
queryOptions.systemPrompt = applySystemPromptSnapshot(
|
|
93
|
+
{ type: "preset", preset: "claude_code", append: queryOpts.appendSystemPrompt },
|
|
94
|
+
queryOpts.systemPromptSnapshot
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
queryOptions.plugins = queryOpts.skipSkills ? (claudeOpts.plugins || []) : getSharedSkillPlugins(claudeOpts.originalHome, claudeOpts.plugins);
|
|
98
|
+
if (queryOpts.toolServerDescriptors) queryOptions.mcpServerDescriptors = queryOpts.toolServerDescriptors;
|
|
99
|
+
if (queryOpts.onUserDialog) queryOptions.supportedDialogKinds = SUPPORTED_DIALOG_KINDS;
|
|
100
|
+
queryOptions.perTaskStopAffordance = PER_TASK_STOP_AFFORDANCE;
|
|
101
|
+
if (queryOpts.model) queryOptions.model = queryOpts.model;
|
|
102
|
+
if (queryOpts.effort) queryOptions.effort = queryOpts.effort;
|
|
103
|
+
if (queryOpts.resumeSessionId) queryOptions.resume = queryOpts.resumeSessionId;
|
|
104
|
+
if (queryOpts.persistSession === false) queryOptions.persistSession = false;
|
|
105
|
+
if (claudeOpts.resumeSessionAt) queryOptions.resumeSessionAt = claudeOpts.resumeSessionAt;
|
|
106
|
+
return queryOptions;
|
|
107
|
+
}
|
|
108
|
+
|
|
29
109
|
// --- SDK loading ---
|
|
30
110
|
// Async loader (ESM dynamic import, same pattern as current project.js getSDK)
|
|
31
111
|
var _sdkPromise = null;
|
|
@@ -369,11 +449,21 @@ function normalizeBackgroundTasks(tasks) {
|
|
|
369
449
|
var nativeType = task && task.task_type;
|
|
370
450
|
var taskType = nativeType === "local_bash" ? "shell"
|
|
371
451
|
: nativeType === "local_agent" ? "agent" : "other";
|
|
372
|
-
|
|
452
|
+
var normalized = {
|
|
373
453
|
task_id: task && task.task_id,
|
|
374
454
|
task_type: taskType,
|
|
375
455
|
description: (task && task.description) || "",
|
|
456
|
+
// Housekeeping the CLI does not surface as user work (skip_transcript
|
|
457
|
+
// tasks, auto-started live-update watchers). Clay keeps these out of its
|
|
458
|
+
// activity indicators and lists them as a subdued secondary group.
|
|
459
|
+
// Normalized to a boolean so consumers never have to test for absence.
|
|
460
|
+
ambient: !!(task && task.ambient),
|
|
376
461
|
};
|
|
462
|
+
// The SDK does not report a start time today. Forward one if a future
|
|
463
|
+
// version adds it; otherwise the session stamps first-seen time.
|
|
464
|
+
var startedAt = task && (task.started_at || task.startedAt || task.created_at);
|
|
465
|
+
if (startedAt) normalized.started_at = startedAt;
|
|
466
|
+
return normalized;
|
|
377
467
|
});
|
|
378
468
|
}
|
|
379
469
|
|
|
@@ -843,7 +933,7 @@ function serializeWorkerValue(value, seen) {
|
|
|
843
933
|
// in-process QueryHandle. This allows processQueryStream to iterate a worker
|
|
844
934
|
// query identically to an in-process query.
|
|
845
935
|
|
|
846
|
-
function createWorkerQueryHandle(worker, canUseTool, onElicitation, callMcpTool, onUserDialog) {
|
|
936
|
+
function createWorkerQueryHandle(worker, canUseTool, onElicitation, callMcpTool, onUserDialog, onUserInputRequest) {
|
|
847
937
|
// Async iterable state
|
|
848
938
|
var iterQueue = [];
|
|
849
939
|
var iterWaiting = null;
|
|
@@ -910,8 +1000,8 @@ function createWorkerQueryHandle(worker, canUseTool, onElicitation, callMcpTool,
|
|
|
910
1000
|
break;
|
|
911
1001
|
|
|
912
1002
|
case "ask_user_request":
|
|
913
|
-
if (
|
|
914
|
-
|
|
1003
|
+
if (onUserInputRequest) {
|
|
1004
|
+
claudeUserInput.ask(onUserInputRequest, msg.input, {
|
|
915
1005
|
toolUseID: msg.toolUseId,
|
|
916
1006
|
signal: { addEventListener: function() {} },
|
|
917
1007
|
}).then(function(result) {
|
|
@@ -923,17 +1013,24 @@ function createWorkerQueryHandle(worker, canUseTool, onElicitation, callMcpTool,
|
|
|
923
1013
|
break;
|
|
924
1014
|
|
|
925
1015
|
case "elicitation_request":
|
|
926
|
-
if (onElicitation) {
|
|
927
|
-
|
|
1016
|
+
if (onUserInputRequest || onElicitation) {
|
|
1017
|
+
var workerElicitationRequest = {
|
|
928
1018
|
serverName: msg.serverName,
|
|
929
1019
|
message: msg.message,
|
|
930
1020
|
mode: msg.mode,
|
|
931
1021
|
url: msg.url,
|
|
932
1022
|
elicitationId: msg.elicitationId,
|
|
933
1023
|
requestedSchema: msg.requestedSchema,
|
|
934
|
-
}
|
|
1024
|
+
};
|
|
1025
|
+
var workerElicitation = onUserInputRequest
|
|
1026
|
+
? claudeUserInput.elicitation(onUserInputRequest, workerElicitationRequest, {
|
|
1027
|
+
requestId: msg.requestId,
|
|
1028
|
+
signal: { addEventListener: function() {} },
|
|
1029
|
+
})
|
|
1030
|
+
: onElicitation(workerElicitationRequest, {
|
|
935
1031
|
signal: { addEventListener: function() {} },
|
|
936
|
-
})
|
|
1032
|
+
});
|
|
1033
|
+
workerElicitation.then(function(result) {
|
|
937
1034
|
worker.send({ type: "elicitation_response", requestId: msg.requestId, result: result });
|
|
938
1035
|
}).catch(function(e) {
|
|
939
1036
|
console.error("[yoke/claude] elicitation_response send failed:", e.message || e);
|
|
@@ -1206,12 +1303,14 @@ function createClaudeAdapter(opts) {
|
|
|
1206
1303
|
var _cwd = (opts && opts.cwd) || process.cwd();
|
|
1207
1304
|
var _cachedModels = [];
|
|
1208
1305
|
var _claudeBinaryPath = resolveClaudeBinaryPath();
|
|
1306
|
+
var _querySDK = (opts && opts.loadSDK) || loadSDK;
|
|
1209
1307
|
|
|
1210
1308
|
// Path to the worker script (for OS-level user isolation)
|
|
1211
1309
|
var workerScriptPath = path.join(__dirname, "claude-worker.js");
|
|
1212
1310
|
|
|
1213
1311
|
var adapter = {
|
|
1214
1312
|
vendor: "claude",
|
|
1313
|
+
userInputCapability: { mode: "native", native: true, transport: "AskUserQuestion/onElicitation" },
|
|
1215
1314
|
|
|
1216
1315
|
// Path to worker script (sdk-bridge uses this to spawn worker processes)
|
|
1217
1316
|
workerScriptPath: workerScriptPath,
|
|
@@ -1396,7 +1495,7 @@ function createClaudeAdapter(opts) {
|
|
|
1396
1495
|
}
|
|
1397
1496
|
|
|
1398
1497
|
// In-process path
|
|
1399
|
-
var sdk = await
|
|
1498
|
+
var sdk = await _querySDK();
|
|
1400
1499
|
var mq = createMessageQueue();
|
|
1401
1500
|
var ac = queryOpts.abortController || new AbortController();
|
|
1402
1501
|
|
|
@@ -1405,26 +1504,39 @@ function createClaudeAdapter(opts) {
|
|
|
1405
1504
|
cwd: queryOpts.cwd || _cwd,
|
|
1406
1505
|
abortController: ac,
|
|
1407
1506
|
};
|
|
1507
|
+
if (queryOpts.env) sdkOptions.env = queryOpts.env;
|
|
1408
1508
|
if (_claudeBinaryPath) sdkOptions.pathToClaudeCodeExecutable = _claudeBinaryPath;
|
|
1409
1509
|
|
|
1410
1510
|
// YOKE standard options -> SDK options
|
|
1411
|
-
if (queryOpts.systemPrompt)
|
|
1511
|
+
if (queryOpts.systemPrompt) {
|
|
1512
|
+
sdkOptions.systemPrompt = applySystemPromptSnapshot(queryOpts.systemPrompt, queryOpts.systemPromptSnapshot);
|
|
1513
|
+
}
|
|
1412
1514
|
// Additive variant: keep the full Claude Code system prompt and append.
|
|
1413
1515
|
// A plain-string systemPrompt REPLACES the whole prompt, so pair
|
|
1414
1516
|
// presets and other add-ons must come through here instead.
|
|
1415
1517
|
if (!queryOpts.systemPrompt && queryOpts.appendSystemPrompt) {
|
|
1416
|
-
sdkOptions.systemPrompt =
|
|
1518
|
+
sdkOptions.systemPrompt = applySystemPromptSnapshot(
|
|
1519
|
+
{ type: "preset", preset: "claude_code", append: queryOpts.appendSystemPrompt },
|
|
1520
|
+
queryOpts.systemPromptSnapshot
|
|
1521
|
+
);
|
|
1417
1522
|
}
|
|
1418
1523
|
if (queryOpts.model) sdkOptions.model = queryOpts.model;
|
|
1419
1524
|
if (queryOpts.effort) sdkOptions.effort = queryOpts.effort;
|
|
1420
1525
|
if (queryOpts.toolServers) sdkOptions.mcpServers = queryOpts.toolServers;
|
|
1421
|
-
|
|
1422
|
-
if (queryOpts.
|
|
1526
|
+
var nativeUserInputHandler = queryOpts.userInputMode === "fallback" ? null : queryOpts.onUserInputRequest;
|
|
1527
|
+
if (queryOpts.canUseTool || nativeUserInputHandler) {
|
|
1528
|
+
sdkOptions.canUseTool = claudeUserInput.canUseTool(Object.assign({}, queryOpts, { onUserInputRequest: nativeUserInputHandler }));
|
|
1529
|
+
}
|
|
1530
|
+
if (nativeUserInputHandler) {
|
|
1531
|
+
sdkOptions.onElicitation = function (request, elicitOpts) { return claudeUserInput.elicitation(nativeUserInputHandler, request, elicitOpts); };
|
|
1532
|
+
} else if (queryOpts.userInputMode !== "fallback" && queryOpts.onElicitation) sdkOptions.onElicitation = queryOpts.onElicitation;
|
|
1423
1533
|
if (queryOpts.onUserDialog) {
|
|
1424
1534
|
sdkOptions.onUserDialog = queryOpts.onUserDialog;
|
|
1425
1535
|
sdkOptions.supportedDialogKinds = SUPPORTED_DIALOG_KINDS;
|
|
1426
1536
|
}
|
|
1537
|
+
sdkOptions.perTaskStopAffordance = PER_TASK_STOP_AFFORDANCE;
|
|
1427
1538
|
if (queryOpts.resumeSessionId) sdkOptions.resume = queryOpts.resumeSessionId;
|
|
1539
|
+
if (queryOpts.persistSession === false) sdkOptions.persistSession = false;
|
|
1428
1540
|
|
|
1429
1541
|
// Claude-specific options from adapterOptions.CLAUDE
|
|
1430
1542
|
// Always set settingSources explicitly. SDK 0.2.119+ defaults to
|
|
@@ -1445,12 +1557,20 @@ function createClaudeAdapter(opts) {
|
|
|
1445
1557
|
if (co.allowDangerouslySkipPermissions) sdkOptions.allowDangerouslySkipPermissions = true;
|
|
1446
1558
|
if (co.resumeSessionAt) sdkOptions.resumeSessionAt = co.resumeSessionAt;
|
|
1447
1559
|
if (co.settings) sdkOptions.settings = co.settings;
|
|
1448
|
-
sdkOptions.plugins = getSharedSkillPlugins(co.originalHome, co.plugins);
|
|
1560
|
+
sdkOptions.plugins = queryOpts.skipSkills ? (co.plugins || []) : getSharedSkillPlugins(co.originalHome, co.plugins);
|
|
1449
1561
|
|
|
1450
1562
|
var rawQuery = sdk.query({ prompt: mq, options: sdkOptions });
|
|
1451
1563
|
return createQueryHandle(rawQuery, mq, ac);
|
|
1452
1564
|
},
|
|
1453
1565
|
|
|
1566
|
+
createOneShotQuery: async function(queryOpts) {
|
|
1567
|
+
var handle = await adapter.createQuery(Object.assign({}, queryOpts || {}, {
|
|
1568
|
+
persistSession: false,
|
|
1569
|
+
resumeSessionId: null,
|
|
1570
|
+
}));
|
|
1571
|
+
return { handle: handle, backendPersistence: "ephemeral" };
|
|
1572
|
+
},
|
|
1573
|
+
|
|
1454
1574
|
// --- Title generation ---
|
|
1455
1575
|
generateTitle: async function(messages, opts) {
|
|
1456
1576
|
console.log("[auto-title/claude] generateTitle called with " + messages.length + " messages");
|
|
@@ -1463,6 +1583,7 @@ function createClaudeAdapter(opts) {
|
|
|
1463
1583
|
console.log("[auto-title/claude] Creating query with model=haiku...");
|
|
1464
1584
|
var handle = await adapter.createQuery({
|
|
1465
1585
|
cwd: (opts && opts.cwd) || _cwd,
|
|
1586
|
+
env: opts && opts.env,
|
|
1466
1587
|
systemPrompt: systemPrompt,
|
|
1467
1588
|
model: "haiku",
|
|
1468
1589
|
adapterOptions: {
|
|
@@ -1573,44 +1694,17 @@ function createClaudeAdapter(opts) {
|
|
|
1573
1694
|
}
|
|
1574
1695
|
|
|
1575
1696
|
// Create the worker query handle (sets up message handler on worker)
|
|
1576
|
-
var
|
|
1697
|
+
var workerUserInputHandler = queryOpts.userInputMode === "fallback" ? null : queryOpts.onUserInputRequest;
|
|
1698
|
+
var workerElicitationHandler = queryOpts.userInputMode === "fallback" ? null : queryOpts.onElicitation;
|
|
1699
|
+
var handle = createWorkerQueryHandle(worker, queryOpts.canUseTool, workerElicitationHandler, queryOpts.callMcpTool, queryOpts.onUserDialog, workerUserInputHandler);
|
|
1577
1700
|
|
|
1578
1701
|
// Wait for worker to be ready before sending query_start
|
|
1579
1702
|
if (!reusingWorker) {
|
|
1580
1703
|
await worker.readyPromise;
|
|
1581
1704
|
}
|
|
1582
1705
|
|
|
1583
|
-
// Build serializable query options (no callbacks, no AbortController)
|
|
1584
|
-
var queryOptions =
|
|
1585
|
-
cwd: workerCwd,
|
|
1586
|
-
};
|
|
1587
|
-
// Always set settingSources explicitly. See in-process path comment
|
|
1588
|
-
// above for the SDK 0.2.119+ default-change rationale.
|
|
1589
|
-
queryOptions.settingSources = claudeOpts.settingSources || ["user", "project", "local"];
|
|
1590
|
-
if (queryOpts.title) queryOptions.title = queryOpts.title;
|
|
1591
|
-
if (claudeOpts.includePartialMessages != null) queryOptions.includePartialMessages = claudeOpts.includePartialMessages;
|
|
1592
|
-
if (claudeOpts.enableFileCheckpointing != null) queryOptions.enableFileCheckpointing = claudeOpts.enableFileCheckpointing;
|
|
1593
|
-
if (claudeOpts.extraArgs) queryOptions.extraArgs = claudeOpts.extraArgs;
|
|
1594
|
-
if (claudeOpts.promptSuggestions != null) queryOptions.promptSuggestions = claudeOpts.promptSuggestions;
|
|
1595
|
-
if (claudeOpts.agentProgressSummaries != null) queryOptions.agentProgressSummaries = claudeOpts.agentProgressSummaries;
|
|
1596
|
-
if (claudeOpts.thinking) queryOptions.thinking = claudeOpts.thinking;
|
|
1597
|
-
if (claudeOpts.betas && claudeOpts.betas.length > 0) queryOptions.betas = claudeOpts.betas;
|
|
1598
|
-
if (claudeOpts.permissionMode) queryOptions.permissionMode = claudeOpts.permissionMode;
|
|
1599
|
-
if (claudeOpts.allowDangerouslySkipPermissions) queryOptions.allowDangerouslySkipPermissions = true;
|
|
1600
|
-
if (claudeOpts.settings) queryOptions.settings = claudeOpts.settings;
|
|
1601
|
-
// Same additive mapping as the in-process path: never pass a plain
|
|
1602
|
-
// string (it would replace the whole Claude Code system prompt).
|
|
1603
|
-
if (queryOpts.appendSystemPrompt) {
|
|
1604
|
-
queryOptions.systemPrompt = { type: "preset", preset: "claude_code", append: queryOpts.appendSystemPrompt };
|
|
1605
|
-
}
|
|
1606
|
-
queryOptions.plugins = getSharedSkillPlugins(claudeOpts.originalHome, claudeOpts.plugins);
|
|
1607
|
-
|
|
1608
|
-
if (queryOpts.toolServerDescriptors) queryOptions.mcpServerDescriptors = queryOpts.toolServerDescriptors;
|
|
1609
|
-
if (queryOpts.onUserDialog) queryOptions.supportedDialogKinds = SUPPORTED_DIALOG_KINDS;
|
|
1610
|
-
if (queryOpts.model) queryOptions.model = queryOpts.model;
|
|
1611
|
-
if (queryOpts.effort) queryOptions.effort = queryOpts.effort;
|
|
1612
|
-
if (queryOpts.resumeSessionId) queryOptions.resume = queryOpts.resumeSessionId;
|
|
1613
|
-
if (claudeOpts.resumeSessionAt) queryOptions.resumeSessionAt = claudeOpts.resumeSessionAt;
|
|
1706
|
+
// Build serializable query options (no callbacks, no AbortController).
|
|
1707
|
+
var queryOptions = buildWorkerQueryOptions(queryOpts, claudeOpts, workerCwd);
|
|
1614
1708
|
|
|
1615
1709
|
// Send query_start; the caller pushes the initial message via handle.pushMessage()
|
|
1616
1710
|
// which routes through worker IPC.
|
|
@@ -1868,6 +1962,7 @@ module.exports = {
|
|
|
1868
1962
|
hasWritableWorkerConnection: hasWritableWorkerConnection,
|
|
1869
1963
|
sendWorkerMessage: sendWorkerMessage,
|
|
1870
1964
|
canReuseWorker: canReuseWorker,
|
|
1965
|
+
buildWorkerQueryOptions: buildWorkerQueryOptions,
|
|
1871
1966
|
normalizeEvent: flattenEvent,
|
|
1872
1967
|
},
|
|
1873
1968
|
};
|