@newheap/platform-ai-chat 0.9.0 → 0.10.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.
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, Injector, input, output, signal, computed, DestroyRef, afterNextRender, ChangeDetectionStrategy, Component, viewChild, effect, untracked } from '@angular/core';
3
3
  import { TranslatePipe } from '@ngx-translate/core';
4
- import { NhAssistantAgentRunApiService, ɵnhAssistantErrorKeys as _nhAssistantErrorKeys, ɵtoNhAssistantError as _toNhAssistantError, ɵNhAssistantIconComponent as _NhAssistantIconComponent, NhAssistantProposalFeedbackComponent, ɵNhAssistantTranslatePipe as _NhAssistantTranslatePipe, ɵnhAssistantReloadOnAgentWork as _nhAssistantReloadOnAgentWork, NhAssistantPanelService, NhAssistantStore, NhAssistantApiError } from '@newheap/platform-ai-chat';
4
+ import { NhAssistantAgentRunApiService, ɵnhAssistantErrorKeys as _nhAssistantErrorKeys, NH_ASSISTANT_MAX_PROPOSAL_LOOKUP, ɵtoNhAssistantError as _toNhAssistantError, ɵNhAssistantIconComponent as _NhAssistantIconComponent, NhAssistantProposalFeedbackComponent, ɵNhAssistantTranslatePipe as _NhAssistantTranslatePipe, ɵnhAssistantReloadOnAgentWork as _nhAssistantReloadOnAgentWork, NhAssistantPanelService, NhAssistantStore, NhAssistantApiError } from '@newheap/platform-ai-chat';
5
5
  import { DatePipe, DOCUMENT } from '@angular/common';
6
+ import { Subscription, forkJoin } from 'rxjs';
6
7
 
7
8
  /**
8
9
  * A list of agent proposals with their decision and execution state. People who may decide see
@@ -12,6 +13,11 @@ import { DatePipe, DOCUMENT } from '@angular/common';
12
13
  * optionally and above the list, what was wrong; closed proposals keep a low-key action to give or
13
14
  * change that feedback later. With `decisionRights` each proposal has its own right, for example
14
15
  * from the agent work on a subject, and a pending proposal the viewer may not decide says who does.
16
+ * A proposal that no longer fits, for example because a person already did the work, shows why.
17
+ * With `holdClosedCards`, a list of open proposals keeps such a proposal, or one a newer proposal
18
+ * replaced, as a closed card when it closes while shown, or when an approval is refused because of
19
+ * it, until the person dismisses it. It reads those proposals by id with one lookup, never through
20
+ * their threads.
15
21
  */
