|
@@ -268,7 +268,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
|
|
|
'useProjection: UseProjection',
|
|
'useProjection: UseProjection',
|
|
|
'useTrajectory: UseTrajectory',
|
|
'useTrajectory: UseTrajectory',
|
|
|
],
|
|
],
|
|
|
- keyDomain: 'fixed by the owner\'s key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, steering, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, unknown, user, workflow-run',
|
|
|
|
|
|
|
+ keyDomain: 'fixed by the owner\'s key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, steering, submitted-plan, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, unknown, user, workflow-run',
|
|
|
hookContext: 'ConversationLocationDataStore<ConversationTurnDataMap> | undefined',
|
|
hookContext: 'ConversationLocationDataStore<ConversationTurnDataMap> | undefined',
|
|
|
slotInject: 'ChatNodeTurnDataInjected',
|
|
slotInject: 'ChatNodeTurnDataInjected',
|
|
|
declaredBy: 'an entry in \'conversation.view\' (client-ui-chat), so it exists while that entry is mounted',
|
|
declaredBy: 'an entry in \'conversation.view\' (client-ui-chat), so it exists while that entry is mounted',
|
|
@@ -288,6 +288,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
|
|
|
'client-ui-chat TurnTailNodeView key \'turn-tail\'',
|
|
'client-ui-chat TurnTailNodeView key \'turn-tail\'',
|
|
|
'client-ui-chat UnknownNodeView key \'unknown\'',
|
|
'client-ui-chat UnknownNodeView key \'unknown\'',
|
|
|
'client-ui-goal GoalCommandInputView key \'command-input\'',
|
|
'client-ui-goal GoalCommandInputView key \'command-input\'',
|
|
|
|
|
+ 'client-ui-plan PlanCard key \'submitted-plan\'',
|
|
|
'client-ui-tool ToolCallTree key \'tool-call\'',
|
|
'client-ui-tool ToolCallTree key \'tool-call\'',
|
|
|
'client-ui-workflow-run WorkflowRunPanel key \'workflow-run\'',
|
|
'client-ui-workflow-run WorkflowRunPanel key \'workflow-run\'',
|
|
|
],
|
|
],
|
|
@@ -1051,6 +1052,64 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
|
|
|
example: 'return {\n inject: [\'slots\'],\n apply(ctx) {\n ctx.slots.inject(\'conversation.message.images\', () => ctx.slots.register(\n { name: \'conversation.message.images\' },\n () => React.createElement(\'div\', null, \'hello\'),\n ))\n },\n}',
|
|
example: 'return {\n inject: [\'slots\'],\n apply(ctx) {\n ctx.slots.inject(\'conversation.message.images\', () => ctx.slots.register(\n { name: \'conversation.message.images\' },\n () => React.createElement(\'div\', null, \'hello\'),\n ))\n },\n}',
|
|
|
source: 'packages/client/ui-chat/src/client/contract/slots.ts:199',
|
|
source: 'packages/client/ui-chat/src/client/contract/slots.ts:199',
|
|
|
},
|
|
},
|
|
|
|
|
+ {
|
|
|
|
|
+ key: 'conversation.plan-review.actions',
|
|
|
|
|
+ kind: 'list',
|
|
|
|
|
+ scope: 'session',
|
|
|
|
|
+ summary: 'Actions for the exact plan under review; approval remains with the question composer.',
|
|
|
|
|
+ doc: 'Actions for the exact plan under review; approval remains with the question composer.',
|
|
|
|
|
+ registerOptions: [
|
|
|
|
|
+ {
|
|
|
|
|
+ name: 'id',
|
|
|
|
|
+ requirement: 'required',
|
|
|
|
|
+ type: 'string',
|
|
|
|
|
+ doc: 'Your cell key. Use an id of your own: a fresh id is added beside the shipped entries, while reusing a shipped id puts you in THAT cell and replaces it. Owners that filter by id address you by it.',
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: 'order',
|
|
|
|
|
+ requirement: 'optional',
|
|
|
|
|
+ type: 'number',
|
|
|
|
|
+ doc: 'Position among the entries, ascending (default 0).',
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: 'label',
|
|
|
|
|
+ requirement: 'optional',
|
|
|
|
|
+ type: 'string | (() => string)',
|
|
|
|
|
+ doc: 'Display text where the owner projects one (nav rows, tabs). A thunk is re-read on every projection, so localized text follows the active locale without re-registering.',
|
|
|
|
|
+ },
|
|
|
|
|
+ ],
|
|
|
|
|
+ ownerProps: [
|
|
|
|
|
+ '/**\n * A request narrowed to the `plan-review` presentation intent: everything the\n * decision card renders and answers with, so the panel never re-reads the\n * request fields. `approve` and `decline` are the asker\'s own options — an\n * answer must carry one of those labels verbatim — and `plan` is the markdown\n * body under review.\n */\nexport interface PlanReview {\n /** The reviewed question\'s id, echoed in the answer. */\n id: string\n /** The question text, kept as the card\'s accessible name. */\n question: string\n /** The plan markdown under review. */\n plan: string\n /** Logged tool invocation used to reopen this plan. */\n callId?: ToolCallId\n /** The option that approves the plan. */\n approve: QuestionOption\n /** The option that declines it; absent when the asker offered no other option. */\n decline?: QuestionOption\n}',
|
|
|
|
|
+ ],
|
|
|
|
|
+ ownerPropsReferences: [],
|
|
|
|
|
+ standardProps: [
|
|
|
|
|
+ 'useResource: UseResource',
|
|
|
|
|
+ 'useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>',
|
|
|
|
|
+ 'usePanelInfo: UsePanelInfo',
|
|
|
|
|
+ 'useSessions: UseSessions',
|
|
|
|
|
+ 'useSessionStatus: UseSessionStatus',
|
|
|
|
|
+ 'useSessionRetainInfo: UseSessionRetainInfo',
|
|
|
|
|
+ 'useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>',
|
|
|
|
|
+ 'useChat: UseChat',
|
|
|
|
|
+ 'useConversation: UseConversation',
|
|
|
|
|
+ 'useInput: SnapshotSelectorHook<InputState>',
|
|
|
|
|
+ 'inputActions: InputActions',
|
|
|
|
|
+ 'useSession: SessionSnapshotSelector',
|
|
|
|
|
+ 'sessionId: SessionId',
|
|
|
|
|
+ 'useProjection: UseProjection',
|
|
|
|
|
+ 'useTrajectory: UseTrajectory',
|
|
|
|
|
+ ],
|
|
|
|
|
+ keyDomain: '',
|
|
|
|
|
+ hookContext: '',
|
|
|
|
|
+ slotInject: '',
|
|
|
|
|
+ declaredBy: 'an entry in \'conversation.composer\' (client-ui-user-questions), so it exists while that entry is mounted',
|
|
|
|
|
+ occupants: [
|
|
|
|
|
+ 'client-ui-plan PlanReviewOpen',
|
|
|
|
|
+ ],
|
|
|
|
|
+ replaceRisk: 'none',
|
|
|
|
|
+ example: 'return {\n inject: [\'slots\'],\n apply(ctx) {\n ctx.slots.inject(\'conversation.plan-review.actions\', () => ctx.slots.register(\n { name: \'conversation.plan-review.actions\', id: \'my-entry\', order: 100, label: \'My entry\' },\n () => React.createElement(\'div\', null, \'hello\'),\n ))\n },\n}',
|
|
|
|
|
+ source: 'packages/client/ui-user-questions/src/client/contract/slots.ts:21',
|
|
|
|
|
+ },
|
|
|
{
|
|
{
|
|
|
key: 'conversation.session',
|
|
key: 'conversation.session',
|
|
|
kind: 'single',
|
|
kind: 'single',
|
|
@@ -2486,6 +2545,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
|
|
|
declaredBy: 'an entry in \'rightbar.session\' (client-ui-sidebar-right), so it exists while that entry is mounted',
|
|
declaredBy: 'an entry in \'rightbar.session\' (client-ui-sidebar-right), so it exists while that entry is mounted',
|
|
|
occupants: [
|
|
occupants: [
|
|
|
'client-ui-deliverables ReviewTab',
|
|
'client-ui-deliverables ReviewTab',
|
|
|
|
|
+ 'client-ui-plan PlanPreview',
|
|
|
'client-ui-sidebar-documentpreview TextPreview',
|
|
'client-ui-sidebar-documentpreview TextPreview',
|
|
|
'client-ui-sidebar-files FilesBody',
|
|
'client-ui-sidebar-files FilesBody',
|
|
|
'client-ui-sidebar-right GuideBody',
|
|
'client-ui-sidebar-right GuideBody',
|
|
@@ -2533,6 +2593,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
|
|
|
slotInject: 'SidebarRightTabInjected',
|
|
slotInject: 'SidebarRightTabInjected',
|
|
|
declaredBy: 'an entry in \'rightbar.session\' (client-ui-sidebar-right), so it exists while that entry is mounted',
|
|
declaredBy: 'an entry in \'rightbar.session\' (client-ui-sidebar-right), so it exists while that entry is mounted',
|
|
|
occupants: [
|
|
occupants: [
|
|
|
|
|
+ 'client-ui-plan PlanTitle',
|
|
|
'client-ui-sidebar-documentpreview TextTitle',
|
|
'client-ui-sidebar-documentpreview TextTitle',
|
|
|
'client-ui-sidebar-files FilesTitle',
|
|
'client-ui-sidebar-files FilesTitle',
|
|
|
'client-ui-sidebar-right GuideTitle',
|
|
'client-ui-sidebar-right GuideTitle',
|