@newheap/platform-ai-chat 0.16.0 → 0.18.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 +24 -1
- package/admin/index.d.ts +92 -6
- package/agent-runs/index.d.ts +188 -9
- package/fesm2022/newheap-platform-ai-chat-admin.mjs +885 -157
- package/fesm2022/newheap-platform-ai-chat-admin.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs +392 -40
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-testing.mjs +1044 -61
- package/fesm2022/newheap-platform-ai-chat-testing.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat.mjs +1074 -187
- package/fesm2022/newheap-platform-ai-chat.mjs.map +1 -1
- package/i18n/en.json +257 -13
- package/i18n/nl.json +257 -13
- package/index.d.ts +550 -32
- package/package.json +1 -1
- package/testing/index.d.ts +141 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { NgTemplateOutlet, DatePipe, DOCUMENT } from '@angular/common';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
3
|
import { inject, ElementRef, Injector, input, output, signal, computed, DestroyRef, afterNextRender, ChangeDetectionStrategy, Component, viewChild, effect, untracked } from '@angular/core';
|
|
3
4
|
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
|
|
4
5
|
import { NhAssistantAgentRunApiService, ɵnhAssistantErrorKeys as _nhAssistantErrorKeys, NH_ASSISTANT_MAX_PROPOSAL_LOOKUP, ɵtoNhAssistantError as _toNhAssistantError, ɵNhAssistantIconComponent as _NhAssistantIconComponent, ɵNhAssistantSubjectLinkComponent as _NhAssistantSubjectLinkComponent, NhAssistantProposalFeedbackComponent, ɵNhAssistantTranslatePipe as _NhAssistantTranslatePipe, ɵnhAssistantWatchAgentWork as _nhAssistantWatchAgentWork, ɵnhAssistantReloadOnAgentWork as _nhAssistantReloadOnAgentWork, ɵnhAssistantCodeKeys as _nhAssistantCodeKeys, NhAssistantApiError, ɵNhAssistantMarkdownPipe as _NhAssistantMarkdownPipe, NhAssistantPanelService, NhAssistantStore, NH_ASSISTANT_SYSTEM_GLOBAL_ID, ɵNhAssistantPickerComponent as _NhAssistantPickerComponent, NH_ASSISTANT_SYSTEM_SUBJECT_TYPE } from '@newheap/platform-ai-chat';
|
|
5
|
-
import { DatePipe, DOCUMENT } from '@angular/common';
|
|
6
6
|
import { Subscription, forkJoin, map } from 'rxjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -18,7 +18,13 @@ import { Subscription, forkJoin, map } from 'rxjs';
|
|
|
18
18
|
* replaced, as a closed card when it closes while shown, or when an approval is refused because of
|
|
19
19
|
* it, until the person dismisses it. It reads those proposals by id with one lookup, never through
|
|
20
20
|
* their threads. A proposal that a run placed here from another subject, such as a run for the whole
|
|
21
|
-
* application, says so and offers that run's conversation through `openConversation`.
|
|
21
|
+
* application, says so and offers that run's conversation through `openConversation`. With `groups`
|
|
22
|
+
* from the grouped inbox the list shows a header per group and per subject, optionally per run
|
|
23
|
+
* (`groupByRun`), and "Select group" selects only the group's pending proposals in this list that
|
|
24
|
+
* the caller may decide, never those on another page. `newIds` marks proposals as new. A proposal of
|
|
25
|
+
* a consultation names who asked and its route: one the person who asked decides in their own chat
|
|
26
|
+
* (`asker-decides`) waits for them without actions here; one that runs with the agent's own rights
|
|
27
|
+
* (`subject-agent-rights`) says so, and the person who asked reads why another approver decides.
|
|
22
28
|
*/
|
|
23
29
|
class NhAssistantAgentProposalsComponent {
|
|
24
30
|
constructor() {
|
|
@@ -40,6 +46,16 @@ class NhAssistantAgentProposalsComponent {
|
|
|
40
46
|
* it closes.
|
|
41
47
|
*/
|
|
42
48
|
this.holdClosedCards = input(false, ...(ngDevMode ? [{ debugName: "holdClosedCards" }] : []));
|
|
49
|
+
/**
|
|
50
|
+
* The groups of the grouped inbox (`AgentInbox.groups`) for `proposals` in the order the inbox gave
|
|
51
|
+
* them: the first `count` proposals belong to the first group, and so on. Without groups, or when
|
|
52
|
+
* they do not describe `proposals`, the list is flat.
|
|
53
|
+
*/
|
|
54
|
+
this.groups = input(null, ...(ngDevMode ? [{ debugName: "groups" }] : []));
|
|
55
|
+
/** Shows a header per run within a subject of a grouped list. */
|
|
56
|
+
this.groupByRun = input(false, ...(ngDevMode ? [{ debugName: "groupByRun" }] : []));
|
|
57
|
+
/** Proposals to mark as new, by approval id, for example those made since the last visit of the inbox. */
|
|
58
|
+
this.newIds = input(null, ...(ngDevMode ? [{ debugName: "newIds" }] : []));
|
|
43
59
|
/** Emits after a proposal or its feedback changed, so the host reloads its list. */
|
|
44
60
|
this.changed = output();
|
|
45
61
|
/**
|
|
@@ -65,6 +81,26 @@ class NhAssistantAgentProposalsComponent {
|
|
|
65
81
|
return [...held, ...this.proposals().filter(proposal => !heldIds.has(proposal.approvalId))];
|
|
66
82
|
}, ...(ngDevMode ? [{ debugName: "shown" }] : []));
|
|
67
83
|
this.lookups = new Subscription();
|
|
84
|
+
/**
|
|
85
|
+
* The grouped list: the held closed cards stay above it; `null` for a flat list, or when the groups
|
|
86
|
+
* do not describe the proposals.
|
|
87
|
+
*/
|
|
88
|
+
this.sections = computed(() => {
|
|
89
|
+
const groups = this.groups();
|
|
90
|
+
const items = this.proposals();
|
|
91
|
+
if (!groups || groups.reduce((sum, group) => sum + group.count, 0) !== items.length) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const heldIds = new Set(this.held().map(proposal => proposal.approvalId));
|
|
95
|
+
const sections = [];
|
|
96
|
+
let offset = 0;
|
|
97
|
+
for (const group of groups) {
|
|
98
|
+
const members = items.slice(offset, offset + group.count);
|
|
99
|
+
offset += group.count;
|
|
100
|
+
sections.push(this.groupSection(group, members, heldIds));
|
|
101
|
+
}
|
|
102
|
+
return sections;
|
|
103
|
+
}, ...(ngDevMode ? [{ debugName: "sections" }] : []));
|
|
68
104
|
inject(DestroyRef).onDestroy(() => {
|
|
69
105
|
this.subscription?.unsubscribe();
|
|
70
106
|
this.lookups.unsubscribe();
|
|
@@ -96,6 +132,30 @@ class NhAssistantAgentProposalsComponent {
|
|
|
96
132
|
? { key: 'nh-assistant.agent-runs.proposal.placed-by.object-named', params: { type: origin.subjectTypeName } }
|
|
97
133
|
: { key: 'nh-assistant.agent-runs.proposal.placed-by.object', params: {} };
|
|
98
134
|
}
|
|
135
|
+
/** Whether the proposal is marked as new. */
|
|
136
|
+
isNew(proposal) {
|
|
137
|
+
return this.newIds()?.has(proposal.approvalId) ?? false;
|
|
138
|
+
}
|
|
139
|
+
/** Whether every proposal "Select group" would select in the group is selected. */
|
|
140
|
+
groupSelected(group) {
|
|
141
|
+
const selected = this.selected();
|
|
142
|
+
return group.selectableIds.length > 0 && group.selectableIds.every(id => selected.has(id));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Selects the group's pending proposals in this list that the caller may decide, or deselects them
|
|
146
|
+
* when all are selected. Proposals of the group on another page are never selected: an approver
|
|
147
|
+
* decides only what they see.
|
|
148
|
+
*/
|
|
149
|
+
toggleGroup(group) {
|
|
150
|
+
const next = new Set(this.selected());
|
|
151
|
+
if (this.groupSelected(group)) {
|
|
152
|
+
group.selectableIds.forEach(id => next.delete(id));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
group.selectableIds.forEach(id => next.add(id));
|
|
156
|
+
}
|
|
157
|
+
this.selected.set(next);
|
|
158
|
+
}
|
|
99
159
|
/** True when the newer proposal that replaced this one is in the list. */
|
|
100
160
|
hasSuccessor(proposal) {
|
|
101
161
|
const successor = proposal.supersededByApprovalId;
|
|
@@ -124,23 +184,57 @@ class NhAssistantAgentProposalsComponent {
|
|
|
124
184
|
const nextIds = new Set(next.map(proposal => proposal.approvalId));
|
|
125
185
|
this.holdStale(previous.filter(proposal => proposal.status === 'pending' && !nextIds.has(proposal.approvalId)));
|
|
126
186
|
}
|
|
127
|
-
/**
|
|
187
|
+
/**
|
|
188
|
+
* Whether the caller may decide this proposal: its own right when one was given, otherwise
|
|
189
|
+
* `canDecide`. Nobody decides a proposal here that the person who asked decides in their own chat.
|
|
190
|
+
*/
|
|
128
191
|
mayDecide(proposal) {
|
|
192
|
+
if (this.waitsForAsker(proposal)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
129
195
|
const right = this.decisionRights()?.get(proposal.approvalId);
|
|
130
196
|
return right ? right.canDecide : this.canDecide();
|
|
131
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Whether a pending proposal of a consultation waits for the person who asked, who decides it in
|
|
200
|
+
* their own chat: its route says so, or the server's reason for the caller's right.
|
|
201
|
+
*/
|
|
202
|
+
waitsForAsker(proposal) {
|
|
203
|
+
if (proposal.status !== 'pending') {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
return proposal.consultationRoute === 'asker-decides'
|
|
207
|
+
|| this.decisionRights()?.get(proposal.approvalId)?.reasonCode === askerDecidesCode;
|
|
208
|
+
}
|
|
132
209
|
/**
|
|
133
210
|
* Who decides a pending proposal that has a right the caller lacks: another approver when
|
|
134
|
-
* four-eyes keeps out the person who started the work,
|
|
211
|
+
* four-eyes keeps out the person who started the work, which for a consultation's proposal that
|
|
212
|
+
* runs with the agent's own rights is the person who asked, otherwise an approver. A proposal that
|
|
213
|
+
* waits for the person who asked says so on its own (`waitsForAsker`).
|
|
135
214
|
*/
|
|
136
215
|
waitingForKey(proposal) {
|
|
137
216
|
const right = this.decisionRights()?.get(proposal.approvalId);
|
|
138
|
-
if (!right || right.canDecide || proposal.status !== 'pending') {
|
|
217
|
+
if (!right || right.canDecide || proposal.status !== 'pending' || this.waitsForAsker(proposal)) {
|
|
139
218
|
return null;
|
|
140
219
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
220
|
+
if (right.reasonCode !== fourEyesCode) {
|
|
221
|
+
return 'nh-assistant.approval.waiting-for-approver';
|
|
222
|
+
}
|
|
223
|
+
return proposal.consultationRoute === 'subject-agent-rights'
|
|
224
|
+
? 'nh-assistant.agent-runs.proposal.consultation.four-eyes'
|
|
225
|
+
: 'nh-assistant.approval.waiting-for-other-approver';
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The badge of a consultation's proposal that runs with the agent's own rights: those of a technical
|
|
229
|
+
* account when the agent answers to one, otherwise the agent's own; `null` for other proposals.
|
|
230
|
+
*/
|
|
231
|
+
agentRightsKey(proposal) {
|
|
232
|
+
if (proposal.consultationRoute !== 'subject-agent-rights') {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
return proposal.grantSource === 'accountable'
|
|
236
|
+
? 'nh-assistant.agent-runs.proposal.consultation.runs-with.accountable'
|
|
237
|
+
: 'nh-assistant.agent-runs.proposal.consultation.runs-with.agent';
|
|
144
238
|
}
|
|
145
239
|
toggle(proposal) {
|
|
146
240
|
const next = new Set(this.selected());
|
|
@@ -233,6 +327,48 @@ class NhAssistantAgentProposalsComponent {
|
|
|
233
327
|
action?.focus();
|
|
234
328
|
}, { injector: this.injector });
|
|
235
329
|
}
|
|
330
|
+
groupSection(group, members, heldIds) {
|
|
331
|
+
const key = `${group.subjectType}|${group.subjectId}`;
|
|
332
|
+
const subjects = [];
|
|
333
|
+
let offset = 0;
|
|
334
|
+
for (const subject of group.subjects) {
|
|
335
|
+
const items = members
|
|
336
|
+
.slice(offset, offset + subject.count)
|
|
337
|
+
.filter(proposal => !heldIds.has(proposal.approvalId)
|
|
338
|
+
&& proposal.subjectType === subject.subjectType
|
|
339
|
+
&& proposal.subjectId === subject.subjectId);
|
|
340
|
+
offset += subject.count;
|
|
341
|
+
const first = items[0];
|
|
342
|
+
subjects.push({
|
|
343
|
+
key: `${key}|${subject.subjectType}|${subject.subjectId}`,
|
|
344
|
+
subjectType: subject.subjectType,
|
|
345
|
+
subjectId: subject.subjectId,
|
|
346
|
+
label: first?.subjectDisplayName ?? subject.subjectId,
|
|
347
|
+
typeName: first?.subjectTypeName ?? null,
|
|
348
|
+
link: first?.subjectLink ?? null,
|
|
349
|
+
own: subject.subjectType === group.subjectType && subject.subjectId === group.subjectId,
|
|
350
|
+
count: subject.count,
|
|
351
|
+
total: subject.total,
|
|
352
|
+
runs: runsOf(items)
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
key,
|
|
357
|
+
subjectType: group.subjectType,
|
|
358
|
+
subjectId: group.subjectId,
|
|
359
|
+
label: group.displayName ?? group.subjectId,
|
|
360
|
+
typeName: group.subjectTypeName ?? null,
|
|
361
|
+
link: group.subjectLink ?? null,
|
|
362
|
+
count: group.count,
|
|
363
|
+
total: group.total,
|
|
364
|
+
continuesFromPreviousPage: group.continuesFromPreviousPage,
|
|
365
|
+
continuesOnNextPage: group.continuesOnNextPage,
|
|
366
|
+
subjects,
|
|
367
|
+
selectableIds: members
|
|
368
|
+
.filter(proposal => !heldIds.has(proposal.approvalId) && proposal.status === 'pending' && this.mayDecide(proposal))
|
|
369
|
+
.map(proposal => proposal.approvalId)
|
|
370
|
+
};
|
|
371
|
+
}
|
|
236
372
|
ask(approvalIds, summary) {
|
|
237
373
|
this.feedback.set({ approvalIds, initial: null, placement: 'prompt', summary, saved: false });
|
|
238
374
|
}
|
|
@@ -291,26 +427,50 @@ class NhAssistantAgentProposalsComponent {
|
|
|
291
427
|
});
|
|
292
428
|
}
|
|
293
429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentProposalsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
294
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentProposalsComponent, isStandalone: true, selector: "nh-assistant-agent-proposals", inputs: { proposals: { classPropertyName: "proposals", publicName: "proposals", isSignal: true, isRequired: true, transformFunction: null }, canDecide: { classPropertyName: "canDecide", publicName: "canDecide", isSignal: true, isRequired: false, transformFunction: null }, decisionRights: { classPropertyName: "decisionRights", publicName: "decisionRights", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, holdClosedCards: { classPropertyName: "holdClosedCards", publicName: "holdClosedCards", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", openConversation: "openConversation" }, ngImport: i0, template: "<div class=\"proposal-list\">\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n\n @if (feedback(); as request) {\n @if (request.placement === 'prompt') {\n <div class=\"feedback-prompt\">\n @if (request.summary && !request.saved) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.proposal.rejected-one' | translate: { summary: request.summary } }}</p>\n }\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n </div>\n }\n }\n\n @if (selectable() && pending().length > 0) {\n <div class=\"toolbar\">\n <label class=\"select\">\n <input type=\"checkbox\" [checked]=\"allSelected()\" [disabled]=\"busy()\" (change)=\"toggleAll()\" />\n {{ 'nh-assistant.agent-runs.inbox.select-all' | translate }}\n </label>\n <button class=\"primary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.inbox.approve-selected' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.inbox.reject-selected' | translate }}\n </button>\n </div>\n }\n\n @if (shown().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of shown(); track proposal.approvalId) {\n <li\n class=\"card\"\n tabindex=\"-1\"\n [attr.data-approval-id]=\"proposal.approvalId\"\n [class.selected]=\"selected().has(proposal.approvalId)\"\n [class.closed]=\"isHeld(proposal)\">\n <div class=\"card-header\">\n @if (selectable() && proposal.status === 'pending' && mayDecide(proposal)) {\n <input\n type=\"checkbox\"\n [checked]=\"selected().has(proposal.approvalId)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select' | translate\"\n (change)=\"toggle(proposal)\" />\n }\n <strong>\n <nh-assistant-subject-link\n [subjectType]=\"proposal.subjectType\"\n [subjectId]=\"proposal.subjectId\"\n [label]=\"proposal.subjectDisplayName ?? proposal.subjectId\"\n [typeName]=\"proposal.subjectTypeName\"\n [link]=\"proposal.subjectLink\" />\n </strong>\n <span class=\"muted\">{{ proposal.presentation?.toolDisplayName ?? proposal.toolId }}</span>\n <span\n class=\"badge\"\n [class.success]=\"proposal.status === 'executed' || proposal.status === 'resolved'\"\n [class.warning]=\"proposal.status === 'pending' || proposal.status === 'execution-unknown' || proposal.status === 'stale'\"\n [class.danger]=\"proposal.status === 'execution-failed' || proposal.status === 'rejected'\">\n {{ statusKey(proposal) | translate }}\n </span>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.proposal.mode.' + proposal.mode | translate }}</span>\n @if (proposal.grantSource !== 'none') {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ 'nh-assistant.tool-call.grant-source.' + proposal.grantSource | translate }}\n </span>\n }\n @if (proposal.consultationId) {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.agent-runs.proposal.from-consultation-hint' | translate\">\n {{ 'nh-assistant.agent-runs.proposal.from-consultation' | translate }}\n </span>\n }\n </div>\n @if (proposal.placedBy; as origin) {\n @let placedBy = originText(origin);\n <p class=\"placed-by\">\n <span>{{ placedBy.key | translate: placedBy.params }}</span>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.placed-by.open-label' | translate\"\n (click)=\"openConversation.emit(origin.conversationId)\">\n {{ 'nh-assistant.agent-runs.proposal.placed-by.open' | translate }}\n </button>\n </p>\n }\n @if (proposal.presentation; as presentation) {\n <p class=\"summary\">{{ presentation.summary }}</p>\n @if (presentation.fields.length > 0) {\n <dl class=\"presentation-fields\">\n @for (field of presentation.fields; track $index) {\n <div>\n <dt>{{ field.label }}</dt>\n <dd>{{ field.value }}</dd>\n </div>\n }\n </dl>\n }\n @if (presentation.notice) {\n <p class=\"message warning\">{{ presentation.notice }}</p>\n }\n } @else {\n <p class=\"summary\">{{ 'nh-assistant.approval.fallback-summary' | translate }}</p>\n }\n @if (proposal.rationale) {\n <p class=\"rationale\">{{ 'nh-assistant.approval.rationale' | translate: { rationale: proposal.rationale } }}</p>\n }\n @if (proposal.status === 'stale' && proposal.staleExplanation) {\n <p class=\"message stale-explanation\">{{ proposal.staleExplanation }}</p>\n }\n @if (hasSuccessor(proposal)) {\n <button class=\"text-button\" type=\"button\" (click)=\"showSuccessor(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.show-successor' | translate }}\n </button>\n }\n @if (isHeld(proposal)) {\n <div class=\"closed-card\">\n <p class=\"muted\" role=\"status\">{{ 'nh-assistant.agent-runs.proposal.closed' | translate }}</p>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.dismiss-label' | translate: { summary: proposal.presentation?.summary ?? proposal.toolId }\"\n (click)=\"dismiss(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.dismiss' | translate }}\n </button>\n </div>\n }\n <details class=\"technical-details\">\n <summary>{{ 'nh-assistant.approval.technical-details' | translate }}</summary>\n <p class=\"label\">{{ 'nh-assistant.approval.tool-id' | translate }}</p>\n <code>{{ proposal.toolId }}</code>\n @if (proposal.targets.length > 0) {\n <p class=\"label\">{{ 'nh-assistant.approval.targets' | translate }}</p>\n <ul class=\"targets\">\n @for (target of proposal.targets; track $index) {\n <li>{{ target }}</li>\n }\n </ul>\n }\n @if (proposal.argumentsPreview) {\n <p class=\"label\">{{ 'nh-assistant.approval.arguments' | translate }}</p>\n <pre>{{ proposal.argumentsPreview }}</pre>\n }\n </details>\n <div class=\"meta\">\n @if (proposal.status === 'pending') {\n <span>{{ 'nh-assistant.agent-runs.proposal.expires' | translate: { date: (proposal.expiresAt | date: 'short') } }}</span>\n }\n @if (proposal.decidedByActorId) {\n <span\n data-proposal-decided-by\n [attr.title]=\"proposal.decidedByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.decidedByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.decidedByActorId }) } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span\n data-proposal-stale-by\n [attr.title]=\"proposal.staleByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.staleByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.staleByActorId }) } }}</span>\n }\n @if (proposal.executionResultCode; as code) {\n <span class=\"mono\">{{ code }}</span>\n }\n @if (proposal.feedback; as given) {\n <span>\n {{ 'nh-assistant.agent-runs.proposal.your-feedback' | translate: { category: ('nh-assistant.proposal-feedback.categories.' + given.category | translate) } }}\n </span>\n }\n @if (proposal.canGiveFeedback && !isAsking(proposal)) {\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.data-feedback-approval]=\"proposal.approvalId\"\n [disabled]=\"busy()\"\n (click)=\"giveFeedback(proposal)\">\n {{ (proposal.feedback ? 'nh-assistant.agent-runs.proposal.change-feedback' : 'nh-assistant.agent-runs.proposal.give-feedback') | translate }}\n </button>\n }\n </div>\n @if (inCard(proposal) && feedback(); as request) {\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n }\n @if (waitingForKey(proposal); as waitingFor) {\n <p class=\"waiting-for\"><nh-assistant-icon name=\"users\" />{{ waitingFor | translate }}</p>\n }\n @if (proposal.status === 'pending' && mayDecide(proposal)) {\n <div class=\"card-actions\">\n <button class=\"primary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.approve' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.proposal.reject' | translate }}\n </button>\n </div>\n }\n @if (proposal.status === 'execution-unknown' && mayDecide(proposal)) {\n <p class=\"message warning\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.proposal.unknown-hint' | translate }}</p>\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 'mark-resolved')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.mark-resolved' | translate }}\n </button>\n <button class=\"danger\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 're-execute')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.proposal.re-execute' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n }\n</div>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantProposalFeedbackComponent, selector: "nh-assistant-proposal-feedback", inputs: ["approvalIds", "initial"], outputs: ["saved", "dismissed"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
430
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentProposalsComponent, isStandalone: true, selector: "nh-assistant-agent-proposals", inputs: { proposals: { classPropertyName: "proposals", publicName: "proposals", isSignal: true, isRequired: true, transformFunction: null }, canDecide: { classPropertyName: "canDecide", publicName: "canDecide", isSignal: true, isRequired: false, transformFunction: null }, decisionRights: { classPropertyName: "decisionRights", publicName: "decisionRights", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, holdClosedCards: { classPropertyName: "holdClosedCards", publicName: "holdClosedCards", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: false, transformFunction: null }, groupByRun: { classPropertyName: "groupByRun", publicName: "groupByRun", isSignal: true, isRequired: false, transformFunction: null }, newIds: { classPropertyName: "newIds", publicName: "newIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", openConversation: "openConversation" }, ngImport: i0, template: "<div class=\"proposal-list\">\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n\n @if (feedback(); as request) {\n @if (request.placement === 'prompt') {\n <div class=\"feedback-prompt\">\n @if (request.summary && !request.saved) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.proposal.rejected-one' | translate: { summary: request.summary } }}</p>\n }\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n </div>\n }\n }\n\n @if (selectable() && pending().length > 0) {\n <div class=\"toolbar\">\n <label class=\"select\">\n <input type=\"checkbox\" [checked]=\"allSelected()\" [disabled]=\"busy()\" (change)=\"toggleAll()\" />\n {{ 'nh-assistant.agent-runs.inbox.select-all' | translate }}\n </label>\n <button class=\"primary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.inbox.approve-selected' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.inbox.reject-selected' | translate }}\n </button>\n </div>\n }\n\n @if (sections(); as groups) {\n @if (held().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of held(); track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n @for (group of groups; track group.key) {\n <section class=\"proposal-group\" [attr.data-proposal-group]=\"group.key\" [attr.aria-label]=\"group.label\">\n <header class=\"proposal-group-header\">\n <h4>\n <nh-assistant-subject-link\n [subjectType]=\"group.subjectType\"\n [subjectId]=\"group.subjectId\"\n [label]=\"group.label\"\n [typeName]=\"group.typeName\"\n [link]=\"group.link\" />\n </h4>\n <span class=\"muted\" data-group-loaded>{{ 'nh-assistant.agent-runs.inbox.group-loaded' | translate: { loaded: group.count, total: group.total } }}</span>\n @if (selectable() && group.selectableIds.length > 0) {\n <label class=\"select\">\n <input\n type=\"checkbox\"\n data-select-group\n [checked]=\"groupSelected(group)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select-group-label' | translate: { count: group.selectableIds.length, name: group.label }\"\n (change)=\"toggleGroup(group)\" />\n {{ 'nh-assistant.agent-runs.inbox.select-group' | translate: { count: group.selectableIds.length } }}\n </label>\n }\n </header>\n @if (group.continuesFromPreviousPage) {\n <p class=\"muted\" data-group-continued>{{ 'nh-assistant.agent-runs.inbox.group-continued' | translate }}</p>\n }\n @for (subject of group.subjects; track subject.key) {\n @if (!subject.own) {\n <h5 class=\"proposal-subject-header\" [attr.data-proposal-subject]=\"subject.subjectType + '|' + subject.subjectId\">\n <nh-assistant-subject-link\n [subjectType]=\"subject.subjectType\"\n [subjectId]=\"subject.subjectId\"\n [label]=\"subject.label\"\n [typeName]=\"subject.typeName\"\n [link]=\"subject.link\" />\n @if (subject.count < subject.total) {\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.group-loaded' | translate: { loaded: subject.count, total: subject.total } }}</span>\n }\n </h5>\n }\n @for (run of subject.runs; track run.key) {\n @if (groupByRun()) {\n <p class=\"proposal-run-header\" [attr.data-proposal-run]=\"run.runId ?? ''\">\n @if (run.runId) {\n {{ 'nh-assistant.agent-runs.inbox.run' | translate: { agent: ([('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: run.agentId), date: (run.proposedAt | date: 'short') } }}\n } @else {\n {{ 'nh-assistant.agent-runs.inbox.no-run' | translate }}\n }\n </p>\n }\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of run.items; track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n }\n @if (group.continuesOnNextPage) {\n <p class=\"muted\" data-group-continues>{{ 'nh-assistant.agent-runs.inbox.group-continues' | translate }}</p>\n }\n </section>\n }\n } @else if (shown().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of shown(); track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n\n <ng-template #card let-proposal>\n <li\n class=\"card\"\n tabindex=\"-1\"\n [attr.data-approval-id]=\"proposal.approvalId\"\n [class.selected]=\"selected().has(proposal.approvalId)\"\n [class.closed]=\"isHeld(proposal)\"\n [class.new]=\"isNew(proposal)\">\n <div class=\"card-header\">\n @if (selectable() && proposal.status === 'pending' && mayDecide(proposal)) {\n <input\n type=\"checkbox\"\n [checked]=\"selected().has(proposal.approvalId)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select' | translate\"\n (change)=\"toggle(proposal)\" />\n }\n <strong>\n <nh-assistant-subject-link\n [subjectType]=\"proposal.subjectType\"\n [subjectId]=\"proposal.subjectId\"\n [label]=\"proposal.subjectDisplayName ?? proposal.subjectId\"\n [typeName]=\"proposal.subjectTypeName\"\n [link]=\"proposal.subjectLink\" />\n </strong>\n <span class=\"muted\">{{ proposal.presentation?.toolDisplayName ?? proposal.toolId }}</span>\n @if (isNew(proposal)) {\n <span class=\"badge new\" data-proposal-new [attr.title]=\"'nh-assistant.agent-runs.inbox.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.inbox.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.inbox.new-label' | translate }}</span>\n </span>\n }\n <span\n class=\"badge\"\n [class.success]=\"proposal.status === 'executed' || proposal.status === 'resolved'\"\n [class.warning]=\"proposal.status === 'pending' || proposal.status === 'execution-unknown' || proposal.status === 'stale'\"\n [class.danger]=\"proposal.status === 'execution-failed' || proposal.status === 'rejected'\">\n {{ statusKey(proposal) | translate }}\n </span>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.proposal.mode.' + proposal.mode | translate }}</span>\n @if (agentRightsKey(proposal); as rightsKey) {\n <!-- A consultation's proposal that runs with the agent's own rights says so plainly. -->\n <span class=\"badge\" data-consultation-rights [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ rightsKey | translate }}\n </span>\n } @else if (proposal.grantSource !== 'none') {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ 'nh-assistant.tool-call.grant-source.' + proposal.grantSource | translate }}\n </span>\n }\n @if (proposal.consultationId) {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.agent-runs.proposal.from-consultation-hint' | translate\">\n {{ 'nh-assistant.agent-runs.proposal.from-consultation' | translate }}\n </span>\n }\n </div>\n @if (proposal.consultationId && (proposal.initiatorActorId || proposal.consultationRoute)) {\n <!-- Who asked through the consultation, and who decides it with whose rights. -->\n <p class=\"consultation-route\" data-consultation-route [attr.data-route]=\"proposal.consultationRoute ?? null\">\n @if (proposal.initiatorActorId; as asker) {\n <span data-consultation-asker>{{ 'nh-assistant.agent-runs.proposal.consultation.asked-by' | translate: { name: ('nh-assistant.account-id' | translate: { id: asker }) } }}</span>\n }\n @if (proposal.consultationRoute; as route) {\n <span>{{ 'nh-assistant.agent-runs.proposal.consultation.route.' + route | translate }}</span>\n }\n </p>\n }\n @if (proposal.placedBy; as origin) {\n @let placedBy = originText(origin);\n <p class=\"placed-by\">\n <span>{{ placedBy.key | translate: placedBy.params }}</span>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.placed-by.open-label' | translate\"\n (click)=\"openConversation.emit(origin.conversationId)\">\n {{ 'nh-assistant.agent-runs.proposal.placed-by.open' | translate }}\n </button>\n </p>\n }\n @if (proposal.presentation; as presentation) {\n <p class=\"summary\">{{ presentation.summary }}</p>\n @if (presentation.fields.length > 0) {\n <dl class=\"presentation-fields\">\n @for (field of presentation.fields; track $index) {\n <div>\n <dt>{{ field.label }}</dt>\n <dd>{{ field.value }}</dd>\n </div>\n }\n </dl>\n }\n @if (presentation.notice) {\n <p class=\"message warning\">{{ presentation.notice }}</p>\n }\n } @else {\n <p class=\"summary\">{{ 'nh-assistant.approval.fallback-summary' | translate }}</p>\n }\n @if (proposal.rationale) {\n <p class=\"rationale\">{{ 'nh-assistant.approval.rationale' | translate: { rationale: proposal.rationale } }}</p>\n }\n @if (proposal.status === 'stale' && proposal.staleExplanation) {\n <p class=\"message stale-explanation\">{{ proposal.staleExplanation }}</p>\n }\n @if (hasSuccessor(proposal)) {\n <button class=\"text-button\" type=\"button\" (click)=\"showSuccessor(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.show-successor' | translate }}\n </button>\n }\n @if (isHeld(proposal)) {\n <div class=\"closed-card\">\n <p class=\"muted\" role=\"status\">{{ 'nh-assistant.agent-runs.proposal.closed' | translate }}</p>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.dismiss-label' | translate: { summary: proposal.presentation?.summary ?? proposal.toolId }\"\n (click)=\"dismiss(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.dismiss' | translate }}\n </button>\n </div>\n }\n <details class=\"technical-details\">\n <summary>{{ 'nh-assistant.approval.technical-details' | translate }}</summary>\n <p class=\"label\">{{ 'nh-assistant.approval.tool-id' | translate }}</p>\n <code>{{ proposal.toolId }}</code>\n @if (proposal.targets.length > 0) {\n <p class=\"label\">{{ 'nh-assistant.approval.targets' | translate }}</p>\n <ul class=\"targets\">\n @for (target of proposal.targets; track $index) {\n <li>{{ target }}</li>\n }\n </ul>\n }\n @if (proposal.argumentsPreview) {\n <p class=\"label\">{{ 'nh-assistant.approval.arguments' | translate }}</p>\n <pre>{{ proposal.argumentsPreview }}</pre>\n }\n </details>\n <div class=\"meta\">\n @if (proposal.status === 'pending') {\n <span>{{ 'nh-assistant.agent-runs.proposal.expires' | translate: { date: (proposal.expiresAt | date: 'short') } }}</span>\n }\n @if (proposal.decidedByActorId) {\n <span\n data-proposal-decided-by\n [attr.title]=\"proposal.decidedByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.decidedByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.decidedByActorId }) } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span\n data-proposal-stale-by\n [attr.title]=\"proposal.staleByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.staleByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.staleByActorId }) } }}</span>\n }\n @if (proposal.executionResultCode; as code) {\n <span class=\"mono\">{{ code }}</span>\n }\n @if (proposal.feedback; as given) {\n <span>\n {{ 'nh-assistant.agent-runs.proposal.your-feedback' | translate: { category: ('nh-assistant.proposal-feedback.categories.' + given.category | translate) } }}\n </span>\n }\n @if (proposal.canGiveFeedback && !isAsking(proposal)) {\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.data-feedback-approval]=\"proposal.approvalId\"\n [disabled]=\"busy()\"\n (click)=\"giveFeedback(proposal)\">\n {{ (proposal.feedback ? 'nh-assistant.agent-runs.proposal.change-feedback' : 'nh-assistant.agent-runs.proposal.give-feedback') | translate }}\n </button>\n }\n </div>\n @if (inCard(proposal) && feedback(); as request) {\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n }\n @if (waitsForAsker(proposal)) {\n <p class=\"waiting-for\" data-waiting-for-asker>\n <nh-assistant-icon name=\"users\" />{{ 'nh-assistant.agent-runs.proposal.consultation.waiting-for-asker' | translate: { name: (proposal.initiatorActorId ? ('nh-assistant.account-id' | translate: { id: proposal.initiatorActorId }) : ('nh-assistant.agent-runs.proposal.consultation.the-asker' | translate)) } }}\n </p>\n } @else if (waitingForKey(proposal); as waitingFor) {\n <p class=\"waiting-for\"><nh-assistant-icon name=\"users\" />{{ waitingFor | translate }}</p>\n }\n @if (proposal.status === 'pending' && mayDecide(proposal)) {\n <div class=\"card-actions\">\n <button class=\"primary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.approve' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.proposal.reject' | translate }}\n </button>\n </div>\n }\n @if (proposal.status === 'execution-unknown' && mayDecide(proposal)) {\n <p class=\"message warning\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.proposal.unknown-hint' | translate }}</p>\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 'mark-resolved')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.mark-resolved' | translate }}\n </button>\n <button class=\"danger\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 're-execute')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.proposal.re-execute' | translate }}\n </button>\n </div>\n }\n </li>\n </ng-template>\n</div>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantProposalFeedbackComponent, selector: "nh-assistant-proposal-feedback", inputs: ["approvalIds", "initial"], outputs: ["saved", "dismissed"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
295
431
|
}
|
|
296
432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentProposalsComponent, decorators: [{
|
|
297
433
|
type: Component,
|
|
298
434
|
args: [{ selector: 'nh-assistant-agent-proposals', standalone: true, imports: [
|
|
299
435
|
DatePipe,
|
|
436
|
+
NgTemplateOutlet,
|
|
300
437
|
TranslatePipe,
|
|
301
438
|
_NhAssistantTranslatePipe,
|
|
302
439
|
_NhAssistantIconComponent,
|
|
303
440
|
_NhAssistantSubjectLinkComponent,
|
|
304
441
|
NhAssistantProposalFeedbackComponent
|
|
305
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"proposal-list\">\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n\n @if (feedback(); as request) {\n @if (request.placement === 'prompt') {\n <div class=\"feedback-prompt\">\n @if (request.summary && !request.saved) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.proposal.rejected-one' | translate: { summary: request.summary } }}</p>\n }\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n </div>\n }\n }\n\n @if (selectable() && pending().length > 0) {\n <div class=\"toolbar\">\n <label class=\"select\">\n <input type=\"checkbox\" [checked]=\"allSelected()\" [disabled]=\"busy()\" (change)=\"toggleAll()\" />\n {{ 'nh-assistant.agent-runs.inbox.select-all' | translate }}\n </label>\n <button class=\"primary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.inbox.approve-selected' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.inbox.reject-selected' | translate }}\n </button>\n </div>\n }\n\n @if (shown().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of shown(); track proposal.approvalId) {\n <li\n class=\"card\"\n tabindex=\"-1\"\n [attr.data-approval-id]=\"proposal.approvalId\"\n [class.selected]=\"selected().has(proposal.approvalId)\"\n [class.closed]=\"isHeld(proposal)\">\n <div class=\"card-header\">\n @if (selectable() && proposal.status === 'pending' && mayDecide(proposal)) {\n <input\n type=\"checkbox\"\n [checked]=\"selected().has(proposal.approvalId)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select' | translate\"\n (change)=\"toggle(proposal)\" />\n }\n <strong>\n <nh-assistant-subject-link\n [subjectType]=\"proposal.subjectType\"\n [subjectId]=\"proposal.subjectId\"\n [label]=\"proposal.subjectDisplayName ?? proposal.subjectId\"\n [typeName]=\"proposal.subjectTypeName\"\n [link]=\"proposal.subjectLink\" />\n </strong>\n <span class=\"muted\">{{ proposal.presentation?.toolDisplayName ?? proposal.toolId }}</span>\n <span\n class=\"badge\"\n [class.success]=\"proposal.status === 'executed' || proposal.status === 'resolved'\"\n [class.warning]=\"proposal.status === 'pending' || proposal.status === 'execution-unknown' || proposal.status === 'stale'\"\n [class.danger]=\"proposal.status === 'execution-failed' || proposal.status === 'rejected'\">\n {{ statusKey(proposal) | translate }}\n </span>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.proposal.mode.' + proposal.mode | translate }}</span>\n @if (proposal.grantSource !== 'none') {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ 'nh-assistant.tool-call.grant-source.' + proposal.grantSource | translate }}\n </span>\n }\n @if (proposal.consultationId) {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.agent-runs.proposal.from-consultation-hint' | translate\">\n {{ 'nh-assistant.agent-runs.proposal.from-consultation' | translate }}\n </span>\n }\n </div>\n @if (proposal.placedBy; as origin) {\n @let placedBy = originText(origin);\n <p class=\"placed-by\">\n <span>{{ placedBy.key | translate: placedBy.params }}</span>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.placed-by.open-label' | translate\"\n (click)=\"openConversation.emit(origin.conversationId)\">\n {{ 'nh-assistant.agent-runs.proposal.placed-by.open' | translate }}\n </button>\n </p>\n }\n @if (proposal.presentation; as presentation) {\n <p class=\"summary\">{{ presentation.summary }}</p>\n @if (presentation.fields.length > 0) {\n <dl class=\"presentation-fields\">\n @for (field of presentation.fields; track $index) {\n <div>\n <dt>{{ field.label }}</dt>\n <dd>{{ field.value }}</dd>\n </div>\n }\n </dl>\n }\n @if (presentation.notice) {\n <p class=\"message warning\">{{ presentation.notice }}</p>\n }\n } @else {\n <p class=\"summary\">{{ 'nh-assistant.approval.fallback-summary' | translate }}</p>\n }\n @if (proposal.rationale) {\n <p class=\"rationale\">{{ 'nh-assistant.approval.rationale' | translate: { rationale: proposal.rationale } }}</p>\n }\n @if (proposal.status === 'stale' && proposal.staleExplanation) {\n <p class=\"message stale-explanation\">{{ proposal.staleExplanation }}</p>\n }\n @if (hasSuccessor(proposal)) {\n <button class=\"text-button\" type=\"button\" (click)=\"showSuccessor(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.show-successor' | translate }}\n </button>\n }\n @if (isHeld(proposal)) {\n <div class=\"closed-card\">\n <p class=\"muted\" role=\"status\">{{ 'nh-assistant.agent-runs.proposal.closed' | translate }}</p>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.dismiss-label' | translate: { summary: proposal.presentation?.summary ?? proposal.toolId }\"\n (click)=\"dismiss(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.dismiss' | translate }}\n </button>\n </div>\n }\n <details class=\"technical-details\">\n <summary>{{ 'nh-assistant.approval.technical-details' | translate }}</summary>\n <p class=\"label\">{{ 'nh-assistant.approval.tool-id' | translate }}</p>\n <code>{{ proposal.toolId }}</code>\n @if (proposal.targets.length > 0) {\n <p class=\"label\">{{ 'nh-assistant.approval.targets' | translate }}</p>\n <ul class=\"targets\">\n @for (target of proposal.targets; track $index) {\n <li>{{ target }}</li>\n }\n </ul>\n }\n @if (proposal.argumentsPreview) {\n <p class=\"label\">{{ 'nh-assistant.approval.arguments' | translate }}</p>\n <pre>{{ proposal.argumentsPreview }}</pre>\n }\n </details>\n <div class=\"meta\">\n @if (proposal.status === 'pending') {\n <span>{{ 'nh-assistant.agent-runs.proposal.expires' | translate: { date: (proposal.expiresAt | date: 'short') } }}</span>\n }\n @if (proposal.decidedByActorId) {\n <span\n data-proposal-decided-by\n [attr.title]=\"proposal.decidedByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.decidedByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.decidedByActorId }) } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span\n data-proposal-stale-by\n [attr.title]=\"proposal.staleByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.staleByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.staleByActorId }) } }}</span>\n }\n @if (proposal.executionResultCode; as code) {\n <span class=\"mono\">{{ code }}</span>\n }\n @if (proposal.feedback; as given) {\n <span>\n {{ 'nh-assistant.agent-runs.proposal.your-feedback' | translate: { category: ('nh-assistant.proposal-feedback.categories.' + given.category | translate) } }}\n </span>\n }\n @if (proposal.canGiveFeedback && !isAsking(proposal)) {\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.data-feedback-approval]=\"proposal.approvalId\"\n [disabled]=\"busy()\"\n (click)=\"giveFeedback(proposal)\">\n {{ (proposal.feedback ? 'nh-assistant.agent-runs.proposal.change-feedback' : 'nh-assistant.agent-runs.proposal.give-feedback') | translate }}\n </button>\n }\n </div>\n @if (inCard(proposal) && feedback(); as request) {\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n }\n @if (waitingForKey(proposal); as waitingFor) {\n <p class=\"waiting-for\"><nh-assistant-icon name=\"users\" />{{ waitingFor | translate }}</p>\n }\n @if (proposal.status === 'pending' && mayDecide(proposal)) {\n <div class=\"card-actions\">\n <button class=\"primary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.approve' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.proposal.reject' | translate }}\n </button>\n </div>\n }\n @if (proposal.status === 'execution-unknown' && mayDecide(proposal)) {\n <p class=\"message warning\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.proposal.unknown-hint' | translate }}</p>\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 'mark-resolved')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.mark-resolved' | translate }}\n </button>\n <button class=\"danger\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 're-execute')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.proposal.re-execute' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n }\n</div>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
306
|
-
}], ctorParameters: () => [], propDecorators: { proposals: [{ type: i0.Input, args: [{ isSignal: true, alias: "proposals", required: true }] }], canDecide: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDecide", required: false }] }], decisionRights: [{ type: i0.Input, args: [{ isSignal: true, alias: "decisionRights", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], holdClosedCards: [{ type: i0.Input, args: [{ isSignal: true, alias: "holdClosedCards", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
442
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"proposal-list\">\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n\n @if (feedback(); as request) {\n @if (request.placement === 'prompt') {\n <div class=\"feedback-prompt\">\n @if (request.summary && !request.saved) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.proposal.rejected-one' | translate: { summary: request.summary } }}</p>\n }\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n </div>\n }\n }\n\n @if (selectable() && pending().length > 0) {\n <div class=\"toolbar\">\n <label class=\"select\">\n <input type=\"checkbox\" [checked]=\"allSelected()\" [disabled]=\"busy()\" (change)=\"toggleAll()\" />\n {{ 'nh-assistant.agent-runs.inbox.select-all' | translate }}\n </label>\n <button class=\"primary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.inbox.approve-selected' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy() || selected().size === 0\" (click)=\"decideSelected('reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.inbox.reject-selected' | translate }}\n </button>\n </div>\n }\n\n @if (sections(); as groups) {\n @if (held().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of held(); track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n @for (group of groups; track group.key) {\n <section class=\"proposal-group\" [attr.data-proposal-group]=\"group.key\" [attr.aria-label]=\"group.label\">\n <header class=\"proposal-group-header\">\n <h4>\n <nh-assistant-subject-link\n [subjectType]=\"group.subjectType\"\n [subjectId]=\"group.subjectId\"\n [label]=\"group.label\"\n [typeName]=\"group.typeName\"\n [link]=\"group.link\" />\n </h4>\n <span class=\"muted\" data-group-loaded>{{ 'nh-assistant.agent-runs.inbox.group-loaded' | translate: { loaded: group.count, total: group.total } }}</span>\n @if (selectable() && group.selectableIds.length > 0) {\n <label class=\"select\">\n <input\n type=\"checkbox\"\n data-select-group\n [checked]=\"groupSelected(group)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select-group-label' | translate: { count: group.selectableIds.length, name: group.label }\"\n (change)=\"toggleGroup(group)\" />\n {{ 'nh-assistant.agent-runs.inbox.select-group' | translate: { count: group.selectableIds.length } }}\n </label>\n }\n </header>\n @if (group.continuesFromPreviousPage) {\n <p class=\"muted\" data-group-continued>{{ 'nh-assistant.agent-runs.inbox.group-continued' | translate }}</p>\n }\n @for (subject of group.subjects; track subject.key) {\n @if (!subject.own) {\n <h5 class=\"proposal-subject-header\" [attr.data-proposal-subject]=\"subject.subjectType + '|' + subject.subjectId\">\n <nh-assistant-subject-link\n [subjectType]=\"subject.subjectType\"\n [subjectId]=\"subject.subjectId\"\n [label]=\"subject.label\"\n [typeName]=\"subject.typeName\"\n [link]=\"subject.link\" />\n @if (subject.count < subject.total) {\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.group-loaded' | translate: { loaded: subject.count, total: subject.total } }}</span>\n }\n </h5>\n }\n @for (run of subject.runs; track run.key) {\n @if (groupByRun()) {\n <p class=\"proposal-run-header\" [attr.data-proposal-run]=\"run.runId ?? ''\">\n @if (run.runId) {\n {{ 'nh-assistant.agent-runs.inbox.run' | translate: { agent: ([('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: run.agentId), date: (run.proposedAt | date: 'short') } }}\n } @else {\n {{ 'nh-assistant.agent-runs.inbox.no-run' | translate }}\n }\n </p>\n }\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of run.items; track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n }\n @if (group.continuesOnNextPage) {\n <p class=\"muted\" data-group-continues>{{ 'nh-assistant.agent-runs.inbox.group-continues' | translate }}</p>\n }\n </section>\n }\n } @else if (shown().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of shown(); track proposal.approvalId) {\n <ng-container *ngTemplateOutlet=\"card; context: { $implicit: proposal }\" />\n }\n </ul>\n }\n\n <ng-template #card let-proposal>\n <li\n class=\"card\"\n tabindex=\"-1\"\n [attr.data-approval-id]=\"proposal.approvalId\"\n [class.selected]=\"selected().has(proposal.approvalId)\"\n [class.closed]=\"isHeld(proposal)\"\n [class.new]=\"isNew(proposal)\">\n <div class=\"card-header\">\n @if (selectable() && proposal.status === 'pending' && mayDecide(proposal)) {\n <input\n type=\"checkbox\"\n [checked]=\"selected().has(proposal.approvalId)\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.select' | translate\"\n (change)=\"toggle(proposal)\" />\n }\n <strong>\n <nh-assistant-subject-link\n [subjectType]=\"proposal.subjectType\"\n [subjectId]=\"proposal.subjectId\"\n [label]=\"proposal.subjectDisplayName ?? proposal.subjectId\"\n [typeName]=\"proposal.subjectTypeName\"\n [link]=\"proposal.subjectLink\" />\n </strong>\n <span class=\"muted\">{{ proposal.presentation?.toolDisplayName ?? proposal.toolId }}</span>\n @if (isNew(proposal)) {\n <span class=\"badge new\" data-proposal-new [attr.title]=\"'nh-assistant.agent-runs.inbox.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.inbox.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.inbox.new-label' | translate }}</span>\n </span>\n }\n <span\n class=\"badge\"\n [class.success]=\"proposal.status === 'executed' || proposal.status === 'resolved'\"\n [class.warning]=\"proposal.status === 'pending' || proposal.status === 'execution-unknown' || proposal.status === 'stale'\"\n [class.danger]=\"proposal.status === 'execution-failed' || proposal.status === 'rejected'\">\n {{ statusKey(proposal) | translate }}\n </span>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.proposal.mode.' + proposal.mode | translate }}</span>\n @if (agentRightsKey(proposal); as rightsKey) {\n <!-- A consultation's proposal that runs with the agent's own rights says so plainly. -->\n <span class=\"badge\" data-consultation-rights [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ rightsKey | translate }}\n </span>\n } @else if (proposal.grantSource !== 'none') {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.tool-call.grant-source.' + proposal.grantSource + '-hint' | translate\">\n {{ 'nh-assistant.tool-call.grant-source.' + proposal.grantSource | translate }}\n </span>\n }\n @if (proposal.consultationId) {\n <span class=\"badge\" [attr.title]=\"'nh-assistant.agent-runs.proposal.from-consultation-hint' | translate\">\n {{ 'nh-assistant.agent-runs.proposal.from-consultation' | translate }}\n </span>\n }\n </div>\n @if (proposal.consultationId && (proposal.initiatorActorId || proposal.consultationRoute)) {\n <!-- Who asked through the consultation, and who decides it with whose rights. -->\n <p class=\"consultation-route\" data-consultation-route [attr.data-route]=\"proposal.consultationRoute ?? null\">\n @if (proposal.initiatorActorId; as asker) {\n <span data-consultation-asker>{{ 'nh-assistant.agent-runs.proposal.consultation.asked-by' | translate: { name: ('nh-assistant.account-id' | translate: { id: asker }) } }}</span>\n }\n @if (proposal.consultationRoute; as route) {\n <span>{{ 'nh-assistant.agent-runs.proposal.consultation.route.' + route | translate }}</span>\n }\n </p>\n }\n @if (proposal.placedBy; as origin) {\n @let placedBy = originText(origin);\n <p class=\"placed-by\">\n <span>{{ placedBy.key | translate: placedBy.params }}</span>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.placed-by.open-label' | translate\"\n (click)=\"openConversation.emit(origin.conversationId)\">\n {{ 'nh-assistant.agent-runs.proposal.placed-by.open' | translate }}\n </button>\n </p>\n }\n @if (proposal.presentation; as presentation) {\n <p class=\"summary\">{{ presentation.summary }}</p>\n @if (presentation.fields.length > 0) {\n <dl class=\"presentation-fields\">\n @for (field of presentation.fields; track $index) {\n <div>\n <dt>{{ field.label }}</dt>\n <dd>{{ field.value }}</dd>\n </div>\n }\n </dl>\n }\n @if (presentation.notice) {\n <p class=\"message warning\">{{ presentation.notice }}</p>\n }\n } @else {\n <p class=\"summary\">{{ 'nh-assistant.approval.fallback-summary' | translate }}</p>\n }\n @if (proposal.rationale) {\n <p class=\"rationale\">{{ 'nh-assistant.approval.rationale' | translate: { rationale: proposal.rationale } }}</p>\n }\n @if (proposal.status === 'stale' && proposal.staleExplanation) {\n <p class=\"message stale-explanation\">{{ proposal.staleExplanation }}</p>\n }\n @if (hasSuccessor(proposal)) {\n <button class=\"text-button\" type=\"button\" (click)=\"showSuccessor(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.show-successor' | translate }}\n </button>\n }\n @if (isHeld(proposal)) {\n <div class=\"closed-card\">\n <p class=\"muted\" role=\"status\">{{ 'nh-assistant.agent-runs.proposal.closed' | translate }}</p>\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.proposal.dismiss-label' | translate: { summary: proposal.presentation?.summary ?? proposal.toolId }\"\n (click)=\"dismiss(proposal)\">\n {{ 'nh-assistant.agent-runs.proposal.dismiss' | translate }}\n </button>\n </div>\n }\n <details class=\"technical-details\">\n <summary>{{ 'nh-assistant.approval.technical-details' | translate }}</summary>\n <p class=\"label\">{{ 'nh-assistant.approval.tool-id' | translate }}</p>\n <code>{{ proposal.toolId }}</code>\n @if (proposal.targets.length > 0) {\n <p class=\"label\">{{ 'nh-assistant.approval.targets' | translate }}</p>\n <ul class=\"targets\">\n @for (target of proposal.targets; track $index) {\n <li>{{ target }}</li>\n }\n </ul>\n }\n @if (proposal.argumentsPreview) {\n <p class=\"label\">{{ 'nh-assistant.approval.arguments' | translate }}</p>\n <pre>{{ proposal.argumentsPreview }}</pre>\n }\n </details>\n <div class=\"meta\">\n @if (proposal.status === 'pending') {\n <span>{{ 'nh-assistant.agent-runs.proposal.expires' | translate: { date: (proposal.expiresAt | date: 'short') } }}</span>\n }\n @if (proposal.decidedByActorId) {\n <span\n data-proposal-decided-by\n [attr.title]=\"proposal.decidedByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.decidedByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.decidedByActorId }) } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span\n data-proposal-stale-by\n [attr.title]=\"proposal.staleByDisplayName ? ('nh-assistant.account-id-title' | translate: { id: proposal.staleByActorId }) : null\">{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || ('nh-assistant.account-id' | translate: { id: proposal.staleByActorId }) } }}</span>\n }\n @if (proposal.executionResultCode; as code) {\n <span class=\"mono\">{{ code }}</span>\n }\n @if (proposal.feedback; as given) {\n <span>\n {{ 'nh-assistant.agent-runs.proposal.your-feedback' | translate: { category: ('nh-assistant.proposal-feedback.categories.' + given.category | translate) } }}\n </span>\n }\n @if (proposal.canGiveFeedback && !isAsking(proposal)) {\n <button\n class=\"text-button\"\n type=\"button\"\n [attr.data-feedback-approval]=\"proposal.approvalId\"\n [disabled]=\"busy()\"\n (click)=\"giveFeedback(proposal)\">\n {{ (proposal.feedback ? 'nh-assistant.agent-runs.proposal.change-feedback' : 'nh-assistant.agent-runs.proposal.give-feedback') | translate }}\n </button>\n }\n </div>\n @if (inCard(proposal) && feedback(); as request) {\n <nh-assistant-proposal-feedback\n [approvalIds]=\"request.approvalIds\"\n [initial]=\"request.initial\"\n (saved)=\"onFeedbackSaved()\"\n (dismissed)=\"onFeedbackDismissed()\" />\n }\n @if (waitsForAsker(proposal)) {\n <p class=\"waiting-for\" data-waiting-for-asker>\n <nh-assistant-icon name=\"users\" />{{ 'nh-assistant.agent-runs.proposal.consultation.waiting-for-asker' | translate: { name: (proposal.initiatorActorId ? ('nh-assistant.account-id' | translate: { id: proposal.initiatorActorId }) : ('nh-assistant.agent-runs.proposal.consultation.the-asker' | translate)) } }}\n </p>\n } @else if (waitingForKey(proposal); as waitingFor) {\n <p class=\"waiting-for\"><nh-assistant-icon name=\"users\" />{{ waitingFor | translate }}</p>\n }\n @if (proposal.status === 'pending' && mayDecide(proposal)) {\n <div class=\"card-actions\">\n <button class=\"primary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'approve')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.approve' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"decide(proposal, 'reject')\">\n <nh-assistant-icon name=\"x\" />{{ 'nh-assistant.agent-runs.proposal.reject' | translate }}\n </button>\n </div>\n }\n @if (proposal.status === 'execution-unknown' && mayDecide(proposal)) {\n <p class=\"message warning\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.proposal.unknown-hint' | translate }}</p>\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 'mark-resolved')\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.proposal.mark-resolved' | translate }}\n </button>\n <button class=\"danger\" type=\"button\" [disabled]=\"busy()\" (click)=\"resolve(proposal, 're-execute')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.proposal.re-execute' | translate }}\n </button>\n </div>\n }\n </li>\n </ng-template>\n</div>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
443
|
+
}], ctorParameters: () => [], propDecorators: { proposals: [{ type: i0.Input, args: [{ isSignal: true, alias: "proposals", required: true }] }], canDecide: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDecide", required: false }] }], decisionRights: [{ type: i0.Input, args: [{ isSignal: true, alias: "decisionRights", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], holdClosedCards: [{ type: i0.Input, args: [{ isSignal: true, alias: "holdClosedCards", required: false }] }], groups: [{ type: i0.Input, args: [{ isSignal: true, alias: "groups", required: false }] }], groupByRun: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupByRun", required: false }] }], newIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "newIds", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
307
444
|
/** The refusal of an approval because the proposal no longer fits. */
|
|
308
445
|
const staleCode = 'assistant-proposal-stale';
|
|
446
|
+
/** Someone other than the person who started the work decides the proposal. */
|
|
447
|
+
const fourEyesCode = 'assistant-four-eyes-required';
|
|
448
|
+
/** The person who asked decides a consultation's proposal in their own chat; nobody decides it here. */
|
|
449
|
+
const askerDecidesCode = 'assistant-consult-asker-decides';
|
|
309
450
|
/** The application's words for a proposal, falling back to its subject and tool. */
|
|
310
451
|
function summaryOf(proposal) {
|
|
311
452
|
return proposal.presentation?.summary
|
|
312
453
|
?? `${proposal.subjectDisplayName ?? proposal.subjectId} · ${proposal.presentation?.toolDisplayName ?? proposal.toolId}`;
|
|
313
454
|
}
|
|
455
|
+
/** The proposals of each run in a row, in the order given. */
|
|
456
|
+
function runsOf(items) {
|
|
457
|
+
const runs = [];
|
|
458
|
+
for (const proposal of items) {
|
|
459
|
+
const last = runs.at(-1);
|
|
460
|
+
if (last && last.runId === proposal.runId) {
|
|
461
|
+
last.items.push(proposal);
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
runs.push({
|
|
465
|
+
key: `${proposal.runId ?? 'none'}|${proposal.approvalId}`,
|
|
466
|
+
runId: proposal.runId,
|
|
467
|
+
agentId: proposal.agentId,
|
|
468
|
+
proposedAt: proposal.createdAt,
|
|
469
|
+
items: [proposal]
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
return runs;
|
|
473
|
+
}
|
|
314
474
|
/** True for a proposal a newer proposal for the same objects replaced. */
|
|
315
475
|
function isSuperseded(proposal) {
|
|
316
476
|
return proposal.status === 'withdrawn' && !!proposal.supersededByApprovalId;
|
|
@@ -327,15 +487,48 @@ function isSuperseded(proposal) {
|
|
|
327
487
|
* longer fits, for example because someone did the work by hand, stays as a closed card with the
|
|
328
488
|
* reason until it is dismissed. A proposal a run placed at its object from another subject, such as a
|
|
329
489
|
* run for the whole application, names that run; `openConversation` emits its conversation.
|
|
490
|
+
*
|
|
491
|
+
* `agentId`, `subjectType`, `divisionId` and `runId` filter the inbox; changing a filter, or `grouped`,
|
|
492
|
+
* reloads it from the first page. With `grouped` the inbox shows the proposals per parent, such as a
|
|
493
|
+
* project with its own proposals and those of its tasks, and per subject, optionally per run
|
|
494
|
+
* (`groupByRun`); a group that goes on on another page says so, and "Select group" selects only its
|
|
495
|
+
* proposals shown here. With `markNew` (on by default) it marks the proposals made since the person's
|
|
496
|
+
* last visit of the inbox in its scope, the whole application or the division of `divisionId`, and
|
|
497
|
+
* those that arrive while it is shown; with `recordVisit` (on by default) showing it records the
|
|
498
|
+
* visit. Turn `recordVisit` off for an inbox that shows only part of the scope, such as one agent's
|
|
499
|
+
* proposals, so the person's next visit of the whole inbox still marks what they have not seen.
|
|
330
500
|
*/
|
|
331
501
|
class NhAssistantAgentInboxComponent {
|
|
332
502
|
constructor() {
|
|
333
503
|
this.api = inject(NhAssistantAgentRunApiService);
|
|
334
504
|
this.proposalList = viewChild(NhAssistantAgentProposalsComponent, ...(ngDevMode ? [{ debugName: "proposalList" }] : []));
|
|
505
|
+
/** The scope whose visit this view recorded; the visit is recorded once per scope shown. */
|
|
506
|
+
this.visited = null;
|
|
507
|
+
/**
|
|
508
|
+
* What the first read of the shown scope found: the visit before this one and the proposals that
|
|
509
|
+
* were new since. Later reads, after live updates, paging or a decision, compare with both, so what
|
|
510
|
+
* was new when the inbox was opened stays new while it is shown.
|
|
511
|
+
*/
|
|
512
|
+
this.opened = null;
|
|
335
513
|
/** Limits the inbox to one agent. */
|
|
336
514
|
this.agentId = input(undefined, ...(ngDevMode ? [{ debugName: "agentId" }] : []));
|
|
337
515
|
/** Limits the inbox to one kind of subject, for example `project`. */
|
|
338
516
|
this.subjectType = input(undefined, ...(ngDevMode ? [{ debugName: "subjectType" }] : []));
|
|
517
|
+
/**
|
|
518
|
+
* Limits the inbox to the subjects of one division, for example the active division; its visits are
|
|
519
|
+
* then those of that division.
|
|
520
|
+
*/
|
|
521
|
+
this.divisionId = input(undefined, ...(ngDevMode ? [{ debugName: "divisionId" }] : []));
|
|
522
|
+
/** Limits the inbox to the proposals of one run. */
|
|
523
|
+
this.runId = input(undefined, ...(ngDevMode ? [{ debugName: "runId" }] : []));
|
|
524
|
+
/** Groups the proposals per parent and subject instead of listing them by expiry alone. */
|
|
525
|
+
this.grouped = input(false, ...(ngDevMode ? [{ debugName: "grouped" }] : []));
|
|
526
|
+
/** In a grouped inbox, also shows a header per run within a subject. */
|
|
527
|
+
this.groupByRun = input(false, ...(ngDevMode ? [{ debugName: "groupByRun" }] : []));
|
|
528
|
+
/** Marks the proposals made since the person's last visit of the inbox, and those that arrive while it is shown. */
|
|
529
|
+
this.markNew = input(true, ...(ngDevMode ? [{ debugName: "markNew" }] : []));
|
|
530
|
+
/** Records the person's visit of the inbox in its scope when it is shown. */
|
|
531
|
+
this.recordVisit = input(true, ...(ngDevMode ? [{ debugName: "recordVisit" }] : []));
|
|
339
532
|
this.itemsPerPage = input(20, ...(ngDevMode ? [{ debugName: "itemsPerPage" }] : []));
|
|
340
533
|
/**
|
|
341
534
|
* Emits the conversation of the run that placed a proposal at its object from another subject, so
|
|
@@ -349,11 +542,26 @@ class NhAssistantAgentInboxComponent {
|
|
|
349
542
|
this.loadFailed = signal(false, ...(ngDevMode ? [{ debugName: "loadFailed" }] : []));
|
|
350
543
|
this.items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
351
544
|
this.total = signal(0, ...(ngDevMode ? [{ debugName: "total" }] : []));
|
|
545
|
+
/** The groups of the page in a grouped inbox; `null` for the flat inbox. */
|
|
546
|
+
this.groups = signal(null, ...(ngDevMode ? [{ debugName: "groups" }] : []));
|
|
547
|
+
/** The proposals of the page marked as new. */
|
|
548
|
+
this.newIds = signal(new Set(), ...(ngDevMode ? [{ debugName: "newIds" }] : []));
|
|
549
|
+
/**
|
|
550
|
+
* The person's visit of the shown scope before the inbox was opened: `null` before their first
|
|
551
|
+
* visit, `undefined` while unknown or when new proposals are not marked.
|
|
552
|
+
*/
|
|
553
|
+
this.previousVisit = signal(undefined, ...(ngDevMode ? [{ debugName: "previousVisit" }] : []));
|
|
352
554
|
this.pages = computed(() => Math.max(1, Math.ceil(this.total() / this.itemsPerPage())), ...(ngDevMode ? [{ debugName: "pages" }] : []));
|
|
353
|
-
inject(DestroyRef).onDestroy(() =>
|
|
555
|
+
inject(DestroyRef).onDestroy(() => {
|
|
556
|
+
this.subscription?.unsubscribe();
|
|
557
|
+
this.visitSubscription?.unsubscribe();
|
|
558
|
+
});
|
|
354
559
|
effect(() => {
|
|
355
560
|
this.agentId();
|
|
356
561
|
this.subjectType();
|
|
562
|
+
this.divisionId();
|
|
563
|
+
this.runId();
|
|
564
|
+
this.grouped();
|
|
357
565
|
untracked(() => {
|
|
358
566
|
this.page.set(1);
|
|
359
567
|
this.load();
|
|
@@ -387,11 +595,16 @@ class NhAssistantAgentInboxComponent {
|
|
|
387
595
|
this.loading.set(true);
|
|
388
596
|
this.loadFailed.set(false);
|
|
389
597
|
}
|
|
598
|
+
const divisionId = this.divisionId() ?? null;
|
|
390
599
|
this.subscription?.unsubscribe();
|
|
391
600
|
this.subscription = this.api
|
|
392
601
|
.getInbox({
|
|
393
602
|
agentId: this.agentId(),
|
|
394
603
|
subjectType: this.subjectType(),
|
|
604
|
+
divisionId: divisionId ?? undefined,
|
|
605
|
+
runId: this.runId() ?? undefined,
|
|
606
|
+
// Only a grouped inbox asks for groups, so the requests of a flat inbox stay as they were.
|
|
607
|
+
grouped: this.grouped() || undefined,
|
|
395
608
|
page: this.page(),
|
|
396
609
|
itemsPerPage: this.itemsPerPage()
|
|
397
610
|
})
|
|
@@ -406,6 +619,8 @@ class NhAssistantAgentInboxComponent {
|
|
|
406
619
|
}
|
|
407
620
|
const previous = this.items();
|
|
408
621
|
this.items.set(inbox.items);
|
|
622
|
+
this.groups.set(this.grouped() ? inbox.groups ?? null : null);
|
|
623
|
+
this.markNewOf(inbox);
|
|
409
624
|
if (quiet) {
|
|
410
625
|
this.proposalList()?.holdClosed(previous, inbox.items);
|
|
411
626
|
}
|
|
@@ -413,6 +628,7 @@ class NhAssistantAgentInboxComponent {
|
|
|
413
628
|
this.loading.set(false);
|
|
414
629
|
this.loadFailed.set(false);
|
|
415
630
|
this.loaded.set(true);
|
|
631
|
+
this.recordVisitOf(inbox, divisionId);
|
|
416
632
|
},
|
|
417
633
|
error: () => {
|
|
418
634
|
if (quiet) {
|
|
@@ -423,13 +639,57 @@ class NhAssistantAgentInboxComponent {
|
|
|
423
639
|
}
|
|
424
640
|
});
|
|
425
641
|
}
|
|
642
|
+
/**
|
|
643
|
+
* Marks what is new: what the server marks since the visit this view recorded, and what was made
|
|
644
|
+
* after the person's visit before the inbox was opened, on any page. Before the first visit
|
|
645
|
+
* everything is new. A server without visits marks nothing.
|
|
646
|
+
*/
|
|
647
|
+
markNewOf(inbox) {
|
|
648
|
+
if (!this.markNew() || inbox.newApprovalIds === undefined) {
|
|
649
|
+
this.newIds.set(new Set());
|
|
650
|
+
this.previousVisit.set(undefined);
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
const scopeKey = inbox.scopeKey ?? 'global';
|
|
654
|
+
if (this.opened?.scopeKey !== scopeKey) {
|
|
655
|
+
this.opened = { scopeKey, previousVisit: inbox.lastVisitedAt ?? null, newIds: new Set() };
|
|
656
|
+
}
|
|
657
|
+
const opened = this.opened;
|
|
658
|
+
const before = opened.previousVisit === null ? null : Date.parse(opened.previousVisit);
|
|
659
|
+
for (const id of inbox.newApprovalIds) {
|
|
660
|
+
opened.newIds.add(id);
|
|
661
|
+
}
|
|
662
|
+
for (const proposal of inbox.items) {
|
|
663
|
+
if (before === null || Date.parse(proposal.createdAt) > before) {
|
|
664
|
+
opened.newIds.add(proposal.approvalId);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
this.previousVisit.set(opened.previousVisit);
|
|
668
|
+
this.newIds.set(new Set(inbox.items
|
|
669
|
+
.filter(proposal => opened.newIds.has(proposal.approvalId))
|
|
670
|
+
.map(proposal => proposal.approvalId)));
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Records the visit of the shown scope after its first read, so that read still marks what arrived
|
|
674
|
+
* since the visit before.
|
|
675
|
+
*/
|
|
676
|
+
recordVisitOf(inbox, divisionId) {
|
|
677
|
+
const scopeKey = inbox.scopeKey;
|
|
678
|
+
if (!this.recordVisit() || scopeKey === undefined || this.visited === scopeKey) {
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
this.visited = scopeKey;
|
|
682
|
+
this.visitSubscription?.unsubscribe();
|
|
683
|
+
// A visit that cannot be recorded only means the next visit shows more as new.
|
|
684
|
+
this.visitSubscription = this.api.visitInbox(divisionId).subscribe({ error: () => undefined });
|
|
685
|
+
}
|
|
426
686
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentInboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
427
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentInboxComponent, isStandalone: true, selector: "nh-assistant-agent-inbox", inputs: { agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: false, transformFunction: null }, subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-inbox-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-inbox-title\">{{ 'nh-assistant.agent-runs.inbox.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (loading() && items().length === 0 && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"items()\"\n [canDecide]=\"true\"\n [selectable]=\"true\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n @if (items().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.inbox.empty' | translate }}</p>\n }\n @if (pages() > 1) {\n <nav class=\"toolbar\" [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.pages' | translate\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() <= 1 || loading()\" (click)=\"goTo(page() - 1)\">\n {{ 'nh-assistant.agent-runs.inbox.previous' | translate }}\n </button>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.page' | translate: { page: page(), pages: pages() } }}</span>\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() >= pages() || loading()\" (click)=\"goTo(page() + 1)\">\n {{ 'nh-assistant.agent-runs.inbox.next' | translate }}\n </button>\n </nav>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards"], outputs: ["changed", "openConversation"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
687
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentInboxComponent, isStandalone: true, selector: "nh-assistant-agent-inbox", inputs: { agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: false, transformFunction: null }, subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: false, transformFunction: null }, divisionId: { classPropertyName: "divisionId", publicName: "divisionId", isSignal: true, isRequired: false, transformFunction: null }, runId: { classPropertyName: "runId", publicName: "runId", isSignal: true, isRequired: false, transformFunction: null }, grouped: { classPropertyName: "grouped", publicName: "grouped", isSignal: true, isRequired: false, transformFunction: null }, groupByRun: { classPropertyName: "groupByRun", publicName: "groupByRun", isSignal: true, isRequired: false, transformFunction: null }, markNew: { classPropertyName: "markNew", publicName: "markNew", isSignal: true, isRequired: false, transformFunction: null }, recordVisit: { classPropertyName: "recordVisit", publicName: "recordVisit", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-inbox-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-inbox-title\">{{ 'nh-assistant.agent-runs.inbox.title' | translate }}</h3>\n <!-- The order the description names follows the view: groups by their first expiry, or proposals by expiry. -->\n <p class=\"muted\" data-inbox-description>{{ (grouped() ? 'nh-assistant.agent-runs.inbox.description-grouped' : 'nh-assistant.agent-runs.inbox.description') | translate }}</p>\n @if (items().length > 0) {\n @if (previousVisit(); as visitedAt) {\n <p class=\"muted\" data-inbox-last-visit>{{ 'nh-assistant.agent-runs.inbox.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else if (previousVisit() === null) {\n <p class=\"muted\" data-inbox-first-visit>{{ 'nh-assistant.agent-runs.inbox.first-visit' | translate }}</p>\n }\n }\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (loading() && items().length === 0 && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"items()\"\n [canDecide]=\"true\"\n [selectable]=\"true\"\n [holdClosedCards]=\"true\"\n [groups]=\"groups()\"\n [groupByRun]=\"groupByRun()\"\n [newIds]=\"newIds()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n @if (items().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.inbox.empty' | translate }}</p>\n }\n @if (pages() > 1) {\n <nav class=\"toolbar\" [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.pages' | translate\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() <= 1 || loading()\" (click)=\"goTo(page() - 1)\">\n {{ 'nh-assistant.agent-runs.inbox.previous' | translate }}\n </button>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.page' | translate: { page: page(), pages: pages() } }}</span>\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() >= pages() || loading()\" (click)=\"goTo(page() + 1)\">\n {{ 'nh-assistant.agent-runs.inbox.next' | translate }}\n </button>\n </nav>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards", "groups", "groupByRun", "newIds"], outputs: ["changed", "openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
428
688
|
}
|
|
429
689
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentInboxComponent, decorators: [{
|
|
430
690
|
type: Component,
|
|
431
|
-
args: [{ selector: 'nh-assistant-agent-inbox', standalone: true, imports: [TranslatePipe, _NhAssistantIconComponent, NhAssistantAgentProposalsComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-inbox-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-inbox-title\">{{ 'nh-assistant.agent-runs.inbox.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (loading() && items().length === 0 && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"items()\"\n [canDecide]=\"true\"\n [selectable]=\"true\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n @if (items().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.inbox.empty' | translate }}</p>\n }\n @if (pages() > 1) {\n <nav class=\"toolbar\" [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.pages' | translate\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() <= 1 || loading()\" (click)=\"goTo(page() - 1)\">\n {{ 'nh-assistant.agent-runs.inbox.previous' | translate }}\n </button>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.page' | translate: { page: page(), pages: pages() } }}</span>\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() >= pages() || loading()\" (click)=\"goTo(page() + 1)\">\n {{ 'nh-assistant.agent-runs.inbox.next' | translate }}\n </button>\n </nav>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
432
|
-
}], ctorParameters: () => [], propDecorators: { proposalList: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhAssistantAgentProposalsComponent), { isSignal: true }] }], agentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentId", required: false }] }], subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: false }] }], itemsPerPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemsPerPage", required: false }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
691
|
+
args: [{ selector: 'nh-assistant-agent-inbox', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantIconComponent, NhAssistantAgentProposalsComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-inbox-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-inbox-title\">{{ 'nh-assistant.agent-runs.inbox.title' | translate }}</h3>\n <!-- The order the description names follows the view: groups by their first expiry, or proposals by expiry. -->\n <p class=\"muted\" data-inbox-description>{{ (grouped() ? 'nh-assistant.agent-runs.inbox.description-grouped' : 'nh-assistant.agent-runs.inbox.description') | translate }}</p>\n @if (items().length > 0) {\n @if (previousVisit(); as visitedAt) {\n <p class=\"muted\" data-inbox-last-visit>{{ 'nh-assistant.agent-runs.inbox.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else if (previousVisit() === null) {\n <p class=\"muted\" data-inbox-first-visit>{{ 'nh-assistant.agent-runs.inbox.first-visit' | translate }}</p>\n }\n }\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (loading() && items().length === 0 && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"items()\"\n [canDecide]=\"true\"\n [selectable]=\"true\"\n [holdClosedCards]=\"true\"\n [groups]=\"groups()\"\n [groupByRun]=\"groupByRun()\"\n [newIds]=\"newIds()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n @if (items().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.inbox.empty' | translate }}</p>\n }\n @if (pages() > 1) {\n <nav class=\"toolbar\" [attr.aria-label]=\"'nh-assistant.agent-runs.inbox.pages' | translate\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() <= 1 || loading()\" (click)=\"goTo(page() - 1)\">\n {{ 'nh-assistant.agent-runs.inbox.previous' | translate }}\n </button>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.inbox.page' | translate: { page: page(), pages: pages() } }}</span>\n <button class=\"secondary\" type=\"button\" [disabled]=\"page() >= pages() || loading()\" (click)=\"goTo(page() + 1)\">\n {{ 'nh-assistant.agent-runs.inbox.next' | translate }}\n </button>\n </nav>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
692
|
+
}], ctorParameters: () => [], propDecorators: { proposalList: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhAssistantAgentProposalsComponent), { isSignal: true }] }], agentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentId", required: false }] }], subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: false }] }], divisionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "divisionId", required: false }] }], runId: [{ type: i0.Input, args: [{ isSignal: true, alias: "runId", required: false }] }], grouped: [{ type: i0.Input, args: [{ isSignal: true, alias: "grouped", required: false }] }], groupByRun: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupByRun", required: false }] }], markNew: [{ type: i0.Input, args: [{ isSignal: true, alias: "markNew", required: false }] }], recordVisit: [{ type: i0.Input, args: [{ isSignal: true, alias: "recordVisit", required: false }] }], itemsPerPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemsPerPage", required: false }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
433
693
|
|
|
434
694
|
/** The tone of a receipt's outcome (internal). */
|
|
435
695
|
function nhAssistantRunReceiptTone(outcome) {
|
|
@@ -582,18 +842,20 @@ class NhAssistantAgentArtifactsComponent {
|
|
|
582
842
|
});
|
|
583
843
|
}
|
|
584
844
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentArtifactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
585
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentArtifactsComponent, isStandalone: true, selector: "nh-assistant-agent-artifacts", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n\n@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (artifacts().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.artifacts.empty' | translate }}</p>\n} @else {\n <ul class=\"cards\">\n @for (artifact of artifacts(); track artifact.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ artifact.name }}</strong>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n }\n </div>\n <div class=\"meta\">\n <span class=\"mono\">{{ artifact.contentType }}</span>\n <span>{{ 'nh-assistant.agent-runs.artifacts.size' | translate: { size: artifact.sizeBytes } }}</span>\n <span>{{ artifact.createdAt | date: 'short' }}</span>\n </div>\n @if (!artifact.restricted) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"downloadingId() !== null\" (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
845
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentArtifactsComponent, isStandalone: true, selector: "nh-assistant-agent-artifacts", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n\n@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (artifacts().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.artifacts.empty' | translate }}</p>\n} @else {\n <ul class=\"cards\">\n @for (artifact of artifacts(); track artifact.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ artifact.name }}</strong>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n }\n </div>\n <div class=\"meta\">\n <span class=\"mono\">{{ artifact.contentType }}</span>\n <span>{{ 'nh-assistant.agent-runs.artifacts.size' | translate: { size: artifact.sizeBytes } }}</span>\n <span>{{ artifact.createdAt | date: 'short' }}</span>\n </div>\n @if (!artifact.restricted) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"downloadingId() !== null\" (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
586
846
|
}
|
|
587
847
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentArtifactsComponent, decorators: [{
|
|
588
848
|
type: Component,
|
|
589
|
-
args: [{ selector: 'nh-assistant-agent-artifacts', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n\n@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (artifacts().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.artifacts.empty' | translate }}</p>\n} @else {\n <ul class=\"cards\">\n @for (artifact of artifacts(); track artifact.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ artifact.name }}</strong>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n }\n </div>\n <div class=\"meta\">\n <span class=\"mono\">{{ artifact.contentType }}</span>\n <span>{{ 'nh-assistant.agent-runs.artifacts.size' | translate: { size: artifact.sizeBytes } }}</span>\n <span>{{ artifact.createdAt | date: 'short' }}</span>\n </div>\n @if (!artifact.restricted) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"downloadingId() !== null\" (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
849
|
+
args: [{ selector: 'nh-assistant-agent-artifacts', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n\n@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (artifacts().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.artifacts.empty' | translate }}</p>\n} @else {\n <ul class=\"cards\">\n @for (artifact of artifacts(); track artifact.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ artifact.name }}</strong>\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n }\n </div>\n <div class=\"meta\">\n <span class=\"mono\">{{ artifact.contentType }}</span>\n <span>{{ 'nh-assistant.agent-runs.artifacts.size' | translate: { size: artifact.sizeBytes } }}</span>\n <span>{{ artifact.createdAt | date: 'short' }}</span>\n </div>\n @if (!artifact.restricted) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"downloadingId() !== null\" (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n </div>\n }\n </li>\n }\n </ul>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
590
850
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
591
851
|
|
|
852
|
+
/** The routes in the order the list names them. */
|
|
853
|
+
const routeOrder = ['asker-decides', 'subject-agent-rights', 'subject-asker-rights'];
|
|
592
854
|
/**
|
|
593
855
|
* Who consulted the thread's agent through another assistant, newest first: the person whose rights
|
|
594
|
-
* were used, the asking assistant, the outcome, the usage and the proposals left
|
|
595
|
-
* question and the answer stay in the asking conversation and are never shown
|
|
596
|
-
* updates the list reloads by itself when a run or proposal of the thread changes.
|
|
856
|
+
* were used, the asking assistant, the outcome, the usage and the proposals it left, with their
|
|
857
|
+
* number per route. The question and the answer stay in the asking conversation and are never shown
|
|
858
|
+
* here. With live updates the list reloads by itself when a run or proposal of the thread changes.
|
|
597
859
|
*/
|
|
598
860
|
class NhAssistantAgentConsultationsComponent {
|
|
599
861
|
constructor() {
|
|
@@ -614,6 +876,13 @@ class NhAssistantAgentConsultationsComponent {
|
|
|
614
876
|
load() {
|
|
615
877
|
this.fetch(false);
|
|
616
878
|
}
|
|
879
|
+
/** The proposals the consultation left per route, in a fixed order; routes without proposals are left out. */
|
|
880
|
+
routeCounts(consultation) {
|
|
881
|
+
const byRoute = consultation.proposalsByRoute ?? {};
|
|
882
|
+
return routeOrder
|
|
883
|
+
.map(route => ({ route, count: byRoute[route] ?? 0 }))
|
|
884
|
+
.filter(item => item.count > 0);
|
|
885
|
+
}
|
|
617
886
|
/** A quiet load, after a live update, shows no loading state and keeps the list when it fails. */
|
|
618
887
|
fetch(quiet) {
|
|
619
888
|
if (!quiet) {
|
|
@@ -638,11 +907,11 @@ class NhAssistantAgentConsultationsComponent {
|
|
|
638
907
|
});
|
|
639
908
|
}
|
|
640
909
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentConsultationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
641
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentConsultationsComponent, isStandalone: true, selector: "nh-assistant-agent-consultations", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (loading() && consultations().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (consultations().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.consultation.empty' | translate }}</p>\n} @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.private' | translate }}</p>\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.consultations' | translate\">\n @for (consultation of consultations(); track consultation.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ consultation.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"consultation.status === 'completed'\"\n [class.warning]=\"consultation.status === 'running'\"\n [class.danger]=\"consultation.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.consultation.status.' + consultation.status | translate }}\n </span>\n <span\n data-consultation-asker\n [attr.title]=\"consultation.askerDisplayName ? ('nh-assistant.account-id-title' | translate: { id: consultation.askerActorId }) : null\">\n {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? ('nh-assistant.account-id' | translate: { id: consultation.askerActorId }) } }}\n @if (consultation.askingAgentId; as agentId) {\n {{ 'nh-assistant.agent-runs.consultation.through' | translate: { agent: (['nh-assistant.agents.' + agentId + '.name'] | nhAssistantTranslate: agentId) } }}\n }\n </span>\n @if (consultation.depth > 1) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.consultation.depth' | translate: { depth: consultation.depth } }}</span>\n }\n </div>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: consultation.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: consultation.inputTokens + consultation.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: consultation.proposalCount } }}</span>\n @if (consultation.failureCode; as code) {\n <span><nh-assistant-icon name=\"warning\" />{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n </li>\n }\n </ol>\n @if (total() > consultations().length) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.more' | translate: { count: total() - consultations().length } }}</p>\n }\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
910
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentConsultationsComponent, isStandalone: true, selector: "nh-assistant-agent-consultations", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (loading() && consultations().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (consultations().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.consultation.empty' | translate }}</p>\n} @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.private' | translate }}</p>\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.consultations' | translate\">\n @for (consultation of consultations(); track consultation.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ consultation.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"consultation.status === 'completed'\"\n [class.warning]=\"consultation.status === 'running'\"\n [class.danger]=\"consultation.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.consultation.status.' + consultation.status | translate }}\n </span>\n <span\n data-consultation-asker\n [attr.title]=\"consultation.askerDisplayName ? ('nh-assistant.account-id-title' | translate: { id: consultation.askerActorId }) : null\">\n {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? ('nh-assistant.account-id' | translate: { id: consultation.askerActorId }) } }}\n @if (consultation.askingAgentId; as agentId) {\n {{ 'nh-assistant.agent-runs.consultation.through' | translate: { agent: (['nh-assistant.agents.' + agentId + '.name'] | nhAssistantTranslate: agentId) } }}\n }\n </span>\n @if (consultation.depth > 1) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.consultation.depth' | translate: { depth: consultation.depth } }}</span>\n }\n </div>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: consultation.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: consultation.inputTokens + consultation.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: consultation.proposalCount } }}</span>\n @let counts = routeCounts(consultation);\n @if (counts.length > 0) {\n <span class=\"consultation-routes\" data-consultation-routes>\n @for (item of counts; track item.route) {\n <span\n class=\"badge\"\n [attr.data-route]=\"item.route\"\n [attr.title]=\"'nh-assistant.agent-runs.proposal.consultation.route.' + item.route | translate\">\n {{ 'nh-assistant.agent-runs.consultation.routes.' + item.route | translate: { count: item.count } }}\n </span>\n }\n </span>\n }\n @if (consultation.failureCode; as code) {\n <span><nh-assistant-icon name=\"warning\" />{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n </li>\n }\n </ol>\n @if (total() > consultations().length) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.more' | translate: { count: total() - consultations().length } }}</p>\n }\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
642
911
|
}
|
|
643
912
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentConsultationsComponent, decorators: [{
|
|
644
913
|
type: Component,
|
|
645
|
-
args: [{ selector: 'nh-assistant-agent-consultations', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading() && consultations().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (consultations().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.consultation.empty' | translate }}</p>\n} @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.private' | translate }}</p>\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.consultations' | translate\">\n @for (consultation of consultations(); track consultation.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ consultation.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"consultation.status === 'completed'\"\n [class.warning]=\"consultation.status === 'running'\"\n [class.danger]=\"consultation.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.consultation.status.' + consultation.status | translate }}\n </span>\n <span\n data-consultation-asker\n [attr.title]=\"consultation.askerDisplayName ? ('nh-assistant.account-id-title' | translate: { id: consultation.askerActorId }) : null\">\n {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? ('nh-assistant.account-id' | translate: { id: consultation.askerActorId }) } }}\n @if (consultation.askingAgentId; as agentId) {\n {{ 'nh-assistant.agent-runs.consultation.through' | translate: { agent: (['nh-assistant.agents.' + agentId + '.name'] | nhAssistantTranslate: agentId) } }}\n }\n </span>\n @if (consultation.depth > 1) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.consultation.depth' | translate: { depth: consultation.depth } }}</span>\n }\n </div>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: consultation.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: consultation.inputTokens + consultation.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: consultation.proposalCount } }}</span>\n @if (consultation.failureCode; as code) {\n <span><nh-assistant-icon name=\"warning\" />{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n </li>\n }\n </ol>\n @if (total() > consultations().length) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.more' | translate: { count: total() - consultations().length } }}</p>\n }\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
914
|
+
args: [{ selector: 'nh-assistant-agent-consultations', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading() && consultations().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (consultations().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.consultation.empty' | translate }}</p>\n} @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.private' | translate }}</p>\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.consultations' | translate\">\n @for (consultation of consultations(); track consultation.id) {\n <li class=\"card\">\n <div class=\"card-header\">\n <strong>{{ consultation.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"consultation.status === 'completed'\"\n [class.warning]=\"consultation.status === 'running'\"\n [class.danger]=\"consultation.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.consultation.status.' + consultation.status | translate }}\n </span>\n <span\n data-consultation-asker\n [attr.title]=\"consultation.askerDisplayName ? ('nh-assistant.account-id-title' | translate: { id: consultation.askerActorId }) : null\">\n {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? ('nh-assistant.account-id' | translate: { id: consultation.askerActorId }) } }}\n @if (consultation.askingAgentId; as agentId) {\n {{ 'nh-assistant.agent-runs.consultation.through' | translate: { agent: (['nh-assistant.agents.' + agentId + '.name'] | nhAssistantTranslate: agentId) } }}\n }\n </span>\n @if (consultation.depth > 1) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.consultation.depth' | translate: { depth: consultation.depth } }}</span>\n }\n </div>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: consultation.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: consultation.inputTokens + consultation.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: consultation.proposalCount } }}</span>\n @let counts = routeCounts(consultation);\n @if (counts.length > 0) {\n <span class=\"consultation-routes\" data-consultation-routes>\n @for (item of counts; track item.route) {\n <span\n class=\"badge\"\n [attr.data-route]=\"item.route\"\n [attr.title]=\"'nh-assistant.agent-runs.proposal.consultation.route.' + item.route | translate\">\n {{ 'nh-assistant.agent-runs.consultation.routes.' + item.route | translate: { count: item.count } }}\n </span>\n }\n </span>\n }\n @if (consultation.failureCode; as code) {\n <span><nh-assistant-icon name=\"warning\" />{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n </li>\n }\n </ol>\n @if (total() > consultations().length) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.consultation.more' | translate: { count: total() - consultations().length } }}</p>\n }\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
646
915
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
647
916
|
|
|
648
917
|
/**
|
|
@@ -695,11 +964,11 @@ class NhAssistantAgentMemoryComponent {
|
|
|
695
964
|
});
|
|
696
965
|
}
|
|
697
966
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentMemoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
698
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentMemoryComponent, isStandalone: true, selector: "nh-assistant-agent-memory", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (!memory()?.configured) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.not-configured' | translate }}</p>\n} @else if (formatted(); as json) {\n <div class=\"section\">\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.memory.version' | translate: { version: memory()!.schemaVersion } }}</span>\n @if (memory()!.updatedAt; as updatedAt) {\n <span>{{ 'nh-assistant.agent-runs.memory.updated' | translate: { date: (updatedAt | date: 'short') } }}</span>\n }\n </div>\n <pre [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.memory' | translate\">{{ json }}</pre>\n </div>\n} @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.empty' | translate }}</p>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
967
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentMemoryComponent, isStandalone: true, selector: "nh-assistant-agent-memory", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (!memory()?.configured) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.not-configured' | translate }}</p>\n} @else if (formatted(); as json) {\n <div class=\"section\">\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.memory.version' | translate: { version: memory()!.schemaVersion } }}</span>\n @if (memory()!.updatedAt; as updatedAt) {\n <span>{{ 'nh-assistant.agent-runs.memory.updated' | translate: { date: (updatedAt | date: 'short') } }}</span>\n }\n </div>\n <pre [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.memory' | translate\">{{ json }}</pre>\n </div>\n} @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.empty' | translate }}</p>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
699
968
|
}
|
|
700
969
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentMemoryComponent, decorators: [{
|
|
701
970
|
type: Component,
|
|
702
|
-
args: [{ selector: 'nh-assistant-agent-memory', standalone: true, imports: [DatePipe, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (!memory()?.configured) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.not-configured' | translate }}</p>\n} @else if (formatted(); as json) {\n <div class=\"section\">\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.memory.version' | translate: { version: memory()!.schemaVersion } }}</span>\n @if (memory()!.updatedAt; as updatedAt) {\n <span>{{ 'nh-assistant.agent-runs.memory.updated' | translate: { date: (updatedAt | date: 'short') } }}</span>\n }\n </div>\n <pre [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.memory' | translate\">{{ json }}</pre>\n </div>\n} @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.empty' | translate }}</p>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
971
|
+
args: [{ selector: 'nh-assistant-agent-memory', standalone: true, imports: [DatePipe, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (!memory()?.configured) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.not-configured' | translate }}</p>\n} @else if (formatted(); as json) {\n <div class=\"section\">\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.memory.version' | translate: { version: memory()!.schemaVersion } }}</span>\n @if (memory()!.updatedAt; as updatedAt) {\n <span>{{ 'nh-assistant.agent-runs.memory.updated' | translate: { date: (updatedAt | date: 'short') } }}</span>\n }\n </div>\n <pre [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.memory' | translate\">{{ json }}</pre>\n </div>\n} @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.memory.empty' | translate }}</p>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
703
972
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
704
973
|
|
|
705
974
|
let nextId$6 = 0;
|
|
@@ -712,6 +981,12 @@ let nextId$6 = 0;
|
|
|
712
981
|
* its object, for the whole application the agent's view policy, administrators every run. The
|
|
713
982
|
* thread view's run timeline and the administration's runs view open it; an application may show
|
|
714
983
|
* it anywhere with a run id. With live updates it reloads by itself while the run works.
|
|
984
|
+
*
|
|
985
|
+
* The run's pending proposals that the reader may decide, by the same live check as the inbox and the
|
|
986
|
+
* subject's work (`POST approvals/lookup`), can be decided in place, one by one or selected together
|
|
987
|
+
* with "Select all"; a pending proposal the reader may not decide says who does, and a reader who may
|
|
988
|
+
* decide none sees no selection. After a rejection the list asks, optionally, what was wrong, and a
|
|
989
|
+
* proposal refused because it no longer fits stays as a closed card with the reason until dismissed.
|
|
715
990
|
*/
|
|
716
991
|
class NhAssistantRunResultComponent {
|
|
717
992
|
constructor() {
|
|
@@ -743,6 +1018,13 @@ class NhAssistantRunResultComponent {
|
|
|
743
1018
|
return keys.length > 0 ? [...keys.slice(0, -1), 'nh-assistant.agent-runs.artifacts.download-failed'] : [];
|
|
744
1019
|
}, ...(ngDevMode ? [{ debugName: "downloadErrorKeys" }] : []));
|
|
745
1020
|
this.codeKeys = _nhAssistantCodeKeys;
|
|
1021
|
+
/**
|
|
1022
|
+
* The reader's live right to decide each pending proposal of the run, by approval id; `null` until
|
|
1023
|
+
* it is known, when nobody may decide.
|
|
1024
|
+
*/
|
|
1025
|
+
this.rights = signal(null, ...(ngDevMode ? [{ debugName: "rights" }] : []));
|
|
1026
|
+
/** Whether the reader may decide at least one of the run's proposals: only then can they select. */
|
|
1027
|
+
this.decidable = computed(() => [...(this.rights()?.values() ?? [])].some(right => right.canDecide), ...(ngDevMode ? [{ debugName: "decidable" }] : []));
|
|
746
1028
|
this.duration = computed(() => {
|
|
747
1029
|
const run = this.detail()?.run;
|
|
748
1030
|
return run ? durationOf(run.startedAt, run.endedAt) : null;
|
|
@@ -751,7 +1033,10 @@ class NhAssistantRunResultComponent {
|
|
|
751
1033
|
const run = this.detail()?.run;
|
|
752
1034
|
return run ? run.inputTokens + run.outputTokens : 0;
|
|
753
1035
|
}, ...(ngDevMode ? [{ debugName: "tokens" }] : []));
|
|
754
|
-
inject(DestroyRef).onDestroy(() =>
|
|
1036
|
+
inject(DestroyRef).onDestroy(() => {
|
|
1037
|
+
this.subscription?.unsubscribe();
|
|
1038
|
+
this.rightsSubscription?.unsubscribe();
|
|
1039
|
+
});
|
|
755
1040
|
effect(() => {
|
|
756
1041
|
this.runId();
|
|
757
1042
|
untracked(() => this.fetch(false));
|
|
@@ -761,6 +1046,10 @@ class NhAssistantRunResultComponent {
|
|
|
761
1046
|
load() {
|
|
762
1047
|
this.fetch(false);
|
|
763
1048
|
}
|
|
1049
|
+
/** A proposal was decided or its feedback given: the run's proposals and the rights are read again. */
|
|
1050
|
+
onProposalsChanged() {
|
|
1051
|
+
this.fetch(true);
|
|
1052
|
+
}
|
|
764
1053
|
async download(artifact) {
|
|
765
1054
|
this.downloadingId.set(artifact.id);
|
|
766
1055
|
this.downloadError.set(null);
|
|
@@ -780,6 +1069,24 @@ class NhAssistantRunResultComponent {
|
|
|
780
1069
|
this.downloadingId.set(null);
|
|
781
1070
|
}
|
|
782
1071
|
}
|
|
1072
|
+
/**
|
|
1073
|
+
* Reads the reader's live right to decide each pending proposal of the run, as the server checks it
|
|
1074
|
+
* for every decision. Without an answer nobody may decide here; the server checks again anyway.
|
|
1075
|
+
*/
|
|
1076
|
+
readRights(detail) {
|
|
1077
|
+
this.rightsSubscription?.unsubscribe();
|
|
1078
|
+
const batches = pendingBatches(detail);
|
|
1079
|
+
if (batches.length === 0) {
|
|
1080
|
+
this.rights.set(new Map());
|
|
1081
|
+
return;
|
|
1082
|
+
}
|
|
1083
|
+
this.rightsSubscription = forkJoin(batches.map(batch => this.api.lookupProposals(batch))).subscribe({
|
|
1084
|
+
next: lookups => this.rights.set(new Map(lookups
|
|
1085
|
+
.flatMap(lookup => lookup.items)
|
|
1086
|
+
.map(item => [item.proposal.approvalId, { canDecide: item.canDecide, reasonCode: item.reasonCode }]))),
|
|
1087
|
+
error: () => this.rights.set(new Map())
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
783
1090
|
/**
|
|
784
1091
|
* Reads the run. A quiet reload, after a live update, keeps what is shown when it fails and shows
|
|
785
1092
|
* no loading state.
|
|
@@ -797,6 +1104,7 @@ class NhAssistantRunResultComponent {
|
|
|
797
1104
|
this.loading.set(false);
|
|
798
1105
|
this.loadFailed.set(false);
|
|
799
1106
|
this.notFound.set(false);
|
|
1107
|
+
this.readRights(detail);
|
|
800
1108
|
},
|
|
801
1109
|
error: (failure) => {
|
|
802
1110
|
if (quiet && this.detail() !== null) {
|
|
@@ -811,7 +1119,7 @@ class NhAssistantRunResultComponent {
|
|
|
811
1119
|
});
|
|
812
1120
|
}
|
|
813
1121
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
814
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantRunResultComponent, isStandalone: true, selector: "nh-assistant-run-result", inputs: { runId: { classPropertyName: "runId", publicName: "runId", isSignal: true, isRequired: true, transformFunction: null }, conversationLink: { classPropertyName: "conversationLink", publicName: "conversationLink", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"run-result\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n @if (loading() && !detail()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.result.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-run-not-found>{{ 'nh-assistant.agent-runs.result.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else if (detail(); as current) {\n @let run = current.run;\n <header class=\"run-result-header\">\n <h4 [id]=\"id + '-title'\">\n <span>{{ [run.agentDisplayNameKey ?? ('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: (run.agentDisplayNameKey ?? run.agentId) }}</span>{{ ' ' }}\n <span class=\"muted\" aria-hidden=\"true\">\u00B7</span>{{ ' ' }}\n <nh-assistant-subject-link\n [subjectType]=\"run.subjectType\"\n [subjectId]=\"run.subjectId\"\n [label]=\"run.subjectDisplayName ?? run.subjectId\"\n [typeName]=\"run.subjectTypeName\"\n [link]=\"run.subjectLink\" />\n </h4>\n <div class=\"meta\">\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n @if (run.shadow) {\n <span class=\"badge warning\" data-run-shadow>{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind !== 'model') {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}</span>\n }\n </div>\n </header>\n\n <dl class=\"facts\">\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.started' | translate }}</dt>\n <dd><time [attr.datetime]=\"run.startedAt ?? run.createdAt\">{{ (run.startedAt ?? run.createdAt) | date: 'medium' }}</time></dd>\n </div>\n @if (duration(); as took) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.duration' | translate }}</dt>\n <dd data-run-duration>{{ took.key | translate: { count: took.value } }}</dd>\n </div>\n }\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.usage' | translate }}</dt>\n <dd>\n {{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }},\n {{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: tokens() } }}\n </dd>\n </div>\n @if (run.failureCode; as code) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.failure' | translate }}</dt>\n <dd data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</dd>\n </div>\n }\n @if (run.mcpConnectionSkips?.length) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.mcp-skipped' | translate }}</dt>\n <dd>\n <ul class=\"mcp-skips\" data-run-mcp-skips>\n @for (skip of run.mcpConnectionSkips; track skip.serverId) {\n <li [attr.data-run-mcp-skip]=\"skip.serverId\">\n <strong>{{ skip.serverDisplayName || skip.serverId }}</strong>: {{ codeKeys(skip.code) | nhAssistantTranslate: skip.code }}\n </li>\n }\n </ul>\n </dd>\n </div>\n }\n </dl>\n\n <!-- The answer is model output: the safe Markdown rendering shows inline HTML as text. -->\n <div class=\"result-body\">\n <h5>{{ 'nh-assistant.agent-runs.result.answer' | translate }}</h5>\n @if (current.result; as answer) {\n <div class=\"markdown\" data-run-answer [innerHTML]=\"answer | nhAssistantMarkdown\"></div>\n @if (current.resultTruncated) {\n <p class=\"muted\" data-run-truncated>{{ 'nh-assistant.agent-runs.result.truncated' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-run-no-answer>{{ 'nh-assistant.agent-runs.result.no-answer' | translate }}</p>\n @if (current.summary; as summary) {\n <p class=\"summary\">{{ summary }}</p>\n }\n }\n </div>\n\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.proposals' | translate }}</h5>\n @if (current.proposals.length > 0) {\n <nh-assistant-agent-proposals\n [proposals]=\"current.proposals\"\n (openConversation)=\"openConversation.emit($event)\" />\n } @else if (current.hiddenProposals === 0) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.result.no-proposals' | translate }}</p>\n }\n @if (current.hiddenProposals > 0) {\n <p class=\"muted\" data-hidden-proposals>{{ 'nh-assistant.agent-runs.result.hidden-proposals' | translate: { count: current.hiddenProposals } }}</p>\n }\n </div>\n\n @if (current.artifacts.length > 0) {\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.files' | translate }}</h5>\n @if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n <ul class=\"files\">\n @for (artifact of current.artifacts; track artifact.id) {\n <li [attr.data-run-artifact]=\"artifact.id\">\n <span class=\"file-name\">{{ artifact.name }}</span>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n } @else {\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.aria-label]=\"('nh-assistant.agent-runs.artifacts.download' | translate) + ' ' + artifact.name\"\n [disabled]=\"downloadingId() !== null\"\n (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n }\n </li>\n }\n </ul>\n </div>\n }\n\n @if (conversationLink() && current.canOpenConversation) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" data-run-conversation (click)=\"openConversation.emit(run.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n </div>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards"], outputs: ["changed", "openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }, { kind: "pipe", type: _NhAssistantMarkdownPipe, name: "nhAssistantMarkdown" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1122
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantRunResultComponent, isStandalone: true, selector: "nh-assistant-run-result", inputs: { runId: { classPropertyName: "runId", publicName: "runId", isSignal: true, isRequired: true, transformFunction: null }, conversationLink: { classPropertyName: "conversationLink", publicName: "conversationLink", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"run-result\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n @if (loading() && !detail()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.result.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-run-not-found>{{ 'nh-assistant.agent-runs.result.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else if (detail(); as current) {\n @let run = current.run;\n <header class=\"run-result-header\">\n <h4 [id]=\"id + '-title'\">\n <span>{{ [run.agentDisplayNameKey ?? ('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: (run.agentDisplayNameKey ?? run.agentId) }}</span>{{ ' ' }}\n <span class=\"muted\" aria-hidden=\"true\">\u00B7</span>{{ ' ' }}\n <nh-assistant-subject-link\n [subjectType]=\"run.subjectType\"\n [subjectId]=\"run.subjectId\"\n [label]=\"run.subjectDisplayName ?? run.subjectId\"\n [typeName]=\"run.subjectTypeName\"\n [link]=\"run.subjectLink\" />\n </h4>\n <div class=\"meta\">\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n @if (run.shadow) {\n <span class=\"badge warning\" data-run-shadow>{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind !== 'model') {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}</span>\n }\n </div>\n </header>\n\n <dl class=\"facts\">\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.started' | translate }}</dt>\n <dd><time [attr.datetime]=\"run.startedAt ?? run.createdAt\">{{ (run.startedAt ?? run.createdAt) | date: 'medium' }}</time></dd>\n </div>\n @if (duration(); as took) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.duration' | translate }}</dt>\n <dd data-run-duration>{{ took.key | translate: { count: took.value } }}</dd>\n </div>\n }\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.usage' | translate }}</dt>\n <dd>\n {{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }},\n {{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: tokens() } }}\n </dd>\n </div>\n @if (run.failureCode; as code) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.failure' | translate }}</dt>\n <dd data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</dd>\n </div>\n }\n @if (run.mcpConnectionSkips?.length) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.mcp-skipped' | translate }}</dt>\n <dd>\n <ul class=\"mcp-skips\" data-run-mcp-skips>\n @for (skip of run.mcpConnectionSkips; track skip.serverId) {\n <li [attr.data-run-mcp-skip]=\"skip.serverId\">\n <strong>{{ skip.serverDisplayName || skip.serverId }}</strong>: {{ codeKeys(skip.code) | nhAssistantTranslate: skip.code }}\n </li>\n }\n </ul>\n </dd>\n </div>\n }\n </dl>\n\n <!-- The answer is model output: the safe Markdown rendering shows inline HTML as text. -->\n <div class=\"result-body\">\n <h5>{{ 'nh-assistant.agent-runs.result.answer' | translate }}</h5>\n @if (current.result; as answer) {\n <div class=\"markdown\" data-run-answer [innerHTML]=\"answer | nhAssistantMarkdown\"></div>\n @if (current.resultTruncated) {\n <p class=\"muted\" data-run-truncated>{{ 'nh-assistant.agent-runs.result.truncated' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-run-no-answer>{{ 'nh-assistant.agent-runs.result.no-answer' | translate }}</p>\n @if (current.summary; as summary) {\n <p class=\"summary\">{{ summary }}</p>\n }\n }\n </div>\n\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.proposals' | translate }}</h5>\n @if (current.proposals.length > 0) {\n <nh-assistant-agent-proposals\n [proposals]=\"current.proposals\"\n [decisionRights]=\"rights()\"\n [selectable]=\"decidable()\"\n [holdClosedCards]=\"true\"\n (changed)=\"onProposalsChanged()\"\n (openConversation)=\"openConversation.emit($event)\" />\n } @else if (current.hiddenProposals === 0) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.result.no-proposals' | translate }}</p>\n }\n @if (current.hiddenProposals > 0) {\n <p class=\"muted\" data-hidden-proposals>{{ 'nh-assistant.agent-runs.result.hidden-proposals' | translate: { count: current.hiddenProposals } }}</p>\n }\n </div>\n\n @if (current.artifacts.length > 0) {\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.files' | translate }}</h5>\n @if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n <ul class=\"files\">\n @for (artifact of current.artifacts; track artifact.id) {\n <li [attr.data-run-artifact]=\"artifact.id\">\n <span class=\"file-name\">{{ artifact.name }}</span>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n } @else {\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.aria-label]=\"('nh-assistant.agent-runs.artifacts.download' | translate) + ' ' + artifact.name\"\n [disabled]=\"downloadingId() !== null\"\n (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n }\n </li>\n }\n </ul>\n </div>\n }\n\n @if (conversationLink() && current.canOpenConversation) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" data-run-conversation (click)=\"openConversation.emit(run.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n </div>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards", "groups", "groupByRun", "newIds"], outputs: ["changed", "openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }, { kind: "pipe", type: _NhAssistantMarkdownPipe, name: "nhAssistantMarkdown" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
815
1123
|
}
|
|
816
1124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunResultComponent, decorators: [{
|
|
817
1125
|
type: Component,
|
|
@@ -823,8 +1131,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
823
1131
|
_NhAssistantMarkdownPipe,
|
|
824
1132
|
_NhAssistantSubjectLinkComponent,
|
|
825
1133
|
NhAssistantAgentProposalsComponent
|
|
826
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"run-result\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n @if (loading() && !detail()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.result.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-run-not-found>{{ 'nh-assistant.agent-runs.result.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else if (detail(); as current) {\n @let run = current.run;\n <header class=\"run-result-header\">\n <h4 [id]=\"id + '-title'\">\n <span>{{ [run.agentDisplayNameKey ?? ('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: (run.agentDisplayNameKey ?? run.agentId) }}</span>{{ ' ' }}\n <span class=\"muted\" aria-hidden=\"true\">\u00B7</span>{{ ' ' }}\n <nh-assistant-subject-link\n [subjectType]=\"run.subjectType\"\n [subjectId]=\"run.subjectId\"\n [label]=\"run.subjectDisplayName ?? run.subjectId\"\n [typeName]=\"run.subjectTypeName\"\n [link]=\"run.subjectLink\" />\n </h4>\n <div class=\"meta\">\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n @if (run.shadow) {\n <span class=\"badge warning\" data-run-shadow>{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind !== 'model') {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}</span>\n }\n </div>\n </header>\n\n <dl class=\"facts\">\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.started' | translate }}</dt>\n <dd><time [attr.datetime]=\"run.startedAt ?? run.createdAt\">{{ (run.startedAt ?? run.createdAt) | date: 'medium' }}</time></dd>\n </div>\n @if (duration(); as took) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.duration' | translate }}</dt>\n <dd data-run-duration>{{ took.key | translate: { count: took.value } }}</dd>\n </div>\n }\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.usage' | translate }}</dt>\n <dd>\n {{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }},\n {{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: tokens() } }}\n </dd>\n </div>\n @if (run.failureCode; as code) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.failure' | translate }}</dt>\n <dd data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</dd>\n </div>\n }\n @if (run.mcpConnectionSkips?.length) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.mcp-skipped' | translate }}</dt>\n <dd>\n <ul class=\"mcp-skips\" data-run-mcp-skips>\n @for (skip of run.mcpConnectionSkips; track skip.serverId) {\n <li [attr.data-run-mcp-skip]=\"skip.serverId\">\n <strong>{{ skip.serverDisplayName || skip.serverId }}</strong>: {{ codeKeys(skip.code) | nhAssistantTranslate: skip.code }}\n </li>\n }\n </ul>\n </dd>\n </div>\n }\n </dl>\n\n <!-- The answer is model output: the safe Markdown rendering shows inline HTML as text. -->\n <div class=\"result-body\">\n <h5>{{ 'nh-assistant.agent-runs.result.answer' | translate }}</h5>\n @if (current.result; as answer) {\n <div class=\"markdown\" data-run-answer [innerHTML]=\"answer | nhAssistantMarkdown\"></div>\n @if (current.resultTruncated) {\n <p class=\"muted\" data-run-truncated>{{ 'nh-assistant.agent-runs.result.truncated' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-run-no-answer>{{ 'nh-assistant.agent-runs.result.no-answer' | translate }}</p>\n @if (current.summary; as summary) {\n <p class=\"summary\">{{ summary }}</p>\n }\n }\n </div>\n\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.proposals' | translate }}</h5>\n @if (current.proposals.length > 0) {\n <nh-assistant-agent-proposals\n [proposals]=\"current.proposals\"\n (openConversation)=\"openConversation.emit($event)\" />\n } @else if (current.hiddenProposals === 0) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.result.no-proposals' | translate }}</p>\n }\n @if (current.hiddenProposals > 0) {\n <p class=\"muted\" data-hidden-proposals>{{ 'nh-assistant.agent-runs.result.hidden-proposals' | translate: { count: current.hiddenProposals } }}</p>\n }\n </div>\n\n @if (current.artifacts.length > 0) {\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.files' | translate }}</h5>\n @if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n <ul class=\"files\">\n @for (artifact of current.artifacts; track artifact.id) {\n <li [attr.data-run-artifact]=\"artifact.id\">\n <span class=\"file-name\">{{ artifact.name }}</span>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n } @else {\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.aria-label]=\"('nh-assistant.agent-runs.artifacts.download' | translate) + ' ' + artifact.name\"\n [disabled]=\"downloadingId() !== null\"\n (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n }\n </li>\n }\n </ul>\n </div>\n }\n\n @if (conversationLink() && current.canOpenConversation) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" data-run-conversation (click)=\"openConversation.emit(run.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n </div>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
1134
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"run-result\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n @if (loading() && !detail()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.result.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-run-not-found>{{ 'nh-assistant.agent-runs.result.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else if (detail(); as current) {\n @let run = current.run;\n <header class=\"run-result-header\">\n <h4 [id]=\"id + '-title'\">\n <span>{{ [run.agentDisplayNameKey ?? ('nh-assistant.agents.' + run.agentId + '.name')] | nhAssistantTranslate: (run.agentDisplayNameKey ?? run.agentId) }}</span>{{ ' ' }}\n <span class=\"muted\" aria-hidden=\"true\">\u00B7</span>{{ ' ' }}\n <nh-assistant-subject-link\n [subjectType]=\"run.subjectType\"\n [subjectId]=\"run.subjectId\"\n [label]=\"run.subjectDisplayName ?? run.subjectId\"\n [typeName]=\"run.subjectTypeName\"\n [link]=\"run.subjectLink\" />\n </h4>\n <div class=\"meta\">\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n @if (run.shadow) {\n <span class=\"badge warning\" data-run-shadow>{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind !== 'model') {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}</span>\n }\n </div>\n </header>\n\n <dl class=\"facts\">\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.started' | translate }}</dt>\n <dd><time [attr.datetime]=\"run.startedAt ?? run.createdAt\">{{ (run.startedAt ?? run.createdAt) | date: 'medium' }}</time></dd>\n </div>\n @if (duration(); as took) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.duration' | translate }}</dt>\n <dd data-run-duration>{{ took.key | translate: { count: took.value } }}</dd>\n </div>\n }\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.usage' | translate }}</dt>\n <dd>\n {{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }},\n {{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: tokens() } }}\n </dd>\n </div>\n @if (run.failureCode; as code) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.failure' | translate }}</dt>\n <dd data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</dd>\n </div>\n }\n @if (run.mcpConnectionSkips?.length) {\n <div>\n <dt>{{ 'nh-assistant.agent-runs.result.mcp-skipped' | translate }}</dt>\n <dd>\n <ul class=\"mcp-skips\" data-run-mcp-skips>\n @for (skip of run.mcpConnectionSkips; track skip.serverId) {\n <li [attr.data-run-mcp-skip]=\"skip.serverId\">\n <strong>{{ skip.serverDisplayName || skip.serverId }}</strong>: {{ codeKeys(skip.code) | nhAssistantTranslate: skip.code }}\n </li>\n }\n </ul>\n </dd>\n </div>\n }\n </dl>\n\n <!-- The answer is model output: the safe Markdown rendering shows inline HTML as text. -->\n <div class=\"result-body\">\n <h5>{{ 'nh-assistant.agent-runs.result.answer' | translate }}</h5>\n @if (current.result; as answer) {\n <div class=\"markdown\" data-run-answer [innerHTML]=\"answer | nhAssistantMarkdown\"></div>\n @if (current.resultTruncated) {\n <p class=\"muted\" data-run-truncated>{{ 'nh-assistant.agent-runs.result.truncated' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-run-no-answer>{{ 'nh-assistant.agent-runs.result.no-answer' | translate }}</p>\n @if (current.summary; as summary) {\n <p class=\"summary\">{{ summary }}</p>\n }\n }\n </div>\n\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.proposals' | translate }}</h5>\n @if (current.proposals.length > 0) {\n <nh-assistant-agent-proposals\n [proposals]=\"current.proposals\"\n [decisionRights]=\"rights()\"\n [selectable]=\"decidable()\"\n [holdClosedCards]=\"true\"\n (changed)=\"onProposalsChanged()\"\n (openConversation)=\"openConversation.emit($event)\" />\n } @else if (current.hiddenProposals === 0) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.result.no-proposals' | translate }}</p>\n }\n @if (current.hiddenProposals > 0) {\n <p class=\"muted\" data-hidden-proposals>{{ 'nh-assistant.agent-runs.result.hidden-proposals' | translate: { count: current.hiddenProposals } }}</p>\n }\n </div>\n\n @if (current.artifacts.length > 0) {\n <div class=\"result-section\">\n <h5>{{ 'nh-assistant.agent-runs.result.files' | translate }}</h5>\n @if (downloadError(); as failure) {\n <p class=\"message error\" role=\"alert\" data-download-error><nh-assistant-icon name=\"warning\" />{{ downloadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n <ul class=\"files\">\n @for (artifact of current.artifacts; track artifact.id) {\n <li [attr.data-run-artifact]=\"artifact.id\">\n <span class=\"file-name\">{{ artifact.name }}</span>\n <span class=\"muted\">{{ 'nh-assistant.agent-runs.artifacts.version' | translate: { version: artifact.version } }}</span>\n @if (artifact.restricted) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.artifacts.restricted' | translate }}</span>\n } @else {\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.aria-label]=\"('nh-assistant.agent-runs.artifacts.download' | translate) + ' ' + artifact.name\"\n [disabled]=\"downloadingId() !== null\"\n (click)=\"download(artifact)\">\n <nh-assistant-icon name=\"page\" />{{ 'nh-assistant.agent-runs.artifacts.download' | translate }}\n </button>\n }\n </li>\n }\n </ul>\n </div>\n }\n\n @if (conversationLink() && current.canOpenConversation) {\n <div class=\"card-actions\">\n <button class=\"secondary\" type=\"button\" data-run-conversation (click)=\"openConversation.emit(run.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n </div>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
827
1135
|
}], ctorParameters: () => [], propDecorators: { runId: [{ type: i0.Input, args: [{ isSignal: true, alias: "runId", required: true }] }], conversationLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationLink", required: false }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
1136
|
+
/** The ids of the run's pending proposals in lookups of at most the lookup's limit each. */
|
|
1137
|
+
function pendingBatches(detail) {
|
|
1138
|
+
const ids = detail.proposals.filter(proposal => proposal.status === 'pending').map(proposal => proposal.approvalId);
|
|
1139
|
+
const batches = [];
|
|
1140
|
+
for (let start = 0; start < ids.length; start += NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {
|
|
1141
|
+
batches.push(ids.slice(start, start + NH_ASSISTANT_MAX_PROPOSAL_LOOKUP));
|
|
1142
|
+
}
|
|
1143
|
+
return batches;
|
|
1144
|
+
}
|
|
828
1145
|
/** The time between a run's start and end, in seconds below two minutes and in minutes above. */
|
|
829
1146
|
function durationOf(startedAt, endedAt) {
|
|
830
1147
|
if (!startedAt || !endedAt) {
|
|
@@ -946,7 +1263,7 @@ class NhAssistantRunTimelineComponent {
|
|
|
946
1263
|
});
|
|
947
1264
|
}
|
|
948
1265
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
949
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantRunTimelineComponent, isStandalone: true, selector: "nh-assistant-run-timeline", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", openConversation: "openConversation" }, ngImport: i0, template: "@if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n@if (receipt(); as restarted) {\n <nh-assistant-run-receipt [receipt]=\"restarted\" />\n}\n\n@if (loading() && runs().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (runs().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.run.empty' | translate }}</p>\n} @else {\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.runs' | translate\">\n @for (run of runs(); track run.id) {\n <li class=\"card\" [attr.aria-busy]=\"busyRunId() === run.id\">\n <div class=\"card-header\">\n <strong>{{ run.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}\n </span>\n @if (run.shadow) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind && run.kind !== 'model') {\n <span class=\"badge\" [attr.data-kind]=\"run.kind\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\" [attr.data-skill]=\"run.skill\">\n {{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}\n @if (run.skillChosenBy) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.skill-chosen-by.' + run.skillChosenBy | translate }}\n }\n </span>\n }\n </div>\n @if (run.requestedByAgentId; as source) {\n <p class=\"handed-off\" [attr.data-handed-off-by]=\"source\">\n {{ 'nh-assistant.agent-runs.run.handed-off-by' | translate: { agent: (['nh-assistant.agents.' + source + '.name'] | nhAssistantTranslate: source) } }}\n @if (run.requestedByConversationId; as sourceThread) {\n <button class=\"link\" type=\"button\" (click)=\"openConversation.emit(sourceThread)\">\n {{ 'nh-assistant.agent-runs.run.open-source-thread' | translate }}\n </button>\n }\n </p>\n }\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: run.inputTokens + run.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: run.proposalCount } }}</span>\n @if (run.attempt > 1) {\n <span>{{ 'nh-assistant.agent-runs.run.attempt' | translate: { attempt: run.attempt } }}</span>\n }\n @if (run.failureCode; as code) {\n <span data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n <div class=\"card-actions\">\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-run-result\n [attr.aria-expanded]=\"openedRunId() === run.id\"\n [attr.aria-controls]=\"id + '-' + run.id + '-result'\"\n (click)=\"toggleResult(run)\">\n <nh-assistant-icon name=\"list\" />{{ (openedRunId() === run.id ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n @if (isOpen(run) && canCancel()) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"cancel(run)\">\n <nh-assistant-icon name=\"stop\" />{{ 'nh-assistant.agent-runs.run.cancel' | translate }}\n </button>\n }\n @if (canRetryRun(run)) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'resume')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.resume' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'restart')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.restart' | translate }}\n </button>\n }\n }\n </div>\n @if (openedRunId() === run.id) {\n <div class=\"work\" [id]=\"id + '-' + run.id + '-result'\">\n <nh-assistant-run-result\n [runId]=\"run.id\"\n [conversationLink]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ol>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1266
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantRunTimelineComponent, isStandalone: true, selector: "nh-assistant-run-timeline", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", openConversation: "openConversation" }, ngImport: i0, template: "@if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n@if (receipt(); as restarted) {\n <nh-assistant-run-receipt [receipt]=\"restarted\" />\n}\n\n@if (loading() && runs().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (runs().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.run.empty' | translate }}</p>\n} @else {\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.runs' | translate\">\n @for (run of runs(); track run.id) {\n <li class=\"card\" [attr.aria-busy]=\"busyRunId() === run.id\">\n <div class=\"card-header\">\n <strong>{{ run.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}\n </span>\n @if (run.shadow) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind && run.kind !== 'model') {\n <span class=\"badge\" [attr.data-kind]=\"run.kind\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\" [attr.data-skill]=\"run.skill\">\n {{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}\n @if (run.skillChosenBy) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.skill-chosen-by.' + run.skillChosenBy | translate }}\n }\n </span>\n }\n </div>\n @if (run.requestedByAgentId; as source) {\n <p class=\"handed-off\" [attr.data-handed-off-by]=\"source\">\n {{ 'nh-assistant.agent-runs.run.handed-off-by' | translate: { agent: (['nh-assistant.agents.' + source + '.name'] | nhAssistantTranslate: source) } }}\n @if (run.requestedByConversationId; as sourceThread) {\n <button class=\"link\" type=\"button\" (click)=\"openConversation.emit(sourceThread)\">\n {{ 'nh-assistant.agent-runs.run.open-source-thread' | translate }}\n </button>\n }\n </p>\n }\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: run.inputTokens + run.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: run.proposalCount } }}</span>\n @if (run.attempt > 1) {\n <span>{{ 'nh-assistant.agent-runs.run.attempt' | translate: { attempt: run.attempt } }}</span>\n }\n @if (run.failureCode; as code) {\n <span data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n <div class=\"card-actions\">\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-run-result\n [attr.aria-expanded]=\"openedRunId() === run.id\"\n [attr.aria-controls]=\"id + '-' + run.id + '-result'\"\n (click)=\"toggleResult(run)\">\n <nh-assistant-icon name=\"list\" />{{ (openedRunId() === run.id ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n @if (isOpen(run) && canCancel()) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"cancel(run)\">\n <nh-assistant-icon name=\"stop\" />{{ 'nh-assistant.agent-runs.run.cancel' | translate }}\n </button>\n }\n @if (canRetryRun(run)) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'resume')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.resume' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'restart')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.restart' | translate }}\n </button>\n }\n }\n </div>\n @if (openedRunId() === run.id) {\n <div class=\"work\" [id]=\"id + '-' + run.id + '-result'\">\n <nh-assistant-run-result\n [runId]=\"run.id\"\n [conversationLink]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ol>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
950
1267
|
}
|
|
951
1268
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunTimelineComponent, decorators: [{
|
|
952
1269
|
type: Component,
|
|
@@ -957,7 +1274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
957
1274
|
_NhAssistantIconComponent,
|
|
958
1275
|
NhAssistantRunResultComponent,
|
|
959
1276
|
NhAssistantRunReceiptComponent
|
|
960
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n@if (receipt(); as restarted) {\n <nh-assistant-run-receipt [receipt]=\"restarted\" />\n}\n\n@if (loading() && runs().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (runs().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.run.empty' | translate }}</p>\n} @else {\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.runs' | translate\">\n @for (run of runs(); track run.id) {\n <li class=\"card\" [attr.aria-busy]=\"busyRunId() === run.id\">\n <div class=\"card-header\">\n <strong>{{ run.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}\n </span>\n @if (run.shadow) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind && run.kind !== 'model') {\n <span class=\"badge\" [attr.data-kind]=\"run.kind\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\" [attr.data-skill]=\"run.skill\">\n {{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}\n @if (run.skillChosenBy) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.skill-chosen-by.' + run.skillChosenBy | translate }}\n }\n </span>\n }\n </div>\n @if (run.requestedByAgentId; as source) {\n <p class=\"handed-off\" [attr.data-handed-off-by]=\"source\">\n {{ 'nh-assistant.agent-runs.run.handed-off-by' | translate: { agent: (['nh-assistant.agents.' + source + '.name'] | nhAssistantTranslate: source) } }}\n @if (run.requestedByConversationId; as sourceThread) {\n <button class=\"link\" type=\"button\" (click)=\"openConversation.emit(sourceThread)\">\n {{ 'nh-assistant.agent-runs.run.open-source-thread' | translate }}\n </button>\n }\n </p>\n }\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: run.inputTokens + run.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: run.proposalCount } }}</span>\n @if (run.attempt > 1) {\n <span>{{ 'nh-assistant.agent-runs.run.attempt' | translate: { attempt: run.attempt } }}</span>\n }\n @if (run.failureCode; as code) {\n <span data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n <div class=\"card-actions\">\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-run-result\n [attr.aria-expanded]=\"openedRunId() === run.id\"\n [attr.aria-controls]=\"id + '-' + run.id + '-result'\"\n (click)=\"toggleResult(run)\">\n <nh-assistant-icon name=\"list\" />{{ (openedRunId() === run.id ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n @if (isOpen(run) && canCancel()) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"cancel(run)\">\n <nh-assistant-icon name=\"stop\" />{{ 'nh-assistant.agent-runs.run.cancel' | translate }}\n </button>\n }\n @if (canRetryRun(run)) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'resume')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.resume' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'restart')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.restart' | translate }}\n </button>\n }\n }\n </div>\n @if (openedRunId() === run.id) {\n <div class=\"work\" [id]=\"id + '-' + run.id + '-result'\">\n <nh-assistant-run-result\n [runId]=\"run.id\"\n [conversationLink]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ol>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
1277
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n}\n@if (receipt(); as restarted) {\n <nh-assistant-run-receipt [receipt]=\"restarted\" />\n}\n\n@if (loading() && runs().length === 0) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n} @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n} @else if (runs().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.run.empty' | translate }}</p>\n} @else {\n <ol class=\"cards\" [attr.aria-label]=\"'nh-assistant.agent-runs.thread.tabs.runs' | translate\">\n @for (run of runs(); track run.id) {\n <li class=\"card\" [attr.aria-busy]=\"busyRunId() === run.id\">\n <div class=\"card-header\">\n <strong>{{ run.createdAt | date: 'short' }}</strong>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.warning]=\"run.status === 'waiting-for-approval' || run.status === 'queued' || run.status === 'running'\"\n [class.danger]=\"run.status === 'failed'\">\n {{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}\n </span>\n @if (run.shadow) {\n <span class=\"badge\">{{ 'nh-assistant.agent-runs.run.shadow' | translate }}</span>\n }\n @if (run.kind && run.kind !== 'model') {\n <span class=\"badge\" [attr.data-kind]=\"run.kind\">{{ 'nh-assistant.agent-runs.run.kind.' + run.kind | translate }}</span>\n }\n <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n @if (run.skill) {\n <span class=\"badge\" [attr.data-skill]=\"run.skill\">\n {{ 'nh-assistant.agent-runs.run.skill' | translate: { skill: run.skill } }}\n @if (run.skillChosenBy) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.skill-chosen-by.' + run.skillChosenBy | translate }}\n }\n </span>\n }\n </div>\n @if (run.requestedByAgentId; as source) {\n <p class=\"handed-off\" [attr.data-handed-off-by]=\"source\">\n {{ 'nh-assistant.agent-runs.run.handed-off-by' | translate: { agent: (['nh-assistant.agents.' + source + '.name'] | nhAssistantTranslate: source) } }}\n @if (run.requestedByConversationId; as sourceThread) {\n <button class=\"link\" type=\"button\" (click)=\"openConversation.emit(sourceThread)\">\n {{ 'nh-assistant.agent-runs.run.open-source-thread' | translate }}\n </button>\n }\n </p>\n }\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.run.tool-calls' | translate: { count: run.toolCalls } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.tokens' | translate: { count: run.inputTokens + run.outputTokens } }}</span>\n <span>{{ 'nh-assistant.agent-runs.run.proposals' | translate: { count: run.proposalCount } }}</span>\n @if (run.attempt > 1) {\n <span>{{ 'nh-assistant.agent-runs.run.attempt' | translate: { attempt: run.attempt } }}</span>\n }\n @if (run.failureCode; as code) {\n <span data-run-failure>{{ codeKeys(code) | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n <div class=\"card-actions\">\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-run-result\n [attr.aria-expanded]=\"openedRunId() === run.id\"\n [attr.aria-controls]=\"id + '-' + run.id + '-result'\"\n (click)=\"toggleResult(run)\">\n <nh-assistant-icon name=\"list\" />{{ (openedRunId() === run.id ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n @if (isOpen(run) && canCancel()) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"cancel(run)\">\n <nh-assistant-icon name=\"stop\" />{{ 'nh-assistant.agent-runs.run.cancel' | translate }}\n </button>\n }\n @if (canRetryRun(run)) {\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'resume')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.resume' | translate }}\n </button>\n <button class=\"secondary\" type=\"button\" [disabled]=\"busyRunId() !== null\" (click)=\"retry(run, 'restart')\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.run.restart' | translate }}\n </button>\n }\n }\n </div>\n @if (openedRunId() === run.id) {\n <div class=\"work\" [id]=\"id + '-' + run.id + '-result'\">\n <nh-assistant-run-result\n [runId]=\"run.id\"\n [conversationLink]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ol>\n}\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
961
1278
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
962
1279
|
|
|
963
1280
|
/**
|
|
@@ -984,6 +1301,13 @@ class NhAssistantAgentThreadViewComponent {
|
|
|
984
1301
|
this.loadFailed = signal(false, ...(ngDevMode ? [{ debugName: "loadFailed" }] : []));
|
|
985
1302
|
this.lookup = signal(null, ...(ngDevMode ? [{ debugName: "lookup" }] : []));
|
|
986
1303
|
this.proposals = signal([], ...(ngDevMode ? [{ debugName: "proposals" }] : []));
|
|
1304
|
+
/**
|
|
1305
|
+
* The caller's live right to decide each pending proposal, as the server checks it for the decision:
|
|
1306
|
+
* four-eyes keeps the person who asked for a consultation's proposal out, also as an approver, and
|
|
1307
|
+
* nobody decides here what the asker decides in their own chat. Without an answer the caller's role
|
|
1308
|
+
* decides what is offered; the server checks every decision again.
|
|
1309
|
+
*/
|
|
1310
|
+
this.rights = signal(null, ...(ngDevMode ? [{ debugName: "rights" }] : []));
|
|
987
1311
|
this.message = signal('', ...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
988
1312
|
this.starting = signal(false, ...(ngDevMode ? [{ debugName: "starting" }] : []));
|
|
989
1313
|
this.receipt = signal(null, ...(ngDevMode ? [{ debugName: "receipt" }] : []));
|
|
@@ -995,6 +1319,7 @@ class NhAssistantAgentThreadViewComponent {
|
|
|
995
1319
|
inject(DestroyRef).onDestroy(() => {
|
|
996
1320
|
this.subscription?.unsubscribe();
|
|
997
1321
|
this.proposalSubscription?.unsubscribe();
|
|
1322
|
+
this.rightsSubscription?.unsubscribe();
|
|
998
1323
|
this.startSubscription?.unsubscribe();
|
|
999
1324
|
});
|
|
1000
1325
|
effect(() => {
|
|
@@ -1090,19 +1415,46 @@ class NhAssistantAgentThreadViewComponent {
|
|
|
1090
1415
|
this.proposalSubscription?.unsubscribe();
|
|
1091
1416
|
if (!thread) {
|
|
1092
1417
|
this.proposals.set([]);
|
|
1418
|
+
this.rights.set(null);
|
|
1093
1419
|
return;
|
|
1094
1420
|
}
|
|
1095
1421
|
this.proposalSubscription = this.api.getProposals(thread.conversationId).subscribe({
|
|
1096
|
-
next: proposals =>
|
|
1422
|
+
next: proposals => {
|
|
1423
|
+
this.proposals.set(proposals);
|
|
1424
|
+
this.readRights(proposals);
|
|
1425
|
+
},
|
|
1097
1426
|
error: () => {
|
|
1098
1427
|
if (!quiet) {
|
|
1099
1428
|
this.proposals.set([]);
|
|
1429
|
+
this.rights.set(null);
|
|
1100
1430
|
}
|
|
1101
1431
|
}
|
|
1102
1432
|
});
|
|
1103
1433
|
}
|
|
1434
|
+
/**
|
|
1435
|
+
* Reads the caller's live right to decide each pending proposal, in batches of
|
|
1436
|
+
* `NH_ASSISTANT_MAX_PROPOSAL_LOOKUP`, as the run result and the subject's work do.
|
|
1437
|
+
*/
|
|
1438
|
+
readRights(proposals) {
|
|
1439
|
+
this.rightsSubscription?.unsubscribe();
|
|
1440
|
+
const ids = [...new Set(proposals.filter(proposal => proposal.status === 'pending').map(proposal => proposal.approvalId))];
|
|
1441
|
+
if (ids.length === 0) {
|
|
1442
|
+
this.rights.set(null);
|
|
1443
|
+
return;
|
|
1444
|
+
}
|
|
1445
|
+
const batches = [];
|
|
1446
|
+
for (let start = 0; start < ids.length; start += NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {
|
|
1447
|
+
batches.push(ids.slice(start, start + NH_ASSISTANT_MAX_PROPOSAL_LOOKUP));
|
|
1448
|
+
}
|
|
1449
|
+
this.rightsSubscription = forkJoin(batches.map(batch => this.api.lookupProposals(batch))).subscribe({
|
|
1450
|
+
next: lookups => this.rights.set(new Map(lookups
|
|
1451
|
+
.flatMap(lookup => lookup.items)
|
|
1452
|
+
.map(item => [item.proposal.approvalId, { canDecide: item.canDecide, reasonCode: item.reasonCode }]))),
|
|
1453
|
+
error: () => this.rights.set(null)
|
|
1454
|
+
});
|
|
1455
|
+
}
|
|
1104
1456
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentThreadViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentThreadViewComponent, isStandalone: true, selector: "nh-assistant-agent-thread-view", inputs: { agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: true, transformFunction: null }, subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openConversation: "openConversation" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-thread-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-thread-title\">\n @if (thread(); as current) {\n <nh-assistant-subject-link\n [subjectType]=\"current.subjectType\"\n [subjectId]=\"current.subjectId\"\n [label]=\"current.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate)\"\n [typeName]=\"current.subjectTypeName\"\n [link]=\"current.subjectLink\" />\n } @else {\n {{ 'nh-assistant.agent-runs.thread.title' | translate }}\n }\n </h3>\n <p class=\"muted\">\n {{ 'nh-assistant.agent-runs.role.' + role() | translate }}\n @if (thread()?.activeRun; as activeRun) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n }\n @if (thread()?.waitingInputs) {\n \u00B7 {{ 'nh-assistant.agent-runs.thread.waiting-inputs' | translate: { count: thread()!.waitingInputs } }}\n }\n </p>\n @if (thread()?.shadow) {\n <p class=\"muted\" data-shadow-thread>{{ 'nh-assistant.agent-runs.thread.shadow' | translate }}</p>\n }\n </div>\n <div class=\"toolbar\">\n @if (thread(); as current) {\n <button class=\"secondary\" type=\"button\" (click)=\"openConversation.emit(current.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n }\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (receipt(); as started) {\n <nh-assistant-run-receipt [receipt]=\"started\" />\n }\n\n @if (loading() && !lookup()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (lookup()?.canStart) {\n <form class=\"toolbar\" (submit)=\"$event.preventDefault(); start()\">\n <textarea\n class=\"reason\"\n rows=\"2\"\n maxlength=\"4000\"\n [value]=\"message()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n [placeholder]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n (input)=\"onMessage($event)\"></textarea>\n <button class=\"primary\" type=\"submit\" [disabled]=\"starting()\">\n <nh-assistant-icon name=\"send\" />{{ (starting() ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n </form>\n }\n\n @if (thread(); as current) {\n <div class=\"tabs\" role=\"tablist\">\n @for (item of tabs; track item) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"tab() === item\"\n (click)=\"tab.set(item)\">\n {{ 'nh-assistant.agent-runs.thread.tabs.' + item | translate }}\n </button>\n }\n </div>\n <div role=\"tabpanel\">\n @switch (tab()) {\n @case ('proposals') {\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-proposals' | translate }}</p>\n } @else {\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [canDecide]=\"role() === 'approver'\"\n (changed)=\"loadProposals()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline\n [conversationId]=\"current.conversationId\"\n [role]=\"role()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n @case ('consultations') {\n <nh-assistant-agent-consultations [conversationId]=\"current.conversationId\" />\n }\n @case ('memory') {\n <nh-assistant-agent-memory [conversationId]=\"current.conversationId\" />\n }\n @case ('artifacts') {\n <nh-assistant-agent-artifacts [conversationId]=\"current.conversationId\" />\n }\n }\n </div>\n } @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantRunTimelineComponent, selector: "nh-assistant-run-timeline", inputs: ["conversationId", "role"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantAgentMemoryComponent, selector: "nh-assistant-agent-memory", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantAgentArtifactsComponent, selector: "nh-assistant-agent-artifacts", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantAgentConsultationsComponent, selector: "nh-assistant-agent-consultations", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1457
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentThreadViewComponent, isStandalone: true, selector: "nh-assistant-agent-thread-view", inputs: { agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: true, transformFunction: null }, subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openConversation: "openConversation" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-thread-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-thread-title\">\n @if (thread(); as current) {\n <nh-assistant-subject-link\n [subjectType]=\"current.subjectType\"\n [subjectId]=\"current.subjectId\"\n [label]=\"current.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate)\"\n [typeName]=\"current.subjectTypeName\"\n [link]=\"current.subjectLink\" />\n } @else {\n {{ 'nh-assistant.agent-runs.thread.title' | translate }}\n }\n </h3>\n <p class=\"muted\">\n {{ 'nh-assistant.agent-runs.role.' + role() | translate }}\n @if (thread()?.activeRun; as activeRun) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n }\n @if (thread()?.waitingInputs) {\n \u00B7 {{ 'nh-assistant.agent-runs.thread.waiting-inputs' | translate: { count: thread()!.waitingInputs } }}\n }\n </p>\n @if (thread()?.shadow) {\n <p class=\"muted\" data-shadow-thread>{{ 'nh-assistant.agent-runs.thread.shadow' | translate }}</p>\n }\n </div>\n <div class=\"toolbar\">\n @if (thread(); as current) {\n <button class=\"secondary\" type=\"button\" (click)=\"openConversation.emit(current.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n }\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (receipt(); as started) {\n <nh-assistant-run-receipt [receipt]=\"started\" />\n }\n\n @if (loading() && !lookup()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (lookup()?.canStart) {\n <form class=\"toolbar\" (submit)=\"$event.preventDefault(); start()\">\n <textarea\n class=\"reason\"\n rows=\"2\"\n maxlength=\"4000\"\n [value]=\"message()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n [placeholder]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n (input)=\"onMessage($event)\"></textarea>\n <button class=\"primary\" type=\"submit\" [disabled]=\"starting()\">\n <nh-assistant-icon name=\"send\" />{{ (starting() ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n </form>\n }\n\n @if (thread(); as current) {\n <div class=\"tabs\" role=\"tablist\">\n @for (item of tabs; track item) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"tab() === item\"\n (click)=\"tab.set(item)\">\n {{ 'nh-assistant.agent-runs.thread.tabs.' + item | translate }}\n </button>\n }\n </div>\n <div role=\"tabpanel\">\n @switch (tab()) {\n @case ('proposals') {\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-proposals' | translate }}</p>\n } @else {\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [canDecide]=\"role() === 'approver'\"\n [decisionRights]=\"rights()\"\n (changed)=\"loadProposals()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline\n [conversationId]=\"current.conversationId\"\n [role]=\"role()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n @case ('consultations') {\n <nh-assistant-agent-consultations [conversationId]=\"current.conversationId\" />\n }\n @case ('memory') {\n <nh-assistant-agent-memory [conversationId]=\"current.conversationId\" />\n }\n @case ('artifacts') {\n <nh-assistant-agent-artifacts [conversationId]=\"current.conversationId\" />\n }\n }\n </div>\n } @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: _NhAssistantSubjectLinkComponent, selector: "nh-assistant-subject-link", inputs: ["subjectType", "subjectId", "label", "typeName", "link"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards", "groups", "groupByRun", "newIds"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantRunTimelineComponent, selector: "nh-assistant-run-timeline", inputs: ["conversationId", "role"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantAgentMemoryComponent, selector: "nh-assistant-agent-memory", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantAgentArtifactsComponent, selector: "nh-assistant-agent-artifacts", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantAgentConsultationsComponent, selector: "nh-assistant-agent-consultations", inputs: ["conversationId"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1106
1458
|
}
|
|
1107
1459
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentThreadViewComponent, decorators: [{
|
|
1108
1460
|
type: Component,
|
|
@@ -1117,7 +1469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1117
1469
|
NhAssistantAgentArtifactsComponent,
|
|
1118
1470
|
NhAssistantAgentConsultationsComponent,
|
|
1119
1471
|
NhAssistantRunReceiptComponent
|
|
1120
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-thread-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-thread-title\">\n @if (thread(); as current) {\n <nh-assistant-subject-link\n [subjectType]=\"current.subjectType\"\n [subjectId]=\"current.subjectId\"\n [label]=\"current.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate)\"\n [typeName]=\"current.subjectTypeName\"\n [link]=\"current.subjectLink\" />\n } @else {\n {{ 'nh-assistant.agent-runs.thread.title' | translate }}\n }\n </h3>\n <p class=\"muted\">\n {{ 'nh-assistant.agent-runs.role.' + role() | translate }}\n @if (thread()?.activeRun; as activeRun) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n }\n @if (thread()?.waitingInputs) {\n \u00B7 {{ 'nh-assistant.agent-runs.thread.waiting-inputs' | translate: { count: thread()!.waitingInputs } }}\n }\n </p>\n @if (thread()?.shadow) {\n <p class=\"muted\" data-shadow-thread>{{ 'nh-assistant.agent-runs.thread.shadow' | translate }}</p>\n }\n </div>\n <div class=\"toolbar\">\n @if (thread(); as current) {\n <button class=\"secondary\" type=\"button\" (click)=\"openConversation.emit(current.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n }\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (receipt(); as started) {\n <nh-assistant-run-receipt [receipt]=\"started\" />\n }\n\n @if (loading() && !lookup()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (lookup()?.canStart) {\n <form class=\"toolbar\" (submit)=\"$event.preventDefault(); start()\">\n <textarea\n class=\"reason\"\n rows=\"2\"\n maxlength=\"4000\"\n [value]=\"message()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n [placeholder]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n (input)=\"onMessage($event)\"></textarea>\n <button class=\"primary\" type=\"submit\" [disabled]=\"starting()\">\n <nh-assistant-icon name=\"send\" />{{ (starting() ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n </form>\n }\n\n @if (thread(); as current) {\n <div class=\"tabs\" role=\"tablist\">\n @for (item of tabs; track item) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"tab() === item\"\n (click)=\"tab.set(item)\">\n {{ 'nh-assistant.agent-runs.thread.tabs.' + item | translate }}\n </button>\n }\n </div>\n <div role=\"tabpanel\">\n @switch (tab()) {\n @case ('proposals') {\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-proposals' | translate }}</p>\n } @else {\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [canDecide]=\"role() === 'approver'\"\n (changed)=\"loadProposals()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline\n [conversationId]=\"current.conversationId\"\n [role]=\"role()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n @case ('consultations') {\n <nh-assistant-agent-consultations [conversationId]=\"current.conversationId\" />\n }\n @case ('memory') {\n <nh-assistant-agent-memory [conversationId]=\"current.conversationId\" />\n }\n @case ('artifacts') {\n <nh-assistant-agent-artifacts [conversationId]=\"current.conversationId\" />\n }\n }\n </div>\n } @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
1472
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" aria-labelledby=\"nh-assistant-agent-thread-title\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 id=\"nh-assistant-agent-thread-title\">\n @if (thread(); as current) {\n <nh-assistant-subject-link\n [subjectType]=\"current.subjectType\"\n [subjectId]=\"current.subjectId\"\n [label]=\"current.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate)\"\n [typeName]=\"current.subjectTypeName\"\n [link]=\"current.subjectLink\" />\n } @else {\n {{ 'nh-assistant.agent-runs.thread.title' | translate }}\n }\n </h3>\n <p class=\"muted\">\n {{ 'nh-assistant.agent-runs.role.' + role() | translate }}\n @if (thread()?.activeRun; as activeRun) {\n \u00B7 {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n }\n @if (thread()?.waitingInputs) {\n \u00B7 {{ 'nh-assistant.agent-runs.thread.waiting-inputs' | translate: { count: thread()!.waitingInputs } }}\n }\n </p>\n @if (thread()?.shadow) {\n <p class=\"muted\" data-shadow-thread>{{ 'nh-assistant.agent-runs.thread.shadow' | translate }}</p>\n }\n </div>\n <div class=\"toolbar\">\n @if (thread(); as current) {\n <button class=\"secondary\" type=\"button\" (click)=\"openConversation.emit(current.conversationId)\">\n <nh-assistant-icon name=\"link\" />{{ 'nh-assistant.agent-runs.thread.open-conversation' | translate }}\n </button>\n }\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (receipt(); as started) {\n <nh-assistant-run-receipt [receipt]=\"started\" />\n }\n\n @if (loading() && !lookup()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (lookup()?.canStart) {\n <form class=\"toolbar\" (submit)=\"$event.preventDefault(); start()\">\n <textarea\n class=\"reason\"\n rows=\"2\"\n maxlength=\"4000\"\n [value]=\"message()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n [placeholder]=\"'nh-assistant.agent-runs.thread.start-message' | translate\"\n (input)=\"onMessage($event)\"></textarea>\n <button class=\"primary\" type=\"submit\" [disabled]=\"starting()\">\n <nh-assistant-icon name=\"send\" />{{ (starting() ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n </form>\n }\n\n @if (thread(); as current) {\n <div class=\"tabs\" role=\"tablist\">\n @for (item of tabs; track item) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"tab() === item\"\n (click)=\"tab.set(item)\">\n {{ 'nh-assistant.agent-runs.thread.tabs.' + item | translate }}\n </button>\n }\n </div>\n <div role=\"tabpanel\">\n @switch (tab()) {\n @case ('proposals') {\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-proposals' | translate }}</p>\n } @else {\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [canDecide]=\"role() === 'approver'\"\n [decisionRights]=\"rights()\"\n (changed)=\"loadProposals()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline\n [conversationId]=\"current.conversationId\"\n [role]=\"role()\"\n (changed)=\"load()\"\n (openConversation)=\"openConversation.emit($event)\" />\n }\n @case ('consultations') {\n <nh-assistant-agent-consultations [conversationId]=\"current.conversationId\" />\n }\n @case ('memory') {\n <nh-assistant-agent-memory [conversationId]=\"current.conversationId\" />\n }\n @case ('artifacts') {\n <nh-assistant-agent-artifacts [conversationId]=\"current.conversationId\" />\n }\n }\n </div>\n } @else {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
1121
1473
|
}], ctorParameters: () => [], propDecorators: { proposalList: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhAssistantAgentProposalsComponent), { isSignal: true }] }], agentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentId", required: true }] }], subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: true }] }], subjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectId", required: true }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
1122
1474
|
|
|
1123
1475
|
let nextSuggestionsId = 0;
|
|
@@ -1315,7 +1667,7 @@ class NhAssistantSubjectSuggestionsComponent {
|
|
|
1315
1667
|
});
|
|
1316
1668
|
}
|
|
1317
1669
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantSubjectSuggestionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1318
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantSubjectSuggestionsComponent, isStandalone: true, selector: "nh-assistant-subject-suggestions", inputs: { subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null }, agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { conversationOpened: "conversationOpened", runConversationOpened: "runConversationOpened" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"headingId\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"headingId\">{{ 'nh-assistant.agent-runs.subject.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.subject.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (started(); as start) {\n <nh-assistant-run-receipt [receipt]=\"start.receipt\" />\n }\n\n @if (loading() && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (unavailable()) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.unavailable' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (agents().length > 0) {\n <ul class=\"subject-agents\" [attr.aria-label]=\"'nh-assistant.agent-runs.subject.agents' | translate\">\n @for (agent of agents(); track agent.agentId) {\n @let name = agentNameKeys(agent) | nhAssistantTranslate: (agent.displayNameKey ?? agent.agentId);\n <li class=\"subject-agent\">\n <div class=\"subject-agent-text\">\n <strong>{{ name }}</strong>\n <span class=\"muted\">\n @if (agent.thread?.activeRun; as activeRun) {\n {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n } @else if (!agent.thread) {\n {{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}\n } @else {\n {{ 'nh-assistant.agent-runs.subject.idle' | translate }}\n }\n </span>\n </div>\n <div class=\"card-actions\">\n @if (canOpen(agent)) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"opening() !== null || !assistantEnabled()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.open-conversation-label' | translate: { agent: name }\"\n [attr.title]=\"assistantEnabled() ? null : ('nh-assistant.agent-runs.subject.assistant-unavailable' | translate)\"\n (click)=\"open(agent)\">\n <nh-assistant-icon name=\"assistant\" />{{ (opening() === agent.agentId ? 'nh-assistant.agent-runs.subject.opening' : 'nh-assistant.agent-runs.thread.open-conversation') | translate }}\n </button>\n }\n @if (agent.canStart) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"starting() !== null\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.start-label' | translate: { agent: name }\"\n (click)=\"start(agent)\">\n <nh-assistant-icon name=\"send\" />{{ (starting() === agent.agentId ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [decisionRights]=\"decisionRights()\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openRunConversation($event)\" />\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.empty' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1670
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantSubjectSuggestionsComponent, isStandalone: true, selector: "nh-assistant-subject-suggestions", inputs: { subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null }, agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { conversationOpened: "conversationOpened", runConversationOpened: "runConversationOpened" }, viewQueries: [{ propertyName: "proposalList", first: true, predicate: NhAssistantAgentProposalsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"headingId\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"headingId\">{{ 'nh-assistant.agent-runs.subject.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.subject.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (started(); as start) {\n <nh-assistant-run-receipt [receipt]=\"start.receipt\" />\n }\n\n @if (loading() && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (unavailable()) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.unavailable' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (agents().length > 0) {\n <ul class=\"subject-agents\" [attr.aria-label]=\"'nh-assistant.agent-runs.subject.agents' | translate\">\n @for (agent of agents(); track agent.agentId) {\n @let name = agentNameKeys(agent) | nhAssistantTranslate: (agent.displayNameKey ?? agent.agentId);\n <li class=\"subject-agent\">\n <div class=\"subject-agent-text\">\n <strong>{{ name }}</strong>\n <span class=\"muted\">\n @if (agent.thread?.activeRun; as activeRun) {\n {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n } @else if (!agent.thread) {\n {{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}\n } @else {\n {{ 'nh-assistant.agent-runs.subject.idle' | translate }}\n }\n </span>\n </div>\n <div class=\"card-actions\">\n @if (canOpen(agent)) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"opening() !== null || !assistantEnabled()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.open-conversation-label' | translate: { agent: name }\"\n [attr.title]=\"assistantEnabled() ? null : ('nh-assistant.agent-runs.subject.assistant-unavailable' | translate)\"\n (click)=\"open(agent)\">\n <nh-assistant-icon name=\"assistant\" />{{ (opening() === agent.agentId ? 'nh-assistant.agent-runs.subject.opening' : 'nh-assistant.agent-runs.thread.open-conversation') | translate }}\n </button>\n }\n @if (agent.canStart) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"starting() !== null\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.start-label' | translate: { agent: name }\"\n (click)=\"start(agent)\">\n <nh-assistant-icon name=\"send\" />{{ (starting() === agent.agentId ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [decisionRights]=\"decisionRights()\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openRunConversation($event)\" />\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.empty' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantAgentProposalsComponent, selector: "nh-assistant-agent-proposals", inputs: ["proposals", "canDecide", "decisionRights", "selectable", "holdClosedCards", "groups", "groupByRun", "newIds"], outputs: ["changed", "openConversation"] }, { kind: "component", type: NhAssistantRunReceiptComponent, selector: "nh-assistant-run-receipt", inputs: ["receipt", "focusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1319
1671
|
}
|
|
1320
1672
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantSubjectSuggestionsComponent, decorators: [{
|
|
1321
1673
|
type: Component,
|
|
@@ -1325,7 +1677,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1325
1677
|
_NhAssistantIconComponent,
|
|
1326
1678
|
NhAssistantAgentProposalsComponent,
|
|
1327
1679
|
NhAssistantRunReceiptComponent
|
|
1328
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"headingId\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"headingId\">{{ 'nh-assistant.agent-runs.subject.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.subject.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (started(); as start) {\n <nh-assistant-run-receipt [receipt]=\"start.receipt\" />\n }\n\n @if (loading() && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (unavailable()) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.unavailable' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (agents().length > 0) {\n <ul class=\"subject-agents\" [attr.aria-label]=\"'nh-assistant.agent-runs.subject.agents' | translate\">\n @for (agent of agents(); track agent.agentId) {\n @let name = agentNameKeys(agent) | nhAssistantTranslate: (agent.displayNameKey ?? agent.agentId);\n <li class=\"subject-agent\">\n <div class=\"subject-agent-text\">\n <strong>{{ name }}</strong>\n <span class=\"muted\">\n @if (agent.thread?.activeRun; as activeRun) {\n {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n } @else if (!agent.thread) {\n {{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}\n } @else {\n {{ 'nh-assistant.agent-runs.subject.idle' | translate }}\n }\n </span>\n </div>\n <div class=\"card-actions\">\n @if (canOpen(agent)) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"opening() !== null || !assistantEnabled()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.open-conversation-label' | translate: { agent: name }\"\n [attr.title]=\"assistantEnabled() ? null : ('nh-assistant.agent-runs.subject.assistant-unavailable' | translate)\"\n (click)=\"open(agent)\">\n <nh-assistant-icon name=\"assistant\" />{{ (opening() === agent.agentId ? 'nh-assistant.agent-runs.subject.opening' : 'nh-assistant.agent-runs.thread.open-conversation') | translate }}\n </button>\n }\n @if (agent.canStart) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"starting() !== null\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.start-label' | translate: { agent: name }\"\n (click)=\"start(agent)\">\n <nh-assistant-icon name=\"send\" />{{ (starting() === agent.agentId ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [decisionRights]=\"decisionRights()\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openRunConversation($event)\" />\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.empty' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
1680
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"headingId\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"headingId\">{{ 'nh-assistant.agent-runs.subject.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.subject.description' | translate }}</p>\n </div>\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </header>\n\n @if (error(); as failure) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ errorKeys() | nhAssistantTranslate: failure.code }}</p>\n }\n @if (started(); as start) {\n <nh-assistant-run-receipt [receipt]=\"start.receipt\" />\n }\n\n @if (loading() && !loaded()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.loading' | translate }}</p>\n } @else if (unavailable()) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.unavailable' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n @if (agents().length > 0) {\n <ul class=\"subject-agents\" [attr.aria-label]=\"'nh-assistant.agent-runs.subject.agents' | translate\">\n @for (agent of agents(); track agent.agentId) {\n @let name = agentNameKeys(agent) | nhAssistantTranslate: (agent.displayNameKey ?? agent.agentId);\n <li class=\"subject-agent\">\n <div class=\"subject-agent-text\">\n <strong>{{ name }}</strong>\n <span class=\"muted\">\n @if (agent.thread?.activeRun; as activeRun) {\n {{ 'nh-assistant.agent-runs.run.status.' + activeRun.status | translate }}\n } @else if (!agent.thread) {\n {{ 'nh-assistant.agent-runs.thread.no-thread' | translate }}\n } @else {\n {{ 'nh-assistant.agent-runs.subject.idle' | translate }}\n }\n </span>\n </div>\n <div class=\"card-actions\">\n @if (canOpen(agent)) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"opening() !== null || !assistantEnabled()\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.open-conversation-label' | translate: { agent: name }\"\n [attr.title]=\"assistantEnabled() ? null : ('nh-assistant.agent-runs.subject.assistant-unavailable' | translate)\"\n (click)=\"open(agent)\">\n <nh-assistant-icon name=\"assistant\" />{{ (opening() === agent.agentId ? 'nh-assistant.agent-runs.subject.opening' : 'nh-assistant.agent-runs.thread.open-conversation') | translate }}\n </button>\n }\n @if (agent.canStart) {\n <button\n class=\"secondary\"\n type=\"button\"\n [disabled]=\"starting() !== null\"\n [attr.aria-label]=\"'nh-assistant.agent-runs.subject.start-label' | translate: { agent: name }\"\n (click)=\"start(agent)\">\n <nh-assistant-icon name=\"send\" />{{ (starting() === agent.agentId ? 'nh-assistant.agent-runs.thread.starting' : 'nh-assistant.agent-runs.thread.start') | translate }}\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Stays rendered when the list empties, so the optional feedback after a rejection remains. -->\n <nh-assistant-agent-proposals\n [proposals]=\"proposals()\"\n [decisionRights]=\"decisionRights()\"\n [holdClosedCards]=\"true\"\n (changed)=\"load()\"\n (openConversation)=\"openRunConversation($event)\" />\n @if (proposals().length === 0) {\n <p class=\"state\">{{ 'nh-assistant.agent-runs.subject.empty' | translate }}</p>\n }\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
1329
1681
|
}], ctorParameters: () => [], propDecorators: { proposalList: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhAssistantAgentProposalsComponent), { isSignal: true }] }], subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: true }] }], subjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectId", required: true }] }], agentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentId", required: false }] }], conversationOpened: [{ type: i0.Output, args: ["conversationOpened"] }], runConversationOpened: [{ type: i0.Output, args: ["runConversationOpened"] }] } });
|
|
1330
1682
|
|
|
1331
1683
|
/** Lookups that cannot succeed by asking again: the person changes the id instead. */
|
|
@@ -1814,7 +2166,7 @@ class NhAssistantObjectAgentsComponent {
|
|
|
1814
2166
|
});
|
|
1815
2167
|
}
|
|
1816
2168
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantObjectAgentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1817
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantObjectAgentsComponent, isStandalone: true, selector: "nh-assistant-object-agents", inputs: { subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ 'nh-assistant.agent-runs.object-agents.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.description' | translate }}</p>\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !listing()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.object-agents.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\" data-object-agents-error>\n @if (loadError(); as failure) {\n <p>{{ loadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n } @else {\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n }\n @if (loadRetryable()) {\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n }\n </div>\n } @else if (agents().length === 0) {\n <p class=\"state\" data-object-agents-empty>{{ 'nh-assistant.agent-runs.object-agents.empty' | translate }}</p>\n } @else {\n <ul class=\"cards\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card\" [attr.data-object-agent]=\"agent.agentId\">\n <div class=\"card-header\">\n <strong>{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n\n <!-- The latest run: its status and time, and the beginning of its result as plain text. -->\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.object-agents.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n @if (run.shadow) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.object-agents.shadow' | translate }}</span>\n }\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <p class=\"summary result\" data-latest-result>\n <span class=\"visually-hidden\">{{ 'nh-assistant.agent-runs.object-agents.result-label' | translate }}: </span>{{ result }}@if (run.resultTruncated) {\u2026}\n </p>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.object-agents.never' | translate }}</p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-object-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.object-agents.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-result\n [attr.aria-expanded]=\"resultShown() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-result'\"\n (click)=\"toggleResult(agent)\">\n <nh-assistant-icon name=\"page\" />{{ (resultShown() === agent.agentId ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.conversationId) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-work\n [attr.aria-expanded]=\"expanded() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-work'\"\n (click)=\"toggleWork(agent)\">\n <nh-assistant-icon name=\"list\" />{{ (expanded() === agent.agentId ? 'nh-assistant.agent-runs.object-agents.hide-work' : 'nh-assistant.agent-runs.object-agents.show-work') | translate }}\n </button>\n }\n </div>\n\n @if (resultShown() === agent.agentId && agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-result'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n\n @if (expanded() === agent.agentId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-work'\">\n <nh-assistant-agent-thread-view\n [agentId]=\"agent.agentId\"\n [subjectType]=\"subjectType()\"\n [subjectId]=\"subjectId()\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunNowDialogComponent, selector: "nh-assistant-run-now-dialog", inputs: ["agent", "subjectTypes", "divisions", "subject"], outputs: ["started", "openConversation", "closed"] }, { kind: "component", type: NhAssistantAgentThreadViewComponent, selector: "nh-assistant-agent-thread-view", inputs: ["agentId", "subjectType", "subjectId"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2169
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantObjectAgentsComponent, isStandalone: true, selector: "nh-assistant-object-agents", inputs: { subjectType: { classPropertyName: "subjectType", publicName: "subjectType", isSignal: true, isRequired: true, transformFunction: null }, subjectId: { classPropertyName: "subjectId", publicName: "subjectId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ 'nh-assistant.agent-runs.object-agents.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.description' | translate }}</p>\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !listing()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.object-agents.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\" data-object-agents-error>\n @if (loadError(); as failure) {\n <p>{{ loadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n } @else {\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n }\n @if (loadRetryable()) {\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n }\n </div>\n } @else if (agents().length === 0) {\n <p class=\"state\" data-object-agents-empty>{{ 'nh-assistant.agent-runs.object-agents.empty' | translate }}</p>\n } @else {\n <ul class=\"cards\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card\" [attr.data-object-agent]=\"agent.agentId\">\n <div class=\"card-header\">\n <strong>{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n\n <!-- The latest run: its status and time, and the beginning of its result as plain text. -->\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.object-agents.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n @if (run.shadow) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.object-agents.shadow' | translate }}</span>\n }\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <p class=\"summary result\" data-latest-result>\n <span class=\"visually-hidden\">{{ 'nh-assistant.agent-runs.object-agents.result-label' | translate }}: </span>{{ result }}@if (run.resultTruncated) {\u2026}\n </p>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.object-agents.never' | translate }}</p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-object-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.object-agents.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-result\n [attr.aria-expanded]=\"resultShown() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-result'\"\n (click)=\"toggleResult(agent)\">\n <nh-assistant-icon name=\"page\" />{{ (resultShown() === agent.agentId ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.conversationId) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-work\n [attr.aria-expanded]=\"expanded() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-work'\"\n (click)=\"toggleWork(agent)\">\n <nh-assistant-icon name=\"list\" />{{ (expanded() === agent.agentId ? 'nh-assistant.agent-runs.object-agents.hide-work' : 'nh-assistant.agent-runs.object-agents.show-work') | translate }}\n </button>\n }\n </div>\n\n @if (resultShown() === agent.agentId && agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-result'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n\n @if (expanded() === agent.agentId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-work'\">\n <nh-assistant-agent-thread-view\n [agentId]=\"agent.agentId\"\n [subjectType]=\"subjectType()\"\n [subjectId]=\"subjectId()\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunNowDialogComponent, selector: "nh-assistant-run-now-dialog", inputs: ["agent", "subjectTypes", "divisions", "subject"], outputs: ["started", "openConversation", "closed"] }, { kind: "component", type: NhAssistantAgentThreadViewComponent, selector: "nh-assistant-agent-thread-view", inputs: ["agentId", "subjectType", "subjectId"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1818
2170
|
}
|
|
1819
2171
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantObjectAgentsComponent, decorators: [{
|
|
1820
2172
|
type: Component,
|
|
@@ -1826,7 +2178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1826
2178
|
NhAssistantRunNowDialogComponent,
|
|
1827
2179
|
NhAssistantAgentThreadViewComponent,
|
|
1828
2180
|
NhAssistantRunResultComponent
|
|
1829
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ 'nh-assistant.agent-runs.object-agents.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.description' | translate }}</p>\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !listing()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.object-agents.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\" data-object-agents-error>\n @if (loadError(); as failure) {\n <p>{{ loadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n } @else {\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n }\n @if (loadRetryable()) {\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n }\n </div>\n } @else if (agents().length === 0) {\n <p class=\"state\" data-object-agents-empty>{{ 'nh-assistant.agent-runs.object-agents.empty' | translate }}</p>\n } @else {\n <ul class=\"cards\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card\" [attr.data-object-agent]=\"agent.agentId\">\n <div class=\"card-header\">\n <strong>{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n\n <!-- The latest run: its status and time, and the beginning of its result as plain text. -->\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.object-agents.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n @if (run.shadow) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.object-agents.shadow' | translate }}</span>\n }\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <p class=\"summary result\" data-latest-result>\n <span class=\"visually-hidden\">{{ 'nh-assistant.agent-runs.object-agents.result-label' | translate }}: </span>{{ result }}@if (run.resultTruncated) {\u2026}\n </p>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.object-agents.never' | translate }}</p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-object-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.object-agents.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-result\n [attr.aria-expanded]=\"resultShown() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-result'\"\n (click)=\"toggleResult(agent)\">\n <nh-assistant-icon name=\"page\" />{{ (resultShown() === agent.agentId ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.conversationId) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-work\n [attr.aria-expanded]=\"expanded() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-work'\"\n (click)=\"toggleWork(agent)\">\n <nh-assistant-icon name=\"list\" />{{ (expanded() === agent.agentId ? 'nh-assistant.agent-runs.object-agents.hide-work' : 'nh-assistant.agent-runs.object-agents.show-work') | translate }}\n </button>\n }\n </div>\n\n @if (resultShown() === agent.agentId && agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-result'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n\n @if (expanded() === agent.agentId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-work'\">\n <nh-assistant-agent-thread-view\n [agentId]=\"agent.agentId\"\n [subjectType]=\"subjectType()\"\n [subjectId]=\"subjectId()\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
2181
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\">\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ 'nh-assistant.agent-runs.object-agents.title' | translate }}</h3>\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.description' | translate }}</p>\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !listing()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.object-agents.loading' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\" data-object-agents-error>\n @if (loadError(); as failure) {\n <p>{{ loadErrorKeys() | nhAssistantTranslate: failure.code }}</p>\n } @else {\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n }\n @if (loadRetryable()) {\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n }\n </div>\n } @else if (agents().length === 0) {\n <p class=\"state\" data-object-agents-empty>{{ 'nh-assistant.agent-runs.object-agents.empty' | translate }}</p>\n } @else {\n <ul class=\"cards\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card\" [attr.data-object-agent]=\"agent.agentId\">\n <div class=\"card-header\">\n <strong>{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n\n <!-- The latest run: its status and time, and the beginning of its result as plain text. -->\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.object-agents.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n @if (run.shadow) {\n <span class=\"badge warning\">{{ 'nh-assistant.agent-runs.object-agents.shadow' | translate }}</span>\n }\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <p class=\"summary result\" data-latest-result>\n <span class=\"visually-hidden\">{{ 'nh-assistant.agent-runs.object-agents.result-label' | translate }}: </span>{{ result }}@if (run.resultTruncated) {\u2026}\n </p>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.object-agents.never' | translate }}</p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-object-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.object-agents.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-result\n [attr.aria-expanded]=\"resultShown() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-result'\"\n (click)=\"toggleResult(agent)\">\n <nh-assistant-icon name=\"page\" />{{ (resultShown() === agent.agentId ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.conversationId) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-toggle-work\n [attr.aria-expanded]=\"expanded() === agent.agentId\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-work'\"\n (click)=\"toggleWork(agent)\">\n <nh-assistant-icon name=\"list\" />{{ (expanded() === agent.agentId ? 'nh-assistant.agent-runs.object-agents.hide-work' : 'nh-assistant.agent-runs.object-agents.show-work') | translate }}\n </button>\n }\n </div>\n\n @if (resultShown() === agent.agentId && agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-result'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n\n @if (expanded() === agent.agentId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-work'\">\n <nh-assistant-agent-thread-view\n [agentId]=\"agent.agentId\"\n [subjectType]=\"subjectType()\"\n [subjectId]=\"subjectId()\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
1830
2182
|
}], ctorParameters: () => [], propDecorators: { subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: true }] }], subjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectId", required: true }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
1831
2183
|
|
|
1832
2184
|
/** How many runs the history of a board tile reads at a time. */
|
|
@@ -1962,7 +2314,7 @@ class NhAssistantBoardHistoryComponent {
|
|
|
1962
2314
|
}
|
|
1963
2315
|
}
|
|
1964
2316
|
</section>
|
|
1965
|
-
`, isInline: true, styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2317
|
+
`, isInline: true, styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1966
2318
|
}
|
|
1967
2319
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantBoardHistoryComponent, decorators: [{
|
|
1968
2320
|
type: Component,
|
|
@@ -2020,7 +2372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
2020
2372
|
}
|
|
2021
2373
|
}
|
|
2022
2374
|
</section>
|
|
2023
|
-
`, styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
2375
|
+
`, styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
2024
2376
|
}], ctorParameters: () => [], propDecorators: { agentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentId", required: true }] }], subjectType: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectType", required: true }] }], subjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "subjectId", required: true }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
2025
2377
|
|
|
2026
2378
|
let nextId = 0;
|
|
@@ -2224,7 +2576,7 @@ class NhAssistantAgentBoardComponent {
|
|
|
2224
2576
|
this.visitSubscription = this.api.visitBoard(group, divisionId).subscribe({ error: () => undefined });
|
|
2225
2577
|
}
|
|
2226
2578
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2227
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentBoardComponent, isStandalone: true, selector: "nh-assistant-agent-board", inputs: { group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, divisionId: { classPropertyName: "divisionId", publicName: "divisionId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\" data-agent-board>\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ board()?.name ?? ('nh-assistant.agent-runs.board.title' | translate) }}</h3>\n @if (board(); as shown) {\n @if (shown.description; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n @if (shown.lastVisitedAt; as visitedAt) {\n <p class=\"muted\" data-board-last-visit>{{ 'nh-assistant.agent-runs.board.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else {\n <p class=\"muted\" data-board-first-visit>{{ 'nh-assistant.agent-runs.board.first-visit' | translate }}</p>\n }\n }\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !board()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.board.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-board-not-found>{{ 'nh-assistant.agent-runs.board.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <ul class=\"cards board-tiles\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card board-tile\" [class.new]=\"agent.isNew\" [attr.data-board-agent]=\"agent.agentId\" [attr.aria-labelledby]=\"id + '-' + agent.agentId + '-name'\">\n <div class=\"card-header\">\n <strong [id]=\"id + '-' + agent.agentId + '-name'\">{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n @if (agent.isNew) {\n <span class=\"badge new\" data-board-new [attr.title]=\"'nh-assistant.agent-runs.board.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.board.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.board.new-label' | translate }}</span>\n </span>\n }\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n <p class=\"muted\" data-works-on>{{ worksOnOf(agent) }}</p>\n\n @if (agent.subjectType) {\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.board.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <!-- Model output: rendered only through the assistant's safe Markdown rendering. -->\n <div class=\"markdown board-preview\" data-latest-result [innerHTML]=\"previewOf(result, run.resultTruncated) | nhAssistantMarkdown\"></div>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.board.never' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-board-no-application>\n {{ (agent.worksOn.perDivision ? 'nh-assistant.agent-runs.board.per-division' : 'nh-assistant.agent-runs.board.objects-only') | translate }}\n </p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-board-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.board.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-result\n [attr.aria-expanded]=\"panelOf(agent) === 'result'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'result')\">\n <nh-assistant-icon name=\"page\" />{{ (panelOf(agent) === 'result' ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.openProposals > 0) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-proposals\n [attr.aria-expanded]=\"panelOf(agent) === 'proposals'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'proposals')\">\n <nh-assistant-icon name=\"check\" />{{ (panelOf(agent) === 'proposals' ? 'nh-assistant.agent-runs.board.hide-proposals' : 'nh-assistant.agent-runs.board.show-proposals') | translate }}\n </button>\n }\n @if (agent.subjectType) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-history\n [attr.aria-expanded]=\"panelOf(agent) === 'history'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'history')\">\n <nh-assistant-icon name=\"list\" />{{ (panelOf(agent) === 'history' ? 'nh-assistant.agent-runs.board.hide-history' : 'nh-assistant.agent-runs.board.show-history') | translate }}\n </button>\n }\n </div>\n\n @switch (panelOf(agent)) {\n @case ('result') {\n @if (agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n @case ('proposals') {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-agent-inbox [agentId]=\"agent.agentId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n @case ('history') {\n @if (agent.subjectType && agent.subjectId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-board-history\n [agentId]=\"agent.agentId\"\n [subjectType]=\"agent.subjectType\"\n [subjectId]=\"agent.subjectId\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunNowDialogComponent, selector: "nh-assistant-run-now-dialog", inputs: ["agent", "subjectTypes", "divisions", "subject"], outputs: ["started", "openConversation", "closed"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantAgentInboxComponent, selector: "nh-assistant-agent-inbox", inputs: ["agentId", "subjectType", "itemsPerPage"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantBoardHistoryComponent, selector: "nh-assistant-board-history", inputs: ["agentId", "subjectType", "subjectId"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }, { kind: "pipe", type: _NhAssistantMarkdownPipe, name: "nhAssistantMarkdown" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2579
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: NhAssistantAgentBoardComponent, isStandalone: true, selector: "nh-assistant-agent-board", inputs: { group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, divisionId: { classPropertyName: "divisionId", publicName: "divisionId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConversation: "openConversation" }, ngImport: i0, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\" data-agent-board>\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ board()?.name ?? ('nh-assistant.agent-runs.board.title' | translate) }}</h3>\n @if (board(); as shown) {\n @if (shown.description; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n @if (shown.lastVisitedAt; as visitedAt) {\n <p class=\"muted\" data-board-last-visit>{{ 'nh-assistant.agent-runs.board.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else {\n <p class=\"muted\" data-board-first-visit>{{ 'nh-assistant.agent-runs.board.first-visit' | translate }}</p>\n }\n }\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !board()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.board.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-board-not-found>{{ 'nh-assistant.agent-runs.board.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <ul class=\"cards board-tiles\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card board-tile\" [class.new]=\"agent.isNew\" [attr.data-board-agent]=\"agent.agentId\" [attr.aria-labelledby]=\"id + '-' + agent.agentId + '-name'\">\n <div class=\"card-header\">\n <strong [id]=\"id + '-' + agent.agentId + '-name'\">{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n @if (agent.isNew) {\n <span class=\"badge new\" data-board-new [attr.title]=\"'nh-assistant.agent-runs.board.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.board.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.board.new-label' | translate }}</span>\n </span>\n }\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n <p class=\"muted\" data-works-on>{{ worksOnOf(agent) }}</p>\n\n @if (agent.subjectType) {\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.board.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <!-- Model output: rendered only through the assistant's safe Markdown rendering. -->\n <div class=\"markdown board-preview\" data-latest-result [innerHTML]=\"previewOf(result, run.resultTruncated) | nhAssistantMarkdown\"></div>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.board.never' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-board-no-application>\n {{ (agent.worksOn.perDivision ? 'nh-assistant.agent-runs.board.per-division' : 'nh-assistant.agent-runs.board.objects-only') | translate }}\n </p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-board-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.board.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-result\n [attr.aria-expanded]=\"panelOf(agent) === 'result'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'result')\">\n <nh-assistant-icon name=\"page\" />{{ (panelOf(agent) === 'result' ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.openProposals > 0) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-proposals\n [attr.aria-expanded]=\"panelOf(agent) === 'proposals'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'proposals')\">\n <nh-assistant-icon name=\"check\" />{{ (panelOf(agent) === 'proposals' ? 'nh-assistant.agent-runs.board.hide-proposals' : 'nh-assistant.agent-runs.board.show-proposals') | translate }}\n </button>\n }\n @if (agent.subjectType) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-history\n [attr.aria-expanded]=\"panelOf(agent) === 'history'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'history')\">\n <nh-assistant-icon name=\"list\" />{{ (panelOf(agent) === 'history' ? 'nh-assistant.agent-runs.board.hide-history' : 'nh-assistant.agent-runs.board.show-history') | translate }}\n </button>\n }\n </div>\n\n @switch (panelOf(agent)) {\n @case ('result') {\n @if (agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n @case ('proposals') {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <!-- One agent's proposals are no visit of the whole inbox; the tile already marks what is new.\n The board of a division shows that division's proposals only. -->\n <nh-assistant-agent-inbox\n [agentId]=\"agent.agentId\"\n [divisionId]=\"divisionId()\"\n [markNew]=\"false\"\n [recordVisit]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n @case ('history') {\n @if (agent.subjectType && agent.subjectId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-board-history\n [agentId]=\"agent.agentId\"\n [subjectType]=\"agent.subjectType\"\n [subjectId]=\"agent.subjectId\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "component", type: NhAssistantRunNowDialogComponent, selector: "nh-assistant-run-now-dialog", inputs: ["agent", "subjectTypes", "divisions", "subject"], outputs: ["started", "openConversation", "closed"] }, { kind: "component", type: NhAssistantRunResultComponent, selector: "nh-assistant-run-result", inputs: ["runId", "conversationLink"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantAgentInboxComponent, selector: "nh-assistant-agent-inbox", inputs: ["agentId", "subjectType", "divisionId", "runId", "grouped", "groupByRun", "markNew", "recordVisit", "itemsPerPage"], outputs: ["openConversation"] }, { kind: "component", type: NhAssistantBoardHistoryComponent, selector: "nh-assistant-board-history", inputs: ["agentId", "subjectType", "subjectId"], outputs: ["openConversation"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }, { kind: "pipe", type: _NhAssistantMarkdownPipe, name: "nhAssistantMarkdown" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2228
2580
|
}
|
|
2229
2581
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentBoardComponent, decorators: [{
|
|
2230
2582
|
type: Component,
|
|
@@ -2238,7 +2590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
2238
2590
|
NhAssistantRunResultComponent,
|
|
2239
2591
|
NhAssistantAgentInboxComponent,
|
|
2240
2592
|
NhAssistantBoardHistoryComponent
|
|
2241
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\" data-agent-board>\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ board()?.name ?? ('nh-assistant.agent-runs.board.title' | translate) }}</h3>\n @if (board(); as shown) {\n @if (shown.description; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n @if (shown.lastVisitedAt; as visitedAt) {\n <p class=\"muted\" data-board-last-visit>{{ 'nh-assistant.agent-runs.board.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else {\n <p class=\"muted\" data-board-first-visit>{{ 'nh-assistant.agent-runs.board.first-visit' | translate }}</p>\n }\n }\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !board()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.board.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-board-not-found>{{ 'nh-assistant.agent-runs.board.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <ul class=\"cards board-tiles\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card board-tile\" [class.new]=\"agent.isNew\" [attr.data-board-agent]=\"agent.agentId\" [attr.aria-labelledby]=\"id + '-' + agent.agentId + '-name'\">\n <div class=\"card-header\">\n <strong [id]=\"id + '-' + agent.agentId + '-name'\">{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n @if (agent.isNew) {\n <span class=\"badge new\" data-board-new [attr.title]=\"'nh-assistant.agent-runs.board.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.board.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.board.new-label' | translate }}</span>\n </span>\n }\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n <p class=\"muted\" data-works-on>{{ worksOnOf(agent) }}</p>\n\n @if (agent.subjectType) {\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.board.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <!-- Model output: rendered only through the assistant's safe Markdown rendering. -->\n <div class=\"markdown board-preview\" data-latest-result [innerHTML]=\"previewOf(result, run.resultTruncated) | nhAssistantMarkdown\"></div>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.board.never' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-board-no-application>\n {{ (agent.worksOn.perDivision ? 'nh-assistant.agent-runs.board.per-division' : 'nh-assistant.agent-runs.board.objects-only') | translate }}\n </p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-board-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.board.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-result\n [attr.aria-expanded]=\"panelOf(agent) === 'result'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'result')\">\n <nh-assistant-icon name=\"page\" />{{ (panelOf(agent) === 'result' ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.openProposals > 0) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-proposals\n [attr.aria-expanded]=\"panelOf(agent) === 'proposals'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'proposals')\">\n <nh-assistant-icon name=\"check\" />{{ (panelOf(agent) === 'proposals' ? 'nh-assistant.agent-runs.board.hide-proposals' : 'nh-assistant.agent-runs.board.show-proposals') | translate }}\n </button>\n }\n @if (agent.subjectType) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-history\n [attr.aria-expanded]=\"panelOf(agent) === 'history'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'history')\">\n <nh-assistant-icon name=\"list\" />{{ (panelOf(agent) === 'history' ? 'nh-assistant.agent-runs.board.hide-history' : 'nh-assistant.agent-runs.board.show-history') | translate }}\n </button>\n }\n </div>\n\n @switch (panelOf(agent)) {\n @case ('result') {\n @if (agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n @case ('proposals') {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-agent-inbox [agentId]=\"agent.agentId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n @case ('history') {\n @if (agent.subjectType && agent.subjectId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-board-history\n [agentId]=\"agent.agentId\"\n [subjectType]=\"agent.subjectType\"\n [subjectId]=\"agent.subjectId\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}\n"] }]
|
|
2593
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\" [attr.aria-labelledby]=\"id + '-title'\" [attr.aria-busy]=\"loading()\" data-agent-board>\n <header class=\"section-header\">\n <div>\n <h3 [id]=\"id + '-title'\">{{ board()?.name ?? ('nh-assistant.agent-runs.board.title' | translate) }}</h3>\n @if (board(); as shown) {\n @if (shown.description; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n @if (shown.lastVisitedAt; as visitedAt) {\n <p class=\"muted\" data-board-last-visit>{{ 'nh-assistant.agent-runs.board.last-visit' | translate: { date: (visitedAt | date: 'medium') } }}</p>\n } @else {\n <p class=\"muted\" data-board-first-visit>{{ 'nh-assistant.agent-runs.board.first-visit' | translate }}</p>\n }\n }\n </div>\n <div class=\"toolbar\">\n <button class=\"secondary\" type=\"button\" [disabled]=\"loading()\" (click)=\"load()\">\n <nh-assistant-icon name=\"refresh\" />{{ 'nh-assistant.agent-runs.refresh' | translate }}\n </button>\n </div>\n </header>\n\n @if (loading() && !board()) {\n <p class=\"state\" role=\"status\">{{ 'nh-assistant.agent-runs.board.loading' | translate }}</p>\n } @else if (notFound()) {\n <p class=\"state\" data-board-not-found>{{ 'nh-assistant.agent-runs.board.not-found' | translate }}</p>\n } @else if (loadFailed()) {\n <div class=\"state\" role=\"alert\">\n <p>{{ 'nh-assistant.agent-runs.load-failed' | translate }}</p>\n <button class=\"secondary\" type=\"button\" (click)=\"load()\">{{ 'nh-assistant.agent-runs.retry' | translate }}</button>\n </div>\n } @else {\n <ul class=\"cards board-tiles\">\n @for (agent of agents(); track agent.agentId) {\n <li class=\"card board-tile\" [class.new]=\"agent.isNew\" [attr.data-board-agent]=\"agent.agentId\" [attr.aria-labelledby]=\"id + '-' + agent.agentId + '-name'\">\n <div class=\"card-header\">\n <strong [id]=\"id + '-' + agent.agentId + '-name'\">{{ [agent.displayNameKey] | nhAssistantTranslate: agent.displayNameKey }}</strong>\n @if (agent.isNew) {\n <span class=\"badge new\" data-board-new [attr.title]=\"'nh-assistant.agent-runs.board.new-label' | translate\">\n {{ 'nh-assistant.agent-runs.board.new' | translate }}<span class=\"visually-hidden\">: {{ 'nh-assistant.agent-runs.board.new-label' | translate }}</span>\n </span>\n }\n <span class=\"badge\" [class.warning]=\"agent.openProposals > 0\" data-open-proposals>\n {{ proposalsKey(agent.openProposals) | translate: { count: agent.openProposals } }}\n </span>\n </div>\n @if ([agent.descriptionKey] | nhAssistantTranslate: agent.descriptionKey; as description) {\n <p class=\"muted\">{{ description }}</p>\n }\n <p class=\"muted\" data-works-on>{{ worksOnOf(agent) }}</p>\n\n @if (agent.subjectType) {\n @if (agent.latestRun; as run) {\n <div class=\"latest-run\" data-latest-run>\n <div class=\"meta\">\n <span>{{ 'nh-assistant.agent-runs.board.latest' | translate }}</span>\n <span\n class=\"badge\"\n [class.success]=\"run.status === 'completed'\"\n [class.danger]=\"run.status === 'failed'\"\n [class.warning]=\"run.status === 'waiting-for-approval'\">{{ 'nh-assistant.agent-runs.run.status.' + run.status | translate }}</span>\n <time [attr.datetime]=\"run.at\">{{ run.at | date: 'medium' }}</time>\n </div>\n @if (run.failureCode; as reason) {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.failure' | translate: { reason: (codeKeys(reason) | nhAssistantTranslate: reason) } }}</p>\n }\n @if (run.result; as result) {\n <!-- Model output: rendered only through the assistant's safe Markdown rendering. -->\n <div class=\"markdown board-preview\" data-latest-result [innerHTML]=\"previewOf(result, run.resultTruncated) | nhAssistantMarkdown\"></div>\n } @else {\n <p class=\"muted\">{{ 'nh-assistant.agent-runs.object-agents.no-result' | translate }}</p>\n }\n </div>\n } @else {\n <p class=\"muted\" data-never-run>{{ 'nh-assistant.agent-runs.board.never' | translate }}</p>\n }\n } @else {\n <p class=\"muted\" data-board-no-application>\n {{ (agent.worksOn.perDivision ? 'nh-assistant.agent-runs.board.per-division' : 'nh-assistant.agent-runs.board.objects-only') | translate }}\n </p>\n }\n\n <div class=\"card-actions\">\n @if (agent.canStart) {\n <button class=\"primary\" type=\"button\" aria-haspopup=\"dialog\" data-board-run-now (click)=\"runNow(agent)\">\n <nh-assistant-icon name=\"send\" />{{ 'nh-assistant.agent-runs.board.run-now' | translate }}\n </button>\n }\n @if (agent.latestRun) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-result\n [attr.aria-expanded]=\"panelOf(agent) === 'result'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'result')\">\n <nh-assistant-icon name=\"page\" />{{ (panelOf(agent) === 'result' ? 'nh-assistant.agent-runs.result.hide' : 'nh-assistant.agent-runs.result.show') | translate }}\n </button>\n }\n @if (agent.openProposals > 0) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-proposals\n [attr.aria-expanded]=\"panelOf(agent) === 'proposals'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'proposals')\">\n <nh-assistant-icon name=\"check\" />{{ (panelOf(agent) === 'proposals' ? 'nh-assistant.agent-runs.board.hide-proposals' : 'nh-assistant.agent-runs.board.show-proposals') | translate }}\n </button>\n }\n @if (agent.subjectType) {\n <button\n class=\"secondary\"\n type=\"button\"\n data-board-toggle-history\n [attr.aria-expanded]=\"panelOf(agent) === 'history'\"\n [attr.aria-controls]=\"id + '-' + agent.agentId + '-panel'\"\n (click)=\"toggle(agent, 'history')\">\n <nh-assistant-icon name=\"list\" />{{ (panelOf(agent) === 'history' ? 'nh-assistant.agent-runs.board.hide-history' : 'nh-assistant.agent-runs.board.show-history') | translate }}\n </button>\n }\n </div>\n\n @switch (panelOf(agent)) {\n @case ('result') {\n @if (agent.latestRun; as run) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-run-result [runId]=\"run.runId\" (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n @case ('proposals') {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <!-- One agent's proposals are no visit of the whole inbox; the tile already marks what is new.\n The board of a division shows that division's proposals only. -->\n <nh-assistant-agent-inbox\n [agentId]=\"agent.agentId\"\n [divisionId]=\"divisionId()\"\n [markNew]=\"false\"\n [recordVisit]=\"false\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n @case ('history') {\n @if (agent.subjectType && agent.subjectId) {\n <div class=\"work\" [id]=\"id + '-' + agent.agentId + '-panel'\">\n <nh-assistant-board-history\n [agentId]=\"agent.agentId\"\n [subjectType]=\"agent.subjectType\"\n [subjectId]=\"agent.subjectId\"\n (openConversation)=\"openConversation.emit($event)\" />\n </div>\n }\n }\n }\n </li>\n }\n </ul>\n }\n\n @if (runNowAgent(); as runAgent) {\n <nh-assistant-run-now-dialog\n [agent]=\"runAgent\"\n [subject]=\"runNowSubject()\"\n (started)=\"onStarted()\"\n (openConversation)=\"openConversation.emit($event)\"\n (closed)=\"runningNow.set(null)\" />\n }\n</section>\n", styles: [":host{--nha-font: var(--nh-assistant-font, inherit);--nha-background: var(--nh-assistant-background, #ffffff);--nha-surface: var(--nh-assistant-surface, #f5f7fb);--nha-surface-strong: var(--nh-assistant-surface-strong, #eceff6);--nha-text: var(--nh-assistant-text, #080c1d);--nha-text-muted: var(--nh-assistant-text-muted, #5b6482);--nha-border: var(--nh-assistant-border, #dce0ec);--nha-accent: var(--nh-assistant-accent, #022962);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #c84f00);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #247d4e);--nha-success-soft: var(--nh-assistant-success-soft, #e6f5ec);--nha-warning: var(--nh-assistant-warning, #8a5a00);--nha-warning-soft: var(--nh-assistant-warning-soft, #fff3d9);--nha-danger: var(--nh-assistant-danger, #b92e52);--nha-danger-soft: var(--nh-assistant-danger-soft, #ffe9ef);--nha-focus: var(--nh-assistant-focus, #ff6700);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(2 41 98 / .16));--nha-radius: var(--nh-assistant-radius, 16px);--nha-radius-control: var(--nh-assistant-radius-control, 12px);--nha-mono: var(--nh-assistant-font-mono, ui-monospace, \"Cascadia Code\", Consolas, monospace)}@media(prefers-color-scheme:dark){:host{--nha-background: var(--nh-assistant-background, #0b0e22);--nha-surface: var(--nh-assistant-surface, #11152d);--nha-surface-strong: var(--nh-assistant-surface-strong, #181d3b);--nha-text: var(--nh-assistant-text, #ffffff);--nha-text-muted: var(--nh-assistant-text-muted, #b8bed8);--nha-border: var(--nh-assistant-border, #2b3155);--nha-accent: var(--nh-assistant-accent, #0f4087);--nha-accent-contrast: var(--nh-assistant-accent-contrast, #ffffff);--nha-highlight: var(--nh-assistant-highlight, #ff6700);--nha-user-bubble: var(--nh-assistant-user-bubble, #022962);--nha-user-text: var(--nh-assistant-user-text, #ffffff);--nha-success: var(--nh-assistant-success, #67c58f);--nha-success-soft: var(--nh-assistant-success-soft, #102d24);--nha-warning: var(--nh-assistant-warning, #ffbf5b);--nha-warning-soft: var(--nh-assistant-warning-soft, #342818);--nha-danger: var(--nh-assistant-danger, #ff6d8a);--nha-danger-soft: var(--nh-assistant-danger-soft, #351b2a);--nha-shadow: var(--nh-assistant-shadow, 0 16px 36px rgb(0 0 0 / .32))}}:host{display:block;min-width:0;color:var(--nha-text);font-family:var(--nha-font);font-size:14px}:host fieldset{min-width:0;margin:0;border:0;padding:0}:host legend,:host .label,:host .field>label{display:block;margin-bottom:6px;padding:0;color:var(--nha-text);font-size:12px;font-weight:700}:host input[type=text],:host input[type=url],:host input[type=password],:host input[type=search],:host input[type=email],:host input[type=number],:host input[type=date],:host input[type=time],:host input[type=datetime-local],:host select,:host textarea{box-sizing:border-box;width:100%;min-width:0;min-height:38px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:8px 10px;color:var(--nha-text);background:var(--nha-background);font:inherit;font-size:13px}:host input[type=text]:focus-visible,:host input[type=url]:focus-visible,:host input[type=password]:focus-visible,:host input[type=search]:focus-visible,:host input[type=email]:focus-visible,:host input[type=number]:focus-visible,:host input[type=date]:focus-visible,:host input[type=time]:focus-visible,:host input[type=datetime-local]:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host input[type=text]:disabled,:host input[type=url]:disabled,:host input[type=password]:disabled,:host input[type=search]:disabled,:host input[type=email]:disabled,:host input[type=number]:disabled,:host input[type=date]:disabled,:host input[type=time]:disabled,:host input[type=datetime-local]:disabled,:host select:disabled,:host textarea:disabled{cursor:not-allowed;opacity:.6}:host input[type=text][aria-invalid=true],:host input[type=url][aria-invalid=true],:host input[type=password][aria-invalid=true],:host input[type=search][aria-invalid=true],:host input[type=email][aria-invalid=true],:host input[type=number][aria-invalid=true],:host input[type=date][aria-invalid=true],:host input[type=time][aria-invalid=true],:host input[type=datetime-local][aria-invalid=true],:host select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}:host input[type=number]{font-variant-numeric:tabular-nums}:host .mono{font-family:var(--nha-mono);font-size:12px}:host .field{display:flex;flex-direction:column;min-width:0}:host .hint{display:flex;justify-content:space-between;gap:8px;margin:4px 2px 0;color:var(--nha-text-muted);font-size:11px}:host .counter{flex:none;font-variant-numeric:tabular-nums}:host .error-text{color:var(--nha-danger)}:host .field-error{display:flex;align-items:flex-start;gap:6px;margin:4px 2px 0;color:var(--nha-danger);font-size:12px;font-weight:600;overflow-wrap:anywhere}:host .field-error nh-assistant-icon{flex:none;margin-top:1px}:host .form-error{box-sizing:border-box;display:flex;align-items:flex-start;gap:8px;margin:0;border:1px solid var(--nha-danger);border-radius:var(--nha-radius-control);padding:8px 12px;color:var(--nha-text);background:var(--nha-danger-soft);font-size:13px;overflow-wrap:anywhere}:host .form-error ul{margin:4px 0 0;padding-left:18px}:host .message{box-sizing:border-box;display:flex;align-items:center;gap:8px;margin:0;border:1px solid transparent;border-radius:var(--nha-radius-control);padding:8px 12px;font-size:13px;overflow-wrap:anywhere}:host .message.error{border-color:var(--nha-danger);color:var(--nha-text);background:var(--nha-danger-soft)}:host .message.warning{border-color:var(--nha-warning);color:var(--nha-text);background:var(--nha-warning-soft)}:host .message.success{border-color:var(--nha-success);color:var(--nha-text);background:var(--nha-success-soft)}:host .message.info{border-color:var(--nha-border);color:var(--nha-text);background:var(--nha-surface)}:host .message nh-assistant-icon{flex:none}:host button.link{min-height:0;border:0;padding:0;color:var(--nha-accent, currentColor);background:none;font:inherit;text-decoration:underline;cursor:pointer}:host button.link:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host button.link:disabled{cursor:not-allowed;opacity:.55}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;gap:6px;min-height:36px;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:6px 14px;font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}:host .primary:focus-visible,:host .secondary:focus-visible,:host .danger:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .primary:disabled,:host .secondary:disabled,:host .danger:disabled{cursor:not-allowed;opacity:.55}:host .primary{border-color:var(--nha-accent);color:var(--nha-accent-contrast);background:var(--nha-accent)}:host .primary:hover:not(:disabled){filter:brightness(1.12)}:host .secondary{color:var(--nha-text);background:transparent}:host .secondary:hover:not(:disabled){background:var(--nha-surface-strong)}:host .danger{border-color:var(--nha-danger);color:var(--nha-danger);background:transparent}:host .danger:hover:not(:disabled){background:var(--nha-danger-soft)}:host .icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--nha-radius-control);color:var(--nha-text-muted);background:transparent;cursor:pointer}:host .icon-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host .icon-button:hover:not(:disabled){color:var(--nha-text);background:var(--nha-surface-strong)}:host .icon-button:disabled{cursor:not-allowed;opacity:.5}:host .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}:host .badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 8px;color:var(--nha-text-muted);background:var(--nha-surface-strong);font-size:11px;font-weight:700;white-space:nowrap}:host .badge.success{color:var(--nha-success);background:var(--nha-success-soft)}:host .badge.warning{color:var(--nha-warning);background:var(--nha-warning-soft)}:host .badge.danger{color:var(--nha-danger);background:var(--nha-danger-soft)}:host .visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.section{display:flex;flex-direction:column;gap:14px;min-width:0}.section-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.section-header>div{min-width:0;max-width:72ch}h3{margin:0 0 4px;font-size:17px;font-weight:750}.muted{margin:0;color:var(--nha-text-muted);font-size:13px}.state{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:0;border:1px dashed var(--nha-border);border-radius:var(--nha-radius);padding:18px;color:var(--nha-text-muted);font-size:13px}.state p{margin:0}.cards{display:grid;gap:10px;margin:0;padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius);padding:12px 14px;background:var(--nha-surface)}.card.selected{border-color:var(--nha-accent, currentColor)}.card[tabindex]:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.card.closed{border-style:dashed}.closed-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.message.stale-explanation{overflow-wrap:anywhere;color:var(--nha-text);background:var(--nha-surface-strong)}.placed-by,.consultation-route{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;min-width:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.consultation-routes{display:inline-flex;flex-wrap:wrap;gap:4px 8px}.rationale{margin:0;overflow-wrap:anywhere;color:var(--nha-text-muted);font-size:13px}.card-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.card-header strong{font-size:14px;overflow-wrap:anywhere}.card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}pre{max-height:220px;margin:0;overflow:auto;border-radius:var(--nha-radius-control);padding:8px 10px;background:var(--nha-surface-muted, rgba(127, 127, 127, .08));font-family:var(--nha-mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}.summary{margin:0;font-size:13px;overflow-wrap:anywhere}.handed-off{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.handed-off button.link{min-height:0;border:0;padding:0;background:none;color:var(--nha-accent, currentColor);font:inherit;text-decoration:underline;cursor:pointer}.presentation-fields{display:grid;gap:6px;margin:0}.presentation-fields div{display:grid;grid-template-columns:minmax(90px,.4fr) minmax(0,1fr);gap:8px}.presentation-fields dt{color:var(--nha-text-muted);font-size:12px;font-weight:700;overflow-wrap:anywhere}.presentation-fields dd{margin:0;font-size:13px;overflow-wrap:anywhere}.technical-details{color:var(--nha-text-muted);font-size:12px}.technical-details summary{cursor:pointer;font-weight:700}.technical-details code{overflow-wrap:anywhere}.technical-details .label{margin:10px 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.technical-details .targets{margin:0;padding-left:18px;overflow-wrap:anywhere}.tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--nha-border)}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;padding:8px 12px;background:transparent;color:var(--nha-text-muted);font:inherit;cursor:pointer}.tabs button[aria-selected=true]{border-bottom-color:currentColor;color:var(--nha-text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.reason{flex:1 1 200px;min-width:0}.select{display:inline-flex;align-items:center;gap:6px;font-size:12px}.proposal-list{display:flex;flex-direction:column;gap:10px;min-width:0}.feedback-prompt{display:flex;flex-direction:column;gap:6px;min-width:0}.feedback-prompt .muted{overflow-wrap:anywhere}.text-button{display:inline-flex;align-items:center;border:0;border-radius:6px;padding:2px 4px;color:var(--nha-text-muted);background:transparent;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.text-button:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}.text-button:hover:not(:disabled){color:var(--nha-text)}.text-button:disabled{cursor:not-allowed;opacity:.55}.waiting-for{display:flex;align-items:center;gap:6px;margin:0;color:var(--nha-text-muted);font-size:12px;overflow-wrap:anywhere}.subject-agents{display:grid;gap:8px;margin:0;padding:0;list-style:none}.subject-agent{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-width:0;border:1px solid var(--nha-border);border-radius:var(--nha-radius-control);padding:10px 12px}.subject-agent-text{display:flex;flex-direction:column;gap:2px;min-width:0}.subject-agent-text strong{font-size:14px;overflow-wrap:anywhere}.latest-run{display:flex;flex-direction:column;gap:6px;min-width:0}.result{white-space:pre-line}.work{min-width:0;border-top:1px solid var(--nha-border);padding-top:12px}.run-result{display:flex;flex-direction:column;gap:12px;min-width:0}.run-result h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 6px;font-size:15px;font-weight:750;overflow-wrap:anywhere}.run-result h5{margin:0 0 6px;font-size:13px;font-weight:700}.run-result-header{min-width:0}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px 16px;margin:0}.facts div{min-width:0}.facts dt{color:var(--nha-text-muted);font-size:12px}.facts dd{margin:0;overflow-wrap:anywhere}.result-body,.result-section{min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.files{display:grid;gap:6px;margin:0;padding:0;list-style:none}.files li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mcp-skips{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mcp-skips li{min-width:0;overflow-wrap:anywhere}.file-name{min-width:0;font-weight:600;overflow-wrap:anywhere}:host ::ng-deep .markdown{min-width:0;overflow-wrap:anywhere}:host ::ng-deep .markdown :first-child{margin-top:0}:host ::ng-deep .markdown :last-child{margin-bottom:0}:host ::ng-deep .markdown p,:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol,:host ::ng-deep .markdown pre,:host ::ng-deep .markdown blockquote,:host ::ng-deep .markdown table{margin:0 0 8px}:host ::ng-deep .markdown ul,:host ::ng-deep .markdown ol{padding-left:20px}:host ::ng-deep .markdown h1,:host ::ng-deep .markdown h2,:host ::ng-deep .markdown h3,:host ::ng-deep .markdown h4,:host ::ng-deep .markdown h5,:host ::ng-deep .markdown h6{margin:10px 0 6px;font-size:15px;line-height:1.3}:host ::ng-deep .markdown hr{margin:12px 0;border:0;border-top:1px solid var(--nha-border)}:host ::ng-deep .markdown a{color:var(--nha-highlight);text-decoration:underline}:host ::ng-deep .markdown a:focus-visible{outline:3px solid color-mix(in srgb,var(--nha-focus) 80%,transparent);outline-offset:2px}:host ::ng-deep .markdown code{border-radius:6px;padding:1px 4px;background:var(--nha-surface-strong);font-family:var(--nha-mono);font-size:12.5px}:host ::ng-deep .markdown pre{overflow-x:auto;border-radius:8px;padding:8px;background:var(--nha-surface-strong)}:host ::ng-deep .markdown pre code{padding:0;background:none}:host ::ng-deep .markdown blockquote{border-left:3px solid var(--nha-border);padding-left:10px;color:var(--nha-text-muted)}:host ::ng-deep .markdown table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:13px}:host ::ng-deep .markdown th,:host ::ng-deep .markdown td{border:1px solid var(--nha-border);padding:4px 8px;text-align:left}.board-tiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start}.board-tile.new{border-color:var(--nha-accent)}.badge.new{color:var(--nha-accent-contrast);background:var(--nha-accent)}.board-preview{max-height:12em;overflow:hidden}.board-history{display:flex;flex-direction:column;gap:8px;min-width:0}.board-history h4{margin:0;font-size:13px;font-weight:700}.history-runs{display:grid;gap:8px;margin:0;padding:0;list-style:none}.history-run{display:flex;flex-direction:column;gap:4px;min-width:0;border-top:1px solid var(--nha-border);padding-top:8px}.card.new{border-color:var(--nha-accent)}.proposal-group{display:flex;flex-direction:column;gap:8px;min-width:0;border-top:1px solid var(--nha-border);padding-top:10px}.proposal-group-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.proposal-group-header h4{margin:0;overflow-wrap:anywhere;font-size:15px;font-weight:700}.proposal-subject-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:4px 0 0;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:650}.proposal-run-header{margin:0;color:var(--nha-text-muted);font-size:12px}\n"] }]
|
|
2242
2594
|
}], ctorParameters: () => [], propDecorators: { group: [{ type: i0.Input, args: [{ isSignal: true, alias: "group", required: true }] }], divisionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "divisionId", required: false }] }], openConversation: [{ type: i0.Output, args: ["openConversation"] }] } });
|
|
2243
2595
|
|
|
2244
2596
|
/*
|