16
22
  class NhAssistantAgentProposalsComponent {
17
23
  constructor() {
@@ -27,6 +33,12 @@ class NhAssistantAgentProposalsComponent {
27
33
  */
28
34
  this.decisionRights = input(null, ...(ngDevMode ? [{ debugName: "decisionRights" }] : []));
29
35
  this.selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : []));
36
+ /**
37
+ * Keeps proposals that close as stale or are replaced while shown as closed cards with their
38
+ * explanation until they are dismissed. For lists of open proposals, which drop a proposal once
39
+ * it closes.
40
+ */
41
+ this.holdClosedCards = input(false, ...(ngDevMode ? [{ debugName: "holdClosedCards" }] : []));
30
42
  /** Emits after a proposal or its feedback changed, so the host reloads its list. */
31
43
  this.changed = output();
32
44
  this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
@@ -38,7 +50,59 @@ class NhAssistantAgentProposalsComponent {
38
50
  this.allSelected = computed(() => this.pending().length > 0 && this.pending().every(proposal => this.selected().has(proposal.approvalId)), ...(ngDevMode ? [{ debugName: "allSelected" }] : []));
39
51
  /** The feedback question. It does not depend on `proposals`, which drop rejected proposals in the inbox. */
40
52
  this.feedback = signal(null, ...(ngDevMode ? [{ debugName: "feedback" }] : []));
41
- inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());
53
+ /** Proposals that closed as stale while shown, kept until dismissed; newest first. */
54
+ this.held = signal([], ...(ngDevMode ? [{ debugName: "held" }] : []));
55
+ /** The held closed cards first, then the proposals the host gave. */
56
+ this.shown = computed(() => {
57
+ const held = this.held();
58
+ const heldIds = new Set(held.map(proposal => proposal.approvalId));
59
+ return [...held, ...this.proposals().filter(proposal => !heldIds.has(proposal.approvalId))];
60
+ }, ...(ngDevMode ? [{ debugName: "shown" }] : []));
61
+ this.lookups = new Subscription();
62
+ inject(DestroyRef).onDestroy(() => {
63
+ this.subscription?.unsubscribe();
64
+ this.lookups.unsubscribe();
65
+ });
66
+ }
67
+ /**
68
+ * The translation key of a proposal's status: the kind of a stale proposal, "replaced" for a
69
+ * superseded one, otherwise its status.
70
+ */
71
+ statusKey(proposal) {
72
+ if (proposal.status === 'stale' && proposal.staleKind) {
73
+ return `nh-assistant.approval.stale-kind.${proposal.staleKind}`;
74
+ }
75
+ return isSuperseded(proposal)
76
+ ? 'nh-assistant.approval.superseded'
77
+ : `nh-assistant.agent-runs.proposal.status.${proposal.status}`;
78
+ }
79
+ /** True when the newer proposal that replaced this one is in the list. */
80
+ hasSuccessor(proposal) {
81
+ const successor = proposal.supersededByApprovalId;
82
+ return !!successor && this.shown().some(item => item.approvalId === successor);
83
+ }
84
+ /** Moves focus to the newer proposal that replaced this one. */
85
+ showSuccessor(proposal) {
86
+ const card = Array.from(this.host.nativeElement.querySelectorAll('[data-approval-id]'))
87
+ .find(element => element.dataset['approvalId'] === proposal.supersededByApprovalId);
88
+ card?.scrollIntoView({ block: 'nearest' });
89
+ card?.focus();
90
+ }
91
+ /** True for a closed card the list keeps until it is dismissed. */
92
+ isHeld(proposal) {
93
+ return this.held().some(item => item.approvalId === proposal.approvalId);
94
+ }
95
+ /** Removes a closed card. */
96
+ dismiss(proposal) {
97
+ this.held.update(held => held.filter(item => item.approvalId !== proposal.approvalId));
98
+ }
99
+ /**
100
+ * Called by a host of open proposals after a live update replaced `previous` with `next`: keeps
101
+ * the shown pending proposals that left the list because they closed as stale or were replaced.
102
+ */
103
+ holdClosed(previous, next) {
104
+ const nextIds = new Set(next.map(proposal => proposal.approvalId));
105
+ this.holdStale(previous.filter(proposal => proposal.status === 'pending' && !nextIds.has(proposal.approvalId)));
42
106
  }
43
107
  /** Whether the caller may decide this proposal: its own right when one was given, otherwise `canDecide`. */
44
108
  mayDecide(proposal) {
@@ -76,6 +140,11 @@ class NhAssistantAgentProposalsComponent {
76
140
  if (decision === 'reject' && result.status === 'rejected' && result.canGiveFeedback === true) {
77
141
  this.ask([proposal.approvalId], summaryOf(proposal));
78
142
  }
143
+ }, code => {
144
+ if (code === staleCode) {
145
+ // The approval was refused because the proposal no longer fits; show why.
146
+ this.holdStale([proposal]);
147
+ }
79
148
  });
80
149
  }
