@newheap/platform-ai-chat 0.16.0 → 0.17.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 +13 -0
- package/agent-runs/index.d.ts +147 -4
- package/fesm2022/newheap-platform-ai-chat-admin.mjs +52 -6
- package/fesm2022/newheap-platform-ai-chat-admin.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs +297 -30
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-testing.mjs +174 -13
- package/fesm2022/newheap-platform-ai-chat-testing.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat.mjs +56 -3
- package/fesm2022/newheap-platform-ai-chat.mjs.map +1 -1
- package/i18n/en.json +21 -1
- package/i18n/nl.json +21 -1
- package/index.d.ts +112 -2
- package/package.json +1 -1
- package/testing/index.d.ts +12 -1
|
@@ -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,10 @@ 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.
|
|
22
25
|
*/
|
|
23
26
|
class NhAssistantAgentProposalsComponent {
|
|
24
27
|
constructor() {
|
|
@@ -40,6 +43,16 @@ class NhAssistantAgentProposalsComponent {
|
|
|
40
43
|
* it closes.
|
|
41
44
|
*/
|
|
42
45
|
this.holdClosedCards = input(false, ...(ngDevMode ? [{ debugName: "holdClosedCards" }] : []));
|
|
46
|
+
/**
|
|
47
|
+
* The groups of the grouped inbox (`AgentInbox.groups`) for `proposals` in the order the inbox gave
|
|
48
|
+
* them: the first `count` proposals belong to the first group, and so on. Without groups, or when
|
|
49
|
+
* they do not describe `proposals`, the list is flat.
|
|
50
|
+
*/
|
|
51
|
+
this.groups = input(null, ...(ngDevMode ? [{ debugName: "groups" }] : []));
|
|
52
|
+
/** Shows a header per run within a subject of a grouped list. */
|
|
53
|
+
this.groupByRun = input(false, ...(ngDevMode ? [{ debugName: "groupByRun" }] : []));
|
|
54
|
+
/** Proposals to mark as new, by approval id, for example those made since the last visit of the inbox. */
|
|
55
|
+
this.newIds = input(null, ...(ngDevMode ? [{ debugName: "newIds" }] : []));
|
|
43
56
|
/** Emits after a proposal or its feedback changed, so the host reloads its list. */
|
|
44
57
|
this.changed = output();
|
|
45
58
|
/**
|
|
@@ -65,6 +78,26 @@ class NhAssistantAgentProposalsComponent {
|
|
|
65
78
|
return [...held, ...this.proposals().filter(proposal => !heldIds.has(proposal.approvalId))];
|
|
66
79
|
}, ...(ngDevMode ? [{ debugName: "shown" }] : []));
|
|
67
80
|
this.lookups = new Subscription();
|
|
81
|
+
/**
|
|
82
|
+
* The grouped list: the held closed cards stay above it; `null` for a flat list, or when the groups
|
|
83
|
+
* do not describe the proposals.
|
|
84
|
+
*/
|
|
85
|
+
this.sections = computed(() => {
|
|
86
|
+
const groups = this.groups();
|
|
87
|
+
const items = this.proposals();
|
|
88
|
+
if (!groups || groups.reduce((sum, group) => sum + group.count, 0) !== items.length) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const heldIds = new Set(this.held().map(proposal => proposal.approvalId));
|
|
92
|
+
const sections = [];
|
|
93
|
+
let offset = 0;
|
|
94
|
+
for (const group of groups) {
|
|
95
|
+
const members = items.slice(offset, offset + group.count);
|
|
96
|
+
offset += group.count;
|
|
97
|
+
sections.push(this.groupSection(group, members, heldIds));
|
|
98
|
+
}
|
|
99
|
+
return sections;
|
|
100
|
+
}, ...(ngDevMode ? [{ debugName: "sections" }] : []));
|
|
68
101
|
inject(DestroyRef).onDestroy(() => {
|
|
69
102
|
this.subscription?.unsubscribe();
|
|
70
103
|
this.lookups.unsubscribe();
|
|
@@ -96,6 +129,30 @@ class NhAssistantAgentProposalsComponent {
|
|
|
96
129
|
? { key: 'nh-assistant.agent-runs.proposal.placed-by.object-named', params: { type: origin.subjectTypeName } }
|
|
97
130
|
: { key: 'nh-assistant.agent-runs.proposal.placed-by.object', params: {} };
|
|
98
131
|
}
|
|
132
|
+
/** Whether the proposal is marked as new. */
|
|
133
|
+
isNew(proposal) {
|
|
134
|
+
return this.newIds()?.has(proposal.approvalId) ?? false;
|
|
135
|
+
}
|
|
136
|
+
/** Whether every proposal "Select group" would select in the group is selected. */
|
|
137
|
+
groupSelected(group) {
|
|
138
|
+
const selected = this.selected();
|
|
139
|
+
return group.selectableIds.length > 0 && group.selectableIds.every(id => selected.has(id));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Selects the group's pending proposals in this list that the caller may decide, or deselects them
|
|
143
|
+
* when all are selected. Proposals of the group on another page are never selected: an approver
|
|
144
|
+
* decides only what they see.
|
|
145
|
+
*/
|
|
146
|
+
toggleGroup(group) {
|
|
147
|
+
const next = new Set(this.selected());
|
|
148
|
+
if (this.groupSelected(group)) {
|
|
149
|
+
group.selectableIds.forEach(id => next.delete(id));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
group.selectableIds.forEach(id => next.add(id));
|
|
153
|
+
}
|
|
154
|
+
this.selected.set(next);
|
|
155
|
+
}
|
|
99
156
|
/** True when the newer proposal that replaced this one is in the list. */
|
|
100
157
|
hasSuccessor(proposal) {
|
|
101
158
|
const successor = proposal.supersededByApprovalId;
|
|
@@ -233,6 +290,48 @@ class NhAssistantAgentProposalsComponent {
|
|
|
233
290
|
action?.focus();
|
|
234
291
|
}, { injector: this.injector });
|
|
235
292
|
}
|
|
293
|
+
groupSection(group, members, heldIds) {
|
|
294
|
+
const key = `${group.subjectType}|${group.subjectId}`;
|
|
295
|
+
const subjects = [];
|
|
296
|
+
let offset = 0;
|
|
297
|
+
for (const subject of group.subjects) {
|
|
298
|
+
const items = members
|
|
299
|
+
.slice(offset, offset + subject.count)
|
|
300
|
+
.filter(proposal => !heldIds.has(proposal.approvalId)
|
|
301
|
+
&& proposal.subjectType === subject.subjectType
|
|
302
|
+
&& proposal.subjectId === subject.subjectId);
|
|
303
|
+
offset += subject.count;
|
|
304
|
+
const first = items[0];
|
|
305
|
+
subjects.push({
|
|
306
|
+
key: `${key}|${subject.subjectType}|${subject.subjectId}`,
|
|
307
|
+
subjectType: subject.subjectType,
|
|
308
|
+
subjectId: subject.subjectId,
|
|
309
|
+
label: first?.subjectDisplayName ?? subject.subjectId,
|
|
310
|
+
typeName: first?.subjectTypeName ?? null,
|
|
311
|
+
link: first?.subjectLink ?? null,
|
|
312
|
+
own: subject.subjectType === group.subjectType && subject.subjectId === group.subjectId,
|
|
313
|
+
count: subject.count,
|
|
314
|
+
total: subject.total,
|
|
315
|
+
runs: runsOf(items)
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
key,
|
|
320
|
+
subjectType: group.subjectType,
|
|
321
|
+
subjectId: group.subjectId,
|
|
322
|
+
label: group.displayName ?? group.subjectId,
|
|
323
|
+
typeName: group.subjectTypeName ?? null,
|
|
324
|
+
link: group.subjectLink ?? null,
|
|
325
|
+
count: group.count,
|
|
326
|
+
total: group.total,
|
|
327
|
+
continuesFromPreviousPage: group.continuesFromPreviousPage,
|
|
328
|
+
continuesOnNextPage: group.continuesOnNextPage,
|
|
329
|
+
subjects,
|
|
330
|
+
selectableIds: members
|
|
331
|
+
.filter(proposal => !heldIds.has(proposal.approvalId) && proposal.status === 'pending' && this.mayDecide(proposal))
|
|
332
|
+
.map(proposal => proposal.approvalId)
|
|
333
|
+
};
|
|
334
|
+
}
|
|
236
335
|
ask(approvalIds, summary) {
|
|
237
336
|
this.feedback.set({ approvalIds, initial: null, placement: 'prompt', summary, saved: false });
|
|
238
337
|
}
|
|
@@ -291,19 +390,20 @@ class NhAssistantAgentProposalsComponent {
|
|
|
291
390
|
});
|
|
292
391
|
}
|
|
293
392
|
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 }); }
|
|
393
|
+
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 (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 </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{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}.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
394
|
}
|
|
296
395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentProposalsComponent, decorators: [{
|
|
297
396
|
type: Component,
|
|
298
397
|
args: [{ selector: 'nh-assistant-agent-proposals', standalone: true, imports: [
|
|
299
398
|
DatePipe,
|
|
399
|
+
NgTemplateOutlet,
|
|
300
400
|
TranslatePipe,
|
|
301
401
|
_NhAssistantTranslatePipe,
|
|
302
402
|
_NhAssistantIconComponent,
|
|
303
403
|
_NhAssistantSubjectLinkComponent,
|
|
304
404
|
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"] }] } });
|
|
405
|
+
], 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 (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 </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{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}.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"] }]
|
|
406
|
+
}], 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
407
|
/** The refusal of an approval because the proposal no longer fits. */
|
|
308
408
|
const staleCode = 'assistant-proposal-stale';
|
|
309
409
|
/** The application's words for a proposal, falling back to its subject and tool. */
|
|
@@ -311,6 +411,25 @@ function summaryOf(proposal) {
|
|
|
311
411
|
return proposal.presentation?.summary
|
|
312
412
|
?? `${proposal.subjectDisplayName ?? proposal.subjectId} · ${proposal.presentation?.toolDisplayName ?? proposal.toolId}`;
|
|
313
413
|
}
|
|
414
|
+
/** The proposals of each run in a row, in the order given. */
|
|
415
|
+
function runsOf(items) {
|
|
416
|
+
const runs = [];
|
|
417
|
+
for (const proposal of items) {
|
|
418
|
+
const last = runs.at(-1);
|
|
419
|
+
if (last && last.runId === proposal.runId) {
|
|
420
|
+
last.items.push(proposal);
|
|
421
|
+
continue;
|
|
422
|
+
}
|
|
423
|
+
runs.push({
|
|
424
|
+
key: `${proposal.runId ?? 'none'}|${proposal.approvalId}`,
|
|
425
|
+
runId: proposal.runId,
|
|
426
|
+
agentId: proposal.agentId,
|
|
427
|
+
proposedAt: proposal.createdAt,
|
|
428
|
+
items: [proposal]
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
return runs;
|
|
432
|
+
}
|
|
314
433
|
/** True for a proposal a newer proposal for the same objects replaced. */
|
|
315
434
|
function isSuperseded(proposal) {
|
|
316
435
|
return proposal.status === 'withdrawn' && !!proposal.supersededByApprovalId;
|
|
@@ -327,15 +446,48 @@ function isSuperseded(proposal) {
|
|
|
327
446
|
* longer fits, for example because someone did the work by hand, stays as a closed card with the
|
|
328
447
|
* reason until it is dismissed. A proposal a run placed at its object from another subject, such as a
|
|
329
448
|
* run for the whole application, names that run; `openConversation` emits its conversation.
|
|
449
|
+
*
|
|
450
|
+
* `agentId`, `subjectType`, `divisionId` and `runId` filter the inbox; changing a filter, or `grouped`,
|
|
451
|
+
* reloads it from the first page. With `grouped` the inbox shows the proposals per parent, such as a
|
|
452
|
+
* project with its own proposals and those of its tasks, and per subject, optionally per run
|
|
453
|
+
* (`groupByRun`); a group that goes on on another page says so, and "Select group" selects only its
|
|
454
|
+
* proposals shown here. With `markNew` (on by default) it marks the proposals made since the person's
|
|
455
|
+
* last visit of the inbox in its scope, the whole application or the division of `divisionId`, and
|
|
456
|
+
* those that arrive while it is shown; with `recordVisit` (on by default) showing it records the
|
|
457
|
+
* visit. Turn `recordVisit` off for an inbox that shows only part of the scope, such as one agent's
|
|
458
|
+
* proposals, so the person's next visit of the whole inbox still marks what they have not seen.
|
|
330
459
|
*/
|
|
331
460
|
class NhAssistantAgentInboxComponent {
|
|
332
461
|
constructor() {
|
|
333
462
|
this.api = inject(NhAssistantAgentRunApiService);
|
|
334
463
|
this.proposalList = viewChild(NhAssistantAgentProposalsComponent, ...(ngDevMode ? [{ debugName: "proposalList" }] : []));
|
|
464
|
+
/** The scope whose visit this view recorded; the visit is recorded once per scope shown. */
|
|
465
|
+
this.visited = null;
|
|
466
|
+
/**
|
|
467
|
+
* What the first read of the shown scope found: the visit before this one and the proposals that
|
|
468
|
+
* were new since. Later reads, after live updates, paging or a decision, compare with both, so what
|
|
469
|
+
* was new when the inbox was opened stays new while it is shown.
|
|
470
|
+
*/
|
|
471
|
+
this.opened = null;
|
|
335
472
|
/** Limits the inbox to one agent. */
|
|
336
473
|
this.agentId = input(undefined, ...(ngDevMode ? [{ debugName: "agentId" }] : []));
|
|
337
474
|
/** Limits the inbox to one kind of subject, for example `project`. */
|
|
338
475
|
this.subjectType = input(undefined, ...(ngDevMode ? [{ debugName: "subjectType" }] : []));
|
|
476
|
+
/**
|
|
477
|
+
* Limits the inbox to the subjects of one division, for example the active division; its visits are
|
|
478
|
+
* then those of that division.
|
|
479
|
+
*/
|
|
480
|
+
this.divisionId = input(undefined, ...(ngDevMode ? [{ debugName: "divisionId" }] : []));
|
|
481
|
+
/** Limits the inbox to the proposals of one run. */
|
|
482
|
+
this.runId = input(undefined, ...(ngDevMode ? [{ debugName: "runId" }] : []));
|
|
483
|
+
/** Groups the proposals per parent and subject instead of listing them by expiry alone. */
|
|
484
|
+
this.grouped = input(false, ...(ngDevMode ? [{ debugName: "grouped" }] : []));
|
|
485
|
+
/** In a grouped inbox, also shows a header per run within a subject. */
|
|
486
|
+
this.groupByRun = input(false, ...(ngDevMode ? [{ debugName: "groupByRun" }] : []));
|
|
487
|
+
/** Marks the proposals made since the person's last visit of the inbox, and those that arrive while it is shown. */
|
|
488
|
+
this.markNew = input(true, ...(ngDevMode ? [{ debugName: "markNew" }] : []));
|
|
489
|
+
/** Records the person's visit of the inbox in its scope when it is shown. */
|
|
490
|
+
this.recordVisit = input(true, ...(ngDevMode ? [{ debugName: "recordVisit" }] : []));
|
|
339
491
|
this.itemsPerPage = input(20, ...(ngDevMode ? [{ debugName: "itemsPerPage" }] : []));
|
|
340
492
|
/**
|
|
341
493
|
* Emits the conversation of the run that placed a proposal at its object from another subject, so
|
|
@@ -349,11 +501,26 @@ class NhAssistantAgentInboxComponent {
|
|
|
349
501
|
this.loadFailed = signal(false, ...(ngDevMode ? [{ debugName: "loadFailed" }] : []));
|
|
350
502
|
this.items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
351
503
|
this.total = signal(0, ...(ngDevMode ? [{ debugName: "total" }] : []));
|
|
504
|
+
/** The groups of the page in a grouped inbox; `null` for the flat inbox. */
|
|
505
|
+
this.groups = signal(null, ...(ngDevMode ? [{ debugName: "groups" }] : []));
|
|
506
|
+
/** The proposals of the page marked as new. */
|
|
507
|
+
this.newIds = signal(new Set(), ...(ngDevMode ? [{ debugName: "newIds" }] : []));
|
|
508
|
+
/**
|
|
509
|
+
* The person's visit of the shown scope before the inbox was opened: `null` before their first
|
|
510
|
+
* visit, `undefined` while unknown or when new proposals are not marked.
|
|
511
|
+
*/
|
|
512
|
+
this.previousVisit = signal(undefined, ...(ngDevMode ? [{ debugName: "previousVisit" }] : []));
|
|
352
513
|
this.pages = computed(() => Math.max(1, Math.ceil(this.total() / this.itemsPerPage())), ...(ngDevMode ? [{ debugName: "pages" }] : []));
|
|
353
|
-
inject(DestroyRef).onDestroy(() =>
|
|
514
|
+
inject(DestroyRef).onDestroy(() => {
|
|
515
|
+
this.subscription?.unsubscribe();
|
|
516
|
+
this.visitSubscription?.unsubscribe();
|
|
517
|
+
});
|
|
354
518
|
effect(() => {
|
|
355
519
|
this.agentId();
|
|
356
520
|
this.subjectType();
|
|
521
|
+
this.divisionId();
|
|
522
|
+
this.runId();
|
|
523
|
+
this.grouped();
|
|
357
524
|
untracked(() => {
|
|
358
525
|
this.page.set(1);
|
|
359
526
|
this.load();
|
|
@@ -387,11 +554,16 @@ class NhAssistantAgentInboxComponent {
|
|
|
387
554
|
this.loading.set(true);
|
|
388
555
|
this.loadFailed.set(false);
|
|
389
556
|
}
|
|
557
|
+
const divisionId = this.divisionId() ?? null;
|
|
390
558
|
this.subscription?.unsubscribe();
|
|
391
559
|
this.subscription = this.api
|
|
392
560
|
.getInbox({
|
|
393
561
|
agentId: this.agentId(),
|
|
394
562
|
subjectType: this.subjectType(),
|
|
563
|
+
divisionId: divisionId ?? undefined,
|
|
564
|
+
runId: this.runId() ?? undefined,
|
|
565
|
+
// Only a grouped inbox asks for groups, so the requests of a flat inbox stay as they were.
|
|
566
|
+
grouped: this.grouped() || undefined,
|
|
395
567
|
page: this.page(),
|
|
396
568
|
itemsPerPage: this.itemsPerPage()
|
|
397
569
|
})
|
|
@@ -406,6 +578,8 @@ class NhAssistantAgentInboxComponent {
|
|
|
406
578
|
}
|
|
407
579
|
const previous = this.items();
|
|
408
580
|
this.items.set(inbox.items);
|
|
581
|
+
this.groups.set(this.grouped() ? inbox.groups ?? null : null);
|
|
582
|
+
this.markNewOf(inbox);
|
|
409
583
|
if (quiet) {
|
|
410
584
|
this.proposalList()?.holdClosed(previous, inbox.items);
|
|
411
585
|
}
|
|
@@ -413,6 +587,7 @@ class NhAssistantAgentInboxComponent {
|
|
|
413
587
|
this.loading.set(false);
|
|
414
588
|
this.loadFailed.set(false);
|
|
415
589
|
this.loaded.set(true);
|
|
590
|
+
this.recordVisitOf(inbox, divisionId);
|
|
416
591
|
},
|
|
417
592
|
error: () => {
|
|
418
593
|
if (quiet) {
|
|
@@ -423,13 +598,57 @@ class NhAssistantAgentInboxComponent {
|
|
|
423
598
|
}
|
|
424
599
|
});
|
|
425
600
|
}
|
|
601
|
+
/**
|
|
602
|
+
* Marks what is new: what the server marks since the visit this view recorded, and what was made
|
|
603
|
+
* after the person's visit before the inbox was opened, on any page. Before the first visit
|
|
604
|
+
* everything is new. A server without visits marks nothing.
|
|
605
|
+
*/
|
|
606
|
+
markNewOf(inbox) {
|
|
607
|
+
if (!this.markNew() || inbox.newApprovalIds === undefined) {
|
|
608
|
+
this.newIds.set(new Set());
|
|
609
|
+
this.previousVisit.set(undefined);
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
const scopeKey = inbox.scopeKey ?? 'global';
|
|
613
|
+
if (this.opened?.scopeKey !== scopeKey) {
|
|
614
|
+
this.opened = { scopeKey, previousVisit: inbox.lastVisitedAt ?? null, newIds: new Set() };
|
|
615
|
+
}
|
|
616
|
+
const opened = this.opened;
|
|
617
|
+
const before = opened.previousVisit === null ? null : Date.parse(opened.previousVisit);
|
|
618
|
+
for (const id of inbox.newApprovalIds) {
|
|
619
|
+
opened.newIds.add(id);
|
|
620
|
+
}
|
|
621
|
+
for (const proposal of inbox.items) {
|
|
622
|
+
if (before === null || Date.parse(proposal.createdAt) > before) {
|
|
623
|
+
opened.newIds.add(proposal.approvalId);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
this.previousVisit.set(opened.previousVisit);
|
|
627
|
+
this.newIds.set(new Set(inbox.items
|
|
628
|
+
.filter(proposal => opened.newIds.has(proposal.approvalId))
|
|
629
|
+
.map(proposal => proposal.approvalId)));
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Records the visit of the shown scope after its first read, so that read still marks what arrived
|
|
633
|
+
* since the visit before.
|
|
634
|
+
*/
|
|
635
|
+
recordVisitOf(inbox, divisionId) {
|
|
636
|
+
const scopeKey = inbox.scopeKey;
|
|
637
|
+
if (!this.recordVisit() || scopeKey === undefined || this.visited === scopeKey) {
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
this.visited = scopeKey;
|
|
641
|
+
this.visitSubscription?.unsubscribe();
|
|
642
|
+
// A visit that cannot be recorded only means the next visit shows more as new.
|
|
643
|
+
this.visitSubscription = this.api.visitInbox(divisionId).subscribe({ error: () => undefined });
|
|
644
|
+
}
|
|
426
645
|
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 }); }
|
|
646
|
+
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 <p class=\"muted\">{{ '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{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}.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
647
|
}
|
|
429
648
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentInboxComponent, decorators: [{
|
|
430
649
|
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"] }] } });
|
|
650
|
+
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 <p class=\"muted\">{{ '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{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}.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"] }]
|
|
651
|
+
}], 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
652
|
|
|
434
653
|
/** The tone of a receipt's outcome (internal). */
|
|
435
654
|
function nhAssistantRunReceiptTone(outcome) {
|
|
@@ -582,11 +801,11 @@ class NhAssistantAgentArtifactsComponent {
|
|
|
582
801
|
});
|
|
583
802
|
}
|
|
584
803
|
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 }); }
|
|
804
|
+
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}.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
805
|
}
|
|
587
806
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentArtifactsComponent, decorators: [{
|
|
588
807
|
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"] }]
|
|
808
|
+
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}.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
809
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
591
810
|
|
|
592
811
|
/**
|
|
@@ -638,11 +857,11 @@ class NhAssistantAgentConsultationsComponent {
|
|
|
638
857
|
});
|
|
639
858
|
}
|
|
640
859
|
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 }); }
|
|
860
|
+
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}.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
861
|
}
|
|
643
862
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentConsultationsComponent, decorators: [{
|
|
644
863
|
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"] }]
|
|
864
|
+
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}.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
865
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
647
866
|
|
|
648
867
|
/**
|
|
@@ -695,11 +914,11 @@ class NhAssistantAgentMemoryComponent {
|
|
|
695
914
|
});
|
|
696
915
|
}
|
|
697
916
|
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 }); }
|
|
917
|
+
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}.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
918
|
}
|
|
700
919
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentMemoryComponent, decorators: [{
|
|
701
920
|
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"] }]
|
|
921
|
+
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}.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
922
|
}], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
|
|
704
923
|
|
|
705
924
|
let nextId$6 = 0;
|
|
@@ -712,6 +931,12 @@ let nextId$6 = 0;
|
|
|
712
931
|
* its object, for the whole application the agent's view policy, administrators every run. The
|
|
713
932
|
* thread view's run timeline and the administration's runs view open it; an application may show
|
|
714
933
|
* it anywhere with a run id. With live updates it reloads by itself while the run works.
|
|
934
|
+
*
|
|
935
|
+
* The run's pending proposals that the reader may decide, by the same live check as the inbox and the
|
|
936
|
+
* subject's work (`POST approvals/lookup`), can be decided in place, one by one or selected together
|
|
937
|
+
* with "Select all"; a pending proposal the reader may not decide says who does, and a reader who may
|
|
938
|
+
* decide none sees no selection. After a rejection the list asks, optionally, what was wrong, and a
|
|
939
|
+
* proposal refused because it no longer fits stays as a closed card with the reason until dismissed.
|
|
715
940
|
*/
|
|
716
941
|
class NhAssistantRunResultComponent {
|
|
717
942
|
constructor() {
|
|
@@ -743,6 +968,13 @@ class NhAssistantRunResultComponent {
|
|
|
743
968
|
return keys.length > 0 ? [...keys.slice(0, -1), 'nh-assistant.agent-runs.artifacts.download-failed'] : [];
|
|
744
969
|
}, ...(ngDevMode ? [{ debugName: "downloadErrorKeys" }] : []));
|
|
745
970
|
this.codeKeys = _nhAssistantCodeKeys;
|
|
971
|
+
/**
|
|
972
|
+
* The reader's live right to decide each pending proposal of the run, by approval id; `null` until
|
|
973
|
+
* it is known, when nobody may decide.
|
|
974
|
+
*/
|
|
975
|
+
this.rights = signal(null, ...(ngDevMode ? [{ debugName: "rights" }] : []));
|
|
976
|
+
/** Whether the reader may decide at least one of the run's proposals: only then can they select. */
|
|
977
|
+
this.decidable = computed(() => [...(this.rights()?.values() ?? [])].some(right => right.canDecide), ...(ngDevMode ? [{ debugName: "decidable" }] : []));
|
|
746
978
|
this.duration = computed(() => {
|
|
747
979
|
const run = this.detail()?.run;
|
|
748
980
|
return run ? durationOf(run.startedAt, run.endedAt) : null;
|
|
@@ -751,7 +983,10 @@ class NhAssistantRunResultComponent {
|
|
|
751
983
|
const run = this.detail()?.run;
|
|
752
984
|
return run ? run.inputTokens + run.outputTokens : 0;
|
|
753
985
|
}, ...(ngDevMode ? [{ debugName: "tokens" }] : []));
|
|
754
|
-
inject(DestroyRef).onDestroy(() =>
|
|
986
|
+
inject(DestroyRef).onDestroy(() => {
|
|
987
|
+
this.subscription?.unsubscribe();
|
|
988
|
+
this.rightsSubscription?.unsubscribe();
|
|
989
|
+
});
|
|
755
990
|
effect(() => {
|
|
756
991
|
this.runId();
|
|
757
992
|
untracked(() => this.fetch(false));
|
|
@@ -761,6 +996,10 @@ class NhAssistantRunResultComponent {
|
|
|
761
996
|
load() {
|
|
762
997
|
this.fetch(false);
|
|
763
998
|
}
|
|
999
|
+
/** A proposal was decided or its feedback given: the run's proposals and the rights are read again. */
|
|
1000
|
+
onProposalsChanged() {
|
|
1001
|
+
this.fetch(true);
|
|
1002
|
+
}
|
|
764
1003
|
async download(artifact) {
|
|
765
1004
|
this.downloadingId.set(artifact.id);
|
|
766
1005
|
this.downloadError.set(null);
|
|
@@ -780,6 +1019,24 @@ class NhAssistantRunResultComponent {
|
|
|
780
1019
|
this.downloadingId.set(null);
|
|
781
1020
|
}
|
|
782
1021
|
}
|
|
1022
|
+
/**
|
|
1023
|
+
* Reads the reader's live right to decide each pending proposal of the run, as the server checks it
|
|
1024
|
+
* for every decision. Without an answer nobody may decide here; the server checks again anyway.
|
|
1025
|
+
*/
|
|
1026
|
+
readRights(detail) {
|
|
1027
|
+
this.rightsSubscription?.unsubscribe();
|
|
1028
|
+
const batches = pendingBatches(detail);
|
|
1029
|
+
if (batches.length === 0) {
|
|
1030
|
+
this.rights.set(new Map());
|
|
1031
|
+
return;
|
|
1032
|
+
}
|
|
1033
|
+
this.rightsSubscription = forkJoin(batches.map(batch => this.api.lookupProposals(batch))).subscribe({
|
|
1034
|
+
next: lookups => this.rights.set(new Map(lookups
|
|
1035
|
+
.flatMap(lookup => lookup.items)
|
|
1036
|
+
.map(item => [item.proposal.approvalId, { canDecide: item.canDecide, reasonCode: item.reasonCode }]))),
|
|
1037
|
+
error: () => this.rights.set(new Map())
|
|
1038
|
+
});
|
|
1039
|
+
}
|
|
783
1040
|
/**
|
|
784
1041
|
* Reads the run. A quiet reload, after a live update, keeps what is shown when it fails and shows
|
|
785
1042
|
* no loading state.
|
|
@@ -797,6 +1054,7 @@ class NhAssistantRunResultComponent {
|
|
|
797
1054
|
this.loading.set(false);
|
|
798
1055
|
this.loadFailed.set(false);
|
|
799
1056
|
this.notFound.set(false);
|
|
1057
|
+
this.readRights(detail);
|
|
800
1058
|
},
|
|
801
1059
|
error: (failure) => {
|
|
802
1060
|
if (quiet && this.detail() !== null) {
|
|
@@ -811,7 +1069,7 @@ class NhAssistantRunResultComponent {
|
|
|
811
1069
|
});
|
|
812
1070
|
}
|
|
813
1071
|
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 }); }
|
|
1072
|
+
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{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}.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
1073
|
}
|
|
816
1074
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunResultComponent, decorators: [{
|
|
817
1075
|
type: Component,
|
|
@@ -823,8 +1081,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
823
1081
|
_NhAssistantMarkdownPipe,
|
|
824
1082
|
_NhAssistantSubjectLinkComponent,
|
|
825
1083
|
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"] }]
|
|
1084
|
+
], 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{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}.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
1085
|
}], 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"] }] } });
|
|
1086
|
+
/** The ids of the run's pending proposals in lookups of at most the lookup's limit each. */
|
|
1087
|
+
function pendingBatches(detail) {
|
|
1088
|
+
const ids = detail.proposals.filter(proposal => proposal.status === 'pending').map(proposal => proposal.approvalId);
|
|
1089
|
+
const batches = [];
|
|
1090
|
+
for (let start = 0; start < ids.length; start += NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {
|
|
1091
|
+
batches.push(ids.slice(start, start + NH_ASSISTANT_MAX_PROPOSAL_LOOKUP));
|
|
1092
|
+
}
|
|
1093
|
+
return batches;
|
|
1094
|
+
}
|
|
828
1095
|
/** The time between a run's start and end, in seconds below two minutes and in minutes above. */
|
|
829
1096
|
function durationOf(startedAt, endedAt) {
|
|
830
1097
|
if (!startedAt || !endedAt) {
|
|
@@ -946,7 +1213,7 @@ class NhAssistantRunTimelineComponent {
|
|
|
946
1213
|
});
|
|
947
1214
|
}
|
|
948
1215
|
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 }); }
|
|
1216
|
+
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}.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
1217
|
}
|
|
951
1218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantRunTimelineComponent, decorators: [{
|
|
952
1219
|
type: Component,
|
|
@@ -957,7 +1224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
957
1224
|
_NhAssistantIconComponent,
|
|
958
1225
|
NhAssistantRunResultComponent,
|
|
959
1226
|
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"] }]
|
|
1227
|
+
], 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}.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
1228
|
}], 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
1229
|
|
|
963
1230
|
/**
|
|
@@ -1102,7 +1369,7 @@ class NhAssistantAgentThreadViewComponent {
|
|
|
1102
1369
|
});
|
|
1103
1370
|
}
|
|
1104
1371
|
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 }); }
|
|
1372
|
+
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}.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
1373
|
}
|
|
1107
1374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentThreadViewComponent, decorators: [{
|
|
1108
1375
|
type: Component,
|
|
@@ -1117,7 +1384,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1117
1384
|
NhAssistantAgentArtifactsComponent,
|
|
1118
1385
|
NhAssistantAgentConsultationsComponent,
|
|
1119
1386
|
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"] }]
|
|
1387
|
+
], 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}.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
1388
|
}], 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
1389
|
|
|
1123
1390
|
let nextSuggestionsId = 0;
|
|
@@ -1315,7 +1582,7 @@ class NhAssistantSubjectSuggestionsComponent {
|
|
|
1315
1582
|
});
|
|
1316
1583
|
}
|
|
1317
1584
|
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 }); }
|
|
1585
|
+
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}.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
1586
|
}
|
|
1320
1587
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantSubjectSuggestionsComponent, decorators: [{
|
|
1321
1588
|
type: Component,
|
|
@@ -1325,7 +1592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1325
1592
|
_NhAssistantIconComponent,
|
|
1326
1593
|
NhAssistantAgentProposalsComponent,
|
|
1327
1594
|
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"] }]
|
|
1595
|
+
], 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}.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
1596
|
}], 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
1597
|
|
|
1331
1598
|
/** Lookups that cannot succeed by asking again: the person changes the id instead. */
|
|
@@ -1814,7 +2081,7 @@ class NhAssistantObjectAgentsComponent {
|
|
|
1814
2081
|
});
|
|
1815
2082
|
}
|
|
1816
2083
|
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 }); }
|
|
2084
|
+
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}.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
2085
|
}
|
|
1819
2086
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantObjectAgentsComponent, decorators: [{
|
|
1820
2087
|
type: Component,
|
|
@@ -1826,7 +2093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
1826
2093
|
NhAssistantRunNowDialogComponent,
|
|
1827
2094
|
NhAssistantAgentThreadViewComponent,
|
|
1828
2095
|
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"] }]
|
|
2096
|
+
], 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}.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
2097
|
}], 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
2098
|
|
|
1832
2099
|
/** How many runs the history of a board tile reads at a time. */
|
|
@@ -1962,7 +2229,7 @@ class NhAssistantBoardHistoryComponent {
|
|
|
1962
2229
|
}
|
|
1963
2230
|
}
|
|
1964
2231
|
</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 }); }
|
|
2232
|
+
`, 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}.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
2233
|
}
|
|
1967
2234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantBoardHistoryComponent, decorators: [{
|
|
1968
2235
|
type: Component,
|
|
@@ -2020,7 +2287,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
2020
2287
|
}
|
|
2021
2288
|
}
|
|
2022
2289
|
</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"] }]
|
|
2290
|
+
`, 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}.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
2291
|
}], 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
2292
|
|
|
2026
2293
|
let nextId = 0;
|
|
@@ -2224,7 +2491,7 @@ class NhAssistantAgentBoardComponent {
|
|
|
2224
2491
|
this.visitSubscription = this.api.visitBoard(group, divisionId).subscribe({ error: () => undefined });
|
|
2225
2492
|
}
|
|
2226
2493
|
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 }); }
|
|
2494
|
+
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 <nh-assistant-agent-inbox [agentId]=\"agent.agentId\" [markNew]=\"false\" [recordVisit]=\"false\" (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}.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
2495
|
}
|
|
2229
2496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: NhAssistantAgentBoardComponent, decorators: [{
|
|
2230
2497
|
type: Component,
|
|
@@ -2238,7 +2505,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
|
|
|
2238
2505
|
NhAssistantRunResultComponent,
|
|
2239
2506
|
NhAssistantAgentInboxComponent,
|
|
2240
2507
|
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"] }]
|
|
2508
|
+
], 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 <nh-assistant-agent-inbox [agentId]=\"agent.agentId\" [markNew]=\"false\" [recordVisit]=\"false\" (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}.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
2509
|
}], 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
2510
|
|
|
2244
2511
|
/*
|