@xenosystem/agent-conversation 0.1.108 → 0.1.109
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/dist/components/agent/AgentView.d.ts.map +1 -1
- package/dist/components/agent/AgentView.js +78 -3
- package/dist/components/agent/AgentView.js.map +1 -1
- package/dist/components/agent/composer/Composer.d.ts +1 -1
- package/dist/components/agent/composer/PermissionPanel.d.ts +16 -0
- package/dist/components/agent/composer/PermissionPanel.d.ts.map +1 -0
- package/dist/components/agent/composer/PermissionPanel.js +69 -0
- package/dist/components/agent/composer/PermissionPanel.js.map +1 -0
- package/dist/components/agent/composer/QuestionPanel.d.ts +29 -0
- package/dist/components/agent/composer/QuestionPanel.d.ts.map +1 -0
- package/dist/components/agent/composer/QuestionPanel.js +168 -0
- package/dist/components/agent/composer/QuestionPanel.js.map +1 -0
- package/dist/components/agent/composer/QueuePanel.d.ts +21 -0
- package/dist/components/agent/composer/QueuePanel.d.ts.map +1 -0
- package/dist/components/agent/composer/QueuePanel.js +169 -0
- package/dist/components/agent/composer/QueuePanel.js.map +1 -0
- package/dist/components/agent/transcript/Transcript.d.ts.map +1 -1
- package/dist/components/agent/transcript/Transcript.js +26 -9
- package/dist/components/agent/transcript/Transcript.js.map +1 -1
- package/dist/components/agent/transcript/stepModel.d.ts.map +1 -1
- package/dist/components/agent/transcript/stepModel.js +26 -23
- package/dist/components/agent/transcript/stepModel.js.map +1 -1
- package/dist/components/agent/transcript/turnModel.d.ts.map +1 -1
- package/dist/components/agent/transcript/turnModel.js +1 -0
- package/dist/components/agent/transcript/turnModel.js.map +1 -1
- package/dist/stores/agentChatStore.d.ts +14 -0
- package/dist/stores/agentChatStore.d.ts.map +1 -1
- package/dist/stores/agentChatStore.js +68 -4
- package/dist/stores/agentChatStore.js.map +1 -1
- package/package.json +5 -5
- package/src/composer.css +4 -4
- package/src/question.css +245 -0
- package/src/queue.css +123 -0
- package/src/styles.css +2 -0
- package/src/transcript.css +89 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentView.d.ts","sourceRoot":"","sources":["../../../src/components/agent/AgentView.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAMhF,OAAO,EAA4P,KAAK,YAAY,EAA2N,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"AgentView.d.ts","sourceRoot":"","sources":["../../../src/components/agent/AgentView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,10 @@ import { CitationChip, parseCitationHref, remarkCitations } from './transcript/c
|
|
|
37
37
|
import { ThreadScrubber, firstLineOf } from './transcript/ThreadScrubber.js';
|
|
38
38
|
import { CtxAction, CtxDiff, CtxGrow, CtxMeter, CtxSeg, CtxSplit, CtxStrip, CtxVr, EffortCells, LaneGroup, ModeSegment, PermChip, ComposerDock, DockIcon, Notice, SendSquare, Tiles, Tip, TurnStatus, TypedMenu, XaMenu, XaMenuSearch, XaRow, postureOf, tokenAt, } from './composer/Composer.js';
|
|
39
39
|
import { useAskActions } from './transcript/useAskActions.js';
|
|
40
|
+
import { QuestionPanel } from './composer/QuestionPanel.js';
|
|
41
|
+
import { PermissionPanel } from './composer/PermissionPanel.js';
|
|
40
42
|
import { deriveStepRow } from './transcript/stepModel.js';
|
|
43
|
+
import { QueuePanel } from './composer/QueuePanel.js';
|
|
41
44
|
import { deriveWebJobProgressView, webJobStopAvailability, WEB_JOB_STOP_LABEL, WEB_JOB_STOP_TITLE } from './webJobProgressView.js';
|
|
42
45
|
import { cloudModelName, cloudModelSortScore } from '../../utils/cloudModels.js';
|
|
43
46
|
import { isSelectableLiveModel } from '../../utils/modelAvailability.js';
|
|
@@ -3517,6 +3520,9 @@ export function AgentView(props) {
|
|
|
3517
3520
|
const restoreCheckpoint = useAgentChatStore(s => s.restoreCheckpoint);
|
|
3518
3521
|
const deleteCheckpoint = useAgentChatStore(s => s.deleteCheckpoint);
|
|
3519
3522
|
const removeQueuedTurn = useAgentChatStore(s => s.removeQueuedTurn);
|
|
3523
|
+
const editQueuedTurn = useAgentChatStore(s => s.editQueuedTurn);
|
|
3524
|
+
const moveQueuedTurn = useAgentChatStore(s => s.moveQueuedTurn);
|
|
3525
|
+
const holdQueue = useAgentChatStore(s => s.holdQueue);
|
|
3520
3526
|
const abort = useAgentChatStore(s => s.abort);
|
|
3521
3527
|
const chooseDirectorySelectionInFlightRef = useRef(new Set());
|
|
3522
3528
|
const workspacePlacementLoadingRef = useRef(new Set());
|
|
@@ -6506,7 +6512,8 @@ export function AgentView(props) {
|
|
|
6506
6512
|
setMachineRevoking(false);
|
|
6507
6513
|
}
|
|
6508
6514
|
}, [askActionsFor, conversationId, machineGrant]);
|
|
6509
|
-
|
|
6515
|
+
// collapsed by default (owner, 2026-10-16): the current step rides the clock line, the rail opens on click — the platform chat's form
|
|
6516
|
+
const stepsMode = sessionUi?.stepsMode === 'expanded' ? 'expanded' : 'collapsed';
|
|
6510
6517
|
// ── the composer's own state (D9): which chooser is open, the clock, the strip's git facts ──
|
|
6511
6518
|
const permPosture = postureOf(effectivePermissionProfile);
|
|
6512
6519
|
const [permOpen, setPermOpen] = useState(false);
|
|
@@ -7394,6 +7401,64 @@ export function AgentView(props) {
|
|
|
7394
7401
|
});
|
|
7395
7402
|
const handleDeleteSdkSession = sdkDestructiveActions.remove;
|
|
7396
7403
|
const handleCleanSdkSessions = sdkDestructiveActions.clean;
|
|
7404
|
+
// The agent's open question, if it is waiting on one: shown above the box (QuestionPanel), answered here.
|
|
7405
|
+
// Read from the same projected transcript the rail and its record draw from, so the panel and the record
|
|
7406
|
+
// can never disagree about whether the question is still open.
|
|
7407
|
+
const pendingQuestion = useMemo(() => {
|
|
7408
|
+
const messages = runtimeProjectedMessages;
|
|
7409
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
7410
|
+
const message = messages[i];
|
|
7411
|
+
if (message.role !== 'assistant')
|
|
7412
|
+
continue;
|
|
7413
|
+
const call = (message.toolCalls || []).find((c) => c.askUserRequest?.status === 'pending');
|
|
7414
|
+
return call?.askUserRequest ? { requestId: message.id, ask: call.askUserRequest } : null;
|
|
7415
|
+
}
|
|
7416
|
+
return null;
|
|
7417
|
+
}, [runtimeProjectedMessages]);
|
|
7418
|
+
// A permission the agent is waiting on (a command to run, a folder to open), docked in the same slot. The
|
|
7419
|
+
// card's words are the step model's, so they match the transcript's record of the same step.
|
|
7420
|
+
const pendingPermission = useMemo(() => {
|
|
7421
|
+
const messages = runtimeProjectedMessages;
|
|
7422
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
7423
|
+
const message = messages[i];
|
|
7424
|
+
if (message.role !== 'assistant')
|
|
7425
|
+
continue;
|
|
7426
|
+
const call = (message.toolCalls || []).find((c) => {
|
|
7427
|
+
if (c.status !== 'running' && c.permissionRequest?.status !== 'pending')
|
|
7428
|
+
return false;
|
|
7429
|
+
const ask = deriveStepRow(c).ask;
|
|
7430
|
+
if (!ask || ask.status !== 'pending')
|
|
7431
|
+
return false;
|
|
7432
|
+
// every ask the person answers in words lives above the box; a workspace CHOICE is a modal the host
|
|
7433
|
+
// drives with its own options, so it keeps the prompt it has
|
|
7434
|
+
return !ask.host || ask.host.kind === 'choose-directory';
|
|
7435
|
+
});
|
|
7436
|
+
if (!call)
|
|
7437
|
+
return null;
|
|
7438
|
+
const ask = deriveStepRow(call).ask;
|
|
7439
|
+
if (!ask)
|
|
7440
|
+
return null;
|
|
7441
|
+
return { requestId: message.id, toolCall: call, permission: call.permissionRequest, ask };
|
|
7442
|
+
}
|
|
7443
|
+
return null;
|
|
7444
|
+
}, [runtimeProjectedMessages]);
|
|
7445
|
+
const [questionBusy, setQuestionBusy] = useState(false);
|
|
7446
|
+
const [questionError, setQuestionError] = useState(null);
|
|
7447
|
+
useEffect(() => { setQuestionError(null); }, [pendingQuestion?.ask.askUserId]);
|
|
7448
|
+
const answerPendingQuestion = useCallback(async (answer, selectedOption) => {
|
|
7449
|
+
if (!pendingQuestion || questionBusy)
|
|
7450
|
+
return;
|
|
7451
|
+
setQuestionBusy(true);
|
|
7452
|
+
setQuestionError(null);
|
|
7453
|
+
const failure = await askActionsFor(pendingQuestion.requestId).answer(pendingQuestion.ask, answer, selectedOption);
|
|
7454
|
+
setQuestionBusy(false);
|
|
7455
|
+
if (failure)
|
|
7456
|
+
setQuestionError(failure);
|
|
7457
|
+
}, [pendingQuestion, questionBusy, askActionsFor]);
|
|
7458
|
+
const skipPendingQuestion = useCallback(() => {
|
|
7459
|
+
if (pendingQuestion)
|
|
7460
|
+
askActionsFor(pendingQuestion.requestId).cancelQuestion(pendingQuestion.ask);
|
|
7461
|
+
}, [pendingQuestion, askActionsFor]);
|
|
7397
7462
|
const handleRemoveQueuedConversationTurn = useCallback((queuedTurnId) => {
|
|
7398
7463
|
if (!conversationId)
|
|
7399
7464
|
return;
|
|
@@ -7707,7 +7772,10 @@ export function AgentView(props) {
|
|
|
7707
7772
|
window.open(url, '_blank');
|
|
7708
7773
|
} })), taskCounts.total > 0 && !planAwaitingApproval && (_jsx(TasksTray, { tasks: conversationTasks, open: !tasksCollapsed, onToggle: () => patchSessionUi({ tasksCollapsed: !tasksCollapsed }) })), _jsx(AgentsTray, { runs: delegatedRunViews, open: delegatedRunsOpen, onToggle: () => setDelegatedRunsOpen((value) => !value), onOpen: (childId) => { props.onNavigateConversation?.(childId); } }), _jsx(BackgroundTray, { runs: backgroundRunViews, open: backgroundRunsOpen, onToggle: () => setBackgroundRunsOpen((value) => !value), onOutput: (taskId) => { const task = backgroundTasks.find((entry) => entry.taskId === taskId); if (task)
|
|
7709
7774
|
void handleReadBackgroundTask(task); }, onStop: (taskId) => { const task = backgroundTasks.find((entry) => entry.taskId === taskId); if (task)
|
|
7710
|
-
void handleStopBackgroundTask(task); } }),
|
|
7775
|
+
void handleStopBackgroundTask(task); } }), pendingTurns.length > 0 && (_jsx("div", { className: "xa-above", children: _jsx(QueuePanel, { items: pendingTurns.map((turn) => ({ id: turn.id, content: turn.content, attachments: 'attachments' in turn ? (turn.attachments ?? []).map((a) => ({ id: a.id, name: a.name })) : [] })), waiting: pendingQuestion || pendingPermission ? 'question' : agentWorking ? 'reply' : 'ready', onRemove: handleRemoveQueuedConversationTurn, onMove: (id, to) => { if (conversationId)
|
|
7776
|
+
moveQueuedTurn(conversationId, id, to); }, onSaveText: (id, text) => { if (conversationId)
|
|
7777
|
+
editQueuedTurn(conversationId, id, text); }, onHoldChange: (held) => { if (conversationId)
|
|
7778
|
+
holdQueue(conversationId, held); } }) })), _jsxs("div", { className: "xa-wsrow", children: [_jsx(ModeSegment, { mode: composerMode, onMode: (mode) => { void handleSelectWorkspaceMode(mode); }, machine: machineOffer, ...(composerModes ? { modes: composerModes } : {}), ...(surfaceLabel ? { agentTip: `Agent — works on the open ${surfaceLabel} document with its own tools; every change can be undone` } : {}), disabled: controlsLocked || !!props.externalInputLockReason || isSelectingConversationWorkspace, choosing: isSelectingConversationWorkspace }), _jsx(CtxStrip, { children: surfaceLabel ? (
|
|
7711
7779
|
/* an app's own panel: the workspace IS the open document, and the tools are the app's */
|
|
7712
7780
|
_jsxs(_Fragment, { children: [_jsx(CtxSeg, { glyph: "app-window", name: true, title: surfaceToolCount?.reason || (workspaceBinding.mode === 'agent'
|
|
7713
7781
|
? `The agent works on the open ${surfaceLabel} document with ${surfaceLabel}'s own tools. Every edit is one undo step; anything that cannot be undone asks first.`
|
|
@@ -7730,7 +7798,14 @@ export function AgentView(props) {
|
|
|
7730
7798
|
holds, and the one way to take it back */
|
|
7731
7799
|
_jsxs(_Fragment, { children: [_jsx(CtxSeg, { glyph: "monitor", name: true, title: machineOffer?.available ? 'The agent acts on this computer, inside the apps you grant it' : (machineOffer?.reason || 'This computer is not answering — the agent cannot act on it yet'), children: "This machine" }), _jsx(CtxVr, {}), machineGrant ? (_jsxs(CtxSeg, { glyph: "app-window", dim: true, title: machineGrant.pending ? `${machineGrant.name} — asked for, not yet granted` : `${machineGrant.name} — granted until this ${machineGrant.scope} ends`, children: [machineGrant.name, " \u00B7 this ", machineGrant.scope] })) : (_jsx(CtxSeg, { dim: true, title: "No app is granted yet \u2014 the agent asks for one when it needs it", children: "No app yet" })), _jsx(CtxGrow, {}), machineGrant
|
|
7732
7800
|
? _jsx(CtxAction, { title: machineGrant.pending ? 'Refuse this grant' : 'Take the grant back — the agent stops acting in it now', disabled: machineRevoking, onClick: () => { void revokeMachineGrant(); }, children: machineRevoking ? 'Revoking…' : 'Revoke' })
|
|
7733
|
-
: props.onNavigateConversation && (_jsx(CtxAction, { title: "Start a new conversation", onClick: () => { const id = useAgentChatStore.getState().createConversation(agentId); props.onNavigateConversation?.(id); }, children: "New chat" }))] })) : (_jsxs(_Fragment, { children: [_jsx(CtxSeg, { glyph: "message", name: true, title: conversation?.title || 'New conversation', children: conversation?.title || 'New conversation' }), _jsx(CtxVr, {}), _jsx(CtxSeg, { dim: true, title: "Chat only \u2014 no access to project files", children: "Private workspace" }), _jsx(CtxGrow, {}), contextUsed !== null && _jsx(CtxMeter, { used: contextUsed, title: "How much of the context window this conversation has used" }), props.onNavigateConversation && (_jsx(CtxAction, { title: "Start a new conversation", onClick: () => { const id = useAgentChatStore.getState().createConversation(agentId); props.onNavigateConversation?.(id); }, children: "New chat" }))] })) })] }),
|
|
7801
|
+
: props.onNavigateConversation && (_jsx(CtxAction, { title: "Start a new conversation", onClick: () => { const id = useAgentChatStore.getState().createConversation(agentId); props.onNavigateConversation?.(id); }, children: "New chat" }))] })) : (_jsxs(_Fragment, { children: [_jsx(CtxSeg, { glyph: "message", name: true, title: conversation?.title || 'New conversation', children: conversation?.title || 'New conversation' }), _jsx(CtxVr, {}), _jsx(CtxSeg, { dim: true, title: "Chat only \u2014 no access to project files", children: "Private workspace" }), _jsx(CtxGrow, {}), contextUsed !== null && _jsx(CtxMeter, { used: contextUsed, title: "How much of the context window this conversation has used" }), props.onNavigateConversation && (_jsx(CtxAction, { title: "Start a new conversation", onClick: () => { const id = useAgentChatStore.getState().createConversation(agentId); props.onNavigateConversation?.(id); }, children: "New chat" }))] })) })] }), _jsxs("div", { ref: boxRef, className: `xa-box${pendingTurns.length > 0 ? ' xa-queued' : ''}${inputLocked ? ' xa-off' : ''}${pendingPermission || pendingQuestion ? ' xa-asking' : ''}`, children: [(pendingPermission || pendingQuestion) && (_jsxs("div", { className: "xa-box-ask", children: [pendingPermission && (() => {
|
|
7802
|
+
const actions = askActionsFor(pendingPermission.requestId);
|
|
7803
|
+
const { toolCall, permission, ask } = pendingPermission;
|
|
7804
|
+
const folder = ask.host?.kind === 'choose-directory';
|
|
7805
|
+
return (_jsx(PermissionPanel, { ask: ask, canAnswer: folder ? true : actions.canAnswer, onAllow: folder ? () => { void handleChooseDirectorySelect(pendingPermission.requestId, toolCall); } : () => actions.grant(toolCall, permission), onDeny: folder
|
|
7806
|
+
? () => { void getOptionalAgentPlatformBridge()?.agent?.answerChooseDirectory?.({ requestId: pendingPermission.requestId, chooseDirectoryId: getToolParamString(toolCall.params, 'chooseDirectoryId'), cancelled: true }); }
|
|
7807
|
+
: () => actions.deny(permission), onAllowAlways: !folder && ask.canAllowAlways ? () => actions.grantAlways(toolCall, permission) : undefined, onDenyAlways: !folder && ask.canDenyAlways ? () => actions.denyAlways(permission) : undefined }));
|
|
7808
|
+
})(), pendingQuestion && (_jsx(QuestionPanel, { ask: pendingQuestion.ask, busy: questionBusy, error: questionError, onAnswer: (answer, selectedOption) => { void answerPendingQuestion(answer, selectedOption); }, onSkip: skipPendingQuestion }))] })), _jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", multiple: true, onChange: (e) => { void handleAttachmentPick(e); }, className: "hidden" }), _jsx(Tiles, { items: pendingAttachments.map((att) => ({ id: att.id, name: att.name, dataUrl: att.dataUrl })), showAll: showAllTiles, onShowAll: () => setShowAllTiles(true), onRemove: (id) => removePendingAttachment(id) }), _jsx("div", { className: `xa-field${effectiveGhostText ? ' xa-ghosting' : ''}`, children: _jsx(GhostTextArea, { ref: textareaRef, rows: 1, value: input, onChange: handleInputChange, onKeyDown: handleKeyDown, disabled: inputLocked, placeholder: effectiveGhostText
|
|
7734
7809
|
? ''
|
|
7735
7810
|
: (isModelReady
|
|
7736
7811
|
// the three prefixes the box answers to, named the way the bench names them
|