81
150
  decideSelected(decision) {
@@ -86,6 +155,10 @@ class NhAssistantAgentProposalsComponent {
86
155
  const proposals = this.proposals();
87
156
  this.run(this.api.decideMany(ids, decision), response => {
88
157
  this.selected.set(new Set());
158
+ const stale = response.results
159
+ .filter(outcome => !outcome.succeeded && outcome.code === staleCode)
160
+ .map(outcome => outcome.approvalId);
161
+ this.holdStale(proposals.filter(proposal => stale.includes(proposal.approvalId)));
89
162
  if (decision !== 'reject') {
90
163
  return;
91
164
  }
@@ -143,7 +216,39 @@ class NhAssistantAgentProposalsComponent {
143
216
  ask(approvalIds, summary) {
144
217
  this.feedback.set({ approvalIds, initial: null, placement: 'prompt', summary, saved: false });
145
218
  }
146
- run(request, done) {
219
+ /**
220
+ * Reads `proposals` again by id and keeps those that closed as stale or were replaced as closed
221
+ * cards, with their kind and explanation or their successor.
222
+ */
223
+ holdStale(proposals) {
224
+ if (!this.holdClosedCards() || proposals.length === 0) {
225
+ return;
226
+ }
227
+ // The proposals are read by id, never through their threads.
228
+ const ids = [...new Set(proposals.map(proposal => proposal.approvalId))];
229
+ const batches = [];
230
+ for (let start = 0; start < ids.length; start += NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {
231
+ batches.push(ids.slice(start, start + NH_ASSISTANT_MAX_PROPOSAL_LOOKUP));
232
+ }
233
+ this.lookups.add(forkJoin(batches.map(batch => this.api.lookupProposals(batch))).subscribe({
234
+ next: lookups => {
235
+ const closed = lookups
236
+ .flatMap(lookup => lookup.items)
237
+ .map(item => item.proposal)
238
+ .filter(proposal => proposal.status === 'stale' || isSuperseded(proposal));
239
+ if (closed.length === 0) {
240
+ return;
241
+ }
242
+ this.held.update(held => [
243
+ ...closed,
244
+ ...held.filter(item => !closed.some(proposal => proposal.approvalId === item.approvalId))
245
+ ]);
246
+ },
247
+ // Without the lookup the proposal just leaves the list, as it did before.
248
+ error: () => undefined
249
+ }));
250
+ }
251
+ run(request, done, failed) {
147
252
  this.busy.set(true);
148
253
  this.error.set(null);
149
254
  if (this.feedback()?.saved) {
@@ -158,23 +263,31 @@ class NhAssistantAgentProposalsComponent {
158
263
  },
159
264
  error: failure => {
160
265
  this.busy.set(false);
161
- this.error.set(_toNhAssistantError(failure));
266
+ const error = _toNhAssistantError(failure);
267
+ this.error.set(error);
268
+ failed?.(error.code);
162
269
  this.changed.emit();
163
270
  }
164
271
  });
165
272
  }
166
273
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentProposalsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 } }, outputs: { changed: "changed" }, 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 (proposals().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of proposals(); track proposal.approvalId) {\n <li class=\"card\" [class.selected]=\"selected().has(proposal.approvalId)\">\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>{{ proposal.subjectDisplayName ?? proposal.subjectId }}</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 {{ 'nh-assistant.agent-runs.proposal.status.' + proposal.status | 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.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 <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>{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || proposal.decidedByActorId } }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { 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 }); }
274
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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" }, 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>{{ proposal.subjectDisplayName ?? proposal.subjectId }}</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.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>{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || proposal.decidedByActorId } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span>{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { 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 }); }
168
275
  }
169
276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentProposalsComponent, decorators: [{
170
277
  type: Component,
171
- args: [{ selector: 'nh-assistant-agent-proposals', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent, NhAssistantProposalFeedbackComponent], 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 (proposals().length > 0) {\n <ul class=\"cards\" [attr.aria-busy]=\"busy()\">\n @for (proposal of proposals(); track proposal.approvalId) {\n <li class=\"card\" [class.selected]=\"selected().has(proposal.approvalId)\">\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>{{ proposal.subjectDisplayName ?? proposal.subjectId }}</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 {{ 'nh-assistant.agent-runs.proposal.status.' + proposal.status | 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.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 <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>{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || proposal.decidedByActorId } }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
172
- }], 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 }] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
278
+ args: [{ selector: 'nh-assistant-agent-proposals', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent, NhAssistantProposalFeedbackComponent], 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>{{ proposal.subjectDisplayName ?? proposal.subjectId }}</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.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>{{ 'nh-assistant.agent-runs.proposal.decided-by' | translate: { actor: proposal.decidedByDisplayName || proposal.decidedByActorId } }}</span>\n }\n @if (proposal.status === 'stale' && proposal.staleByActorId) {\n <span>{{ 'nh-assistant.agent-runs.proposal.stale-by' | translate: { actor: proposal.staleByDisplayName || 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
279
+ }], 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"] }] } });
280
+ /** The refusal of an approval because the proposal no longer fits. */
281
+ const staleCode = 'assistant-proposal-stale';
173
282
  /** The application's words for a proposal, falling back to its subject and tool. */
174
283
  function summaryOf(proposal) {
175
284
  return proposal.presentation?.summary
176
285
  ?? `${proposal.subjectDisplayName ?? proposal.subjectId} · ${proposal.presentation?.toolDisplayName ?? proposal.toolId}`;
177
286
  }
287
+ /** True for a proposal a newer proposal for the same objects replaced. */
288
+ function isSuperseded(proposal) {
289
+ return proposal.status === 'withdrawn' && !!proposal.supersededByApprovalId;
290
+ }
178
291
 
179
292
  /**
180
293
  * The approval inbox: pending agent proposals across subjects that the signed-in person may
@@ -182,7 +295,9 @@ function summaryOf(proposal) {
182
295
  * server checks each decision against the proposal's approval policy again. After a rejection the
183
296
  * inbox asks, optionally, what was wrong, also when the rejected proposals have left the list.
184
297
  * With live updates the inbox reloads by itself when agent work changes, for example when a
185
- * colleague decided a proposal or a run proposed a new one.
298
+ * colleague decided a proposal or a run proposed a new one. A proposal that closes because it no
299
+ * longer fits, for example because someone did the work by hand, stays as a closed card with the
300
+ * reason until it is dismissed.
186
301
  */
187
302
  class NhAssistantAgentInboxComponent {
188
303
  constructor() {
@@ -253,7 +368,11 @@ class NhAssistantAgentInboxComponent {
253
368
  this.fetch(quiet);
254
369
  return;
255
370
  }
371
+ const previous = this.items();
256
372
  this.items.set(inbox.items);
373
+ if (quiet) {
374
+ this.proposalList()?.holdClosed(previous, inbox.items);
375
+ }
257
376
  this.total.set(inbox.total);
258
377
  this.loading.set(false);
259
378
  this.loadFailed.set(false);
@@ -269,11 +388,11 @@ class NhAssistantAgentInboxComponent {
269
388
  });
270
389
  }
271
390
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentInboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
272
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 } }, 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 [proposals]=\"items()\" [canDecide]=\"true\" [selectable]=\"true\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\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"], outputs: ["changed"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
391
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 } }, 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 @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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\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"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
273
392
  }
274
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentInboxComponent, decorators: [{
275
394
  type: Component,
276
- 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 [proposals]=\"items()\" [canDecide]=\"true\" [selectable]=\"true\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
395
+ 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 @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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
277
396
  }], 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 }] }] } });
