@newheap/platform-ai-chat 0.8.0 → 0.9.0
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/README.md +187 -4
- package/admin/index.d.ts +79 -4
- package/agent-runs/index.d.ts +342 -0
- package/fesm2022/newheap-platform-ai-chat-admin.mjs +231 -12
- package/fesm2022/newheap-platform-ai-chat-admin.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs +905 -0
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs.map +1 -0
- package/fesm2022/newheap-platform-ai-chat-testing.mjs +30 -1
- package/fesm2022/newheap-platform-ai-chat-testing.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat.mjs +1746 -80
- package/fesm2022/newheap-platform-ai-chat.mjs.map +1 -1
- package/i18n/en.json +304 -8
- package/i18n/nl.json +304 -8
- package/index.d.ts +899 -67
- package/package.json +5 -1
- package/testing/index.d.ts +4 -2
package/index.d.ts
CHANGED
|
@@ -4,6 +4,271 @@ import { Observable } from 'rxjs';
|
|
|
4
4
|
import { TranslationObject } from '@ngx-translate/core';
|
|
5
5
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Contracts of the agent-run endpoints of `NewHeap.Platform.AI.Chat.AspNet`: threads about a
|
|
9
|
+
* subject, runs, proposals, the approval inbox, working memory and artifacts.
|
|
10
|
+
*/
|
|
11
|
+
/** The caller's role on the subject of a thread. */
|
|
12
|
+
type AgentSubjectRole = 'none' | 'reader' | 'participant' | 'approver';
|
|
13
|
+
type AgentRunStatus = 'queued' | 'running' | 'waiting-for-approval' | 'completed' | 'failed' | 'cancelled';
|
|
14
|
+
type AgentProposalStatus = 'pending' | 'approved' | 'rejected' | 'expired' | 'withdrawn' | 'stale' | 'executing' | 'executed' | 'execution-failed' | 'execution-unknown' | 'resolved' | 'shadow';
|
|
15
|
+
type AgentGrantSource = 'none' | 'delegated' | 'agent';
|
|
16
|
+
interface AgentRun {
|
|
17
|
+
id: string;
|
|
18
|
+
conversationId: string;
|
|
19
|
+
triggerId: string;
|
|
20
|
+
status: AgentRunStatus;
|
|
21
|
+
failureClass: string | null;
|
|
22
|
+
failureCode: string | null;
|
|
23
|
+
initiatorActorId: string | null;
|
|
24
|
+
accountableOwnerId: string;
|
|
25
|
+
attempt: number;
|
|
26
|
+
agentVersion: number;
|
|
27
|
+
toolCalls: number;
|
|
28
|
+
inputTokens: number;
|
|
29
|
+
outputTokens: number;
|
|
30
|
+
proposalCount: number;
|
|
31
|
+
summary: string | null;
|
|
32
|
+
shadow: boolean;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
startedAt: string | null;
|
|
35
|
+
endedAt: string | null;
|
|
36
|
+
backgroundOperationId: string | null;
|
|
37
|
+
}
|
|
38
|
+
interface AgentRunList {
|
|
39
|
+
items: AgentRun[];
|
|
40
|
+
total: number;
|
|
41
|
+
}
|
|
42
|
+
interface AgentThread {
|
|
43
|
+
conversationId: string;
|
|
44
|
+
agentId: string;
|
|
45
|
+
subjectType: string;
|
|
46
|
+
subjectId: string;
|
|
47
|
+
subjectDisplayName: string | null;
|
|
48
|
+
accountability: string;
|
|
49
|
+
accountableOwnerId: string;
|
|
50
|
+
role: AgentSubjectRole;
|
|
51
|
+
activeRun: AgentRun | null;
|
|
52
|
+
waitingInputs: number;
|
|
53
|
+
}
|
|
54
|
+
interface AgentThreadLookup {
|
|
55
|
+
thread: AgentThread | null;
|
|
56
|
+
canStart: boolean;
|
|
57
|
+
role: AgentSubjectRole;
|
|
58
|
+
}
|
|
59
|
+
/** The caller's live right to decide one open proposal; the server checks every decision again. */
|
|
60
|
+
interface AgentProposalDecisionRight {
|
|
61
|
+
canDecide: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Why the caller may not decide, for example `assistant-four-eyes-required` or
|
|
64
|
+
* `assistant-approval-policy-denied`; `null` when they may.
|
|
65
|
+
*/
|
|
66
|
+
reasonCode: string | null;
|
|
67
|
+
}
|
|
68
|
+
/** One agent on a subject: its thread, `null` before it worked on the subject, and whether the caller may start it. */
|
|
69
|
+
interface AgentSubjectWorkAgent {
|
|
70
|
+
agentId: string;
|
|
71
|
+
thread: AgentThread | null;
|
|
72
|
+
canStart: boolean;
|
|
73
|
+
}
|
|
74
|
+
/** An open proposal on a subject with the caller's live decision right. */
|
|
75
|
+
interface AgentSubjectWorkProposal extends AgentProposalDecisionRight {
|
|
76
|
+
proposal: AgentProposal;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* All agent work on one subject as the caller may see it (`GET subjects/{type}/{id}/work`): every
|
|
80
|
+
* agent with a thread on the subject plus the requested agent, and the pending proposals of all
|
|
81
|
+
* those threads, the earliest expiry first.
|
|
82
|
+
*/
|
|
83
|
+
interface AgentSubjectWork {
|
|
84
|
+
subjectType: string;
|
|
85
|
+
subjectId: string;
|
|
86
|
+
subjectDisplayName: string | null;
|
|
87
|
+
/** The caller's live role. Without a role the server answers `404 assistant-subject-not-found`. */
|
|
88
|
+
role: Exclude<AgentSubjectRole, 'none'>;
|
|
89
|
+
agents: AgentSubjectWorkAgent[];
|
|
90
|
+
openProposals: AgentSubjectWorkProposal[];
|
|
91
|
+
}
|
|
92
|
+
/** The agent work on one subject for a list view (`POST subjects/{type}/summary`). */
|
|
93
|
+
interface AgentSubjectSummary {
|
|
94
|
+
subjectId: string;
|
|
95
|
+
/** Proposals that wait for a decision on the subject. */
|
|
96
|
+
openProposals: number;
|
|
97
|
+
/** The open proposals the caller may decide, counted like the approval inbox. */
|
|
98
|
+
proposalsToDecide: number;
|
|
99
|
+
/** An agent works on the subject now. */
|
|
100
|
+
runActive: boolean;
|
|
101
|
+
}
|
|
102
|
+
/** One summary per requested subject, in request order; subjects without visible work count zero. */
|
|
103
|
+
interface AgentSubjectSummaryList {
|
|
104
|
+
subjectType: string;
|
|
105
|
+
items: AgentSubjectSummary[];
|
|
106
|
+
}
|
|
107
|
+
/** Maximum number of subjects one `POST subjects/{type}/summary` request accepts. */
|
|
108
|
+
declare const NH_ASSISTANT_MAX_SUBJECT_SUMMARY = 200;
|
|
109
|
+
interface StartAgentRequest {
|
|
110
|
+
agentId: string;
|
|
111
|
+
subjectType: string;
|
|
112
|
+
subjectId: string;
|
|
113
|
+
message?: string | null;
|
|
114
|
+
}
|
|
115
|
+
interface AgentTriggerReceipt {
|
|
116
|
+
triggerId: string;
|
|
117
|
+
outcome: 'started' | 'queued' | 'coalesced' | 'superseded' | 'ignored' | 'deduplicated' | 'rejected';
|
|
118
|
+
runId: string | null;
|
|
119
|
+
conversationId: string | null;
|
|
120
|
+
reasonCode: string | null;
|
|
121
|
+
}
|
|
122
|
+
interface AgentProposal {
|
|
123
|
+
approvalId: string;
|
|
124
|
+
proposalId: string;
|
|
125
|
+
proposalHash: string;
|
|
126
|
+
conversationId: string;
|
|
127
|
+
runId: string | null;
|
|
128
|
+
agentId: string;
|
|
129
|
+
subjectType: string;
|
|
130
|
+
subjectId: string;
|
|
131
|
+
subjectDisplayName: string | null;
|
|
132
|
+
toolId: string;
|
|
133
|
+
summary: string;
|
|
134
|
+
/**
|
|
135
|
+
* The application's localized explanation, written when the proposal was recorded. Show it
|
|
136
|
+
* instead of `argumentsPreview`; `null` when no presenter handled the tool.
|
|
137
|
+
*/
|
|
138
|
+
presentation: ApprovalPresentation | null;
|
|
139
|
+
argumentsPreview: string;
|
|
140
|
+
targets: string[];
|
|
141
|
+
status: AgentProposalStatus;
|
|
142
|
+
mode: 'inline' | 'deferred';
|
|
143
|
+
policyId: string | null;
|
|
144
|
+
grantSource: AgentGrantSource;
|
|
145
|
+
createdAt: string;
|
|
146
|
+
expiresAt: string;
|
|
147
|
+
initiatorActorId: string | null;
|
|
148
|
+
decidedByActorId: string | null;
|
|
149
|
+
/**
|
|
150
|
+
* The name of `decidedByActorId` from the subject's member snapshot; `null` when the snapshot
|
|
151
|
+
* does not know the person. Show `decidedByActorId` then. Missing on older servers.
|
|
152
|
+
*/
|
|
153
|
+
decidedByDisplayName?: string | null;
|
|
154
|
+
decidedAt: string | null;
|
|
155
|
+
executionResultCode: string | null;
|
|
156
|
+
executedAt: string | null;
|
|
157
|
+
/**
|
|
158
|
+
* The consultation that proposed it, when another assistant consulted the agent for
|
|
159
|
+
* `initiatorActorId`; it executes with that person's rights only.
|
|
160
|
+
*/
|
|
161
|
+
consultationId?: string | null;
|
|
162
|
+
/** The caller's own feedback on the proposal; `null` when they gave none. Missing on older servers. */
|
|
163
|
+
feedback?: AgentProposalFeedback | null;
|
|
164
|
+
/**
|
|
165
|
+
* Whether the caller may give or change feedback: the proposal was rejected, expired, withdrawn or
|
|
166
|
+
* closed as stale, and the caller decided it or is an approver of the subject. Missing on older servers.
|
|
167
|
+
*/
|
|
168
|
+
canGiveFeedback?: boolean;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Why a person rejected a proposal. `incorrect`, `wrong-value` and `not-needed` say the agent was
|
|
172
|
+
* wrong; `not-now` and `already-done` say it was right but not at this moment; `not-allowed` says
|
|
173
|
+
* it went beyond what the agent should do; `other` leaves the explanation to the text.
|
|
174
|
+
*/
|
|
175
|
+
type AgentProposalFeedbackCategory = 'incorrect' | 'wrong-value' | 'not-needed' | 'not-now' | 'already-done' | 'not-allowed' | 'other';
|
|
176
|
+
/** The group of a feedback category. `right-but-not-now` never counts as "the agent was wrong". */
|
|
177
|
+
type AgentProposalFeedbackGroup = 'wrong' | 'right-but-not-now' | 'not-allowed' | 'other';
|
|
178
|
+
/** The feedback categories in the order people choose them. */
|
|
179
|
+
declare const NH_ASSISTANT_FEEDBACK_CATEGORIES: readonly AgentProposalFeedbackCategory[];
|
|
180
|
+
/** The group of each feedback category, as the server reports it. */
|
|
181
|
+
declare const NH_ASSISTANT_FEEDBACK_GROUPS: Readonly<Record<AgentProposalFeedbackCategory, AgentProposalFeedbackGroup>>;
|
|
182
|
+
/** Maximum length of the text of a feedback. */
|
|
183
|
+
declare const NH_ASSISTANT_MAX_FEEDBACK_TEXT = 1000;
|
|
184
|
+
/** Maximum number of proposals one `POST approvals/feedback` request accepts. */
|
|
185
|
+
declare const NH_ASSISTANT_MAX_BULK_FEEDBACK = 50;
|
|
186
|
+
/**
|
|
187
|
+
* One person's feedback on a rejected or otherwise closed proposal. It is separate from the
|
|
188
|
+
* decision's reason, arrives after the decision and can be changed by its author.
|
|
189
|
+
*/
|
|
190
|
+
interface AgentProposalFeedback {
|
|
191
|
+
approvalId: string;
|
|
192
|
+
category: AgentProposalFeedbackCategory;
|
|
193
|
+
group: AgentProposalFeedbackGroup;
|
|
194
|
+
text: string | null;
|
|
195
|
+
/** Given once for several proposals that were rejected together. */
|
|
196
|
+
bulk: boolean;
|
|
197
|
+
createdAt: string;
|
|
198
|
+
updatedAt: string;
|
|
199
|
+
}
|
|
200
|
+
/** The outcome of the feedback on one proposal of `POST approvals/feedback`. */
|
|
201
|
+
interface AgentFeedbackOutcome {
|
|
202
|
+
approvalId: string;
|
|
203
|
+
succeeded: boolean;
|
|
204
|
+
/** For example `assistant-feedback-not-accepted`; `null` when it succeeded. */
|
|
205
|
+
code: string | null;
|
|
206
|
+
}
|
|
207
|
+
type AgentConsultationStatus = 'running' | 'completed' | 'failed';
|
|
208
|
+
/**
|
|
209
|
+
* One consultation of a thread's agent by another assistant. It names who asked and through which
|
|
210
|
+
* assistant; the question and the answer stay in the asking conversation.
|
|
211
|
+
*/
|
|
212
|
+
interface AgentConsultation {
|
|
213
|
+
id: string;
|
|
214
|
+
askerActorId: string;
|
|
215
|
+
/** The asker's name from the subject's members, when known. */
|
|
216
|
+
askerDisplayName: string | null;
|
|
217
|
+
askingAgentId: string | null;
|
|
218
|
+
depth: number;
|
|
219
|
+
status: AgentConsultationStatus;
|
|
220
|
+
failureCode: string | null;
|
|
221
|
+
toolCalls: number;
|
|
222
|
+
inputTokens: number;
|
|
223
|
+
outputTokens: number;
|
|
224
|
+
proposalCount: number;
|
|
225
|
+
createdAt: string;
|
|
226
|
+
endedAt: string | null;
|
|
227
|
+
}
|
|
228
|
+
interface AgentConsultationList {
|
|
229
|
+
items: AgentConsultation[];
|
|
230
|
+
total: number;
|
|
231
|
+
}
|
|
232
|
+
interface AgentInbox {
|
|
233
|
+
items: AgentProposal[];
|
|
234
|
+
total: number;
|
|
235
|
+
}
|
|
236
|
+
interface AgentInboxFilter {
|
|
237
|
+
subjectType?: string;
|
|
238
|
+
agentId?: string;
|
|
239
|
+
divisionId?: string;
|
|
240
|
+
runId?: string;
|
|
241
|
+
page?: number;
|
|
242
|
+
itemsPerPage?: number;
|
|
243
|
+
}
|
|
244
|
+
type AgentProposalDecision = 'approve' | 'reject';
|
|
245
|
+
interface AgentDecisionOutcome {
|
|
246
|
+
approvalId: string;
|
|
247
|
+
succeeded: boolean;
|
|
248
|
+
code: string | null;
|
|
249
|
+
status: AgentProposalStatus | null;
|
|
250
|
+
}
|
|
251
|
+
interface AgentThreadMemory {
|
|
252
|
+
configured: boolean;
|
|
253
|
+
schemaVersion: number;
|
|
254
|
+
memory: unknown;
|
|
255
|
+
updatedAt: string | null;
|
|
256
|
+
}
|
|
257
|
+
interface AgentArtifact {
|
|
258
|
+
id: string;
|
|
259
|
+
name: string;
|
|
260
|
+
version: number;
|
|
261
|
+
contentType: string;
|
|
262
|
+
sizeBytes: number;
|
|
263
|
+
createdAt: string;
|
|
264
|
+
runId: string | null;
|
|
265
|
+
restricted: boolean;
|
|
266
|
+
}
|
|
267
|
+
/** `resume` continues the run from its last checkpoint; `restart` starts a new run in the thread. */
|
|
268
|
+
type AgentRunRetryMode = 'resume' | 'restart';
|
|
269
|
+
/** `re-execute` runs the proposal again; `mark-resolved` confirms its outcome without running it. */
|
|
270
|
+
type AgentExecutionResolution = 're-execute' | 'mark-resolved';
|
|
271
|
+
|
|
7
272
|
interface AssistantStatus {
|
|
8
273
|
enabled: boolean;
|
|
9
274
|
agents: AgentSummary[];
|
|
@@ -63,6 +328,43 @@ interface Conversation extends ConversationSummary {
|
|
|
63
328
|
shareToken?: string | null;
|
|
64
329
|
/** The caller's actor id, to recognize the caller's own messages. */
|
|
65
330
|
currentActorId?: string | null;
|
|
331
|
+
/** Default `chat` for servers without agent runs. */
|
|
332
|
+
kind?: ConversationKind;
|
|
333
|
+
/**
|
|
334
|
+
* The subject of an agent thread and the caller's standing in it, including who may decide its
|
|
335
|
+
* open proposals; `null` for a chat.
|
|
336
|
+
*/
|
|
337
|
+
thread?: ConversationThread | null;
|
|
338
|
+
}
|
|
339
|
+
/** `chat` for a conversation people start; `thread` for the durable thread of an agent about one subject. */
|
|
340
|
+
type ConversationKind = 'chat' | 'thread';
|
|
341
|
+
/**
|
|
342
|
+
* The subject of an agent thread as the caller sees it. In a thread the subject's approvers decide
|
|
343
|
+
* the agent's proposals, not the author of a turn. The server checks the role on every request.
|
|
344
|
+
*/
|
|
345
|
+
interface ConversationThread {
|
|
346
|
+
subjectType: string;
|
|
347
|
+
subjectId: string;
|
|
348
|
+
subjectDisplayName: string | null;
|
|
349
|
+
/** The caller's live role on the subject. */
|
|
350
|
+
role: AgentSubjectRole;
|
|
351
|
+
/** Each open proposal of the thread and whether the caller may decide it now, oldest first. */
|
|
352
|
+
decisions: ConversationThreadDecision[];
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* The caller's right to decide one open proposal of an agent thread, checked like the decision
|
|
356
|
+
* itself: the approval policy, four-eyes and the tool's approve policy.
|
|
357
|
+
*/
|
|
358
|
+
interface ConversationThreadDecision {
|
|
359
|
+
approvalId: string;
|
|
360
|
+
/**
|
|
361
|
+
* The run that proposed it; such a proposal is decided with `POST approvals/{id}/decisions`.
|
|
362
|
+
* `null` for a proposal of a person's turn in the thread, decided in the conversation.
|
|
363
|
+
*/
|
|
364
|
+
runId: string | null;
|
|
365
|
+
canDecide: boolean;
|
|
366
|
+
/** Why the caller may not decide, for example `assistant-four-eyes-required`; `null` when they may. */
|
|
367
|
+
reasonCode: string | null;
|
|
66
368
|
}
|
|
67
369
|
type ConversationStatus = 'idle' | 'running' | 'waiting-for-approval' | 'failed' | 'archived';
|
|
68
370
|
/** The owner or a participant of a shared conversation. */
|
|
@@ -82,13 +384,23 @@ interface Message {
|
|
|
82
384
|
sequence?: number;
|
|
83
385
|
/** The writer of a user message. */
|
|
84
386
|
authorActorId?: string | null;
|
|
387
|
+
/** Who wrote a user message: a person or a trigger of an agent; missing on old servers. */
|
|
388
|
+
authorKind?: MessageAuthorKind | null;
|
|
85
389
|
}
|
|
390
|
+
/** `person` for a message a person wrote; `trigger` for one a trigger wrote into an agent thread. */
|
|
391
|
+
type MessageAuthorKind = 'person' | 'trigger';
|
|
86
392
|
type MessagePart = TextPart | ToolCallPart | ApprovalPart;
|
|
87
393
|
interface TextPart {
|
|
88
394
|
type: 'text';
|
|
89
395
|
text: string;
|
|
90
396
|
}
|
|
91
|
-
|
|
397
|
+
/**
|
|
398
|
+
* `awaiting-approval` waits for a person. A call whose agent proposal closed without running ends
|
|
399
|
+
* as `rejected`, as `not-executed` when the proposal expired, was withdrawn or became stale, or as
|
|
400
|
+
* `failed` when its execution failed before it started; its `resultCode` is then
|
|
401
|
+
* `assistant-proposal-<approval status>`, for example `assistant-proposal-expired`.
|
|
402
|
+
*/
|
|
403
|
+
type ToolCallStatus = 'running' | 'succeeded' | 'failed' | 'awaiting-approval' | 'rejected' | 'not-executed';
|
|
92
404
|
interface ToolCallPart {
|
|
93
405
|
type: 'tool-call';
|
|
94
406
|
invocationId: string;
|
|
@@ -99,8 +411,17 @@ interface ToolCallPart {
|
|
|
99
411
|
argumentsPreview: string | null;
|
|
100
412
|
resultPreview: string | null;
|
|
101
413
|
resultCode: string | null;
|
|
414
|
+
/** `delegated` or `agent` when an agent used rights beyond the caller's own. */
|
|
415
|
+
grantSource?: 'delegated' | 'agent' | null;
|
|
416
|
+
/** The result came from the agent's own grant and is shielded from this viewer. */
|
|
417
|
+
restricted?: boolean;
|
|
102
418
|
}
|
|
103
|
-
|
|
419
|
+
/**
|
|
420
|
+
* Chat approvals are `pending`, `approved`, `rejected` or `expired`; proposals of agents that run on
|
|
421
|
+
* their own continue through execution (`executing`, `executed`, `execution-failed`,
|
|
422
|
+
* `execution-unknown`, `resolved`) or end as `withdrawn`, `stale` or `shadow`.
|
|
423
|
+
*/
|
|
424
|
+
type ApprovalStatus = 'pending' | 'approved' | 'rejected' | 'expired' | 'withdrawn' | 'stale' | 'executing' | 'executed' | 'execution-failed' | 'execution-unknown' | 'resolved' | 'shadow';
|
|
104
425
|
interface ApprovalPresentationField {
|
|
105
426
|
label: string;
|
|
106
427
|
value: string;
|
|
@@ -298,6 +619,23 @@ interface LiveConversationRead {
|
|
|
298
619
|
interface LiveConversationRemoved {
|
|
299
620
|
conversationId: string;
|
|
300
621
|
}
|
|
622
|
+
/** What changed in an agent thread: a run, a proposal or the feedback on a proposal. */
|
|
623
|
+
type LiveAgentWorkReason = 'run' | 'proposal' | 'feedback';
|
|
624
|
+
/**
|
|
625
|
+
* `AgentWorkChanged`: a run of an agent thread started, waits, ended or was cancelled, a proposal
|
|
626
|
+
* was decided, resolved, executed, closed, escalated or expired, or feedback was given. Sent to the
|
|
627
|
+
* thread's participants and everyone on its subject. It carries no content: reload the agent-run
|
|
628
|
+
* endpoints that show the thread, which check access again. It names the thread's subject, so
|
|
629
|
+
* lists and pages of the application refresh by subject without knowing conversation ids.
|
|
630
|
+
*/
|
|
631
|
+
interface LiveAgentWorkChanged {
|
|
632
|
+
conversationId: string;
|
|
633
|
+
reason: LiveAgentWorkReason;
|
|
634
|
+
approvalId: string | null;
|
|
635
|
+
runId: string | null;
|
|
636
|
+
subjectType: string;
|
|
637
|
+
subjectId: string;
|
|
638
|
+
}
|
|
301
639
|
/**
|
|
302
640
|
* `ConversationEvent`: one turn event with the same `type` and `data` as the server-sent events
|
|
303
641
|
* of the starting request, or `message.created` with a `Message` when a participant's message
|
|
@@ -418,6 +756,107 @@ interface UpdateMcpToolRequest {
|
|
|
418
756
|
effect: McpToolEffect;
|
|
419
757
|
descriptionOverride: string | null;
|
|
420
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* Filter of the feedback report of an agent. The server selects proposals by when they were made,
|
|
761
|
+
* defaults to the 30 days before `to` (now) and allows at most 366 days; it only reports scopes the
|
|
762
|
+
* caller administers.
|
|
763
|
+
*/
|
|
764
|
+
interface AgentFeedbackFilter {
|
|
765
|
+
/** Start of the period as an ISO 8601 date-time. */
|
|
766
|
+
from?: string;
|
|
767
|
+
/** End of the period, exclusive, as an ISO 8601 date-time. */
|
|
768
|
+
to?: string;
|
|
769
|
+
scopeKey?: string;
|
|
770
|
+
toolId?: string;
|
|
771
|
+
agentVersion?: number;
|
|
772
|
+
}
|
|
773
|
+
/** Filter and page of `GET admin/agents/{id}/feedback`. */
|
|
774
|
+
interface AgentFeedbackListFilter extends AgentFeedbackFilter {
|
|
775
|
+
category?: AgentProposalFeedbackCategory;
|
|
776
|
+
page?: number;
|
|
777
|
+
/** At most 100. */
|
|
778
|
+
itemsPerPage?: number;
|
|
779
|
+
}
|
|
780
|
+
/** Filter of `GET admin/agents/{id}/feedback/export`. */
|
|
781
|
+
interface AgentFeedbackExportFilter extends AgentFeedbackFilter {
|
|
782
|
+
category?: AgentProposalFeedbackCategory;
|
|
783
|
+
/** Maximum number of records; the server defaults to 10,000 and allows at most 50,000. */
|
|
784
|
+
limit?: number;
|
|
785
|
+
}
|
|
786
|
+
interface AgentFeedbackCategoryCount {
|
|
787
|
+
category: AgentProposalFeedbackCategory;
|
|
788
|
+
group: AgentProposalFeedbackGroup;
|
|
789
|
+
count: number;
|
|
790
|
+
}
|
|
791
|
+
/** The proposals of one tool and agent version in the period and what people said about them. */
|
|
792
|
+
interface AgentFeedbackSummaryRow {
|
|
793
|
+
toolId: string;
|
|
794
|
+
/** The agent row version of the runs that proposed them; `null` for proposals of consultations. */
|
|
795
|
+
agentVersion: number | null;
|
|
796
|
+
pending: number;
|
|
797
|
+
/** Approved proposals, including those that executed, failed, closed as stale or were resolved. */
|
|
798
|
+
approved: number;
|
|
799
|
+
rejected: number;
|
|
800
|
+
expired: number;
|
|
801
|
+
withdrawn: number;
|
|
802
|
+
/** Approved proposals closed because the subject changed; part of `approved`. */
|
|
803
|
+
stale: number;
|
|
804
|
+
/** Approved proposals whose execution failed; part of `approved`. */
|
|
805
|
+
executionFailed: number;
|
|
806
|
+
/** Rejected divided by approved plus rejected (0..1); `null` before anyone decided. */
|
|
807
|
+
rejectionRate: number | null;
|
|
808
|
+
/** Rejected proposals with at least one feedback. */
|
|
809
|
+
rejectedWithFeedback: number;
|
|
810
|
+
/** Proposals of any status with at least one feedback. */
|
|
811
|
+
feedbackProposals: number;
|
|
812
|
+
/** Different people who gave feedback, so one critical approver counts as one. */
|
|
813
|
+
feedbackAuthors: number;
|
|
814
|
+
categories: AgentFeedbackCategoryCount[];
|
|
815
|
+
}
|
|
816
|
+
/** Response of `GET admin/agents/{id}/feedback/summary`. */
|
|
817
|
+
interface AgentFeedbackSummary {
|
|
818
|
+
agentId: string;
|
|
819
|
+
from: string;
|
|
820
|
+
/** Exclusive end of the period. */
|
|
821
|
+
to: string;
|
|
822
|
+
rows: AgentFeedbackSummaryRow[];
|
|
823
|
+
}
|
|
824
|
+
/** One feedback with the proposal it is about, as approvers read it. */
|
|
825
|
+
interface AgentFeedbackItem {
|
|
826
|
+
id: string;
|
|
827
|
+
approvalId: string;
|
|
828
|
+
proposalId: string;
|
|
829
|
+
conversationId: string;
|
|
830
|
+
runId: string | null;
|
|
831
|
+
scopeKey: string;
|
|
832
|
+
subjectType: string;
|
|
833
|
+
subjectId: string;
|
|
834
|
+
subjectDisplayName: string | null;
|
|
835
|
+
toolId: string;
|
|
836
|
+
agentVersion: number | null;
|
|
837
|
+
/** The proposal's status when the feedback was given. */
|
|
838
|
+
approvalStatus: AgentProposalStatus;
|
|
839
|
+
/** The proposal's summary as the agent recorded it. */
|
|
840
|
+
summary: string;
|
|
841
|
+
presentation: ApprovalPresentation | null;
|
|
842
|
+
category: AgentProposalFeedbackCategory;
|
|
843
|
+
group: AgentProposalFeedbackGroup;
|
|
844
|
+
text: string | null;
|
|
845
|
+
authorActorId: string;
|
|
846
|
+
/**
|
|
847
|
+
* The name of `authorActorId` from the member snapshots; `null` when no snapshot knows the
|
|
848
|
+
* person. Show `authorActorId` then. Missing on older servers.
|
|
849
|
+
*/
|
|
850
|
+
authorDisplayName?: string | null;
|
|
851
|
+
bulk: boolean;
|
|
852
|
+
createdAt: string;
|
|
853
|
+
updatedAt: string;
|
|
854
|
+
}
|
|
855
|
+
/** Response of `GET admin/agents/{id}/feedback`, newest change first. */
|
|
856
|
+
interface AgentFeedbackList {
|
|
857
|
+
items: AgentFeedbackItem[];
|
|
858
|
+
total: number;
|
|
859
|
+
}
|
|
421
860
|
|
|
422
861
|
/** Decides whether the current user may see and use the assistant. */
|
|
423
862
|
interface NhAssistantAccessPolicy {
|
|
@@ -432,6 +871,29 @@ interface NhAssistantConfig {
|
|
|
432
871
|
* `inject(...)`, for example `() => inject(MyAuthService).getAuthorization()?.token ?? null`.
|
|
433
872
|
*/
|
|
434
873
|
getAccessToken: () => string | null | Promise<string | null>;
|
|
874
|
+
/**
|
|
875
|
+
* Returns extra headers for every assistant request, for example the NewHeap active division:
|
|
876
|
+
* `() => ({ 'X-NH-ActiveDivisionId': inject(MyAuthService).getAuthorization()?.activeDivision?.id ?? '' })`.
|
|
877
|
+
* Runs in the assistant's injection context before every request, like `getAccessToken`, and
|
|
878
|
+
* when the live-update connection starts. `Authorization`, `Accept`, `Accept-Language` and
|
|
879
|
+
* `Content-Type` stay under the library's control, and empty values are left out. Browsers send
|
|
880
|
+
* no custom headers with the WebSocket and server-sent event transports of the live connection;
|
|
881
|
+
* pass what the hub needs with `getHubQueryParameters`. Default: none.
|
|
882
|
+
*/
|
|
883
|
+
getRequestHeaders?: () => Record<string, string> | null | Promise<Record<string, string> | null>;
|
|
884
|
+
/**
|
|
885
|
+
* Returns query parameters for the live-update hub URL: the values the hub needs that browsers
|
|
886
|
+
* cannot send as headers, because the WebSocket and server-sent event transports carry none.
|
|
887
|
+
* Without them a hub that requires such a value refuses those transports and the connection
|
|
888
|
+
* falls back to long polling. For example the NewHeap active division, which the platform's JWT
|
|
889
|
+
* handler copies from `divisionId` to `X-NH-ActiveDivisionId` on `/hub` paths:
|
|
890
|
+
* `() => ({ divisionId: inject(MyAuthService).getAuthorization()?.activeDivision?.id ?? '' })`.
|
|
891
|
+
* Runs in the assistant's injection context each time the connection starts. `access_token`,
|
|
892
|
+
* `id` and `negotiateVersion` stay under the control of the library and SignalR, empty values
|
|
893
|
+
* are left out and a failing getter only leaves the parameters out. Never return a secret: URLs
|
|
894
|
+
* appear in server and proxy logs. Default: none.
|
|
895
|
+
*/
|
|
896
|
+
getHubQueryParameters?: () => Record<string, string> | null | Promise<Record<string, string> | null>;
|
|
435
897
|
/**
|
|
436
898
|
* Returns what the user has open, sent with each message as untrusted page context.
|
|
437
899
|
* Runs in the assistant's injection context when the panel opens and before every
|
|
@@ -658,11 +1120,95 @@ declare class NhAssistantAdminApiService {
|
|
|
658
1120
|
syncMcpServer(serverId: string): Observable<McpTool[]>;
|
|
659
1121
|
getMcpTools(serverId: string): Observable<McpTool[]>;
|
|
660
1122
|
updateMcpTool(serverId: string, remoteName: string, request: UpdateMcpToolRequest): Observable<McpTool>;
|
|
1123
|
+
/**
|
|
1124
|
+
* The agent's proposals per tool and agent version in the period: decisions, the rejection rate,
|
|
1125
|
+
* feedback per category and the number of different people who gave it.
|
|
1126
|
+
*/
|
|
1127
|
+
getAgentFeedbackSummary(agentId: string, filter?: AgentFeedbackFilter): Observable<AgentFeedbackSummary>;
|
|
1128
|
+
/** The feedback on the agent's proposals with the proposal as approvers read it, newest change first. */
|
|
1129
|
+
getAgentFeedback(agentId: string, filter?: AgentFeedbackListFilter): Observable<AgentFeedbackList>;
|
|
1130
|
+
/**
|
|
1131
|
+
* Downloads the feedback as JSON Lines with the tool input of each proposal. The file holds
|
|
1132
|
+
* subject data and the server audits the export. Rejects with `NhAssistantApiError`.
|
|
1133
|
+
*/
|
|
1134
|
+
exportAgentFeedback(agentId: string, filter?: AgentFeedbackExportFilter): Promise<Blob>;
|
|
661
1135
|
private request;
|
|
662
1136
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantAdminApiService, never>;
|
|
663
1137
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NhAssistantAdminApiService>;
|
|
664
1138
|
}
|
|
665
1139
|
|
|
1140
|
+
/**
|
|
1141
|
+
* Client for the agent-run endpoints: the agent thread about a subject, its runs, proposals,
|
|
1142
|
+
* working memory and artifacts, and the approval inbox. Access follows the caller's role on the
|
|
1143
|
+
* subject, which the server checks on every request; failures error with `NhAssistantApiError`.
|
|
1144
|
+
*/
|
|
1145
|
+
declare class NhAssistantAgentRunApiService {
|
|
1146
|
+
private readonly transport;
|
|
1147
|
+
/** The agent's thread about the subject, the caller's role and whether the caller may start the agent. */
|
|
1148
|
+
getThread(agentId: string, subjectType: string, subjectId: string): Observable<AgentThreadLookup>;
|
|
1149
|
+
/**
|
|
1150
|
+
* The agent's thread about the subject, created without starting a run when it is missing, so
|
|
1151
|
+
* the caller can open the conversation and type there. Creating a thread needs the participant
|
|
1152
|
+
* role; readers may open an existing one. Errors with `assistant-subject-access-denied` otherwise.
|
|
1153
|
+
*/
|
|
1154
|
+
openThread(agentId: string, subjectType: string, subjectId: string): Observable<AgentThreadLookup>;
|
|
1155
|
+
/** Starts the agent on the subject with the caller as initiator; needs the participant role. */
|
|
1156
|
+
startAgent(request: StartAgentRequest): Observable<AgentTriggerReceipt>;
|
|
1157
|
+
/**
|
|
1158
|
+
* All agent work on one subject: the caller's role, every agent with a thread on it plus
|
|
1159
|
+
* `agentId`, and the open proposals of all of them with the caller's live decision right. Errors
|
|
1160
|
+
* with `assistant-subject-not-found` when the caller has no role on the subject.
|
|
1161
|
+
*/
|
|
1162
|
+
getSubjectWork(subjectType: string, subjectId: string, agentId?: string): Observable<AgentSubjectWork>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Counts the agent work on at most `NH_ASSISTANT_MAX_SUBJECT_SUMMARY` subjects of one type in one
|
|
1165
|
+
* request, for badges in a list; one item per id in request order. `NhAssistantSubjectSummaryService`
|
|
1166
|
+
* batches and caches these requests for many badges.
|
|
1167
|
+
*/
|
|
1168
|
+
summarizeSubjects(subjectType: string, subjectIds: readonly string[]): Observable<AgentSubjectSummaryList>;
|
|
1169
|
+
getRuns(conversationId: string): Observable<AgentRunList>;
|
|
1170
|
+
/** Who consulted the thread's agent through another assistant, newest first. */
|
|
1171
|
+
getConsultations(conversationId: string, page?: number, itemsPerPage?: number): Observable<AgentConsultationList>;
|
|
1172
|
+
getProposals(conversationId: string): Observable<AgentProposal[]>;
|
|
1173
|
+
getMemory(conversationId: string): Observable<AgentThreadMemory>;
|
|
1174
|
+
getArtifacts(conversationId: string): Observable<AgentArtifact[]>;
|
|
1175
|
+
/** Downloads one artifact version with the host's credentials. */
|
|
1176
|
+
downloadArtifact(conversationId: string, artifactId: string): Promise<Blob>;
|
|
1177
|
+
/** Cancels a run at its next safe point and withdraws its open proposals; needs the participant role. */
|
|
1178
|
+
cancelRun(runId: string): Observable<void>;
|
|
1179
|
+
/** Resumes or restarts a failed or cancelled run; needs the approver role. */
|
|
1180
|
+
retryRun(runId: string, mode: AgentRunRetryMode): Observable<AgentTriggerReceipt>;
|
|
1181
|
+
/** Pending proposals the caller may decide, sorted by expiry. */
|
|
1182
|
+
getInbox(filter?: AgentInboxFilter): Observable<AgentInbox>;
|
|
1183
|
+
/**
|
|
1184
|
+
* Decides one proposal, bound to the proposal hash the person saw; the server checks the approval
|
|
1185
|
+
* policy and the tool's approve policy again. Accepts an inbox proposal or the approval part of an
|
|
1186
|
+
* agent thread.
|
|
1187
|
+
*/
|
|
1188
|
+
decide(proposal: Pick<AgentProposal, 'approvalId' | 'proposalHash'>, decision: AgentProposalDecision, reason?: string): Observable<AgentProposal>;
|
|
1189
|
+
/** Decides several proposals; each one is checked and decided on its own. */
|
|
1190
|
+
decideMany(approvalIds: string[], decision: AgentProposalDecision, reason?: string): Observable<{
|
|
1191
|
+
results: AgentDecisionOutcome[];
|
|
1192
|
+
}>;
|
|
1193
|
+
/** Resolves an execution whose outcome is unknown. */
|
|
1194
|
+
resolve(approvalId: string, action: AgentExecutionResolution, reason?: string): Observable<AgentProposal>;
|
|
1195
|
+
/**
|
|
1196
|
+
* Gives or changes the caller's feedback on a closed proposal (`canGiveFeedback`). Feedback is
|
|
1197
|
+
* optional and separate from the decision; an empty text is sent as `null`. Fails with
|
|
1198
|
+
* `assistant-feedback-not-accepted` while the proposal is pending or after it was approved.
|
|
1199
|
+
*/
|
|
1200
|
+
giveFeedback(approvalId: string, category: AgentProposalFeedbackCategory, text?: string | null): Observable<AgentProposalFeedback>;
|
|
1201
|
+
/**
|
|
1202
|
+
* Gives the same feedback on at most `NH_ASSISTANT_MAX_BULK_FEEDBACK` proposals that were
|
|
1203
|
+
* rejected together. Each proposal is checked on its own and stored as bulk feedback.
|
|
1204
|
+
*/
|
|
1205
|
+
giveFeedbackMany(approvalIds: readonly string[], category: AgentProposalFeedbackCategory, text?: string | null): Observable<{
|
|
1206
|
+
results: AgentFeedbackOutcome[];
|
|
1207
|
+
}>;
|
|
1208
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantAgentRunApiService, never>;
|
|
1209
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NhAssistantAgentRunApiService>;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
666
1212
|
/**
|
|
667
1213
|
* Applies one assistant event to a conversation and returns the new conversation.
|
|
668
1214
|
* The input is never mutated, so the result can be stored in a signal directly.
|
|
@@ -707,9 +1253,10 @@ declare function describeNhAssistantClientContext(context: ClientContext): strin
|
|
|
707
1253
|
|
|
708
1254
|
type NhAssistantLiveState = 'off' | 'connecting' | 'connected' | 'reconnecting' | 'disconnected';
|
|
709
1255
|
/**
|
|
710
|
-
* Live updates of the assistant hub: conversation changes, read positions, removals
|
|
711
|
-
*
|
|
712
|
-
* own and emits `resync` after every (re)connect,
|
|
1256
|
+
* Live updates of the assistant hub: conversation changes, read positions, removals, the turn
|
|
1257
|
+
* events of other sessions and changes to the work of agents that run on their own. Connects only
|
|
1258
|
+
* while the store asks for it, reconnects on its own and emits `resync` after every (re)connect,
|
|
1259
|
+
* because updates sent while disconnected are lost.
|
|
713
1260
|
*/
|
|
714
1261
|
declare class NhAssistantLiveService {
|
|
715
1262
|
private readonly config;
|
|
@@ -719,6 +1266,7 @@ declare class NhAssistantLiveService {
|
|
|
719
1266
|
private readonly readSubject;
|
|
720
1267
|
private readonly removedSubject;
|
|
721
1268
|
private readonly eventSubject;
|
|
1269
|
+
private readonly agentWorkSubject;
|
|
722
1270
|
private readonly resyncSubject;
|
|
723
1271
|
private readonly stateSignal;
|
|
724
1272
|
private connection?;
|
|
@@ -730,6 +1278,11 @@ declare class NhAssistantLiveService {
|
|
|
730
1278
|
readonly read$: Observable<LiveConversationRead>;
|
|
731
1279
|
readonly removed$: Observable<LiveConversationRemoved>;
|
|
732
1280
|
readonly events$: Observable<LiveConversationEvent>;
|
|
1281
|
+
/**
|
|
1282
|
+
* A run, proposal or feedback of an agent thread changed. It carries no content; components
|
|
1283
|
+
* that show the thread reload it.
|
|
1284
|
+
*/
|
|
1285
|
+
readonly agentWork$: Observable<LiveAgentWorkChanged>;
|
|
733
1286
|
/** Reload snapshots: emitted after every (re)connect. */
|
|
734
1287
|
readonly resync$: Observable<void>;
|
|
735
1288
|
readonly state: _angular_core.Signal<NhAssistantLiveState>;
|
|
@@ -745,6 +1298,11 @@ declare class NhAssistantLiveService {
|
|
|
745
1298
|
/** Starts over after the automatic reconnect gave up or the first start failed. */
|
|
746
1299
|
private scheduleRestart;
|
|
747
1300
|
private token;
|
|
1301
|
+
/**
|
|
1302
|
+
* The hub URL with the host's `getHubQueryParameters`, which reach the hub on every transport,
|
|
1303
|
+
* unlike headers on WebSockets and server-sent events.
|
|
1304
|
+
*/
|
|
1305
|
+
private withQueryParameters;
|
|
748
1306
|
/** `hubBaseUrl` + `hubPath`, or the hub path on the origin of `apiBaseUrl`. */
|
|
749
1307
|
private resolveUrl;
|
|
750
1308
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantLiveService, never>;
|
|
@@ -770,6 +1328,25 @@ interface NhAssistantQueuedMessage {
|
|
|
770
1328
|
}
|
|
771
1329
|
/** Notice code for a completed turn that produced no answer text and no server code. */
|
|
772
1330
|
declare const NH_ASSISTANT_NO_ANSWER_NOTICE_CODE = "assistant-no-answer";
|
|
1331
|
+
/**
|
|
1332
|
+
* Who decides an approval the current user cannot decide: `turn`, the person whose turn created
|
|
1333
|
+
* it in a chat; `approver`, an approver of the agent thread's subject; `other-approver`, another
|
|
1334
|
+
* approver, because the current user started the work and four-eyes applies.
|
|
1335
|
+
*/
|
|
1336
|
+
type NhAssistantApprovalWaitingFor = 'turn' | 'approver' | 'other-approver';
|
|
1337
|
+
/** The current user's right to decide, or to give feedback on, one approval of the open conversation. */
|
|
1338
|
+
interface NhAssistantApprovalRight {
|
|
1339
|
+
canDecide: boolean;
|
|
1340
|
+
/** Who decides when the current user cannot. */
|
|
1341
|
+
waitingFor: NhAssistantApprovalWaitingFor;
|
|
1342
|
+
/** Name of the person who decides a `turn` approval; `null` when unknown. */
|
|
1343
|
+
decisionOwner: string | null;
|
|
1344
|
+
/**
|
|
1345
|
+
* True for an agent's proposal the current user rejected in this session, so the approval card
|
|
1346
|
+
* offers the optional feedback question. Chat approvals never offer feedback.
|
|
1347
|
+
*/
|
|
1348
|
+
canGiveFeedback?: boolean;
|
|
1349
|
+
}
|
|
773
1350
|
/**
|
|
774
1351
|
* A conversation that needs attention outside the open thread: a turn runs, an approval waits or
|
|
775
1352
|
* there is something unread.
|
|
@@ -794,6 +1371,7 @@ declare function nhAssistantIsUnread(summary: Pick<ConversationSummary, 'status'
|
|
|
794
1371
|
*/
|
|
795
1372
|
declare class NhAssistantStore {
|
|
796
1373
|
private readonly api;
|
|
1374
|
+
private readonly agentRuns;
|
|
797
1375
|
private readonly config;
|
|
798
1376
|
private readonly injector;
|
|
799
1377
|
private readonly accessPolicy;
|
|
@@ -826,9 +1404,13 @@ declare class NhAssistantStore {
|
|
|
826
1404
|
private readonly queueDispatchState;
|
|
827
1405
|
private readonly steeringState;
|
|
828
1406
|
private readonly submittingState;
|
|
1407
|
+
/** Agent proposals the current user rejected in this session and may give feedback on. */
|
|
1408
|
+
private readonly feedbackApprovalsState;
|
|
829
1409
|
private destroyed;
|
|
830
1410
|
private readonly streams;
|
|
831
1411
|
private readonly cancelTimers;
|
|
1412
|
+
/** Pending reloads of agent threads after live agent-work updates, per conversation. */
|
|
1413
|
+
private readonly agentWorkTimers;
|
|
832
1414
|
private readonly pendingSendResolves;
|
|
833
1415
|
private readonly markingRead;
|
|
834
1416
|
private readonly liveSubscription;
|
|
@@ -889,7 +1471,20 @@ declare class NhAssistantStore {
|
|
|
889
1471
|
readonly members: _angular_core.Signal<ConversationMember[]>;
|
|
890
1472
|
/** True when the current user owns the open conversation (or it is new). */
|
|
891
1473
|
readonly isOwner: _angular_core.Signal<boolean>;
|
|
892
|
-
/** True when the
|
|
1474
|
+
/** True when the open conversation is the durable thread of an agent about a subject. */
|
|
1475
|
+
readonly isAgentThread: _angular_core.Signal<boolean>;
|
|
1476
|
+
/**
|
|
1477
|
+
* The current user's right to decide each pending approval of the open conversation, by approval
|
|
1478
|
+
* id. In a chat only the author of the waiting turn decides. In an agent thread the subject's
|
|
1479
|
+
* approvers decide, as the server reports per proposal: the approval policy, four-eyes and the
|
|
1480
|
+
* tool's approve policy, checked live. Proposals the user rejected in this session carry
|
|
1481
|
+
* `canGiveFeedback`.
|
|
1482
|
+
*/
|
|
1483
|
+
readonly approvalRights: _angular_core.Signal<ReadonlyMap<string, NhAssistantApprovalRight>>;
|
|
1484
|
+
/**
|
|
1485
|
+
* True when the current user may decide the pending approval: in a chat it belongs to their own
|
|
1486
|
+
* turn, in an agent thread the server allows them as an approver.
|
|
1487
|
+
*/
|
|
893
1488
|
readonly canDecide: _angular_core.Signal<boolean>;
|
|
894
1489
|
/** The member whose turn runs or waits in the open conversation, when it is someone else. */
|
|
895
1490
|
readonly activeMember: _angular_core.Signal<ConversationMember | null>;
|
|
@@ -937,8 +1532,19 @@ declare class NhAssistantStore {
|
|
|
937
1532
|
steerQueuedMessage(id: string): Promise<void>;
|
|
938
1533
|
private dispatchQueued;
|
|
939
1534
|
private sendMessage;
|
|
940
|
-
/**
|
|
941
|
-
|
|
1535
|
+
/**
|
|
1536
|
+
* Approves or rejects an approval of the open conversation: `approvalId`, or the pending approval
|
|
1537
|
+
* when it is left out. A proposal of an agent's run is decided with its proposal hash through the
|
|
1538
|
+
* agent-run endpoint; other approvals resume their turn as a stream. Ignores calls the current
|
|
1539
|
+
* user may not make and repeated calls while a decision is in flight.
|
|
1540
|
+
*/
|
|
1541
|
+
decide(decision: ApprovalDecision, reason?: string, approvalId?: string): void;
|
|
1542
|
+
/**
|
|
1543
|
+
* Decides a proposal of an agent's run with `POST approvals/{id}/decisions`. An approved deferred
|
|
1544
|
+
* proposal executes later as a background operation; an inline one wakes the waiting run. The
|
|
1545
|
+
* reloaded snapshot shows the outcome and the proposals that remain open.
|
|
1546
|
+
*/
|
|
1547
|
+
private decideProposal;
|
|
942
1548
|
/** Asks the server to stop the running turn or to abandon a waiting approval of the open conversation. */
|
|
943
1549
|
cancel(): Promise<void>;
|
|
944
1550
|
private cancelConversation;
|
|
@@ -991,6 +1597,13 @@ declare class NhAssistantStore {
|
|
|
991
1597
|
private onLiveRead;
|
|
992
1598
|
private onLiveRemoved;
|
|
993
1599
|
private onLiveEvent;
|
|
1600
|
+
/**
|
|
1601
|
+
* A run or proposal of an agent thread changed, for example a colleague decided a proposal in the
|
|
1602
|
+
* inbox: reload the thread when this tab has it open, so its approval cards show the decision.
|
|
1603
|
+
* A burst of updates reloads once. Feedback does not change the thread.
|
|
1604
|
+
*/
|
|
1605
|
+
private onLiveAgentWork;
|
|
1606
|
+
private clearAgentWorkTimers;
|
|
994
1607
|
/** After a reconnect: updates sent while disconnected are lost, so reload what is shown. */
|
|
995
1608
|
private resync;
|
|
996
1609
|
private scheduleRefresh;
|
|
@@ -1083,6 +1696,7 @@ declare const NH_ASSISTANT_PANEL_MOBILE_QUERY = "(max-width: 599.98px)";
|
|
|
1083
1696
|
declare class NhAssistantPanelService {
|
|
1084
1697
|
private readonly overlay;
|
|
1085
1698
|
private readonly store;
|
|
1699
|
+
private readonly agentRuns;
|
|
1086
1700
|
private readonly injector;
|
|
1087
1701
|
private readonly document;
|
|
1088
1702
|
private readonly breakpoints;
|
|
@@ -1094,6 +1708,20 @@ declare class NhAssistantPanelService {
|
|
|
1094
1708
|
readonly isOpen: Signal<boolean>;
|
|
1095
1709
|
constructor();
|
|
1096
1710
|
open(conversationId?: string): void;
|
|
1711
|
+
/**
|
|
1712
|
+
* Opens the panel on the conversation with an agent about a subject, for example the intake
|
|
1713
|
+
* reviewer about one project. The server returns the agent's thread about the subject and creates
|
|
1714
|
+
* it without starting a run when it is missing; people then type in the conversation, which runs
|
|
1715
|
+
* a turn. Creating needs the participant role, readers may open an existing thread.
|
|
1716
|
+
*
|
|
1717
|
+
* Resolves with the lookup once the panel opens the conversation. A failure, such as
|
|
1718
|
+
* `assistant-subject-access-denied`, rejects with `NhAssistantApiError` and leaves the panel as
|
|
1719
|
+
* it is, so the caller shows the localized `messageKey` where the person asked.
|
|
1720
|
+
*/
|
|
1721
|
+
openSubject(agentId: string, subject: {
|
|
1722
|
+
type: string;
|
|
1723
|
+
id: string;
|
|
1724
|
+
}): Promise<AgentThreadLookup>;
|
|
1097
1725
|
private showPanel;
|
|
1098
1726
|
close(): void;
|
|
1099
1727
|
toggle(): void;
|
|
@@ -1108,6 +1736,62 @@ declare class NhAssistantPanelService {
|
|
|
1108
1736
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NhAssistantPanelService>;
|
|
1109
1737
|
}
|
|
1110
1738
|
|
|
1739
|
+
/**
|
|
1740
|
+
* Counts of agent work per subject for badges in lists and on pages. Every summary asked for in the
|
|
1741
|
+
* same tick becomes one `POST subjects/{type}/summary` per subject type, in chunks of
|
|
1742
|
+
* `NH_ASSISTANT_MAX_SUBJECT_SUMMARY`. Results are cached per subject and shared by everyone who
|
|
1743
|
+
* shows it. Live agent-work updates refetch only the subjects they name, batched; a reconnect of
|
|
1744
|
+
* the hub refetches every subject shown. Nothing is requested on the server or while the assistant
|
|
1745
|
+
* is disabled or denied, and the cache clears when it becomes unavailable, for example on sign-out.
|
|
1746
|
+
*/
|
|
1747
|
+
declare class NhAssistantSubjectSummaryService {
|
|
1748
|
+
private readonly api;
|
|
1749
|
+
private readonly store;
|
|
1750
|
+
private readonly live;
|
|
1751
|
+
private readonly browser;
|
|
1752
|
+
private readonly entries;
|
|
1753
|
+
/** Subject ids per type that wait for the next request. */
|
|
1754
|
+
private readonly queue;
|
|
1755
|
+
/** Subjects named by live updates that wait for the end of the burst. */
|
|
1756
|
+
private readonly changed;
|
|
1757
|
+
private requests;
|
|
1758
|
+
private readonly liveSubscription;
|
|
1759
|
+
private flushScheduled;
|
|
1760
|
+
private changedTimer?;
|
|
1761
|
+
private requestRevision;
|
|
1762
|
+
private destroyed;
|
|
1763
|
+
constructor();
|
|
1764
|
+
/**
|
|
1765
|
+
* The agent work on one subject: `null` until it is known, then every update. Subscribing shows
|
|
1766
|
+
* the subject; summaries of subjects that are shown stay current with live updates. The request
|
|
1767
|
+
* starts in the next microtask, together with every other summary asked for until then.
|
|
1768
|
+
*/
|
|
1769
|
+
summary(subjectType: string, subjectId: string): Observable<AgentSubjectSummary | null>;
|
|
1770
|
+
/**
|
|
1771
|
+
* Fetches the summaries of these subjects again, or of every subject of the type that is shown,
|
|
1772
|
+
* for example after the application changed them without an agent.
|
|
1773
|
+
*/
|
|
1774
|
+
refresh(subjectType: string, subjectIds?: readonly string[]): void;
|
|
1775
|
+
private watch;
|
|
1776
|
+
private unwatch;
|
|
1777
|
+
private isCurrent;
|
|
1778
|
+
/** Drops a summary nobody shows; the next subscriber fetches it again. */
|
|
1779
|
+
private forget;
|
|
1780
|
+
private enqueue;
|
|
1781
|
+
private scheduleFlush;
|
|
1782
|
+
/** Sends the queued subjects: one request per type and chunk. Waits while the assistant is unavailable. */
|
|
1783
|
+
private flush;
|
|
1784
|
+
private send;
|
|
1785
|
+
private onAgentWork;
|
|
1786
|
+
/** Refetches the shown subjects of a burst of live updates, together. */
|
|
1787
|
+
private refetchChanged;
|
|
1788
|
+
/** After a reconnect updates may have been missed: refetch what is shown, forget the rest. */
|
|
1789
|
+
private refetchShown;
|
|
1790
|
+
private onAvailabilityChanged;
|
|
1791
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantSubjectSummaryService, never>;
|
|
1792
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NhAssistantSubjectSummaryService>;
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1111
1795
|
/** Fragment the panel reads to join a shared conversation: `#nh-assistant-join=<id>.<token>`. */
|
|
1112
1796
|
declare const NH_ASSISTANT_JOIN_FRAGMENT = "nh-assistant-join";
|
|
1113
1797
|
/** Fragment a clicked notification opens: `#nh-assistant-conversation=<id>`. */
|
|
@@ -1149,6 +1833,77 @@ declare class NhAssistantLauncherComponent {
|
|
|
1149
1833
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantLauncherComponent, "nh-assistant-launcher", never, {}, {}, never, ["*"], true, never>;
|
|
1150
1834
|
}
|
|
1151
1835
|
|
|
1836
|
+
/** A decision about one approval of the thread. */
|
|
1837
|
+
interface NhAssistantApprovalChoice {
|
|
1838
|
+
approvalId: string;
|
|
1839
|
+
decision: ApprovalDecision;
|
|
1840
|
+
}
|
|
1841
|
+
/** Above this number of messages the thread renders through CDK virtual scrolling. */
|
|
1842
|
+
declare const NH_ASSISTANT_VIRTUAL_SCROLL_THRESHOLD = 200;
|
|
1843
|
+
/**
|
|
1844
|
+
* The messages of a conversation as a live log. Assistant text renders as sanitized
|
|
1845
|
+
* Markdown, consecutive tool calls as one collapsible group that counts along, and
|
|
1846
|
+
* approvals as cards. Messages a trigger wrote into an agent thread read as events, not as
|
|
1847
|
+
* a person. While a turn runs without visible progress, a working indicator shows the
|
|
1848
|
+
* elapsed time. The thread follows new content while the user is at the bottom.
|
|
1849
|
+
*/
|
|
1850
|
+
declare class NhAssistantThreadComponent {
|
|
1851
|
+
private readonly injector;
|
|
1852
|
+
readonly messages: _angular_core.InputSignal<readonly Message[]>;
|
|
1853
|
+
readonly streaming: _angular_core.InputSignal<boolean>;
|
|
1854
|
+
readonly deciding: _angular_core.InputSignal<boolean>;
|
|
1855
|
+
readonly markdown: _angular_core.InputSignal<boolean>;
|
|
1856
|
+
/** The owner and participants of a shared conversation; empty while it is not shared. */
|
|
1857
|
+
readonly members: _angular_core.InputSignal<readonly ConversationMember[]>;
|
|
1858
|
+
/** The current user, to tell their own messages from those of others. */
|
|
1859
|
+
readonly currentActorId: _angular_core.InputSignal<string | null>;
|
|
1860
|
+
/** False when the pending approval belongs to another participant's turn. */
|
|
1861
|
+
readonly canDecide: _angular_core.InputSignal<boolean>;
|
|
1862
|
+
/** Name of the participant who decides the pending approval, when it is someone else. */
|
|
1863
|
+
readonly decisionOwner: _angular_core.InputSignal<string | null>;
|
|
1864
|
+
/**
|
|
1865
|
+
* Who may decide each pending approval, by approval id, for example `NhAssistantStore.approvalRights`.
|
|
1866
|
+
* An agent thread can hold several open proposals that the subject's approvers decide. Approvals
|
|
1867
|
+
* without an entry use `canDecide` and `decisionOwner`. An entry with `canGiveFeedback` lets the
|
|
1868
|
+
* card of a rejected proposal ask what was wrong.
|
|
1869
|
+
*/
|
|
1870
|
+
readonly approvalRights: _angular_core.InputSignal<ReadonlyMap<string, NhAssistantApprovalRight> | null>;
|
|
1871
|
+
/** The decision about an approval card, without the approval it belongs to. */
|
|
1872
|
+
readonly approvalDecision: _angular_core.OutputEmitterRef<ApprovalDecision>;
|
|
1873
|
+
/** The decision about an approval card together with its approval id. */
|
|
1874
|
+
readonly approvalChoice: _angular_core.OutputEmitterRef<NhAssistantApprovalChoice>;
|
|
1875
|
+
private readonly names;
|
|
1876
|
+
readonly virtualThreshold = 200;
|
|
1877
|
+
readonly virtual: _angular_core.Signal<boolean>;
|
|
1878
|
+
/**
|
|
1879
|
+
* True while the turn runs and nothing else shows progress: before the first part and
|
|
1880
|
+
* between tool calls while the model decides what to do next. Streaming text and a
|
|
1881
|
+
* running tool group show their own progress; an approval waits for the user.
|
|
1882
|
+
*/
|
|
1883
|
+
readonly working: _angular_core.Signal<boolean>;
|
|
1884
|
+
/** Whole seconds since the running turn started. */
|
|
1885
|
+
readonly elapsedSeconds: _angular_core.Signal<number>;
|
|
1886
|
+
private readonly turnStartedAt;
|
|
1887
|
+
private readonly now;
|
|
1888
|
+
private readonly scroller;
|
|
1889
|
+
private readonly viewport;
|
|
1890
|
+
constructor();
|
|
1891
|
+
trackMessage(_index: number, message: Message): string;
|
|
1892
|
+
/** True for a user message a trigger wrote into an agent thread. */
|
|
1893
|
+
isTrigger(message: Message): boolean;
|
|
1894
|
+
/** True for a user message written by another person in a shared conversation. */
|
|
1895
|
+
isOthers(message: Message): boolean;
|
|
1896
|
+
/** Whether and why the current user may decide an approval card. */
|
|
1897
|
+
rightFor(approval: ApprovalPart): NhAssistantApprovalRight;
|
|
1898
|
+
choose(approval: ApprovalPart, decision: ApprovalDecision): void;
|
|
1899
|
+
/** Display name of another person's message, or `null` when the application provides none. */
|
|
1900
|
+
authorName(message: Message): string | null;
|
|
1901
|
+
private scrollElement;
|
|
1902
|
+
private scrollToEnd;
|
|
1903
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantThreadComponent, never>;
|
|
1904
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantThreadComponent, "nh-assistant-thread", never, { "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "streaming": { "alias": "streaming"; "required": false; "isSignal": true; }; "deciding": { "alias": "deciding"; "required": false; "isSignal": true; }; "markdown": { "alias": "markdown"; "required": false; "isSignal": true; }; "members": { "alias": "members"; "required": false; "isSignal": true; }; "currentActorId": { "alias": "currentActorId"; "required": false; "isSignal": true; }; "canDecide": { "alias": "canDecide"; "required": false; "isSignal": true; }; "decisionOwner": { "alias": "decisionOwner"; "required": false; "isSignal": true; }; "approvalRights": { "alias": "approvalRights"; "required": false; "isSignal": true; }; }, { "approvalDecision": "approvalDecision"; "approvalChoice": "approvalChoice"; }, never, never, true, never>;
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1152
1907
|
/**
|
|
1153
1908
|
* The assistant drawer. Place it once in the application layout; it renders nothing in
|
|
1154
1909
|
* place and appears as an overlay when `NhAssistantPanelService.open()` is called. It opens
|
|
@@ -1215,6 +1970,8 @@ declare class NhAssistantPanelComponent implements AfterViewInit, OnDestroy {
|
|
|
1215
1970
|
*/
|
|
1216
1971
|
private openFromLocation;
|
|
1217
1972
|
decide(decision: ApprovalDecision): void;
|
|
1973
|
+
/** Decides the approval of a card; in an agent thread several proposals can be open. */
|
|
1974
|
+
decideApproval(choice: NhAssistantApprovalChoice): void;
|
|
1218
1975
|
cancel(): void;
|
|
1219
1976
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantPanelComponent, never>;
|
|
1220
1977
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantPanelComponent, "nh-assistant-panel", never, {}, {}, never, never, true, never>;
|
|
@@ -1241,56 +1998,6 @@ declare class NhAssistantConversationListComponent {
|
|
|
1241
1998
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantConversationListComponent, "nh-assistant-conversation-list", never, { "conversations": { "alias": "conversations"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "activeConversationId": { "alias": "activeConversationId"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "conversationSelect": "conversationSelect"; "conversationDelete": "conversationDelete"; "conversationCreate": "conversationCreate"; }, never, never, true, never>;
|
|
1242
1999
|
}
|
|
1243
2000
|
|
|
1244
|
-
/** Above this number of messages the thread renders through CDK virtual scrolling. */
|
|
1245
|
-
declare const NH_ASSISTANT_VIRTUAL_SCROLL_THRESHOLD = 200;
|
|
1246
|
-
/**
|
|
1247
|
-
* The messages of a conversation as a live log. Assistant text renders as sanitized
|
|
1248
|
-
* Markdown, consecutive tool calls as one collapsible group that counts along, and
|
|
1249
|
-
* approvals as cards. While a turn runs without visible progress, a working indicator
|
|
1250
|
-
* shows the elapsed time. The thread follows new content while the user is at the bottom.
|
|
1251
|
-
*/
|
|
1252
|
-
declare class NhAssistantThreadComponent {
|
|
1253
|
-
private readonly injector;
|
|
1254
|
-
readonly messages: _angular_core.InputSignal<readonly Message[]>;
|
|
1255
|
-
readonly streaming: _angular_core.InputSignal<boolean>;
|
|
1256
|
-
readonly deciding: _angular_core.InputSignal<boolean>;
|
|
1257
|
-
readonly markdown: _angular_core.InputSignal<boolean>;
|
|
1258
|
-
/** The owner and participants of a shared conversation; empty while it is not shared. */
|
|
1259
|
-
readonly members: _angular_core.InputSignal<readonly ConversationMember[]>;
|
|
1260
|
-
/** The current user, to tell their own messages from those of others. */
|
|
1261
|
-
readonly currentActorId: _angular_core.InputSignal<string | null>;
|
|
1262
|
-
/** False when the pending approval belongs to another participant's turn. */
|
|
1263
|
-
readonly canDecide: _angular_core.InputSignal<boolean>;
|
|
1264
|
-
/** Name of the participant who decides the pending approval, when it is someone else. */
|
|
1265
|
-
readonly decisionOwner: _angular_core.InputSignal<string | null>;
|
|
1266
|
-
readonly approvalDecision: _angular_core.OutputEmitterRef<ApprovalDecision>;
|
|
1267
|
-
private readonly names;
|
|
1268
|
-
readonly virtualThreshold = 200;
|
|
1269
|
-
readonly virtual: _angular_core.Signal<boolean>;
|
|
1270
|
-
/**
|
|
1271
|
-
* True while the turn runs and nothing else shows progress: before the first part and
|
|
1272
|
-
* between tool calls while the model decides what to do next. Streaming text and a
|
|
1273
|
-
* running tool group show their own progress; an approval waits for the user.
|
|
1274
|
-
*/
|
|
1275
|
-
readonly working: _angular_core.Signal<boolean>;
|
|
1276
|
-
/** Whole seconds since the running turn started. */
|
|
1277
|
-
readonly elapsedSeconds: _angular_core.Signal<number>;
|
|
1278
|
-
private readonly turnStartedAt;
|
|
1279
|
-
private readonly now;
|
|
1280
|
-
private readonly scroller;
|
|
1281
|
-
private readonly viewport;
|
|
1282
|
-
constructor();
|
|
1283
|
-
trackMessage(_index: number, message: Message): string;
|
|
1284
|
-
/** True for a user message written by another person in a shared conversation. */
|
|
1285
|
-
isOthers(message: Message): boolean;
|
|
1286
|
-
/** Display name of another person's message, or `null` when the application provides none. */
|
|
1287
|
-
authorName(message: Message): string | null;
|
|
1288
|
-
private scrollElement;
|
|
1289
|
-
private scrollToEnd;
|
|
1290
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantThreadComponent, never>;
|
|
1291
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantThreadComponent, "nh-assistant-thread", never, { "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "streaming": { "alias": "streaming"; "required": false; "isSignal": true; }; "deciding": { "alias": "deciding"; "required": false; "isSignal": true; }; "markdown": { "alias": "markdown"; "required": false; "isSignal": true; }; "members": { "alias": "members"; "required": false; "isSignal": true; }; "currentActorId": { "alias": "currentActorId"; "required": false; "isSignal": true; }; "canDecide": { "alias": "canDecide"; "required": false; "isSignal": true; }; "decisionOwner": { "alias": "decisionOwner"; "required": false; "isSignal": true; }; }, { "approvalDecision": "approvalDecision"; }, never, never, true, never>;
|
|
1292
|
-
}
|
|
1293
|
-
|
|
1294
2001
|
/**
|
|
1295
2002
|
* Message input. Enter sends when sending is available; Shift+Enter inserts a new line.
|
|
1296
2003
|
* Drafting remains available while the assistant runs or waits for approval.
|
|
@@ -1351,8 +2058,12 @@ declare class NhAssistantToolCallCardComponent {
|
|
|
1351
2058
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantToolCallCardComponent, "nh-assistant-tool-call-card", never, { "part": { "alias": "part"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1352
2059
|
}
|
|
1353
2060
|
|
|
1354
|
-
/**
|
|
1355
|
-
|
|
2061
|
+
/**
|
|
2062
|
+
* Overall state of a run of tool calls, from most to least urgent. `not-executed` means that every
|
|
2063
|
+
* call finished and at least one ended without running, because its proposal expired, was
|
|
2064
|
+
* withdrawn or became stale.
|
|
2065
|
+
*/
|
|
2066
|
+
type NhAssistantToolCallGroupState = 'awaiting-approval' | 'running' | 'failed' | 'not-executed' | 'succeeded';
|
|
1356
2067
|
/**
|
|
1357
2068
|
* Summarizes consecutive tool calls in one collapsed line that counts along live: the
|
|
1358
2069
|
* tool that runs now while the assistant works, and how many tools were used and failed
|
|
@@ -1367,6 +2078,8 @@ declare class NhAssistantToolCallGroupComponent {
|
|
|
1367
2078
|
readonly total: _angular_core.Signal<number>;
|
|
1368
2079
|
readonly finished: _angular_core.Signal<number>;
|
|
1369
2080
|
readonly failed: _angular_core.Signal<number>;
|
|
2081
|
+
/** Calls that finished without running; they never wait. */
|
|
2082
|
+
readonly notExecuted: _angular_core.Signal<number>;
|
|
1370
2083
|
readonly state: _angular_core.Signal<NhAssistantToolCallGroupState>;
|
|
1371
2084
|
readonly stateIcon: _angular_core.Signal<NhAssistantIconName>;
|
|
1372
2085
|
toggle(): void;
|
|
@@ -1379,33 +2092,120 @@ declare function formatNhAssistantCountdown(milliseconds: number): string;
|
|
|
1379
2092
|
/**
|
|
1380
2093
|
* Asks the user to approve or reject a proposed mutation. Shows the summary, targets,
|
|
1381
2094
|
* proposed arguments and a countdown to expiry. A decision is emitted at most once until
|
|
1382
|
-
* the host reports that it is no longer deciding.
|
|
2095
|
+
* the host reports that it is no longer deciding. After the user rejected an agent's proposal
|
|
2096
|
+
* (`canGiveFeedback`), a low-key action asks what was wrong.
|
|
1383
2097
|
*/
|
|
1384
2098
|
declare class NhAssistantApprovalCardComponent {
|
|
1385
2099
|
readonly approval: _angular_core.InputSignal<ApprovalPart>;
|
|
1386
2100
|
/** True while the host submits a decision; disables both buttons. */
|
|
1387
2101
|
readonly deciding: _angular_core.InputSignal<boolean>;
|
|
1388
2102
|
/**
|
|
1389
|
-
* False when the
|
|
1390
|
-
*
|
|
2103
|
+
* False when the current user may not decide: in a chat the approval belongs to another
|
|
2104
|
+
* participant's turn, in an agent thread the user is no approver of the proposal.
|
|
1391
2105
|
*/
|
|
1392
2106
|
readonly canDecide: _angular_core.InputSignal<boolean>;
|
|
1393
|
-
/** Name of the participant who decides, shown when the current user cannot. */
|
|
2107
|
+
/** Name of the participant who decides a `turn` approval, shown when the current user cannot. */
|
|
1394
2108
|
readonly decisionOwner: _angular_core.InputSignal<string | null>;
|
|
2109
|
+
/**
|
|
2110
|
+
* Who decides when the current user cannot: the author of the turn (`turn`, the default), an
|
|
2111
|
+
* approver of the agent thread's subject (`approver`), or another approver because the current
|
|
2112
|
+
* user started the work (`other-approver`).
|
|
2113
|
+
*/
|
|
2114
|
+
readonly waitingFor: _angular_core.InputSignal<NhAssistantApprovalWaitingFor>;
|
|
2115
|
+
/**
|
|
2116
|
+
* True when the current user rejected this agent proposal and may say what was wrong, for example
|
|
2117
|
+
* from `NhAssistantStore.approvalRights`. Chat approvals never offer feedback.
|
|
2118
|
+
*/
|
|
2119
|
+
readonly canGiveFeedback: _angular_core.InputSignal<boolean>;
|
|
1395
2120
|
readonly decide: _angular_core.OutputEmitterRef<ApprovalDecision>;
|
|
1396
2121
|
private readonly now;
|
|
1397
2122
|
private readonly submitted;
|
|
2123
|
+
/** The feedback question is expanded. */
|
|
2124
|
+
readonly feedbackOpen: _angular_core.WritableSignal<boolean>;
|
|
2125
|
+
/** The feedback was stored; the question thanks the person and the action disappears. */
|
|
2126
|
+
readonly feedbackSaved: _angular_core.WritableSignal<boolean>;
|
|
2127
|
+
private readonly feedbackToggle;
|
|
1398
2128
|
readonly remainingMs: _angular_core.Signal<number>;
|
|
1399
2129
|
readonly expired: _angular_core.Signal<boolean>;
|
|
1400
2130
|
readonly effectiveStatus: _angular_core.Signal<ApprovalStatus>;
|
|
1401
2131
|
readonly actionable: _angular_core.Signal<boolean>;
|
|
2132
|
+
readonly succeeded: _angular_core.Signal<boolean>;
|
|
1402
2133
|
readonly disabled: _angular_core.Signal<boolean>;
|
|
1403
2134
|
readonly countdown: _angular_core.Signal<string>;
|
|
1404
2135
|
readonly presentedSummary: _angular_core.Signal<string | null>;
|
|
2136
|
+
readonly feedbackAvailable: _angular_core.Signal<boolean>;
|
|
2137
|
+
readonly feedbackIds: _angular_core.Signal<string[]>;
|
|
2138
|
+
readonly feedbackPanelId: string;
|
|
2139
|
+
/** Translation key of the text shown instead of the buttons when the current user cannot decide. */
|
|
2140
|
+
readonly waitingKey: _angular_core.Signal<"nh-assistant.approval.waiting-for-approver" | "nh-assistant.approval.waiting-for-other-approver" | "nh-assistant.approval.waiting-for" | "nh-assistant.approval.waiting-for-participant">;
|
|
1405
2141
|
constructor();
|
|
1406
2142
|
choose(decision: ApprovalDecision): void;
|
|
2143
|
+
toggleFeedback(): void;
|
|
2144
|
+
onFeedbackSaved(): void;
|
|
2145
|
+
/** Collapses the question and returns focus to the action that opened it. */
|
|
2146
|
+
onFeedbackDismissed(): void;
|
|
1407
2147
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantApprovalCardComponent, never>;
|
|
1408
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantApprovalCardComponent, "nh-assistant-approval-card", never, { "approval": { "alias": "approval"; "required": true; "isSignal": true; }; "deciding": { "alias": "deciding"; "required": false; "isSignal": true; }; "canDecide": { "alias": "canDecide"; "required": false; "isSignal": true; }; "decisionOwner": { "alias": "decisionOwner"; "required": false; "isSignal": true; }; }, { "decide": "decide"; }, never, never, true, never>;
|
|
2148
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantApprovalCardComponent, "nh-assistant-approval-card", never, { "approval": { "alias": "approval"; "required": true; "isSignal": true; }; "deciding": { "alias": "deciding"; "required": false; "isSignal": true; }; "canDecide": { "alias": "canDecide"; "required": false; "isSignal": true; }; "decisionOwner": { "alias": "decisionOwner"; "required": false; "isSignal": true; }; "waitingFor": { "alias": "waitingFor"; "required": false; "isSignal": true; }; "canGiveFeedback": { "alias": "canGiveFeedback"; "required": false; "isSignal": true; }; }, { "decide": "decide"; }, never, never, true, never>;
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
/** What `nh-assistant-proposal-feedback` stored. */
|
|
2152
|
+
interface NhAssistantProposalFeedbackSaved {
|
|
2153
|
+
/** The proposals whose feedback the server stored. */
|
|
2154
|
+
approvalIds: string[];
|
|
2155
|
+
category: AgentProposalFeedbackCategory;
|
|
2156
|
+
text: string | null;
|
|
2157
|
+
}
|
|
2158
|
+
/**
|
|
2159
|
+
* Asks, after a rejection, what was wrong with one or more agent proposals: a category from a fixed
|
|
2160
|
+
* set and an optional text. It is optional and never blocks the decision; people skip it with one
|
|
2161
|
+
* action. One proposal is sent with `PUT approvals/{id}/feedback`, several rejected together with
|
|
2162
|
+
* `POST approvals/feedback` as bulk feedback. With `initial` it changes the caller's own feedback.
|
|
2163
|
+
* After saving it thanks the person in place of the form; hosts remove it after `dismissed`.
|
|
2164
|
+
*/
|
|
2165
|
+
declare class NhAssistantProposalFeedbackComponent {
|
|
2166
|
+
private readonly api;
|
|
2167
|
+
private readonly host;
|
|
2168
|
+
private readonly document;
|
|
2169
|
+
private readonly injector;
|
|
2170
|
+
private readonly thanks;
|
|
2171
|
+
private subscription?;
|
|
2172
|
+
/** The proposals the feedback is about; several when they were rejected together. */
|
|
2173
|
+
readonly approvalIds: _angular_core.InputSignal<readonly string[]>;
|
|
2174
|
+
/** The caller's current feedback, to change it; `null` for new feedback. */
|
|
2175
|
+
readonly initial: _angular_core.InputSignal<AgentProposalFeedback | null>;
|
|
2176
|
+
/** Emits after the server stored the feedback. */
|
|
2177
|
+
readonly saved: _angular_core.OutputEmitterRef<NhAssistantProposalFeedbackSaved>;
|
|
2178
|
+
/** Emits when the person skips the question. */
|
|
2179
|
+
readonly dismissed: _angular_core.OutputEmitterRef<void>;
|
|
2180
|
+
readonly id: string;
|
|
2181
|
+
readonly categories: readonly AgentProposalFeedbackCategory[];
|
|
2182
|
+
readonly maxText = 1000;
|
|
2183
|
+
/** A new question when the host passes other proposals or other initial feedback. */
|
|
2184
|
+
private readonly question;
|
|
2185
|
+
readonly category: _angular_core.WritableSignal<AgentProposalFeedbackCategory | null>;
|
|
2186
|
+
readonly text: _angular_core.WritableSignal<string>;
|
|
2187
|
+
readonly busy: _angular_core.WritableSignal<boolean>;
|
|
2188
|
+
readonly done: _angular_core.WritableSignal<boolean>;
|
|
2189
|
+
/** Set when a bulk request stored the feedback for only part of the proposals. */
|
|
2190
|
+
readonly partial: _angular_core.WritableSignal<{
|
|
2191
|
+
stored: number;
|
|
2192
|
+
total: number;
|
|
2193
|
+
} | null>;
|
|
2194
|
+
readonly error: _angular_core.WritableSignal<NhAssistantError | null>;
|
|
2195
|
+
readonly errorKeys: _angular_core.Signal<string[]>;
|
|
2196
|
+
readonly count: _angular_core.Signal<number>;
|
|
2197
|
+
readonly textLength: _angular_core.Signal<number>;
|
|
2198
|
+
readonly tooLong: _angular_core.Signal<boolean>;
|
|
2199
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
2200
|
+
constructor();
|
|
2201
|
+
choose(category: AgentProposalFeedbackCategory): void;
|
|
2202
|
+
onText(event: Event): void;
|
|
2203
|
+
dismiss(): void;
|
|
2204
|
+
send(): void;
|
|
2205
|
+
/** One proposal through its own endpoint; several in requests of at most the bulk limit. */
|
|
2206
|
+
private request;
|
|
2207
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantProposalFeedbackComponent, never>;
|
|
2208
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantProposalFeedbackComponent, "nh-assistant-proposal-feedback", never, { "approvalIds": { "alias": "approvalIds"; "required": true; "isSignal": true; }; "initial": { "alias": "initial"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "dismissed": "dismissed"; }, never, never, true, never>;
|
|
1409
2209
|
}
|
|
1410
2210
|
|
|
1411
2211
|
/**
|
|
@@ -1533,6 +2333,30 @@ declare class NhAssistantActivityComponent {
|
|
|
1533
2333
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantActivityComponent, "nh-assistant-activity", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "conversationSelect": "conversationSelect"; }, never, never, true, never>;
|
|
1534
2334
|
}
|
|
1535
2335
|
|
|
2336
|
+
/**
|
|
2337
|
+
* A compact count of the agent work on one subject, for example on each row of a project list.
|
|
2338
|
+
* It shows nothing while the subject has no work. Otherwise it shows the number of proposals the
|
|
2339
|
+
* viewer may decide in the accent color, or, when they may decide none, a neutral count of the
|
|
2340
|
+
* open proposals, and a small working indicator while an agent works on the subject. Its tooltip
|
|
2341
|
+
* and accessible name say both counts. Badges on one page share one summary request per tick and
|
|
2342
|
+
* refresh on live agent-work updates of their subject; see `NhAssistantSubjectSummaryService`.
|
|
2343
|
+
*/
|
|
2344
|
+
declare class NhAssistantSubjectBadgeComponent {
|
|
2345
|
+
private readonly summaries;
|
|
2346
|
+
private readonly summary;
|
|
2347
|
+
/** The application's kind of subject, for example `project`. */
|
|
2348
|
+
readonly subjectType: _angular_core.InputSignal<string>;
|
|
2349
|
+
readonly subjectId: _angular_core.InputSignal<string>;
|
|
2350
|
+
/** The summary while the subject has work to show; `null` otherwise. */
|
|
2351
|
+
readonly work: _angular_core.Signal<AgentSubjectSummary | null>;
|
|
2352
|
+
readonly count: _angular_core.Signal<number>;
|
|
2353
|
+
readonly countLabel: _angular_core.Signal<string>;
|
|
2354
|
+
readonly proposalsKey: _angular_core.Signal<"nh-assistant.subject-badge.to-decide" | "nh-assistant.subject-badge.open" | null>;
|
|
2355
|
+
constructor();
|
|
2356
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NhAssistantSubjectBadgeComponent, never>;
|
|
2357
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NhAssistantSubjectBadgeComponent, "nh-assistant-subject-badge", never, { "subjectType": { "alias": "subjectType"; "required": true; "isSignal": true; }; "subjectId": { "alias": "subjectId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2358
|
+
}
|
|
2359
|
+
|
|
1536
2360
|
/**
|
|
1537
2361
|
* Translates the first key that has a translation and otherwise returns the fallback text.
|
|
1538
2362
|
* Used for server-provided keys (agent names, error message keys, result codes) that the
|
|
@@ -1551,6 +2375,14 @@ declare class NhAssistantTranslatePipe implements PipeTransform {
|
|
|
1551
2375
|
static ɵpipe: _angular_core.ɵɵPipeDeclaration<NhAssistantTranslatePipe, "nhAssistantTranslate", true>;
|
|
1552
2376
|
}
|
|
1553
2377
|
|
|
2378
|
+
/**
|
|
2379
|
+
* Calls `reload` once a burst of live agent-work updates that `matches` has settled, and after
|
|
2380
|
+
* every (re)connect of the hub, because updates sent while it was disconnected are lost. Without a
|
|
2381
|
+
* live service or a connected hub nothing arrives and the view keeps its manual refresh. Call it in
|
|
2382
|
+
* an injection context, for example a component constructor; it stops when that context ends.
|
|
2383
|
+
*/
|
|
2384
|
+
declare function nhAssistantReloadOnAgentWork(matches: (change: LiveAgentWorkChanged) => boolean, reload: () => void): void;
|
|
2385
|
+
|
|
1554
2386
|
/** Converts any failure into a user-facing code and translation key, never raw text. */
|
|
1555
2387
|
declare function toNhAssistantError(error: unknown): NhAssistantError;
|
|
1556
2388
|
/** Translation keys for an error, from the most to the least specific. */
|
|
@@ -1558,5 +2390,5 @@ declare function nhAssistantErrorKeys(error: NhAssistantError | null): string[];
|
|
|
1558
2390
|
/** Dash-case identifiers as the contract requires for agent and MCP server ids. */
|
|
1559
2391
|
declare const NH_ASSISTANT_DASH_CASE: RegExp;
|
|
1560
2392
|
|
|
1561
|
-
export { NH_ASSISTANT_ACCESS_POLICY, NH_ASSISTANT_CONFIG, NH_ASSISTANT_CONVERSATION_FRAGMENT, NH_ASSISTANT_FETCH, NH_ASSISTANT_ICONS, NH_ASSISTANT_JOIN_FRAGMENT, NH_ASSISTANT_MAX_CUSTOM_INSTRUCTIONS, NH_ASSISTANT_NO_ANSWER_NOTICE_CODE, NH_ASSISTANT_PAGE_CONTEXT_LIMITS, NH_ASSISTANT_PANEL_MOBILE_QUERY, NH_ASSISTANT_PANEL_WIDTH, NH_ASSISTANT_SSE_EVENT_TYPES, NH_ASSISTANT_TRANSLATIONS, NH_ASSISTANT_VIRTUAL_SCROLL_THRESHOLD, NhAssistantActivityComponent, NhAssistantAdminApiService, NhAssistantAgentPickerComponent, NhAssistantAllowAllAccessPolicy, NhAssistantApiError, NhAssistantApiService, NhAssistantApprovalCardComponent, NhAssistantClientErrorCodes, NhAssistantComposerComponent, NhAssistantConversationListComponent, NhAssistantLauncherComponent, NhAssistantLiveService, NhAssistantPanelComponent, NhAssistantPanelService, NhAssistantPreferencesComponent, NhAssistantPushService, NhAssistantShareComponent, NhAssistantSseParser, NhAssistantStore, NhAssistantThreadComponent, NhAssistantToolCallCardComponent, NhAssistantToolCallGroupComponent, NhAssistantTranslationMerger, applyNhAssistantApprovalDecision, applyNhAssistantConversationChange, applyNhAssistantEvent, applyNhAssistantLiveEvent, describeNhAssistantClientContext, formatNhAssistantCountdown, nhAssistantCodeForStatus, nhAssistantErrorMessageKey, nhAssistantIsUnread, nhAssistantLatestTurnHasText, nhAssistantShareLink, normalizeNhAssistantClientContext, provideNhAssistant, NH_ASSISTANT_DASH_CASE as ɵNH_ASSISTANT_DASH_CASE, NhAssistantIconComponent as ɵNhAssistantIconComponent, NhAssistantTranslatePipe as ɵNhAssistantTranslatePipe, nhAssistantErrorKeys as ɵnhAssistantErrorKeys, toNhAssistantError as ɵtoNhAssistantError };
|
|
1562
|
-
export type { AdminAgent, AdminAgentInput, AgentSummary, ApplicationContext, ApplicationContextVersion, ApprovalDecision, ApprovalPart, ApprovalPresentation, ApprovalPresentationField, ApprovalRequiredEvent, ApprovalStatus, AssistantAddressForm, AssistantAutonomy, AssistantCollaboration, AssistantErrorEvent, AssistantPreferences, AssistantResponseLength, AssistantStatus, AssistantStyle, ClientContext, ClientContextEntity, Conversation, ConversationMember, ConversationPage, ConversationRole, ConversationStatus, ConversationSummary, CreateConversationRequest, DecideApprovalRequest, DirectoryEntry, LiveConversationChanged, LiveConversationEvent, LiveConversationRead, LiveConversationRemoved, McpAuthMode, McpServer, McpServerInput, McpServerTestResult, McpTool, McpToolEffect, McpToolStatus, Message, MessageDeltaEvent, MessagePart, NhAssistantAccessPolicy, NhAssistantActivity, NhAssistantClientContext, NhAssistantClientErrorCode, NhAssistantConfig, NhAssistantError, NhAssistantFetch, NhAssistantIconName, NhAssistantLiveState, NhAssistantNotice, NhAssistantPushConfig, NhAssistantPushState, NhAssistantQueuedMessage, NhAssistantRawSseMessage, NhAssistantSseEvent, NhAssistantSseEventMap, NhAssistantSseEventType, NhAssistantStatusCodes, NhAssistantToolCallGroupState, NotificationSettings, PushSubscriptionRequest, SendMessageRequest, ShareLink, TextPart, ToolCallPart, ToolCallStatus, ToolCatalogEffect, ToolCatalogEntry, ToolCompletedEvent, ToolStartedEvent, TurnCompletedEvent, TurnCompletionStatus, TurnStartedEvent, TurnUsage, UpdateAdminAgentRequest, UpdateApplicationContextRequest, UpdateMcpToolRequest };
|
|
2393
|
+
export { NH_ASSISTANT_ACCESS_POLICY, NH_ASSISTANT_CONFIG, NH_ASSISTANT_CONVERSATION_FRAGMENT, NH_ASSISTANT_FEEDBACK_CATEGORIES, NH_ASSISTANT_FEEDBACK_GROUPS, NH_ASSISTANT_FETCH, NH_ASSISTANT_ICONS, NH_ASSISTANT_JOIN_FRAGMENT, NH_ASSISTANT_MAX_BULK_FEEDBACK, NH_ASSISTANT_MAX_CUSTOM_INSTRUCTIONS, NH_ASSISTANT_MAX_FEEDBACK_TEXT, NH_ASSISTANT_MAX_SUBJECT_SUMMARY, NH_ASSISTANT_NO_ANSWER_NOTICE_CODE, NH_ASSISTANT_PAGE_CONTEXT_LIMITS, NH_ASSISTANT_PANEL_MOBILE_QUERY, NH_ASSISTANT_PANEL_WIDTH, NH_ASSISTANT_SSE_EVENT_TYPES, NH_ASSISTANT_TRANSLATIONS, NH_ASSISTANT_VIRTUAL_SCROLL_THRESHOLD, NhAssistantActivityComponent, NhAssistantAdminApiService, NhAssistantAgentPickerComponent, NhAssistantAgentRunApiService, NhAssistantAllowAllAccessPolicy, NhAssistantApiError, NhAssistantApiService, NhAssistantApprovalCardComponent, NhAssistantClientErrorCodes, NhAssistantComposerComponent, NhAssistantConversationListComponent, NhAssistantLauncherComponent, NhAssistantLiveService, NhAssistantPanelComponent, NhAssistantPanelService, NhAssistantPreferencesComponent, NhAssistantProposalFeedbackComponent, NhAssistantPushService, NhAssistantShareComponent, NhAssistantSseParser, NhAssistantStore, NhAssistantSubjectBadgeComponent, NhAssistantSubjectSummaryService, NhAssistantThreadComponent, NhAssistantToolCallCardComponent, NhAssistantToolCallGroupComponent, NhAssistantTranslationMerger, applyNhAssistantApprovalDecision, applyNhAssistantConversationChange, applyNhAssistantEvent, applyNhAssistantLiveEvent, describeNhAssistantClientContext, formatNhAssistantCountdown, nhAssistantCodeForStatus, nhAssistantErrorMessageKey, nhAssistantIsUnread, nhAssistantLatestTurnHasText, nhAssistantShareLink, normalizeNhAssistantClientContext, provideNhAssistant, NH_ASSISTANT_DASH_CASE as ɵNH_ASSISTANT_DASH_CASE, NhAssistantIconComponent as ɵNhAssistantIconComponent, NhAssistantTranslatePipe as ɵNhAssistantTranslatePipe, nhAssistantErrorKeys as ɵnhAssistantErrorKeys, nhAssistantReloadOnAgentWork as ɵnhAssistantReloadOnAgentWork, toNhAssistantError as ɵtoNhAssistantError };
|
|
2394
|
+
export type { AdminAgent, AdminAgentInput, AgentArtifact, AgentConsultation, AgentConsultationList, AgentConsultationStatus, AgentDecisionOutcome, AgentExecutionResolution, AgentFeedbackCategoryCount, AgentFeedbackExportFilter, AgentFeedbackFilter, AgentFeedbackItem, AgentFeedbackList, AgentFeedbackListFilter, AgentFeedbackOutcome, AgentFeedbackSummary, AgentFeedbackSummaryRow, AgentGrantSource, AgentInbox, AgentInboxFilter, AgentProposal, AgentProposalDecision, AgentProposalDecisionRight, AgentProposalFeedback, AgentProposalFeedbackCategory, AgentProposalFeedbackGroup, AgentProposalStatus, AgentRun, AgentRunList, AgentRunRetryMode, AgentRunStatus, AgentSubjectRole, AgentSubjectSummary, AgentSubjectSummaryList, AgentSubjectWork, AgentSubjectWorkAgent, AgentSubjectWorkProposal, AgentSummary, AgentThread, AgentThreadLookup, AgentThreadMemory, AgentTriggerReceipt, ApplicationContext, ApplicationContextVersion, ApprovalDecision, ApprovalPart, ApprovalPresentation, ApprovalPresentationField, ApprovalRequiredEvent, ApprovalStatus, AssistantAddressForm, AssistantAutonomy, AssistantCollaboration, AssistantErrorEvent, AssistantPreferences, AssistantResponseLength, AssistantStatus, AssistantStyle, ClientContext, ClientContextEntity, Conversation, ConversationKind, ConversationMember, ConversationPage, ConversationRole, ConversationStatus, ConversationSummary, ConversationThread, ConversationThreadDecision, CreateConversationRequest, DecideApprovalRequest, DirectoryEntry, LiveAgentWorkChanged, LiveAgentWorkReason, LiveConversationChanged, LiveConversationEvent, LiveConversationRead, LiveConversationRemoved, McpAuthMode, McpServer, McpServerInput, McpServerTestResult, McpTool, McpToolEffect, McpToolStatus, Message, MessageAuthorKind, MessageDeltaEvent, MessagePart, NhAssistantAccessPolicy, NhAssistantActivity, NhAssistantApprovalChoice, NhAssistantApprovalRight, NhAssistantApprovalWaitingFor, NhAssistantClientContext, NhAssistantClientErrorCode, NhAssistantConfig, NhAssistantError, NhAssistantFetch, NhAssistantIconName, NhAssistantLiveState, NhAssistantNotice, NhAssistantProposalFeedbackSaved, NhAssistantPushConfig, NhAssistantPushState, NhAssistantQueuedMessage, NhAssistantRawSseMessage, NhAssistantSseEvent, NhAssistantSseEventMap, NhAssistantSseEventType, NhAssistantStatusCodes, NhAssistantToolCallGroupState, NotificationSettings, PushSubscriptionRequest, SendMessageRequest, ShareLink, StartAgentRequest, TextPart, ToolCallPart, ToolCallStatus, ToolCatalogEffect, ToolCatalogEntry, ToolCompletedEvent, ToolStartedEvent, TurnCompletedEvent, TurnCompletionStatus, TurnStartedEvent, TurnUsage, UpdateAdminAgentRequest, UpdateApplicationContextRequest, UpdateMcpToolRequest };
|