278
397
 
279
398
  /**
@@ -343,11 +462,11 @@ class NhAssistantAgentArtifactsComponent {
343
462
  });
344
463
  }
345
464
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentArtifactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
346
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 (downloadFailed()) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.artifacts.download-failed' | translate }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 (downloadFailed()) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.artifacts.download-failed' | translate }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"], dependencies: [{ kind: "component", type: _NhAssistantIconComponent, selector: "nh-assistant-icon", inputs: ["name"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
347
466
  }
348
467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentArtifactsComponent, decorators: [{
349
468
  type: Component,
350
- args: [{ selector: 'nh-assistant-agent-artifacts', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (downloadFailed()) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.artifacts.download-failed' | translate }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
469
+ args: [{ selector: 'nh-assistant-agent-artifacts', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (downloadFailed()) {\n <p class=\"message error\" role=\"alert\"><nh-assistant-icon name=\"warning\" />{{ 'nh-assistant.agent-runs.artifacts.download-failed' | translate }}</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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
351
470
  }], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
352
471
 
353
472
  /**
@@ -398,11 +517,11 @@ class NhAssistantAgentConsultationsComponent {
398
517
  });
399
518
  }
400
519
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentConsultationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
401
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? 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\" />{{ ['nh-assistant.errors.' + 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\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 }); }
520
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? 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\" />{{ ['nh-assistant.errors.' + 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\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 }); }
402
521
  }
403
522
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentConsultationsComponent, decorators: [{
404
523
  type: Component,
405
- 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 {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? 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\" />{{ ['nh-assistant.errors.' + 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
524
+ 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 {{ 'nh-assistant.agent-runs.consultation.asked-by' | translate: { name: consultation.askerDisplayName ?? 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\" />{{ ['nh-assistant.errors.' + 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
406
525
  }], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
407
526
 
408
527
  /**
@@ -455,11 +574,11 @@ class NhAssistantAgentMemoryComponent {
455
574
  });
456
575
  }
457
576
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentMemoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
458
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
577
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
459
578
  }
460
579
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentMemoryComponent, decorators: [{
461
580
  type: Component,
462
- 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
581
+ 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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
463
582
  }], ctorParameters: () => [], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }] } });
464
583
 
465
584
  const endedStatuses = new Set(['completed', 'failed', 'cancelled']);
@@ -548,11 +667,11 @@ class NhAssistantRunTimelineComponent {
548
667
  });
549
668
  }
550
669
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantRunTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
551
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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" }, 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\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 <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n </div>\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>{{ ['nh-assistant.errors.' + code] | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n <div class=\"card-actions\">\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 </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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\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 }); }
670
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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" }, 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\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 </div>\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>{{ ['nh-assistant.errors.' + code] | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n <div class=\"card-actions\">\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 </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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\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 }); }
552
671
  }
553
672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantRunTimelineComponent, decorators: [{
554
673
  type: Component,
555
- args: [{ selector: 'nh-assistant-run-timeline', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], 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\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 <span class=\"mono muted\">{{ 'nh-assistant.agent-runs.run.trigger' | translate: { trigger: run.triggerId } }}</span>\n </div>\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>{{ ['nh-assistant.errors.' + code] | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n <div class=\"card-actions\">\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 </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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
674
+ args: [{ selector: 'nh-assistant-run-timeline', standalone: true, imports: [DatePipe, TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent], 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\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 </div>\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>{{ ['nh-assistant.errors.' + code] | nhAssistantTranslate: code }}</span>\n }\n </div>\n @if (run.summary) {\n <p class=\"summary\">{{ run.summary }}</p>\n }\n @if ((isOpen(run) && canCancel()) || canRetryRun(run)) {\n <div class=\"card-actions\">\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 </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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
556
675
  }], 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"] }] } });
557
676
 
558
677
  /**
@@ -694,7 +813,7 @@ class NhAssistantAgentThreadViewComponent {
694
813
  });
695
814
  }
696
815
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentThreadViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
697
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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\">{{ thread()?.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate) }}</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 </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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + started.outcome | translate }}\n </p>\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 [proposals]=\"proposals()\" [canDecide]=\"role() === 'approver'\" (changed)=\"loadProposals()\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline [conversationId]=\"current.conversationId\" [role]=\"role()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\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"], outputs: ["changed"] }, { kind: "component", type: NhAssistantRunTimelineComponent, selector: "nh-assistant-run-timeline", inputs: ["conversationId", "role"], outputs: ["changed"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
816
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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\">{{ thread()?.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate) }}</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 </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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + started.outcome | translate }}\n </p>\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 [proposals]=\"proposals()\" [canDecide]=\"role() === 'approver'\" (changed)=\"loadProposals()\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline [conversationId]=\"current.conversationId\" [role]=\"role()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\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"] }, { kind: "component", type: NhAssistantRunTimelineComponent, selector: "nh-assistant-run-timeline", inputs: ["conversationId", "role"], outputs: ["changed"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
698
817
  }
699
818
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantAgentThreadViewComponent, decorators: [{
700
819
  type: Component,
@@ -707,7 +826,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
707
826
  NhAssistantAgentMemoryComponent,
708
827
  NhAssistantAgentArtifactsComponent,
709
828
  NhAssistantAgentConsultationsComponent
710
- ], 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\">{{ thread()?.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate) }}</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 </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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + started.outcome | translate }}\n </p>\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 [proposals]=\"proposals()\" [canDecide]=\"role() === 'approver'\" (changed)=\"loadProposals()\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline [conversationId]=\"current.conversationId\" [role]=\"role()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
829
+ ], 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\">{{ thread()?.subjectDisplayName ?? ('nh-assistant.agent-runs.thread.title' | translate) }}</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 </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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + started.outcome | translate }}\n </p>\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 [proposals]=\"proposals()\" [canDecide]=\"role() === 'approver'\" (changed)=\"loadProposals()\" />\n }\n }\n @case ('runs') {\n <nh-assistant-run-timeline [conversationId]=\"current.conversationId\" [role]=\"role()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
711
830
  }], 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"] }] } });
712
831
 
713
832
  let nextSuggestionsId = 0;
@@ -717,8 +836,9 @@ let nextSuggestionsId = 0;
717
836
  * decides when the viewer may not and the optional question after a rejection, and per agent the
718
837
  * conversation about the subject and, for participants, a start action. `agentId` names the agent
719
838
  * whose conversation the host offers also before it worked on the subject. With live updates the
720
- * view reloads by itself when agent work on its subject changes. Opening a conversation uses
721
- * `NhAssistantPanelService.openSubject` and emits `conversationOpened` afterwards.
839
+ * view reloads by itself when agent work on its subject changes; a proposal that closes because it
840
+ * no longer fits stays as a closed card with the reason until it is dismissed. Opening a
841
+ * conversation uses `NhAssistantPanelService.openSubject` and emits `conversationOpened` afterwards.
722
842
  */
723
843
  class NhAssistantSubjectSuggestionsComponent {
724
844
  constructor() {
@@ -854,7 +974,11 @@ class NhAssistantSubjectSuggestionsComponent {
854
974
  this.subscription?.unsubscribe();
855
975
  this.subscription = this.api.getSubjectWork(this.subjectType(), this.subjectId(), this.agentId()).subscribe({
856
976
  next: work => {
977
+ const previous = this.proposals();
857
978
  this.work.set(work);
979
+ if (quiet) {
980
+ this.proposalList()?.holdClosed(previous, this.proposals());
981
+ }
858
982
  const started = this.started();
859
983
  const startedAgent = started ? work.agents.find(agent => agent.agentId === started.agentId) : undefined;
860
984
  if (started?.receipt.runId && !startedAgent?.thread?.activeRun) {
@@ -881,11 +1005,11 @@ class NhAssistantSubjectSuggestionsComponent {
881
1005
  });
882
1006
  }
883
1007
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantSubjectSuggestionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
884
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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" }, 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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + start.receipt.outcome | translate }}\n </p>\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.agentId) | nhAssistantTranslate: 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 [proposals]=\"proposals()\" [decisionRights]=\"decisionRights()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\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"], outputs: ["changed"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1008
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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" }, 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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + start.receipt.outcome | translate }}\n </p>\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.agentId) | nhAssistantTranslate: 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 @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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\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"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: _NhAssistantTranslatePipe, name: "nhAssistantTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
885
1009
  }
886
1010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAssistantSubjectSuggestionsComponent, decorators: [{
887
1011
  type: Component,
888
- args: [{ selector: 'nh-assistant-subject-suggestions', standalone: true, imports: [TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent, NhAssistantAgentProposalsComponent], 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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + start.receipt.outcome | translate }}\n </p>\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.agentId) | nhAssistantTranslate: 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 [proposals]=\"proposals()\" [decisionRights]=\"decisionRights()\" (changed)=\"load()\" />\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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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-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}.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}\n"] }]
1012
+ args: [{ selector: 'nh-assistant-subject-suggestions', standalone: true, imports: [TranslatePipe, _NhAssistantTranslatePipe, _NhAssistantIconComponent, NhAssistantAgentProposalsComponent], 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 <p class=\"message success\" role=\"status\">\n <nh-assistant-icon name=\"check\" />{{ 'nh-assistant.agent-runs.thread.outcome.' + start.receipt.outcome | translate }}\n </p>\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.agentId) | nhAssistantTranslate: 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 @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 select,:host textarea{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 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 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 select[aria-invalid=true],:host textarea[aria-invalid=true]{border-color:var(--nha-danger)}:host textarea{line-height:1.45;resize:vertical}: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 .message{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}: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 nh-assistant-icon{flex:none}:host .primary,:host .secondary,:host .danger{display:inline-flex;align-items:center;justify-content:center;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)}.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}.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}\n"] }]
889
1013
  }], 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"] }] } });
890
1014
 
891
1015
  /*