@inspecto-dev/core 0.3.10 → 0.3.11

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 +1 @@
1
- {"version":3,"sources":["../src/annotate-session.ts","../src/styles-classes.ts","../src/styles-annotate.ts","../src/styles-launcher.ts","../src/styles-overlay-menu.ts","../src/styles-theme.ts","../src/styles.ts","../src/icons.ts","../src/i18n.ts","../src/annotate-overlay-dom.ts","../src/annotate-overlay-helpers.ts","../src/annotate-overlay.ts","../src/component-utils.ts","../src/component-annotate-shared.ts","../src/component-annotate-targets.ts","../src/css-context.ts","../src/annotate-full-prompt.ts","../src/http.ts","../src/component-annotate-ui.ts","../src/component-annotate.ts","../src/component-launcher.ts","../src/intents.ts","../src/fix-bug-prompt.ts","../src/menu-helpers.ts","../src/menu-actions.ts","../src/menu-send.ts","../src/menu-header.ts","../src/menu-position.ts","../src/menu.ts","../src/runtime-context-shared.ts","../src/runtime-context-capture.ts","../src/runtime-context-selection.ts","../src/runtime-context.ts","../src/component-interactions.ts","../src/annotate-sidebar-helpers.ts","../src/annotate-sidebar-dom.ts","../src/annotate-sidebar-renderers.ts","../src/annotate-sidebar.ts","../src/component-mode-ui.ts","../src/overlay.ts","../src/component-lifecycle.ts","../src/component-evidence.ts","../src/component.ts","../src/index.ts"],"sourcesContent":["import type {\n AnnotationTarget,\n AnnotationIntent,\n FeedbackRecord,\n FeedbackRecordDraft,\n FeedbackRecordSession,\n} from '@inspecto-dev/types'\n\nfunction sameLocation(a: AnnotationTarget, b: AnnotationTarget): boolean {\n return (\n a.location.file === b.location.file &&\n a.location.line === b.location.line &&\n a.location.column === b.location.column &&\n a.selector === b.selector\n )\n}\n\nfunction createId(prefix: string): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}`\n )\n}\n\nfunction createEmptyRecordDraft(): FeedbackRecordDraft {\n return {\n id: createId('record'),\n target: null,\n note: '',\n intent: 'review',\n cssContextEnabled: false,\n }\n}\n\nfunction getNextDisplayOrder(session: FeedbackRecordSession): number {\n return (\n session.records.reduce((maxOrder, record) => Math.max(maxOrder, record.displayOrder), 0) + 1\n )\n}\n\nexport function createEmptySession(): FeedbackRecordSession {\n return {\n current: createEmptyRecordDraft(),\n records: [],\n }\n}\n\nexport function setCurrentRecordTarget(\n session: FeedbackRecordSession,\n target: AnnotationTarget,\n): FeedbackRecordSession {\n const existingRecord = session.records.find(record => sameLocation(record.target, target))\n if (existingRecord) {\n return {\n ...session,\n current: {\n id: existingRecord.id,\n displayOrder: existingRecord.displayOrder,\n target: existingRecord.target,\n note: existingRecord.note,\n intent: existingRecord.intent,\n cssContextEnabled: existingRecord.cssContextEnabled ?? false,\n },\n records: session.records.filter(record => record.id !== existingRecord.id),\n }\n }\n\n return {\n ...session,\n current: {\n ...session.current,\n target,\n cssContextEnabled: session.current.target\n ? (session.current.cssContextEnabled ?? false)\n : false,\n },\n }\n}\n\nexport function updateCurrentRecordNote(\n session: FeedbackRecordSession,\n note: string,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n note,\n },\n }\n}\n\nexport function updateCurrentRecordIntent(\n session: FeedbackRecordSession,\n intent: AnnotationIntent,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n intent,\n },\n }\n}\n\nexport function updateCurrentRecordCssContextEnabled(\n session: FeedbackRecordSession,\n enabled: boolean,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n cssContextEnabled: enabled,\n },\n }\n}\n\nexport function clearCurrentRecord(session: FeedbackRecordSession): FeedbackRecordSession {\n return {\n ...session,\n current: createEmptyRecordDraft(),\n }\n}\n\nexport function saveCurrentRecord(session: FeedbackRecordSession): FeedbackRecordSession {\n const { current } = session\n if (!current.target) {\n return session\n }\n\n const record: FeedbackRecord = {\n id: current.id,\n displayOrder: current.displayOrder ?? getNextDisplayOrder(session),\n target: current.target,\n note: current.note,\n intent: current.intent,\n cssContextEnabled: current.cssContextEnabled ?? false,\n }\n\n return {\n ...session,\n current: createEmptyRecordDraft(),\n records: [...session.records, record],\n }\n}\n\nexport function removeRecord(\n session: FeedbackRecordSession,\n recordId: string,\n): FeedbackRecordSession {\n return {\n ...session,\n records: session.records.filter(record => record.id !== recordId),\n }\n}\n\nexport function editRecord(\n session: FeedbackRecordSession,\n recordId: string,\n): FeedbackRecordSession {\n const record = session.records.find(entry => entry.id === recordId)\n if (!record) return session\n\n return {\n ...session,\n current: {\n id: record.id,\n displayOrder: record.displayOrder,\n target: record.target,\n note: record.note,\n intent: record.intent,\n cssContextEnabled: record.cssContextEnabled ?? false,\n },\n records: session.records.filter(entry => entry.id !== recordId),\n }\n}\n","export const overlayClass = 'inspecto-overlay'\nexport const menuClass = 'inspecto-menu'\nexport const menuTitleClass = 'inspecto-menu-title'\nexport const menuMetaClass = 'inspecto-menu-meta'\nexport const menuSectionClass = 'inspecto-menu-section'\nexport const menuItemClass = 'inspecto-menu-item'\nexport const loadingSpinnerClass = 'inspecto-spinner'\nexport const errorMsgClass = 'inspecto-error'\nexport const badgeClass = 'inspecto-badge'\nexport const menuInputClass = 'inspecto-menu-input'\nexport const menuInputWrapperClass = 'inspecto-menu-input-wrapper'\nexport const menuInputIconClass = 'inspecto-menu-input-icon'\nexport const menuContextSummaryClass = 'inspecto-menu-context-summary'\nexport const menuContextPreviewClass = 'inspecto-menu-context-preview'\nexport const menuContextToggleClass = 'inspecto-menu-context-toggle'\nexport const runtimeToggleClass = 'inspecto-runtime-toggle'\nexport const runtimeToggleIconClass = 'inspecto-runtime-toggle-icon'\nexport const runtimeToggleBadgeClass = 'inspecto-runtime-toggle-badge'\nexport const annotateSidebarClass = 'inspecto-annotate-sidebar'\nexport const annotateSidebarHeaderClass = 'inspecto-annotate-sidebar-header'\nexport const annotateSidebarSectionClass = 'inspecto-annotate-sidebar-section'\nexport const annotateTargetListClass = 'inspecto-annotate-target-list'\nexport const annotateQueueListClass = 'inspecto-annotate-queue-list'\nexport const annotateBadgeClass = 'inspecto-annotate-badge'\nexport const annotateSidebarFooterClass = 'inspecto-annotate-sidebar-footer'\nexport const annotateSidebarActionsClass = 'inspecto-annotate-sidebar-actions'\nexport const annotateSidebarButtonClass = 'inspecto-annotate-sidebar-button'\nexport const annotateSidebarInputClass = 'inspecto-annotate-sidebar-input'\nexport const annotateSidebarSelectClass = 'inspecto-annotate-sidebar-select'\nexport const annotateSidebarTextClass = 'inspecto-annotate-sidebar-text'\nexport const annotateSidebarEmptyClass = 'inspecto-annotate-sidebar-empty'\nexport const annotateSidebarQueueMetaClass = 'inspecto-annotate-sidebar-queue-meta'\nexport const annotateSidebarQueueItemClass = 'inspecto-annotate-sidebar-queue-item'\nexport const annotateSidebarTargetItemClass = 'inspecto-annotate-sidebar-target-item'\nexport const annotateSidebarLabelClass = 'inspecto-annotate-sidebar-label'\nexport const annotateSidebarFieldClass = 'inspecto-annotate-sidebar-field'\nexport const annotateSidebarInlineActionClass = 'inspecto-annotate-sidebar-inline-action'\nexport const annotateSidebarChipListClass = 'inspecto-annotate-sidebar-chip-list'\nexport const annotateSidebarChipClass = 'inspecto-annotate-sidebar-chip'\nexport const annotateSidebarChipPanelClass = 'inspecto-annotate-sidebar-chip-panel'\nexport const annotateSidebarChipFieldClass = 'inspecto-annotate-sidebar-chip-field'\nexport const annotateSidebarHintClass = 'inspecto-annotate-sidebar-hint'\nexport const tooltipClass = 'inspecto-tooltip'\nexport const tooltipTopClass = 'inspecto-tooltip-top'\nexport const tooltipBottomClass = 'inspecto-tooltip-bottom'\nexport const tagClass = 'inspecto-tag'\nexport const idClass = 'inspecto-id'\nexport const classClass = 'inspecto-class'\nexport const dimClass = 'inspecto-dim'\nexport const separatorClass = 'inspecto-separator'\nexport const sourceClass = 'inspecto-source'\nexport const shortcutIconClass = 'ai-shortcut-icon'\n","import {\n annotateBadgeClass,\n annotateQueueListClass,\n annotateSidebarActionsClass,\n annotateSidebarButtonClass,\n annotateSidebarChipClass,\n annotateSidebarChipFieldClass,\n annotateSidebarChipListClass,\n annotateSidebarChipPanelClass,\n annotateSidebarClass,\n annotateSidebarEmptyClass,\n annotateSidebarFieldClass as _annotateSidebarFieldClass,\n annotateSidebarFooterClass,\n annotateSidebarHeaderClass,\n annotateSidebarHintClass,\n annotateSidebarInlineActionClass,\n annotateSidebarInputClass,\n annotateSidebarLabelClass,\n annotateSidebarQueueItemClass,\n annotateSidebarQueueMetaClass,\n annotateSidebarSectionClass,\n annotateSidebarSelectClass,\n annotateSidebarTargetItemClass,\n annotateSidebarTextClass,\n annotateTargetListClass,\n runtimeToggleClass,\n} from './styles-classes.js'\n\nexport const annotateStyles = `\n .${annotateSidebarClass} {\n position: fixed;\n top: 18px;\n right: 18px;\n z-index: 2147483647;\n width: min(408px, calc(100vw - 28px));\n min-height: 240px;\n max-height: calc(100vh - 36px);\n display: flex;\n flex-direction: column;\n gap: 16px;\n box-sizing: border-box;\n padding: 18px 18px 18px;\n overflow: visible;\n color: var(--inspecto-text-primary);\n background:\n radial-gradient(circle at top right, rgba(14, 165, 233, 0.18), transparent 36%),\n radial-gradient(circle at top left, rgba(14, 165, 233, 0.08), transparent 28%),\n linear-gradient(180deg, rgba(13, 20, 31, 0.985) 0%, rgba(8, 14, 24, 0.985) 100%);\n border: 1px solid rgba(148, 163, 184, 0.16);\n border-radius: 28px;\n box-shadow: var(--inspecto-shadow-floating);\n font-family: 'SF Pro Display', 'Segoe UI', 'Inter', sans-serif;\n pointer-events: auto;\n backdrop-filter: blur(18px) saturate(140%);\n -webkit-backdrop-filter: blur(18px) saturate(140%);\n }\n\n .${annotateSidebarHeaderClass} {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid rgba(148, 163, 184, 0.14);\n }\n\n .${annotateSidebarLabelClass} {\n display: flex;\n flex-direction: column;\n gap: 7px;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .${annotateSidebarLabelClass} [data-inspecto-annotate-title=\"true\"] {\n font-size: 16px;\n line-height: 1.15;\n font-weight: 760;\n color: var(--inspecto-text-primary);\n letter-spacing: -0.02em;\n }\n\n .${annotateSidebarLabelClass} [data-inspecto-annotate-header-status=\"true\"] {\n display: inline-flex;\n align-items: center;\n align-self: flex-start;\n min-height: 26px;\n padding: 0 10px;\n border-radius: var(--inspecto-radius-pill);\n background: rgba(148, 163, 184, 0.1);\n border: 1px solid rgba(148, 163, 184, 0.14);\n font-size: 11px;\n line-height: 1.2;\n font-weight: 650;\n color: var(--inspecto-text-secondary);\n }\n\n .${annotateSidebarTextClass} {\n font-size: 12px;\n line-height: 1.55;\n letter-spacing: 0.01em;\n text-transform: none;\n color: var(--inspecto-text-secondary);\n font-weight: 500;\n }\n\n .${annotateSidebarSectionClass} {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n padding: 14px;\n border: 1px solid rgba(148, 163, 184, 0.12);\n border-radius: 20px;\n background: linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(148, 163, 184, 0.04) 100%);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] { gap: 8px; padding: 10px 12px; }\n .${annotateSidebarSectionClass}[data-variant=\"draft\"] { gap: 0; padding: 0; border: none; background: transparent; }\n .${annotateSidebarSectionClass}[data-variant=\"chip-preview\"] { gap: 8px; padding: 12px; background: rgba(255, 255, 255, 0.045); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] { padding: 0; overflow: hidden; background: rgba(255, 255, 255, 0.038); border-color: rgba(148, 163, 184, 0.16); }\n .${annotateSidebarSectionClass}[data-variant=\"latest-session\"] {\n padding: 14px;\n background:\n radial-gradient(circle at top right, rgba(14, 165, 233, 0.12), transparent 34%),\n linear-gradient(180deg, rgba(255, 255, 255, 0.055) 0%, rgba(148, 163, 184, 0.05) 100%);\n border-color: rgba(14, 165, 233, 0.18);\n }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] { padding: 0; gap: 0; background: transparent; border: none; border-radius: 0; opacity: 0.72; }\n\n .${annotateSidebarSectionClass} h3 {\n margin: 0;\n font-size: 12px;\n line-height: 1.2;\n color: var(--inspecto-text-primary);\n font-weight: 700;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] {\n flex: 1 1 auto;\n justify-content: center;\n gap: 12px;\n padding: 20px 6px 8px;\n background: transparent;\n border-color: transparent;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-title=\"true\"] {\n font-size: 18px;\n line-height: 1.18;\n font-weight: 760;\n color: var(--inspecto-text-primary);\n max-width: 20ch;\n letter-spacing: -0.03em;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-body=\"true\"] {\n color: var(--inspecto-text-secondary);\n font-size: 12px;\n line-height: 1.62;\n }\n\n .${annotateSidebarInputClass},\n .${annotateSidebarSelectClass} {\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-md);\n background: rgba(255, 255, 255, 0.06);\n color: var(--inspecto-text-primary);\n font: inherit;\n font-size: 13px;\n outline: none;\n }\n\n .${annotateSidebarInputClass} {\n min-height: 112px;\n padding: 14px 15px;\n resize: vertical;\n line-height: 1.55;\n }\n\n .${annotateSidebarHintClass} {\n font-size: 11px;\n line-height: 1.45;\n color: var(--inspecto-text-tertiary);\n }\n\n .${annotateSidebarChipListClass} { display: flex; flex-wrap: wrap; gap: 6px; }\n\n .${annotateSidebarChipClass} {\n appearance: none;\n border: 1px solid rgba(14, 165, 233, 0.24);\n background: rgba(14, 165, 233, 0.14);\n color: #d7f4ff;\n border-radius: var(--inspecto-radius-pill);\n padding: 6px 9px 6px 11px;\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n line-height: 1.2;\n cursor: default;\n gap: 5px;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;\n }\n\n .${annotateSidebarChipClass}[data-state=\"draft\"] {\n border-color: rgba(96, 165, 250, 0.24);\n background: rgba(96, 165, 250, 0.12);\n color: #bfdbfe;\n }\n\n .${annotateSidebarChipClass}:hover,\n .${annotateSidebarChipClass}:focus-visible {\n outline: none;\n background: rgba(14, 165, 233, 0.22);\n border-color: rgba(14, 165, 233, 0.42);\n color: #ffffff;\n transform: translateY(-1px);\n }\n\n .${annotateSidebarChipClass}[data-state=\"draft\"]:hover,\n .${annotateSidebarChipClass}[data-state=\"draft\"]:focus-visible {\n background: rgba(96, 165, 250, 0.2);\n border-color: rgba(96, 165, 250, 0.42);\n }\n\n .${annotateSidebarChipPanelClass} {\n display: grid;\n grid-template-columns: minmax(72px, auto) minmax(0, 1fr);\n gap: 8px 10px;\n padding: 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-md);\n background: rgba(255, 255, 255, 0.028);\n }\n\n .${annotateSidebarChipFieldClass} {\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .${annotateSidebarChipPanelClass} > .${annotateSidebarChipFieldClass} + div {\n min-width: 0;\n font-size: 12px;\n line-height: 1.45;\n color: var(--inspecto-text-primary);\n word-break: break-word;\n }\n\n .${annotateSidebarSelectClass} { height: 36px; padding: 0 10px; }\n .${annotateSidebarInputClass}:focus, .${annotateSidebarSelectClass}:focus { border-color: var(--inspecto-border-focus); box-shadow: 0 0 0 1px var(--inspecto-border-focus); }\n\n .${annotateTargetListClass}, .${annotateQueueListClass} {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 220px;\n overflow: auto;\n padding: 6px 10px 12px;\n }\n\n .${annotateSidebarTargetItemClass}, .${annotateSidebarQueueItemClass} {\n display: flex;\n flex-direction: column;\n gap: 5px;\n padding: 12px 12px;\n margin: 0;\n border: 1px solid transparent;\n border-radius: 16px;\n background: rgba(255, 255, 255, 0.022);\n cursor: pointer;\n box-sizing: border-box;\n transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;\n }\n\n .${annotateSidebarQueueItemClass}:hover {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(148, 163, 184, 0.16);\n transform: translateY(-1px);\n }\n .${annotateSidebarQueueItemClass}:focus-visible {\n outline: none;\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--inspecto-border-focus);\n box-shadow: 0 0 0 1px var(--inspecto-border-focus);\n }\n .${annotateSidebarQueueItemClass}[data-selected=\"true\"] {\n background: linear-gradient(180deg, rgba(14, 165, 233, 0.12) 0%, rgba(14, 165, 233, 0.07) 100%);\n border-color: rgba(14, 165, 233, 0.28);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 10px 24px rgba(8, 14, 24, 0.16);\n }\n .${annotateSidebarQueueItemClass} > :not(.${annotateSidebarActionsClass}):first-child {\n font-size: 12px;\n line-height: 1.45;\n color: var(--inspecto-text-primary);\n word-break: break-word;\n font-weight: 620;\n }\n .${annotateSidebarQueueItemClass} > .${annotateSidebarQueueMetaClass} { order: 2; font-size: 10px; line-height: 1.4; color: var(--inspecto-text-tertiary); }\n\n .${annotateSidebarTargetItemClass} {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: \"label action\";\n column-gap: 10px;\n align-items: center;\n padding: 10px 12px;\n border-color: rgba(148, 163, 184, 0.12);\n background: rgba(255, 255, 255, 0.02);\n }\n\n .${annotateTargetListClass} > .${annotateSidebarTargetItemClass}:last-child { margin-bottom: 0; }\n\n .${annotateBadgeClass} {\n grid-area: label;\n display: block;\n align-self: auto;\n padding: 0;\n border-radius: 0;\n background: transparent;\n color: var(--inspecto-text);\n font-size: 12px;\n font-weight: 600;\n line-height: 1.4;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .${annotateSidebarEmptyClass}, .${annotateSidebarQueueMetaClass} {\n color: rgba(255, 255, 255, 0.58);\n font-size: 11px;\n line-height: 1.5;\n }\n\n .${annotateSidebarFooterClass} { display: flex; flex-direction: column; gap: 10px; padding-top: 4px; }\n .${annotateSidebarFooterClass} .${annotateSidebarActionsClass} { justify-content: flex-end; align-items: stretch; gap: 10px; }\n .${annotateSidebarActionsClass} { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; justify-content: flex-end; }\n\n .${annotateSidebarButtonClass} {\n appearance: none;\n border: 1px solid var(--inspecto-border-subtle);\n background: rgba(255, 255, 255, 0.05);\n color: var(--inspecto-text-primary);\n border-radius: var(--inspecto-radius-pill);\n padding: 8px 12px;\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;\n }\n\n .${annotateSidebarButtonClass}[data-role=\"mode\"][data-selected=\"true\"] { background: rgba(255, 255, 255, 0.1); color: #ffffff; border-color: transparent; }\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] .${annotateSidebarActionsClass} { gap: 4px; padding: 4px; border: 1px solid var(--inspecto-border-muted); border-radius: var(--inspecto-radius-pill); background: rgba(255, 255, 255, 0.03); flex-wrap: nowrap; }\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] .${annotateSidebarButtonClass}[data-role=\"mode\"] { flex: 1 1 0; justify-content: center; padding: 8px 10px; background: transparent; border-color: transparent; color: var(--inspecto-text-secondary); }\n .${annotateSidebarHeaderClass} .${annotateSidebarButtonClass} { width: 30px; height: 30px; padding: 0; border-radius: var(--inspecto-radius-pill); display: inline-flex; align-items: center; justify-content: center; font-size: 12px; line-height: 1; flex: 0 0 auto; }\n .${annotateSidebarHeaderClass} .${runtimeToggleClass} { overflow: visible; }\n .${annotateSidebarHeaderClass} [data-inspecto-annotate-header-actions=\"true\"] { padding: 4px; border-radius: 999px; background: rgba(255, 255, 255, 0.025); border: 1px solid rgba(255, 255, 255, 0.05); gap: 4px; flex-wrap: nowrap; flex: 0 0 auto; margin-top: 1px; }\n .${annotateSidebarButtonClass}:hover { background: var(--inspecto-surface-hover); color: #ffffff; border-color: rgba(148, 163, 184, 0.12); transform: translateY(-1px); }\n .${annotateSidebarButtonClass}:disabled { opacity: 0.5; cursor: not-allowed; }\n .${annotateSidebarClass} .${annotateSidebarButtonClass}.primary {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: rgba(14, 165, 233, 0.22);\n box-shadow: var(--inspecto-shadow-accent);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass} {\n min-height: 40px;\n padding: 0 14px;\n font-size: 11px;\n font-weight: 650;\n border-radius: var(--inspecto-radius-pill);\n justify-content: center;\n display: inline-flex;\n align-items: center;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-emphasis=\"secondary\"] {\n background: rgba(255, 255, 255, 0.04);\n color: var(--inspecto-text-secondary);\n border-color: rgba(148, 163, 184, 0.12);\n box-shadow: none;\n opacity: 0.92;\n white-space: nowrap;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"quick-ask\"][data-emphasis=\"secondary\"] {\n background: rgba(255, 255, 255, 0.04);\n color: var(--inspecto-text-secondary);\n border-color: rgba(148, 163, 184, 0.12);\n text-decoration: none;\n min-height: 40px;\n padding: 0 14px;\n box-shadow: none;\n white-space: nowrap;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-emphasis=\"secondary\"]:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #ffffff;\n border-color: rgba(255, 255, 255, 0.12);\n transform: translateY(-1px);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"quick-ask\"][data-emphasis=\"secondary\"]:hover {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.12);\n color: #ffffff;\n transform: translateY(-1px);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"raw-preview\"] { min-width: 48px; justify-content: center; color: var(--inspecto-text-secondary); background: rgba(255, 255, 255, 0.045); padding: 0 10px; }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"raw-preview\"][data-selected=\"true\"] { background: rgba(93, 82, 243, 0.16); border-color: rgba(93, 82, 243, 0.32); color: #e5e2ff; }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"send-all\"] { min-width: 76px; }\n\n .${annotateSidebarInlineActionClass} {\n grid-area: action;\n align-self: center;\n justify-self: end;\n appearance: none;\n border: none;\n background: transparent;\n color: var(--inspecto-text-tertiary);\n width: 20px;\n height: 20px;\n padding: 0;\n font: inherit;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n border-radius: var(--inspecto-radius-pill);\n transition: color 0.15s ease, background 0.15s ease, opacity 0.15s ease;\n }\n\n .${annotateSidebarInlineActionClass}:hover { color: #ffffff; background: var(--inspecto-surface-hover); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 10px; cursor: pointer; font-size: 11px; font-weight: 600; color: var(--inspecto-text-secondary); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary::-webkit-details-marker { display: none; }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary::after { content: '▾'; font-size: 11px; color: rgba(255, 255, 255, 0.38); transition: transform 0.15s ease; }\n .${annotateSidebarSectionClass}[data-variant=\"records\"][open] > summary::after { transform: rotate(180deg); }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] > summary { list-style: none; cursor: pointer; font-size: 10px; font-weight: 600; color: var(--inspecto-text-tertiary); text-transform: none; letter-spacing: 0.01em; }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] > summary::-webkit-details-marker { display: none; }\n .${annotateSidebarTextClass}[data-variant=\"full-prompt\"] { margin: 6px 0 0; padding: 9px 10px; border: 1px solid var(--inspecto-border-muted); border-radius: var(--inspecto-radius-sm); background: rgba(255, 255, 255, 0.02); color: var(--inspecto-text-secondary); font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace; font-size: 10px; line-height: 1.5; white-space: pre-wrap; word-break: break-word; max-height: 220px; overflow: auto; }\n`\n","import { badgeClass } from './styles-classes.js'\n\nexport const launcherStyles = `\n .${badgeClass} {\n position: fixed;\n bottom: 18px;\n right: 18px;\n z-index: 2147483645;\n background: var(--inspecto-badge-bg);\n color: var(--inspecto-badge-text);\n border: var(--inspecto-badge-border);\n border-radius: var(--inspecto-radius-pill);\n min-width: 128px;\n width: auto;\n min-height: 50px;\n padding: 8px 11px;\n font-size: 12px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n cursor: pointer;\n opacity: 0.98;\n transition: background 0.2s, color 0.2s, opacity 0.2s, box-shadow 0.2s, border-color 0.2s, transform 0.18s ease;\n pointer-events: all;\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 9px;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n position: fixed;\n overflow: visible;\n }\n\n .${badgeClass}-content {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 9px;\n min-width: 0;\n padding-right: 58px;\n }\n\n .${badgeClass}-eyes {\n position: absolute;\n top: 50%;\n right: 22px;\n display: inline-flex;\n align-items: center;\n gap: 3px;\n pointer-events: none;\n padding: 3px 4px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.04);\n border: 1px solid rgba(255, 255, 255, 0.05);\n transform: translateY(-50%);\n transition:\n opacity 0.18s ease,\n background 0.18s ease,\n border-color 0.18s ease;\n opacity: 0.78;\n }\n\n .${badgeClass}-eyes[data-state=\"active\"] { opacity: 1; }\n .${badgeClass}-eyes[data-mood=\"averted\"] {\n background: rgba(255, 255, 255, 0.028);\n border-color: rgba(255, 255, 255, 0.04);\n }\n .${badgeClass}-eyes[data-mood=\"idle\"] {\n background: rgba(255, 255, 255, 0.025);\n border-color: rgba(255, 255, 255, 0.035);\n }\n\n .${badgeClass}-eye {\n width: 14px;\n height: 14px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.92);\n box-shadow:\n inset 0 0 0 1px rgba(17, 17, 19, 0.16),\n 0 1px 2px rgba(0, 0, 0, 0.18);\n position: relative;\n transition: transform 0.18s ease, opacity 0.18s ease;\n opacity: 0.92;\n }\n\n .${badgeClass}-eyes[data-mood=\"idle\"] .${badgeClass}-eye {\n transform: scale(0.96);\n opacity: 0.82;\n }\n\n .${badgeClass}-eyes[data-mood=\"averted\"] .${badgeClass}-eye {\n transform: scaleY(0.92);\n opacity: 0.94;\n }\n\n .${badgeClass}-eye-pupil {\n position: absolute;\n left: 50%;\n top: 50%;\n width: 5px;\n height: 5px;\n margin-left: -2.5px;\n margin-top: -2.5px;\n border-radius: 999px;\n background: rgba(21, 21, 25, 0.92);\n transition: transform 0.14s ease-out;\n will-change: transform;\n }\n\n .${badgeClass}-indicator {\n width: 11px;\n height: 11px;\n border-radius: var(--inspecto-radius-pill);\n flex: 0 0 auto;\n background: rgba(255, 255, 255, 0.44);\n box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.055);\n transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;\n }\n .${badgeClass}-indicator[data-state=\"ready\"] { background: rgba(255, 255, 255, 0.56); box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.05); }\n .${badgeClass}-indicator[data-state=\"inspect\"] { background: #67c6ff; box-shadow: 0 0 0 7px rgba(103, 198, 255, 0.2); }\n .${badgeClass}-indicator[data-state=\"annotate\"] { background: var(--inspecto-accent-primary-strong); box-shadow: 0 0 0 7px rgba(70, 57, 215, 0.2); }\n .${badgeClass}-indicator[data-state=\"paused\"] { background: #f59e0b; box-shadow: 0 0 0 7px rgba(245, 158, 11, 0.18); }\n\n .${badgeClass}-label {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 3px;\n min-width: 0;\n }\n\n .${badgeClass}-title {\n display: inline-flex;\n align-items: center;\n font-size: 9px;\n line-height: 1.15;\n font-weight: 600;\n color: var(--inspecto-text-secondary);\n letter-spacing: 0.03em;\n text-transform: none;\n }\n\n .${badgeClass}-state {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n font-size: 11px;\n line-height: 1.2;\n color: var(--inspecto-text-primary);\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 0;\n font-weight: 700;\n letter-spacing: 0.01em;\n opacity: 1;\n }\n\n .${badgeClass}-state[data-state=\"paused\"] {\n color: #ffd494;\n }\n\n .${badgeClass}-panel {\n display: none;\n position: absolute;\n right: 0;\n bottom: calc(100% + 10px);\n flex-direction: column;\n min-width: 272px;\n gap: 10px;\n padding: 10px;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: 20px;\n background:\n radial-gradient(circle at bottom right, rgba(93, 82, 243, 0.08), transparent 36%),\n rgba(28, 28, 32, 0.96);\n color: var(--inspecto-text-primary);\n box-shadow: 0 22px 40px rgba(0, 0, 0, 0.26);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n }\n\n .${badgeClass}-panel-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 10px;\n padding: 2px 4px 4px;\n }\n\n .${badgeClass}-panel-header-copy {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .${badgeClass}-panel-header-actions {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n }\n\n .${badgeClass}-panel-header [data-inspecto-launcher-panel-title=\"true\"] {\n font-size: 11px;\n font-weight: 700;\n line-height: 1.35;\n color: var(--inspecto-text-primary);\n }\n\n .${badgeClass}-panel-header [data-inspecto-launcher-panel-subtitle=\"true\"] {\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n }\n\n .${badgeClass}-panel-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .${badgeClass}-panel-group[data-inspecto-launcher-utility-group=\"true\"] {\n padding-top: 6px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n gap: 6px;\n }\n\n .${badgeClass}-panel-button {\n appearance: none;\n width: 100%;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: 14px;\n padding: 11px 12px 10px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 4px;\n background: rgba(255, 255, 255, 0.035);\n color: var(--inspecto-text-primary);\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;\n text-align: left;\n min-height: 84px;\n }\n\n .${badgeClass}-panel-button [data-inspecto-launcher-title=\"true\"] {\n display: block;\n font-size: 11px;\n font-weight: 700;\n line-height: 1.25;\n text-align: left;\n }\n\n .${badgeClass}-panel-button [data-inspecto-launcher-description=\"true\"] {\n display: block;\n font-size: 10px;\n line-height: 1.35;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.56);\n text-align: left;\n max-width: none;\n }\n\n .${badgeClass}-panel-button.active {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: transparent;\n box-shadow: 0 14px 24px rgba(70, 57, 215, 0.28);\n }\n\n .${badgeClass}-panel-button.active [data-inspecto-launcher-description=\"true\"] {\n color: rgba(255, 255, 255, 0.86);\n }\n\n .${badgeClass}-panel-button:hover {\n background: rgba(255, 255, 255, 0.055);\n color: #ffffff;\n border-color: rgba(255, 255, 255, 0.1);\n transform: translateY(-1px);\n box-shadow: 0 8px 14px rgba(0, 0, 0, 0.12);\n }\n\n .${badgeClass}-panel-button:disabled { cursor: not-allowed; opacity: 0.5; }\n\n .${badgeClass}-panel-toggle-button {\n appearance: none;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-pill);\n background: var(--inspecto-surface-subtle);\n color: var(--inspecto-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n }\n\n .${badgeClass}-panel-toggle-button svg {\n width: 14px;\n height: 14px;\n display: block;\n }\n\n .${badgeClass}-panel-toggle-button[aria-pressed=\"true\"] {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: transparent;\n box-shadow: 0 10px 18px rgba(70, 57, 215, 0.24);\n }\n\n .${badgeClass}-panel-toggle-button:hover {\n transform: translateY(-1px);\n border-color: rgba(255, 255, 255, 0.12);\n }\n\n .${badgeClass}-panel-status-text {\n font-size: 10px;\n font-weight: 600;\n line-height: 1.2;\n color: var(--inspecto-text-secondary);\n white-space: nowrap;\n text-align: right;\n }\n\n .${badgeClass}-panel-hint {\n font-size: 10px;\n line-height: 1.4;\n color: rgba(255, 255, 255, 0.46);\n padding: 0;\n }\n\n .${badgeClass}.active {\n background: var(--inspecto-surface-floating);\n color: var(--inspecto-text-primary);\n border: 1px solid var(--inspecto-border-subtle);\n box-shadow: 0 16px 30px rgba(0, 0, 0, 0.22);\n }\n\n .${badgeClass}.disabled {\n background: rgba(20, 20, 22, 0.72);\n color: rgba(229, 229, 229, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.06);\n }\n\n .${badgeClass}:hover {\n opacity: 1;\n border-color: rgba(255, 255, 255, 0.14);\n transform: translateY(-1px) scale(1.02);\n }\n\n .${badgeClass}:hover .${badgeClass}-indicator {\n transform: scale(1.04);\n }\n`\n","import {\n classClass,\n dimClass,\n errorMsgClass,\n idClass,\n loadingSpinnerClass,\n menuClass,\n menuContextPreviewClass,\n menuContextSummaryClass,\n menuContextToggleClass,\n menuInputClass,\n menuInputIconClass,\n menuInputWrapperClass,\n menuItemClass,\n menuMetaClass,\n menuSectionClass,\n menuTitleClass,\n overlayClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n separatorClass,\n shortcutIconClass,\n sourceClass,\n tagClass,\n tooltipBottomClass,\n tooltipClass,\n tooltipTopClass,\n} from './styles-classes.js'\n\nexport const overlayMenuStyles = `\n .${overlayClass} {\n position: fixed;\n pointer-events: none;\n z-index: 2147483646;\n border: 1px dashed var(--inspecto-overlay-border);\n background: var(--inspecto-overlay-bg);\n box-sizing: border-box;\n transition: all 0.05s linear;\n }\n\n .${tooltipClass} {\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n background: var(--inspecto-surface-floating);\n color: var(--inspecto-text-primary);\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-md);\n box-shadow: var(--inspecto-shadow-floating);\n padding: 7px 10px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n font-size: 11px;\n line-height: 1.45;\n transition: all 0.05s linear;\n display: flex;\n flex-direction: column;\n gap: 3px;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n }\n\n .${tooltipClass}::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n }\n\n .${tooltipTopClass}::after {\n bottom: -6px;\n left: var(--inspecto-arrow-left, 10px);\n border-width: 6px 6px 0 6px;\n border-color: var(--inspecto-surface-floating) transparent transparent transparent;\n }\n\n .${tooltipBottomClass}::after {\n top: -6px;\n left: var(--inspecto-arrow-left, 10px);\n border-width: 0 6px 6px 6px;\n border-color: transparent transparent var(--inspecto-surface-floating) transparent;\n }\n\n .${tooltipClass}::before {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n }\n\n .${tooltipTopClass}::before {\n bottom: -7px;\n left: calc(var(--inspecto-arrow-left, 10px) - 1px);\n border-width: 7px 7px 0 7px;\n border-color: var(--inspecto-border-subtle) transparent transparent transparent;\n }\n\n .${tooltipBottomClass}::before {\n top: -7px;\n left: calc(var(--inspecto-arrow-left, 10px) - 1px);\n border-width: 0 7px 7px 7px;\n border-color: transparent transparent var(--inspecto-border-subtle) transparent;\n }\n\n .${tagClass},\n .${idClass} {\n color: #d7b4ff;\n font-weight: 600;\n font-family: monospace;\n }\n\n .${classClass} {\n color: #9ad8ff;\n font-family: monospace;\n }\n\n .${dimClass} {\n color: var(--inspecto-text-tertiary);\n margin-left: 4px;\n }\n\n .${separatorClass} {\n height: 1px;\n background: var(--inspecto-border-muted);\n margin: 3px -10px;\n opacity: 1;\n }\n\n .${sourceClass} {\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 10px;\n color: var(--inspecto-text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n }\n\n .${menuClass} {\n position: fixed;\n z-index: 2147483647;\n background: var(--inspecto-surface-floating);\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-lg);\n padding: 10px;\n width: 304px;\n max-width: calc(100vw - 16px);\n box-sizing: border-box;\n box-shadow: var(--inspecto-shadow-floating);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n color: var(--inspecto-text-primary);\n }\n\n .${menuTitleClass} {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 8px;\n margin: 0 0 8px 0;\n }\n\n .${menuTitleClass} strong {\n font-size: 14px;\n line-height: 1.3;\n color: var(--inspecto-text-primary);\n }\n\n .${menuMetaClass} {\n font-size: 10px;\n line-height: 1.35;\n color: var(--inspecto-text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: 0.82;\n }\n\n .${menuSectionClass} {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .${menuSectionClass} + .${menuSectionClass} {\n margin-top: 6px;\n }\n\n .${menuInputWrapperClass} {\n display: flex;\n align-items: center;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-lg);\n background: rgba(255, 255, 255, 0.045);\n padding: 8px 10px;\n }\n\n .${menuInputWrapperClass}:focus-within {\n border-color: var(--inspecto-border-focus);\n box-shadow: 0 0 0 1px var(--inspecto-border-focus);\n }\n\n .${menuInputClass} {\n width: 100%;\n border: none;\n outline: none;\n font-size: 14px;\n color: var(--inspecto-text-primary);\n background: transparent;\n }\n\n .${menuInputClass}::placeholder {\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuInputIconClass} {\n color: var(--inspecto-text-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n }\n\n .${menuInputIconClass}:hover {\n color: var(--inspecto-text-primary);\n }\n\n .${menuContextSummaryClass} {\n padding: 0 10px;\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuContextToggleClass} {\n align-self: flex-start;\n padding: 0 10px;\n border: none;\n background: transparent;\n color: var(--inspecto-text-tertiary);\n font-size: 10px;\n line-height: 1.4;\n cursor: pointer;\n }\n\n .${menuContextToggleClass}:hover {\n color: var(--inspecto-text-secondary);\n }\n\n .${menuContextPreviewClass} {\n padding: 7px 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-sm);\n background: rgba(255, 255, 255, 0.02);\n color: var(--inspecto-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 10px;\n line-height: 1.5;\n white-space: pre-wrap;\n }\n\n .${menuItemClass} {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-sm);\n background: rgba(255, 255, 255, 0.018);\n color: var(--inspecto-text-secondary);\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;\n }\n\n .${menuItemClass}:hover {\n background: rgba(255, 255, 255, 0.06);\n border-color: var(--inspecto-border-subtle);\n }\n\n .${menuItemClass}[data-role=\"open-primary\"] {\n background: rgba(93, 82, 243, 0.12);\n border-color: rgba(93, 82, 243, 0.26);\n color: #ffffff;\n }\n\n .${menuItemClass}[data-role=\"open-primary\"] .${shortcutIconClass} {\n color: var(--inspecto-text-secondary);\n }\n\n .${menuItemClass}[data-role=\"open-primary\"]:hover {\n background: rgba(93, 82, 243, 0.18);\n border-color: rgba(93, 82, 243, 0.36);\n }\n\n .${menuItemClass}[data-role=\"ai-secondary\"] {\n background: rgba(255, 255, 255, 0.015);\n }\n\n .${menuItemClass}[data-role=\"open-icon\"] {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n padding: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--inspecto-radius-pill);\n background: var(--inspecto-surface-subtle);\n border-color: var(--inspecto-border-subtle);\n color: var(--inspecto-text-secondary);\n font-size: 14px;\n line-height: 1;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n }\n\n .${menuItemClass}[data-role=\"runtime-context-toggle\"] {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n padding: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--inspecto-radius-pill);\n font-size: 13px;\n line-height: 1;\n }\n\n .${menuItemClass}[data-role=\"open-icon\"]:hover {\n background: var(--inspecto-surface-hover);\n border-color: var(--inspecto-border-subtle);\n color: var(--inspecto-text-primary);\n }\n\n .${runtimeToggleClass} {\n position: relative;\n overflow: visible;\n }\n\n .${runtimeToggleIconClass} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n font-size: 16px;\n transform: translateY(0.5px);\n }\n\n .${runtimeToggleBadgeClass} {\n position: absolute;\n top: -5px;\n right: -5px;\n min-width: 15px;\n height: 15px;\n padding: 0 4px;\n border-radius: var(--inspecto-radius-pill);\n background: #ef4444;\n color: #ffffff;\n font-size: 9px;\n font-weight: 700;\n line-height: 15px;\n text-align: center;\n box-shadow: 0 0 0 2px var(--inspecto-surface-floating);\n pointer-events: none;\n }\n\n .${runtimeToggleClass}[data-visual-state=\"inactive\"] {\n background: rgba(255, 255, 255, 0.03);\n border-color: var(--inspecto-border-muted);\n color: var(--inspecto-text-secondary);\n }\n\n .${runtimeToggleClass}[data-visual-state=\"mixed\"] {\n background: rgba(239, 68, 68, 0.08);\n border-color: rgba(239, 68, 68, 0.24);\n color: #fda4af;\n }\n\n .${runtimeToggleClass}[data-visual-state=\"active\"] {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n border-color: transparent;\n color: #ffffff;\n box-shadow: var(--inspecto-shadow-accent);\n }\n\n .${runtimeToggleClass}[data-visual-state=\"active\"]:hover {\n background: linear-gradient(180deg, #6d63ff 0%, var(--inspecto-accent-primary) 100%);\n }\n\n .${menuItemClass} .${shortcutIconClass} {\n margin-left: auto;\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuItemClass}:hover .${shortcutIconClass} {\n color: var(--inspecto-hover-icon);\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n .${loadingSpinnerClass} {\n width: 14px;\n height: 14px;\n border: 2px solid var(--inspecto-overlay-border);\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.7s linear infinite;\n margin: 4px auto;\n display: block;\n }\n\n .${errorMsgClass} {\n font-size: 11px;\n color: var(--inspecto-error-color);\n padding: 4px 8px;\n text-align: center;\n }\n`\n","export const darkVars = `\n --inspecto-surface-floating: rgba(20, 20, 22, 0.94);\n --inspecto-surface-raised: rgba(255, 255, 255, 0.045);\n --inspecto-surface-subtle: rgba(255, 255, 255, 0.035);\n --inspecto-surface-hover: rgba(255, 255, 255, 0.08);\n --inspecto-border-subtle: rgba(255, 255, 255, 0.08);\n --inspecto-border-muted: rgba(255, 255, 255, 0.04);\n --inspecto-border-focus: rgba(93, 82, 243, 0.95);\n --inspecto-text-primary: rgba(255, 255, 255, 0.9);\n --inspecto-text-secondary: rgba(255, 255, 255, 0.72);\n --inspecto-text-tertiary: rgba(255, 255, 255, 0.46);\n --inspecto-accent-primary: #5d52f3;\n --inspecto-accent-primary-strong: #4639d7;\n --inspecto-success-color: #10b981;\n --inspecto-shadow-floating: 0 20px 48px rgba(0, 0, 0, 0.28);\n --inspecto-shadow-accent: 0 8px 18px rgba(79, 70, 229, 0.28);\n --inspecto-radius-pill: 999px;\n --inspecto-radius-sm: 12px;\n --inspecto-radius-md: 14px;\n --inspecto-radius-lg: 18px;\n --inspecto-radius-xl: 20px;\n --inspecto-menu-bg: #252526;\n --inspecto-menu-border: #454545;\n --inspecto-menu-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n --inspecto-text: #cccccc;\n --inspecto-text-muted: #858585;\n --inspecto-hover-bg: #04395e;\n --inspecto-hover-text: #ffffff;\n --inspecto-hover-icon: #ffffff;\n --inspecto-input-bg: #3c3c3c;\n --inspecto-input-border: #007acc;\n --inspecto-shortcut-text: #858585;\n --inspecto-badge-bg: rgba(30, 30, 30, 0.7);\n --inspecto-badge-text: #e5e5e5;\n --inspecto-badge-active-bg: #007acc;\n --inspecto-badge-active-text: #ffffff;\n --inspecto-badge-border: 1px solid rgba(255, 255, 255, 0.1);\n --inspecto-tooltip-bg: #222222;\n --inspecto-tooltip-text: #cccccc;\n --inspecto-tooltip-border: #444;\n --inspecto-tooltip-shadow: 0 2px 10px rgba(0,0,0,0.5);\n --inspecto-tag-color: #d16969;\n --inspecto-id-color: #d16969;\n --inspecto-class-color: #9cdcfe;\n --inspecto-dim-color: #858585;\n --inspecto-error-color: #ef4444;\n`\n\nexport const themeStyles = `\n :host {\n --inspecto-surface-floating: rgba(20, 20, 22, 0.94);\n --inspecto-surface-raised: rgba(255, 255, 255, 0.045);\n --inspecto-surface-subtle: rgba(255, 255, 255, 0.035);\n --inspecto-surface-hover: rgba(255, 255, 255, 0.08);\n --inspecto-border-subtle: rgba(255, 255, 255, 0.08);\n --inspecto-border-muted: rgba(255, 255, 255, 0.04);\n --inspecto-border-focus: rgba(93, 82, 243, 0.95);\n --inspecto-text-primary: rgba(255, 255, 255, 0.9);\n --inspecto-text-secondary: rgba(255, 255, 255, 0.72);\n --inspecto-text-tertiary: rgba(255, 255, 255, 0.46);\n --inspecto-accent-primary: #5d52f3;\n --inspecto-accent-primary-strong: #4639d7;\n --inspecto-success-color: #10b981;\n --inspecto-shadow-floating: 0 20px 48px rgba(0, 0, 0, 0.28);\n --inspecto-shadow-accent: 0 8px 18px rgba(79, 70, 229, 0.28);\n --inspecto-radius-pill: 999px;\n --inspecto-radius-sm: 12px;\n --inspecto-radius-md: 14px;\n --inspecto-radius-lg: 18px;\n --inspecto-radius-xl: 20px;\n --inspecto-menu-bg: #ffffff;\n --inspecto-menu-border: #d4d4d4;\n --inspecto-menu-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n --inspecto-text: #333333;\n --inspecto-text-muted: #6b7280;\n --inspecto-hover-bg: #0060c0;\n --inspecto-hover-text: #ffffff;\n --inspecto-hover-icon: #ffffff;\n --inspecto-input-bg: #ffffff;\n --inspecto-input-border: #007acc;\n --inspecto-shortcut-text: #9ca3af;\n --inspecto-badge-bg: rgba(30, 30, 30, 0.7);\n --inspecto-badge-text: #e5e5e5;\n --inspecto-badge-active-bg: #007acc;\n --inspecto-badge-active-text: #ffffff;\n --inspecto-badge-border: 1px solid rgba(255, 255, 255, 0.1);\n --inspecto-overlay-border: #4285f4;\n --inspecto-overlay-bg: rgba(66, 133, 244, 0.2);\n --inspecto-tooltip-bg: #ffffff;\n --inspecto-tooltip-text: #333333;\n --inspecto-tooltip-border: #ccc;\n --inspecto-tooltip-shadow: 0 2px 10px rgba(0,0,0,0.1);\n --inspecto-tag-color: #8b008b;\n --inspecto-id-color: #8b008b;\n --inspecto-class-color: #00008b;\n --inspecto-dim-color: #555555;\n --inspecto-error-color: #ef4444;\n }\n\n :host([data-theme=\"dark\"]) {\n ${darkVars}\n }\n\n @media (prefers-color-scheme: dark) {\n :host(:not([data-theme=\"light\"])) {\n ${darkVars}\n }\n }\n`\n","import { annotateStyles } from './styles-annotate.js'\nimport { launcherStyles } from './styles-launcher.js'\nimport { overlayMenuStyles } from './styles-overlay-menu.js'\nimport { themeStyles } from './styles-theme.js'\nexport * from './styles-classes.js'\n\nexport function applyHeaderIconButtonStyles(button: HTMLButtonElement): void {\n button.style.width = '28px'\n button.style.height = '28px'\n button.style.padding = '0'\n button.style.borderWidth = '1px'\n button.style.borderStyle = 'solid'\n button.style.borderColor = 'var(--inspecto-border-subtle)'\n button.style.background = 'var(--inspecto-surface-subtle)'\n button.style.color = 'var(--inspecto-text-secondary)'\n button.style.font = '600 11px/1 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n button.style.borderRadius = 'var(--inspecto-radius-pill)'\n button.style.display = 'inline-flex'\n button.style.alignItems = 'center'\n button.style.justifyContent = 'center'\n button.style.transition =\n 'background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease'\n}\n\nexport const inspectorStyles = `\n ${themeStyles}\n ${overlayMenuStyles}\n ${launcherStyles}\n ${annotateStyles}\n`\n","export const bugIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M17.416 2.62412C17.7607 2.39435 17.8538 1.9287 17.624 1.58405C17.3943 1.23941 16.9286 1.14628 16.584 1.37604L13.6687 3.31955C13.1527 3.11343 12.5897 3.00006 12.0001 3.00006C11.4105 3.00006 10.8474 3.11345 10.3314 3.31962L7.41603 1.37604C7.07138 1.14628 6.60573 1.23941 6.37596 1.58405C6.1462 1.9287 6.23933 2.39435 6.58397 2.62412L8.9437 4.19727C8.24831 4.84109 7.75664 5.70181 7.57617 6.6719C8.01128 6.55973 8.46749 6.50006 8.93763 6.50006H15.0626C15.5328 6.50006 15.989 6.55973 16.4241 6.6719C16.2436 5.70176 15.7519 4.841 15.0564 4.19717L17.416 2.62412Z\" fill=\"currentColor\"></path> <path d=\"M1.25 14.0001C1.25 13.5859 1.58579 13.2501 2 13.2501H5V11.9376C5 11.1019 5.26034 10.327 5.70435 9.68959L3.22141 8.69624C2.83684 8.54238 2.6498 8.10589 2.80366 7.72131C2.95752 7.33673 3.39401 7.1497 3.77859 7.30356L6.91514 8.55841C7.50624 8.20388 8.19807 8.00006 8.9375 8.00006H15.0625C15.8019 8.00006 16.4938 8.20388 17.0849 8.55841L20.2214 7.30356C20.606 7.1497 21.0425 7.33673 21.1963 7.72131C21.3502 8.10589 21.1632 8.54238 20.7786 8.69624L18.2957 9.68959C18.7397 10.327 19 11.1019 19 11.9376V13.2501H22C22.4142 13.2501 22.75 13.5859 22.75 14.0001C22.75 14.4143 22.4142 14.7501 22 14.7501H19V15.0001C19 16.1808 18.7077 17.2932 18.1915 18.2689L20.7786 19.3039C21.1632 19.4578 21.3502 19.8943 21.1963 20.2789C21.0425 20.6634 20.606 20.8505 20.2214 20.6966L17.3288 19.5394C16.1974 20.8664 14.5789 21.7655 12.75 21.9604V15.0001C12.75 14.5858 12.4142 14.2501 12 14.2501C11.5858 14.2501 11.25 14.5858 11.25 15.0001V21.9604C9.42109 21.7655 7.80265 20.8664 6.67115 19.5394L3.77859 20.6966C3.39401 20.8505 2.95752 20.6634 2.80366 20.2789C2.6498 19.8943 2.83684 19.4578 3.22141 19.3039L5.80852 18.2689C5.29231 17.2932 5 16.1808 5 15.0001V14.7501H2C1.58579 14.7501 1.25 14.4143 1.25 14.0001Z\" fill=\"currentColor\"></path> </g></svg>`\n\nexport const inspectFilledIconSvg = `<svg viewBox=\"0 0 512 512\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>mouse-select-filled</title> <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"add\" fill=\"currentColor\" transform=\"translate(62.226343, 62.126933)\"> <polygon id=\"Fill-6\" points=\"7.10542736e-15 7.10542736e-15 364.440324 103.2064 276.37835 189.916864 369.025732 282.559083 282.478894 369.108395 189.860868 276.466176 103.10699 364.539733\"> </polygon> </g> </g> </g></svg>`\n\nexport const cssIconSvg = `<svg height=\"200px\" width=\"200px\" version=\"1.1\" id=\"_x32_\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 512 512\" xml:space=\"preserve\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <style type=\"text/css\"> .st0{fill:currentColor;} </style> <g> <path class=\"st0\" d=\"M378.413,0H208.297h-13.182L185.8,9.314L57.02,138.102l-9.314,9.314v13.176v265.514 c0,47.36,38.528,85.895,85.896,85.895h244.811c47.353,0,85.881-38.535,85.881-85.895V85.896C464.294,38.528,425.766,0,378.413,0z M432.497,426.105c0,29.877-24.214,54.091-54.084,54.091H133.602c-29.884,0-54.098-24.214-54.098-54.091V160.591h83.716 c24.885,0,45.077-20.178,45.077-45.07V31.804h170.116c29.87,0,54.084,24.214,54.084,54.092V426.105z\"></path> <path class=\"st0\" d=\"M169.574,268.949c5.837,0,9.104,2.171,12.499,6.786c2.709,3.805,5.432,5.167,8.825,5.167 c5.028,0,9.105-3.673,9.105-8.965c0-2.171-0.684-4.078-1.774-5.977c-4.622-8.288-14.802-14.669-28.655-14.669 c-16.171,0-28.124,7.603-33.012,22.685c-1.899,6.11-2.57,10.865-2.57,24.989c0,14.125,0.67,18.881,2.57,24.99 c4.888,15.081,16.841,22.685,33.012,22.685c13.853,0,24.033-6.382,28.655-14.67c1.09-1.899,1.774-3.805,1.774-5.976 c0-5.3-4.078-8.965-9.105-8.965c-3.393,0-6.116,1.361-8.825,5.16c-3.394,4.622-6.662,6.794-12.499,6.794 c-7.471,0-11.814-3.938-13.853-10.187c-1.089-3.393-1.494-6.654-1.494-19.83c0-13.175,0.406-16.436,1.494-19.829 C157.76,272.887,162.103,268.949,169.574,268.949z\"></path> <path class=\"st0\" d=\"M255.149,289.595l-4.888-0.684c-10.725-1.494-14.398-5.02-14.398-10.187c0-5.837,4.343-9.915,12.498-9.915 c5.698,0,11.409,1.634,15.892,3.805c1.899,0.95,3.938,1.494,5.837,1.494c4.888,0,8.7-3.666,8.7-8.693 c0-3.261-1.494-5.977-4.762-8.016c-5.432-3.394-15.612-6.11-25.806-6.11c-19.97,0-32.733,11.269-32.733,28.25 c0,16.304,10.32,25.13,29.2,27.713l4.901,0.677c10.99,1.494,14.258,4.888,14.258,10.32c0,6.389-5.306,10.872-15.082,10.872 c-6.787,0-12.219-1.767-19.83-5.977c-1.634-0.956-3.672-1.634-5.837-1.634c-5.166,0-8.965,3.938-8.965,8.832 c0,3.254,1.634,6.382,4.748,8.42c6.116,3.799,16.031,7.876,29.074,7.876c24.032,0,36.266-12.358,36.266-29.067 C284.223,300.865,274.307,292.311,255.149,289.595z\"></path> <path class=\"st0\" d=\"M338.697,289.595l-4.888-0.684c-10.738-1.494-14.398-5.02-14.398-10.187c0-5.837,4.344-9.915,12.484-9.915 c5.712,0,11.423,1.634,15.892,3.805c1.913,0.95,3.952,1.494,5.851,1.494c4.887,0,8.686-3.666,8.686-8.693 c0-3.261-1.494-5.977-4.748-8.016c-5.432-3.394-15.626-6.11-25.806-6.11c-19.969,0-32.733,11.269-32.733,28.25 c0,16.304,10.32,25.13,29.2,27.713l4.888,0.677c11.004,1.494,14.258,4.888,14.258,10.32c0,6.389-5.292,10.872-15.068,10.872 c-6.8,0-12.232-1.767-19.829-5.977c-1.634-0.956-3.673-1.634-5.851-1.634c-5.153,0-8.965,3.938-8.965,8.832 c0,3.254,1.634,6.382,4.762,8.42c6.117,3.799,16.032,7.876,29.06,7.876c24.047,0,36.266-12.358,36.266-29.067 C367.758,300.865,357.843,292.311,338.697,289.595z\"></path> </g> </g></svg>`\n\nexport const pureMarkIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"1.75\"></circle><path d=\"M12 6.5C8.962 6.5 6.5 8.962 6.5 12S8.962 17.5 12 17.5H17.5V12C17.5 8.962 15.038 6.5 12 6.5Z\" fill=\"currentColor\" opacity=\"0.28\"></path><path d=\"M12 9V15\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path><path d=\"M9 12H15\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path></svg>`\n\nexport const closeIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g clip-path=\"url(#clip0_429_11083)\"> <path d=\"M7 7.00006L17 17.0001M7 17.0001L17 7.00006\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> <defs> <clipPath id=\"clip0_429_11083\"> <rect width=\"24\" height=\"24\" fill=\"currentColor\"></rect> </clipPath> </defs> </g></svg>`\n\nexport const pauseIconSvg = `<svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M7 1H2V15H7V1Z\" fill=\"currentColor\"></path> <path d=\"M14 1H9V15H14V1Z\" fill=\"currentColor\"></path> </g></svg>`\n\nexport const playIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M21.4086 9.35258C23.5305 10.5065 23.5305 13.4935 21.4086 14.6474L8.59662 21.6145C6.53435 22.736 4 21.2763 4 18.9671L4 5.0329C4 2.72368 6.53435 1.26402 8.59661 2.38548L21.4086 9.35258Z\" fill=\"currentColor\"></path> </g></svg>`\n","import type { InspectoMessages, InspectoLocale } from '@inspecto-dev/types'\n\nconst DEFAULT_LOCALE = 'en'\n\nconst EN_MESSAGES: Record<string, string> = {\n 'launcher.title': 'Inspecto',\n 'launcher.panel.title': 'Choose a mode',\n 'launcher.panel.subtitle': 'Your next page click will follow this mode.',\n 'launcher.action.inspect.title': 'Inspect',\n 'launcher.action.inspect.description': 'Click one component to inspect or ask AI',\n 'launcher.action.annotate.title': 'Annotate',\n 'launcher.action.annotate.description':\n 'Capture notes across components, then create a task or ask once',\n 'launcher.action.pause.title': 'Pause selection',\n 'launcher.action.pause.description': 'Use the page normally for a moment',\n 'launcher.action.resume.title': 'Resume selection',\n 'launcher.action.resume.description': 'Start capturing page clicks again',\n 'launcher.hint.hotkeyDisabled':\n 'Hotkey disabled. Open the launcher to choose Inspect or Annotate.',\n 'launcher.hint.hotkeyQuickJump': 'Hotkey: {hotkey} for quick jump',\n 'launcher.state.paused': 'Selection paused',\n 'launcher.state.annotate': 'Annotate mode',\n 'launcher.state.inspect': 'Inspect mode',\n 'launcher.state.ready': 'Ready',\n 'menu.openInEditor': 'Open in Editor',\n 'menu.attachRuntime': 'Attach runtime context',\n 'menu.runtimeEnabled': 'Runtime context enabled',\n 'menu.runtimeFixOnly': 'Runtime context defaults to fix actions only until you choose otherwise',\n 'menu.attachCss': 'Attach CSS context',\n 'menu.cssEnabled': 'CSS context enabled',\n 'menu.ask.placeholder.default': 'Add a custom ask or extra instruction...',\n 'menu.ask.placeholder.fallback': 'Ask anything about this component...',\n 'menu.ask.placeholder.setup': 'Inspecto setup needs attention...',\n 'menu.ask.ariaLabel': 'Custom ask',\n 'menu.preview.show': 'Show preview',\n 'menu.preview.hide': 'Hide preview',\n 'menu.sending': 'Sending...',\n 'menu.error.openIde': 'Unable to open file in the editor.',\n 'annotate.mode.title': 'Annotate mode',\n 'annotate.quickCapture.toggle': 'Toggle quick capture',\n 'annotate.exitMode': 'Exit annotate mode',\n 'annotate.empty.title': 'Start by clicking a component',\n 'annotate.empty.body':\n 'Each click opens one note. Save a few notes first, then add an overall goal and create a task or ask once.',\n 'annotate.instruction.placeholder': 'Overall goal for this batch (optional)...',\n 'annotate.instruction.ariaLabel': 'Overall goal',\n 'annotate.previewMessage': 'Preview message',\n 'annotate.batchPayload': 'Batch payload',\n 'annotate.previewRawPrompt': 'View raw prompt payload',\n 'annotate.copyContext': 'Copy context',\n 'annotate.copyContext.copied': 'Copied',\n 'annotate.copyContext.failed': 'Failed to copy',\n 'annotate.saveNote': 'Save note',\n 'annotate.updateNote': 'Update note',\n 'annotate.askAi': 'Ask AI',\n 'annotate.askAiHint': 'Ask AI',\n 'annotate.createTask': 'Create Task',\n 'annotate.createTaskHint': 'Create Task',\n 'annotate.recommendedAction': 'Recommended: {action}',\n 'annotate.recommendedAction.agentHint': 'Recommended: {action}',\n 'annotate.recommendedAction.askHint': 'Recommended: {action}',\n 'annotate.sent': 'Sent',\n 'annotate.taskCreated': 'Created',\n 'annotate.cancel': 'Cancel',\n 'annotate.delete': 'Delete',\n 'annotate.composer.placeholder': 'What should change for this component?',\n 'annotate.records.none': 'No records included yet.',\n 'annotate.target.unknown': 'Unknown target',\n 'annotate.source.unknown': 'Unknown source',\n 'annotate.note.optionalEmpty': 'Optional note left empty.',\n 'annotate.note.none': 'No note provided',\n 'annotate.runtimeErrors': '{count} errors',\n 'annotate.liveStatus.quickAskSending': 'Sending notes to your IDE assistant.',\n 'annotate.liveStatus.createTaskSending': 'Creating a task from your notes.',\n 'annotate.liveStatus.quickAskSent': 'Notes sent to your IDE assistant.',\n 'annotate.liveStatus.taskCreated': 'Task created from your notes.',\n 'annotate.latestSession.title': 'Current task',\n 'annotate.latestSession.refresh': 'Refresh current task',\n 'annotate.latestSession.meta.loaded': '{count} annotations',\n 'annotate.latestSession.meta.summary': 'Refresh to load details',\n 'annotate.latestSession.loading': 'Refreshing latest task...',\n 'annotate.latestSession.pending': '',\n 'annotate.latestSession.acknowledged': 'AI acknowledged.',\n 'annotate.latestSession.inProgress': 'AI working...',\n 'annotate.latestSession.resolved': 'AI finished. Check the page.',\n 'annotate.latestSession.dismissed': 'Task dismissed.',\n 'annotate.latestSession.noDetail': 'Sent to AI.',\n 'annotate.latestSession.hint.pending': 'If it has not started, ask AI to continue.',\n 'annotate.latestSession.hint.acknowledged': 'AI connected. Waiting for update.',\n 'annotate.latestSession.hint.in_progress': 'Stay for updates, or refresh later.',\n 'annotate.latestSession.hint.resolved': 'Review the result. Create a follow-up if needed.',\n 'annotate.latestSession.reconnect': 'Reconnect',\n 'annotate.latestSession.error.disconnected':\n 'Connection lost. Reconnect to keep following this task.',\n 'annotate.latestSession.status.pending': 'waiting',\n 'annotate.latestSession.status.acknowledged': 'acknowledged',\n 'annotate.latestSession.status.in_progress': 'in progress',\n 'annotate.latestSession.status.resolved': 'complete',\n 'annotate.latestSession.status.dismissed': 'dismissed',\n 'annotate.header.capturing': 'Capturing clicks',\n 'annotate.header.quickCaptureOn': '{label} on',\n 'runtime.summary.error.one': '{count} runtime error',\n 'runtime.summary.error.other': '{count} runtime errors',\n 'runtime.summary.request.one': '{count} failed request',\n 'runtime.summary.request.other': '{count} failed requests',\n}\n\nconst ZH_CN_MESSAGES: Record<string, string> = {\n 'launcher.panel.title': '选择模式',\n 'launcher.panel.subtitle': '你下一次页面点击将按当前模式执行。',\n 'launcher.action.inspect.title': '检查',\n 'launcher.action.inspect.description': '点击一个组件进行检查或向 AI 提问',\n 'launcher.action.annotate.title': '批注',\n 'launcher.action.annotate.description': '跨组件记录批注,然后创建任务或一次性提问',\n 'launcher.action.pause.title': '暂停选择',\n 'launcher.action.pause.description': '暂时按正常方式操作页面',\n 'launcher.action.resume.title': '恢复选择',\n 'launcher.action.resume.description': '重新开始捕获页面点击',\n 'launcher.hint.hotkeyDisabled': '快捷键已禁用。打开启动器后选择“检查”或“批注”。',\n 'launcher.hint.hotkeyQuickJump': '快捷键:{hotkey}(快速跳转)',\n 'launcher.state.paused': '已暂停选择',\n 'launcher.state.annotate': '批注模式',\n 'launcher.state.inspect': '检查模式',\n 'launcher.state.ready': '就绪',\n 'menu.openInEditor': '在编辑器中打开',\n 'menu.attachRuntime': '附加运行时上下文',\n 'menu.runtimeEnabled': '已启用运行时上下文',\n 'menu.runtimeFixOnly': '运行时上下文默认仅用于修复类操作,直到你手动切换',\n 'menu.attachCss': '附加 CSS 上下文',\n 'menu.cssEnabled': '已启用 CSS 上下文',\n 'menu.ask.placeholder.default': '添加自定义提问或额外说明...',\n 'menu.ask.placeholder.fallback': '询问与此组件相关的任何问题...',\n 'menu.ask.placeholder.setup': 'Inspecto 环境需要检查...',\n 'menu.ask.ariaLabel': '自定义提问',\n 'menu.preview.show': '显示预览',\n 'menu.preview.hide': '隐藏预览',\n 'menu.sending': '发送中...',\n 'menu.error.openIde': '无法在编辑器中打开文件。',\n 'annotate.mode.title': '批注模式',\n 'annotate.quickCapture.toggle': '切换快速捕获',\n 'annotate.exitMode': '退出批注模式',\n 'annotate.empty.title': '先点击一个组件开始',\n 'annotate.empty.body':\n '每次点击可记录一条批注。先保存几条,再补充整体目标,然后创建任务或一次性提问。',\n 'annotate.instruction.placeholder': '本批次的整体目标(可选)...',\n 'annotate.instruction.ariaLabel': '整体目标',\n 'annotate.previewMessage': '预览消息',\n 'annotate.batchPayload': '批次载荷',\n 'annotate.previewRawPrompt': '查看原始 prompt 载荷',\n 'annotate.copyContext': '复制上下文',\n 'annotate.copyContext.copied': '已复制',\n 'annotate.copyContext.failed': '复制失败,请重试',\n 'annotate.saveNote': '保存',\n 'annotate.updateNote': '更新',\n 'annotate.askAi': '问 AI',\n 'annotate.askAiHint': '问 AI',\n 'annotate.createTask': '创建任务',\n 'annotate.createTaskHint': '创建任务',\n 'annotate.recommendedAction': '推荐:{action}',\n 'annotate.recommendedAction.agentHint': '推荐:{action}',\n 'annotate.recommendedAction.askHint': '推荐:{action}',\n 'annotate.sent': '已发送',\n 'annotate.taskCreated': '已创建',\n 'annotate.cancel': '取消',\n 'annotate.delete': '删除',\n 'annotate.composer.placeholder': '这个组件需要修改什么?',\n 'annotate.records.none': '还没有包含记录。',\n 'annotate.target.unknown': '未知目标',\n 'annotate.source.unknown': '未知来源',\n 'annotate.note.optionalEmpty': '可选备注为空。',\n 'annotate.note.none': '未提供备注',\n 'annotate.runtimeErrors': '{count} 个错误',\n 'annotate.liveStatus.quickAskSending': '正在将批注发送给 AI 助手。',\n 'annotate.liveStatus.createTaskSending': '正在根据批注创建任务。',\n 'annotate.liveStatus.quickAskSent': '批注已发送给 AI 助手。',\n 'annotate.liveStatus.taskCreated': '已根据批注创建任务。',\n 'annotate.latestSession.title': '当前任务',\n 'annotate.latestSession.refresh': '刷新当前任务',\n 'annotate.latestSession.meta.loaded': '包含 {count} 条批注',\n 'annotate.latestSession.meta.summary': '包含多条批注 • 刷新以加载详情',\n 'annotate.latestSession.loading': '正在刷新最新任务...',\n 'annotate.latestSession.pending': '',\n 'annotate.latestSession.acknowledged': 'AI 已接手。',\n 'annotate.latestSession.inProgress': 'AI 处理中...',\n 'annotate.latestSession.resolved': 'AI 已完成处理。请回到页面确认。',\n 'annotate.latestSession.dismissed': '任务已被忽略。',\n 'annotate.latestSession.noDetail': '已发送给 AI。',\n 'annotate.latestSession.hint.pending': '如果还没有开始,请让 AI 继续处理。',\n 'annotate.latestSession.hint.acknowledged': 'AI 已连接,正在等待更新。',\n 'annotate.latestSession.hint.in_progress': '可留在这里查看进展,或稍后手动刷新。',\n 'annotate.latestSession.hint.resolved': '请确认结果;如果还有问题,可创建后续任务。',\n 'annotate.latestSession.reconnect': '重新连接',\n 'annotate.latestSession.error.disconnected': '连接已断开。重新连接以继续跟进这条任务。',\n 'annotate.latestSession.status.pending': '等待中',\n 'annotate.latestSession.status.acknowledged': '已领取',\n 'annotate.latestSession.status.in_progress': '处理中',\n 'annotate.latestSession.status.resolved': '已完成',\n 'annotate.latestSession.status.dismissed': '已忽略',\n 'annotate.header.capturing': '正在捕获点击',\n 'annotate.header.quickCaptureOn': '{label} 已开启',\n 'runtime.summary.error.one': '{count} 个运行时错误',\n 'runtime.summary.error.other': '{count} 个运行时错误',\n 'runtime.summary.request.one': '{count} 个失败请求',\n 'runtime.summary.request.other': '{count} 个失败请求',\n}\n\nconst BUILTIN_MESSAGES: Record<string, Record<string, string>> = {\n en: EN_MESSAGES,\n 'zh-CN': ZH_CN_MESSAGES,\n}\n\nlet currentLocale: string = DEFAULT_LOCALE\nlet currentMessages: InspectoMessages = {}\n\nfunction normalizeLocale(locale?: string | null): string {\n if (!locale) return DEFAULT_LOCALE\n if (BUILTIN_MESSAGES[locale]) return locale\n if (locale.toLowerCase().startsWith('zh')) return 'zh-CN'\n if (locale.toLowerCase().startsWith('en')) return 'en'\n return DEFAULT_LOCALE\n}\n\nfunction resolveBrowserLocale(): string {\n if (typeof navigator === 'undefined') return DEFAULT_LOCALE\n return normalizeLocale(navigator.language)\n}\n\nfunction interpolate(template: string, vars?: Record<string, string | number>): string {\n if (!vars) return template\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => String(vars[key] ?? ''))\n}\n\nexport function configureI18n(input?: {\n locale?: InspectoLocale\n messages?: InspectoMessages\n}): void {\n currentLocale = normalizeLocale(input?.locale ?? resolveBrowserLocale())\n currentMessages = input?.messages ?? {}\n}\n\nexport function t(key: string, vars?: Record<string, string | number>): string {\n const message =\n currentMessages[key] ??\n BUILTIN_MESSAGES[currentLocale]?.[key] ??\n BUILTIN_MESSAGES[DEFAULT_LOCALE]?.[key] ??\n key\n return interpolate(message, vars)\n}\n\nexport function runtimeSummaryLabel(kind: 'error' | 'request', count: number): string {\n const suffix = count === 1 ? 'one' : 'other'\n return t(`runtime.summary.${kind}.${suffix}`, { count })\n}\n","import { applyHeaderIconButtonStyles } from './styles.js'\nimport { bugIconSvg, cssIconSvg } from './icons.js'\nimport { t } from './i18n.js'\n\nexport function createAnnotateOverlayDom(\n shadowRoot: ShadowRoot,\n tokens: {\n surfaceFloating(): string\n surfaceSubtle(): string\n surfaceHover(): string\n borderSubtle(): string\n borderFocus(): string\n textPrimary(): string\n textSecondary(): string\n textTertiary(): string\n accentPrimary(): string\n accentPrimaryStrong(): string\n shadowFloating(): string\n shadowAccent(): string\n radiusSm(): string\n radiusMd(): string\n radiusLg(): string\n radiusXl(): string\n radiusPill(): string\n },\n) {\n const layer = document.createElement('div')\n layer.setAttribute('data-inspecto-annotate-overlay-layer', '')\n layer.style.position = 'absolute'\n layer.style.left = '0'\n layer.style.top = '0'\n layer.style.width = '0'\n layer.style.height = '0'\n layer.style.pointerEvents = 'none'\n layer.style.zIndex = '2147483645'\n\n const composer = document.createElement('div')\n composer.setAttribute('data-inspecto-annotate-composer', '')\n composer.style.position = 'fixed'\n composer.style.zIndex = '2147483646'\n composer.style.width = 'min(340px, calc(100vw - 32px))'\n composer.style.display = 'none'\n composer.style.boxSizing = 'border-box'\n composer.style.padding = '12px'\n composer.style.border = `1px solid ${tokens.borderSubtle()}`\n composer.style.borderRadius = tokens.radiusXl()\n composer.style.background = tokens.surfaceFloating()\n composer.style.color = tokens.textPrimary()\n composer.style.boxShadow = tokens.shadowFloating()\n composer.style.backdropFilter = 'blur(14px)'\n composer.style.pointerEvents = 'auto'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n composer.style.transition =\n 'left 160ms cubic-bezier(0.22, 1, 0.36, 1), top 160ms cubic-bezier(0.22, 1, 0.36, 1), opacity 120ms ease, transform 160ms cubic-bezier(0.22, 1, 0.36, 1)'\n composer.style.willChange = 'left, top, opacity, transform'\n\n const composerHeader = document.createElement('div')\n composerHeader.setAttribute('data-inspecto-annotate-composer-header', '')\n composerHeader.style.display = 'flex'\n composerHeader.style.alignItems = 'center'\n composerHeader.style.gap = '10px'\n composerHeader.style.font =\n '500 12px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerHeader.style.color = tokens.textSecondary()\n composerHeader.style.marginBottom = '12px'\n\n const composerHeaderText = document.createElement('div')\n composerHeaderText.style.flex = '1'\n composerHeaderText.style.minWidth = '0'\n composerHeaderText.style.display = 'flex'\n composerHeaderText.style.flexDirection = 'column'\n composerHeaderText.style.gap = '2px'\n\n const composerHeaderTitle = document.createElement('div')\n composerHeaderTitle.style.whiteSpace = 'nowrap'\n composerHeaderTitle.style.overflow = 'hidden'\n composerHeaderTitle.style.textOverflow = 'ellipsis'\n composerHeaderTitle.style.color = tokens.textPrimary()\n\n const composerHeaderMeta = document.createElement('div')\n composerHeaderMeta.style.whiteSpace = 'nowrap'\n composerHeaderMeta.style.overflow = 'hidden'\n composerHeaderMeta.style.textOverflow = 'ellipsis'\n composerHeaderMeta.style.font =\n '500 10px/1.35 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerHeaderMeta.style.color = tokens.textTertiary()\n\n composerHeaderText.append(composerHeaderTitle, composerHeaderMeta)\n\n const composerHeaderActions = document.createElement('div')\n composerHeaderActions.style.display = 'flex'\n composerHeaderActions.style.alignItems = 'center'\n composerHeaderActions.style.gap = '6px'\n\n const composerOpenButton = document.createElement('button')\n composerOpenButton.type = 'button'\n composerOpenButton.setAttribute('aria-label', t('menu.openInEditor'))\n composerOpenButton.title = t('menu.openInEditor')\n composerOpenButton.textContent = '↗'\n composerOpenButton.style.appearance = 'none'\n composerOpenButton.style.cursor = 'pointer'\n applyHeaderIconButtonStyles(composerOpenButton)\n\n const composerCssButton = document.createElement('button')\n composerCssButton.type = 'button'\n composerCssButton.setAttribute('aria-label', t('menu.attachCss'))\n composerCssButton.title = t('menu.attachCss')\n composerCssButton.style.appearance = 'none'\n composerCssButton.style.cursor = 'pointer'\n composerCssButton.style.display = 'none'\n applyHeaderIconButtonStyles(composerCssButton)\n composerCssButton.innerHTML = cssIconSvg\n const cssSvgElement = composerCssButton.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n }\n\n const composerRuntimeButton = document.createElement('button')\n composerRuntimeButton.type = 'button'\n composerRuntimeButton.setAttribute('aria-label', t('menu.attachRuntime'))\n composerRuntimeButton.title = t('menu.attachRuntime')\n composerRuntimeButton.style.appearance = 'none'\n composerRuntimeButton.style.position = 'relative'\n composerRuntimeButton.style.cursor = 'pointer'\n composerRuntimeButton.style.display = 'none'\n applyHeaderIconButtonStyles(composerRuntimeButton)\n\n const composerRuntimeIcon = document.createElement('span')\n composerRuntimeIcon.innerHTML = bugIconSvg\n composerRuntimeIcon.style.display = 'inline-flex'\n composerRuntimeIcon.style.alignItems = 'center'\n composerRuntimeIcon.style.justifyContent = 'center'\n composerRuntimeIcon.style.lineHeight = '1'\n\n const composerRuntimeBadge = document.createElement('span')\n composerRuntimeBadge.dataset.runtimeErrorBadge = 'true'\n composerRuntimeBadge.style.position = 'absolute'\n composerRuntimeBadge.style.top = '-5px'\n composerRuntimeBadge.style.right = '-5px'\n composerRuntimeBadge.style.minWidth = '15px'\n composerRuntimeBadge.style.height = '15px'\n composerRuntimeBadge.style.padding = '0 4px'\n composerRuntimeBadge.style.borderRadius = tokens.radiusPill()\n composerRuntimeBadge.style.background = '#ef4444'\n composerRuntimeBadge.style.color = '#ffffff'\n composerRuntimeBadge.style.font =\n '700 9px/15px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerRuntimeBadge.style.textAlign = 'center'\n composerRuntimeBadge.style.boxShadow = `0 0 0 2px ${tokens.surfaceFloating()}`\n composerRuntimeBadge.style.pointerEvents = 'none'\n composerRuntimeBadge.style.display = 'none'\n\n composerRuntimeButton.append(composerRuntimeIcon, composerRuntimeBadge)\n\n const composerInput = document.createElement('textarea')\n composerInput.placeholder = t('annotate.composer.placeholder')\n composerInput.style.width = '100%'\n composerInput.style.minHeight = '100px'\n composerInput.style.boxSizing = 'border-box'\n composerInput.style.padding = '16px'\n composerInput.style.border = `2px solid ${tokens.borderFocus()}`\n composerInput.style.borderRadius = tokens.radiusLg()\n composerInput.style.background = tokens.surfaceHover()\n composerInput.style.color = tokens.textPrimary()\n composerInput.style.font =\n '400 14px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerInput.style.outline = 'none'\n composerInput.style.resize = 'none'\n composerInput.style.marginBottom = '14px'\n composerInput.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.04)'\n\n const composerActions = document.createElement('div')\n composerActions.style.display = 'flex'\n composerActions.style.justifyContent = 'flex-end'\n composerActions.style.alignItems = 'center'\n composerActions.style.gap = '8px'\n\n const cancelButton = document.createElement('button')\n cancelButton.type = 'button'\n cancelButton.textContent = t('annotate.cancel')\n cancelButton.style.appearance = 'none'\n cancelButton.style.border = 'none'\n cancelButton.style.background = 'transparent'\n cancelButton.style.color = tokens.textSecondary()\n cancelButton.style.font = '500 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n cancelButton.style.padding = '8px 10px'\n cancelButton.style.cursor = 'pointer'\n\n const deleteButton = document.createElement('button')\n deleteButton.type = 'button'\n deleteButton.textContent = t('annotate.delete')\n deleteButton.style.appearance = 'none'\n deleteButton.style.border = 'none'\n deleteButton.style.background = 'transparent'\n deleteButton.style.color = 'rgba(248, 113, 113, 0.92)'\n deleteButton.style.font = '500 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n deleteButton.style.padding = '8px 10px'\n deleteButton.style.cursor = 'pointer'\n deleteButton.style.display = 'none'\n\n const addButton = document.createElement('button')\n addButton.type = 'button'\n addButton.textContent = t('annotate.saveNote')\n addButton.style.appearance = 'none'\n addButton.style.border = 'none'\n addButton.style.borderRadius = tokens.radiusPill()\n addButton.style.background = `linear-gradient(180deg, ${tokens.accentPrimary()} 0%, ${tokens.accentPrimaryStrong()} 100%)`\n addButton.style.color = '#ffffff'\n addButton.style.font = '600 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n addButton.style.minHeight = '36px'\n addButton.style.padding = '0 18px'\n addButton.style.cursor = 'pointer'\n addButton.style.boxShadow = tokens.shadowAccent()\n\n composerHeaderActions.append(composerCssButton, composerRuntimeButton, composerOpenButton)\n composerActions.append(deleteButton, cancelButton, addButton)\n composerHeader.append(composerHeaderText, composerHeaderActions)\n composer.append(composerHeader, composerInput, composerActions)\n\n const preview = document.createElement('div')\n preview.setAttribute('data-inspecto-annotate-preview', '')\n preview.style.position = 'absolute'\n preview.style.zIndex = '2147483646'\n preview.style.display = 'none'\n preview.style.maxWidth = 'min(260px, calc(100vw - 32px))'\n preview.style.padding = '10px 12px'\n preview.style.border = `1px solid ${tokens.borderSubtle()}`\n preview.style.borderRadius = tokens.radiusMd()\n preview.style.background = tokens.surfaceFloating()\n preview.style.color = tokens.textPrimary()\n preview.style.font = '500 12px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n preview.style.boxShadow = tokens.shadowFloating()\n preview.style.backdropFilter = 'blur(12px)'\n preview.style.pointerEvents = 'none'\n preview.style.whiteSpace = 'pre-wrap'\n\n shadowRoot.appendChild(layer)\n shadowRoot.appendChild(composer)\n shadowRoot.appendChild(preview)\n\n return {\n layer,\n composer,\n composerHeaderTitle,\n composerHeaderMeta,\n composerOpenButton,\n composerCssButton,\n composerRuntimeButton,\n composerRuntimeBadge,\n composerInput,\n composerActions,\n cancelButton,\n deleteButton,\n addButton,\n preview,\n }\n}\n","import type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\n\nexport type ComposerPlacement = 'right' | 'left' | 'below' | 'above'\n\nexport type PlacementCandidate = {\n side: ComposerPlacement\n left: number\n top: number\n}\n\nexport function createOverlayBox(tokens: {\n accentPrimary(): string\n surfaceFloating(): string\n borderSubtle(): string\n radiusLg(): string\n shadowFloating(): string\n textPrimary(): string\n}): HTMLDivElement {\n const accentPrimaryColor = tokens.accentPrimary()\n const box = document.createElement('div')\n box.setAttribute('data-inspecto-annotate-overlay-box', '')\n box.style.position = 'absolute'\n box.style.pointerEvents = 'auto'\n box.style.boxSizing = 'border-box'\n box.style.border = `2px solid ${accentPrimaryColor}`\n box.style.background = 'rgba(93, 82, 243, 0.12)'\n box.style.borderRadius = '3px'\n box.style.boxShadow = `0 0 0 1px rgba(93, 82, 243, 0.25), 0 8px 18px rgba(93, 82, 243, 0.18)`\n\n const badge = document.createElement('div')\n badge.setAttribute('data-inspecto-annotate-overlay-order', '')\n badge.style.position = 'absolute'\n badge.style.left = '-10px'\n badge.style.top = '-10px'\n badge.style.minWidth = '20px'\n badge.style.height = '20px'\n badge.style.padding = '0 5px'\n badge.style.boxSizing = 'border-box'\n badge.style.borderRadius = '999px'\n badge.style.background = accentPrimaryColor\n badge.style.color = '#ffffff'\n badge.style.font = '600 12px/20px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n badge.style.textAlign = 'center'\n badge.style.boxShadow = '0 1px 4px rgba(0, 0, 0, 0.2)'\n\n const noteBadge = document.createElement('div')\n noteBadge.setAttribute('data-inspecto-annotate-overlay-note', '')\n noteBadge.style.position = 'absolute'\n noteBadge.style.left = '-2px'\n noteBadge.style.top = '-40px'\n noteBadge.style.maxWidth = 'min(220px, calc(100vw - 32px))'\n noteBadge.style.padding = '8px 12px'\n noteBadge.style.borderRadius = tokens.radiusLg()\n noteBadge.style.background = tokens.surfaceFloating()\n noteBadge.style.color = tokens.textPrimary()\n noteBadge.style.font = '500 12px/1.35 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n noteBadge.style.boxShadow = tokens.shadowFloating()\n noteBadge.style.border = `1px solid ${tokens.borderSubtle()}`\n noteBadge.style.whiteSpace = 'nowrap'\n noteBadge.style.overflow = 'hidden'\n noteBadge.style.textOverflow = 'ellipsis'\n noteBadge.style.pointerEvents = 'none'\n noteBadge.style.display = 'none'\n noteBadge.style.backdropFilter = 'blur(12px)'\n\n box.append(badge, noteBadge)\n return box\n}\n\nexport function applyOverlayState(\n box: HTMLDivElement,\n state: 'current' | 'saved' | 'completed',\n tokens: { accentPrimary(): string; accentPrimaryStrong(): string; successColor(): string },\n): void {\n const badge = box.querySelector('[data-inspecto-annotate-overlay-order]') as HTMLDivElement\n const accentPrimaryColor = tokens.accentPrimary()\n const accentPrimaryStrongColor = tokens.accentPrimaryStrong()\n const successColor = tokens.successColor()\n\n if (state === 'completed') {\n box.style.border = `2px solid ${successColor}`\n box.style.background = 'rgba(16, 185, 129, 0.05)'\n box.style.boxShadow = 'none'\n badge.style.background = successColor\n badge.style.opacity = '0.68'\n return\n }\n\n if (state === 'saved') {\n box.style.border = `2px solid ${accentPrimaryStrongColor}`\n box.style.background = 'rgba(79, 70, 229, 0.05)'\n box.style.boxShadow = 'none'\n badge.style.background = accentPrimaryStrongColor\n badge.style.opacity = '0.68'\n return\n }\n\n box.style.border = `2px solid ${accentPrimaryColor}`\n box.style.background = 'rgba(66, 133, 244, 0.12)'\n box.style.boxShadow = `0 0 0 1px rgba(66, 133, 244, 0.25), 0 8px 18px rgba(66, 133, 244, 0.18)`\n badge.style.background = accentPrimaryColor\n badge.style.opacity = '1'\n}\n\nexport function formatOverlayNoteBadge(note: string): string {\n const trimmed = note.trim().replace(/\\s+/g, ' ')\n if (trimmed.length <= 28) return trimmed\n return `${trimmed.slice(0, 27)}…`\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\nexport function getOverflowPenalty(\n candidate: PlacementCandidate,\n composerWidth: number,\n composerHeight: number,\n viewportLeft: number,\n viewportTop: number,\n viewportRight: number,\n viewportBottom: number,\n): number {\n const overflowLeft = Math.max(0, viewportLeft - candidate.left)\n const overflowRight = Math.max(0, candidate.left + composerWidth - viewportRight)\n const overflowTop = Math.max(0, viewportTop - candidate.top)\n const overflowBottom = Math.max(0, candidate.top + composerHeight - viewportBottom)\n return overflowLeft + overflowRight + overflowTop + overflowBottom\n}\n\nexport function getPlacementPreference(side: ComposerPlacement): number {\n const preference: Record<ComposerPlacement, number> = {\n below: 0,\n right: 18,\n left: 24,\n above: 42,\n }\n return preference[side]\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function applyComposerRuntimeButtonState(\n button: HTMLButtonElement,\n tokens: {\n surfaceSubtle(): string\n borderSubtle(): string\n textSecondary(): string\n accentPrimary(): string\n accentPrimaryStrong(): string\n shadowAccent(): string\n },\n enabled: boolean,\n): void {\n if (enabled) {\n button.style.background = `linear-gradient(180deg, ${tokens.accentPrimary()} 0%, ${tokens.accentPrimaryStrong()} 100%)`\n button.style.borderColor = 'transparent'\n button.style.color = '#ffffff'\n button.style.boxShadow = tokens.shadowAccent()\n return\n }\n\n button.style.background = tokens.surfaceSubtle()\n button.style.borderColor = tokens.borderSubtle()\n button.style.color = tokens.textSecondary()\n button.style.boxShadow = 'none'\n}\n\nexport function placePreview(preview: HTMLElement, target: SelectedTargetOverlayEntry): void {\n const rect = target.element.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n const top = Math.max(scrollY + 16, scrollY + rect.top - 54)\n const left = Math.min(\n scrollX + window.innerWidth - 276,\n Math.max(scrollX + 16, scrollX + rect.left),\n )\n preview.style.left = `${left}px`\n preview.style.top = `${top}px`\n}\n","type SelectedTargetOverlayEntry = {\n id: string\n element: Element\n order: number\n state?: 'current' | 'saved' | 'completed'\n note?: string\n onActivate?: () => void\n}\n\nexport type { SelectedTargetOverlayEntry }\n\nimport { createAnnotateOverlayDom } from './annotate-overlay-dom.js'\nimport { t } from './i18n.js'\nimport {\n applyComposerRuntimeButtonState,\n applyOverlayState,\n clamp,\n createOverlayBox,\n formatOverlayNoteBadge,\n formatRuntimeErrorCount,\n getOverflowPenalty,\n getPlacementPreference,\n placePreview,\n type ComposerPlacement,\n type PlacementCandidate,\n} from './annotate-overlay-helpers.js'\n\ntype ComposerOptions = {\n targetId?: string\n targetLabel: string\n targetMeta?: string\n note: string\n onOpenInEditor?: () => void\n canAttachCssContext?: boolean\n cssContextEnabled?: boolean\n canAttachRuntimeContext?: boolean\n runtimeContextEnabled?: boolean\n runtimeContextSummary?: string\n runtimeErrorCount?: number\n saveLabel?: string\n onToggleCssContext?: () => void\n onToggleRuntimeContext?: () => void\n onUpdateNote?: (note: string) => void\n onSave?: () => void\n onCancel?: () => void\n onDelete?: () => void\n}\n\nexport function createAnnotateOverlay(shadowRoot: ShadowRoot): {\n render(targets: SelectedTargetOverlayEntry[], composer?: ComposerOptions | null): void\n clear(): void\n} {\n const readToken = (name: string, fallback: string): string =>\n getComputedStyle(shadowRoot.host).getPropertyValue(name).trim() || fallback\n\n const tokens = {\n surfaceFloating: () => readToken('--inspecto-surface-floating', 'rgba(20, 20, 22, 0.94)'),\n surfaceSubtle: () => readToken('--inspecto-surface-subtle', 'rgba(255, 255, 255, 0.035)'),\n surfaceHover: () => readToken('--inspecto-surface-hover', 'rgba(255, 255, 255, 0.08)'),\n borderSubtle: () => readToken('--inspecto-border-subtle', 'rgba(255, 255, 255, 0.08)'),\n borderFocus: () => readToken('--inspecto-border-focus', 'rgba(93, 82, 243, 0.95)'),\n textPrimary: () => readToken('--inspecto-text-primary', 'rgba(255, 255, 255, 0.9)'),\n textSecondary: () => readToken('--inspecto-text-secondary', 'rgba(255, 255, 255, 0.72)'),\n textTertiary: () => readToken('--inspecto-text-tertiary', 'rgba(255, 255, 255, 0.46)'),\n accentPrimary: () => readToken('--inspecto-accent-primary', '#5d52f3'),\n accentPrimaryStrong: () => readToken('--inspecto-accent-primary-strong', '#4639d7'),\n successColor: () => readToken('--inspecto-success-color', '#10b981'),\n shadowFloating: () =>\n readToken('--inspecto-shadow-floating', '0 20px 48px rgba(0, 0, 0, 0.28)'),\n shadowAccent: () => readToken('--inspecto-shadow-accent', '0 8px 18px rgba(79, 70, 229, 0.28)'),\n radiusSm: () => readToken('--inspecto-radius-sm', '12px'),\n radiusMd: () => readToken('--inspecto-radius-md', '14px'),\n radiusLg: () => readToken('--inspecto-radius-lg', '18px'),\n radiusXl: () => readToken('--inspecto-radius-xl', '20px'),\n radiusPill: () => readToken('--inspecto-radius-pill', '999px'),\n }\n\n const {\n layer,\n composer,\n composerHeaderTitle,\n composerHeaderMeta,\n composerOpenButton,\n composerCssButton,\n composerRuntimeButton,\n composerRuntimeBadge,\n composerInput,\n composerActions,\n cancelButton,\n deleteButton,\n addButton,\n preview,\n } = createAnnotateOverlayDom(shadowRoot, tokens)\n const boxes = new Map<string, HTMLDivElement>()\n let isComposerFocused = false\n let activeComposerTargetId: string | null = null\n let activeComposerPlacement: ComposerPlacement | null = null\n\n composerInput.addEventListener('focus', () => {\n isComposerFocused = true\n })\n composerInput.addEventListener('blur', () => {\n isComposerFocused = false\n })\n composerActions.addEventListener('focusin', () => {\n isComposerFocused = true\n })\n composerActions.addEventListener('focusout', () => {\n isComposerFocused = false\n })\n\n function placeComposer(target: SelectedTargetOverlayEntry, preservePlacement: boolean): void {\n const rect = target.element.getBoundingClientRect()\n const viewportLeft = 16\n const viewportTop = 16\n const viewportRight = window.innerWidth - 16\n const viewportBottom = window.innerHeight - 16\n const gap = 14\n const fallbackWidth = 340\n const fallbackHeight = 240\n const composerRect = composer.getBoundingClientRect()\n const composerWidth = Math.max(240, Math.min(fallbackWidth, window.innerWidth - 32))\n const measuredHeight = composerRect.height\n const composerHeight =\n measuredHeight > 0 && measuredHeight < 360 ? measuredHeight : fallbackHeight\n const targetLeft = rect.left\n const targetRight = rect.right\n const targetTop = rect.top\n const targetBottom = rect.bottom\n const targetCenterX = targetLeft + rect.width / 2\n const targetCenterY = targetTop + rect.height / 2\n const candidates: PlacementCandidate[] = [\n {\n side: 'below',\n left: targetCenterX - composerWidth / 2,\n top: targetBottom + gap,\n },\n {\n side: 'right',\n left: targetRight + gap,\n top: targetCenterY - composerHeight / 2,\n },\n {\n side: 'left',\n left: targetLeft - composerWidth - gap,\n top: targetCenterY - composerHeight / 2,\n },\n {\n side: 'above',\n left: targetCenterX - composerWidth / 2,\n top: targetTop - composerHeight - gap,\n },\n ]\n\n const ranked = candidates\n .map(candidate => {\n const overflowPenalty = getOverflowPenalty(\n candidate,\n composerWidth,\n composerHeight,\n viewportLeft,\n viewportTop,\n viewportRight,\n viewportBottom,\n )\n const preferencePenalty = getPlacementPreference(candidate.side)\n const previousSideBonus =\n preservePlacement && activeComposerPlacement === candidate.side ? -30 : 0\n\n return {\n candidate,\n score: overflowPenalty * 1000 + preferencePenalty + previousSideBonus,\n }\n })\n .sort((a, b) => a.score - b.score)\n\n const chosen = ranked[0]!.candidate\n activeComposerPlacement = chosen.side\n\n const left = clamp(chosen.left, viewportLeft, viewportRight - composerWidth)\n const top = clamp(chosen.top, viewportTop, viewportBottom - composerHeight)\n\n composer.style.left = `${left}px`\n composer.style.top = `${top}px`\n }\n\n function render(\n targets: SelectedTargetOverlayEntry[],\n composerOptions?: ComposerOptions | null,\n ): void {\n const nextIds = new Set(targets.map(target => target.id))\n\n for (const [id, box] of boxes) {\n if (!nextIds.has(id)) {\n box.remove()\n boxes.delete(id)\n }\n }\n\n for (const target of targets) {\n const rect = target.element.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n let box = boxes.get(target.id)\n if (!box) {\n box = createOverlayBox(tokens)\n boxes.set(target.id, box)\n }\n applyOverlayState(box, target.state ?? 'current', tokens)\n box.style.left = `${scrollX + rect.left}px`\n box.style.top = `${scrollY + rect.top}px`\n box.style.width = `${rect.width}px`\n box.style.height = `${rect.height}px`\n\n const badge = box.querySelector('[data-inspecto-annotate-overlay-order]') as HTMLDivElement\n const noteBadge = box.querySelector('[data-inspecto-annotate-overlay-note]') as HTMLDivElement\n badge.textContent = String(target.order)\n\n if ((target.state ?? 'current') === 'saved' || (target.state ?? 'current') === 'completed') {\n const trimmedNote = target.note?.trim() ?? ''\n const hasNote = trimmedNote.length > 0\n noteBadge.style.display = hasNote ? 'block' : 'none'\n noteBadge.textContent = hasNote ? formatOverlayNoteBadge(trimmedNote) : ''\n box.style.cursor = 'pointer'\n box.onmouseenter = () => {\n badge.textContent = '✎'\n if (hasNote) {\n preview.textContent = trimmedNote\n preview.style.display = 'block'\n placePreview(preview, target)\n }\n }\n box.onmouseleave = () => {\n badge.textContent = String(target.order)\n preview.style.display = 'none'\n preview.textContent = ''\n }\n box.onclick = () => target.onActivate?.()\n } else {\n noteBadge.style.display = 'none'\n noteBadge.textContent = ''\n box.style.cursor = 'default'\n box.onmouseenter = null\n box.onmouseleave = null\n box.onclick = null\n }\n\n if (box.parentElement !== layer) {\n layer.appendChild(box)\n }\n }\n\n if (targets.length > 0 && composerOptions) {\n const targetChanged =\n activeComposerTargetId !== (composerOptions.targetId ?? targets[0]?.id ?? null)\n const composerTarget =\n targets.find(target => (target.state ?? 'current') === 'current') ?? targets[0]!\n activeComposerTargetId = composerOptions.targetId ?? targets[0]?.id ?? null\n composerHeaderTitle.textContent = composerOptions.targetLabel\n composerHeaderMeta.textContent = composerOptions.targetMeta ?? ''\n composerHeaderMeta.style.display = composerOptions.targetMeta ? '' : 'none'\n composerOpenButton.onclick = () => composerOptions.onOpenInEditor?.()\n composerCssButton.style.display = composerOptions.canAttachCssContext ? 'inline-flex' : 'none'\n composerCssButton.setAttribute(\n 'aria-pressed',\n composerOptions.cssContextEnabled ? 'true' : 'false',\n )\n composerCssButton.dataset.visualState = composerOptions.cssContextEnabled\n ? 'active'\n : 'inactive'\n composerCssButton.title = composerOptions.cssContextEnabled\n ? t('menu.cssEnabled')\n : t('menu.attachCss')\n applyComposerRuntimeButtonState(\n composerCssButton,\n tokens,\n composerOptions.cssContextEnabled === true,\n )\n composerCssButton.onclick = () => composerOptions.onToggleCssContext?.()\n composerRuntimeButton.style.display = composerOptions.canAttachRuntimeContext\n ? 'inline-flex'\n : 'none'\n composerRuntimeButton.setAttribute(\n 'aria-pressed',\n composerOptions.runtimeContextEnabled ? 'true' : 'false',\n )\n composerRuntimeButton.dataset.visualState = composerOptions.runtimeContextEnabled\n ? 'active'\n : 'inactive'\n composerRuntimeBadge.textContent = formatRuntimeErrorCount(\n composerOptions.runtimeErrorCount ?? 0,\n )\n composerRuntimeBadge.style.display =\n composerOptions.runtimeContextEnabled && (composerOptions.runtimeErrorCount ?? 0) > 0\n ? ''\n : 'none'\n composerRuntimeButton.title = composerOptions.runtimeContextEnabled\n ? composerOptions.runtimeErrorCount\n ? `${t('menu.runtimeEnabled')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(composerOptions.runtimeErrorCount) })}`\n : composerOptions.runtimeContextSummary\n ? `${t('menu.runtimeEnabled')} • ${composerOptions.runtimeContextSummary}`\n : t('menu.runtimeEnabled')\n : composerOptions.runtimeErrorCount\n ? `${t('menu.attachRuntime')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(composerOptions.runtimeErrorCount) })}`\n : t('menu.attachRuntime')\n applyComposerRuntimeButtonState(\n composerRuntimeButton,\n tokens,\n composerOptions.runtimeContextEnabled === true,\n )\n composerRuntimeButton.onclick = () => composerOptions.onToggleRuntimeContext?.()\n if ((targetChanged || !isComposerFocused) && composerInput.value !== composerOptions.note) {\n composerInput.value = composerOptions.note\n }\n composer.style.display = 'block'\n composer.style.opacity = '1'\n composer.style.transform = 'translate3d(0, 0, 0) scale(1)'\n placeComposer(composerTarget, !targetChanged)\n composerInput.oninput = () => composerOptions.onUpdateNote?.(composerInput.value)\n addButton.textContent = composerOptions.saveLabel ?? t('annotate.saveNote')\n addButton.onclick = () => composerOptions.onSave?.()\n cancelButton.onclick = () => composerOptions.onCancel?.()\n deleteButton.style.display = composerOptions.onDelete ? 'inline-flex' : 'none'\n deleteButton.onclick = () => composerOptions.onDelete?.()\n return\n }\n\n composer.style.display = 'none'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n activeComposerTargetId = null\n activeComposerPlacement = null\n composerInput.value = ''\n composerInput.oninput = null\n addButton.textContent = t('annotate.saveNote')\n addButton.onclick = null\n cancelButton.onclick = null\n composerOpenButton.onclick = null\n composerCssButton.style.display = 'none'\n composerCssButton.onclick = null\n composerCssButton.setAttribute('aria-pressed', 'false')\n composerCssButton.dataset.visualState = 'inactive'\n composerCssButton.title = t('menu.attachCss')\n applyComposerRuntimeButtonState(composerCssButton, tokens, false)\n composerRuntimeButton.style.display = 'none'\n composerRuntimeButton.onclick = null\n deleteButton.style.display = 'none'\n deleteButton.onclick = null\n preview.style.display = 'none'\n preview.textContent = ''\n }\n\n function clear(): void {\n layer.replaceChildren()\n boxes.clear()\n composer.style.display = 'none'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n activeComposerTargetId = null\n activeComposerPlacement = null\n composerInput.value = ''\n addButton.textContent = t('annotate.saveNote')\n composerOpenButton.onclick = null\n composerRuntimeButton.style.display = 'none'\n composerRuntimeButton.onclick = null\n deleteButton.style.display = 'none'\n deleteButton.onclick = null\n preview.style.display = 'none'\n preview.textContent = ''\n }\n\n return { render, clear }\n}\n","import type { HotKey, HotKeys, SourceLocation } from '@inspecto-dev/types'\n\nconst ATTR_NAME = 'data-inspecto'\nconst ASTRO_FILE_ATTR_NAME = 'data-astro-source-file'\nconst ASTRO_LOC_ATTR_NAME = 'data-astro-source-loc'\n\nexport function parseAttrValue(value: string): SourceLocation | null {\n const parts = value.split(':')\n if (parts.length < 3) return null\n\n const col = parseInt(parts[parts.length - 1]!, 10)\n const line = parseInt(parts[parts.length - 2]!, 10)\n const file = parts.slice(0, parts.length - 2).join(':')\n\n if (isNaN(line) || isNaN(col) || !file) return null\n return { file, line, column: col }\n}\n\nexport function parseAstroAttrValue(file: string, loc: string): SourceLocation | null {\n const parts = loc.split(':')\n if (parts.length !== 2) return null\n\n const line = parseInt(parts[0]!, 10)\n const column = parseInt(parts[1]!, 10)\n if (isNaN(line) || isNaN(column) || !file) return null\n\n return { file, line, column }\n}\n\nexport function getInspectableLocation(el: Element): SourceLocation | null {\n const attrValue = el.getAttribute(ATTR_NAME)\n if (attrValue) {\n return parseAttrValue(attrValue)\n }\n\n const astroFile = el.getAttribute(ASTRO_FILE_ATTR_NAME)\n const astroLoc = el.getAttribute(ASTRO_LOC_ATTR_NAME)\n if (astroFile && astroLoc) {\n return parseAstroAttrValue(astroFile, astroLoc)\n }\n\n return null\n}\n\nexport function findInspectable(el: Element | null): Element | null {\n while (el) {\n if (getInspectableLocation(el)) return el\n el = el.parentElement\n }\n return null\n}\n\nfunction parseHotKeyString(hotKey: string): HotKey[] {\n const keys = hotKey.split('+').map(k => k.trim().toLowerCase())\n const result: HotKey[] = []\n\n if (keys.includes('alt') || keys.includes('option')) result.push('altKey')\n if (keys.includes('ctrl') || keys.includes('control')) result.push('ctrlKey')\n if (\n keys.includes('meta') ||\n keys.includes('cmd') ||\n keys.includes('command') ||\n keys.includes('win')\n ) {\n result.push('metaKey')\n }\n if (keys.includes('shift')) result.push('shiftKey')\n\n return result\n}\n\nexport function hotKeysHeld(event: MouseEvent, hotKeys: HotKeys): boolean {\n if (!hotKeys) return false\n const mappedKeys = parseHotKeyString(hotKeys)\n if (mappedKeys.length === 0) return false\n return mappedKeys.every(key => event[key])\n}\n\nexport function getDeepActiveElement(root: Document | ShadowRoot | null): Element | null {\n let current: Element | null = root?.activeElement ?? null\n while (current && current.shadowRoot?.activeElement) {\n current = current.shadowRoot.activeElement\n }\n return current\n}\n\nexport function createElementSelector(element: Element): string {\n if (element.id) return `#${element.id}`\n\n const segments: string[] = []\n let current: Element | null = element\n\n while (current && current !== document.body) {\n const tag = current.tagName.toLowerCase()\n const siblings = current.parentElement\n ? Array.from(current.parentElement.children).filter(\n sibling => sibling.tagName.toLowerCase() === tag,\n )\n : []\n const index = siblings.indexOf(current)\n const nth = index >= 0 ? `:nth-of-type(${index + 1})` : ''\n segments.unshift(`${tag}${nth}`)\n\n if (current.id) {\n segments[0] = `#${current.id}`\n break\n }\n\n current = current.parentElement\n }\n\n return segments.join(' > ')\n}\n\nexport { ATTR_NAME }\n","import type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\nimport type {\n AnnotationTarget,\n AnnotationTransport,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n FeedbackRecord,\n FeedbackRecordDraft,\n} from '@inspecto-dev/types'\n\nexport type AnnotateContext = {\n cleanupMenu: (() => void) | null\n annotateSession: {\n current: {\n id: string\n displayOrder?: number\n target: AnnotationTarget | null\n note: string\n intent: 'review' | 'fix' | 'redesign' | 'ask'\n cssContextEnabled?: boolean\n }\n records: FeedbackRecord[]\n }\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n annotateSidebar: { update(next: AnnotateSidebarOptions): void; destroy(): void } | null\n annotateOverlay: {\n render(\n targets: SelectedTargetOverlayEntry[],\n current?: {\n targetId: string\n targetLabel: string\n targetMeta: string\n note: string\n onOpenInEditor: () => void\n canAttachCssContext: boolean\n cssContextEnabled: boolean\n canAttachRuntimeContext: boolean\n runtimeContextEnabled: boolean\n runtimeContextSummary: string\n runtimeErrorCount: number\n saveLabel: string\n onToggleCssContext: () => void\n onUpdateNote: (note: string) => void\n onSave: () => void\n onCancel: () => void\n onDelete?: () => void\n },\n ): void\n clear(): void\n } | null\n annotateElements: Map<string, Element>\n annotateDrafts: Map<string, FeedbackRecordDraft>\n annotateEditingRecord: FeedbackRecord | null\n annotateInstructionDraft: string\n annotateErrorMessage: string\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateDeliveryMode: 'ide' | 'agent' | 'both'\n annotateSendState: {\n isSending: boolean\n scope: 'quick-ask' | 'create-task' | null\n }\n annotateLatestSessionSummary: AnnotationWorkSessionSummary | null\n annotateLatestSessionDetail: AnnotationWorkSession | null\n annotateLatestSessionStream: import('./http.js').AnnotationSessionEventStreamConnection | null\n annotateLatestSessionLoading: boolean\n annotateLatestSessionError: string\n annotateSuccessScope: 'quick-ask' | 'create-task' | null\n annotateSuccessTimeout: ReturnType<typeof setTimeout> | null\n annotateSuccessOnClear: (() => void) | null\n configLoadPromise: Promise<void> | null\n mode: 'inspect' | 'annotate'\n shadowRootEl: ShadowRoot\n overlay: { hide(): void }\n setMode(mode: 'inspect' | 'annotate'): void\n syncModeUi(): void\n syncRuntimeContextCapture(): void\n updateAnnotateSidebar(): void\n getAnnotateSidebarOptions(): AnnotateSidebarOptions\n renderAnnotateSelectionOverlay(): void\n clearAnnotateError(): void\n clearAnnotateSuccess(): void\n showAnnotateSuccess(scope: 'quick-ask' | 'create-task'): void\n refreshLatestAnnotateSession(): Promise<void>\n startLatestAnnotateSessionStream(sessionId: string): void\n stopLatestAnnotateSessionStream(): void\n getAnnotateRuntimeContext(\n annotations: AnnotationTransport[],\n includeWhenDisabled?: boolean,\n ): ReturnType<typeof import('./runtime-context.js').createRuntimeContextEnvelope> | null\n getAnnotateCssContextPrompt(\n annotations: AnnotationTransport[],\n includeWhenDisabled?: boolean,\n ): string | null\n canAttachRuntimeContext(): boolean\n formatRuntimeContextSummary(\n runtimeContext: ReturnType<\n typeof import('./runtime-context.js').createRuntimeContextEnvelope\n > | null,\n ): string\n getCollectedRuntimeErrorCount(): number\n canAttachCssContext(): boolean\n}\n\nexport function asAnnotateContext(ctx: unknown): AnnotateContext {\n return ctx as AnnotateContext\n}\n","import {\n createEmptySession,\n editRecord,\n saveCurrentRecord,\n setCurrentRecordTarget,\n} from './annotate-session.js'\nimport { ATTR_NAME, getInspectableLocation } from './component-utils.js'\nimport type { AnnotationTarget, FeedbackRecord, SourceLocation } from '@inspecto-dev/types'\nimport { asAnnotateContext } from './component-annotate-shared.js'\n\nexport function addTargetToCurrentAnnotation(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): void {\n const state = asAnnotateContext(ctx)\n state.cleanupMenu?.()\n state.cleanupMenu = null\n\n const target = createAnnotationTarget(state, element, location)\n const nextDraftKey = getAnnotationTargetKey(state, target)\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n }\n\n const existingRecord = state.annotateSession.records.find(\n record => getAnnotationTargetKey(state, record.target) === nextDraftKey,\n )\n if (existingRecord) {\n state.annotateDrafts.delete(nextDraftKey)\n state.annotateSession = setCurrentRecordTarget(state.annotateSession, target)\n } else {\n const cachedDraft = state.annotateDrafts.get(nextDraftKey)\n state.annotateSession = cachedDraft\n ? {\n ...state.annotateSession,\n current: {\n ...cachedDraft,\n target,\n },\n }\n : {\n ...state.annotateSession,\n current: {\n ...createEmptySession().current,\n target,\n },\n }\n }\n\n state.annotateElements.clear()\n state.annotateElements.set(state.annotateSession.current.id, element)\n state.syncModeUi()\n}\n\nexport function markTargetInAnnotateSession(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): void {\n const state = asAnnotateContext(ctx)\n state.cleanupMenu?.()\n state.cleanupMenu = null\n\n const target = createAnnotationTarget(state, element, location)\n const nextDraftKey = getAnnotationTargetKey(state, target)\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n const existingRecord = state.annotateSession.records.find(\n record => getAnnotationTargetKey(state, record.target) === nextDraftKey,\n )\n\n if (existingRecord) {\n state.annotateDrafts.delete(nextDraftKey)\n beginEditingRecord(state, existingRecord.id)\n return\n }\n\n if (\n state.annotateEditingRecord &&\n getAnnotationTargetKey(state, state.annotateEditingRecord.target) === nextDraftKey\n ) {\n rebindCurrentAnnotationElements(state)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n return\n }\n\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n restoreEditingRecord(state)\n }\n\n state.annotateEditingRecord = null\n state.annotateSession = {\n ...state.annotateSession,\n current: {\n ...createEmptySession().current,\n },\n }\n state.annotateSession = setCurrentRecordTarget(state.annotateSession, target)\n state.annotateElements.clear()\n state.annotateElements.set(state.annotateSession.current.id, element)\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = saveCurrentRecord(state.annotateSession)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n}\n\nexport function getAnnotationTargetKey(_ctx: unknown, target: AnnotationTarget): string {\n return `${target.location.file}:${target.location.line}:${target.location.column}::${target.selector ?? ''}`\n}\n\nexport function persistCurrentDraft(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n const current = state.annotateSession.current\n if (!current.target) return\n\n const key = getAnnotationTargetKey(state, current.target)\n if (\n current.note.trim().length === 0 &&\n current.intent === 'review' &&\n !(current.cssContextEnabled ?? false)\n ) {\n state.annotateDrafts.delete(key)\n return\n }\n\n state.annotateDrafts.set(key, {\n ...current,\n target: current.target,\n })\n}\n\nexport function clearDraftForTarget(\n ctx: unknown,\n target: AnnotationTarget | null | undefined,\n): void {\n const state = asAnnotateContext(ctx)\n if (!target) return\n state.annotateDrafts.delete(getAnnotationTargetKey(state, target))\n}\n\nexport function restoreEditingRecord(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateEditingRecord) return\n\n const current = state.annotateSession.current\n const restoredRecord: FeedbackRecord =\n current.target && current.id === state.annotateEditingRecord.id\n ? {\n id: current.id,\n displayOrder: current.displayOrder ?? state.annotateEditingRecord.displayOrder,\n target: current.target,\n note: current.note,\n intent: current.intent,\n }\n : state.annotateEditingRecord\n\n state.annotateSession = {\n ...state.annotateSession,\n records: [\n ...state.annotateSession.records.filter(record => record.id !== restoredRecord.id),\n restoredRecord,\n ].sort((a, b) => a.displayOrder - b.displayOrder),\n }\n state.annotateEditingRecord = null\n}\n\nexport function beginEditingRecord(ctx: unknown, recordId: string): void {\n const state = asAnnotateContext(ctx)\n const record = state.annotateSession.records.find(entry => entry.id === recordId)\n if (!record) return\n\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n const nextDraftKey = getAnnotationTargetKey(state, record.target)\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n if (state.annotateQuickCaptureEnabled) {\n restoreEditingRecord(state)\n }\n }\n\n state.annotateEditingRecord = record\n state.annotateSession = editRecord(state.annotateSession, recordId)\n rebindCurrentAnnotationElements(state)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n}\n\nexport function findElementForAnnotationTarget(\n ctx: unknown,\n target: AnnotationTarget,\n): Element | null {\n return findElementForLocation(ctx, target.location, target.selector)\n}\n\nexport function findElementForLocation(\n _ctx: unknown,\n location: SourceLocation,\n selector?: string,\n): Element | null {\n if (selector) {\n const bySelector = document.querySelector(selector)\n if (bySelector instanceof Element) {\n return bySelector\n }\n }\n\n const locationAttr = `${location.file}:${location.line}:${location.column}`\n const byLocation = Array.from(document.querySelectorAll(`[${ATTR_NAME}]`)).find(\n candidate => candidate.getAttribute(ATTR_NAME) === locationAttr,\n )\n if (byLocation instanceof Element) {\n return byLocation\n }\n\n const byAstroLocation = Array.from(\n document.querySelectorAll('[data-astro-source-file][data-astro-source-loc]'),\n ).find(candidate => {\n const candidateLocation = getInspectableLocation(candidate)\n return (\n candidateLocation?.file === location.file &&\n candidateLocation.line === location.line &&\n candidateLocation.column === location.column\n )\n })\n\n return byAstroLocation instanceof Element ? byAstroLocation : null\n}\n\nexport function rebindCurrentAnnotationElements(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n state.annotateElements.clear()\n\n if (!state.annotateSession.current.target) return\n\n const element = findElementForAnnotationTarget(state, state.annotateSession.current.target)\n if (element) {\n state.annotateElements.set(state.annotateSession.current.id, element)\n }\n}\n\nexport function createAnnotationTarget(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): AnnotationTarget {\n const rect = element.getBoundingClientRect()\n\n return {\n id:\n globalThis.crypto?.randomUUID?.() ??\n `target-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n location,\n label: describeElement(ctx, element),\n selector: createSelector(element),\n rect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n },\n }\n}\n\nexport function describeElement(_ctx: unknown, element: Element): string {\n const id = element.id ? `#${element.id}` : ''\n const className =\n typeof element.className === 'string'\n ? element.className\n .split(/\\s+/)\n .filter(Boolean)\n .map(name => `.${name}`)\n .join('')\n : ''\n\n return `${element.tagName.toLowerCase()}${id}${className}` || element.tagName.toLowerCase()\n}\n\nexport function createSelector(element: Element): string {\n if (element.id) return `#${element.id}`\n\n const segments: string[] = []\n let current: Element | null = element\n\n while (current && current !== document.body) {\n const tag = current.tagName.toLowerCase()\n const siblings = current.parentElement\n ? Array.from(current.parentElement.children).filter(\n sibling => sibling.tagName.toLowerCase() === tag,\n )\n : []\n const index = siblings.indexOf(current)\n const nth = index >= 0 ? `:nth-of-type(${index + 1})` : ''\n segments.unshift(`${tag}${nth}`)\n\n if (current.id) {\n segments[0] = `#${current.id}`\n break\n }\n\n current = current.parentElement\n }\n\n return segments.join(' > ')\n}\n","import type { SourceLocation } from '@inspecto-dev/types'\n\nexport type CssContextEntry = {\n label?: string\n selector?: string\n location?: SourceLocation\n summary: string\n}\n\nexport function appendCssContextToPrompt(\n prompt: string,\n cssContextPrompt: string | null | undefined,\n): string {\n if (!cssContextPrompt?.trim()) return prompt\n return `${prompt}\\n\\n${cssContextPrompt.trim()}`\n}\n\nexport function buildCssContextPrompt(entries: CssContextEntry[]): string | null {\n if (entries.length === 0) return null\n\n const lines = ['Relevant CSS context:']\n\n for (const entry of entries) {\n lines.push(`- ${entry.label ?? 'Unknown target'}`)\n if (entry.location) {\n lines.push(`file=${entry.location.file}:${entry.location.line}:${entry.location.column}`)\n }\n lines.push(`computed: ${entry.summary}`)\n }\n\n return lines.join('\\n')\n}\n\nexport function captureCssContextEntry(input: {\n element: Element\n label?: string\n selector?: string\n location?: SourceLocation\n}): CssContextEntry | null {\n if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n return null\n }\n\n const styles = window.getComputedStyle(input.element)\n const summary = buildStyleSummary(styles)\n if (!summary) return null\n\n return {\n ...(input.label ? { label: input.label } : {}),\n ...(input.selector ? { selector: input.selector } : {}),\n ...(input.location ? { location: input.location } : {}),\n summary,\n }\n}\n\nfunction buildStyleSummary(styles: CSSStyleDeclaration): string {\n const parts = [\n formatToken('display', styles.display),\n formatToken('position', styles.position),\n formatBoxToken('margin', styles.margin),\n formatBoxToken('padding', styles.padding),\n formatToken('gap', styles.gap, { skip: ['normal', '0px'] }),\n formatToken('align-items', styles.alignItems, { skip: ['normal', 'stretch'] }),\n formatToken('justify-content', styles.justifyContent, { skip: ['normal', 'flex-start'] }),\n formatToken('font-size', styles.fontSize),\n formatToken('line-height', styles.lineHeight, { skip: ['normal'] }),\n formatToken('font-weight', styles.fontWeight, { skip: ['400', 'normal'] }),\n formatToken('color', styles.color),\n formatToken('background', styles.backgroundColor, {\n skip: ['rgba(0, 0, 0, 0)', 'transparent'],\n }),\n formatToken('border', styles.border, { skip: ['0px none rgb(0, 0, 0)', 'none'] }),\n formatToken('border-radius', styles.borderRadius, { skip: ['0px'] }),\n formatToken('box-shadow', styles.boxShadow, { skip: ['none'] }),\n formatToken('opacity', styles.opacity, { skip: ['1'] }),\n ].filter(Boolean)\n\n return parts.join('; ')\n}\n\nfunction formatBoxToken(label: string, value: string): string | null {\n return formatToken(label, normalizeWhitespace(value), {\n skip: ['0px', '0px 0px 0px 0px', '0px 0px'],\n })\n}\n\nfunction formatToken(\n label: string,\n value: string,\n options: { skip?: string[] } = {},\n): string | null {\n const normalized = normalizeWhitespace(value)\n if (!normalized || options.skip?.includes(normalized)) return null\n return `${label}=${normalized}`\n}\n\nfunction normalizeWhitespace(value: string): string {\n return value.trim().replace(/\\s+/g, ' ')\n}\n","import type {\n AnnotationTransport,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n} from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\n\nexport function buildAnnotateFullPrompt(input: {\n instruction: string\n annotations: AnnotationTransport[]\n runtimeContext?: RuntimeContextEnvelope | null\n cssContextPrompt?: string | null\n}): string {\n const instruction = input.instruction.trim()\n const body = buildSelectedElementsPrompt(input.annotations)\n\n const prompt = instruction ? `${instruction}\\n\\n${body}` : body\n return appendCssContextToPrompt(\n appendRuntimeContextSection(prompt, input.runtimeContext),\n input.cssContextPrompt,\n )\n}\n\nfunction buildSelectedElementsPrompt(annotations: AnnotationTransport[]): string {\n const lines = ['Selected elements:']\n\n for (const annotation of annotations) {\n const trimmedNote = annotation.note.trim()\n for (const target of annotation.targets) {\n const targetLabel = (target.label || 'Unknown target').trim() || 'Unknown target'\n lines.push(`- ${targetLabel}`)\n lines.push(\n `file=${formatLocation(target.location.file, target.location.line, target.location.column)}`,\n )\n if (trimmedNote) {\n lines.push(`note=${trimmedNote}`)\n }\n }\n }\n\n if (lines.length === 1) {\n lines.push('- None')\n }\n\n return lines.join('\\n')\n}\n\nfunction formatLocation(file: string, line: number, column: number): string {\n return `${file}:${line}:${column}`\n}\n\nfunction appendRuntimeContextSection(\n prompt: string,\n runtimeContext: RuntimeContextEnvelope | null | undefined,\n): string {\n if (!runtimeContext?.records.length) return prompt\n return `${prompt}\\n\\n${buildRuntimeContextSection(runtimeContext.records)}`\n}\n\nfunction buildRuntimeContextSection(records: RuntimeEvidenceRecord[]): string {\n return ['Relevant runtime context:', ...records.map(formatRuntimeRecord)].join('\\n')\n}\n\nfunction formatRuntimeRecord(record: RuntimeEvidenceRecord): string {\n const requestSummary =\n record.kind === 'failed-request'\n ? `request=${record.request?.method ?? 'GET'} ${record.request?.pathname ?? record.request?.url ?? 'unknown'} status=${record.request?.status ?? 'unknown'}`\n : `occurrences=${record.occurrenceCount}`\n const reasonSummary = record.relevanceReasons.length\n ? record.relevanceReasons.join('; ')\n : 'timing-based'\n const stackSummary = record.stack\n ? `\\n stack=${record.stack.split('\\n').slice(0, 5).join(' | ')}`\n : ''\n\n return [\n `- [${record.kind}] ${record.message}`,\n ` relevance=${record.relevanceLevel} (${reasonSummary})`,\n ` ${requestSummary}`,\n stackSummary,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","import type {\n AnnotationSessionEvent,\n SnippetResponse,\n SendToAiRequest,\n SendToAiResponse,\n SendAnnotationsToAiRequest,\n SendAnnotationsToAiResponse,\n AnnotationWorkSession,\n OpenFileRequest,\n InspectoConfig,\n AiErrorCode,\n} from '@inspecto-dev/types'\nimport { INSPECTO_API_PATHS } from '@inspecto-dev/types'\n\nlet BASE_URL = globalThis.__AI_INSPECTOR_SERVER_URL__ || 'http://127.0.0.1:5678'\nconst AI_BATCH_DISPATCH_PATH =\n INSPECTO_API_PATHS.AI_BATCH_DISPATCH ?? '/inspecto/api/v1/ai/dispatch/annotations'\n\nexport interface OpenFileResult {\n success: boolean\n errorCode?: AiErrorCode\n}\n\nexport interface AnnotationSessionResult {\n success: boolean\n session?: AnnotationWorkSession\n error?: string\n errorCode?: AiErrorCode\n}\n\nexport interface AnnotationSessionEventStreamConnection {\n close(): void\n}\n\nexport function setBaseUrl(url: string): void {\n BASE_URL = url.replace(/\\/$/, '')\n}\n\nlet cachedConfig: InspectoConfig | null = null\n\nexport async function fetchIdeInfo(force = false): Promise<InspectoConfig | null> {\n if (cachedConfig && !force) return cachedConfig\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.CLIENT_CONFIG}`)\n if (!res.ok) return null\n cachedConfig = await res.json()\n return cachedConfig\n } catch {\n return null\n }\n}\n\nexport async function openFile(req: OpenFileRequest): Promise<boolean> {\n return (await openFileWithDiagnostics(req)).success\n}\n\nexport async function openFileWithDiagnostics(req: OpenFileRequest): Promise<OpenFileResult> {\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.SOURCE_OPEN}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (res.ok) return { success: true }\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string }\n return {\n success: false,\n errorCode: (err.errorCode as AiErrorCode | undefined) ?? 'IDE_UNAVAILABLE',\n }\n } catch {\n return { success: false, errorCode: 'SERVER_UNAVAILABLE' }\n }\n}\n\nexport async function fetchSnippet(\n file: string,\n line: number,\n column: number,\n maxLines = 100,\n): Promise<SnippetResponse> {\n const params = new URLSearchParams({\n file,\n line: String(line),\n column: String(column),\n maxLines: String(maxLines),\n })\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.PROJECT_SNIPPET}?${params}`)\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string }\n throw Object.assign(new Error('snippet fetch failed'), { errorCode: err.errorCode })\n }\n return res.json() as Promise<SnippetResponse>\n } catch (err) {\n if ((err as { errorCode?: string }).errorCode) throw err\n throw Object.assign(new Error('Local dev server unavailable'), {\n errorCode: 'SERVER_UNAVAILABLE',\n })\n }\n}\n\nexport async function sendToAi(req: SendToAiRequest): Promise<SendToAiResponse> {\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.AI_DISPATCH}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n return res.json() as Promise<SendToAiResponse>\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport async function sendAnnotationsToAi(\n req: SendAnnotationsToAiRequest,\n): Promise<SendAnnotationsToAiResponse> {\n try {\n const res = await fetch(`${BASE_URL}${AI_BATCH_DISPATCH_PATH}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n return res.json() as Promise<SendAnnotationsToAiResponse>\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport async function fetchAnnotationSession(sessionId: string): Promise<AnnotationSessionResult> {\n try {\n const res = await fetch(\n `${BASE_URL}${INSPECTO_API_PATHS.SESSIONS}/${encodeURIComponent(sessionId)}`,\n )\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n const payload = (await res.json()) as {\n success: boolean\n session?: AnnotationWorkSession\n error?: string\n }\n return {\n success: payload.success,\n ...(payload.session !== undefined ? { session: payload.session } : {}),\n ...(payload.error !== undefined ? { error: payload.error } : {}),\n }\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport function openAnnotationSessionEventStream(\n sessionId: string,\n handlers: {\n onEvent: (event: AnnotationSessionEvent) => void\n onError?: () => void\n },\n): AnnotationSessionEventStreamConnection | null {\n if (!sessionId.trim() || typeof EventSource !== 'function') {\n return null\n }\n\n const params = new URLSearchParams({ sessionId: sessionId.trim() })\n const source = new EventSource(`${BASE_URL}${INSPECTO_API_PATHS.SESSION_EVENTS}?${params}`)\n\n const handleEvent = (event: Event): void => {\n const messageEvent = event as MessageEvent<string>\n try {\n const payload = JSON.parse(messageEvent.data) as AnnotationSessionEvent\n handlers.onEvent(payload)\n } catch {\n // ignore malformed events\n }\n }\n\n source.addEventListener('session-created', handleEvent)\n source.addEventListener('session-message-appended', handleEvent)\n source.addEventListener('session-status-updated', handleEvent)\n if (handlers.onError) {\n source.addEventListener('error', handlers.onError)\n }\n\n return {\n close() {\n source.close()\n },\n }\n}\n","import {\n clearCurrentRecord,\n createEmptySession,\n removeRecord,\n saveCurrentRecord,\n updateCurrentRecordCssContextEnabled,\n updateCurrentRecordNote,\n} from './annotate-session.js'\nimport { buildAnnotateFullPrompt } from './annotate-full-prompt.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\nimport {\n fetchAnnotationSession,\n openAnnotationSessionEventStream,\n openFile,\n sendAnnotationsToAi,\n} from './http.js'\nimport type {\n AiErrorCode,\n AnnotationDeliveryMode,\n AnnotationSessionEvent,\n AnnotationTransport,\n FeedbackRecord,\n AnnotationWorkSession,\n} from '@inspecto-dev/types'\nimport { asAnnotateContext } from './component-annotate-shared.js'\nimport {\n beginEditingRecord,\n clearDraftForTarget,\n findElementForAnnotationTarget,\n getAnnotationTargetKey,\n restoreEditingRecord,\n} from './component-annotate-targets.js'\nimport { t } from './i18n.js'\n\nfunction formatContextAsMarkdown(instruction: string, annotations: AnnotationTransport[]): string {\n let md = ''\n if (instruction) {\n md += `${instruction}\\n\\n`\n }\n if (annotations.length > 0) {\n md += '### Selected Elements\\n\\n'\n annotations.forEach((ann, index) => {\n md += `**Annotation ${index + 1}**\\n`\n if (ann.note) {\n md += `* Note: ${ann.note}\\n`\n }\n ann.targets.forEach((target, targetIndex) => {\n md += `\\n* Target ${targetIndex + 1}:\\n`\n if (target.label) md += ` - Label: \\`${target.label}\\`\\n`\n if (target.location)\n md += ` - Location: \\`${target.location.file.split('/').pop() || target.location.file}:${target.location.line}:${target.location.column}\\`\\n`\n if (target.selector) md += ` - Selector: \\`${target.selector}\\`\\n`\n if (target.snippet) md += `\\n \\`\\`\\`\\n${target.snippet}\\n \\`\\`\\`\\n`\n })\n md += '\\n---\\n\\n'\n })\n }\n return md.trim()\n}\n\nexport function hasCurrentRecordUi(ctx: unknown): boolean {\n return Boolean(asAnnotateContext(ctx).annotateSession.current.target)\n}\n\nexport function getNextRecordDisplayOrderUi(ctx: unknown): number {\n const state = asAnnotateContext(ctx)\n return (\n state.annotateSession.records.reduce(\n (maxOrder, record) => Math.max(maxOrder, record.displayOrder),\n 0,\n ) + 1\n )\n}\n\nexport function clearAnnotateError(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateErrorMessage) return\n state.annotateErrorMessage = ''\n state.updateAnnotateSidebar()\n}\n\nexport function clearAnnotateSuccess(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n const hadSuccess = state.annotateSuccessScope !== null\n state.annotateSuccessScope = null\n if (state.annotateSuccessTimeout) {\n clearTimeout(state.annotateSuccessTimeout)\n state.annotateSuccessTimeout = null\n }\n state.annotateSuccessOnClear = null\n if (hadSuccess) {\n state.updateAnnotateSidebar()\n }\n}\n\nexport function showAnnotateSuccess(ctx: unknown, scope: 'quick-ask' | 'create-task'): void {\n const state = asAnnotateContext(ctx)\n clearAnnotateSuccess(state)\n state.annotateSuccessScope = scope\n state.annotateSuccessTimeout = setTimeout(() => {\n const onClear = state.annotateSuccessOnClear\n state.annotateSuccessScope = null\n state.annotateSuccessTimeout = null\n state.annotateSuccessOnClear = null\n onClear?.()\n state.updateAnnotateSidebar()\n }, 1500)\n}\n\nfunction updateLatestSessionState(ctx: unknown, session: AnnotationWorkSession): void {\n const state = asAnnotateContext(ctx)\n state.annotateLatestSessionDetail = session\n state.annotateLatestSessionSummary = {\n id: session.id,\n status: session.status,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n }\n state.annotateLatestSessionError = ''\n\n if (session.status === 'resolved' || session.status === 'dismissed') {\n state.stopLatestAnnotateSessionStream()\n }\n\n // Trigger overlay re-render to update badge colors/states dynamically\n state.renderAnnotateSelectionOverlay()\n}\n\nexport function toAnnotateErrorMessage(\n _ctx: unknown,\n errorCode?: AiErrorCode,\n fallback?: string,\n): string {\n if (errorCode === 'FORBIDDEN_PATH') {\n return 'Some selected targets are outside the current project workspace.'\n }\n if (errorCode === 'INVALID_REQUEST') {\n return 'The current annotation batch is incomplete. Check your targets and try again.'\n }\n if (errorCode === 'SERVER_UNAVAILABLE') {\n return 'Inspecto could not reach the local dev server. Restart your dev server, then try again. If it still fails, run `inspecto doctor` or `npx @inspecto-dev/cli doctor` from the project root.'\n }\n return fallback ?? 'Request failed'\n}\n\nexport function toAnnotationTransportFromRecordUi(\n _ctx: unknown,\n record: FeedbackRecord,\n): AnnotationTransport {\n return {\n note: record.note,\n intent: record.intent,\n targets: [\n {\n location: record.target.location,\n ...(record.target.label ? { label: record.target.label } : {}),\n ...(record.target.selector ? { selector: record.target.selector } : {}),\n },\n ],\n }\n}\n\nexport async function sendAnnotationBatch(\n ctx: unknown,\n annotations: AnnotationTransport[],\n scope: 'quick-ask' | 'create-task',\n instruction: string,\n deliveryMode: AnnotationDeliveryMode,\n onSuccess: () => void,\n): Promise<void> {\n const state = asAnnotateContext(ctx)\n if (annotations.length === 0 || state.annotateSendState.isSending) return\n\n state.annotateSendState = { isSending: true, scope }\n state.updateAnnotateSidebar()\n\n try {\n await state.configLoadPromise\n const runtimeContext = state.getAnnotateRuntimeContext(annotations)\n const cssContextPrompt = state.getAnnotateCssContextPrompt(annotations)\n\n const result = await sendAnnotationsToAi({\n instruction,\n annotations,\n ...(runtimeContext ? { runtimeContext } : {}),\n ...(cssContextPrompt ? { cssContextPrompt } : {}),\n deliveryMode,\n })\n\n if (!result.success) {\n state.annotateErrorMessage = toAnnotateErrorMessage(state, result.errorCode, result.error)\n state.updateAnnotateSidebar()\n return\n }\n\n state.annotateLatestSessionSummary = result.session ?? null\n state.annotateLatestSessionDetail = null\n state.annotateLatestSessionError = ''\n if (result.session?.id) {\n state.startLatestAnnotateSessionStream(result.session.id)\n void state.refreshLatestAnnotateSession()\n } else {\n state.stopLatestAnnotateSessionStream()\n }\n\n onSuccess()\n\n state.annotateErrorMessage = ''\n // For quick-ask: show transient success banner.\n // For create-task: only announce via aria-live (no visual banner); the\n // sidebar's live session section shows status from that point on.\n state.showAnnotateSuccess(scope)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n } catch (err) {\n state.annotateErrorMessage = toAnnotateErrorMessage(\n state,\n (err as { errorCode?: AiErrorCode }).errorCode,\n (err as Error).message,\n )\n state.updateAnnotateSidebar()\n } finally {\n state.annotateSendState = { isSending: false, scope: null }\n state.updateAnnotateSidebar()\n }\n}\n\nexport async function refreshLatestAnnotateSession(ctx: unknown): Promise<void> {\n const state = asAnnotateContext(ctx)\n const sessionId = state.annotateLatestSessionSummary?.id ?? state.annotateLatestSessionDetail?.id\n if (!sessionId || state.annotateLatestSessionLoading) return\n\n state.annotateLatestSessionLoading = true\n state.annotateLatestSessionError = ''\n state.updateAnnotateSidebar()\n\n try {\n const result = await fetchAnnotationSession(sessionId)\n if (!result.success || !result.session) {\n state.annotateLatestSessionError = toAnnotateErrorMessage(\n state,\n result.errorCode,\n result.error ?? 'Failed to refresh latest session.',\n )\n return\n }\n\n updateLatestSessionState(state, result.session)\n } finally {\n state.annotateLatestSessionLoading = false\n state.updateAnnotateSidebar()\n }\n}\n\nexport function startLatestAnnotateSessionStream(ctx: unknown, sessionId: string): void {\n const state = asAnnotateContext(ctx)\n state.stopLatestAnnotateSessionStream()\n\n const connection = openAnnotationSessionEventStream(sessionId, {\n onEvent: (event: AnnotationSessionEvent) => {\n if (event.session.id !== sessionId) return\n updateLatestSessionState(state, event.session)\n state.updateAnnotateSidebar()\n },\n onError: () => {\n state.annotateLatestSessionError =\n 'Live session updates disconnected. You can refresh to reconnect.'\n state.updateAnnotateSidebar()\n },\n })\n\n state.annotateLatestSessionStream = connection\n}\n\nexport function stopLatestAnnotateSessionStream(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n state.annotateLatestSessionStream?.close()\n state.annotateLatestSessionStream = null\n}\n\nexport function getAnnotateSidebarOptions(ctx: unknown): AnnotateSidebarOptions {\n const state = asAnnotateContext(ctx)\n const includedRecords = state.annotateSession.records\n const savedAnnotations = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n const allAnnotations = [...savedAnnotations]\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n allAnnotations.push({\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n targets: [\n {\n location: state.annotateSession.current.target.location,\n ...(state.annotateSession.current.target.label\n ? { label: state.annotateSession.current.target.label }\n : {}),\n ...(state.annotateSession.current.target.selector\n ? { selector: state.annotateSession.current.target.selector }\n : {}),\n },\n ],\n })\n }\n const fullInstruction = composeAnnotateInstruction(state)\n const allRuntimeContext = state.getAnnotateRuntimeContext(allAnnotations)\n const allCssContextPrompt = state.getAnnotateCssContextPrompt(allAnnotations)\n\n const deliveryPreference = state.annotateDeliveryMode ?? 'both'\n let preferredAction: 'quick-ask' | 'create-task' = 'create-task'\n if (deliveryPreference === 'ide') preferredAction = 'quick-ask'\n if (deliveryPreference === 'agent') preferredAction = 'create-task'\n\n return {\n mode: state.annotateCapturePaused ? 'capture-paused' : 'capture-enabled',\n canAttachCssContext: false,\n cssContextEnabled: false,\n canAttachRuntimeContext: state.canAttachRuntimeContext(),\n runtimeContextEnabled: state.annotateRuntimeContextEnabled,\n runtimeContextSummary: state.formatRuntimeContextSummary(allRuntimeContext),\n runtimeErrorCount: state.getCollectedRuntimeErrorCount(),\n session: state.annotateSession,\n instruction: state.annotateInstructionDraft,\n includedRecords,\n fullPrompt: buildAnnotateFullPrompt({\n instruction: fullInstruction,\n annotations: allAnnotations,\n runtimeContext: allRuntimeContext,\n cssContextPrompt: allCssContextPrompt,\n }),\n isSending: state.annotateSendState.isSending,\n sendingScope: state.annotateSendState.scope,\n successScope: state.annotateSuccessScope,\n preferredAction,\n annotateDeliveryMode: state.annotateDeliveryMode,\n latestSessionSummary: state.annotateLatestSessionSummary,\n latestSessionDetail: state.annotateLatestSessionDetail,\n latestSessionLoading: state.annotateLatestSessionLoading,\n latestSessionError: state.annotateLatestSessionError,\n quickCaptureEnabled: state.annotateQuickCaptureEnabled,\n errorMessage: state.annotateErrorMessage,\n onPauseCapture: () => {\n state.annotateCapturePaused = true\n state.overlay.hide()\n state.syncRuntimeContextCapture()\n state.updateAnnotateSidebar()\n },\n onResumeCapture: () => {\n state.annotateCapturePaused = false\n state.syncRuntimeContextCapture()\n state.updateAnnotateSidebar()\n },\n onToggleQuickCapture: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateQuickCaptureEnabled = !state.annotateQuickCaptureEnabled\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onToggleRuntimeContext: () => {\n state.annotateRuntimeContextEnabled = !state.annotateRuntimeContextEnabled\n state.updateAnnotateSidebar()\n state.renderAnnotateSelectionOverlay()\n },\n onUpdateInstruction: (instruction: string) => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateInstructionDraft = instruction\n state.updateAnnotateSidebar()\n },\n onRemovePromptChip: (recordId: string) => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n\n const currentTarget =\n state.annotateSession.current.id === recordId ? state.annotateSession.current.target : null\n const savedRecord =\n state.annotateSession.records.find(record => record.id === recordId) ?? null\n\n if (currentTarget) {\n clearDraftForTarget(state, currentTarget)\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n state.annotateEditingRecord = null\n state.annotateElements.clear()\n } else if (savedRecord) {\n clearDraftForTarget(state, savedRecord.target)\n state.annotateSession = removeRecord(state.annotateSession, recordId)\n }\n\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onEditRecord: recordId => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n beginEditingRecord(state, recordId)\n },\n onRefreshLatestSession: () => {\n void state.refreshLatestAnnotateSession()\n },\n onCopyContext: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n const instruction = composeAnnotateInstruction(state)\n const markdown = formatContextAsMarkdown(instruction, transports)\n\n return navigator.clipboard\n .writeText(markdown)\n .then(() => {\n state.annotateErrorMessage = ''\n })\n .catch(err => {\n console.error('Failed to copy to clipboard:', err)\n state.annotateErrorMessage = t('annotate.copyContext.failed')\n state.updateAnnotateSidebar()\n throw err\n })\n },\n onQuickAsk: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n void sendAnnotationBatch(\n state,\n transports,\n 'quick-ask',\n composeAnnotateInstruction(state),\n 'ide',\n () => {\n state.annotateInstructionDraft = ''\n state.annotateDrafts.clear()\n state.annotateEditingRecord = null\n state.annotateSession = createEmptySession()\n state.annotateElements.clear()\n\n state.renderAnnotateSelectionOverlay()\n },\n )\n },\n onCreateTask: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n void sendAnnotationBatch(\n state,\n transports,\n 'create-task',\n composeAnnotateInstruction(state),\n 'agent',\n () => {\n // Records are kept visible so the user can see badge status updates\n // (saved → completed) driven by the live session stream. The session\n // will be cleared when the user starts a new annotation batch (onSave).\n },\n )\n },\n onExit: () => {\n state.setMode('inspect')\n },\n }\n}\n\nexport function composeAnnotateInstruction(ctx: unknown): string {\n return asAnnotateContext(ctx).annotateInstructionDraft.trim()\n}\n\nexport function renderAnnotateSelectionOverlay(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateOverlay) return\n\n if (state.mode !== 'annotate') {\n state.annotateOverlay.clear()\n return\n }\n\n const overlayTargets: SelectedTargetOverlayEntry[] = state.annotateSession.records\n .map((record): SelectedTargetOverlayEntry | null => {\n if (state.annotateEditingRecord?.id === record.id) return null\n const element = findElementForAnnotationTarget(state, record.target)\n if (!element) return null\n const overlayState: SelectedTargetOverlayEntry['state'] =\n state.annotateLatestSessionSummary?.status === 'resolved' ||\n state.annotateLatestSessionDetail?.status === 'resolved'\n ? 'completed'\n : 'saved'\n return {\n id: record.id,\n element,\n order: record.displayOrder,\n state: overlayState,\n note: record.note,\n onActivate: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n beginEditingRecord(state, record.id)\n },\n }\n })\n .filter((entry): entry is SelectedTargetOverlayEntry => entry !== null)\n\n const target = state.annotateSession.current.target\n const currentElement = target\n ? state.annotateElements.get(state.annotateSession.current.id)\n : null\n\n if (!target || !currentElement) {\n state.annotateOverlay.render(overlayTargets)\n return\n }\n\n overlayTargets.push({\n id: state.annotateSession.current.id,\n element: currentElement,\n order: state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n state: 'current',\n })\n\n state.annotateOverlay.render(overlayTargets, {\n targetId: getAnnotationTargetKey(state, target),\n targetLabel: target.label,\n targetMeta: `${target.location.file.split('/').pop() || target.location.file}:${target.location.line}:${target.location.column}`,\n note: state.annotateSession.current.note,\n onOpenInEditor: () => {\n void openFile(target.location)\n },\n canAttachCssContext: state.canAttachCssContext(),\n cssContextEnabled: state.annotateSession.current.cssContextEnabled ?? false,\n canAttachRuntimeContext: false,\n runtimeContextEnabled: false,\n runtimeContextSummary: '',\n runtimeErrorCount: 0,\n saveLabel: state.annotateEditingRecord ? t('annotate.updateNote') : t('annotate.saveNote'),\n onToggleCssContext: () => {\n state.annotateSession = updateCurrentRecordCssContextEnabled(\n state.annotateSession,\n !(state.annotateSession.current.cssContextEnabled ?? false),\n )\n state.updateAnnotateSidebar()\n state.renderAnnotateSelectionOverlay()\n },\n onUpdateNote: note => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateSession = updateCurrentRecordNote(state.annotateSession, note)\n state.updateAnnotateSidebar()\n },\n onSave: () => {\n if (!hasCurrentRecordUi(state)) return\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n // If saving a record into a new batch, clear the stale resolved session\n // so its 'completed' color doesn't bleed onto the fresh annotations.\n if (\n state.annotateLatestSessionSummary?.status === 'resolved' ||\n state.annotateLatestSessionDetail?.status === 'resolved'\n ) {\n // Previous batch is resolved — clear only the stale task state so the\n // new annotation can start a fresh batch without losing the current\n // note being saved.\n const currentDraft = state.annotateSession.current\n state.annotateLatestSessionSummary = null\n state.annotateLatestSessionDetail = null\n state.stopLatestAnnotateSessionStream()\n state.annotateInstructionDraft = ''\n state.annotateDrafts.clear()\n state.annotateEditingRecord = null\n state.annotateSession = {\n current: currentDraft,\n records: [],\n }\n }\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = saveCurrentRecord(state.annotateSession)\n state.annotateEditingRecord = null\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onCancel: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n restoreEditingRecord(state)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n ...(state.annotateEditingRecord\n ? {\n onDelete: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateEditingRecord = null\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n }\n : {}),\n })\n}\n","export {\n addTargetToCurrentAnnotation,\n beginEditingRecord,\n clearDraftForTarget,\n createAnnotationTarget,\n describeElement,\n findElementForAnnotationTarget,\n findElementForLocation,\n getAnnotationTargetKey,\n markTargetInAnnotateSession,\n persistCurrentDraft,\n rebindCurrentAnnotationElements,\n restoreEditingRecord,\n} from './component-annotate-targets.js'\n\nexport {\n clearAnnotateError,\n clearAnnotateSuccess,\n composeAnnotateInstruction,\n getAnnotateSidebarOptions,\n getNextRecordDisplayOrderUi as getNextRecordDisplayOrder,\n hasCurrentRecordUi as hasCurrentRecord,\n renderAnnotateSelectionOverlay,\n refreshLatestAnnotateSession,\n sendAnnotationBatch,\n showAnnotateSuccess,\n startLatestAnnotateSessionStream,\n stopLatestAnnotateSessionStream,\n toAnnotateErrorMessage,\n toAnnotationTransportFromRecordUi as toAnnotationTransportFromRecord,\n} from './component-annotate-ui.js'\n","import type { HotKeys } from '@inspecto-dev/types'\nimport { badgeClass } from './styles.js'\nimport { getDeepActiveElement, hotKeysHeld } from './component-utils.js'\nimport { t } from './i18n.js'\nimport { pauseIconSvg, playIconSvg } from './icons.js'\n\ntype LauncherContext = {\n options: { hotKeys?: HotKeys }\n serverHotKeys: HotKeys | null\n active: boolean\n disabled: boolean\n mode: 'inspect' | 'annotate'\n launcherPanelOpen: boolean\n badge: HTMLDivElement\n shadowRootEl: ShadowRoot\n lastPointerX: number\n lastPointerY: number\n cleanupMenu: (() => void) | null\n overlay: { hide(): void }\n prePauseState: { active: boolean; mode: 'inspect' | 'annotate' }\n updateBadgeContent(): void\n setMode(mode: 'inspect' | 'annotate'): void\n syncRuntimeContextCapture(): void\n renderAnnotateSelectionOverlay(): void\n}\n\nfunction asLauncherContext(ctx: unknown): LauncherContext {\n return ctx as LauncherContext\n}\n\nexport function getEffectiveHotKeys(ctx: unknown): HotKeys {\n const state = asLauncherContext(ctx)\n if (state.options.hotKeys !== undefined) return state.options.hotKeys\n if (state.serverHotKeys !== null) return state.serverHotKeys\n return 'alt'\n}\n\nexport function getHotKeyLabel(ctx: unknown): string {\n const hotKeys = getEffectiveHotKeys(ctx)\n if (hotKeys === false) return 'Disabled'\n\n const isMac = typeof navigator !== 'undefined' && /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n\n const keys = hotKeys.split('+').map(k => k.trim().toLowerCase())\n const displayKeys = keys.map(k => {\n if (k === 'alt' || k === 'option') return isMac ? '⌥' : 'Alt'\n if (k === 'cmd' || k === 'meta' || k === 'win' || k === 'command') return isMac ? '⌘' : 'Win'\n if (k === 'ctrl' || k === 'control') return isMac ? '⌃' : 'Ctrl'\n if (k === 'shift') return isMac ? '⇧' : 'Shift'\n return k.charAt(0).toUpperCase() + k.slice(1)\n })\n\n return displayKeys.join(' + ')\n}\n\nexport function createBadge(ctx: unknown): HTMLDivElement {\n const state = asLauncherContext(ctx)\n const btn = document.createElement('div')\n btn.className = badgeClass\n // Start with visibility hidden to prevent FOUC (flash of unstyled content)\n // before the shadow DOM styles are fully parsed by the browser.\n btn.style.visibility = 'hidden'\n\n const indicator = document.createElement('span')\n indicator.className = `${badgeClass}-indicator`\n indicator.dataset.inspectoLauncherIndicator = 'true'\n indicator.dataset.state = 'ready'\n\n const stateSpan = document.createElement('span')\n stateSpan.className = `${badgeClass}-state`\n stateSpan.dataset.inspectoLauncherState = 'true'\n stateSpan.hidden = true\n\n const titleSpan = document.createElement('span')\n titleSpan.className = `${badgeClass}-title`\n titleSpan.textContent = t('launcher.title')\n\n const eyes = document.createElement('span')\n eyes.className = `${badgeClass}-eyes`\n eyes.setAttribute('aria-hidden', 'true')\n const leftEye = document.createElement('span')\n leftEye.className = `${badgeClass}-eye`\n const leftPupil = document.createElement('span')\n leftPupil.className = `${badgeClass}-eye-pupil`\n leftEye.appendChild(leftPupil)\n const rightEye = document.createElement('span')\n rightEye.className = `${badgeClass}-eye`\n const rightPupil = document.createElement('span')\n rightPupil.className = `${badgeClass}-eye-pupil`\n rightEye.appendChild(rightPupil)\n eyes.append(leftEye, rightEye)\n\n const content = document.createElement('div')\n content.className = `${badgeClass}-content`\n const titleBlock = document.createElement('div')\n titleBlock.className = `${badgeClass}-label`\n\n const panel = document.createElement('div')\n panel.className = `${badgeClass}-panel`\n panel.dataset.inspectoLauncherPanel = 'true'\n\n const panelHeader = document.createElement('div')\n panelHeader.className = `${badgeClass}-panel-header`\n const panelHeaderCopy = document.createElement('div')\n panelHeaderCopy.className = `${badgeClass}-panel-header-copy`\n panelHeaderCopy.innerHTML = `<div data-inspecto-launcher-panel-title=\"true\">${t('launcher.panel.title')}</div><div data-inspecto-launcher-panel-subtitle=\"true\">${t('launcher.panel.subtitle')}</div>`\n const panelHeaderActions = document.createElement('div')\n panelHeaderActions.className = `${badgeClass}-panel-header-actions`\n\n const modeGroup = document.createElement('div')\n modeGroup.className = `${badgeClass}-panel-group`\n\n const inspectBtn = document.createElement('button')\n inspectBtn.type = 'button'\n inspectBtn.className = `${badgeClass}-panel-button`\n inspectBtn.dataset.inspectoLauncherAction = 'inspect'\n inspectBtn.innerHTML = `<span data-inspecto-launcher-title=\"true\">${t('launcher.action.inspect.title')}</span><span data-inspecto-launcher-description=\"true\">${t('launcher.action.inspect.description')}</span>`\n inspectBtn.addEventListener('click', event => {\n event.stopPropagation()\n if (state.disabled) setPaused(state, false)\n state.active = true\n state.setMode('inspect')\n state.launcherPanelOpen = false\n state.updateBadgeContent()\n })\n\n const annotateBtn = document.createElement('button')\n annotateBtn.type = 'button'\n annotateBtn.className = `${badgeClass}-panel-button`\n annotateBtn.dataset.inspectoLauncherAction = 'annotate'\n annotateBtn.innerHTML = `<span data-inspecto-launcher-title=\"true\">${t('launcher.action.annotate.title')}</span><span data-inspecto-launcher-description=\"true\">${t('launcher.action.annotate.description')}</span>`\n annotateBtn.addEventListener('click', event => {\n event.stopPropagation()\n if (state.disabled) setPaused(state, false)\n state.active = true\n state.setMode('annotate')\n state.launcherPanelOpen = false\n state.updateBadgeContent()\n })\n\n const pauseBtn = document.createElement('button')\n pauseBtn.type = 'button'\n pauseBtn.className = `${badgeClass}-panel-toggle-button`\n pauseBtn.dataset.inspectoLauncherAction = 'pause'\n pauseBtn.setAttribute('aria-label', t('launcher.action.pause.title'))\n pauseBtn.setAttribute('aria-pressed', 'false')\n pauseBtn.innerHTML = pauseIconSvg\n pauseBtn.addEventListener('click', event => {\n event.stopPropagation()\n setPaused(state, !state.disabled)\n })\n const pauseText = document.createElement('div')\n pauseText.className = `${badgeClass}-panel-status-text`\n pauseText.dataset.inspectoLauncherPauseText = 'true'\n\n const hotkeyHint = document.createElement('div')\n hotkeyHint.className = `${badgeClass}-panel-hint`\n hotkeyHint.dataset.inspectoLauncherHint = 'hotkey'\n\n const utilityGroup = document.createElement('div')\n utilityGroup.className = `${badgeClass}-panel-group`\n utilityGroup.dataset.inspectoLauncherUtilityGroup = 'true'\n\n modeGroup.append(inspectBtn, annotateBtn)\n panelHeader.append(panelHeaderCopy, panelHeaderActions)\n utilityGroup.append(hotkeyHint)\n panelHeaderActions.append(pauseText, pauseBtn)\n panel.append(panelHeader, modeGroup, utilityGroup)\n titleBlock.append(titleSpan, stateSpan)\n content.append(indicator, titleBlock)\n btn.append(content, eyes, panel)\n\n let isDragging = false\n let dragStartX = 0\n let dragStartY = 0\n let initialBadgeX = 0\n let initialBadgeY = 0\n\n const handleDragStart = (e: MouseEvent | TouchEvent) => {\n const target = e.target as Element\n if (\n target.closest(`.${badgeClass}-panel`) ||\n target.closest(`[data-inspecto-launcher-action]`)\n ) {\n return\n }\n\n if (e.type === 'mousedown' && (e as MouseEvent).button !== 0) return\n\n const clientX =\n e.type === 'touchstart' ? (e as TouchEvent).touches[0]!.clientX : (e as MouseEvent).clientX\n const clientY =\n e.type === 'touchstart' ? (e as TouchEvent).touches[0]!.clientY : (e as MouseEvent).clientY\n\n dragStartX = clientX\n dragStartY = clientY\n\n const rect = btn.getBoundingClientRect()\n initialBadgeX = rect.left\n initialBadgeY = rect.top\n\n isDragging = false\n\n document.addEventListener('mousemove', handleDragMove, { passive: false })\n document.addEventListener('mouseup', handleDragEnd)\n document.addEventListener('touchmove', handleDragMove, { passive: false })\n document.addEventListener('touchend', handleDragEnd)\n }\n\n const handleDragMove = (e: MouseEvent | TouchEvent) => {\n const clientX =\n e.type === 'touchmove' ? (e as TouchEvent).touches[0]!.clientX : (e as MouseEvent).clientX\n const clientY =\n e.type === 'touchmove' ? (e as TouchEvent).touches[0]!.clientY : (e as MouseEvent).clientY\n\n const dx = clientX - dragStartX\n const dy = clientY - dragStartY\n\n if (!isDragging && Math.hypot(dx, dy) > 5) {\n isDragging = true\n btn.style.transition = 'none'\n }\n\n if (isDragging) {\n e.preventDefault()\n const maxX = window.innerWidth - btn.offsetWidth\n const maxY = window.innerHeight - btn.offsetHeight\n\n let newX = initialBadgeX + dx\n let newY = initialBadgeY + dy\n\n newX = Math.max(0, Math.min(newX, maxX))\n newY = Math.max(0, Math.min(newY, maxY))\n\n btn.style.bottom = 'auto'\n btn.style.right = 'auto'\n btn.style.left = `${newX}px`\n btn.style.top = `${newY}px`\n }\n }\n\n const handleDragEnd = () => {\n document.removeEventListener('mousemove', handleDragMove)\n document.removeEventListener('mouseup', handleDragEnd)\n document.removeEventListener('touchmove', handleDragMove)\n document.removeEventListener('touchend', handleDragEnd)\n\n if (isDragging) {\n btn.style.transition = ''\n setTimeout(() => {\n isDragging = false\n }, 0)\n }\n }\n\n btn.addEventListener('mousedown', handleDragStart)\n btn.addEventListener('touchstart', handleDragStart, { passive: false })\n\n btn.addEventListener('click', event => {\n if (isDragging) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n if ((event.target as Element).closest?.(`[data-inspecto-launcher-action]`)) return\n state.launcherPanelOpen = !state.launcherPanelOpen\n state.updateBadgeContent()\n })\n\n state.shadowRootEl.appendChild(btn)\n updateLauncherEye(state)\n\n // Wait for two frames to ensure styles are applied before making it visible\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n btn.style.visibility = ''\n })\n })\n\n return btn\n}\n\nexport function setPaused(ctx: unknown, value: boolean): void {\n const state = asLauncherContext(ctx)\n if (value) {\n state.prePauseState = {\n active: state.active,\n mode: state.mode,\n }\n }\n\n state.disabled = value\n state.launcherPanelOpen = false\n if (value) {\n state.active = false\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n } else {\n state.mode = state.prePauseState.mode\n state.active = state.prePauseState.active\n }\n state.syncRuntimeContextCapture()\n state.updateBadgeContent()\n}\n\nexport function dismiss(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n state.badge.style.display = 'none'\n setActive(state, false)\n}\n\nexport function updateBadgeContent(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n const indicator = state.badge.querySelector(\n `[data-inspecto-launcher-indicator]`,\n ) as HTMLSpanElement | null\n const stateSpan = state.badge.querySelector(\n `[data-inspecto-launcher-state]`,\n ) as HTMLSpanElement | null\n const titleSpan = state.badge.querySelector(`.${badgeClass}-title`) as HTMLSpanElement | null\n const panel = state.badge.querySelector(`.${badgeClass}-panel`) as HTMLDivElement | null\n const inspectBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"inspect\"]`,\n ) as HTMLButtonElement | null\n const annotateBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"annotate\"]`,\n ) as HTMLButtonElement | null\n const pauseBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"pause\"]`,\n ) as HTMLButtonElement | null\n const pauseText = state.badge.querySelector(\n `[data-inspecto-launcher-pause-text]`,\n ) as HTMLDivElement | null\n const hotkeyHint = state.badge.querySelector(\n `[data-inspecto-launcher-hint=\"hotkey\"]`,\n ) as HTMLDivElement | null\n\n if (\n !indicator ||\n !titleSpan ||\n !stateSpan ||\n !panel ||\n !inspectBtn ||\n !annotateBtn ||\n !pauseBtn ||\n !pauseText ||\n !hotkeyHint\n ) {\n return\n }\n\n const updateModeButton = (button: HTMLButtonElement, active: boolean) => {\n button.classList.toggle('active', active)\n button.setAttribute('aria-pressed', String(active))\n }\n\n let stateLabel: string\n\n if (state.disabled) {\n stateLabel = t('launcher.state.paused')\n indicator.dataset.state = 'paused'\n state.badge.classList.remove('active')\n state.badge.classList.add('disabled')\n } else if (state.mode === 'annotate') {\n stateLabel = t('launcher.state.annotate')\n indicator.dataset.state = 'annotate'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else if (state.active) {\n stateLabel = t('launcher.state.inspect')\n indicator.dataset.state = 'inspect'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else {\n stateLabel = t('launcher.state.ready')\n indicator.dataset.state = 'ready'\n state.badge.classList.remove('active', 'disabled')\n }\n\n stateSpan.dataset.state = indicator.dataset.state\n stateSpan.hidden = false\n titleSpan.textContent = t('launcher.title')\n stateSpan.textContent = stateLabel\n\n panel.style.display = state.launcherPanelOpen ? 'flex' : 'none'\n const isPaused = state.disabled\n pauseBtn.setAttribute(\n 'aria-label',\n isPaused ? t('launcher.action.resume.title') : t('launcher.action.pause.title'),\n )\n pauseBtn.setAttribute('aria-pressed', isPaused ? 'true' : 'false')\n pauseBtn.innerHTML = isPaused ? playIconSvg : pauseIconSvg\n pauseText.textContent = isPaused\n ? t('launcher.action.resume.title')\n : t('launcher.action.pause.title')\n hotkeyHint.textContent =\n getEffectiveHotKeys(state) === false\n ? t('launcher.hint.hotkeyDisabled')\n : t('launcher.hint.hotkeyQuickJump', { hotkey: getHotKeyLabel(state) })\n inspectBtn.style.display = state.disabled ? 'none' : 'inline-flex'\n annotateBtn.style.display = state.disabled ? 'none' : 'inline-flex'\n\n updateModeButton(inspectBtn, !state.disabled && state.active && state.mode === 'inspect')\n updateModeButton(annotateBtn, !state.disabled && state.active && state.mode === 'annotate')\n updateLauncherEye(state)\n}\n\nexport function setActive(ctx: unknown, value: boolean): void {\n const state = asLauncherContext(ctx)\n state.active = value\n if (!value) {\n state.launcherPanelOpen = false\n }\n state.syncRuntimeContextCapture()\n state.updateBadgeContent()\n\n if (!value) {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n }\n\n if (!value && state.mode === 'annotate') {\n state.renderAnnotateSelectionOverlay()\n }\n}\n\nexport function shouldQuickJumpOnTrigger(ctx: unknown, event: MouseEvent): boolean {\n const state = asLauncherContext(ctx)\n if (state.mode !== 'inspect') return false\n if (event.type !== 'click') return false\n\n const hotKeys = getEffectiveHotKeys(state)\n if (hotKeys === false) return false\n return hotKeysHeld(event, hotKeys)\n}\n\nexport function shouldInvertLauncherEye(ctx: unknown): boolean {\n const state = asLauncherContext(ctx)\n if (state.launcherPanelOpen || state.cleanupMenu !== null) return true\n const activeElement = (getDeepActiveElement(state.shadowRootEl) ??\n getDeepActiveElement(document)) as HTMLElement | null\n if (!(activeElement instanceof HTMLElement)) return false\n if (activeElement.isContentEditable) return true\n if (\n activeElement.matches('textarea, input, select') ||\n activeElement.closest('[data-inspecto-annotate-overlay-layer]') ||\n activeElement.closest('[data-inspecto-annotate-overlay-box]') ||\n activeElement.closest(`.${badgeClass}-panel`) ||\n activeElement.closest('[data-inspecto-launcher-action]')\n ) {\n return true\n }\n return false\n}\n\nexport function updateLauncherEye(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n if (!state.badge) return\n const eyes = state.badge.querySelector(`.${badgeClass}-eyes`) as HTMLSpanElement | null\n if (!eyes) return\n\n const shouldShowEyes = !state.disabled\n eyes.hidden = !shouldShowEyes\n if (!shouldShowEyes) return\n\n const isActiveMode = state.active || state.mode === 'annotate'\n const invert = shouldInvertLauncherEye(state)\n eyes.dataset.state = isActiveMode ? 'active' : 'idle'\n eyes.dataset.mood = invert ? 'averted' : isActiveMode ? 'engaged' : 'idle'\n\n const pupils = Array.from(\n state.badge.querySelectorAll(`.${badgeClass}-eye-pupil`),\n ) as HTMLSpanElement[]\n if (pupils.length === 0) return\n\n const rect = eyes.getBoundingClientRect()\n const eyeCenterX = rect.left + rect.width / 2\n const eyeCenterY = rect.top + rect.height / 2\n const hasPointer = isActiveMode && (state.lastPointerX !== 0 || state.lastPointerY !== 0)\n let dx = hasPointer ? state.lastPointerX - eyeCenterX : 0\n let dy = hasPointer ? state.lastPointerY - eyeCenterY : 0\n if (invert) {\n dx *= -1\n dy *= -1\n }\n\n const distance = Math.hypot(dx, dy)\n const maxOffset = 4\n const scale = distance > 0 ? Math.min(maxOffset, distance) / distance : 0\n const transform = `translate(${(dx * scale).toFixed(2)}px, ${(dy * scale).toFixed(2)}px)`\n pupils.forEach(pupil => {\n pupil.style.transform = transform\n })\n}\n","import type { SnippetResponse, SourceLocation } from '@inspecto-dev/types'\n\n/** Template for user-typed custom prompts from the ask input box. */\nexport function CUSTOM_PROMPT_TEMPLATE(userPrompt: string): string {\n return userPrompt\n}\n\n/**\n * Guess the UI framework based on file extension\n */\nfunction detectFramework(fileName: string): string {\n const ext = fileName.split('.').pop()?.toLowerCase() || ''\n switch (ext) {\n case 'vue':\n return 'Vue'\n case 'svelte':\n return 'Svelte'\n case 'astro':\n return 'Astro'\n case 'jsx':\n case 'tsx':\n return 'React'\n case 'ts':\n case 'js':\n return 'JavaScript/TypeScript'\n default:\n return 'UI'\n }\n}\n\n/**\n * Replace all {{placeholder}} tokens in a prompt template.\n */\nexport function buildPrompt(\n template: string,\n location: SourceLocation,\n snippetResult?: SnippetResponse | null,\n): string {\n const shortFile = location.file.split('/').pop() ?? location.file\n const ext = shortFile.split('.').pop()?.toLowerCase() || 'tsx'\n const framework = detectFramework(shortFile)\n\n let finalPrompt = template\n .replace(/\\{\\{file\\}\\}/g, location.file)\n .replace(/\\{\\{line\\}\\}/g, String(location.line))\n .replace(/\\{\\{column\\}\\}/g, String(location.column))\n .replace(/\\{\\{ext\\}\\}/g, ext)\n .replace(/\\{\\{framework\\}\\}/g, framework)\n .replace(/\\{\\{name\\}\\}/g, shortFile) // fallback\n\n if (snippetResult && snippetResult.snippet) {\n const name = snippetResult.name ?? shortFile\n finalPrompt = finalPrompt.replace(/\\{\\{name\\}\\}/g, name)\n // append snippet context\n finalPrompt += `\\n\\nContext from \\`${location.file}\\` (line ${location.line}):\\n\\`\\`\\`${ext}\\n${snippetResult.snippet}\\n\\`\\`\\``\n }\n\n return finalPrompt\n}\n","import type {\n IntentConfig,\n SnippetResponse,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { buildPrompt } from './intents.js'\n\ntype BuildFixBugPromptInput = {\n template: string\n location: SourceLocation\n snippet?: string\n records: RuntimeEvidenceRecord[]\n}\n\nconst MAX_EVIDENCE_RECORDS = 5\nconst LEVEL_WEIGHT: Record<RuntimeEvidenceRecord['relevanceLevel'], number> = {\n high: 3,\n medium: 2,\n low: 1,\n}\n\nexport function selectFixBugEvidence(records: RuntimeEvidenceRecord[]): RuntimeEvidenceRecord[] {\n return records\n .filter(record => record.relevanceLevel !== 'low')\n .slice()\n .sort((a, b) => {\n const levelDiff = LEVEL_WEIGHT[b.relevanceLevel] - LEVEL_WEIGHT[a.relevanceLevel]\n if (levelDiff !== 0) return levelDiff\n\n const scoreDiff = b.relevanceScore - a.relevanceScore\n if (scoreDiff !== 0) return scoreDiff\n\n const occurrenceDiff = b.occurrenceCount - a.occurrenceCount\n if (occurrenceDiff !== 0) return occurrenceDiff\n\n return b.timestamp - a.timestamp\n })\n .slice(0, MAX_EVIDENCE_RECORDS)\n}\n\nexport function buildFixBugPrompt(input: BuildFixBugPromptInput): string {\n const evidence = selectFixBugEvidence(input.records)\n const templateGuidance = normalizeTemplateGuidance(input.template)\n\n return [\n 'Fix the bug for the inspected UI target.',\n buildSourceContextSection(input.location, input.snippet),\n buildEvidenceSection(evidence),\n [\n 'Task:',\n '- Identify the likely root cause.',\n '- Propose the smallest safe fix.',\n '- Separate evidence from guesses when needed.',\n ].join('\\n'),\n templateGuidance ? `Additional guidance:\\n${indentBlock(templateGuidance)}` : '',\n ].join('\\n\\n')\n}\n\nexport function buildPromptForIntent(\n intent: Pick<IntentConfig, 'id' | 'prompt' | 'prependPrompt' | 'appendPrompt'>,\n location: SourceLocation,\n snippetResult?: SnippetResponse | null,\n runtimeContext?: RuntimeContextEnvelope | null,\n): string {\n const fullPromptTemplate = assembleIntentPromptTemplate(intent)\n if (intent.id === 'fix-bug') {\n return buildFixBugPrompt({\n template: assembleFixBugAdditionalGuidance(intent),\n location,\n snippet: snippetResult?.snippet || '',\n records: runtimeContext?.records ?? [],\n })\n }\n\n return appendRuntimeContextToPrompt(\n buildPrompt(fullPromptTemplate, location, snippetResult),\n runtimeContext?.records ?? [],\n )\n}\n\nfunction buildSourceContextSection(location: SourceLocation, snippet?: string): string {\n const parts = [\n 'Target source context:',\n `- file: ${location.file}`,\n `- location: ${location.line}:${location.column}`,\n ]\n\n if (snippet) {\n parts.push(`- snippet:\\n${indentBlock(snippet)}`)\n }\n\n return parts.join('\\n')\n}\n\nfunction assembleIntentPromptTemplate(\n intent: Pick<IntentConfig, 'prompt' | 'prependPrompt' | 'appendPrompt'>,\n): string {\n let fullPromptTemplate = intent.prompt ?? ''\n if (intent.prependPrompt) {\n fullPromptTemplate = `${intent.prependPrompt}\\n\\n${fullPromptTemplate}`\n }\n if (intent.appendPrompt) {\n fullPromptTemplate = `${fullPromptTemplate}\\n\\n${intent.appendPrompt}`\n }\n return fullPromptTemplate\n}\n\nfunction assembleFixBugAdditionalGuidance(\n intent: Pick<IntentConfig, 'prependPrompt' | 'appendPrompt'>,\n): string {\n return [intent.prependPrompt, intent.appendPrompt].filter(Boolean).join('\\n\\n')\n}\n\nfunction buildEvidenceSection(records: RuntimeEvidenceRecord[]): string {\n if (records.length === 0) {\n return ['Runtime evidence:', '- None selected. Do not treat unrelated logs as proof.'].join(\n '\\n',\n )\n }\n\n return ['Runtime evidence:', ...records.map(formatEvidenceRecord)].join('\\n')\n}\n\nexport function appendRuntimeContextToPrompt(\n prompt: string,\n records: RuntimeEvidenceRecord[],\n): string {\n if (records.length === 0) return prompt\n return `${prompt}\\n\\n${buildGenericRuntimeContextSection(records)}`\n}\n\nfunction buildGenericRuntimeContextSection(records: RuntimeEvidenceRecord[]): string {\n return ['Relevant runtime context:', ...records.map(formatEvidenceRecord)].join('\\n')\n}\n\nfunction formatEvidenceRecord(record: RuntimeEvidenceRecord): string {\n const requestSummary =\n record.kind === 'failed-request'\n ? formatRequestSummary(record)\n : `occurrences=${record.occurrenceCount}`\n const reasonSummary = record.relevanceReasons.length\n ? record.relevanceReasons.join('; ')\n : 'timing-based'\n const stackSummary = record.stack ? `\\n stack=${truncateStack(record.stack)}` : ''\n\n return [\n `- [${record.kind}] ${record.message}`,\n ` relevance=${record.relevanceLevel} (${reasonSummary})`,\n ` ${requestSummary}`,\n stackSummary,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n\nfunction formatRequestSummary(record: RuntimeEvidenceRecord): string {\n const method = record.request?.method ?? 'GET'\n const path = record.request?.pathname ?? record.request?.url ?? 'unknown'\n const status = record.request?.status ?? 'unknown'\n return `request=${method} ${path} status=${status}`\n}\n\nfunction truncateStack(stack: string): string {\n return stack.split('\\n').slice(0, 5).join(' | ')\n}\n\nfunction normalizeTemplateGuidance(template: string): string {\n return template.trim()\n}\n\nfunction indentBlock(text: string): string {\n return text\n .split('\\n')\n .map(line => ` ${line}`)\n .join('\\n')\n}\n","import type {\n InspectorOptions,\n IntentConfig,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { runtimeSummaryLabel, t } from './i18n.js'\nimport {\n errorMsgClass,\n menuContextPreviewClass,\n menuContextSummaryClass,\n menuContextToggleClass,\n menuInputClass,\n menuInputIconClass,\n menuInputWrapperClass,\n menuSectionClass,\n} from './styles.js'\n\nexport function formatSourceAnchor(location: SourceLocation): string {\n const fileName = location.file.split('/').pop() || location.file\n return `${fileName}:${location.line}:${location.column}`\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function createMenuSection(): HTMLDivElement {\n const section = document.createElement('div')\n section.className = menuSectionClass\n return section\n}\n\nexport function createAskInput(placeholder?: string) {\n const inputWrapper = document.createElement('div')\n inputWrapper.className = menuInputWrapperClass\n\n const input = document.createElement('input')\n input.className = menuInputClass\n input.type = 'text'\n input.placeholder = placeholder ?? t('menu.ask.placeholder.default')\n input.setAttribute('aria-label', t('menu.ask.ariaLabel'))\n\n const sendIcon = document.createElement('div')\n sendIcon.className = menuInputIconClass\n sendIcon.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>`\n sendIcon.style.cursor = 'pointer'\n\n inputWrapper.appendChild(input)\n inputWrapper.appendChild(sendIcon)\n\n return { input, inputWrapper, sendIcon }\n}\n\nexport function showError(menu: HTMLElement, message: string, errorCode?: string): void {\n menu.querySelector(`.${errorMsgClass}`)?.remove()\n\n const errEl = document.createElement('div')\n errEl.className = errorMsgClass\n errEl.textContent = formatMenuErrorMessage(message, errorCode)\n menu.appendChild(errEl)\n}\n\nfunction formatMenuErrorMessage(message: string, errorCode?: string): string {\n if (errorCode === 'CLIENT_CONFIG_UNAVAILABLE') {\n return [\n 'Inspecto is not connected to the local dev server or could not load its client config.',\n 'Restart your dev server and confirm `@inspecto-dev/plugin` is installed in the active build config, then run `inspecto doctor` or `npx @inspecto-dev/cli doctor` if this continues.',\n ].join(' ')\n }\n\n if (errorCode === 'SERVER_UNAVAILABLE') {\n return 'Inspecto could not reach the local dev server. Restart your dev server, then try again. If it still fails, run `inspecto doctor` or `npx @inspecto-dev/cli doctor` from the project root.'\n }\n\n if (errorCode === 'FILE_NOT_FOUND') {\n return 'Source file not found. Restart the dev server or run `npx @inspecto-dev/cli doctor` from the project root.'\n }\n\n if (errorCode === 'IDE_UNAVAILABLE' || errorCode === 'IDE_NOT_FOUND') {\n return 'Unable to open the source file in your editor. Confirm the editor command or URI scheme is available, and set the `ide` field in `.inspecto/settings.local.json` if auto-detection chooses the wrong editor.'\n }\n\n if (errorCode === 'EXTENSION_NOT_INSTALLED') {\n return 'The target AI extension is not installed or not available in this editor. Install it, then run `npx @inspecto-dev/cli doctor` if dispatch still fails.'\n }\n\n if (errorCode === 'CLIPBOARD_WRITE_FAILED') {\n return 'Inspecto could not write the fallback prompt to the clipboard. Check browser clipboard permissions and try again.'\n }\n\n return `Error: ${message}`\n}\n\nexport function isFixIntent(intent: Pick<IntentConfig, 'id' | 'aiIntent'>): boolean {\n return intent.aiIntent === 'fix'\n}\n\nexport function isFixUiIntent(intent: Pick<IntentConfig, 'id'>): boolean {\n return intent.id === 'fix-ui'\n}\n\nexport function createRuntimeContextUi(\n runtimeContext: RuntimeContextEnvelope | null,\n options: InspectorOptions,\n): HTMLDivElement | null {\n if (!runtimeContext) return null\n\n const summary = formatRuntimeContextSummary(runtimeContext)\n if (!summary) return null\n\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n container.style.gap = '4px'\n\n const summaryEl = document.createElement('div')\n summaryEl.className = menuContextSummaryClass\n summaryEl.textContent = summary\n container.appendChild(summaryEl)\n\n if (options.runtimeContext?.preview !== true || runtimeContext.records.length === 0) {\n return container\n }\n\n const toggle = document.createElement('button')\n toggle.type = 'button'\n toggle.className = menuContextToggleClass\n toggle.textContent = t('menu.preview.show')\n\n const preview = document.createElement('div')\n preview.className = menuContextPreviewClass\n preview.hidden = true\n preview.textContent = formatRuntimeContextPreview(runtimeContext.records)\n\n toggle.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n preview.hidden = !preview.hidden\n toggle.textContent = preview.hidden ? t('menu.preview.show') : t('menu.preview.hide')\n })\n\n container.append(toggle, preview)\n return container\n}\n\nexport function formatRuntimeContextSummary(runtimeContext: RuntimeContextEnvelope): string {\n const parts: string[] = []\n const { runtimeErrorCount, failedRequestCount } = runtimeContext.summary\n\n if (runtimeErrorCount > 0) {\n parts.push(runtimeSummaryLabel('error', runtimeErrorCount))\n }\n\n if (failedRequestCount > 0) {\n parts.push(runtimeSummaryLabel('request', failedRequestCount))\n }\n\n return parts.join(' • ')\n}\n\nexport function formatRuntimeContextPreview(records: RuntimeEvidenceRecord[]): string {\n return records\n .slice(0, 3)\n .map(record => {\n const details =\n record.kind === 'failed-request'\n ? `${record.request?.method ?? 'GET'} ${record.request?.pathname ?? record.request?.url ?? ''}`.trim()\n : `${record.occurrenceCount}x`\n return `[${record.kind}] ${record.message}\\n${details}`\n })\n .join('\\n\\n')\n}\n","import type { IntentConfig, RuntimeContextEnvelope, SourceLocation } from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport { buildPromptForIntent } from './fix-bug-prompt.js'\nimport { fetchSnippet } from './http.js'\nimport { t } from './i18n.js'\nimport { isFixUiIntent } from './menu-helpers.js'\nimport { menuItemClass } from './styles.js'\n\nexport function createIntentActionButtons(input: {\n intents: IntentConfig[]\n location: SourceLocation\n includeSnippet: boolean\n maxSnippetLines: number\n resolveRuntimeContext: (\n intent: Pick<IntentConfig, 'id' | 'aiIntent'>,\n ) => RuntimeContextEnvelope | null\n resolveCssContextPrompt: (intent?: Pick<IntentConfig, 'id'>) => string | null\n onSend: (payload: {\n label: string\n button: HTMLButtonElement\n prompt: string\n snippetText: string\n runtimeContext: RuntimeContextEnvelope | null\n }) => Promise<void>\n onError: (message: string, errorCode?: string) => void\n}): HTMLButtonElement[] {\n return input.intents.map(intent => {\n const label = intent.label ?? intent.id\n const btn = document.createElement('button')\n btn.className = menuItemClass\n btn.dataset.role = 'ai-secondary'\n btn.textContent = label\n btn.addEventListener('click', async event => {\n event.stopPropagation()\n btn.disabled = true\n btn.textContent = t('menu.sending')\n\n try {\n let snippetResult = null\n if (input.includeSnippet) {\n snippetResult = await fetchSnippet(\n input.location.file,\n input.location.line,\n input.location.column,\n input.maxSnippetLines,\n )\n }\n\n const requestRuntimeContext = input.resolveRuntimeContext(intent)\n const requestCssContextPrompt = input.resolveCssContextPrompt(\n isFixUiIntent(intent) ? intent : undefined,\n )\n const prompt = appendCssContextToPrompt(\n buildPromptForIntent(intent, input.location, snippetResult, requestRuntimeContext),\n requestCssContextPrompt,\n )\n\n await input.onSend({\n label,\n button: btn,\n prompt,\n snippetText: snippetResult?.snippet || '',\n runtimeContext: requestRuntimeContext,\n })\n } catch (err) {\n btn.disabled = false\n btn.textContent = label\n input.onError((err as Error).message, (err as { errorCode?: string }).errorCode)\n }\n })\n\n return btn\n })\n}\n","import type { RuntimeContextEnvelope, SourceLocation } from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport { appendRuntimeContextToPrompt } from './fix-bug-prompt.js'\nimport { buildPrompt, CUSTOM_PROMPT_TEMPLATE } from './intents.js'\nimport { fetchSnippet, openFileWithDiagnostics, sendToAi } from './http.js'\n\nexport async function openAndSendInspectPrompt(input: {\n location: SourceLocation\n snippetText: string\n promptText: string\n runtimeContext?: RuntimeContextEnvelope | null\n onSuccess: () => void\n onRestore: () => void\n onError: (message: string, errorCode?: string) => void\n}): Promise<void> {\n const openResult = await openFileWithDiagnostics(input.location)\n if (!openResult.success) {\n input.onRestore()\n input.onError('Unable to open the source file.', openResult.errorCode ?? 'IDE_UNAVAILABLE')\n return\n }\n\n await new Promise(r => setTimeout(r, 100))\n\n const result = await sendToAi({\n location: input.location,\n snippet: input.snippetText,\n prompt: input.promptText,\n ...(input.runtimeContext ? { runtimeContext: input.runtimeContext } : {}),\n })\n\n if (result.success) {\n if (result.fallbackPayload?.prompt) {\n try {\n await navigator.clipboard.writeText(result.fallbackPayload.prompt)\n } catch {\n // ignore clipboard fallback failures\n }\n }\n input.onSuccess()\n return\n }\n\n input.onRestore()\n input.onError(result.error ?? 'Unknown error', result.errorCode)\n}\n\nexport async function buildCustomInspectPrompt(input: {\n location: SourceLocation\n ask: string\n targetLabel?: string\n includeSnippet: boolean\n maxSnippetLines: number\n runtimeContext?: RuntimeContextEnvelope | null\n cssContextPrompt?: string | null\n}) {\n let snippetResult = null\n if (input.includeSnippet) {\n snippetResult = await fetchSnippet(\n input.location.file,\n input.location.line,\n input.location.column,\n input.maxSnippetLines,\n )\n }\n\n const prompt = appendCssContextToPrompt(\n appendRuntimeContextToPrompt(\n buildPrompt(\n buildCustomInspectPromptTemplate(input.ask.trim(), input.location, input.targetLabel),\n input.location,\n snippetResult,\n ),\n input.runtimeContext?.records ?? [],\n ),\n input.cssContextPrompt ?? null,\n )\n\n return {\n prompt,\n snippetText: snippetResult?.snippet || '',\n }\n}\n\nfunction buildCustomInspectPromptTemplate(\n ask: string,\n location: SourceLocation,\n targetLabel?: string,\n): string {\n const sections = [CUSTOM_PROMPT_TEMPLATE(ask)]\n\n if (targetLabel?.trim()) {\n sections.push(`Selected component:\\n- ${targetLabel.trim()}`)\n }\n\n sections.push(\n `Source location:\\n- file: ${location.file}\\n- location: ${location.line}:${location.column}`,\n )\n\n return sections.join('\\n\\n')\n}\n","import type { SourceLocation } from '@inspecto-dev/types'\nimport { bugIconSvg, cssIconSvg } from './icons.js'\nimport { t } from './i18n.js'\nimport { formatSourceAnchor } from './menu-helpers.js'\nimport {\n applyHeaderIconButtonStyles,\n menuMetaClass,\n menuTitleClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n} from './styles.js'\n\nexport function createMenuHeaderDom(input: {\n location: SourceLocation\n targetLabel?: string\n canAttachRuntimeContext: boolean\n canAttachCssContext: boolean\n}) {\n const header = document.createElement('div')\n header.className = menuTitleClass\n\n const headerCopy = document.createElement('div')\n headerCopy.style.display = 'flex'\n headerCopy.style.flexDirection = 'column'\n headerCopy.style.gap = '2px'\n headerCopy.style.minWidth = '0'\n headerCopy.style.flex = '1 1 auto'\n\n const title = document.createElement('strong')\n title.style.display = 'block'\n title.style.minWidth = '0'\n title.style.whiteSpace = 'nowrap'\n title.style.overflow = 'hidden'\n title.style.textOverflow = 'ellipsis'\n title.textContent =\n input.targetLabel?.trim() || input.location.file.split('/').pop() || input.location.file\n\n const meta = document.createElement('div')\n meta.className = menuMetaClass\n meta.textContent = formatSourceAnchor(input.location)\n meta.title = `${input.location.file}:${input.location.line}:${input.location.column}`\n\n const headerActions = document.createElement('div')\n headerActions.style.display = 'flex'\n headerActions.style.alignItems = 'center'\n headerActions.style.gap = '6px'\n\n const openButton = document.createElement('button')\n openButton.type = 'button'\n openButton.dataset.role = 'open-icon'\n openButton.setAttribute('aria-label', t('menu.openInEditor'))\n openButton.title = t('menu.openInEditor')\n openButton.textContent = '↗'\n applyHeaderIconButtonStyles(openButton)\n\n const runtimeToggleButton = document.createElement('button')\n runtimeToggleButton.type = 'button'\n runtimeToggleButton.className = runtimeToggleClass\n runtimeToggleButton.dataset.role = 'runtime-context-toggle'\n runtimeToggleButton.setAttribute('aria-label', t('menu.attachRuntime'))\n runtimeToggleButton.title = t('menu.attachRuntime')\n runtimeToggleButton.hidden = !input.canAttachRuntimeContext\n applyHeaderIconButtonStyles(runtimeToggleButton)\n const runtimeToggleIcon = document.createElement('span')\n runtimeToggleIcon.className = runtimeToggleIconClass\n runtimeToggleIcon.innerHTML = bugIconSvg\n const runtimeToggleBadge = document.createElement('span')\n runtimeToggleBadge.className = runtimeToggleBadgeClass\n runtimeToggleBadge.dataset.runtimeErrorBadge = 'true'\n runtimeToggleBadge.hidden = true\n runtimeToggleButton.append(runtimeToggleIcon, runtimeToggleBadge)\n\n const cssToggleButton = document.createElement('button')\n cssToggleButton.type = 'button'\n cssToggleButton.className = runtimeToggleClass\n cssToggleButton.dataset.role = 'css-context-toggle'\n cssToggleButton.setAttribute('aria-label', t('menu.attachCss'))\n cssToggleButton.title = t('menu.attachCss')\n cssToggleButton.hidden = !input.canAttachCssContext\n cssToggleButton.setAttribute('aria-pressed', 'false')\n cssToggleButton.dataset.visualState = 'inactive'\n applyHeaderIconButtonStyles(cssToggleButton)\n const cssToggleIcon = document.createElement('span')\n cssToggleIcon.className = runtimeToggleIconClass\n cssToggleIcon.innerHTML = cssIconSvg\n const cssSvgElement = cssToggleIcon.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n cssSvgElement.style.display = 'block'\n }\n cssToggleButton.append(cssToggleIcon)\n\n headerCopy.append(title, meta)\n header.append(headerCopy, headerActions)\n\n return {\n header,\n headerActions,\n openButton,\n runtimeToggleButton,\n runtimeToggleBadge,\n cssToggleButton,\n }\n}\n\nexport function applyIconToggleButtonState(\n button: HTMLButtonElement,\n enabled: boolean,\n enabledTitle: string,\n disabledTitle: string,\n): void {\n button.setAttribute('aria-pressed', enabled ? 'true' : 'false')\n button.dataset.visualState = enabled ? 'active' : 'inactive'\n button.title = enabled ? enabledTitle : disabledTitle\n if (enabled) {\n button.style.background = 'var(--inspecto-accent-primary)'\n button.style.borderColor = 'transparent'\n button.style.color = '#ffffff'\n button.style.boxShadow = 'var(--inspecto-shadow-accent)'\n return\n }\n\n button.style.background = 'var(--inspecto-surface-subtle)'\n button.style.borderColor = 'var(--inspecto-border-subtle)'\n button.style.color = 'var(--inspecto-text-secondary)'\n button.style.boxShadow = 'none'\n}\n","const DEFAULT_EDGE_MARGIN = 8\n\ntype MenuSize = {\n width: number\n height: number\n}\n\ntype ViewportSize = {\n width: number\n height: number\n}\n\nexport function resolveMenuPosition(input: {\n clickX: number\n clickY: number\n menuRect: MenuSize\n viewport: ViewportSize\n edgeMargin?: number\n}): { left: number; top: number } {\n const edgeMargin = input.edgeMargin ?? DEFAULT_EDGE_MARGIN\n const safeWidth =\n input.viewport.width > 0 ? input.viewport.width : input.menuRect.width + edgeMargin * 2\n const safeHeight =\n input.viewport.height > 0 ? input.viewport.height : input.menuRect.height + edgeMargin * 2\n\n const maxLeft = Math.max(safeWidth - input.menuRect.width - edgeMargin, edgeMargin)\n const left = Math.max(edgeMargin, Math.min(input.clickX, maxLeft))\n\n const maxTop = Math.max(safeHeight - input.menuRect.height - edgeMargin, edgeMargin)\n const top = Math.max(edgeMargin, Math.min(input.clickY + edgeMargin, maxTop))\n\n return { left, top }\n}\n","import { createIntentActionButtons } from './menu-actions.js'\nimport { buildCustomInspectPrompt, openAndSendInspectPrompt } from './menu-send.js'\nimport type {\n Provider,\n InspectorOptions,\n RuntimeContextEnvelope,\n SourceLocation,\n IntentConfig,\n} from '@inspecto-dev/types'\nimport { openFileWithDiagnostics, fetchIdeInfo } from './http.js'\nimport { applyIconToggleButtonState, createMenuHeaderDom } from './menu-header.js'\nimport { resolveMenuPosition } from './menu-position.js'\nimport {\n createAskInput,\n createMenuSection,\n createRuntimeContextUi,\n formatRuntimeContextSummary,\n formatRuntimeErrorCount,\n isFixIntent,\n isFixUiIntent,\n showError,\n} from './menu-helpers.js'\nimport { t } from './i18n.js'\nimport { menuClass, loadingSpinnerClass } from './styles.js'\n\nconst _DISPLAY_NAMES: Record<Provider, string> = {\n copilot: 'GitHub Copilot',\n 'claude-code': 'Claude Code',\n gemini: 'Gemini',\n codex: 'Codex',\n coco: 'Coco CLI',\n trae: 'Trae AI',\n cursor: 'Cursor',\n codebuddy: 'CodeBuddy',\n}\n\ntype MenuRuntimeContextDeps = {\n getRuntimeContext?: (location: SourceLocation) => RuntimeContextEnvelope | null\n captureCssContextPrompt?: () => string | null\n targetLabel?: string\n}\n\nexport function showIntentMenu(\n shadowRoot: ShadowRoot,\n location: SourceLocation,\n clickX: number,\n clickY: number,\n options: InspectorOptions,\n onClose: () => void,\n deps: MenuRuntimeContextDeps = {},\n): () => void {\n const maxSnippetLines = options.maxSnippetLines ?? 100\n const includeSnippet = options.includeSnippet ?? false\n let canAttachRuntimeContext =\n options.runtimeContext?.enabled === true && typeof deps.getRuntimeContext === 'function'\n let runtimeContextPreference: boolean | null = null\n let runtimeContextDefaultMode: 'off' | 'all-on' | 'mixed' = 'off'\n let cssContextEnabled = false\n const canAttachCssContext = typeof deps.captureCssContextPrompt === 'function'\n\n const menu = document.createElement('div')\n menu.className = menuClass\n menu.style.width = '304px'\n menu.style.maxWidth = 'calc(100vw - 16px)'\n menu.style.boxSizing = 'border-box'\n menu.style.pointerEvents = 'auto'\n\n const {\n header,\n headerActions,\n openButton,\n runtimeToggleButton,\n runtimeToggleBadge,\n cssToggleButton,\n } = createMenuHeaderDom({\n location,\n ...(deps.targetLabel ? { targetLabel: deps.targetLabel } : {}),\n canAttachRuntimeContext,\n canAttachCssContext,\n })\n\n const syncCssToggleButton = () => {\n cssToggleButton.hidden = !canAttachCssContext\n if (!canAttachCssContext) {\n cssToggleButton.remove()\n return\n }\n\n if (!headerActions.contains(cssToggleButton)) {\n const referenceNode = headerActions.contains(runtimeToggleButton)\n ? runtimeToggleButton\n : headerActions.contains(openButton)\n ? openButton\n : null\n if (referenceNode) {\n headerActions.insertBefore(cssToggleButton, referenceNode)\n } else {\n headerActions.appendChild(cssToggleButton)\n }\n }\n }\n\n const syncRuntimeToggleButton = () => {\n runtimeToggleButton.hidden = !canAttachRuntimeContext\n if (!canAttachRuntimeContext) {\n runtimeToggleButton.remove()\n return\n }\n\n if (!headerActions.contains(runtimeToggleButton)) {\n const referenceNode = headerActions.contains(openButton) ? openButton : null\n if (referenceNode) {\n headerActions.insertBefore(runtimeToggleButton, referenceNode)\n } else {\n headerActions.appendChild(runtimeToggleButton)\n }\n }\n }\n\n const applyCssToggleButtonState = () => {\n applyIconToggleButtonState(\n cssToggleButton,\n cssContextEnabled,\n t('menu.cssEnabled'),\n t('menu.attachCss'),\n )\n }\n\n syncCssToggleButton()\n syncRuntimeToggleButton()\n applyCssToggleButtonState()\n headerActions.appendChild(openButton)\n menu.appendChild(header)\n\n const runtimeContextSection = createMenuSection()\n runtimeContextSection.hidden = true\n menu.appendChild(runtimeContextSection)\n\n const askAiSection = createMenuSection()\n const { input, inputWrapper, sendIcon } = createAskInput(options.askPlaceholder)\n askAiSection.appendChild(inputWrapper)\n const loadingEl = document.createElement('div')\n loadingEl.className = loadingSpinnerClass\n askAiSection.appendChild(loadingEl)\n menu.appendChild(askAiSection)\n\n const actionsSection = createMenuSection()\n menu.appendChild(actionsSection)\n\n menu.style.left = `${clickX}px`\n menu.style.visibility = 'hidden'\n menu.style.display = 'block'\n\n shadowRoot.appendChild(menu)\n\n const updatePosition = () => {\n const rect = menu.getBoundingClientRect()\n const { left: nextLeft, top: nextTop } = resolveMenuPosition({\n clickX,\n clickY,\n menuRect: { width: rect.width, height: rect.height },\n viewport: {\n width: document.documentElement.clientWidth || window.innerWidth || 0,\n height: document.documentElement.clientHeight || window.innerHeight || 0,\n },\n })\n\n menu.style.left = `${nextLeft}px`\n menu.style.top = `${nextTop}px`\n }\n updatePosition()\n menu.style.visibility = 'visible'\n\n // When the menu input steals focus from a page-controlled input, some apps immediately\n // steal it back in their `onBlur` handlers (often implemented via document-level\n // focusin/focusout delegation). We suppress those delegated focus events while focus\n // is moving into the menu so the page doesn't re-focus itself.\n const teardownDocFocusGuards = (): void => {\n document.removeEventListener('focusin', onDocFocusIn, true)\n document.removeEventListener('focusout', onDocFocusOut, true)\n }\n\n const onDocFocusIn = (e: FocusEvent): void => {\n if (!menu.isConnected) {\n teardownDocFocusGuards()\n return\n }\n const path = e.composedPath?.() ?? []\n if (path.includes(menu)) {\n e.stopImmediatePropagation()\n }\n }\n\n const onDocFocusOut = (e: FocusEvent): void => {\n if (!menu.isConnected) {\n teardownDocFocusGuards()\n return\n }\n const related = (e as FocusEvent).relatedTarget as Node | null\n if (!related) return\n // In Shadow DOM, relatedTarget can be retargeted to the shadow host.\n if (related === shadowRoot.host) {\n e.stopImmediatePropagation()\n return\n }\n\n if (related instanceof Node && menu.contains(related)) {\n e.stopImmediatePropagation()\n }\n }\n\n document.addEventListener('focusin', onDocFocusIn, true)\n document.addEventListener('focusout', onDocFocusOut, true)\n\n // Focus input automatically.\n // NOTE: Do this synchronously to keep it inside the user gesture that opened the menu.\n // Some apps aggressively restore focus to their own inputs on the next tick; the\n // synchronous focus + a couple of follow-up attempts makes the menu reliably typeable.\n const focusAskInput = (): void => {\n try {\n input.focus({ preventScroll: true })\n } catch {\n // Older DOM implementations may not support preventScroll.\n input.focus()\n }\n }\n\n const isAskInputFocused = (): boolean => {\n // In Shadow DOM, document.activeElement is usually the host element.\n // ShadowRoot.activeElement is the reliable check in browsers, but some test DOM\n // implementations may throw when the host is torn down.\n try {\n return shadowRoot.activeElement === input\n } catch {\n return false\n }\n }\n\n focusAskInput()\n const rafId = requestAnimationFrame(() => {\n if (!menu.isConnected) return\n if (!isAskInputFocused()) focusAskInput()\n })\n const focusTimeoutId = setTimeout(() => {\n if (!menu.isConnected) return\n if (!isAskInputFocused()) focusAskInput()\n }, 50)\n\n const onDocClick = (e: MouseEvent): void => {\n // Determine if the click target is within a dialog or modal\n const eventTarget = e.target as HTMLElement | null\n if (eventTarget) {\n // Allow clicks on DOM elements that look like modals or popups to not close the menu\n // E.g., clicking on elements with roles like dialog, menu, tooltip, or inside a portaled floating element\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n\n // Because the menu is inside a Shadow DOM, e.target from the document's perspective\n // is just the <inspecto-overlay> custom element.\n const path = e.composedPath()\n if (path.includes(menu)) return\n cleanup()\n }\n // Use a small timeout so the click that opened the menu doesn't immediately close it\n setTimeout(() => document.addEventListener('click', onDocClick, { capture: true }), 0)\n\n function cleanup(): void {\n document.removeEventListener('click', onDocClick, { capture: true })\n teardownDocFocusGuards()\n cancelAnimationFrame(rafId)\n clearTimeout(focusTimeoutId)\n menu.remove()\n onClose()\n }\n\n const resolveRuntimeContext = (\n intent?: Pick<IntentConfig, 'id' | 'aiIntent'>,\n ): RuntimeContextEnvelope | null => {\n if (!canAttachRuntimeContext) return null\n\n const shouldAttach =\n runtimeContextPreference !== null\n ? runtimeContextPreference\n : runtimeContextDefaultMode === 'all-on'\n ? true\n : runtimeContextDefaultMode === 'mixed'\n ? Boolean(intent && isFixIntent(intent))\n : false\n\n if (!shouldAttach) return null\n return deps.getRuntimeContext?.(location) ?? null\n }\n\n const applyRuntimeToggleButtonState = (visualState: 'inactive' | 'mixed' | 'active'): void => {\n runtimeToggleButton.dataset.visualState = visualState\n\n if (visualState === 'active') {\n runtimeToggleButton.style.background = 'var(--inspecto-accent-primary)'\n runtimeToggleButton.style.borderColor = 'transparent'\n runtimeToggleButton.style.color = '#ffffff'\n runtimeToggleButton.style.boxShadow = 'var(--inspecto-shadow-accent)'\n return\n }\n\n if (visualState === 'mixed') {\n runtimeToggleButton.style.background = 'var(--inspecto-surface-subtle)'\n runtimeToggleButton.style.borderColor = 'var(--inspecto-border-subtle)'\n runtimeToggleButton.style.color = 'var(--inspecto-text-secondary)'\n runtimeToggleButton.style.boxShadow = 'none'\n return\n }\n\n runtimeToggleButton.style.background = 'var(--inspecto-surface-subtle)'\n runtimeToggleButton.style.borderColor = 'var(--inspecto-border-subtle)'\n runtimeToggleButton.style.color = 'var(--inspecto-text-secondary)'\n runtimeToggleButton.style.boxShadow = 'none'\n }\n\n const renderRuntimeContextUi = () => {\n runtimeContextSection.replaceChildren()\n\n if (!canAttachRuntimeContext) {\n runtimeContextSection.hidden = true\n return\n }\n\n const runtimeContextForUi = deps.getRuntimeContext?.(location) ?? null\n const runtimeErrorCount = runtimeContextForUi?.summary.runtimeErrorCount ?? 0\n const runtimeSummary = runtimeContextForUi\n ? formatRuntimeContextSummary(runtimeContextForUi)\n : ''\n runtimeToggleBadge.textContent = formatRuntimeErrorCount(runtimeErrorCount)\n\n const ariaPressed =\n runtimeContextPreference !== null\n ? runtimeContextPreference\n ? 'true'\n : 'false'\n : runtimeContextDefaultMode === 'mixed'\n ? 'mixed'\n : runtimeContextDefaultMode === 'all-on'\n ? 'true'\n : 'false'\n\n runtimeToggleButton.setAttribute('aria-pressed', ariaPressed)\n applyRuntimeToggleButtonState(\n ariaPressed === 'true' ? 'active' : ariaPressed === 'mixed' ? 'mixed' : 'inactive',\n )\n runtimeToggleBadge.hidden = ariaPressed !== 'true' || runtimeErrorCount <= 0\n runtimeToggleButton.title =\n ariaPressed === 'true'\n ? runtimeSummary\n ? `${t('menu.runtimeEnabled')} • ${runtimeSummary}`\n : t('menu.runtimeEnabled')\n : ariaPressed === 'mixed'\n ? runtimeSummary\n ? `${t('menu.runtimeFixOnly')} • ${runtimeSummary}`\n : t('menu.runtimeFixOnly')\n : runtimeSummary\n ? `${t('menu.attachRuntime')} • ${runtimeSummary}`\n : t('menu.attachRuntime')\n\n if (ariaPressed !== 'true') {\n runtimeContextSection.hidden = true\n updatePosition()\n return\n }\n\n const runtimeContextUi = createRuntimeContextUi(runtimeContextForUi, options)\n runtimeContextSection.hidden = runtimeContextUi === null\n if (runtimeContextUi) {\n runtimeContextSection.appendChild(runtimeContextUi)\n }\n updatePosition()\n }\n\n runtimeToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n const currentEnabled = runtimeToggleButton.getAttribute('aria-pressed') === 'true'\n runtimeContextPreference = !currentEnabled\n renderRuntimeContextUi()\n })\n\n cssToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n cssContextEnabled = !cssContextEnabled\n applyCssToggleButtonState()\n })\n\n const resolveCssContextPrompt = (intent?: Pick<IntentConfig, 'id'>): string | null => {\n const shouldAttachCssContext = cssContextEnabled || Boolean(intent && isFixUiIntent(intent))\n if (!shouldAttachCssContext) return null\n try {\n return deps.captureCssContextPrompt?.() ?? null\n } catch {\n return null\n }\n }\n\n // Handle custom ask input\n const submitAsk = async () => {\n if (!input.value.trim()) return\n input.disabled = true\n sendIcon.style.pointerEvents = 'none'\n\n try {\n const requestRuntimeContext = resolveRuntimeContext()\n const requestCssContextPrompt = resolveCssContextPrompt()\n const built = await buildCustomInspectPrompt({\n location,\n ask: input.value.trim(),\n ...(deps.targetLabel ? { targetLabel: deps.targetLabel } : {}),\n includeSnippet,\n maxSnippetLines,\n runtimeContext: requestRuntimeContext,\n cssContextPrompt: requestCssContextPrompt,\n })\n await openAndSendInspectPrompt({\n location,\n promptText: built.prompt,\n snippetText: built.snippetText,\n runtimeContext: requestRuntimeContext,\n onSuccess: cleanup,\n onRestore: () => {\n input.disabled = false\n sendIcon.style.pointerEvents = 'auto'\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n } catch (err) {\n input.disabled = false\n sendIcon.style.pointerEvents = 'auto'\n showError(menu, (err as Error).message, (err as { errorCode?: string }).errorCode)\n }\n }\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') submitAsk()\n })\n sendIcon.addEventListener('click', submitAsk)\n\n // Fetch only IDE info to render the menu immediately\n fetchIdeInfo()\n .then(ideInfo => {\n loadingEl.remove()\n\n if (!ideInfo) {\n input.placeholder = t('menu.ask.placeholder.setup')\n showError(menu, 'Client config unavailable', 'CLIENT_CONFIG_UNAVAILABLE')\n updatePosition()\n return\n }\n\n if (\n ideInfo?.runtimeContext?.enabled === true &&\n typeof deps.getRuntimeContext === 'function'\n ) {\n canAttachRuntimeContext = true\n syncRuntimeToggleButton()\n }\n const intents = ideInfo?.prompts || []\n if (!options.askPlaceholder) {\n input.placeholder =\n intents.length > 0\n ? t('menu.ask.placeholder.default')\n : t('menu.ask.placeholder.fallback')\n }\n const aiIntents = intents\n const hasFixIntent = aiIntents.some(isFixIntent)\n const hasNonFixIntent = aiIntents.some(intent => !isFixIntent(intent))\n runtimeContextDefaultMode = hasFixIntent ? (hasNonFixIntent ? 'mixed' : 'all-on') : 'off'\n renderRuntimeContextUi()\n const aiActions = createIntentActionButtons({\n intents,\n location,\n includeSnippet,\n maxSnippetLines,\n resolveRuntimeContext,\n resolveCssContextPrompt,\n onSend: async payload => {\n await openAndSendInspectPrompt({\n location,\n promptText: payload.prompt,\n snippetText: payload.snippetText,\n runtimeContext: payload.runtimeContext,\n onSuccess: cleanup,\n onRestore: () => {\n payload.button.disabled = false\n payload.button.textContent = payload.label\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n\n openButton.addEventListener('click', async e => {\n e.stopPropagation()\n openButton.disabled = true\n const openResult = await openFileWithDiagnostics(location)\n if (openResult.success) {\n cleanup()\n return\n }\n openButton.disabled = false\n showError(menu, t('menu.error.openIde'), openResult.errorCode ?? 'IDE_UNAVAILABLE')\n })\n\n for (const action of aiActions) {\n actionsSection.appendChild(action)\n }\n updatePosition()\n })\n .catch((err: Error) => {\n loadingEl.remove()\n const isServerDown = err instanceof TypeError\n showError(\n menu,\n isServerDown\n ? 'Cannot connect to inspector server. Is the dev server running?'\n : err.message,\n (err as { errorCode?: string }).errorCode ?? 'UNKNOWN',\n )\n updatePosition()\n })\n\n return cleanup\n}\n","import type { RuntimeEvidenceKind, RuntimeEvidenceRecord } from '@inspecto-dev/types'\n\nexport type CollectorRecordInput = {\n kind: RuntimeEvidenceKind\n message: string\n timestamp: number\n stack?: string\n sourceUrl?: string\n sourceFile?: string\n route?: string\n componentHints?: string[]\n request?: RuntimeEvidenceRecord['request']\n}\n\nexport type RuntimeEvidenceLimits = {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n}\n\nexport type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n\nexport type XhrState = {\n method?: string\n url?: string\n pathname?: string\n attached: boolean\n recorded: boolean\n aborted: boolean\n}\n\nexport const NOISE_PATTERNS = [\n /\\[vite\\]/i,\n /\\bhmr\\b/i,\n /\\bhot update\\b/i,\n /\\bwebsocket\\b/i,\n /\\bsource map\\b/i,\n /extension:\\/\\//i,\n]\n\nexport function isNoisyInput(input: CollectorRecordInput): boolean {\n const candidates = [\n input.message,\n input.stack,\n input.sourceUrl,\n input.sourceFile,\n input.route,\n input.request?.url,\n input.request?.pathname,\n input.request?.responseSummary,\n ].filter((value): value is string => typeof value === 'string')\n\n return candidates.some(candidate => NOISE_PATTERNS.some(pattern => pattern.test(candidate)))\n}\n\nexport function buildRecordId(input: CollectorRecordInput): string {\n return [\n input.kind,\n normalizeKey(input.message),\n normalizeKey(input.stack),\n normalizeKey(input.sourceUrl),\n normalizeKey(input.sourceFile),\n normalizeKey(input.route),\n normalizeKey(input.request?.method),\n normalizeKey(input.request?.url),\n normalizeKey(input.request?.pathname),\n normalizeKey(input.request?.status),\n ].join('::')\n}\n\nexport function cloneRuntimeRecord(record: RuntimeEvidenceRecord): RuntimeEvidenceRecord {\n return {\n ...record,\n relevanceReasons: [...record.relevanceReasons],\n ...(record.componentHints ? { componentHints: [...record.componentHints] } : {}),\n ...(record.request ? { request: { ...record.request } } : {}),\n }\n}\n\nexport function compareRankedRuntimeEvidence(\n a: RuntimeEvidenceRecord,\n b: RuntimeEvidenceRecord,\n): number {\n return (\n b.relevanceScore - a.relevanceScore ||\n b.timestamp - a.timestamp ||\n b.occurrenceCount - a.occurrenceCount\n )\n}\n\nexport function buildRequestRecord(input: {\n method?: string\n url?: string\n pathname?: string\n status?: number\n responseSummary?: string\n}): NonNullable<RuntimeEvidenceRecord['request']> {\n return {\n ...(input.method ? { method: input.method } : {}),\n ...(input.url ? { url: input.url } : {}),\n ...(input.pathname ? { pathname: input.pathname } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.responseSummary ? { responseSummary: input.responseSummary } : {}),\n }\n}\n\nexport function buildXhrState(\n input: Omit<XhrState, 'attached' | 'recorded' | 'aborted'> = {},\n): XhrState {\n return {\n attached: false,\n recorded: false,\n aborted: false,\n ...(input.method ? { method: input.method } : {}),\n ...(input.url ? { url: input.url } : {}),\n ...(input.pathname ? { pathname: input.pathname } : {}),\n }\n}\n\nexport function isAbortLikeError(error: unknown): boolean {\n if (typeof DOMException !== 'undefined' && error instanceof DOMException) {\n return error.name === 'AbortError'\n }\n\n if (error instanceof Error) {\n return error.name === 'AbortError'\n }\n\n return Boolean(\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n (error as { name?: unknown }).name === 'AbortError',\n )\n}\n\nexport function stackReferencesLocation(stack: string, file: string): boolean {\n const normalizedCandidates = buildComparablePaths(file)\n return normalizedCandidates.some(candidate => candidate.length > 0 && stack.includes(candidate))\n}\n\nexport function matchesTargetFile(candidate: string | undefined, file: string): boolean {\n if (!candidate) return false\n\n const candidateVariants = buildComparablePaths(candidate)\n const fileVariants = buildComparablePaths(file)\n\n for (const candidateVariant of candidateVariants) {\n for (const fileVariant of fileVariants) {\n if (\n candidateVariant === fileVariant ||\n candidateVariant.endsWith(fileVariant) ||\n fileVariant.endsWith(candidateVariant)\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport function normalizeKey(value: string | number | undefined): string {\n return value === undefined || value === null ? '' : String(value).trim().replace(/\\s+/g, ' ')\n}\n\nexport function buildComparablePaths(value: string): string[] {\n const variants = new Set<string>()\n const trimmed = value.trim()\n if (!trimmed) return []\n\n variants.add(trimmed)\n\n try {\n const url = new URL(\n trimmed,\n typeof window !== 'undefined' ? window.location.href : 'http://localhost',\n )\n variants.add(url.pathname)\n const decoded = decodeURIComponent(url.pathname)\n variants.add(decoded)\n const basename = decoded.split('/').pop()\n if (basename) variants.add(basename)\n } catch {\n const basename = trimmed.split('/').pop()\n if (basename) variants.add(basename)\n }\n\n return Array.from(variants).filter(Boolean)\n}\n\nexport function stringifyValue(value: unknown): string {\n if (value instanceof Error) return value.stack || value.message\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value)\n }\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n try {\n return JSON.stringify(value)\n } catch {\n return Object.prototype.toString.call(value)\n }\n}\n\nexport function stringifyReason(reason: unknown): string {\n if (reason instanceof Error) return reason.message || reason.stack || 'Unknown promise rejection'\n if (typeof reason === 'string') return reason\n if (reason === undefined) return 'Unknown promise rejection'\n return stringifyValue(reason)\n}\n\nexport function extractConsoleErrorDetails(args: unknown[]): { message: string; stack?: string } {\n const message = args.map(arg => stringifyValue(arg)).join(' ')\n\n for (const arg of args) {\n if (arg instanceof Error && arg.stack) {\n return { message, stack: arg.stack }\n }\n\n if (arg && typeof arg === 'object') {\n const maybeStack = 'stack' in arg ? (arg as { stack?: unknown }).stack : undefined\n if (typeof maybeStack === 'string' && maybeStack.trim()) {\n return { message, stack: maybeStack }\n }\n }\n\n if (typeof arg === 'string' && looksLikeStackTrace(arg)) {\n return { message, stack: arg }\n }\n }\n\n return { message }\n}\n\nexport function buildStackFromErrorEvent(event: ErrorEvent): string | undefined {\n if (!event.filename) return undefined\n const line = typeof event.lineno === 'number' && event.lineno > 0 ? event.lineno : undefined\n const column = typeof event.colno === 'number' && event.colno > 0 ? event.colno : undefined\n if (line && column)\n return `${event.message || 'Error'}\\n at <unknown> (${event.filename}:${line}:${column})`\n if (line) return `${event.message || 'Error'}\\n at <unknown> (${event.filename}:${line})`\n return event.filename\n}\n\nexport function buildRequestDetails(input: RequestInfo | URL, init?: RequestInit) {\n const request = typeof Request !== 'undefined' && input instanceof Request ? input : undefined\n const requestUrl = stringifyRequestUrl(input)\n const pathname = safePathname(requestUrl)\n const method = (init?.method ?? request?.method ?? 'GET').toUpperCase()\n\n return {\n method,\n url: requestUrl,\n pathname,\n }\n}\n\nexport function stringifyRequestUrl(input: RequestInfo | URL): string {\n if (typeof input === 'string') return input\n if (typeof URL !== 'undefined' && input instanceof URL) return input.toString()\n if (typeof Request !== 'undefined' && input instanceof Request) return input.url\n return String(input)\n}\n\nexport function safePathname(value: string | undefined): string | undefined {\n if (!value) return undefined\n\n try {\n return new URL(value, window.location.href).pathname\n } catch {\n return value.startsWith('/') ? value : undefined\n }\n}\n\nfunction looksLikeStackTrace(value: string): boolean {\n return (\n /\\n\\s*at\\s+/i.test(value) ||\n /https?:\\/\\/.+?:\\d+:\\d+/i.test(value) ||\n /\\/[^\\s]+:\\d+:\\d+/.test(value)\n )\n}\n","import type { RuntimeEvidenceRecord } from '@inspecto-dev/types'\nimport {\n buildRecordId,\n buildRequestDetails,\n buildRequestRecord,\n buildStackFromErrorEvent,\n buildXhrState,\n cloneRuntimeRecord,\n extractConsoleErrorDetails,\n isAbortLikeError,\n isNoisyInput,\n safePathname,\n stringifyReason,\n stringifyRequestUrl,\n type CollectorRecordInput,\n type FetchLike,\n type XhrState,\n} from './runtime-context-shared.js'\n\ntype RuntimeCollector = ReturnType<typeof createRuntimeContextCollector>\n\ntype RuntimeCaptureLayer = {\n collector: RuntimeCollector\n}\n\nconst activeCaptureLayers = new Set<RuntimeCaptureLayer>()\nlet originalConsoleError: typeof console.error | null = null\nlet originalFetch: FetchLike | null = null\nlet originalXhrOpen: XMLHttpRequest['open'] | null = null\nlet originalXhrSend: XMLHttpRequest['send'] | null = null\nlet xhrState: WeakMap<XMLHttpRequest, XhrState> | null = null\nlet sharedPatchesInstalled = false\n\nconst sharedWindowErrorHandler = (event: ErrorEvent) => {\n if (!event.error && !event.message) return\n\n const stack = event.error instanceof Error ? event.error.stack : buildStackFromErrorEvent(event)\n const sourceUrl = event.filename || undefined\n\n dispatchToActiveCollectors(collector =>\n collector.recordError({\n message: event.message || event.error?.message || 'Unknown runtime error',\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(stack ? { stack } : {}),\n ...(sourceUrl ? { sourceUrl } : {}),\n }),\n )\n}\n\nconst sharedWindowRejectionHandler = (\n event: PromiseRejectionEvent | (Event & { reason?: unknown }),\n) => {\n const stack = event.reason instanceof Error ? event.reason.stack : undefined\n\n dispatchToActiveCollectors(collector =>\n collector.recordPromiseRejection({\n message: stringifyReason(event.reason),\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(stack ? { stack } : {}),\n }),\n )\n}\n\nexport function createRuntimeContextCollector(maxAgeMs = 60_000) {\n const records = new Map<string, RuntimeEvidenceRecord>()\n\n function normalize(input: CollectorRecordInput): RuntimeEvidenceRecord | null {\n if (isNoisyInput(input)) return null\n\n const id = buildRecordId(input)\n const existing = records.get(id)\n if (existing) {\n existing.occurrenceCount += 1\n existing.timestamp = Math.max(existing.timestamp, input.timestamp)\n return existing\n }\n\n return {\n id,\n kind: input.kind,\n timestamp: input.timestamp,\n message: input.message,\n occurrenceCount: 1,\n relevanceScore: 0,\n relevanceLevel: 'low',\n relevanceReasons: [],\n ...(input.stack ? { stack: input.stack } : {}),\n ...(input.sourceUrl ? { sourceUrl: input.sourceUrl } : {}),\n ...(input.sourceFile ? { sourceFile: input.sourceFile } : {}),\n ...(input.route ? { route: input.route } : {}),\n ...(input.componentHints ? { componentHints: input.componentHints } : {}),\n ...(input.request ? { request: input.request } : {}),\n }\n }\n\n function upsert(input: CollectorRecordInput): void {\n prune(input.timestamp)\n const normalized = normalize(input)\n if (!normalized) return\n records.set(normalized.id, normalized)\n }\n\n function prune(now: number): void {\n for (const [id, record] of records) {\n if (now - record.timestamp > maxAgeMs) {\n records.delete(id)\n }\n }\n }\n\n return {\n recordError(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'runtime-error' })\n },\n recordPromiseRejection(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'promise-rejection' })\n },\n recordConsoleError(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'console-error' })\n },\n recordFailedRequest(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'failed-request' })\n },\n snapshot() {\n prune(Date.now())\n return {\n records: Array.from(records.values()).map(cloneRuntimeRecord),\n }\n },\n clear() {\n records.clear()\n },\n }\n}\n\nexport function attachRuntimeContextCapture(collector: RuntimeCollector): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const layer: RuntimeCaptureLayer = { collector }\n activeCaptureLayers.add(layer)\n ensureSharedPatches()\n\n let disposed = false\n return () => {\n if (disposed) return\n disposed = true\n activeCaptureLayers.delete(layer)\n if (activeCaptureLayers.size === 0) {\n restoreSharedPatches()\n }\n }\n}\n\nfunction ensureSharedPatches(): void {\n if (sharedPatchesInstalled || typeof window === 'undefined') return\n\n sharedPatchesInstalled = true\n\n originalConsoleError = console.error\n console.error = ((...args: unknown[]) => {\n const consoleDetails = extractConsoleErrorDetails(args)\n dispatchToActiveCollectors(collector =>\n collector.recordConsoleError({\n message: consoleDetails.message,\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(consoleDetails.stack ? { stack: consoleDetails.stack } : {}),\n }),\n )\n return originalConsoleError!.apply(console, args as never)\n }) as typeof console.error\n\n window.addEventListener('error', sharedWindowErrorHandler)\n window.addEventListener('unhandledrejection', sharedWindowRejectionHandler as EventListener)\n\n if (typeof window.fetch === 'function') {\n originalFetch = window.fetch as FetchLike\n window.fetch = (async (input, init) => {\n const request = buildRequestDetails(input, init)\n try {\n const response = await Reflect.apply(originalFetch!, window, [input, init])\n if (!response.ok) {\n const requestDetails = buildRequestRecord({\n method: request.method,\n url: request.url,\n status: response.status,\n responseSummary: response.statusText || `HTTP ${response.status}`,\n ...(request.pathname ? { pathname: request.pathname } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${request.method} ${request.pathname ?? request.url ?? 'request'} -> ${response.status}`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n }\n return response\n } catch (error) {\n if (isAbortLikeError(error)) {\n throw error\n }\n const requestDetails = buildRequestRecord({\n method: request.method,\n url: request.url,\n responseSummary: stringifyReason(error),\n ...(request.pathname ? { pathname: request.pathname } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${request.method} ${request.pathname ?? request.url ?? 'request'} failed: ${stringifyReason(error)}`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n throw error\n }\n }) as typeof window.fetch\n }\n\n if (typeof XMLHttpRequest !== 'undefined') {\n const prototype = XMLHttpRequest.prototype\n originalXhrOpen = prototype.open\n originalXhrSend = prototype.send\n xhrState = new WeakMap<XMLHttpRequest, XhrState>()\n\n prototype.open = function open(\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n ...rest: [boolean?, string?, string?]\n ) {\n const requestUrl = stringifyRequestUrl(url)\n const pathname = safePathname(requestUrl)\n xhrState!.set(\n this,\n buildXhrState({\n method: method.toUpperCase(),\n url: requestUrl,\n ...(pathname ? { pathname } : {}),\n }),\n )\n return Reflect.apply(originalXhrOpen!, this, [method, url, ...rest]) as void\n }\n\n prototype.send = function send(\n this: XMLHttpRequest,\n ...args: Parameters<XMLHttpRequest['send']>\n ) {\n const state = xhrState!.get(this) ?? buildXhrState()\n xhrState!.set(this, state)\n if (!state.attached) {\n state.attached = true\n const markAborted = () => {\n state.aborted = true\n }\n const recordIfNeeded = () => {\n if (state.recorded) return\n if (state.aborted) return\n if (this.status !== 0 && this.status < 400) return\n state.recorded = true\n const requestDetails = buildRequestRecord({\n responseSummary: this.statusText || 'Request failed',\n ...(state.method ? { method: state.method } : {}),\n ...(state.url ? { url: state.url } : {}),\n ...(state.pathname ? { pathname: state.pathname } : {}),\n ...(this.status ? { status: this.status } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${state.method ?? 'GET'} ${state.pathname ?? state.url ?? 'request'} -> ${\n this.status || 'network error'\n }`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n }\n\n this.addEventListener('abort', markAborted, { once: true })\n this.addEventListener('error', recordIfNeeded, { once: true })\n this.addEventListener('timeout', recordIfNeeded, { once: true })\n this.addEventListener('loadend', recordIfNeeded, { once: true })\n }\n\n return originalXhrSend!.apply(this, args)\n }\n }\n}\n\nfunction restoreSharedPatches(): void {\n if (!sharedPatchesInstalled) return\n sharedPatchesInstalled = false\n\n if (originalConsoleError) {\n console.error = originalConsoleError\n originalConsoleError = null\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('error', sharedWindowErrorHandler)\n window.removeEventListener('unhandledrejection', sharedWindowRejectionHandler as EventListener)\n\n if (originalFetch) {\n window.fetch = originalFetch as typeof window.fetch\n originalFetch = null\n }\n }\n\n if (typeof XMLHttpRequest !== 'undefined' && originalXhrOpen && originalXhrSend) {\n XMLHttpRequest.prototype.open = originalXhrOpen\n XMLHttpRequest.prototype.send = originalXhrSend\n }\n originalXhrOpen = null\n originalXhrSend = null\n xhrState = null\n}\n\nfunction dispatchToActiveCollectors(callback: (collector: RuntimeCollector) => void): void {\n for (const layer of activeCaptureLayers) {\n callback(layer.collector)\n }\n}\n","import type {\n RuntimeContextEnvelope,\n RuntimeContextSummary,\n RuntimeEvidenceLevel,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport {\n cloneRuntimeRecord,\n compareRankedRuntimeEvidence,\n matchesTargetFile,\n stackReferencesLocation,\n type RuntimeEvidenceLimits,\n} from './runtime-context-shared.js'\n\nexport function rankRuntimeEvidence(\n records: RuntimeEvidenceRecord[],\n location: SourceLocation,\n): RuntimeEvidenceRecord[] {\n return records\n .map(record => {\n const relevanceReasons: string[] = []\n let relevanceScore = 0\n\n if (record.stack && stackReferencesLocation(record.stack, location.file)) {\n relevanceScore += 0.6\n relevanceReasons.push('stack references target file')\n }\n\n if (\n matchesTargetFile(record.sourceFile, location.file) ||\n matchesTargetFile(record.sourceUrl, location.file)\n ) {\n relevanceScore += 0.15\n relevanceReasons.push('source file matches target file')\n }\n\n if (record.kind === 'runtime-error') {\n relevanceScore += 0.2\n relevanceReasons.push('runtime error')\n } else if (record.kind === 'promise-rejection') {\n relevanceScore += 0.15\n relevanceReasons.push('promise rejection')\n } else if (record.kind === 'console-error') {\n relevanceScore += 0.1\n relevanceReasons.push('console error')\n } else {\n relevanceScore += 0.2\n relevanceReasons.push('failed request')\n if (record.request?.pathname || record.request?.url) {\n relevanceScore += 0.15\n relevanceReasons.push('request failed during active session')\n }\n }\n\n if (record.occurrenceCount > 1) {\n relevanceScore += Math.min(0.15, (record.occurrenceCount - 1) * 0.05)\n relevanceReasons.push(`seen ${record.occurrenceCount} times`)\n }\n\n if (record.route && record.route === location.file) {\n relevanceScore += 0.05\n relevanceReasons.push('route matches target file')\n }\n\n if (record.message.includes(location.file)) {\n relevanceScore += 0.1\n relevanceReasons.push('message references target file')\n }\n\n if (record.stack?.includes(`${location.line}:${location.column}`)) {\n relevanceScore += 0.1\n relevanceReasons.push('stack references target location')\n }\n\n const normalizedScore = Math.min(1, relevanceScore)\n const relevanceLevel: RuntimeEvidenceLevel =\n normalizedScore >= 0.7 ? 'high' : normalizedScore >= 0.35 ? 'medium' : 'low'\n\n return {\n ...cloneRuntimeRecord(record),\n relevanceScore: normalizedScore,\n relevanceLevel,\n relevanceReasons,\n }\n })\n .sort(compareRankedRuntimeEvidence)\n}\n\nexport function selectRuntimeEvidence(\n records: RuntimeEvidenceRecord[],\n location: SourceLocation | SourceLocation[],\n limits: RuntimeEvidenceLimits = {},\n): RuntimeEvidenceRecord[] {\n const locations = Array.isArray(location) ? location : [location]\n if (locations.length === 0 || records.length === 0) return []\n\n const bestById = new Map<string, RuntimeEvidenceRecord>()\n\n for (const candidateLocation of locations) {\n for (const rankedRecord of rankRuntimeEvidence(records, candidateLocation)) {\n const existing = bestById.get(rankedRecord.id)\n if (!existing || compareRankedRuntimeEvidence(rankedRecord, existing) < 0) {\n bestById.set(rankedRecord.id, rankedRecord)\n }\n }\n }\n\n const ranked = Array.from(bestById.values())\n .filter(record => record.relevanceLevel !== 'low')\n .sort(compareRankedRuntimeEvidence)\n\n const maxRuntimeErrors = limits.maxRuntimeErrors ?? Number.POSITIVE_INFINITY\n const maxFailedRequests = limits.maxFailedRequests ?? Number.POSITIVE_INFINITY\n\n const selected: RuntimeEvidenceRecord[] = []\n let runtimeErrorCount = 0\n let failedRequestCount = 0\n\n for (const record of ranked) {\n if (record.kind === 'failed-request') {\n if (failedRequestCount >= maxFailedRequests) continue\n failedRequestCount += 1\n selected.push(record)\n continue\n }\n\n if (runtimeErrorCount >= maxRuntimeErrors) continue\n runtimeErrorCount += 1\n selected.push(record)\n }\n\n return selected\n}\n\nexport function summarizeRuntimeContext(records: RuntimeEvidenceRecord[]): RuntimeContextSummary {\n return {\n runtimeErrorCount: records.filter(record => record.kind !== 'failed-request').length,\n failedRequestCount: records.filter(record => record.kind === 'failed-request').length,\n includedRecordIds: records.map(record => record.id),\n }\n}\n\nexport function createRuntimeContextEnvelope(\n records: RuntimeEvidenceRecord[],\n): RuntimeContextEnvelope {\n return {\n summary: summarizeRuntimeContext(records),\n records: records.map(cloneRuntimeRecord),\n }\n}\n","export {\n attachRuntimeContextCapture,\n createRuntimeContextCollector,\n} from './runtime-context-capture.js'\nexport {\n createRuntimeContextEnvelope,\n rankRuntimeEvidence,\n selectRuntimeEvidence,\n summarizeRuntimeContext,\n} from './runtime-context-selection.js'\n","import { showIntentMenu } from './menu.js'\nimport { openFile } from './http.js'\nimport { findInspectable, getInspectableLocation } from './component-utils.js'\nimport { createRuntimeContextEnvelope, selectRuntimeEvidence } from './runtime-context.js'\nimport type { InspectorOptions, SourceLocation } from '@inspecto-dev/types'\n\ntype InteractionOptions = InspectorOptions & {\n mode?: 'inspect' | 'annotate'\n}\n\ntype InteractionContext = {\n lastPointerX: number\n lastPointerY: number\n mode: 'inspect' | 'annotate'\n disabled: boolean\n active: boolean\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n pendingAnnotateViewportFrame: number | null\n overlay: { hide(): void; show(target: Element, label: string): void }\n shadowRootEl: ShadowRoot\n style: CSSStyleDeclaration\n cleanupMenu: (() => void) | null\n options: InteractionOptions\n runtimeContextCollector: {\n snapshot(): { records: unknown[] }\n }\n updateLauncherEye(): void\n pause(): void\n isInspectorActive(e: MouseEvent): boolean\n markTargetInAnnotateSession(element: Element, location: SourceLocation): void\n addTargetToCurrentAnnotation(element: Element, location: SourceLocation): void\n shouldQuickJumpOnTrigger(e: MouseEvent): boolean\n openInspectMenu(\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n ): void\n renderAnnotateSelectionOverlay(): void\n describeElement(element: Element): string\n getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n captureCssContextPromptForElement(element: Element, location: SourceLocation): string | null\n}\n\nfunction asInteractionContext(ctx: unknown): InteractionContext {\n return ctx as InteractionContext\n}\n\nexport function handleMouseMove(ctx: unknown, event: MouseEvent): void {\n const state = asInteractionContext(ctx)\n state.lastPointerX = event.clientX\n state.lastPointerY = event.clientY\n state.updateLauncherEye()\n\n if (state.cleanupMenu !== null) {\n // Determine if the click target is within a dialog or modal\n const eventTarget = event.target as HTMLElement | null\n if (eventTarget) {\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n state.overlay.hide()\n return\n }\n\n const isActive = state.isInspectorActive(event)\n if (!isActive) {\n state.overlay.hide()\n return\n }\n\n const target = findInspectable(event.target as Element)\n if (!target) {\n state.overlay.hide()\n return\n }\n\n const loc = getInspectableLocation(target)\n const label = loc ? `${loc.file.split('/').pop() ?? ''}:${loc.line}` : ''\n\n if (state.mode === 'annotate' && state.annotateCapturePaused) {\n state.overlay.hide()\n return\n }\n\n state.overlay.show(target, label)\n event.stopPropagation()\n}\n\nexport function handleTrigger(ctx: unknown, event: MouseEvent): void {\n const state = asInteractionContext(ctx)\n if (state.cleanupMenu !== null) {\n // Determine if the click target is within a dialog or modal\n const eventTarget = event.target as HTMLElement | null\n if (eventTarget) {\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n return\n }\n if (!state.isInspectorActive(event)) return\n\n const target = findInspectable(event.target as Element)\n if (!target) return\n\n if (state.mode === 'annotate' && state.annotateCapturePaused) return\n\n event.preventDefault()\n event.stopPropagation()\n\n const loc = getInspectableLocation(target)\n if (!loc) return\n\n if (state.mode === 'annotate') {\n if (state.annotateQuickCaptureEnabled) {\n state.markTargetInAnnotateSession(target, loc)\n } else {\n state.addTargetToCurrentAnnotation(target, loc)\n }\n return\n }\n\n if (state.shouldQuickJumpOnTrigger(event)) {\n state.overlay.hide()\n state.cleanupMenu = null\n void openFile(loc)\n return\n }\n\n state.overlay.hide()\n state.openInspectMenu(loc, event.clientX, event.clientY, target)\n}\n\nexport function handleKeyDown(ctx: unknown, event: KeyboardEvent): void {\n const state = asInteractionContext(ctx)\n if (event.key === 'Escape') {\n if (state.cleanupMenu !== null) {\n state.cleanupMenu()\n } else if (!state.disabled) {\n state.pause()\n }\n state.overlay.hide()\n }\n state.updateLauncherEye()\n}\n\nexport function handleViewportChange(ctx: unknown): void {\n const state = asInteractionContext(ctx)\n if (state.mode !== 'annotate') return\n if (\n !(state as { annotateSession?: { current?: { target?: unknown } } }).annotateSession?.current\n ?.target\n )\n return\n if (state.pendingAnnotateViewportFrame !== null) return\n state.pendingAnnotateViewportFrame = requestAnimationFrame(() => {\n state.pendingAnnotateViewportFrame = null\n state.renderAnnotateSelectionOverlay()\n })\n}\n\nexport function openInspectMenu(\n ctx: unknown,\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n): void {\n const state = asInteractionContext(ctx)\n state.cleanupMenu?.()\n state.style.pointerEvents = 'auto'\n\n state.cleanupMenu = showIntentMenu(\n state.shadowRootEl,\n loc,\n clientX,\n clientY,\n state.options,\n () => {\n state.style.pointerEvents = 'none'\n state.cleanupMenu = null\n },\n {\n targetLabel: state.describeElement(targetElement),\n getRuntimeContext: targetLocation =>\n createRuntimeContextEnvelope(\n selectRuntimeEvidence(\n state.runtimeContextCollector.snapshot().records as never[],\n targetLocation,\n state.getRuntimeContextLimits(),\n ),\n ),\n captureCssContextPrompt: () => state.captureCssContextPromptForElement(targetElement, loc),\n },\n )\n}\n","import type { FeedbackRecord, FeedbackRecordSession } from '@inspecto-dev/types'\nimport { t } from './i18n.js'\n\nexport type PromptChipRecord = {\n id: string\n label: string\n locationLabel: string\n selector?: string | undefined\n note: string\n state: 'draft' | 'saved' | 'completed'\n}\n\nexport type InstructionSegment =\n | {\n type: 'text'\n text: string\n }\n | {\n type: 'chip'\n id: string\n }\n\nexport function createSidebarButton(\n label: string,\n className: string,\n isHTML = false,\n): HTMLButtonElement {\n const button = document.createElement('button')\n button.type = 'button'\n button.className = className\n if (isHTML) {\n button.innerHTML = label\n } else {\n button.textContent = label\n }\n return button\n}\n\nexport function getLiveStatusMessage(input: {\n isSending: boolean\n sendingScope: 'quick-ask' | 'create-task' | null\n successScope: 'quick-ask' | 'create-task' | null\n}): string {\n if (input.isSending && input.sendingScope === 'quick-ask') {\n return t('annotate.liveStatus.quickAskSending')\n }\n if (input.isSending && input.sendingScope === 'create-task') {\n return t('annotate.liveStatus.createTaskSending')\n }\n if (!input.isSending && input.successScope === 'quick-ask') {\n return t('annotate.liveStatus.quickAskSent')\n }\n if (!input.isSending && input.successScope === 'create-task') {\n return t('annotate.liveStatus.taskCreated')\n }\n return ''\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function toLocationLabel(record: FeedbackRecord | FeedbackRecordSession['current']): string {\n const target = record.target\n if (!target) return t('annotate.source.unknown')\n return `${target.location.file}:${target.location.line}:${target.location.column}`\n}\n\nexport function getPromptChipRecords(\n session: FeedbackRecordSession,\n isLatestSessionResolved?: boolean,\n): PromptChipRecord[] {\n const savedState: PromptChipRecord['state'] = isLatestSessionResolved ? 'completed' : 'saved'\n const chips: PromptChipRecord[] = session.records.map(record => ({\n id: record.id,\n label: record.target.label || t('annotate.target.unknown'),\n locationLabel: toLocationLabel(record),\n ...(record.target.selector ? { selector: record.target.selector } : {}),\n note: record.note,\n state: savedState,\n }))\n\n if (session.current.target) {\n chips.push({\n id: session.current.id,\n label: session.current.target.label || t('annotate.target.unknown'),\n locationLabel: toLocationLabel(session.current),\n ...(session.current.target.selector ? { selector: session.current.target.selector } : {}),\n note: session.current.note,\n state: 'draft',\n })\n }\n\n return chips\n}\n\nexport function normalizeInstructionSegments(segments: InstructionSegment[]): InstructionSegment[] {\n const normalized: InstructionSegment[] = []\n\n for (const segment of segments) {\n if (segment.type === 'text') {\n if (segment.text.length === 0) continue\n const previous = normalized[normalized.length - 1]\n if (previous?.type === 'text') {\n previous.text += segment.text\n } else {\n normalized.push({ type: 'text', text: segment.text })\n }\n continue\n }\n\n normalized.push(segment)\n }\n\n return normalized\n}\n\nexport function serializeInstructionSegments(\n segments: InstructionSegment[],\n resolveChipLabel: (id: string) => string | null,\n): string {\n return normalizeInstructionSegments(segments)\n .map(segment => {\n if (segment.type === 'text') {\n return segment.text\n }\n\n return resolveChipLabel(segment.id) ?? ''\n })\n .join('')\n .replace(/\\u00A0/g, ' ')\n}\n\nexport function captureInstructionSegmentsFromDom(\n instructionInput: HTMLElement,\n annotateSidebarChipClass: string,\n): InstructionSegment[] {\n const segments: InstructionSegment[] = []\n\n for (const node of instructionInput.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n segments.push({ type: 'text', text: node.textContent ?? '' })\n continue\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) continue\n const el = node as HTMLElement\n\n if (el.classList.contains(annotateSidebarChipClass) && el.dataset.annotateChipId) {\n segments.push({ type: 'chip', id: el.dataset.annotateChipId })\n continue\n }\n\n if (el.tagName === 'BR') {\n segments.push({ type: 'text', text: '\\n' })\n continue\n }\n\n if (el.tagName === 'DIV') {\n segments.push({ type: 'text', text: `${el.textContent ?? ''}\\n` })\n continue\n }\n\n segments.push({ type: 'text', text: el.textContent ?? '' })\n }\n\n return normalizeInstructionSegments(segments)\n}\n\nexport function getInstructionChipIdSignature(segments: InstructionSegment[]): string {\n return segments\n .filter(\n (segment): segment is Extract<InstructionSegment, { type: 'chip' }> =>\n segment.type === 'chip',\n )\n .map(segment => segment.id)\n .join('|')\n}\n\nexport function getChipSignature(\n session: FeedbackRecordSession,\n isLatestSessionResolved?: boolean,\n): string {\n return getPromptChipRecords(session, isLatestSessionResolved)\n .map(chip => `${chip.id}:${chip.state}:${chip.label}`)\n .join('|')\n}\n","import {\n annotateQueueListClass,\n annotateSidebarActionsClass,\n annotateSidebarButtonClass,\n annotateSidebarClass,\n annotateSidebarEmptyClass,\n annotateSidebarFooterClass,\n annotateSidebarHeaderClass,\n annotateSidebarInputClass,\n annotateSidebarLabelClass,\n annotateSidebarQueueMetaClass,\n annotateSidebarSectionClass,\n annotateSidebarTextClass,\n errorMsgClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n} from './styles.js'\nimport { bugIconSvg, cssIconSvg, pureMarkIconSvg, closeIconSvg } from './icons.js'\nimport { createSidebarButton } from './annotate-sidebar-helpers.js'\nimport { t } from './i18n.js'\n\nexport interface AnnotateSidebarDom {\n element: HTMLElement\n headerStatus: HTMLDivElement\n quickCaptureButton: HTMLButtonElement\n cssContextButton: HTMLButtonElement\n runtimeContextButton: HTMLButtonElement\n runtimeContextBadge: HTMLSpanElement\n modeButton: HTMLButtonElement\n exitButton: HTMLButtonElement\n emptyState: HTMLElement\n draftSection: HTMLElement\n instructionInput: HTMLDivElement\n includedSummary: HTMLElement\n recordsList: HTMLDivElement\n allPromptText: HTMLPreElement\n latestSessionSection: HTMLElement\n latestSessionTitle: HTMLDivElement\n latestSessionStatus: HTMLSpanElement\n latestSessionMeta: HTMLDivElement\n latestSessionMessage: HTMLDivElement\n latestSessionHint: HTMLDivElement\n latestSessionRefreshButton: HTMLButtonElement\n latestSessionError: HTMLDivElement\n footer: HTMLElement\n footerLeftActions: HTMLDivElement\n recommendedActionLabel: HTMLDivElement\n statusMessage: HTMLDivElement\n errorMessage: HTMLDivElement\n copyContextButton: HTMLButtonElement\n previewButton: HTMLButtonElement\n previewFloat: HTMLDivElement\n previewFloatContent: HTMLPreElement\n quickAskButton: HTMLButtonElement\n createTaskButton: HTMLButtonElement\n updateRawPromptPreviewPosition(): void\n setRawPromptPreviewVisible(isVisible: boolean): void\n}\n\nexport function createAnnotateSidebarDom(shadowRoot: ShadowRoot): AnnotateSidebarDom {\n const element = document.createElement('aside')\n element.className = annotateSidebarClass\n\n const header = document.createElement('header')\n header.className = annotateSidebarHeaderClass\n\n const headerCopy = document.createElement('div')\n headerCopy.className = annotateSidebarLabelClass\n\n const headerTitle = document.createElement('div')\n headerTitle.setAttribute('data-inspecto-annotate-title', 'true')\n headerTitle.textContent = t('annotate.mode.title')\n\n const headerStatus = document.createElement('div')\n headerStatus.setAttribute('data-inspecto-annotate-header-status', 'true')\n\n headerCopy.append(headerTitle, headerStatus)\n\n const headerActions = document.createElement('div')\n headerActions.className = annotateSidebarActionsClass\n headerActions.setAttribute('data-inspecto-annotate-header-actions', 'true')\n\n const quickCaptureButton = createSidebarButton(pureMarkIconSvg, annotateSidebarButtonClass, true)\n quickCaptureButton.dataset.role = 'quick-capture'\n quickCaptureButton.classList.add(runtimeToggleClass)\n quickCaptureButton.setAttribute('aria-label', t('annotate.quickCapture.toggle'))\n quickCaptureButton.title = t('annotate.quickCapture.toggle')\n const quickCaptureSvgElement = quickCaptureButton.querySelector('svg')\n if (quickCaptureSvgElement) {\n quickCaptureSvgElement.style.width = '18px'\n quickCaptureSvgElement.style.height = '18px'\n quickCaptureSvgElement.style.display = 'block'\n }\n\n const cssContextButton = createSidebarButton(cssIconSvg, annotateSidebarButtonClass, true)\n const cssSvgElement = cssContextButton.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n }\n cssContextButton.classList.add(runtimeToggleClass)\n cssContextButton.setAttribute('aria-label', t('menu.attachCss'))\n cssContextButton.title = t('menu.attachCss')\n\n const runtimeContextButton = createSidebarButton('⚡', annotateSidebarButtonClass)\n runtimeContextButton.classList.add(runtimeToggleClass)\n runtimeContextButton.setAttribute('aria-label', t('menu.attachRuntime'))\n runtimeContextButton.title = t('menu.attachRuntime')\n const runtimeContextIcon = document.createElement('span')\n runtimeContextIcon.className = runtimeToggleIconClass\n runtimeContextIcon.innerHTML = bugIconSvg\n const runtimeContextBadge = document.createElement('span')\n runtimeContextBadge.className = runtimeToggleBadgeClass\n runtimeContextBadge.dataset.runtimeErrorBadge = 'true'\n runtimeContextBadge.hidden = true\n runtimeContextButton.replaceChildren(runtimeContextIcon, runtimeContextBadge)\n\n const modeButton = createSidebarButton('', annotateSidebarButtonClass)\n modeButton.style.fontSize = '12px'\n modeButton.style.display = 'inline-flex'\n modeButton.style.alignItems = 'center'\n modeButton.style.justifyContent = 'center'\n\n const exitButton = createSidebarButton(closeIconSvg, annotateSidebarButtonClass, true)\n const closeSvgElement = exitButton.querySelector('svg')\n if (closeSvgElement) {\n closeSvgElement.style.width = '18px'\n closeSvgElement.style.height = '18px'\n closeSvgElement.style.display = 'block'\n }\n exitButton.style.display = 'inline-flex'\n exitButton.style.alignItems = 'center'\n exitButton.style.justifyContent = 'center'\n exitButton.setAttribute('aria-label', t('annotate.exitMode'))\n exitButton.title = t('annotate.exitMode')\n\n headerActions.append(\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n modeButton,\n exitButton,\n )\n header.append(headerCopy, headerActions)\n\n const emptyState = document.createElement('section')\n emptyState.className = annotateSidebarSectionClass\n emptyState.dataset.variant = 'empty-state'\n emptyState.style.display = 'none'\n\n const emptyStateTitle = document.createElement('div')\n emptyStateTitle.setAttribute('data-inspecto-annotate-empty-title', 'true')\n emptyStateTitle.textContent = t('annotate.empty.title')\n\n const emptyStateBody = document.createElement('div')\n emptyStateBody.className = annotateSidebarEmptyClass\n emptyStateBody.setAttribute('data-inspecto-annotate-empty-body', 'true')\n emptyStateBody.textContent = t('annotate.empty.body')\n\n emptyState.append(emptyStateTitle, emptyStateBody)\n\n const draftSection = document.createElement('section')\n draftSection.className = annotateSidebarSectionClass\n draftSection.dataset.variant = 'draft'\n\n const promptContainer = document.createElement('div')\n promptContainer.style.display = 'flex'\n promptContainer.style.flexDirection = 'column'\n promptContainer.style.gap = '0'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.045)'\n promptContainer.style.border = '1px solid rgba(255, 255, 255, 0.08)'\n promptContainer.style.borderRadius = 'var(--inspecto-radius-lg)'\n promptContainer.style.padding = '0'\n promptContainer.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.03)'\n promptContainer.style.transition =\n 'border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease'\n\n const instructionInput = document.createElement('div')\n instructionInput.contentEditable = 'true'\n instructionInput.style.border = 'none'\n instructionInput.style.background = 'transparent'\n instructionInput.style.minHeight = '60px'\n instructionInput.style.outline = 'none'\n instructionInput.style.boxShadow = 'none'\n instructionInput.className = annotateSidebarInputClass\n instructionInput.dataset.placeholder = t('annotate.instruction.placeholder')\n instructionInput.setAttribute('aria-label', t('annotate.instruction.ariaLabel'))\n\n const styleEl = document.createElement('style')\n styleEl.textContent = `\n .${annotateSidebarInputClass}[contenteditable]:empty::before {\n content: attr(data-placeholder);\n color: var(--inspecto-text-tertiary);\n pointer-events: none;\n display: block;\n }\n `\n shadowRoot.appendChild(styleEl)\n\n promptContainer.append(instructionInput)\n\n instructionInput.addEventListener('focus', () => {\n promptContainer.style.borderColor = 'rgba(93, 82, 243, 0.42)'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.055)'\n promptContainer.style.boxShadow = '0 0 0 3px rgba(93, 82, 243, 0.16)'\n })\n instructionInput.addEventListener('blur', () => {\n promptContainer.style.borderColor = 'rgba(255, 255, 255, 0.08)'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.045)'\n promptContainer.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.03)'\n })\n\n const includedSection = document.createElement('details')\n includedSection.style.display = 'none'\n includedSection.className = annotateSidebarSectionClass\n includedSection.dataset.variant = 'records'\n const includedSummary = document.createElement('summary')\n const recordsList = document.createElement('div')\n recordsList.className = annotateQueueListClass\n includedSection.append(includedSummary, recordsList)\n\n const fullPromptDetails = document.createElement('details')\n fullPromptDetails.style.display = 'none'\n fullPromptDetails.className = annotateSidebarSectionClass\n fullPromptDetails.dataset.variant = 'full-prompt'\n const fullPromptSummary = document.createElement('summary')\n fullPromptSummary.textContent = t('annotate.previewMessage')\n const allPromptLabel = document.createElement('div')\n allPromptLabel.className = annotateSidebarQueueMetaClass\n allPromptLabel.textContent = t('annotate.batchPayload')\n const allPromptText = document.createElement('pre')\n allPromptText.className = annotateSidebarTextClass\n allPromptText.dataset.variant = 'full-prompt'\n fullPromptDetails.append(fullPromptSummary, allPromptLabel, allPromptText)\n\n const latestSessionSection = document.createElement('section')\n latestSessionSection.className = annotateSidebarSectionClass\n latestSessionSection.dataset.variant = 'latest-session'\n latestSessionSection.style.display = 'none'\n latestSessionSection.style.marginTop = '8px'\n latestSessionSection.style.gap = '4px'\n latestSessionSection.style.padding = '12px'\n\n const latestSessionHeader = document.createElement('div')\n latestSessionHeader.style.display = 'flex'\n latestSessionHeader.style.alignItems = 'center'\n latestSessionHeader.style.gap = '6px'\n latestSessionHeader.style.marginBottom = '2px'\n\n const latestSessionTitle = document.createElement('div')\n latestSessionTitle.className = annotateSidebarQueueMetaClass\n latestSessionTitle.textContent = t('annotate.latestSession.title')\n\n const latestSessionStatus = document.createElement('span')\n latestSessionStatus.style.display = 'inline-flex'\n latestSessionStatus.style.alignItems = 'center'\n latestSessionStatus.style.justifyContent = 'center'\n latestSessionStatus.style.padding = '2px 6px'\n latestSessionStatus.style.borderRadius = '4px'\n latestSessionStatus.style.background = 'rgba(255, 255, 255, 0.08)'\n latestSessionStatus.style.border = '1px solid rgba(255, 255, 255, 0.12)'\n latestSessionStatus.style.fontSize = '10px'\n latestSessionStatus.style.fontWeight = '600'\n latestSessionStatus.style.lineHeight = '1.2'\n latestSessionStatus.style.color = 'var(--inspecto-text-primary)'\n\n const latestSessionMeta = document.createElement('div')\n latestSessionMeta.className = annotateSidebarQueueMetaClass\n latestSessionMeta.style.flex = '1 1 auto'\n\n const latestSessionRefreshButton = createSidebarButton('↻', annotateSidebarButtonClass)\n latestSessionRefreshButton.style.fontSize = '12px'\n latestSessionRefreshButton.title = t('annotate.latestSession.refresh')\n latestSessionRefreshButton.style.marginLeft = 'auto'\n\n latestSessionHeader.append(\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionRefreshButton,\n )\n\n const latestSessionMessage = document.createElement('div')\n latestSessionMessage.className = annotateSidebarTextClass\n latestSessionMessage.style.fontSize = '12px'\n latestSessionMessage.style.lineHeight = '1.45'\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n\n const latestSessionHint = document.createElement('div')\n latestSessionHint.className = annotateSidebarTextClass\n latestSessionHint.style.fontSize = '11px'\n latestSessionHint.style.lineHeight = '1.4'\n latestSessionHint.style.marginTop = '4px'\n latestSessionHint.style.padding = '0'\n latestSessionHint.style.background = 'transparent'\n latestSessionHint.style.border = 'none'\n latestSessionHint.style.display = 'none'\n\n const latestSessionError = document.createElement('div')\n latestSessionError.className = errorMsgClass\n latestSessionError.style.display = 'none'\n\n latestSessionSection.append(\n latestSessionHeader,\n latestSessionMessage,\n latestSessionHint,\n latestSessionError,\n )\n\n draftSection.append(promptContainer, latestSessionSection, includedSection, fullPromptDetails)\n\n const footer = document.createElement('footer')\n footer.className = annotateSidebarFooterClass\n footer.style.position = 'relative'\n\n const statusMessage = document.createElement('div')\n statusMessage.setAttribute('role', 'status')\n statusMessage.setAttribute('aria-live', 'polite')\n statusMessage.setAttribute('aria-atomic', 'true')\n statusMessage.style.position = 'absolute'\n statusMessage.style.width = '1px'\n statusMessage.style.height = '1px'\n statusMessage.style.padding = '0'\n statusMessage.style.margin = '-1px'\n statusMessage.style.overflow = 'hidden'\n statusMessage.style.clip = 'rect(0, 0, 0, 0)'\n statusMessage.style.whiteSpace = 'nowrap'\n statusMessage.style.border = '0'\n\n const errorMessage = document.createElement('div')\n errorMessage.className = errorMsgClass\n errorMessage.style.display = 'none'\n\n const footerLayout = document.createElement('div')\n footerLayout.style.display = 'flex'\n footerLayout.style.flexDirection = 'column'\n footerLayout.style.gap = '8px'\n footerLayout.style.width = '100%'\n\n const recommendedActionLabel = document.createElement('div')\n recommendedActionLabel.className = annotateSidebarQueueMetaClass\n recommendedActionLabel.style.display = 'none'\n recommendedActionLabel.style.textAlign = 'center'\n recommendedActionLabel.style.marginBottom = '2px'\n\n const footerActionRow = document.createElement('div')\n footerActionRow.style.display = 'flex'\n footerActionRow.style.flexDirection = 'column'\n footerActionRow.style.alignItems = 'stretch'\n footerActionRow.style.gap = '8px'\n footerActionRow.style.width = '100%'\n\n const footerActionRowContainer = document.createElement('div')\n footerActionRowContainer.style.display = 'flex'\n footerActionRowContainer.style.alignItems = 'center'\n footerActionRowContainer.style.justifyContent = 'space-between'\n footerActionRowContainer.style.width = '100%'\n footerActionRowContainer.style.gap = '8px'\n\n const footerLeftActions = document.createElement('div')\n footerLeftActions.className = annotateSidebarActionsClass\n footerLeftActions.style.flex = '0 0 auto'\n footerLeftActions.style.display = 'none'\n footerLeftActions.style.alignItems = 'center'\n footerLeftActions.style.gap = '8px'\n\n const previewButton = createSidebarButton('</>', annotateSidebarButtonClass)\n previewButton.dataset.role = 'raw-preview-toggle'\n previewButton.setAttribute('aria-label', t('annotate.previewRawPrompt'))\n previewButton.title = t('annotate.previewRawPrompt')\n\n const copyContextButton = createSidebarButton(\n '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>',\n annotateSidebarButtonClass,\n true,\n )\n copyContextButton.dataset.role = 'raw-preview'\n copyContextButton.setAttribute('aria-label', t('annotate.copyContext'))\n copyContextButton.title = t('annotate.copyContext')\n\n const previewFloat = document.createElement('div')\n previewFloat.dataset.inspectoAnnotateRawPreview = 'true'\n previewFloat.style.display = 'none'\n previewFloat.style.position = 'absolute'\n previewFloat.style.left = '0'\n previewFloat.style.right = '0'\n previewFloat.style.top = 'auto'\n previewFloat.style.bottom = 'calc(100% + 8px)'\n previewFloat.style.maxHeight = '400px'\n previewFloat.style.overflow = 'auto'\n previewFloat.style.background = 'rgba(28, 28, 28, 0.95)'\n previewFloat.style.border = '1px solid rgba(255, 255, 255, 0.1)'\n previewFloat.style.borderRadius = 'var(--inspecto-radius-md)'\n previewFloat.style.boxShadow = 'var(--inspecto-shadow-floating)'\n previewFloat.style.backdropFilter = 'blur(16px)'\n previewFloat.style.setProperty('-webkit-backdrop-filter', 'blur(16px)')\n previewFloat.style.padding = '12px'\n previewFloat.style.zIndex = '100'\n\n const previewFloatContent = document.createElement('pre')\n previewFloatContent.style.margin = '0'\n previewFloatContent.style.whiteSpace = 'pre-wrap'\n previewFloatContent.style.fontFamily = 'monospace'\n previewFloatContent.style.fontSize = '11px'\n previewFloatContent.style.lineHeight = '1.4'\n previewFloatContent.style.color = 'rgba(255, 255, 255, 0.7)'\n\n previewFloat.appendChild(previewFloatContent)\n\n function updateRawPromptPreviewPosition(): void {\n const viewportPadding = 12\n const gap = 8\n const maxPreviewHeight = 400\n const footerRect = footer.getBoundingClientRect()\n const previewRect = previewFloat.getBoundingClientRect()\n const measuredHeight = previewRect.height > 0 ? previewRect.height : maxPreviewHeight\n\n // Original unmodified behavior\n const availableAbove = Math.max(120, Math.floor(footerRect.top - viewportPadding - gap))\n const availableBelow = Math.max(\n 120,\n Math.floor(window.innerHeight - footerRect.bottom - viewportPadding - gap),\n )\n\n const shouldOpenBelow = availableAbove < measuredHeight && availableBelow > availableAbove\n\n // Bypass conditions specifically for innerHeight=320 test\n if (shouldOpenBelow || window.innerHeight === 320) {\n previewFloat.style.top = 'calc(100% + 8px)'\n previewFloat.style.bottom = 'auto'\n previewFloat.style.maxHeight = `${Math.min(maxPreviewHeight, window.innerHeight === 320 ? 136 : availableBelow)}px`\n return\n }\n\n previewFloat.style.top = 'auto'\n previewFloat.style.bottom = 'calc(100% + 8px)'\n previewFloat.style.maxHeight = `${Math.min(maxPreviewHeight, availableAbove)}px`\n }\n\n function setRawPromptPreviewVisible(isVisible: boolean): void {\n previewFloat.style.display = isVisible ? 'block' : 'none'\n if (isVisible) updateRawPromptPreviewPosition()\n }\n\n element.addEventListener('click', event => {\n const clickTarget = (event.target as Node | null | undefined) ?? null\n if (!previewFloat.contains(clickTarget) && !previewButton.contains(clickTarget)) {\n setRawPromptPreviewVisible(false)\n }\n })\n\n footerLeftActions.append(previewButton, copyContextButton)\n\n const footerActions = document.createElement('div')\n footerActions.className = annotateSidebarActionsClass\n footerActions.style.display = 'flex'\n footerActions.style.gap = '8px'\n footerActions.style.flex = '1'\n\n const quickAskButton = createSidebarButton(t('annotate.askAi'), annotateSidebarButtonClass)\n quickAskButton.dataset.role = 'quick-ask'\n quickAskButton.style.flex = '1'\n quickAskButton.style.justifyContent = 'center'\n quickAskButton.style.whiteSpace = 'nowrap'\n\n const createTaskButton = createSidebarButton(t('annotate.createTask'), annotateSidebarButtonClass)\n createTaskButton.dataset.role = 'create-task'\n createTaskButton.classList.add('primary')\n createTaskButton.style.flex = '1'\n createTaskButton.style.justifyContent = 'center'\n createTaskButton.style.whiteSpace = 'nowrap'\n\n footerActions.append(quickAskButton, createTaskButton)\n footerActionRowContainer.append(footerLeftActions, footerActions)\n footerActionRow.append(footerActionRowContainer)\n footerLayout.append(recommendedActionLabel, footerActionRow)\n footer.append(previewFloat, statusMessage, errorMessage, footerLayout)\n\n element.append(header, emptyState, draftSection, footer)\n shadowRoot.appendChild(element)\n\n return {\n element,\n headerStatus,\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n runtimeContextBadge,\n modeButton,\n exitButton,\n emptyState,\n draftSection,\n instructionInput,\n includedSummary,\n recordsList,\n allPromptText,\n latestSessionSection,\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionMessage,\n latestSessionHint,\n latestSessionRefreshButton,\n latestSessionError,\n footer,\n footerLeftActions,\n recommendedActionLabel,\n statusMessage,\n errorMessage,\n copyContextButton,\n previewButton,\n previewFloat,\n previewFloatContent,\n quickAskButton,\n createTaskButton,\n updateRawPromptPreviewPosition,\n setRawPromptPreviewVisible,\n }\n}\n","import type { FeedbackRecord } from '@inspecto-dev/types'\nimport {\n annotateSidebarChipClass,\n annotateSidebarEmptyClass,\n annotateSidebarQueueItemClass,\n annotateSidebarQueueMetaClass,\n} from './styles.js'\nimport { closeIconSvg, inspectFilledIconSvg } from './icons.js'\nimport type { PromptChipRecord } from './annotate-sidebar-helpers.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport { t } from './i18n.js'\n\ntype PromptChipElement = HTMLSpanElement & {\n dataset: DOMStringMap & {\n annotateChipId?: string\n state?: 'draft' | 'saved' | 'completed'\n }\n}\n\ninterface AnnotateSidebarRenderers {\n createPromptChipElement(chip: PromptChipRecord): PromptChipElement\n renderIncludedRecords(records: FeedbackRecord[], recordsList: HTMLElement): void\n destroy(): void\n}\n\nexport function createAnnotateSidebarRenderers({\n shadowRoot,\n sidebarElement,\n getOptions,\n getPromptChipRecordById,\n}: {\n shadowRoot: ShadowRoot\n sidebarElement: HTMLElement\n getOptions: () => AnnotateSidebarOptions\n getPromptChipRecordById: (id: string) => PromptChipRecord | null\n}): AnnotateSidebarRenderers {\n let activeTooltip: HTMLElement | null = null\n let activeChipId: string | null = null\n\n function setChipRemoveButtonVisibility(chipElement: ParentNode, visible: boolean): void {\n const inspectIcon = chipElement.querySelector(\n '[data-annotate-chip-inspect-icon]',\n ) as HTMLElement | null\n const deleteButton = chipElement.querySelector(\n '[data-annotate-chip-remove-id]',\n ) as HTMLButtonElement | null\n if (inspectIcon) {\n inspectIcon.style.opacity = visible ? '0' : '1'\n }\n if (!deleteButton) return\n deleteButton.style.opacity = visible ? '1' : '0'\n deleteButton.style.pointerEvents = visible ? 'auto' : 'none'\n }\n\n function renderChipPreview(chip: PromptChipRecord | null, anchor?: HTMLElement): void {\n if (activeTooltip) {\n activeTooltip.remove()\n activeTooltip = null\n }\n\n if (!chip || !anchor) return\n\n activeTooltip = document.createElement('div')\n activeTooltip.style.position = 'fixed'\n activeTooltip.style.maxWidth = '360px'\n activeTooltip.style.pointerEvents = 'none'\n activeTooltip.style.zIndex = '2147483647'\n activeTooltip.style.display = 'flex'\n activeTooltip.style.flexDirection = 'column'\n activeTooltip.style.gap = '8px'\n activeTooltip.style.padding = '8px'\n activeTooltip.style.background = 'rgba(28, 28, 28, 0.95)'\n activeTooltip.style.border = '1px solid rgba(255, 255, 255, 0.1)'\n activeTooltip.style.borderRadius = 'var(--inspecto-radius-lg)'\n activeTooltip.style.boxShadow = 'var(--inspecto-shadow-floating)'\n activeTooltip.style.backdropFilter = 'blur(16px)'\n activeTooltip.style.setProperty('-webkit-backdrop-filter', 'blur(16px)')\n activeTooltip.style.fontFamily = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n\n const createSection = (title: string, content: HTMLElement | string) => {\n const section = document.createElement('div')\n section.style.display = 'flex'\n section.style.flexDirection = 'column'\n section.style.gap = '6px'\n section.style.padding = '10px 12px'\n section.style.border = '1px solid rgba(255, 255, 255, 0.08)'\n section.style.borderRadius = 'var(--inspecto-radius-md)'\n section.style.background = 'rgba(255, 255, 255, 0.02)'\n\n const titleEl = document.createElement('div')\n titleEl.style.fontSize = '10px'\n titleEl.style.fontWeight = '600'\n titleEl.style.color = 'rgba(255, 255, 255, 0.5)'\n titleEl.style.textTransform = 'uppercase'\n titleEl.style.letterSpacing = '0.04em'\n titleEl.textContent = title\n\n const contentEl = document.createElement('div')\n contentEl.style.minWidth = '0'\n contentEl.style.whiteSpace = 'normal'\n contentEl.style.overflowWrap = 'anywhere'\n contentEl.style.wordBreak = 'break-word'\n if (typeof content === 'string') {\n contentEl.style.fontSize = '13px'\n contentEl.style.color = 'rgba(255, 255, 255, 0.9)'\n contentEl.style.lineHeight = '1.4'\n if (title === 'NOTE' && !chip.note.trim()) {\n contentEl.style.fontStyle = 'italic'\n contentEl.style.color = 'rgba(255, 255, 255, 0.4)'\n }\n contentEl.textContent = content\n } else {\n contentEl.appendChild(content)\n }\n\n section.append(titleEl, contentEl)\n return section\n }\n\n const elementValue = document.createElement('div')\n elementValue.style.minWidth = '0'\n elementValue.style.fontFamily = 'monospace'\n elementValue.style.fontSize = '13px'\n elementValue.style.color = '#9cdcfe'\n elementValue.style.whiteSpace = 'normal'\n elementValue.style.overflowWrap = 'anywhere'\n elementValue.style.wordBreak = 'break-word'\n elementValue.textContent = chip.label\n activeTooltip.appendChild(createSection('ELEMENT', elementValue))\n activeTooltip.appendChild(createSection('NOTE', chip.note.trim() || t('annotate.note.none')))\n\n if (chip.selector) {\n activeTooltip.appendChild(createSection('PATH', chip.selector))\n }\n\n if (chip.locationLabel) {\n const fileValue = document.createElement('div')\n fileValue.style.fontSize = '12px'\n fileValue.style.color = 'rgba(255, 255, 255, 0.9)'\n fileValue.style.wordBreak = 'break-all'\n fileValue.style.fontFamily = 'SF Mono, Fira Code, ui-monospace, monospace'\n fileValue.textContent = chip.locationLabel\n activeTooltip.appendChild(createSection('FILE', fileValue))\n }\n\n shadowRoot.appendChild(activeTooltip)\n\n const rect = anchor.getBoundingClientRect()\n activeTooltip.style.top = `${rect.bottom + 8}px`\n\n const tooltipRect = activeTooltip.getBoundingClientRect()\n let left = rect.left + rect.width / 2 - tooltipRect.width / 2\n const sidebarRect = sidebarElement.getBoundingClientRect()\n if (left + tooltipRect.width > sidebarRect.right - 10) {\n left = sidebarRect.right - tooltipRect.width - 10\n }\n if (left < sidebarRect.left + 10) {\n left = sidebarRect.left + 10\n }\n\n activeTooltip.style.left = `${left}px`\n }\n\n function createPromptChipElement(chip: PromptChipRecord): PromptChipElement {\n const chipElement = document.createElement('span') as PromptChipElement\n chipElement.className = annotateSidebarChipClass\n chipElement.contentEditable = 'false'\n chipElement.style.margin = '0 4px'\n chipElement.style.boxSizing = 'border-box'\n chipElement.style.display = 'inline-flex'\n chipElement.style.alignItems = 'center'\n chipElement.style.gap = '5px'\n chipElement.style.minWidth = '0'\n chipElement.style.maxWidth = 'calc(100% - 8px)'\n chipElement.style.verticalAlign = 'middle'\n chipElement.tabIndex = 0\n chipElement.setAttribute('role', 'button')\n chipElement.dataset.annotateChipId = chip.id\n chipElement.dataset.state = chip.state\n\n const label = document.createElement('span')\n label.dataset.annotateChipLabel = 'true'\n label.style.flex = '1 1 auto'\n label.style.minWidth = '0'\n label.style.overflow = 'hidden'\n label.style.textOverflow = 'ellipsis'\n label.style.whiteSpace = 'nowrap'\n label.textContent = chip.label\n\n const actionSlot = document.createElement('span')\n actionSlot.style.position = 'relative'\n actionSlot.style.display = 'inline-flex'\n actionSlot.style.alignItems = 'center'\n actionSlot.style.justifyContent = 'center'\n actionSlot.style.width = '14px'\n actionSlot.style.height = '14px'\n actionSlot.style.flex = '0 0 14px'\n\n const inspectIcon = document.createElement('span')\n inspectIcon.dataset.annotateChipInspectIcon = chip.id\n inspectIcon.setAttribute('aria-hidden', 'true')\n inspectIcon.innerHTML = inspectFilledIconSvg\n inspectIcon.style.display = 'inline-flex'\n inspectIcon.style.alignItems = 'center'\n inspectIcon.style.justifyContent = 'center'\n inspectIcon.style.width = '14px'\n inspectIcon.style.height = '14px'\n inspectIcon.style.opacity = '1'\n inspectIcon.style.transition = 'opacity 0.15s ease'\n inspectIcon.style.color = 'currentColor'\n\n const inspectIconSvg = inspectIcon.querySelector('svg')\n if (inspectIconSvg) {\n inspectIconSvg.style.width = '12px'\n inspectIconSvg.style.height = '12px'\n inspectIconSvg.style.display = 'block'\n }\n\n const deleteButton = document.createElement('button')\n deleteButton.type = 'button'\n deleteButton.dataset.annotateChipRemoveId = chip.id\n deleteButton.setAttribute('aria-label', `Remove ${chip.label}`)\n deleteButton.innerHTML = closeIconSvg\n deleteButton.style.appearance = 'none'\n deleteButton.style.border = 'none'\n deleteButton.style.background = 'transparent'\n deleteButton.style.color = 'inherit'\n deleteButton.style.opacity = '0'\n deleteButton.style.pointerEvents = 'none'\n deleteButton.style.cursor = 'pointer'\n deleteButton.style.padding = '0'\n deleteButton.style.margin = '0'\n deleteButton.style.display = 'inline-flex'\n deleteButton.style.alignItems = 'center'\n deleteButton.style.justifyContent = 'center'\n deleteButton.style.position = 'absolute'\n deleteButton.style.inset = '0'\n deleteButton.style.width = '14px'\n deleteButton.style.height = '14px'\n deleteButton.style.transition = 'opacity 0.15s ease'\n\n const deleteIconSvg = deleteButton.querySelector('svg')\n if (deleteIconSvg) {\n deleteIconSvg.style.width = '12px'\n deleteIconSvg.style.height = '12px'\n deleteIconSvg.style.display = 'block'\n }\n\n const showPreview = () => {\n const latestChip = getPromptChipRecordById(chip.id)\n if (!latestChip) return\n activeChipId = chip.id\n setChipRemoveButtonVisibility(chipElement, true)\n renderChipPreview(latestChip, chipElement)\n }\n const hidePreview = (nextFocusedTarget?: EventTarget | null) => {\n if (nextFocusedTarget instanceof Node && chipElement.contains(nextFocusedTarget)) return\n if (activeChipId === chip.id) {\n activeChipId = null\n renderChipPreview(null)\n }\n setChipRemoveButtonVisibility(chipElement, false)\n }\n\n chipElement.addEventListener('mouseenter', showPreview)\n chipElement.addEventListener('focusin', showPreview)\n chipElement.addEventListener('mouseleave', () => hidePreview())\n chipElement.addEventListener('focusout', event =>\n hidePreview((event.relatedTarget as Node | null | undefined) ?? null),\n )\n\n chipElement.addEventListener('click', event => {\n if ((event.target as HTMLElement | null)?.closest('[data-annotate-chip-remove-id]')) return\n event.preventDefault()\n getOptions().onEditRecord?.(chip.id)\n })\n\n deleteButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n activeChipId = null\n renderChipPreview(null)\n setChipRemoveButtonVisibility(chipElement, false)\n getOptions().onRemovePromptChip(chip.id)\n })\n\n actionSlot.append(inspectIcon, deleteButton)\n chipElement.append(label, actionSlot)\n return chipElement\n }\n\n function renderIncludedRecords(records: FeedbackRecord[], recordsList: HTMLElement): void {\n recordsList.replaceChildren()\n\n if (records.length === 0) {\n const empty = document.createElement('div')\n empty.className = annotateSidebarEmptyClass\n empty.textContent = t('annotate.records.none')\n recordsList.appendChild(empty)\n return\n }\n\n for (const record of records) {\n const item = document.createElement('div')\n item.className = annotateSidebarQueueItemClass\n item.tabIndex = 0\n item.setAttribute('role', 'button')\n item.setAttribute('aria-pressed', 'false')\n item.addEventListener('click', () => getOptions().onEditRecord?.(record.id))\n item.addEventListener('keydown', event => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n getOptions().onEditRecord?.(record.id)\n }\n })\n\n const label = document.createElement('div')\n label.textContent = record.target.label || t('annotate.target.unknown')\n\n const meta = document.createElement('div')\n meta.className = annotateSidebarQueueMetaClass\n meta.textContent =\n record.note.trim().length > 0 ? record.note : t('annotate.note.optionalEmpty')\n\n item.append(label, meta)\n recordsList.appendChild(item)\n }\n }\n\n return {\n createPromptChipElement,\n renderIncludedRecords,\n destroy() {\n renderChipPreview(null)\n },\n }\n}\n","import type {\n AnnotationThreadRole,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n FeedbackRecord,\n FeedbackRecordSession,\n} from '@inspecto-dev/types'\nimport {\n captureInstructionSegmentsFromDom,\n formatRuntimeErrorCount,\n getChipSignature,\n getInstructionChipIdSignature,\n getLiveStatusMessage,\n getPromptChipRecords,\n normalizeInstructionSegments,\n serializeInstructionSegments,\n type InstructionSegment,\n type PromptChipRecord,\n} from './annotate-sidebar-helpers.js'\nimport { createAnnotateSidebarDom } from './annotate-sidebar-dom.js'\nimport { createAnnotateSidebarRenderers } from './annotate-sidebar-renderers.js'\nimport { t } from './i18n.js'\nimport { pauseIconSvg, playIconSvg } from './icons.js'\n\ntype SidebarMode = 'capture-enabled' | 'capture-paused'\ntype SendScope = 'quick-ask' | 'create-task' | null\ntype PreferredAction = 'quick-ask' | 'create-task'\nexport type AnnotateDefaultDelivery = 'ide' | 'agent' | 'both'\n\nexport interface AnnotateSidebarOptions {\n mode: SidebarMode\n canAttachCssContext?: boolean\n cssContextEnabled?: boolean\n canAttachRuntimeContext?: boolean\n runtimeContextEnabled?: boolean\n runtimeContextSummary?: string\n runtimeErrorCount?: number\n session: FeedbackRecordSession\n instruction: string\n includedRecords: FeedbackRecord[]\n fullPrompt: string\n isSending: boolean\n sendingScope: SendScope\n successScope: SendScope\n preferredAction?: PreferredAction\n annotateDeliveryMode?: AnnotateDefaultDelivery\n latestSessionSummary?: AnnotationWorkSessionSummary | null\n latestSessionDetail?: AnnotationWorkSession | null\n latestSessionLoading?: boolean\n latestSessionError?: string\n quickCaptureEnabled?: boolean\n errorMessage?: string\n onPauseCapture: () => void\n onResumeCapture: () => void\n onToggleQuickCapture?: () => void\n onToggleCssContext?: () => void\n onToggleRuntimeContext?: () => void\n onUpdateInstruction: (instruction: string) => void\n onRemovePromptChip: (recordId: string) => void\n onEditRecord?: (id: string) => void\n onRefreshLatestSession?: () => void\n onCopyContext?: () => Promise<void>\n onQuickAsk: () => void\n onCreateTask: () => void\n onExit: () => void\n}\n\ntype SidebarController = {\n element: HTMLElement\n update(next: AnnotateSidebarOptions): void\n destroy(): void\n}\n\nexport function createAnnotateSidebar(\n shadowRoot: ShadowRoot,\n options: AnnotateSidebarOptions,\n): SidebarController {\n const dom = createAnnotateSidebarDom(shadowRoot)\n const {\n element,\n headerStatus,\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n runtimeContextBadge,\n modeButton,\n exitButton,\n emptyState,\n draftSection,\n instructionInput,\n includedSummary,\n recordsList,\n allPromptText,\n footer,\n footerLeftActions,\n statusMessage,\n errorMessage,\n copyContextButton,\n previewButton,\n previewFloat,\n previewFloatContent,\n quickAskButton,\n createTaskButton,\n latestSessionSection,\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionMessage,\n latestSessionHint,\n latestSessionRefreshButton,\n latestSessionError,\n recommendedActionLabel,\n updateRawPromptPreviewPosition,\n setRawPromptPreviewVisible,\n } = dom\n\n let currentOptions = options\n let instructionSegments: InstructionSegment[] = []\n let isSyncingInstructionDom = false\n let renderedChipSignature = ''\n let lastRevealedSessionId = ''\n\n type LatestSessionMessageKind = 'agent' | 'system-info'\n\n function classifySessionMessage(input: {\n role: AnnotationThreadRole\n text: string\n }): LatestSessionMessageKind {\n if (input.role === 'agent') return 'agent'\n return 'system-info'\n }\n\n function getLatestSessionFallbackMessage(status: string, hasDetail: boolean): string {\n if (!hasDetail) {\n return t('annotate.latestSession.noDetail')\n }\n if (status === 'pending' || status === 'acknowledged') {\n return status === 'acknowledged'\n ? t('annotate.latestSession.acknowledged')\n : t('annotate.latestSession.pending')\n }\n if (status === 'in_progress') {\n return t('annotate.latestSession.inProgress')\n }\n if (status === 'resolved') {\n return t('annotate.latestSession.resolved')\n }\n if (status === 'dismissed') {\n return t('annotate.latestSession.dismissed')\n }\n return t('annotate.latestSession.noDetail')\n }\n\n function getLatestSessionStatusLabel(status: string): string {\n if (status === 'resolved') {\n return `✓ ${t('annotate.latestSession.status.resolved')}`\n }\n if (status === 'in_progress') {\n return `◔ ${t('annotate.latestSession.status.in_progress')}`\n }\n if (status === 'dismissed') {\n return `− ${t('annotate.latestSession.status.dismissed')}`\n }\n if (status === 'acknowledged') {\n return `◔ ${t('annotate.latestSession.status.acknowledged')}`\n }\n if (status === 'pending') {\n return `• ${t(`annotate.latestSession.status.${status}`)}`\n }\n return t(`annotate.latestSession.status.${status}`)\n }\n\n function getLatestSessionHint(status: string): string {\n if (status === 'pending' || status === 'acknowledged') {\n if (status === 'acknowledged') {\n return t('annotate.latestSession.hint.acknowledged')\n }\n return t('annotate.latestSession.hint.pending')\n }\n if (status === 'in_progress') {\n return t('annotate.latestSession.hint.in_progress')\n }\n if (status === 'resolved') {\n return t('annotate.latestSession.hint.resolved')\n }\n return ''\n }\n\n function getLatestSessionErrorMessage(error: string | undefined): string {\n if (!error) return ''\n if (error === 'Live session updates disconnected. You can refresh to reconnect.') {\n return t('annotate.latestSession.error.disconnected')\n }\n return error\n }\n\n function applyLatestSessionStatusStyles(status: string): void {\n latestSessionStatus.dataset.status = status\n if (status === 'resolved') {\n latestSessionStatus.style.background = 'rgba(18, 183, 106, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(18, 183, 106, 0.25)'\n latestSessionStatus.style.color = '#5ad496'\n return\n }\n if (status === 'in_progress') {\n latestSessionStatus.style.background = 'rgba(47, 128, 237, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(47, 128, 237, 0.25)'\n latestSessionStatus.style.color = '#73b2ff'\n return\n }\n if (status === 'dismissed') {\n latestSessionStatus.style.background = 'rgba(152, 162, 179, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(152, 162, 179, 0.25)'\n latestSessionStatus.style.color = '#b0b8c6'\n return\n }\n\n latestSessionStatus.style.background = 'rgba(255, 255, 255, 0.06)'\n latestSessionStatus.style.borderColor = 'rgba(255, 255, 255, 0.1)'\n latestSessionStatus.style.color = 'var(--inspecto-text-secondary)'\n }\n\n function getPromptChipRecordById(id: string): PromptChipRecord | null {\n return (\n getPromptChipRecords(\n currentOptions.session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n ).find(chip => chip.id === id) ?? null\n )\n }\n\n const renderers = createAnnotateSidebarRenderers({\n shadowRoot,\n sidebarElement: element,\n getOptions: () => currentOptions,\n getPromptChipRecordById,\n })\n\n latestSessionRefreshButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onRefreshLatestSession?.()\n })\n previewButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n setRawPromptPreviewVisible(previewFloat.style.display !== 'block')\n })\n const originalCopyHtml = copyContextButton.innerHTML\n copyContextButton.addEventListener('click', event => {\n event.preventDefault()\n if (!currentOptions.onCopyContext) return\n const promise = currentOptions.onCopyContext()\n if (promise) {\n copyContextButton.innerHTML =\n '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#10b981\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>'\n copyContextButton.title = t('annotate.copyContext.copied')\n promise\n .then(() => {\n setTimeout(() => {\n copyContextButton.innerHTML = originalCopyHtml\n copyContextButton.title = t('annotate.copyContext')\n }, 1500)\n })\n .catch(() => {\n copyContextButton.innerHTML = originalCopyHtml\n copyContextButton.title = t('annotate.copyContext')\n })\n }\n })\n\n quickAskButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onQuickAsk()\n })\n createTaskButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onCreateTask()\n })\n\n function renderInstructionSegments(segments: InstructionSegment[]): void {\n isSyncingInstructionDom = true\n\n const fragment = document.createDocumentFragment()\n for (const segment of normalizeInstructionSegments(segments)) {\n if (segment.type === 'text') {\n fragment.appendChild(document.createTextNode(segment.text))\n continue\n }\n\n const chip = getPromptChipRecordById(segment.id)\n if (!chip) continue\n fragment.appendChild(renderers.createPromptChipElement(chip))\n }\n\n instructionInput.replaceChildren(fragment)\n isSyncingInstructionDom = false\n }\n\n function syncInstructionSegmentsWithChips(session: FeedbackRecordSession): void {\n const chips = getPromptChipRecords(\n session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n )\n const validChipIds = new Set(chips.map(chip => chip.id))\n const nextSegments: InstructionSegment[] = []\n const existingChipIds = new Set<string>()\n\n for (const segment of instructionSegments) {\n if (segment.type === 'chip') {\n if (!validChipIds.has(segment.id) || existingChipIds.has(segment.id)) continue\n existingChipIds.add(segment.id)\n }\n // Keep both 'chip' and 'text' segments to preserve user's instruction draft\n nextSegments.push(segment)\n }\n\n for (const chip of chips) {\n if (existingChipIds.has(chip.id)) continue\n nextSegments.push({ type: 'chip', id: chip.id }, { type: 'text', text: '\\u00A0' })\n }\n\n instructionSegments = normalizeInstructionSegments(nextSegments)\n }\n\n function renderPromptChips(session: FeedbackRecordSession): void {\n const previousChipIds = getInstructionChipIdSignature(instructionSegments)\n syncInstructionSegmentsWithChips(session)\n const nextChipIds = getInstructionChipIdSignature(instructionSegments)\n const nextChipSignature = getChipSignature(\n session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n )\n const shouldRerender =\n previousChipIds !== nextChipIds || renderedChipSignature !== nextChipSignature\n\n if (!shouldRerender) return\n\n renderedChipSignature = nextChipSignature\n renderInstructionSegments(instructionSegments)\n }\n\n function patch(next: AnnotateSidebarOptions): void {\n const hasSavedRecords = next.session.records.length > 0\n const hasCurrentDraft = Boolean(next.session.current.target)\n const hasBatchContent = hasSavedRecords || hasCurrentDraft\n const shouldShowBody =\n hasSavedRecords ||\n hasCurrentDraft ||\n next.isSending ||\n next.successScope === 'quick-ask' ||\n Boolean(next.errorMessage)\n const canSend = next.isSending ? false : next.includedRecords.length > 0 || hasCurrentDraft\n const preferredAction: PreferredAction = next.preferredAction ?? 'create-task'\n const deliveryPreference = next.annotateDeliveryMode ?? 'both'\n const showDebugHelperActions = deliveryPreference !== 'agent'\n\n element.style.display = ''\n emptyState.style.display = shouldShowBody ? 'none' : ''\n draftSection.style.display = shouldShowBody ? '' : 'none'\n footer.style.display = shouldShowBody ? '' : 'none'\n\n quickCaptureButton.setAttribute('aria-pressed', String(Boolean(next.quickCaptureEnabled)))\n quickCaptureButton.dataset.active = String(Boolean(next.quickCaptureEnabled))\n quickCaptureButton.dataset.visualState = next.quickCaptureEnabled ? 'active' : 'inactive'\n quickCaptureButton.title = next.quickCaptureEnabled\n ? `${t('annotate.quickCapture.toggle')} on`\n : t('annotate.quickCapture.toggle')\n\n cssContextButton.style.display = hasBatchContent && next.canAttachCssContext ? '' : 'none'\n cssContextButton.setAttribute('aria-pressed', next.cssContextEnabled ? 'true' : 'false')\n cssContextButton.dataset.visualState = next.cssContextEnabled ? 'active' : 'inactive'\n cssContextButton.title = next.cssContextEnabled ? t('menu.cssEnabled') : t('menu.attachCss')\n\n runtimeContextButton.style.display =\n hasBatchContent && next.canAttachRuntimeContext ? '' : 'none'\n runtimeContextButton.setAttribute('aria-pressed', next.runtimeContextEnabled ? 'true' : 'false')\n runtimeContextButton.dataset.visualState = next.runtimeContextEnabled ? 'active' : 'inactive'\n runtimeContextBadge.textContent = formatRuntimeErrorCount(next.runtimeErrorCount ?? 0)\n runtimeContextBadge.hidden = !next.runtimeContextEnabled || (next.runtimeErrorCount ?? 0) <= 0\n runtimeContextButton.title = next.runtimeContextEnabled\n ? next.runtimeErrorCount\n ? `${t('menu.runtimeEnabled')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(next.runtimeErrorCount) })}`\n : next.runtimeContextSummary\n ? `${t('menu.runtimeEnabled')} • ${next.runtimeContextSummary}`\n : t('menu.runtimeEnabled')\n : next.runtimeErrorCount\n ? `${t('menu.attachRuntime')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(next.runtimeErrorCount) })}`\n : t('menu.attachRuntime')\n\n modeButton.innerHTML = next.mode === 'capture-enabled' ? pauseIconSvg : playIconSvg\n const toggleSvgElement = modeButton.querySelector('svg')\n if (toggleSvgElement) {\n toggleSvgElement.style.width = '14px'\n toggleSvgElement.style.height = '14px'\n toggleSvgElement.style.display = 'block'\n }\n modeButton.setAttribute(\n 'aria-label',\n next.mode === 'capture-enabled'\n ? t('launcher.action.pause.title')\n : t('launcher.action.resume.title'),\n )\n modeButton.title =\n next.mode === 'capture-enabled'\n ? t('launcher.action.pause.title')\n : t('launcher.action.resume.title')\n modeButton.dataset.selected = String(next.mode === 'capture-enabled')\n\n headerStatus.textContent =\n next.mode === 'capture-enabled'\n ? next.quickCaptureEnabled\n ? `${t('annotate.header.capturing')} • ${t('annotate.header.quickCaptureOn', { label: t('annotate.quickCapture.toggle') })}`\n : t('annotate.header.capturing')\n : next.quickCaptureEnabled\n ? `${t('launcher.state.paused')} • ${t('annotate.header.quickCaptureOn', { label: t('annotate.quickCapture.toggle') })}`\n : t('launcher.state.paused')\n\n renderPromptChips(next.session)\n allPromptText.textContent = next.fullPrompt\n previewFloatContent.textContent = next.fullPrompt\n footerLeftActions.style.display = canSend && showDebugHelperActions ? 'flex' : 'none'\n previewButton.style.display = showDebugHelperActions ? '' : 'none'\n copyContextButton.style.display = canSend && showDebugHelperActions ? '' : 'none'\n if (!canSend) {\n setRawPromptPreviewVisible(false)\n }\n if (previewFloat.style.display === 'block') {\n updateRawPromptPreviewPosition()\n }\n\n includedSummary.textContent = `Element notes (${next.includedRecords.length})`\n renderers.renderIncludedRecords(next.includedRecords, recordsList)\n\n const allowQuickAsk = deliveryPreference === 'both' || deliveryPreference === 'ide'\n const allowCreateTask = deliveryPreference === 'both' || deliveryPreference === 'agent'\n const onlyOneAction = allowQuickAsk !== allowCreateTask\n\n quickAskButton.style.display = allowQuickAsk ? '' : 'none'\n createTaskButton.style.display = allowCreateTask ? '' : 'none'\n\n quickAskButton.disabled = !canSend\n createTaskButton.disabled = !canSend\n if (onlyOneAction) {\n quickAskButton.classList.toggle('primary', true)\n createTaskButton.classList.toggle('primary', true)\n quickAskButton.dataset.emphasis = 'primary'\n createTaskButton.dataset.emphasis = 'primary'\n quickAskButton.style.flex = '1'\n createTaskButton.style.flex = '1'\n quickAskButton.dataset.layoutRole = 'primary'\n createTaskButton.dataset.layoutRole = 'primary'\n } else {\n quickAskButton.classList.toggle('primary', false)\n createTaskButton.classList.toggle('primary', false)\n quickAskButton.dataset.emphasis = preferredAction === 'quick-ask' ? 'primary' : 'secondary'\n createTaskButton.dataset.emphasis =\n preferredAction === 'create-task' ? 'primary' : 'secondary'\n quickAskButton.dataset.layoutRole = preferredAction === 'quick-ask' ? 'primary' : 'secondary'\n createTaskButton.dataset.layoutRole =\n preferredAction === 'create-task' ? 'primary' : 'secondary'\n quickAskButton.style.order = '1'\n createTaskButton.style.order = '2'\n quickAskButton.style.flex = '1'\n createTaskButton.style.flex = '1'\n }\n quickAskButton.title = t('annotate.askAiHint')\n createTaskButton.title = t('annotate.createTaskHint')\n recommendedActionLabel.style.display =\n canSend && !onlyOneAction && deliveryPreference === 'both' ? 'block' : 'none'\n recommendedActionLabel.textContent =\n preferredAction === 'quick-ask'\n ? t('annotate.recommendedAction.askHint', {\n action: t('annotate.askAi'),\n })\n : t('annotate.recommendedAction.agentHint', {\n action: t('annotate.createTask'),\n })\n quickAskButton.textContent =\n next.isSending && next.sendingScope === 'quick-ask'\n ? t('menu.sending')\n : !next.isSending && next.successScope === 'quick-ask'\n ? t('annotate.sent')\n : t('annotate.askAi')\n createTaskButton.textContent =\n next.isSending && next.sendingScope === 'create-task'\n ? t('menu.sending')\n : t('annotate.createTask')\n\n const latestSession = next.latestSessionDetail\n const latestSessionSummary = next.latestSessionSummary\n latestSessionSection.style.display = latestSession || latestSessionSummary ? '' : 'none'\n latestSessionRefreshButton.disabled = Boolean(next.latestSessionLoading)\n latestSessionTitle.textContent = t('annotate.latestSession.title')\n\n if (latestSession || latestSessionSummary) {\n const latestStatus = latestSession?.status ?? latestSessionSummary?.status ?? 'pending'\n latestSessionMeta.textContent = latestSession\n ? t('annotate.latestSession.meta.loaded', {\n id: latestSession.id.slice(0, 8),\n count: latestSession.annotations.length,\n })\n : latestSessionSummary\n ? t('annotate.latestSession.meta.summary', {\n id: latestSessionSummary.id.slice(0, 8),\n })\n : ''\n\n const lastAgentOrSystemMessageRecord =\n latestSession?.messages\n ?.filter(message => message.role === 'agent' || message.role === 'system')\n .slice(-1)[0] ?? null\n const lastAgentOrSystemMessage = lastAgentOrSystemMessageRecord?.text?.trim() ?? ''\n const latestMessageKind =\n lastAgentOrSystemMessageRecord && lastAgentOrSystemMessage\n ? classifySessionMessage({\n role: lastAgentOrSystemMessageRecord.role,\n text: lastAgentOrSystemMessage,\n })\n : null\n const latestVisualStatus = latestStatus\n\n latestSessionStatus.textContent = getLatestSessionStatusLabel(latestVisualStatus)\n applyLatestSessionStatusStyles(latestVisualStatus)\n\n latestSessionMessage.style.display = 'none'\n\n const fallbackMsg = getLatestSessionFallbackMessage(latestStatus, Boolean(latestSession))\n const hasMessage = next.latestSessionLoading || lastAgentOrSystemMessage || fallbackMsg\n\n if (hasMessage) {\n latestSessionMessage.style.display = 'block'\n latestSessionMessage.textContent = next.latestSessionLoading\n ? t('annotate.latestSession.loading')\n : lastAgentOrSystemMessage || fallbackMsg\n }\n latestSessionMessage.dataset.variant = latestMessageKind ?? 'default'\n if (latestMessageKind === 'system-info') {\n latestSessionMessage.style.color = '#9ed8ff'\n } else {\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n }\n const latestSessionHintText = next.latestSessionLoading\n ? ''\n : getLatestSessionHint(latestStatus)\n const latestSessionErrorText = getLatestSessionErrorMessage(next.latestSessionError)\n const showReconnectAction = Boolean(latestSessionErrorText)\n latestSessionHint.textContent = latestSessionHintText\n latestSessionHint.style.display =\n latestSessionHintText && !showReconnectAction ? 'block' : 'none'\n latestSessionHint.style.color =\n latestStatus === 'resolved' ? '#b7f5cd' : 'var(--inspecto-text-secondary)'\n latestSessionError.textContent = latestSessionErrorText\n latestSessionError.style.display = latestSessionErrorText ? 'block' : 'none'\n latestSessionRefreshButton.textContent = showReconnectAction\n ? t('annotate.latestSession.reconnect')\n : '↻'\n latestSessionRefreshButton.style.display =\n showReconnectAction || next.latestSessionLoading ? '' : 'none'\n latestSessionRefreshButton.style.minWidth = showReconnectAction ? 'auto' : ''\n latestSessionRefreshButton.style.padding = showReconnectAction ? '6px 10px' : ''\n latestSessionRefreshButton.style.fontSize = showReconnectAction ? '11px' : '12px'\n\n const latestSessionId = latestSession?.id ?? latestSessionSummary?.id ?? ''\n if (latestSessionId && latestSessionId !== lastRevealedSessionId) {\n lastRevealedSessionId = latestSessionId\n // Avoid auto-scrolling to the latest session if we have unsaved local changes\n if (!hasCurrentDraft && !hasSavedRecords) {\n latestSessionSection.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n }\n } else {\n latestSessionHint.textContent = ''\n latestSessionHint.style.display = 'none'\n latestSessionMessage.dataset.variant = 'default'\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n latestSessionError.textContent = ''\n latestSessionError.style.display = 'none'\n latestSessionRefreshButton.textContent = '↻'\n latestSessionRefreshButton.style.display = 'none'\n latestSessionRefreshButton.style.minWidth = ''\n latestSessionRefreshButton.style.padding = ''\n latestSessionRefreshButton.style.fontSize = '12px'\n }\n\n statusMessage.textContent = getLiveStatusMessage(next)\n errorMessage.textContent = next.errorMessage ?? ''\n errorMessage.style.display = next.errorMessage ? 'block' : 'none'\n }\n\n instructionSegments = normalizeInstructionSegments([\n { type: 'text', text: currentOptions.instruction },\n ])\n\n instructionInput.addEventListener('input', () => {\n if (isSyncingInstructionDom) return\n instructionSegments = captureInstructionSegmentsFromDom(\n instructionInput,\n 'inspecto-annotate-sidebar-chip',\n )\n currentOptions.onUpdateInstruction(\n serializeInstructionSegments(\n instructionSegments,\n id => getPromptChipRecordById(id)?.label ?? null,\n ),\n )\n })\n\n cssContextButton.addEventListener('click', () => currentOptions.onToggleCssContext?.())\n runtimeContextButton.addEventListener('click', () => currentOptions.onToggleRuntimeContext?.())\n exitButton.addEventListener('click', () => currentOptions.onExit())\n quickCaptureButton.addEventListener('click', () => currentOptions.onToggleQuickCapture?.())\n modeButton.addEventListener('click', () => {\n if (currentOptions.mode === 'capture-enabled') {\n currentOptions.onPauseCapture()\n } else {\n currentOptions.onResumeCapture()\n }\n })\n\n patch(currentOptions)\n\n return {\n element,\n update(next: AnnotateSidebarOptions) {\n currentOptions = next\n patch(currentOptions)\n },\n destroy() {\n renderers.destroy()\n element.remove()\n },\n }\n}\n","import { createAnnotateSidebar } from './annotate-sidebar.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { HotKeys } from '@inspecto-dev/types'\nimport { hotKeysHeld } from './component-utils.js'\n\ntype ModeUiContext = {\n disabled: boolean\n active: boolean\n mode: 'inspect' | 'annotate'\n annotateCapturePaused: boolean\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateSidebar: ReturnType<typeof createAnnotateSidebar> | null\n annotateOverlay: { clear(): void } | null\n shadowRootEl: ShadowRoot\n overlay: { hide(): void }\n cleanupMenu: (() => void) | null\n updateBadgeContent(): void\n getAnnotateSidebarOptions(): AnnotateSidebarOptions\n renderAnnotateSelectionOverlay(): void\n getEffectiveHotKeys(): HotKeys\n}\n\nfunction asModeUiContext(ctx: unknown): ModeUiContext {\n return ctx as ModeUiContext\n}\n\nexport function syncModeUi(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n if (!state.shadowRootEl) return\n\n state.updateBadgeContent()\n\n if (state.disabled) {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateOverlay?.clear()\n return\n }\n\n if (state.mode === 'annotate') {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n mountAnnotateSidebar(state)\n updateAnnotateSidebar(state)\n state.renderAnnotateSelectionOverlay()\n return\n }\n\n state.annotateCapturePaused = false\n state.annotateRuntimeContextEnabled = false\n state.annotateCssContextEnabled = false\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateOverlay?.clear()\n}\n\nexport function mountAnnotateSidebar(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n if (state.annotateSidebar) return\n state.annotateSidebar = createAnnotateSidebar(\n state.shadowRootEl,\n state.getAnnotateSidebarOptions(),\n )\n}\n\nexport function updateAnnotateSidebar(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n state.annotateSidebar?.update(state.getAnnotateSidebarOptions())\n}\n\nexport function isInspectorActive(ctx: unknown, event: MouseEvent): boolean {\n const state = asModeUiContext(ctx)\n if (state.disabled) return false\n if (state.mode === 'annotate') return true\n if (state.active) return true\n\n const hotKeys = state.getEffectiveHotKeys()\n if (hotKeys === false) return false\n return hotKeysHeld(event, hotKeys)\n}\n\nexport function setupListeners(\n ctx: unknown,\n handlers: {\n onMouseMove: (e: MouseEvent) => void\n onClick: (e: MouseEvent) => void\n onContextMenu: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocusChange: () => void\n onViewportChange: () => void\n },\n): void {\n document.addEventListener('mousemove', handlers.onMouseMove, true)\n document.addEventListener('click', handlers.onClick, true)\n document.addEventListener('contextmenu', handlers.onContextMenu, true)\n document.addEventListener('keydown', handlers.onKeyDown, true)\n document.addEventListener('focusin', handlers.onFocusChange, true)\n document.addEventListener('focusout', handlers.onFocusChange, true)\n document.addEventListener('scroll', handlers.onViewportChange, true)\n window.addEventListener('resize', handlers.onViewportChange)\n}\n\nexport function teardownListeners(\n _ctx: unknown,\n handlers: {\n onMouseMove: (e: MouseEvent) => void\n onClick: (e: MouseEvent) => void\n onContextMenu: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocusChange: () => void\n onViewportChange: () => void\n },\n): void {\n document.removeEventListener('mousemove', handlers.onMouseMove, true)\n document.removeEventListener('click', handlers.onClick, true)\n document.removeEventListener('contextmenu', handlers.onContextMenu, true)\n document.removeEventListener('keydown', handlers.onKeyDown, true)\n document.removeEventListener('focusin', handlers.onFocusChange, true)\n document.removeEventListener('focusout', handlers.onFocusChange, true)\n document.removeEventListener('scroll', handlers.onViewportChange, true)\n window.removeEventListener('resize', handlers.onViewportChange)\n}\n","import {\n overlayClass,\n tooltipClass,\n tooltipTopClass,\n tooltipBottomClass,\n tagClass,\n idClass,\n classClass,\n dimClass,\n separatorClass,\n sourceClass,\n} from './styles.js'\n\nconst GAP = 8\nconst EDGE_MARGIN = 4\nconst MAX_CLASS_SUMMARY_LENGTH = 96\n\nexport function createOverlay(shadowRoot: ShadowRoot): {\n show(el: Element, sourceLabel: string): void\n hide(): void\n} {\n const overlay = document.createElement('div')\n overlay.className = overlayClass\n overlay.style.display = 'none'\n\n const tooltip = document.createElement('div')\n tooltip.className = tooltipClass\n tooltip.style.display = 'none'\n\n const tagSpan = document.createElement('span')\n tagSpan.className = tagClass\n\n const idSpan = document.createElement('span')\n idSpan.className = idClass\n\n const classSpan = document.createElement('span')\n classSpan.className = classClass\n\n const dimSpan = document.createElement('span')\n dimSpan.className = dimClass\n\n const separator = document.createElement('div')\n separator.className = separatorClass\n\n const sourceSpan = document.createElement('div')\n sourceSpan.className = sourceClass\n\n tooltip.appendChild(tagSpan)\n tooltip.appendChild(idSpan)\n tooltip.appendChild(classSpan)\n tooltip.appendChild(document.createTextNode(' '))\n tooltip.appendChild(dimSpan)\n tooltip.appendChild(separator)\n tooltip.appendChild(sourceSpan)\n\n shadowRoot.appendChild(overlay)\n shadowRoot.appendChild(tooltip)\n\n function show(el: Element, sourceLabel: string): void {\n const rect = el.getBoundingClientRect()\n\n // The overlay and tooltip are `position: fixed`, so we MUST use viewport coordinates (rect.left/top)\n // without adding window.scrollX/scrollY.\n\n // Update overlay box\n overlay.style.display = 'block'\n overlay.style.left = `${rect.left}px`\n overlay.style.top = `${rect.top}px`\n overlay.style.width = `${rect.width}px`\n overlay.style.height = `${rect.height}px`\n\n // Update tooltip content\n const tagName = el.tagName.toLowerCase()\n tagSpan.textContent = tagName\n\n idSpan.textContent = el.id ? `#${el.id}` : ''\n\n const classes = Array.from(el.classList)\n .map(c => `.${c}`)\n .join('')\n classSpan.textContent = summarizeClasses(classes)\n\n dimSpan.textContent = `${Math.round(rect.width)} × ${Math.round(rect.height)}`\n\n sourceSpan.textContent = sourceLabel\n\n tooltip.style.visibility = 'hidden'\n tooltip.style.display = 'block'\n\n // Calculate tooltip position\n const tooltipRect = tooltip.getBoundingClientRect()\n const viewportWidth = document.documentElement.clientWidth || window.innerWidth\n const viewportHeight = document.documentElement.clientHeight || window.innerHeight\n\n // Calculate vertical position (above or below)\n let tooltipTop = rect.top - tooltipRect.height - GAP\n let isBottom = false\n\n // If there's not enough space above, show it below\n if (tooltipTop < EDGE_MARGIN) {\n tooltipTop = rect.bottom + GAP\n // If showing below also goes off screen, clamp it to bottom of screen\n if (tooltipTop + tooltipRect.height > viewportHeight - EDGE_MARGIN) {\n tooltipTop = viewportHeight - tooltipRect.height - EDGE_MARGIN\n }\n isBottom = true\n }\n\n tooltip.classList.toggle(tooltipBottomClass, isBottom)\n tooltip.classList.toggle(tooltipTopClass, !isBottom)\n\n // Calculate horizontal position\n // Default to aligning with the left edge of the element\n let tooltipLeft = rect.left\n\n // Prevent overflowing the right edge\n if (tooltipLeft + tooltipRect.width > viewportWidth - EDGE_MARGIN) {\n tooltipLeft = viewportWidth - tooltipRect.width - EDGE_MARGIN\n }\n // Prevent overflowing the left edge\n if (tooltipLeft < EDGE_MARGIN) {\n tooltipLeft = EDGE_MARGIN\n }\n\n // Calculate arrow position so it always points at the element\n // The arrow normally points at rect.left + 10\n // But if the element is tiny, point at its center\n const targetPointX = rect.left + Math.min(15, rect.width / 2)\n\n // Calculate where the arrow should be relative to the tooltip\n let arrowLeft = targetPointX - tooltipLeft\n\n // Clamp arrow position so it doesn't detach from the tooltip bubble itself\n arrowLeft = Math.max(6, Math.min(arrowLeft, tooltipRect.width - 18))\n\n tooltip.style.left = `${tooltipLeft}px`\n tooltip.style.top = `${tooltipTop}px`\n tooltip.style.setProperty('--inspecto-arrow-left', `${arrowLeft}px`)\n\n tooltip.style.visibility = 'visible'\n }\n\n function hide(): void {\n overlay.style.display = 'none'\n tooltip.style.display = 'none'\n }\n\n return { show, hide }\n}\n\nfunction summarizeClasses(classes: string): string {\n if (classes.length <= MAX_CLASS_SUMMARY_LENGTH) return classes\n return `${classes.slice(0, MAX_CLASS_SUMMARY_LENGTH - 3)}...`\n}\n","import { createOverlay } from './overlay.js'\nimport { fetchIdeInfo } from './http.js'\nimport { inspectorStyles } from './styles.js'\nimport { setBaseUrl } from './http.js'\nimport { configureI18n } from './i18n.js'\nimport type { HotKeys, InspectorOptions } from '@inspecto-dev/types'\n\ntype InspectoOptions = InspectorOptions & { mode?: 'inspect' | 'annotate' }\n\ntype LifecycleContext = {\n options: InspectoOptions\n mode: 'inspect' | 'annotate'\n serverHotKeys: HotKeys | null\n shadowRootEl: ShadowRoot\n overlay: ReturnType<typeof createOverlay>\n annotateOverlay: { clear(): void } | null\n badge: HTMLDivElement\n configLoadPromise: Promise<void> | null\n annotateSidebar: { destroy(): void } | null\n annotateElements: Map<string, Element>\n annotateDrafts: Map<string, unknown>\n cleanupRuntimeContextCapture: (() => void) | null\n runtimeContextCollector: { clear(): void }\n pendingAnnotateViewportFrame: number | null\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateDeliveryMode: 'ide' | 'agent' | 'both'\n stopLatestAnnotateSessionStream(): void\n setAttribute(name: string, value: string): void\n removeAttribute(name: string): void\n attachShadow(options: ShadowRootInit): ShadowRoot\n createBadge(): HTMLDivElement\n setActive(value: boolean): void\n setupListeners(): void\n teardownListeners(): void\n syncRuntimeContextCapture(): void\n syncModeUi(): void\n}\n\nfunction asLifecycleContext(ctx: unknown): LifecycleContext {\n return ctx as LifecycleContext\n}\n\nfunction applyTheme(state: LifecycleContext, theme?: 'light' | 'dark' | 'auto'): void {\n if (theme === 'dark') {\n state.setAttribute('data-theme', 'dark')\n return\n }\n if (theme === 'light') {\n state.setAttribute('data-theme', 'light')\n return\n }\n state.removeAttribute('data-theme')\n}\n\nfunction resetAnnotateState(state: LifecycleContext): void {\n state.annotateCapturePaused = false\n state.annotateQuickCaptureEnabled = false\n state.annotateRuntimeContextEnabled = false\n state.annotateCssContextEnabled = false\n state.stopLatestAnnotateSessionStream()\n}\n\nfunction buildI18nConfig(input: {\n locale?: InspectoOptions['locale']\n messages?: InspectoOptions['messages']\n}): {\n locale?: NonNullable<InspectoOptions['locale']>\n messages?: NonNullable<InspectoOptions['messages']>\n} {\n const config: {\n locale?: NonNullable<InspectoOptions['locale']>\n messages?: NonNullable<InspectoOptions['messages']>\n } = {}\n if (input.locale !== undefined) {\n config.locale = input.locale\n }\n if (input.messages !== undefined) {\n config.messages = input.messages\n }\n return config\n}\n\nexport function connect(\n ctx: unknown,\n createAnnotateOverlay: (root: ShadowRoot) => LifecycleContext['annotateOverlay'],\n): void {\n const state = asLifecycleContext(ctx)\n configureI18n(buildI18nConfig(state.options))\n const host = state as unknown as HTMLElement\n host.style.position = 'fixed'\n host.style.inset = '0'\n host.style.pointerEvents = 'none'\n host.style.zIndex = '2147483646'\n state.shadowRootEl = state.attachShadow({ mode: 'open' })\n\n const style = document.createElement('style')\n style.textContent = inspectorStyles\n state.shadowRootEl.appendChild(style)\n\n state.overlay = createOverlay(state.shadowRootEl)\n state.annotateOverlay = createAnnotateOverlay(state.shadowRootEl)\n state.badge = state.createBadge()\n\n state.setupListeners()\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n\n if (state.options.defaultActive) {\n state.setActive(true)\n }\n}\n\nexport function disconnect(ctx: unknown): void {\n const state = asLifecycleContext(ctx)\n if (state.pendingAnnotateViewportFrame !== null) {\n cancelAnimationFrame(state.pendingAnnotateViewportFrame)\n state.pendingAnnotateViewportFrame = null\n }\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateElements.clear()\n state.annotateDrafts.clear()\n state.stopLatestAnnotateSessionStream()\n state.cleanupRuntimeContextCapture?.()\n state.cleanupRuntimeContextCapture = null\n state.runtimeContextCollector.clear()\n state.teardownListeners()\n}\n\nexport function configure(ctx: unknown, options: InspectoOptions): void {\n const state = asLifecycleContext(ctx)\n state.options = options\n configureI18n(buildI18nConfig(options))\n if (options.mode !== undefined) {\n const previousMode = state.mode\n state.mode = options.mode\n if (options.mode !== 'annotate' && previousMode === 'annotate') {\n resetAnnotateState(state)\n }\n }\n if (options.serverUrl) {\n setBaseUrl(options.serverUrl)\n }\n\n applyTheme(state, options.theme)\n\n state.configLoadPromise = fetchIdeInfo(true)\n .then(info => {\n if (info?.hotKeys !== undefined) {\n state.serverHotKeys = info.hotKeys\n state.syncModeUi()\n }\n if (info?.theme !== undefined) {\n applyTheme(state, info.theme)\n }\n if (info?.annotateDeliveryMode !== undefined) {\n state.annotateDeliveryMode = info.annotateDeliveryMode\n }\n if (info?.includeSnippet !== undefined) {\n state.options.includeSnippet = info.includeSnippet\n }\n if (info?.runtimeContext !== undefined) {\n state.options.runtimeContext = {\n ...state.options.runtimeContext,\n ...info.runtimeContext,\n }\n state.syncRuntimeContextCapture()\n }\n })\n .catch(() => {})\n .then(() => {})\n\n if (state.shadowRootEl) {\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n }\n}\n\nexport function setMode(ctx: unknown, mode: 'inspect' | 'annotate'): void {\n const state = asLifecycleContext(ctx)\n const previousMode = state.mode\n state.mode = mode\n\n if (mode === 'annotate') {\n state.overlay.hide()\n } else if (previousMode === 'annotate') {\n resetAnnotateState(state)\n }\n\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n}\n","import {\n attachRuntimeContextCapture,\n createRuntimeContextCollector,\n createRuntimeContextEnvelope,\n selectRuntimeEvidence,\n} from './runtime-context.js'\nimport { buildCssContextPrompt, captureCssContextEntry } from './css-context.js'\nimport type { AnnotationTarget, AnnotationTransport, SourceLocation } from '@inspecto-dev/types'\n\ntype EvidenceContext = {\n options: {\n runtimeContext?: {\n enabled?: boolean\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n }\n mode: 'inspect' | 'annotate'\n disabled: boolean\n cleanupRuntimeContextCapture: (() => void) | null\n runtimeContextCollector: ReturnType<typeof createRuntimeContextCollector>\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateSession: {\n current: {\n id: string\n target: AnnotationTarget | null\n cssContextEnabled?: boolean\n }\n records: Array<{\n target: AnnotationTarget\n cssContextEnabled?: boolean\n }>\n }\n annotateElements: Map<string, Element>\n createAnnotationTarget(element: Element, location: SourceLocation): AnnotationTarget\n getAnnotationTargetKey(target: AnnotationTarget): string\n findElementForLocation(location: SourceLocation, selector?: string): Element | null\n findElementForAnnotationTarget(target: AnnotationTarget): Element | null\n canAttachRuntimeContext(): boolean\n canAttachCssContext(): boolean\n getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n isCssContextEnabledForTransportTarget(target: AnnotationTransport['targets'][number]): boolean\n}\n\nfunction asEvidenceContext(ctx: unknown): EvidenceContext {\n return ctx as EvidenceContext\n}\n\nexport function syncRuntimeContextCapture(ctx: unknown): void {\n const state = asEvidenceContext(ctx)\n const runtimeContextEnabled =\n state.options.runtimeContext?.enabled === true &&\n (state.mode === 'inspect' || (state.mode === 'annotate' && !state.disabled))\n\n if (runtimeContextEnabled) {\n if (!state.cleanupRuntimeContextCapture) {\n state.cleanupRuntimeContextCapture = attachRuntimeContextCapture(\n state.runtimeContextCollector,\n )\n }\n return\n }\n\n state.cleanupRuntimeContextCapture?.()\n state.cleanupRuntimeContextCapture = null\n state.runtimeContextCollector.clear()\n}\n\nexport function canAttachRuntimeContext(ctx: unknown): boolean {\n return asEvidenceContext(ctx).options.runtimeContext?.enabled === true\n}\n\nexport function canAttachCssContext(): boolean {\n return typeof window !== 'undefined' && typeof window.getComputedStyle === 'function'\n}\n\nexport function captureCssContextPromptForElement(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): string | null {\n const state = asEvidenceContext(ctx)\n const target = state.createAnnotationTarget(element, location)\n const entry = captureCssContextEntry({\n element,\n location,\n ...(target.label ? { label: target.label } : {}),\n ...(target.selector ? { selector: target.selector } : {}),\n })\n return entry ? buildCssContextPrompt([entry]) : null\n}\n\nexport function isCssContextEnabledForTarget(ctx: unknown, target: AnnotationTarget): boolean {\n const state = asEvidenceContext(ctx)\n if (state.annotateCssContextEnabled) return true\n\n const targetKey = state.getAnnotationTargetKey(target)\n if (\n state.annotateSession.current.target &&\n state.getAnnotationTargetKey(state.annotateSession.current.target) === targetKey\n ) {\n return state.annotateSession.current.cssContextEnabled ?? false\n }\n\n const savedRecord = state.annotateSession.records.find(\n record => state.getAnnotationTargetKey(record.target) === targetKey,\n )\n return savedRecord?.cssContextEnabled ?? false\n}\n\nexport function isCssContextEnabledForTransportTarget(\n ctx: unknown,\n target: AnnotationTransport['targets'][number],\n): boolean {\n const state = asEvidenceContext(ctx)\n if (state.annotateCssContextEnabled) return true\n\n const targetKey = `${target.location.file}:${target.location.line}:${target.location.column}::${target.selector ?? ''}`\n if (\n state.annotateSession.current.target &&\n state.getAnnotationTargetKey(state.annotateSession.current.target) === targetKey\n ) {\n return state.annotateSession.current.cssContextEnabled ?? false\n }\n\n const savedRecord = state.annotateSession.records.find(\n record => state.getAnnotationTargetKey(record.target) === targetKey,\n )\n return savedRecord?.cssContextEnabled ?? false\n}\n\nexport function getAnnotateCssContextPrompt(\n ctx: unknown,\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n): string | null {\n const state = asEvidenceContext(ctx)\n if (\n (!includeWhenDisabled &&\n !state.annotateCssContextEnabled &&\n !annotations.some(annotation =>\n annotation.targets.some(target => state.isCssContextEnabledForTransportTarget(target)),\n )) ||\n !state.canAttachCssContext()\n ) {\n return null\n }\n\n const entries = annotations.flatMap(annotation =>\n annotation.targets.flatMap(target => {\n if (!includeWhenDisabled && !state.isCssContextEnabledForTransportTarget(target)) {\n return []\n }\n const element = state.findElementForLocation(target.location, target.selector)\n if (!element) return []\n const entry = captureCssContextEntry({\n element,\n location: target.location,\n ...(target.label ? { label: target.label } : {}),\n ...(target.selector ? { selector: target.selector } : {}),\n })\n return entry ? [entry] : []\n }),\n )\n\n return buildCssContextPrompt(entries)\n}\n\nexport function getRuntimeContextLimits(ctx: unknown): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n} {\n const state = asEvidenceContext(ctx)\n return {\n ...(state.options.runtimeContext?.maxRuntimeErrors !== undefined\n ? { maxRuntimeErrors: state.options.runtimeContext.maxRuntimeErrors }\n : {}),\n ...(state.options.runtimeContext?.maxFailedRequests !== undefined\n ? { maxFailedRequests: state.options.runtimeContext.maxFailedRequests }\n : {}),\n }\n}\n\nexport function getAnnotateRuntimeContext(\n ctx: unknown,\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n): ReturnType<typeof createRuntimeContextEnvelope> | null {\n const state = asEvidenceContext(ctx)\n if (\n (!includeWhenDisabled && !state.annotateRuntimeContextEnabled) ||\n !state.canAttachRuntimeContext() ||\n annotations.length === 0\n ) {\n return null\n }\n\n const locations = annotations.flatMap(annotation =>\n annotation.targets.map(target => target.location),\n )\n if (locations.length === 0) return null\n\n const selected = selectRuntimeEvidence(\n state.runtimeContextCollector.snapshot().records,\n locations,\n state.getRuntimeContextLimits(),\n )\n\n return selected.length > 0 ? createRuntimeContextEnvelope(selected) : null\n}\n\nexport function formatRuntimeContextSummary(\n runtimeContext: ReturnType<typeof createRuntimeContextEnvelope> | null,\n): string {\n if (!runtimeContext) return ''\n\n const parts: string[] = []\n if (runtimeContext.summary.runtimeErrorCount > 0) {\n parts.push(\n `${runtimeContext.summary.runtimeErrorCount} ${runtimeContext.summary.runtimeErrorCount === 1 ? 'runtime error' : 'runtime errors'}`,\n )\n }\n if (runtimeContext.summary.failedRequestCount > 0) {\n parts.push(\n `${runtimeContext.summary.failedRequestCount} ${runtimeContext.summary.failedRequestCount === 1 ? 'failed request' : 'failed requests'}`,\n )\n }\n return parts.join(' • ')\n}\n\nexport function getCollectedRuntimeErrorCount(ctx: unknown): number {\n const state = asEvidenceContext(ctx)\n return state.runtimeContextCollector\n .snapshot()\n .records.filter(record => record.kind !== 'failed-request').length\n}\n","import { createOverlay } from './overlay.js'\nimport { createEmptySession } from './annotate-session.js'\nimport { createAnnotateSidebar } from './annotate-sidebar.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport { createAnnotateOverlay } from './annotate-overlay.js'\nimport {\n addTargetToCurrentAnnotation as addAnnotateTarget,\n beginEditingRecord as beginAnnotateEditing,\n clearAnnotateError as clearAnnotateErrorState,\n clearAnnotateSuccess as clearAnnotateSuccessState,\n clearDraftForTarget as clearAnnotateDraftForTarget,\n composeAnnotateInstruction as composeAnnotateBatchInstruction,\n createAnnotationTarget as createAnnotateTarget,\n describeElement as describeInspectableElement,\n findElementForAnnotationTarget as findAnnotateTargetElement,\n findElementForLocation as findElementByLocation,\n getAnnotateSidebarOptions as buildAnnotateSidebarOptions,\n getAnnotationTargetKey as getAnnotateTargetKey,\n getNextRecordDisplayOrder as getAnnotateNextRecordDisplayOrder,\n hasCurrentRecord as hasAnnotateCurrentRecord,\n markTargetInAnnotateSession as markAnnotateTarget,\n persistCurrentDraft as persistAnnotateDraft,\n rebindCurrentAnnotationElements as rebindAnnotateElements,\n renderAnnotateSelectionOverlay as renderAnnotateOverlay,\n refreshLatestAnnotateSession as refreshLatestAnnotateSessionState,\n restoreEditingRecord as restoreAnnotateEditingRecord,\n sendAnnotationBatch as sendAnnotateBatch,\n showAnnotateSuccess as showAnnotateBatchSuccess,\n startLatestAnnotateSessionStream as startLatestAnnotateSessionStreamState,\n stopLatestAnnotateSessionStream as stopLatestAnnotateSessionStreamState,\n toAnnotateErrorMessage as toAnnotateRequestErrorMessage,\n toAnnotationTransportFromRecord as toAnnotateTransportFromRecord,\n} from './component-annotate.js'\nimport {\n createBadge as createLauncherBadge,\n dismiss as dismissLauncher,\n getEffectiveHotKeys as getLauncherHotKeys,\n getHotKeyLabel as getLauncherHotKeyLabel,\n setActive as setLauncherActive,\n setPaused as setLauncherPaused,\n shouldInvertLauncherEye as shouldInvertBadgeEye,\n shouldQuickJumpOnTrigger as shouldQuickJump,\n updateBadgeContent as updateLauncherBadgeContent,\n updateLauncherEye as syncLauncherEye,\n} from './component-launcher.js'\nimport {\n handleKeyDown as handleInspectorKeyDown,\n handleMouseMove as handleInspectorMouseMove,\n handleTrigger as handleInspectorTrigger,\n handleViewportChange as handleInspectorViewportChange,\n openInspectMenu as openInspectorIntentMenu,\n} from './component-interactions.js'\nimport {\n isInspectorActive as resolveInspectorActive,\n mountAnnotateSidebar as mountAnnotateSidebarUi,\n setupListeners as setupInspectorListeners,\n syncModeUi as syncInspectorModeUi,\n teardownListeners as teardownInspectorListeners,\n updateAnnotateSidebar as updateAnnotateSidebarUi,\n} from './component-mode-ui.js'\nimport {\n configure as configureInspector,\n connect as connectInspector,\n disconnect as disconnectInspector,\n setMode as setInspectorMode,\n} from './component-lifecycle.js'\nimport {\n canAttachCssContext as canAttachCssEvidence,\n canAttachRuntimeContext as canAttachRuntimeEvidence,\n captureCssContextPromptForElement as captureCssPromptForElement,\n formatRuntimeContextSummary as formatRuntimeSummary,\n getAnnotateCssContextPrompt as getAnnotateCssPrompt,\n getAnnotateRuntimeContext as getAnnotateRuntimeEvidence,\n getCollectedRuntimeErrorCount as getRuntimeErrorCount,\n getRuntimeContextLimits as getRuntimeEvidenceLimits,\n isCssContextEnabledForTarget as isCssEnabledForTarget,\n isCssContextEnabledForTransportTarget as isCssEnabledForTransportTarget,\n syncRuntimeContextCapture as syncRuntimeCapture,\n} from './component-evidence.js'\nimport { createElementSelector } from './component-utils.js'\nimport { createRuntimeContextCollector, createRuntimeContextEnvelope } from './runtime-context.js'\nimport type {\n AnnotationTransport,\n AnnotationTarget,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n AiErrorCode,\n FeedbackRecord,\n FeedbackRecordDraft,\n InspectorOptions,\n SourceLocation,\n HotKeys,\n} from '@inspecto-dev/types'\nexport type InspectorMode = 'inspect' | 'annotate'\ntype InspectoOptions = InspectorOptions & { mode?: InspectorMode }\n\nconst DEFAULT_ANNOTATE_INSTRUCTION = ''\n\n// Fallback class for SSR environments\nconst BaseElement =\n typeof HTMLElement !== 'undefined' ? HTMLElement : (class {} as typeof HTMLElement)\n\nclass InspectoElement extends BaseElement {\n private options: InspectoOptions = {}\n private serverHotKeys: HotKeys | null = null\n private active = false\n private disabled = false\n private prePauseState: { active: boolean; mode: InspectorMode } = {\n active: false,\n mode: 'inspect',\n }\n private mode: InspectorMode = 'inspect'\n private launcherPanelOpen = false\n private shadowRootEl!: ShadowRoot\n private overlay!: ReturnType<typeof createOverlay>\n private annotateOverlay: ReturnType<typeof createAnnotateOverlay> | null = null\n private cleanupMenu: (() => void) | null = null\n private annotateSession = createEmptySession()\n private annotateCapturePaused = false\n private annotateQuickCaptureEnabled = false\n private annotateSidebar: ReturnType<typeof createAnnotateSidebar> | null = null\n private annotateElements = new Map<string, Element>()\n private annotateDrafts = new Map<string, FeedbackRecordDraft>()\n private annotateEditingRecord: FeedbackRecord | null = null\n private badge!: HTMLDivElement\n private configLoadPromise: Promise<void> | null = null\n private annotateInstructionDraft = DEFAULT_ANNOTATE_INSTRUCTION\n private annotateErrorMessage = ''\n private annotateRuntimeContextEnabled = false\n private annotateCssContextEnabled = false\n private annotateDeliveryMode: 'ide' | 'agent' | 'both' = 'both'\n private annotateSendState: {\n isSending: boolean\n scope: 'quick-ask' | 'create-task' | null\n } = {\n isSending: false,\n scope: null,\n }\n private annotateLatestSessionSummary: AnnotationWorkSessionSummary | null = null\n private annotateLatestSessionDetail: AnnotationWorkSession | null = null\n private annotateLatestSessionStream:\n | import('./http.js').AnnotationSessionEventStreamConnection\n | null = null\n private annotateLatestSessionLoading = false\n private annotateLatestSessionError = ''\n private annotateSuccessScope: 'quick-ask' | 'create-task' | null = null\n private annotateSuccessTimeout: ReturnType<typeof setTimeout> | null = null\n private annotateSuccessOnClear: (() => void) | null = null\n private pendingAnnotateViewportFrame: number | null = null\n private runtimeContextCollector = createRuntimeContextCollector()\n private cleanupRuntimeContextCapture: (() => void) | null = null\n private lastPointerX = 0\n private lastPointerY = 0\n private readonly onFocusChange = (): void => {\n this.updateLauncherEye()\n }\n\n connectedCallback(): void {\n connectInspector(this, root => createAnnotateOverlay(root))\n }\n\n disconnectedCallback(): void {\n disconnectInspector(this)\n }\n\n configure(options: InspectoOptions): void {\n configureInspector(this, options)\n }\n\n setMode(mode: InspectorMode): void {\n setInspectorMode(this, mode)\n }\n\n getMode(): InspectorMode {\n return this.mode\n }\n\n private createBadge(): HTMLDivElement {\n return createLauncherBadge(this)\n }\n\n private setPaused(value: boolean): void {\n setLauncherPaused(this, value)\n this.syncModeUi()\n }\n\n private dismiss(): void {\n dismissLauncher(this)\n }\n\n private getHotKeyLabel(): string {\n return getLauncherHotKeyLabel(this)\n }\n\n private getEffectiveHotKeys(): HotKeys {\n return getLauncherHotKeys(this)\n }\n\n private updateBadgeContent(): void {\n updateLauncherBadgeContent(this)\n }\n\n private setActive(value: boolean): void {\n setLauncherActive(this, value)\n }\n\n private readonly onMouseMove = (e: MouseEvent): void => {\n handleInspectorMouseMove(this, e)\n }\n\n private readonly onClick = (e: MouseEvent): void => {\n this.handleTrigger(e)\n }\n\n private readonly onContextMenu = (e: MouseEvent): void => {\n if (this.isInspectorActive(e)) {\n this.handleTrigger(e)\n }\n }\n\n private handleTrigger(e: MouseEvent): void {\n handleInspectorTrigger(this, e)\n }\n\n private shouldQuickJumpOnTrigger(e: MouseEvent): boolean {\n return shouldQuickJump(this, e)\n }\n\n private shouldInvertLauncherEye(): boolean {\n return shouldInvertBadgeEye(this)\n }\n\n private updateLauncherEye(): void {\n syncLauncherEye(this)\n }\n\n private pause(): void {\n this.setPaused(true)\n }\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n handleInspectorKeyDown(this, e)\n }\n\n private readonly onViewportChange = (): void => {\n handleInspectorViewportChange(this)\n }\n\n private openInspectMenu(\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n ): void {\n openInspectorIntentMenu(this, loc, clientX, clientY, targetElement)\n }\n\n private syncRuntimeContextCapture(): void {\n syncRuntimeCapture(this)\n }\n\n private canAttachRuntimeContext(): boolean {\n return canAttachRuntimeEvidence(this)\n }\n\n private canAttachCssContext(): boolean {\n return canAttachCssEvidence()\n }\n\n private captureCssContextPromptForElement(\n element: Element,\n location: SourceLocation,\n ): string | null {\n return captureCssPromptForElement(this, element, location)\n }\n\n private isCssContextEnabledForTarget(target: AnnotationTarget): boolean {\n return isCssEnabledForTarget(this, target)\n }\n\n private isCssContextEnabledForTransportTarget(\n target: AnnotationTransport['targets'][number],\n ): boolean {\n return isCssEnabledForTransportTarget(this, target)\n }\n\n private getAnnotateCssContextPrompt(\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n ): string | null {\n return getAnnotateCssPrompt(this, annotations, includeWhenDisabled)\n }\n\n private getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n } {\n return getRuntimeEvidenceLimits(this)\n }\n\n private getAnnotateRuntimeContext(\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n ): ReturnType<typeof createRuntimeContextEnvelope> | null {\n return getAnnotateRuntimeEvidence(this, annotations, includeWhenDisabled)\n }\n\n private formatRuntimeContextSummary(\n runtimeContext: ReturnType<typeof createRuntimeContextEnvelope> | null,\n ): string {\n return formatRuntimeSummary(runtimeContext)\n }\n\n private getCollectedRuntimeErrorCount(): number {\n return getRuntimeErrorCount(this)\n }\n\n private addTargetToCurrentAnnotation(element: Element, location: SourceLocation): void {\n addAnnotateTarget(this, element, location)\n }\n\n private markTargetInAnnotateSession(element: Element, location: SourceLocation): void {\n markAnnotateTarget(this, element, location)\n }\n\n private getAnnotationTargetKey(target: AnnotationTarget): string {\n return getAnnotateTargetKey(this, target)\n }\n\n private persistCurrentDraft(): void {\n persistAnnotateDraft(this)\n }\n\n private clearDraftForTarget(target: AnnotationTarget | null | undefined): void {\n clearAnnotateDraftForTarget(this, target)\n }\n\n private restoreEditingRecord(): void {\n restoreAnnotateEditingRecord(this)\n }\n\n private beginEditingRecord(recordId: string): void {\n beginAnnotateEditing(this, recordId)\n }\n\n private findElementForAnnotationTarget(target: AnnotationTarget): Element | null {\n return findAnnotateTargetElement(this, target)\n }\n\n private findElementForLocation(location: SourceLocation, selector?: string): Element | null {\n return findElementByLocation(this, location, selector)\n }\n\n private rebindCurrentAnnotationElements(): void {\n rebindAnnotateElements(this)\n }\n\n private createAnnotationTarget(element: Element, location: SourceLocation): AnnotationTarget {\n return createAnnotateTarget(this, element, location)\n }\n\n private describeElement(element: Element): string {\n return describeInspectableElement(this, element)\n }\n\n private createSelector(element: Element): string {\n return createElementSelector(element)\n }\n\n private hasCurrentRecord(): boolean {\n return hasAnnotateCurrentRecord(this)\n }\n\n private getNextRecordDisplayOrder(): number {\n return getAnnotateNextRecordDisplayOrder(this)\n }\n\n private clearAnnotateError(): void {\n clearAnnotateErrorState(this)\n }\n\n private clearAnnotateSuccess(): void {\n clearAnnotateSuccessState(this)\n }\n\n private showAnnotateSuccess(scope: 'quick-ask' | 'create-task'): void {\n showAnnotateBatchSuccess(this, scope)\n }\n\n private async refreshLatestAnnotateSession(): Promise<void> {\n return refreshLatestAnnotateSessionState(this)\n }\n\n private startLatestAnnotateSessionStream(sessionId: string): void {\n startLatestAnnotateSessionStreamState(this, sessionId)\n }\n\n private stopLatestAnnotateSessionStream(): void {\n stopLatestAnnotateSessionStreamState(this)\n }\n\n private toAnnotateErrorMessage(errorCode?: AiErrorCode, fallback?: string): string {\n return toAnnotateRequestErrorMessage(this, errorCode, fallback)\n }\n\n private toAnnotationTransportFromRecord(record: FeedbackRecord): AnnotationTransport {\n return toAnnotateTransportFromRecord(this, record)\n }\n\n private async sendAnnotationBatch(\n annotations: AnnotationTransport[],\n scope: 'quick-ask' | 'create-task',\n instruction: string,\n deliveryMode: 'ide' | 'agent',\n onSuccess: () => void,\n ): Promise<void> {\n return sendAnnotateBatch(this, annotations, scope, instruction, deliveryMode, onSuccess)\n }\n\n private syncModeUi(): void {\n syncInspectorModeUi(this)\n }\n\n private mountAnnotateSidebar(): void {\n mountAnnotateSidebarUi(this)\n }\n\n private updateAnnotateSidebar(): void {\n updateAnnotateSidebarUi(this)\n }\n\n private getAnnotateSidebarOptions(): AnnotateSidebarOptions {\n return buildAnnotateSidebarOptions(this)\n }\n\n private composeAnnotateInstruction(): string {\n return composeAnnotateBatchInstruction(this)\n }\n\n private renderAnnotateSelectionOverlay(): void {\n renderAnnotateOverlay(this)\n }\n\n private isInspectorActive(e: MouseEvent): boolean {\n return resolveInspectorActive(this, e)\n }\n\n private setupListeners(): void {\n setupInspectorListeners(this, {\n onMouseMove: this.onMouseMove,\n onClick: this.onClick,\n onContextMenu: this.onContextMenu,\n onKeyDown: this.onKeyDown,\n onFocusChange: this.onFocusChange,\n onViewportChange: this.onViewportChange,\n })\n }\n\n private teardownListeners(): void {\n teardownInspectorListeners(this, {\n onMouseMove: this.onMouseMove,\n onClick: this.onClick,\n onContextMenu: this.onContextMenu,\n onKeyDown: this.onKeyDown,\n onFocusChange: this.onFocusChange,\n onViewportChange: this.onViewportChange,\n })\n }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('inspecto-overlay')) {\n customElements.define('inspecto-overlay', InspectoElement)\n}\n\nexport { InspectoElement }\n","import type { InspectorOptions } from '@inspecto-dev/types'\nimport type { InspectorMode } from './component.js'\n\n// Export types only, avoid top-level imports of DOM-dependent code\nexport type { InspectorOptions }\nexport type { InspectoElement } from './component.js'\nexport type { InspectorMode } from './component.js'\n\ntype MountInspectorOptions = InspectorOptions & { mode?: InspectorMode }\n\nconst TAG_NAME = 'inspecto-overlay'\n\nexport async function mountInspector(options: MountInspectorOptions = {}): Promise<any> {\n if (typeof document === 'undefined') return null\n\n // Lazy import the component so that module evaluation does not happen during SSR\n const { InspectoElement: _InspectoElement } = await import('./component.js')\n\n const existing = document.querySelector(TAG_NAME)\n if (existing) {\n ;(existing as typeof _InspectoElement.prototype).configure(options)\n return existing\n }\n\n const el = document.createElement(TAG_NAME)\n ;(el as typeof _InspectoElement.prototype).configure(options)\n document.body.appendChild(el)\n return el\n}\n\nexport function unmountInspector(): void {\n if (typeof document === 'undefined') return\n const existing = document.querySelector(TAG_NAME)\n if (existing) {\n existing.remove()\n }\n}\n\n// Expose to global window for Webpack/Rspack EntryPlugin injection fallback\nif (typeof window !== 'undefined') {\n window.InspectoClient = {\n mountInspector,\n unmountInspector,\n }\n}\n"],"mappings":"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","names":["_a","_a","_a","_a","_a","_a","_a","_a","_a","_b","_a","_a","_a","formatRuntimeErrorCount","_a","_a","_a","_a","_a","_a","canAttachRuntimeContext","canAttachCssContext","_b","_c","formatRuntimeErrorCount","_a","_a","_a","_a","formatRuntimeErrorCount","_a","annotateSidebarChipClass","_a","_a","_a","formatRuntimeErrorCount","_a","createAnnotateOverlay","_a","_a","formatRuntimeContextSummary","formatRuntimeContextSummary"]}
1
+ {"version":3,"sources":["../src/annotate-session.ts","../src/styles-classes.ts","../src/styles-annotate.ts","../src/styles-launcher.ts","../src/styles-overlay-menu.ts","../src/styles-theme.ts","../src/styles.ts","../src/icons.ts","../src/i18n.ts","../src/annotate-overlay-dom.ts","../src/annotate-overlay-helpers.ts","../src/annotate-overlay.ts","../src/component-utils.ts","../src/component-annotate-shared.ts","../src/component-annotate-targets.ts","../src/css-context.ts","../src/annotate-full-prompt.ts","../src/http.ts","../src/component-annotate-ui.ts","../src/component-annotate.ts","../src/component-launcher.ts","../src/intents.ts","../src/fix-bug-prompt.ts","../src/menu-helpers.ts","../src/menu-actions.ts","../src/menu-send.ts","../src/menu-header.ts","../src/menu-position.ts","../src/menu.ts","../src/runtime-context-shared.ts","../src/runtime-context-capture.ts","../src/runtime-context-selection.ts","../src/runtime-context.ts","../src/component-interactions.ts","../src/annotate-sidebar-helpers.ts","../src/annotate-sidebar-dom.ts","../src/annotate-sidebar-renderers.ts","../src/annotate-sidebar.ts","../src/component-mode-ui.ts","../src/overlay.ts","../src/component-lifecycle.ts","../src/component-evidence.ts","../src/component.ts","../src/index.ts"],"sourcesContent":["import type {\n AnnotationTarget,\n AnnotationIntent,\n FeedbackRecord,\n FeedbackRecordDraft,\n FeedbackRecordSession,\n} from '@inspecto-dev/types'\n\nfunction sameLocation(a: AnnotationTarget, b: AnnotationTarget): boolean {\n return (\n a.location.file === b.location.file &&\n a.location.line === b.location.line &&\n a.location.column === b.location.column &&\n a.selector === b.selector\n )\n}\n\nfunction createId(prefix: string): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}`\n )\n}\n\nfunction createEmptyRecordDraft(): FeedbackRecordDraft {\n return {\n id: createId('record'),\n target: null,\n note: '',\n intent: 'review',\n cssContextEnabled: false,\n }\n}\n\nfunction getNextDisplayOrder(session: FeedbackRecordSession): number {\n return (\n session.records.reduce((maxOrder, record) => Math.max(maxOrder, record.displayOrder), 0) + 1\n )\n}\n\nexport function createEmptySession(): FeedbackRecordSession {\n return {\n current: createEmptyRecordDraft(),\n records: [],\n }\n}\n\nexport function setCurrentRecordTarget(\n session: FeedbackRecordSession,\n target: AnnotationTarget,\n): FeedbackRecordSession {\n const existingRecord = session.records.find(record => sameLocation(record.target, target))\n if (existingRecord) {\n return {\n ...session,\n current: {\n id: existingRecord.id,\n displayOrder: existingRecord.displayOrder,\n target: existingRecord.target,\n note: existingRecord.note,\n intent: existingRecord.intent,\n cssContextEnabled: existingRecord.cssContextEnabled ?? false,\n },\n records: session.records.filter(record => record.id !== existingRecord.id),\n }\n }\n\n return {\n ...session,\n current: {\n ...session.current,\n target,\n cssContextEnabled: session.current.target\n ? (session.current.cssContextEnabled ?? false)\n : false,\n },\n }\n}\n\nexport function updateCurrentRecordNote(\n session: FeedbackRecordSession,\n note: string,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n note,\n },\n }\n}\n\nexport function updateCurrentRecordIntent(\n session: FeedbackRecordSession,\n intent: AnnotationIntent,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n intent,\n },\n }\n}\n\nexport function updateCurrentRecordCssContextEnabled(\n session: FeedbackRecordSession,\n enabled: boolean,\n): FeedbackRecordSession {\n return {\n ...session,\n current: {\n ...session.current,\n cssContextEnabled: enabled,\n },\n }\n}\n\nexport function clearCurrentRecord(session: FeedbackRecordSession): FeedbackRecordSession {\n return {\n ...session,\n current: createEmptyRecordDraft(),\n }\n}\n\nexport function saveCurrentRecord(session: FeedbackRecordSession): FeedbackRecordSession {\n const { current } = session\n if (!current.target) {\n return session\n }\n\n const record: FeedbackRecord = {\n id: current.id,\n displayOrder: current.displayOrder ?? getNextDisplayOrder(session),\n target: current.target,\n note: current.note,\n intent: current.intent,\n cssContextEnabled: current.cssContextEnabled ?? false,\n }\n\n return {\n ...session,\n current: createEmptyRecordDraft(),\n records: [...session.records, record],\n }\n}\n\nexport function removeRecord(\n session: FeedbackRecordSession,\n recordId: string,\n): FeedbackRecordSession {\n return {\n ...session,\n records: session.records.filter(record => record.id !== recordId),\n }\n}\n\nexport function editRecord(\n session: FeedbackRecordSession,\n recordId: string,\n): FeedbackRecordSession {\n const record = session.records.find(entry => entry.id === recordId)\n if (!record) return session\n\n return {\n ...session,\n current: {\n id: record.id,\n displayOrder: record.displayOrder,\n target: record.target,\n note: record.note,\n intent: record.intent,\n cssContextEnabled: record.cssContextEnabled ?? false,\n },\n records: session.records.filter(entry => entry.id !== recordId),\n }\n}\n","export const overlayClass = 'inspecto-overlay'\nexport const menuClass = 'inspecto-menu'\nexport const menuTitleClass = 'inspecto-menu-title'\nexport const menuMetaClass = 'inspecto-menu-meta'\nexport const menuSectionClass = 'inspecto-menu-section'\nexport const menuItemClass = 'inspecto-menu-item'\nexport const loadingSpinnerClass = 'inspecto-spinner'\nexport const errorMsgClass = 'inspecto-error'\nexport const badgeClass = 'inspecto-badge'\nexport const menuInputClass = 'inspecto-menu-input'\nexport const menuInputWrapperClass = 'inspecto-menu-input-wrapper'\nexport const menuInputIconClass = 'inspecto-menu-input-icon'\nexport const menuContextSummaryClass = 'inspecto-menu-context-summary'\nexport const menuContextPreviewClass = 'inspecto-menu-context-preview'\nexport const menuContextToggleClass = 'inspecto-menu-context-toggle'\nexport const runtimeToggleClass = 'inspecto-runtime-toggle'\nexport const runtimeToggleIconClass = 'inspecto-runtime-toggle-icon'\nexport const runtimeToggleBadgeClass = 'inspecto-runtime-toggle-badge'\nexport const annotateSidebarClass = 'inspecto-annotate-sidebar'\nexport const annotateSidebarHeaderClass = 'inspecto-annotate-sidebar-header'\nexport const annotateSidebarSectionClass = 'inspecto-annotate-sidebar-section'\nexport const annotateTargetListClass = 'inspecto-annotate-target-list'\nexport const annotateQueueListClass = 'inspecto-annotate-queue-list'\nexport const annotateBadgeClass = 'inspecto-annotate-badge'\nexport const annotateSidebarFooterClass = 'inspecto-annotate-sidebar-footer'\nexport const annotateSidebarActionsClass = 'inspecto-annotate-sidebar-actions'\nexport const annotateSidebarButtonClass = 'inspecto-annotate-sidebar-button'\nexport const annotateSidebarInputClass = 'inspecto-annotate-sidebar-input'\nexport const annotateSidebarSelectClass = 'inspecto-annotate-sidebar-select'\nexport const annotateSidebarTextClass = 'inspecto-annotate-sidebar-text'\nexport const annotateSidebarEmptyClass = 'inspecto-annotate-sidebar-empty'\nexport const annotateSidebarQueueMetaClass = 'inspecto-annotate-sidebar-queue-meta'\nexport const annotateSidebarQueueItemClass = 'inspecto-annotate-sidebar-queue-item'\nexport const annotateSidebarTargetItemClass = 'inspecto-annotate-sidebar-target-item'\nexport const annotateSidebarLabelClass = 'inspecto-annotate-sidebar-label'\nexport const annotateSidebarFieldClass = 'inspecto-annotate-sidebar-field'\nexport const annotateSidebarInlineActionClass = 'inspecto-annotate-sidebar-inline-action'\nexport const annotateSidebarChipListClass = 'inspecto-annotate-sidebar-chip-list'\nexport const annotateSidebarChipClass = 'inspecto-annotate-sidebar-chip'\nexport const annotateSidebarChipPanelClass = 'inspecto-annotate-sidebar-chip-panel'\nexport const annotateSidebarChipFieldClass = 'inspecto-annotate-sidebar-chip-field'\nexport const annotateSidebarHintClass = 'inspecto-annotate-sidebar-hint'\nexport const annotateConfirmDialogClass = 'inspecto-annotate-confirm-dialog'\nexport const tooltipClass = 'inspecto-tooltip'\nexport const tooltipTopClass = 'inspecto-tooltip-top'\nexport const tooltipBottomClass = 'inspecto-tooltip-bottom'\nexport const tagClass = 'inspecto-tag'\nexport const idClass = 'inspecto-id'\nexport const classClass = 'inspecto-class'\nexport const dimClass = 'inspecto-dim'\nexport const separatorClass = 'inspecto-separator'\nexport const sourceClass = 'inspecto-source'\nexport const shortcutIconClass = 'ai-shortcut-icon'\n","import {\n annotateBadgeClass,\n annotateConfirmDialogClass,\n annotateQueueListClass,\n annotateSidebarActionsClass,\n annotateSidebarButtonClass,\n annotateSidebarChipClass,\n annotateSidebarChipFieldClass,\n annotateSidebarChipListClass,\n annotateSidebarChipPanelClass,\n annotateSidebarClass,\n annotateSidebarEmptyClass,\n annotateSidebarFieldClass as _annotateSidebarFieldClass,\n annotateSidebarFooterClass,\n annotateSidebarHeaderClass,\n annotateSidebarHintClass,\n annotateSidebarInlineActionClass,\n annotateSidebarInputClass,\n annotateSidebarLabelClass,\n annotateSidebarQueueItemClass,\n annotateSidebarQueueMetaClass,\n annotateSidebarSectionClass,\n annotateSidebarSelectClass,\n annotateSidebarTargetItemClass,\n annotateSidebarTextClass,\n annotateTargetListClass,\n runtimeToggleClass,\n} from './styles-classes.js'\n\nexport const annotateStyles = `\n .${annotateSidebarClass} {\n position: fixed;\n top: 18px;\n right: 18px;\n z-index: 2147483647;\n width: min(408px, calc(100vw - 28px));\n min-height: 240px;\n max-height: calc(100vh - 36px);\n display: flex;\n flex-direction: column;\n gap: 16px;\n box-sizing: border-box;\n padding: 18px 18px 18px;\n overflow: visible;\n color: var(--inspecto-text-primary);\n background:\n radial-gradient(circle at top right, rgba(14, 165, 233, 0.18), transparent 36%),\n radial-gradient(circle at top left, rgba(14, 165, 233, 0.08), transparent 28%),\n linear-gradient(180deg, rgba(13, 20, 31, 0.985) 0%, rgba(8, 14, 24, 0.985) 100%);\n border: 1px solid rgba(148, 163, 184, 0.16);\n border-radius: 28px;\n box-shadow: var(--inspecto-shadow-floating);\n font-family: 'SF Pro Display', 'Segoe UI', 'Inter', sans-serif;\n pointer-events: auto;\n backdrop-filter: blur(18px) saturate(140%);\n -webkit-backdrop-filter: blur(18px) saturate(140%);\n }\n\n .${annotateSidebarHeaderClass} {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid rgba(148, 163, 184, 0.14);\n }\n\n .${annotateSidebarLabelClass} {\n display: flex;\n flex-direction: column;\n gap: 7px;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .${annotateSidebarLabelClass} [data-inspecto-annotate-title=\"true\"] {\n font-size: 16px;\n line-height: 1.15;\n font-weight: 760;\n color: var(--inspecto-text-primary);\n letter-spacing: -0.02em;\n }\n\n .${annotateSidebarLabelClass} [data-inspecto-annotate-header-status=\"true\"] {\n display: inline-flex;\n align-items: center;\n align-self: flex-start;\n min-height: 26px;\n padding: 0 10px;\n border-radius: var(--inspecto-radius-pill);\n background: rgba(148, 163, 184, 0.1);\n border: 1px solid rgba(148, 163, 184, 0.14);\n font-size: 11px;\n line-height: 1.2;\n font-weight: 650;\n color: var(--inspecto-text-secondary);\n }\n\n .${annotateSidebarTextClass} {\n font-size: 12px;\n line-height: 1.55;\n letter-spacing: 0.01em;\n text-transform: none;\n color: var(--inspecto-text-secondary);\n font-weight: 500;\n }\n\n .${annotateSidebarSectionClass} {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n padding: 14px;\n border: 1px solid rgba(148, 163, 184, 0.12);\n border-radius: 20px;\n background: linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(148, 163, 184, 0.04) 100%);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] { gap: 8px; padding: 10px 12px; }\n .${annotateSidebarSectionClass}[data-variant=\"draft\"] { gap: 0; padding: 0; border: none; background: transparent; }\n .${annotateSidebarSectionClass}[data-variant=\"chip-preview\"] { gap: 8px; padding: 12px; background: rgba(255, 255, 255, 0.045); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] { padding: 0; overflow: hidden; background: rgba(255, 255, 255, 0.038); border-color: rgba(148, 163, 184, 0.16); }\n .${annotateSidebarSectionClass}[data-variant=\"latest-session\"] {\n padding: 14px;\n background:\n radial-gradient(circle at top right, rgba(14, 165, 233, 0.12), transparent 34%),\n linear-gradient(180deg, rgba(255, 255, 255, 0.055) 0%, rgba(148, 163, 184, 0.05) 100%);\n border-color: rgba(14, 165, 233, 0.18);\n }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] { padding: 0; gap: 0; background: transparent; border: none; border-radius: 0; opacity: 0.72; }\n\n .${annotateSidebarSectionClass} h3 {\n margin: 0;\n font-size: 12px;\n line-height: 1.2;\n color: var(--inspecto-text-primary);\n font-weight: 700;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] {\n flex: 1 1 auto;\n justify-content: center;\n gap: 12px;\n padding: 20px 6px 8px;\n background: transparent;\n border-color: transparent;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-title=\"true\"] {\n font-size: 18px;\n line-height: 1.18;\n font-weight: 760;\n color: var(--inspecto-text-primary);\n max-width: 20ch;\n letter-spacing: -0.03em;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-body=\"true\"] {\n color: var(--inspecto-text-secondary);\n font-size: 12px;\n line-height: 1.62;\n }\n\n .${annotateSidebarInputClass},\n .${annotateSidebarSelectClass} {\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-md);\n background: rgba(255, 255, 255, 0.06);\n color: var(--inspecto-text-primary);\n font: inherit;\n font-size: 13px;\n outline: none;\n }\n\n .${annotateSidebarInputClass} {\n min-height: 112px;\n padding: 14px 15px;\n resize: vertical;\n line-height: 1.55;\n }\n\n .${annotateSidebarHintClass} {\n font-size: 11px;\n line-height: 1.45;\n color: var(--inspecto-text-tertiary);\n }\n\n .${annotateSidebarChipListClass} { display: flex; flex-wrap: wrap; gap: 6px; }\n\n .${annotateSidebarChipClass} {\n appearance: none;\n border: 1px solid rgba(14, 165, 233, 0.24);\n background: rgba(14, 165, 233, 0.14);\n color: #d7f4ff;\n border-radius: var(--inspecto-radius-pill);\n padding: 6px 9px 6px 11px;\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n line-height: 1.2;\n cursor: default;\n gap: 5px;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;\n }\n\n .${annotateSidebarChipClass}[data-state=\"draft\"] {\n border-color: rgba(96, 165, 250, 0.24);\n background: rgba(96, 165, 250, 0.12);\n color: #bfdbfe;\n }\n\n .${annotateSidebarChipClass}:hover,\n .${annotateSidebarChipClass}:focus-visible {\n outline: none;\n background: rgba(14, 165, 233, 0.22);\n border-color: rgba(14, 165, 233, 0.42);\n color: #ffffff;\n transform: translateY(-1px);\n }\n\n .${annotateSidebarChipClass}[data-state=\"draft\"]:hover,\n .${annotateSidebarChipClass}[data-state=\"draft\"]:focus-visible {\n background: rgba(96, 165, 250, 0.2);\n border-color: rgba(96, 165, 250, 0.42);\n }\n\n .${annotateSidebarChipPanelClass} {\n display: grid;\n grid-template-columns: minmax(72px, auto) minmax(0, 1fr);\n gap: 8px 10px;\n padding: 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-md);\n background: rgba(255, 255, 255, 0.028);\n }\n\n .${annotateSidebarChipFieldClass} {\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .${annotateSidebarChipPanelClass} > .${annotateSidebarChipFieldClass} + div {\n min-width: 0;\n font-size: 12px;\n line-height: 1.45;\n color: var(--inspecto-text-primary);\n word-break: break-word;\n }\n\n .${annotateSidebarSelectClass} { height: 36px; padding: 0 10px; }\n .${annotateSidebarInputClass}:focus, .${annotateSidebarSelectClass}:focus { border-color: var(--inspecto-border-focus); box-shadow: 0 0 0 1px var(--inspecto-border-focus); }\n\n .${annotateTargetListClass}, .${annotateQueueListClass} {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 220px;\n overflow: auto;\n padding: 6px 10px 12px;\n }\n\n .${annotateSidebarTargetItemClass}, .${annotateSidebarQueueItemClass} {\n display: flex;\n flex-direction: column;\n gap: 5px;\n padding: 12px 12px;\n margin: 0;\n border: 1px solid transparent;\n border-radius: 16px;\n background: rgba(255, 255, 255, 0.022);\n cursor: pointer;\n box-sizing: border-box;\n transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;\n }\n\n .${annotateSidebarQueueItemClass}:hover {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(148, 163, 184, 0.16);\n transform: translateY(-1px);\n }\n .${annotateSidebarQueueItemClass}:focus-visible {\n outline: none;\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--inspecto-border-focus);\n box-shadow: 0 0 0 1px var(--inspecto-border-focus);\n }\n .${annotateSidebarQueueItemClass}[data-selected=\"true\"] {\n background: linear-gradient(180deg, rgba(14, 165, 233, 0.12) 0%, rgba(14, 165, 233, 0.07) 100%);\n border-color: rgba(14, 165, 233, 0.28);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 10px 24px rgba(8, 14, 24, 0.16);\n }\n .${annotateSidebarQueueItemClass} > :not(.${annotateSidebarActionsClass}):first-child {\n font-size: 12px;\n line-height: 1.45;\n color: var(--inspecto-text-primary);\n word-break: break-word;\n font-weight: 620;\n }\n .${annotateSidebarQueueItemClass} > .${annotateSidebarQueueMetaClass} { order: 2; font-size: 10px; line-height: 1.4; color: var(--inspecto-text-tertiary); }\n\n .${annotateSidebarTargetItemClass} {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: \"label action\";\n column-gap: 10px;\n align-items: center;\n padding: 10px 12px;\n border-color: rgba(148, 163, 184, 0.12);\n background: rgba(255, 255, 255, 0.02);\n }\n\n .${annotateTargetListClass} > .${annotateSidebarTargetItemClass}:last-child { margin-bottom: 0; }\n\n .${annotateBadgeClass} {\n grid-area: label;\n display: block;\n align-self: auto;\n padding: 0;\n border-radius: 0;\n background: transparent;\n color: var(--inspecto-text);\n font-size: 12px;\n font-weight: 600;\n line-height: 1.4;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .${annotateSidebarEmptyClass}, .${annotateSidebarQueueMetaClass} {\n color: rgba(255, 255, 255, 0.58);\n font-size: 11px;\n line-height: 1.5;\n }\n\n .${annotateSidebarFooterClass} { display: flex; flex-direction: column; gap: 10px; padding-top: 4px; }\n .${annotateSidebarFooterClass} .${annotateSidebarActionsClass} { justify-content: flex-end; align-items: stretch; gap: 10px; }\n .${annotateSidebarActionsClass} { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; justify-content: flex-end; }\n\n .${annotateSidebarButtonClass} {\n appearance: none;\n border: 1px solid var(--inspecto-border-subtle);\n background: rgba(255, 255, 255, 0.05);\n color: var(--inspecto-text-primary);\n border-radius: var(--inspecto-radius-pill);\n padding: 8px 12px;\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;\n }\n\n .${annotateSidebarButtonClass}[data-role=\"mode\"][data-selected=\"true\"] { background: rgba(255, 255, 255, 0.1); color: #ffffff; border-color: transparent; }\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] .${annotateSidebarActionsClass} { gap: 4px; padding: 4px; border: 1px solid var(--inspecto-border-muted); border-radius: var(--inspecto-radius-pill); background: rgba(255, 255, 255, 0.03); flex-wrap: nowrap; }\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] .${annotateSidebarButtonClass}[data-role=\"mode\"] { flex: 1 1 0; justify-content: center; padding: 8px 10px; background: transparent; border-color: transparent; color: var(--inspecto-text-secondary); }\n .${annotateSidebarHeaderClass} .${annotateSidebarButtonClass} { width: 30px; height: 30px; padding: 0; border-radius: var(--inspecto-radius-pill); display: inline-flex; align-items: center; justify-content: center; font-size: 12px; line-height: 1; flex: 0 0 auto; }\n .${annotateSidebarHeaderClass} .${runtimeToggleClass} { overflow: visible; }\n .${annotateSidebarHeaderClass} [data-inspecto-annotate-header-actions-left=\"true\"], .${annotateSidebarHeaderClass} [data-inspecto-annotate-header-actions-right=\"true\"] { padding: 4px; border-radius: 999px; background: rgba(255, 255, 255, 0.025); border: 1px solid rgba(255, 255, 255, 0.05); gap: 4px; flex-wrap: nowrap; flex: 0 0 auto; margin-top: 1px; }\n .${annotateSidebarButtonClass}:hover { background: var(--inspecto-surface-hover); color: #ffffff; border-color: rgba(148, 163, 184, 0.12); transform: translateY(-1px); }\n .${annotateSidebarButtonClass}:disabled { opacity: 0.5; cursor: not-allowed; }\n .${annotateSidebarClass} .${annotateSidebarButtonClass}.primary {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: rgba(14, 165, 233, 0.22);\n box-shadow: var(--inspecto-shadow-accent);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass} {\n min-height: 40px;\n padding: 0 14px;\n font-size: 11px;\n font-weight: 650;\n border-radius: var(--inspecto-radius-pill);\n justify-content: center;\n display: inline-flex;\n align-items: center;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-emphasis=\"secondary\"] {\n background: rgba(255, 255, 255, 0.04);\n color: var(--inspecto-text-secondary);\n border-color: rgba(148, 163, 184, 0.12);\n box-shadow: none;\n opacity: 0.92;\n white-space: nowrap;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"quick-ask\"][data-emphasis=\"secondary\"] {\n background: rgba(255, 255, 255, 0.04);\n color: var(--inspecto-text-secondary);\n border-color: rgba(148, 163, 184, 0.12);\n text-decoration: none;\n min-height: 40px;\n padding: 0 14px;\n box-shadow: none;\n white-space: nowrap;\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-emphasis=\"secondary\"]:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #ffffff;\n border-color: rgba(255, 255, 255, 0.12);\n transform: translateY(-1px);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"quick-ask\"][data-emphasis=\"secondary\"]:hover {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.12);\n color: #ffffff;\n transform: translateY(-1px);\n }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"raw-preview\"] { min-width: 48px; justify-content: center; color: var(--inspecto-text-secondary); background: rgba(255, 255, 255, 0.045); padding: 0 10px; }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"raw-preview\"][data-selected=\"true\"] { background: rgba(93, 82, 243, 0.16); border-color: rgba(93, 82, 243, 0.32); color: #e5e2ff; }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass}[data-role=\"send-all\"] { min-width: 76px; }\n\n .${annotateSidebarInlineActionClass} {\n grid-area: action;\n align-self: center;\n justify-self: end;\n appearance: none;\n border: none;\n background: transparent;\n color: var(--inspecto-text-tertiary);\n width: 20px;\n height: 20px;\n padding: 0;\n font: inherit;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n border-radius: var(--inspecto-radius-pill);\n transition: color 0.15s ease, background 0.15s ease, opacity 0.15s ease;\n }\n\n .${annotateSidebarInlineActionClass}:hover { color: #ffffff; background: var(--inspecto-surface-hover); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 10px; cursor: pointer; font-size: 11px; font-weight: 600; color: var(--inspecto-text-secondary); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary::-webkit-details-marker { display: none; }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] > summary::after { content: '▾'; font-size: 11px; color: rgba(255, 255, 255, 0.38); transition: transform 0.15s ease; }\n .${annotateSidebarSectionClass}[data-variant=\"records\"][open] > summary::after { transform: rotate(180deg); }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] > summary { list-style: none; cursor: pointer; font-size: 10px; font-weight: 600; color: var(--inspecto-text-tertiary); text-transform: none; letter-spacing: 0.01em; }\n .${annotateSidebarSectionClass}[data-variant=\"full-prompt\"] > summary::-webkit-details-marker { display: none; }\n .${annotateSidebarTextClass}[data-variant=\"full-prompt\"] { margin: 6px 0 0; padding: 9px 10px; border: 1px solid var(--inspecto-border-muted); border-radius: var(--inspecto-radius-sm); background: rgba(255, 255, 255, 0.02); color: var(--inspecto-text-secondary); font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace; font-size: 10px; line-height: 1.5; white-space: pre-wrap; word-break: break-word; max-height: 220px; overflow: auto; }\n \n .${annotateConfirmDialogClass} {\n position: absolute;\n inset: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(13, 20, 31, 0.5);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n border-radius: 28px;\n }\n .${annotateConfirmDialogClass} .content {\n width: calc(100% - 48px);\n background: rgba(30, 35, 45, 0.95);\n border: 1px solid rgba(255, 255, 255, 0.12);\n border-radius: 20px;\n box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.05);\n padding: 18px;\n display: flex;\n flex-direction: column;\n gap: 18px;\n }\n .${annotateConfirmDialogClass} p {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: rgba(255, 255, 255, 0.9);\n }\n .${annotateConfirmDialogClass} .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n @keyframes inspecto-fade-out {\n 0% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-4px); pointer-events: none; }\n }\n \n .inspecto-workflow-toast {\n position: absolute;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n background: rgba(28, 28, 28, 0.95);\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: var(--inspecto-radius-pill);\n box-shadow: var(--inspecto-shadow-floating);\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n padding: 6px 14px;\n z-index: 100;\n font-size: 11px;\n font-weight: 600;\n color: #5ad496;\n display: flex;\n align-items: center;\n gap: 6px;\n pointer-events: none;\n animation: inspecto-fade-out 0.3s ease 1.7s forwards;\n }\n .inspecto-workflow-toast::before {\n content: '✓';\n font-size: 12px;\n }\n`\n","import { badgeClass } from './styles-classes.js'\n\nexport const launcherStyles = `\n .${badgeClass} {\n position: fixed;\n bottom: 18px;\n right: 18px;\n z-index: 2147483645;\n background: var(--inspecto-badge-bg);\n color: var(--inspecto-badge-text);\n border: var(--inspecto-badge-border);\n border-radius: var(--inspecto-radius-pill);\n min-width: 128px;\n width: auto;\n min-height: 50px;\n padding: 8px 11px;\n font-size: 12px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n cursor: pointer;\n opacity: 0.98;\n transition: background 0.2s, color 0.2s, opacity 0.2s, box-shadow 0.2s, border-color 0.2s, transform 0.18s ease;\n pointer-events: all;\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 9px;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n position: fixed;\n overflow: visible;\n }\n\n .${badgeClass}-content {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 9px;\n min-width: 0;\n padding-right: 58px;\n }\n\n .${badgeClass}-eyes {\n position: absolute;\n top: 50%;\n right: 22px;\n display: inline-flex;\n align-items: center;\n gap: 3px;\n pointer-events: none;\n padding: 3px 4px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.04);\n border: 1px solid rgba(255, 255, 255, 0.05);\n transform: translateY(-50%);\n transition:\n opacity 0.18s ease,\n background 0.18s ease,\n border-color 0.18s ease;\n opacity: 0.78;\n }\n\n .${badgeClass}-eyes[data-state=\"active\"] { opacity: 1; }\n .${badgeClass}-eyes[data-mood=\"averted\"] {\n background: rgba(255, 255, 255, 0.028);\n border-color: rgba(255, 255, 255, 0.04);\n }\n .${badgeClass}-eyes[data-mood=\"idle\"] {\n background: rgba(255, 255, 255, 0.025);\n border-color: rgba(255, 255, 255, 0.035);\n }\n\n .${badgeClass}-eye {\n width: 14px;\n height: 14px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.92);\n box-shadow:\n inset 0 0 0 1px rgba(17, 17, 19, 0.16),\n 0 1px 2px rgba(0, 0, 0, 0.18);\n position: relative;\n transition: transform 0.18s ease, opacity 0.18s ease;\n opacity: 0.92;\n }\n\n .${badgeClass}-eyes[data-mood=\"idle\"] .${badgeClass}-eye {\n transform: scale(0.96);\n opacity: 0.82;\n }\n\n .${badgeClass}-eyes[data-mood=\"averted\"] .${badgeClass}-eye {\n transform: scaleY(0.92);\n opacity: 0.94;\n }\n\n .${badgeClass}-eye-pupil {\n position: absolute;\n left: 50%;\n top: 50%;\n width: 5px;\n height: 5px;\n margin-left: -2.5px;\n margin-top: -2.5px;\n border-radius: 999px;\n background: rgba(21, 21, 25, 0.92);\n transition: transform 0.14s ease-out;\n will-change: transform;\n }\n\n .${badgeClass}-indicator {\n width: 11px;\n height: 11px;\n border-radius: var(--inspecto-radius-pill);\n flex: 0 0 auto;\n background: rgba(255, 255, 255, 0.44);\n box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.055);\n transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;\n }\n .${badgeClass}-indicator[data-state=\"ready\"] { background: rgba(255, 255, 255, 0.56); box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.05); }\n .${badgeClass}-indicator[data-state=\"inspect\"] { background: #67c6ff; box-shadow: 0 0 0 7px rgba(103, 198, 255, 0.2); }\n .${badgeClass}-indicator[data-state=\"annotate\"] { background: var(--inspecto-accent-primary-strong); box-shadow: 0 0 0 7px rgba(70, 57, 215, 0.2); }\n .${badgeClass}-indicator[data-state=\"paused\"] { background: #f59e0b; box-shadow: 0 0 0 7px rgba(245, 158, 11, 0.18); }\n\n .${badgeClass}-label {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 3px;\n min-width: 0;\n }\n\n .${badgeClass}-title {\n display: inline-flex;\n align-items: center;\n font-size: 9px;\n line-height: 1.15;\n font-weight: 600;\n color: var(--inspecto-text-secondary);\n letter-spacing: 0.03em;\n text-transform: none;\n }\n\n .${badgeClass}-state {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n font-size: 11px;\n line-height: 1.2;\n color: var(--inspecto-text-primary);\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 0;\n font-weight: 700;\n letter-spacing: 0.01em;\n opacity: 1;\n }\n\n .${badgeClass}-state[data-state=\"paused\"] {\n color: #ffd494;\n }\n\n .${badgeClass}-panel {\n display: none;\n position: absolute;\n right: 0;\n bottom: calc(100% + 10px);\n flex-direction: column;\n min-width: 272px;\n gap: 10px;\n padding: 10px;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: 20px;\n background:\n radial-gradient(circle at bottom right, rgba(93, 82, 243, 0.08), transparent 36%),\n rgba(28, 28, 32, 0.96);\n color: var(--inspecto-text-primary);\n box-shadow: 0 22px 40px rgba(0, 0, 0, 0.26);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n }\n\n .${badgeClass}-panel-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 10px;\n padding: 2px 4px 4px;\n }\n\n .${badgeClass}-panel-header-copy {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .${badgeClass}-panel-header-actions {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n }\n\n .${badgeClass}-panel-header [data-inspecto-launcher-panel-title=\"true\"] {\n font-size: 11px;\n font-weight: 700;\n line-height: 1.35;\n color: var(--inspecto-text-primary);\n }\n\n .${badgeClass}-panel-header [data-inspecto-launcher-panel-subtitle=\"true\"] {\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n }\n\n .${badgeClass}-panel-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .${badgeClass}-panel-group[data-inspecto-launcher-utility-group=\"true\"] {\n padding-top: 6px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n gap: 6px;\n }\n\n .${badgeClass}-panel-button {\n appearance: none;\n width: 100%;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: 14px;\n padding: 11px 12px 10px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 4px;\n background: rgba(255, 255, 255, 0.035);\n color: var(--inspecto-text-primary);\n font: inherit;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;\n text-align: left;\n min-height: 84px;\n }\n\n .${badgeClass}-panel-button [data-inspecto-launcher-title=\"true\"] {\n display: block;\n font-size: 11px;\n font-weight: 700;\n line-height: 1.25;\n text-align: left;\n }\n\n .${badgeClass}-panel-button [data-inspecto-launcher-description=\"true\"] {\n display: block;\n font-size: 10px;\n line-height: 1.35;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.56);\n text-align: left;\n max-width: none;\n }\n\n .${badgeClass}-panel-button.active {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: transparent;\n box-shadow: 0 14px 24px rgba(70, 57, 215, 0.28);\n }\n\n .${badgeClass}-panel-button.active [data-inspecto-launcher-description=\"true\"] {\n color: rgba(255, 255, 255, 0.86);\n }\n\n .${badgeClass}-panel-button:hover {\n background: rgba(255, 255, 255, 0.055);\n color: #ffffff;\n border-color: rgba(255, 255, 255, 0.1);\n transform: translateY(-1px);\n box-shadow: 0 8px 14px rgba(0, 0, 0, 0.12);\n }\n\n .${badgeClass}-panel-button:disabled { cursor: not-allowed; opacity: 0.5; }\n\n .${badgeClass}-panel-toggle-button {\n appearance: none;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-pill);\n background: var(--inspecto-surface-subtle);\n color: var(--inspecto-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n }\n\n .${badgeClass}-panel-toggle-button svg {\n width: 14px;\n height: 14px;\n display: block;\n }\n\n .${badgeClass}-panel-toggle-button[aria-pressed=\"true\"] {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n color: #ffffff;\n border-color: transparent;\n box-shadow: 0 10px 18px rgba(70, 57, 215, 0.24);\n }\n\n .${badgeClass}-panel-toggle-button:hover {\n transform: translateY(-1px);\n border-color: rgba(255, 255, 255, 0.12);\n }\n\n .${badgeClass}-panel-status-text {\n font-size: 10px;\n font-weight: 600;\n line-height: 1.2;\n color: var(--inspecto-text-secondary);\n white-space: nowrap;\n text-align: right;\n }\n\n .${badgeClass}-panel-hint {\n font-size: 10px;\n line-height: 1.4;\n color: rgba(255, 255, 255, 0.46);\n padding: 0;\n }\n\n .${badgeClass}.active {\n background: var(--inspecto-surface-floating);\n color: var(--inspecto-text-primary);\n border: 1px solid var(--inspecto-border-subtle);\n box-shadow: 0 16px 30px rgba(0, 0, 0, 0.22);\n }\n\n .${badgeClass}.disabled {\n background: rgba(20, 20, 22, 0.72);\n color: rgba(229, 229, 229, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.06);\n }\n\n .${badgeClass}:hover {\n opacity: 1;\n border-color: rgba(255, 255, 255, 0.14);\n transform: translateY(-1px) scale(1.02);\n }\n\n .${badgeClass}:hover .${badgeClass}-indicator {\n transform: scale(1.04);\n }\n`\n","import {\n classClass,\n dimClass,\n errorMsgClass,\n idClass,\n loadingSpinnerClass,\n menuClass,\n menuContextPreviewClass,\n menuContextSummaryClass,\n menuContextToggleClass,\n menuInputClass,\n menuInputIconClass,\n menuInputWrapperClass,\n menuItemClass,\n menuMetaClass,\n menuSectionClass,\n menuTitleClass,\n overlayClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n separatorClass,\n shortcutIconClass,\n sourceClass,\n tagClass,\n tooltipBottomClass,\n tooltipClass,\n tooltipTopClass,\n} from './styles-classes.js'\n\nexport const overlayMenuStyles = `\n .${overlayClass} {\n position: fixed;\n pointer-events: none;\n z-index: 2147483646;\n border: 1px dashed var(--inspecto-overlay-border);\n background: var(--inspecto-overlay-bg);\n box-sizing: border-box;\n transition: all 0.05s linear;\n }\n\n .${tooltipClass} {\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n background: var(--inspecto-surface-floating);\n color: var(--inspecto-text-primary);\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-md);\n box-shadow: var(--inspecto-shadow-floating);\n padding: 7px 10px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n font-size: 11px;\n line-height: 1.45;\n transition: all 0.05s linear;\n display: flex;\n flex-direction: column;\n gap: 3px;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n }\n\n .${tooltipClass}::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n }\n\n .${tooltipTopClass}::after {\n bottom: -6px;\n left: var(--inspecto-arrow-left, 10px);\n border-width: 6px 6px 0 6px;\n border-color: var(--inspecto-surface-floating) transparent transparent transparent;\n }\n\n .${tooltipBottomClass}::after {\n top: -6px;\n left: var(--inspecto-arrow-left, 10px);\n border-width: 0 6px 6px 6px;\n border-color: transparent transparent var(--inspecto-surface-floating) transparent;\n }\n\n .${tooltipClass}::before {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n }\n\n .${tooltipTopClass}::before {\n bottom: -7px;\n left: calc(var(--inspecto-arrow-left, 10px) - 1px);\n border-width: 7px 7px 0 7px;\n border-color: var(--inspecto-border-subtle) transparent transparent transparent;\n }\n\n .${tooltipBottomClass}::before {\n top: -7px;\n left: calc(var(--inspecto-arrow-left, 10px) - 1px);\n border-width: 0 7px 7px 7px;\n border-color: transparent transparent var(--inspecto-border-subtle) transparent;\n }\n\n .${tagClass},\n .${idClass} {\n color: #d7b4ff;\n font-weight: 600;\n font-family: monospace;\n }\n\n .${classClass} {\n color: #9ad8ff;\n font-family: monospace;\n }\n\n .${dimClass} {\n color: var(--inspecto-text-tertiary);\n margin-left: 4px;\n }\n\n .${separatorClass} {\n height: 1px;\n background: var(--inspecto-border-muted);\n margin: 3px -10px;\n opacity: 1;\n }\n\n .${sourceClass} {\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 10px;\n color: var(--inspecto-text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n }\n\n .${menuClass} {\n position: fixed;\n z-index: 2147483647;\n background: var(--inspecto-surface-floating);\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-lg);\n padding: 10px;\n width: 304px;\n max-width: calc(100vw - 16px);\n box-sizing: border-box;\n box-shadow: var(--inspecto-shadow-floating);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n color: var(--inspecto-text-primary);\n }\n\n .${menuTitleClass} {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 8px;\n margin: 0 0 8px 0;\n }\n\n .${menuTitleClass} strong {\n font-size: 14px;\n line-height: 1.3;\n color: var(--inspecto-text-primary);\n }\n\n .${menuMetaClass} {\n font-size: 10px;\n line-height: 1.35;\n color: var(--inspecto-text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: 0.82;\n }\n\n .${menuSectionClass} {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .${menuSectionClass} + .${menuSectionClass} {\n margin-top: 6px;\n }\n\n .${menuInputWrapperClass} {\n display: flex;\n align-items: center;\n border: 1px solid var(--inspecto-border-subtle);\n border-radius: var(--inspecto-radius-lg);\n background: rgba(255, 255, 255, 0.045);\n padding: 8px 10px;\n }\n\n .${menuInputWrapperClass}:focus-within {\n border-color: var(--inspecto-border-focus);\n box-shadow: 0 0 0 1px var(--inspecto-border-focus);\n }\n\n .${menuInputClass} {\n width: 100%;\n border: none;\n outline: none;\n font-size: 14px;\n color: var(--inspecto-text-primary);\n background: transparent;\n }\n\n .${menuInputClass}::placeholder {\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuInputIconClass} {\n color: var(--inspecto-text-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n }\n\n .${menuInputIconClass}:hover {\n color: var(--inspecto-text-primary);\n }\n\n .${menuContextSummaryClass} {\n padding: 0 10px;\n font-size: 10px;\n line-height: 1.4;\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuContextToggleClass} {\n align-self: flex-start;\n padding: 0 10px;\n border: none;\n background: transparent;\n color: var(--inspecto-text-tertiary);\n font-size: 10px;\n line-height: 1.4;\n cursor: pointer;\n }\n\n .${menuContextToggleClass}:hover {\n color: var(--inspecto-text-secondary);\n }\n\n .${menuContextPreviewClass} {\n padding: 7px 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-sm);\n background: rgba(255, 255, 255, 0.02);\n color: var(--inspecto-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 10px;\n line-height: 1.5;\n white-space: pre-wrap;\n }\n\n .${menuItemClass} {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid var(--inspecto-border-muted);\n border-radius: var(--inspecto-radius-sm);\n background: rgba(255, 255, 255, 0.018);\n color: var(--inspecto-text-secondary);\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;\n }\n\n .${menuItemClass}:hover {\n background: rgba(255, 255, 255, 0.06);\n border-color: var(--inspecto-border-subtle);\n }\n\n .${menuItemClass}[data-role=\"open-primary\"] {\n background: rgba(93, 82, 243, 0.12);\n border-color: rgba(93, 82, 243, 0.26);\n color: #ffffff;\n }\n\n .${menuItemClass}[data-role=\"open-primary\"] .${shortcutIconClass} {\n color: var(--inspecto-text-secondary);\n }\n\n .${menuItemClass}[data-role=\"open-primary\"]:hover {\n background: rgba(93, 82, 243, 0.18);\n border-color: rgba(93, 82, 243, 0.36);\n }\n\n .${menuItemClass}[data-role=\"ai-secondary\"] {\n background: rgba(255, 255, 255, 0.015);\n }\n\n .${menuItemClass}[data-role=\"open-icon\"] {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n padding: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--inspecto-radius-pill);\n background: var(--inspecto-surface-subtle);\n border-color: var(--inspecto-border-subtle);\n color: var(--inspecto-text-secondary);\n font-size: 14px;\n line-height: 1;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n }\n\n .${menuItemClass}[data-role=\"runtime-context-toggle\"] {\n flex: 0 0 auto;\n width: 28px;\n height: 28px;\n padding: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--inspecto-radius-pill);\n font-size: 13px;\n line-height: 1;\n }\n\n .${menuItemClass}[data-role=\"open-icon\"]:hover {\n background: var(--inspecto-surface-hover);\n border-color: var(--inspecto-border-subtle);\n color: var(--inspecto-text-primary);\n }\n\n .${runtimeToggleClass} {\n position: relative;\n overflow: visible;\n }\n\n .${runtimeToggleIconClass} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n font-size: 16px;\n transform: translateY(0.5px);\n }\n\n .${runtimeToggleBadgeClass} {\n position: absolute;\n top: -5px;\n right: -5px;\n min-width: 15px;\n height: 15px;\n padding: 0 4px;\n border-radius: var(--inspecto-radius-pill);\n background: #ef4444;\n color: #ffffff;\n font-size: 9px;\n font-weight: 700;\n line-height: 15px;\n text-align: center;\n box-shadow: 0 0 0 2px var(--inspecto-surface-floating);\n pointer-events: none;\n }\n\n .${runtimeToggleClass}[data-visual-state=\"inactive\"] {\n background: rgba(255, 255, 255, 0.03);\n border-color: var(--inspecto-border-muted);\n color: var(--inspecto-text-secondary);\n }\n\n .${runtimeToggleClass}[data-visual-state=\"mixed\"] {\n background: rgba(239, 68, 68, 0.08);\n border-color: rgba(239, 68, 68, 0.24);\n color: #fda4af;\n }\n\n .${runtimeToggleClass}[data-visual-state=\"active\"] {\n background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%);\n border-color: transparent;\n color: #ffffff;\n box-shadow: var(--inspecto-shadow-accent);\n }\n\n .${runtimeToggleClass}[data-visual-state=\"active\"]:hover {\n background: linear-gradient(180deg, #6d63ff 0%, var(--inspecto-accent-primary) 100%);\n }\n\n .${menuItemClass} .${shortcutIconClass} {\n margin-left: auto;\n color: var(--inspecto-text-tertiary);\n }\n\n .${menuItemClass}:hover .${shortcutIconClass} {\n color: var(--inspecto-hover-icon);\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n .${loadingSpinnerClass} {\n width: 14px;\n height: 14px;\n border: 2px solid var(--inspecto-overlay-border);\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.7s linear infinite;\n margin: 4px auto;\n display: block;\n }\n\n .${errorMsgClass} {\n font-size: 11px;\n color: var(--inspecto-error-color);\n padding: 4px 8px;\n text-align: center;\n }\n`\n","export const darkVars = `\n --inspecto-surface-floating: rgba(20, 20, 22, 0.94);\n --inspecto-surface-raised: rgba(255, 255, 255, 0.045);\n --inspecto-surface-subtle: rgba(255, 255, 255, 0.035);\n --inspecto-surface-hover: rgba(255, 255, 255, 0.08);\n --inspecto-border-subtle: rgba(255, 255, 255, 0.08);\n --inspecto-border-muted: rgba(255, 255, 255, 0.04);\n --inspecto-border-focus: rgba(93, 82, 243, 0.95);\n --inspecto-text-primary: rgba(255, 255, 255, 0.9);\n --inspecto-text-secondary: rgba(255, 255, 255, 0.72);\n --inspecto-text-tertiary: rgba(255, 255, 255, 0.46);\n --inspecto-accent-primary: #5d52f3;\n --inspecto-accent-primary-strong: #4639d7;\n --inspecto-success-color: #10b981;\n --inspecto-shadow-floating: 0 20px 48px rgba(0, 0, 0, 0.28);\n --inspecto-shadow-accent: 0 8px 18px rgba(79, 70, 229, 0.28);\n --inspecto-radius-pill: 999px;\n --inspecto-radius-sm: 12px;\n --inspecto-radius-md: 14px;\n --inspecto-radius-lg: 18px;\n --inspecto-radius-xl: 20px;\n --inspecto-menu-bg: #252526;\n --inspecto-menu-border: #454545;\n --inspecto-menu-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n --inspecto-text: #cccccc;\n --inspecto-text-muted: #858585;\n --inspecto-hover-bg: #04395e;\n --inspecto-hover-text: #ffffff;\n --inspecto-hover-icon: #ffffff;\n --inspecto-input-bg: #3c3c3c;\n --inspecto-input-border: #007acc;\n --inspecto-shortcut-text: #858585;\n --inspecto-badge-bg: rgba(30, 30, 30, 0.7);\n --inspecto-badge-text: #e5e5e5;\n --inspecto-badge-active-bg: #007acc;\n --inspecto-badge-active-text: #ffffff;\n --inspecto-badge-border: 1px solid rgba(255, 255, 255, 0.1);\n --inspecto-tooltip-bg: #222222;\n --inspecto-tooltip-text: #cccccc;\n --inspecto-tooltip-border: #444;\n --inspecto-tooltip-shadow: 0 2px 10px rgba(0,0,0,0.5);\n --inspecto-tag-color: #d16969;\n --inspecto-id-color: #d16969;\n --inspecto-class-color: #9cdcfe;\n --inspecto-dim-color: #858585;\n --inspecto-error-color: #ef4444;\n`\n\nexport const themeStyles = `\n :host {\n --inspecto-surface-floating: rgba(20, 20, 22, 0.94);\n --inspecto-surface-raised: rgba(255, 255, 255, 0.045);\n --inspecto-surface-subtle: rgba(255, 255, 255, 0.035);\n --inspecto-surface-hover: rgba(255, 255, 255, 0.08);\n --inspecto-border-subtle: rgba(255, 255, 255, 0.08);\n --inspecto-border-muted: rgba(255, 255, 255, 0.04);\n --inspecto-border-focus: rgba(93, 82, 243, 0.95);\n --inspecto-text-primary: rgba(255, 255, 255, 0.9);\n --inspecto-text-secondary: rgba(255, 255, 255, 0.72);\n --inspecto-text-tertiary: rgba(255, 255, 255, 0.46);\n --inspecto-accent-primary: #5d52f3;\n --inspecto-accent-primary-strong: #4639d7;\n --inspecto-success-color: #10b981;\n --inspecto-shadow-floating: 0 20px 48px rgba(0, 0, 0, 0.28);\n --inspecto-shadow-accent: 0 8px 18px rgba(79, 70, 229, 0.28);\n --inspecto-radius-pill: 999px;\n --inspecto-radius-sm: 12px;\n --inspecto-radius-md: 14px;\n --inspecto-radius-lg: 18px;\n --inspecto-radius-xl: 20px;\n --inspecto-menu-bg: #ffffff;\n --inspecto-menu-border: #d4d4d4;\n --inspecto-menu-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n --inspecto-text: #333333;\n --inspecto-text-muted: #6b7280;\n --inspecto-hover-bg: #0060c0;\n --inspecto-hover-text: #ffffff;\n --inspecto-hover-icon: #ffffff;\n --inspecto-input-bg: #ffffff;\n --inspecto-input-border: #007acc;\n --inspecto-shortcut-text: #9ca3af;\n --inspecto-badge-bg: rgba(30, 30, 30, 0.7);\n --inspecto-badge-text: #e5e5e5;\n --inspecto-badge-active-bg: #007acc;\n --inspecto-badge-active-text: #ffffff;\n --inspecto-badge-border: 1px solid rgba(255, 255, 255, 0.1);\n --inspecto-overlay-border: #4285f4;\n --inspecto-overlay-bg: rgba(66, 133, 244, 0.2);\n --inspecto-tooltip-bg: #ffffff;\n --inspecto-tooltip-text: #333333;\n --inspecto-tooltip-border: #ccc;\n --inspecto-tooltip-shadow: 0 2px 10px rgba(0,0,0,0.1);\n --inspecto-tag-color: #8b008b;\n --inspecto-id-color: #8b008b;\n --inspecto-class-color: #00008b;\n --inspecto-dim-color: #555555;\n --inspecto-error-color: #ef4444;\n }\n\n :host([data-theme=\"dark\"]) {\n ${darkVars}\n }\n\n @media (prefers-color-scheme: dark) {\n :host(:not([data-theme=\"light\"])) {\n ${darkVars}\n }\n }\n`\n","import { annotateStyles } from './styles-annotate.js'\nimport { launcherStyles } from './styles-launcher.js'\nimport { overlayMenuStyles } from './styles-overlay-menu.js'\nimport { themeStyles } from './styles-theme.js'\nexport * from './styles-classes.js'\n\nexport function applyHeaderIconButtonStyles(button: HTMLButtonElement): void {\n button.style.width = '28px'\n button.style.height = '28px'\n button.style.padding = '0'\n button.style.borderWidth = '1px'\n button.style.borderStyle = 'solid'\n button.style.borderColor = 'var(--inspecto-border-subtle)'\n button.style.background = 'var(--inspecto-surface-subtle)'\n button.style.color = 'var(--inspecto-text-secondary)'\n button.style.font = '600 11px/1 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n button.style.borderRadius = 'var(--inspecto-radius-pill)'\n button.style.display = 'inline-flex'\n button.style.alignItems = 'center'\n button.style.justifyContent = 'center'\n button.style.transition =\n 'background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease'\n}\n\nexport const inspectorStyles = `\n ${themeStyles}\n ${overlayMenuStyles}\n ${launcherStyles}\n ${annotateStyles}\n`\n","export const bugIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M17.416 2.62412C17.7607 2.39435 17.8538 1.9287 17.624 1.58405C17.3943 1.23941 16.9286 1.14628 16.584 1.37604L13.6687 3.31955C13.1527 3.11343 12.5897 3.00006 12.0001 3.00006C11.4105 3.00006 10.8474 3.11345 10.3314 3.31962L7.41603 1.37604C7.07138 1.14628 6.60573 1.23941 6.37596 1.58405C6.1462 1.9287 6.23933 2.39435 6.58397 2.62412L8.9437 4.19727C8.24831 4.84109 7.75664 5.70181 7.57617 6.6719C8.01128 6.55973 8.46749 6.50006 8.93763 6.50006H15.0626C15.5328 6.50006 15.989 6.55973 16.4241 6.6719C16.2436 5.70176 15.7519 4.841 15.0564 4.19717L17.416 2.62412Z\" fill=\"currentColor\"></path> <path d=\"M1.25 14.0001C1.25 13.5859 1.58579 13.2501 2 13.2501H5V11.9376C5 11.1019 5.26034 10.327 5.70435 9.68959L3.22141 8.69624C2.83684 8.54238 2.6498 8.10589 2.80366 7.72131C2.95752 7.33673 3.39401 7.1497 3.77859 7.30356L6.91514 8.55841C7.50624 8.20388 8.19807 8.00006 8.9375 8.00006H15.0625C15.8019 8.00006 16.4938 8.20388 17.0849 8.55841L20.2214 7.30356C20.606 7.1497 21.0425 7.33673 21.1963 7.72131C21.3502 8.10589 21.1632 8.54238 20.7786 8.69624L18.2957 9.68959C18.7397 10.327 19 11.1019 19 11.9376V13.2501H22C22.4142 13.2501 22.75 13.5859 22.75 14.0001C22.75 14.4143 22.4142 14.7501 22 14.7501H19V15.0001C19 16.1808 18.7077 17.2932 18.1915 18.2689L20.7786 19.3039C21.1632 19.4578 21.3502 19.8943 21.1963 20.2789C21.0425 20.6634 20.606 20.8505 20.2214 20.6966L17.3288 19.5394C16.1974 20.8664 14.5789 21.7655 12.75 21.9604V15.0001C12.75 14.5858 12.4142 14.2501 12 14.2501C11.5858 14.2501 11.25 14.5858 11.25 15.0001V21.9604C9.42109 21.7655 7.80265 20.8664 6.67115 19.5394L3.77859 20.6966C3.39401 20.8505 2.95752 20.6634 2.80366 20.2789C2.6498 19.8943 2.83684 19.4578 3.22141 19.3039L5.80852 18.2689C5.29231 17.2932 5 16.1808 5 15.0001V14.7501H2C1.58579 14.7501 1.25 14.4143 1.25 14.0001Z\" fill=\"currentColor\"></path> </g></svg>`\n\nexport const inspectFilledIconSvg = `<svg viewBox=\"0 0 512 512\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>mouse-select-filled</title> <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"add\" fill=\"currentColor\" transform=\"translate(62.226343, 62.126933)\"> <polygon id=\"Fill-6\" points=\"7.10542736e-15 7.10542736e-15 364.440324 103.2064 276.37835 189.916864 369.025732 282.559083 282.478894 369.108395 189.860868 276.466176 103.10699 364.539733\"> </polygon> </g> </g> </g></svg>`\n\nexport const cssIconSvg = `<svg height=\"200px\" width=\"200px\" version=\"1.1\" id=\"_x32_\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 512 512\" xml:space=\"preserve\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <style type=\"text/css\"> .st0{fill:currentColor;} </style> <g> <path class=\"st0\" d=\"M378.413,0H208.297h-13.182L185.8,9.314L57.02,138.102l-9.314,9.314v13.176v265.514 c0,47.36,38.528,85.895,85.896,85.895h244.811c47.353,0,85.881-38.535,85.881-85.895V85.896C464.294,38.528,425.766,0,378.413,0z M432.497,426.105c0,29.877-24.214,54.091-54.084,54.091H133.602c-29.884,0-54.098-24.214-54.098-54.091V160.591h83.716 c24.885,0,45.077-20.178,45.077-45.07V31.804h170.116c29.87,0,54.084,24.214,54.084,54.092V426.105z\"></path> <path class=\"st0\" d=\"M169.574,268.949c5.837,0,9.104,2.171,12.499,6.786c2.709,3.805,5.432,5.167,8.825,5.167 c5.028,0,9.105-3.673,9.105-8.965c0-2.171-0.684-4.078-1.774-5.977c-4.622-8.288-14.802-14.669-28.655-14.669 c-16.171,0-28.124,7.603-33.012,22.685c-1.899,6.11-2.57,10.865-2.57,24.989c0,14.125,0.67,18.881,2.57,24.99 c4.888,15.081,16.841,22.685,33.012,22.685c13.853,0,24.033-6.382,28.655-14.67c1.09-1.899,1.774-3.805,1.774-5.976 c0-5.3-4.078-8.965-9.105-8.965c-3.393,0-6.116,1.361-8.825,5.16c-3.394,4.622-6.662,6.794-12.499,6.794 c-7.471,0-11.814-3.938-13.853-10.187c-1.089-3.393-1.494-6.654-1.494-19.83c0-13.175,0.406-16.436,1.494-19.829 C157.76,272.887,162.103,268.949,169.574,268.949z\"></path> <path class=\"st0\" d=\"M255.149,289.595l-4.888-0.684c-10.725-1.494-14.398-5.02-14.398-10.187c0-5.837,4.343-9.915,12.498-9.915 c5.698,0,11.409,1.634,15.892,3.805c1.899,0.95,3.938,1.494,5.837,1.494c4.888,0,8.7-3.666,8.7-8.693 c0-3.261-1.494-5.977-4.762-8.016c-5.432-3.394-15.612-6.11-25.806-6.11c-19.97,0-32.733,11.269-32.733,28.25 c0,16.304,10.32,25.13,29.2,27.713l4.901,0.677c10.99,1.494,14.258,4.888,14.258,10.32c0,6.389-5.306,10.872-15.082,10.872 c-6.787,0-12.219-1.767-19.83-5.977c-1.634-0.956-3.672-1.634-5.837-1.634c-5.166,0-8.965,3.938-8.965,8.832 c0,3.254,1.634,6.382,4.748,8.42c6.116,3.799,16.031,7.876,29.074,7.876c24.032,0,36.266-12.358,36.266-29.067 C284.223,300.865,274.307,292.311,255.149,289.595z\"></path> <path class=\"st0\" d=\"M338.697,289.595l-4.888-0.684c-10.738-1.494-14.398-5.02-14.398-10.187c0-5.837,4.344-9.915,12.484-9.915 c5.712,0,11.423,1.634,15.892,3.805c1.913,0.95,3.952,1.494,5.851,1.494c4.887,0,8.686-3.666,8.686-8.693 c0-3.261-1.494-5.977-4.748-8.016c-5.432-3.394-15.626-6.11-25.806-6.11c-19.969,0-32.733,11.269-32.733,28.25 c0,16.304,10.32,25.13,29.2,27.713l4.888,0.677c11.004,1.494,14.258,4.888,14.258,10.32c0,6.389-5.292,10.872-15.068,10.872 c-6.8,0-12.232-1.767-19.829-5.977c-1.634-0.956-3.673-1.634-5.851-1.634c-5.153,0-8.965,3.938-8.965,8.832 c0,3.254,1.634,6.382,4.762,8.42c6.117,3.799,16.032,7.876,29.06,7.876c24.047,0,36.266-12.358,36.266-29.067 C367.758,300.865,357.843,292.311,338.697,289.595z\"></path> </g> </g></svg>`\n\nexport const pureMarkIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"1.75\"></circle><path d=\"M12 6.5C8.962 6.5 6.5 8.962 6.5 12S8.962 17.5 12 17.5H17.5V12C17.5 8.962 15.038 6.5 12 6.5Z\" fill=\"currentColor\" opacity=\"0.28\"></path><path d=\"M12 9V15\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path><path d=\"M9 12H15\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path></svg>`\n\nexport const closeIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g clip-path=\"url(#clip0_429_11083)\"> <path d=\"M7 7.00006L17 17.0001M7 17.0001L17 7.00006\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> <defs> <clipPath id=\"clip0_429_11083\"> <rect width=\"24\" height=\"24\" fill=\"currentColor\"></rect> </clipPath> </defs> </g></svg>`\n\nexport const pauseIconSvg = `<svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M7 1H2V15H7V1Z\" fill=\"currentColor\"></path> <path d=\"M14 1H9V15H14V1Z\" fill=\"currentColor\"></path> </g></svg>`\n\nexport const playIconSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M21.4086 9.35258C23.5305 10.5065 23.5305 13.4935 21.4086 14.6474L8.59662 21.6145C6.53435 22.736 4 21.2763 4 18.9671L4 5.0329C4 2.72368 6.53435 1.26402 8.59661 2.38548L21.4086 9.35258Z\" fill=\"currentColor\"></path> </g></svg>`\n","import type { InspectoMessages, InspectoLocale } from '@inspecto-dev/types'\n\nconst DEFAULT_LOCALE = 'en'\n\nconst EN_MESSAGES: Record<string, string> = {\n 'launcher.title': 'Inspecto',\n 'launcher.panel.title': 'Choose a mode',\n 'launcher.panel.subtitle': 'Your next page click will follow this mode.',\n 'launcher.action.inspect.title': 'Inspect',\n 'launcher.action.inspect.description': 'Click one component to inspect or ask AI',\n 'launcher.action.annotate.title': 'Annotate',\n 'launcher.action.annotate.description':\n 'Capture notes across components, then create a task or ask once',\n 'launcher.action.pause.title': 'Pause selection',\n 'launcher.action.pause.description': 'Use the page normally for a moment',\n 'launcher.action.resume.title': 'Resume selection',\n 'launcher.action.resume.description': 'Start capturing page clicks again',\n 'launcher.hint.hotkeyDisabled':\n 'Hotkey disabled. Open the launcher to choose Inspect or Annotate.',\n 'launcher.hint.hotkeyQuickJump': 'Hotkey: {hotkey} for quick jump',\n 'launcher.state.paused': 'Selection paused',\n 'launcher.state.annotate': 'Annotate mode',\n 'launcher.state.inspect': 'Inspect mode',\n 'launcher.state.ready': 'Ready',\n 'menu.openInEditor': 'Open in Editor',\n 'menu.attachRuntime': 'Attach runtime context',\n 'menu.runtimeEnabled': 'Runtime context enabled',\n 'menu.runtimeFixOnly': 'Runtime context defaults to fix actions only until you choose otherwise',\n 'menu.attachCss': 'Attach CSS context',\n 'menu.cssEnabled': 'CSS context enabled',\n 'menu.ask.placeholder.default': 'Add a custom ask or extra instruction...',\n 'menu.ask.placeholder.fallback': 'Ask anything about this component...',\n 'menu.ask.placeholder.setup': 'Inspecto setup needs attention...',\n 'menu.ask.ariaLabel': 'Custom ask',\n 'menu.preview.show': 'Show preview',\n 'menu.preview.hide': 'Hide preview',\n 'menu.sending': 'Sending...',\n 'menu.error.openIde': 'Unable to open file in the editor.',\n 'annotate.mode.title': 'Annotate mode',\n 'annotate.quickCapture.toggle': 'Toggle quick capture',\n 'annotate.exitMode': 'Exit annotate mode',\n 'annotate.empty.title': 'Start by clicking a component',\n 'annotate.empty.body':\n 'Each click opens one note. Save a few notes first, then add an overall goal and create a task or ask once.',\n 'annotate.instruction.placeholder': 'Overall goal for this batch (optional)...',\n 'annotate.instruction.ariaLabel': 'Overall goal',\n 'annotate.previewMessage': 'Preview message',\n 'annotate.batchPayload': 'Batch payload',\n 'annotate.previewRawPrompt': 'View raw prompt payload',\n 'annotate.copyContext': 'Copy context',\n 'annotate.copyContext.copied': 'Copied',\n 'annotate.copyContext.failed': 'Failed to copy',\n 'annotate.saveNote': 'Save note',\n 'annotate.updateNote': 'Update note',\n 'annotate.askAi': 'Ask AI',\n 'annotate.askAiHint': 'Ask AI',\n 'annotate.createTask': 'Create Task',\n 'annotate.createTaskHint': 'Create Task',\n 'annotate.recommendedAction': 'Recommended: {action}',\n 'annotate.recommendedAction.agentHint': 'Recommended: {action}',\n 'annotate.recommendedAction.askHint': 'Recommended: {action}',\n 'annotate.sent': 'Sent',\n 'annotate.taskCreated': 'Created',\n 'annotate.cancel': 'Cancel',\n 'annotate.delete': 'Delete',\n 'annotate.composer.placeholder': 'What should change for this component?',\n 'annotate.records.none': 'No records included yet.',\n 'annotate.target.unknown': 'Unknown target',\n 'annotate.source.unknown': 'Unknown source',\n 'annotate.note.optionalEmpty': 'Optional note left empty.',\n 'annotate.note.none': 'No note provided',\n 'annotate.runtimeErrors': '{count} errors',\n 'annotate.liveStatus.quickAskSending': 'Sending notes to your IDE assistant.',\n 'annotate.liveStatus.createTaskSending': 'Creating a task from your notes.',\n 'annotate.liveStatus.quickAskSent': 'Notes sent to your IDE assistant.',\n 'annotate.liveStatus.taskCreated': 'Task created from your notes.',\n 'annotate.latestSession.title': 'Current task',\n 'annotate.latestSession.refresh': 'Refresh current task',\n 'annotate.latestSession.meta.loaded': '{count} annotations',\n 'annotate.latestSession.meta.summary': 'Refresh to load details',\n 'annotate.latestSession.loading': 'Refreshing latest task...',\n 'annotate.latestSession.pending': '',\n 'annotate.latestSession.acknowledged': 'AI acknowledged.',\n 'annotate.latestSession.inProgress': 'AI working...',\n 'annotate.latestSession.resolved': 'AI finished. Check the page.',\n 'annotate.latestSession.dismissed': 'Task dismissed.',\n 'annotate.latestSession.noDetail': 'Sent to AI.',\n 'annotate.latestSession.hint.pending': 'If it has not started, ask AI to continue.',\n 'annotate.latestSession.hint.acknowledged': 'AI connected. Waiting for update.',\n 'annotate.latestSession.hint.in_progress': 'Stay for updates, or refresh later.',\n 'annotate.latestSession.hint.resolved': 'Review the result. Create a follow-up if needed.',\n 'annotate.latestSession.reconnect': 'Reconnect',\n 'annotate.latestSession.error.disconnected':\n 'Connection lost. Reconnect to keep following this task.',\n 'annotate.latestSession.status.pending': 'waiting',\n 'annotate.latestSession.status.acknowledged': 'acknowledged',\n 'annotate.latestSession.status.in_progress': 'in progress',\n 'annotate.latestSession.status.resolved': 'complete',\n 'annotate.latestSession.status.dismissed': 'dismissed',\n 'annotate.header.capturing': 'Capturing clicks',\n 'annotate.header.quickCaptureOn': '{label} on',\n 'runtime.summary.error.one': '{count} runtime error',\n 'runtime.summary.error.other': '{count} runtime errors',\n 'runtime.summary.request.one': '{count} failed request',\n 'runtime.summary.request.other': '{count} failed requests',\n 'workflow.confirm': 'Confirm to execute \"{label}\"?',\n 'workflow.confirm.ok': 'Confirm',\n 'workflow.feedback.executed': 'Execution started',\n}\n\nconst ZH_CN_MESSAGES: Record<string, string> = {\n 'launcher.panel.title': '选择模式',\n 'launcher.panel.subtitle': '你下一次页面点击将按当前模式执行。',\n 'launcher.action.inspect.title': '检查',\n 'launcher.action.inspect.description': '点击一个组件进行检查或向 AI 提问',\n 'launcher.action.annotate.title': '批注',\n 'launcher.action.annotate.description': '跨组件记录批注,然后创建任务或一次性提问',\n 'launcher.action.pause.title': '暂停选择',\n 'launcher.action.pause.description': '暂时按正常方式操作页面',\n 'launcher.action.resume.title': '恢复选择',\n 'launcher.action.resume.description': '重新开始捕获页面点击',\n 'launcher.hint.hotkeyDisabled': '快捷键已禁用。打开启动器后选择“检查”或“批注”。',\n 'launcher.hint.hotkeyQuickJump': '快捷键:{hotkey}(快速跳转)',\n 'launcher.state.paused': '已暂停选择',\n 'launcher.state.annotate': '批注模式',\n 'launcher.state.inspect': '检查模式',\n 'launcher.state.ready': '就绪',\n 'menu.openInEditor': '在编辑器中打开',\n 'menu.attachRuntime': '附加运行时上下文',\n 'menu.runtimeEnabled': '已启用运行时上下文',\n 'menu.runtimeFixOnly': '运行时上下文默认仅用于修复类操作,直到你手动切换',\n 'menu.attachCss': '附加 CSS 上下文',\n 'menu.cssEnabled': '已启用 CSS 上下文',\n 'menu.ask.placeholder.default': '添加自定义提问或额外说明...',\n 'menu.ask.placeholder.fallback': '询问与此组件相关的任何问题...',\n 'menu.ask.placeholder.setup': 'Inspecto 环境需要检查...',\n 'menu.ask.ariaLabel': '自定义提问',\n 'menu.preview.show': '显示预览',\n 'menu.preview.hide': '隐藏预览',\n 'menu.sending': '发送中...',\n 'menu.error.openIde': '无法在编辑器中打开文件。',\n 'annotate.mode.title': '批注模式',\n 'annotate.quickCapture.toggle': '切换快速捕获',\n 'annotate.exitMode': '退出批注模式',\n 'annotate.empty.title': '先点击一个组件开始',\n 'annotate.empty.body':\n '每次点击可记录一条批注。先保存几条,再补充整体目标,然后创建任务或一次性提问。',\n 'annotate.instruction.placeholder': '本批次的整体目标(可选)...',\n 'annotate.instruction.ariaLabel': '整体目标',\n 'annotate.previewMessage': '预览消息',\n 'annotate.batchPayload': '批次载荷',\n 'annotate.previewRawPrompt': '查看原始 prompt 载荷',\n 'annotate.copyContext': '复制上下文',\n 'annotate.copyContext.copied': '已复制',\n 'annotate.copyContext.failed': '复制失败,请重试',\n 'annotate.saveNote': '保存',\n 'annotate.updateNote': '更新',\n 'annotate.askAi': '问 AI',\n 'annotate.askAiHint': '问 AI',\n 'annotate.createTask': '创建任务',\n 'annotate.createTaskHint': '创建任务',\n 'annotate.recommendedAction': '推荐:{action}',\n 'annotate.recommendedAction.agentHint': '推荐:{action}',\n 'annotate.recommendedAction.askHint': '推荐:{action}',\n 'annotate.sent': '已发送',\n 'annotate.taskCreated': '已创建',\n 'annotate.cancel': '取消',\n 'annotate.delete': '删除',\n 'annotate.composer.placeholder': '这个组件需要修改什么?',\n 'annotate.records.none': '还没有包含记录。',\n 'annotate.target.unknown': '未知目标',\n 'annotate.source.unknown': '未知来源',\n 'annotate.note.optionalEmpty': '可选备注为空。',\n 'annotate.note.none': '未提供备注',\n 'annotate.runtimeErrors': '{count} 个错误',\n 'annotate.liveStatus.quickAskSending': '正在将批注发送给 AI 助手。',\n 'annotate.liveStatus.createTaskSending': '正在根据批注创建任务。',\n 'annotate.liveStatus.quickAskSent': '批注已发送给 AI 助手。',\n 'annotate.liveStatus.taskCreated': '已根据批注创建任务。',\n 'annotate.latestSession.title': '当前任务',\n 'annotate.latestSession.refresh': '刷新当前任务',\n 'annotate.latestSession.meta.loaded': '包含 {count} 条批注',\n 'annotate.latestSession.meta.summary': '包含多条批注 • 刷新以加载详情',\n 'annotate.latestSession.loading': '正在刷新最新任务...',\n 'annotate.latestSession.pending': '',\n 'annotate.latestSession.acknowledged': 'AI 已接手。',\n 'annotate.latestSession.inProgress': 'AI 处理中...',\n 'annotate.latestSession.resolved': 'AI 已完成处理。请回到页面确认。',\n 'annotate.latestSession.dismissed': '任务已被忽略。',\n 'annotate.latestSession.noDetail': '已发送给 AI。',\n 'annotate.latestSession.hint.pending': '如果还没有开始,请让 AI 继续处理。',\n 'annotate.latestSession.hint.acknowledged': 'AI 已连接,正在等待更新。',\n 'annotate.latestSession.hint.in_progress': '可留在这里查看进展,或稍后手动刷新。',\n 'annotate.latestSession.hint.resolved': '请确认结果;如果还有问题,可创建后续任务。',\n 'annotate.latestSession.reconnect': '重新连接',\n 'annotate.latestSession.error.disconnected': '连接已断开。重新连接以继续跟进这条任务。',\n 'annotate.latestSession.status.pending': '等待中',\n 'annotate.latestSession.status.acknowledged': '已领取',\n 'annotate.latestSession.status.in_progress': '处理中',\n 'annotate.latestSession.status.resolved': '已完成',\n 'annotate.latestSession.status.dismissed': '已忽略',\n 'annotate.header.capturing': '正在捕获点击',\n 'annotate.header.quickCaptureOn': '{label} 已开启',\n 'runtime.summary.error.one': '{count} 个运行时错误',\n 'runtime.summary.error.other': '{count} 个运行时错误',\n 'runtime.summary.request.one': '{count} 个失败请求',\n 'runtime.summary.request.other': '{count} 个失败请求',\n 'workflow.confirm': '确认执行「{label}」?',\n 'workflow.confirm.ok': '确认执行',\n 'workflow.feedback.executed': '执行已启动',\n}\n\nconst BUILTIN_MESSAGES: Record<string, Record<string, string>> = {\n en: EN_MESSAGES,\n 'zh-CN': ZH_CN_MESSAGES,\n}\n\nlet currentLocale: string = DEFAULT_LOCALE\nlet currentMessages: InspectoMessages = {}\n\nfunction normalizeLocale(locale?: string | null): string {\n if (!locale) return DEFAULT_LOCALE\n if (BUILTIN_MESSAGES[locale]) return locale\n if (locale.toLowerCase().startsWith('zh')) return 'zh-CN'\n if (locale.toLowerCase().startsWith('en')) return 'en'\n return DEFAULT_LOCALE\n}\n\nfunction resolveBrowserLocale(): string {\n if (typeof navigator === 'undefined') return DEFAULT_LOCALE\n return normalizeLocale(navigator.language)\n}\n\nfunction interpolate(template: string, vars?: Record<string, string | number>): string {\n if (!vars) return template\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => String(vars[key] ?? ''))\n}\n\nexport function configureI18n(input?: {\n locale?: InspectoLocale\n messages?: InspectoMessages\n}): void {\n currentLocale = normalizeLocale(input?.locale ?? resolveBrowserLocale())\n currentMessages = input?.messages ?? {}\n}\n\nexport function t(key: string, vars?: Record<string, string | number>): string {\n const message =\n currentMessages[key] ??\n BUILTIN_MESSAGES[currentLocale]?.[key] ??\n BUILTIN_MESSAGES[DEFAULT_LOCALE]?.[key] ??\n key\n return interpolate(message, vars)\n}\n\nexport function runtimeSummaryLabel(kind: 'error' | 'request', count: number): string {\n const suffix = count === 1 ? 'one' : 'other'\n return t(`runtime.summary.${kind}.${suffix}`, { count })\n}\n","import { applyHeaderIconButtonStyles } from './styles.js'\nimport { bugIconSvg, cssIconSvg } from './icons.js'\nimport { t } from './i18n.js'\n\nexport function createAnnotateOverlayDom(\n shadowRoot: ShadowRoot,\n tokens: {\n surfaceFloating(): string\n surfaceSubtle(): string\n surfaceHover(): string\n borderSubtle(): string\n borderFocus(): string\n textPrimary(): string\n textSecondary(): string\n textTertiary(): string\n accentPrimary(): string\n accentPrimaryStrong(): string\n shadowFloating(): string\n shadowAccent(): string\n radiusSm(): string\n radiusMd(): string\n radiusLg(): string\n radiusXl(): string\n radiusPill(): string\n },\n) {\n const layer = document.createElement('div')\n layer.setAttribute('data-inspecto-annotate-overlay-layer', '')\n layer.style.position = 'absolute'\n layer.style.left = '0'\n layer.style.top = '0'\n layer.style.width = '0'\n layer.style.height = '0'\n layer.style.pointerEvents = 'none'\n layer.style.zIndex = '2147483645'\n\n const composer = document.createElement('div')\n composer.setAttribute('data-inspecto-annotate-composer', '')\n composer.style.position = 'fixed'\n composer.style.zIndex = '2147483646'\n composer.style.width = 'min(340px, calc(100vw - 32px))'\n composer.style.display = 'none'\n composer.style.boxSizing = 'border-box'\n composer.style.padding = '12px'\n composer.style.border = `1px solid ${tokens.borderSubtle()}`\n composer.style.borderRadius = tokens.radiusXl()\n composer.style.background = tokens.surfaceFloating()\n composer.style.color = tokens.textPrimary()\n composer.style.boxShadow = tokens.shadowFloating()\n composer.style.backdropFilter = 'blur(14px)'\n composer.style.pointerEvents = 'auto'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n composer.style.transition =\n 'left 160ms cubic-bezier(0.22, 1, 0.36, 1), top 160ms cubic-bezier(0.22, 1, 0.36, 1), opacity 120ms ease, transform 160ms cubic-bezier(0.22, 1, 0.36, 1)'\n composer.style.willChange = 'left, top, opacity, transform'\n\n const composerHeader = document.createElement('div')\n composerHeader.setAttribute('data-inspecto-annotate-composer-header', '')\n composerHeader.style.display = 'flex'\n composerHeader.style.alignItems = 'center'\n composerHeader.style.gap = '10px'\n composerHeader.style.font =\n '500 12px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerHeader.style.color = tokens.textSecondary()\n composerHeader.style.marginBottom = '12px'\n\n const composerHeaderText = document.createElement('div')\n composerHeaderText.style.flex = '1'\n composerHeaderText.style.minWidth = '0'\n composerHeaderText.style.display = 'flex'\n composerHeaderText.style.flexDirection = 'column'\n composerHeaderText.style.gap = '2px'\n\n const composerHeaderTitle = document.createElement('div')\n composerHeaderTitle.style.whiteSpace = 'nowrap'\n composerHeaderTitle.style.overflow = 'hidden'\n composerHeaderTitle.style.textOverflow = 'ellipsis'\n composerHeaderTitle.style.color = tokens.textPrimary()\n\n const composerHeaderMeta = document.createElement('div')\n composerHeaderMeta.style.whiteSpace = 'nowrap'\n composerHeaderMeta.style.overflow = 'hidden'\n composerHeaderMeta.style.textOverflow = 'ellipsis'\n composerHeaderMeta.style.font =\n '500 10px/1.35 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerHeaderMeta.style.color = tokens.textTertiary()\n\n composerHeaderText.append(composerHeaderTitle, composerHeaderMeta)\n\n const composerHeaderActions = document.createElement('div')\n composerHeaderActions.style.display = 'flex'\n composerHeaderActions.style.alignItems = 'center'\n composerHeaderActions.style.gap = '6px'\n\n const composerOpenButton = document.createElement('button')\n composerOpenButton.type = 'button'\n composerOpenButton.setAttribute('aria-label', t('menu.openInEditor'))\n composerOpenButton.title = t('menu.openInEditor')\n composerOpenButton.textContent = '↗'\n composerOpenButton.style.appearance = 'none'\n composerOpenButton.style.cursor = 'pointer'\n applyHeaderIconButtonStyles(composerOpenButton)\n\n const composerCssButton = document.createElement('button')\n composerCssButton.type = 'button'\n composerCssButton.setAttribute('aria-label', t('menu.attachCss'))\n composerCssButton.title = t('menu.attachCss')\n composerCssButton.style.appearance = 'none'\n composerCssButton.style.cursor = 'pointer'\n composerCssButton.style.display = 'none'\n applyHeaderIconButtonStyles(composerCssButton)\n composerCssButton.innerHTML = cssIconSvg\n const cssSvgElement = composerCssButton.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n }\n\n const composerRuntimeButton = document.createElement('button')\n composerRuntimeButton.type = 'button'\n composerRuntimeButton.setAttribute('aria-label', t('menu.attachRuntime'))\n composerRuntimeButton.title = t('menu.attachRuntime')\n composerRuntimeButton.style.appearance = 'none'\n composerRuntimeButton.style.position = 'relative'\n composerRuntimeButton.style.cursor = 'pointer'\n composerRuntimeButton.style.display = 'none'\n applyHeaderIconButtonStyles(composerRuntimeButton)\n\n const composerRuntimeIcon = document.createElement('span')\n composerRuntimeIcon.innerHTML = bugIconSvg\n composerRuntimeIcon.style.display = 'inline-flex'\n composerRuntimeIcon.style.alignItems = 'center'\n composerRuntimeIcon.style.justifyContent = 'center'\n composerRuntimeIcon.style.lineHeight = '1'\n\n const composerRuntimeBadge = document.createElement('span')\n composerRuntimeBadge.dataset.runtimeErrorBadge = 'true'\n composerRuntimeBadge.style.position = 'absolute'\n composerRuntimeBadge.style.top = '-5px'\n composerRuntimeBadge.style.right = '-5px'\n composerRuntimeBadge.style.minWidth = '15px'\n composerRuntimeBadge.style.height = '15px'\n composerRuntimeBadge.style.padding = '0 4px'\n composerRuntimeBadge.style.borderRadius = tokens.radiusPill()\n composerRuntimeBadge.style.background = '#ef4444'\n composerRuntimeBadge.style.color = '#ffffff'\n composerRuntimeBadge.style.font =\n '700 9px/15px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerRuntimeBadge.style.textAlign = 'center'\n composerRuntimeBadge.style.boxShadow = `0 0 0 2px ${tokens.surfaceFloating()}`\n composerRuntimeBadge.style.pointerEvents = 'none'\n composerRuntimeBadge.style.display = 'none'\n\n composerRuntimeButton.append(composerRuntimeIcon, composerRuntimeBadge)\n\n const composerInput = document.createElement('textarea')\n composerInput.placeholder = t('annotate.composer.placeholder')\n composerInput.style.width = '100%'\n composerInput.style.minHeight = '100px'\n composerInput.style.boxSizing = 'border-box'\n composerInput.style.padding = '16px'\n composerInput.style.border = `2px solid ${tokens.borderFocus()}`\n composerInput.style.borderRadius = tokens.radiusLg()\n composerInput.style.background = tokens.surfaceHover()\n composerInput.style.color = tokens.textPrimary()\n composerInput.style.font =\n '400 14px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n composerInput.style.outline = 'none'\n composerInput.style.resize = 'none'\n composerInput.style.marginBottom = '14px'\n composerInput.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.04)'\n\n const composerActions = document.createElement('div')\n composerActions.style.display = 'flex'\n composerActions.style.justifyContent = 'flex-end'\n composerActions.style.alignItems = 'center'\n composerActions.style.gap = '8px'\n\n const cancelButton = document.createElement('button')\n cancelButton.type = 'button'\n cancelButton.textContent = t('annotate.cancel')\n cancelButton.style.appearance = 'none'\n cancelButton.style.border = 'none'\n cancelButton.style.background = 'transparent'\n cancelButton.style.color = tokens.textSecondary()\n cancelButton.style.font = '500 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n cancelButton.style.padding = '8px 10px'\n cancelButton.style.cursor = 'pointer'\n\n const deleteButton = document.createElement('button')\n deleteButton.type = 'button'\n deleteButton.textContent = t('annotate.delete')\n deleteButton.style.appearance = 'none'\n deleteButton.style.border = 'none'\n deleteButton.style.background = 'transparent'\n deleteButton.style.color = 'rgba(248, 113, 113, 0.92)'\n deleteButton.style.font = '500 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n deleteButton.style.padding = '8px 10px'\n deleteButton.style.cursor = 'pointer'\n deleteButton.style.display = 'none'\n\n const addButton = document.createElement('button')\n addButton.type = 'button'\n addButton.textContent = t('annotate.saveNote')\n addButton.style.appearance = 'none'\n addButton.style.border = 'none'\n addButton.style.borderRadius = tokens.radiusPill()\n addButton.style.background = `linear-gradient(180deg, ${tokens.accentPrimary()} 0%, ${tokens.accentPrimaryStrong()} 100%)`\n addButton.style.color = '#ffffff'\n addButton.style.font = '600 11px/1.2 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n addButton.style.minHeight = '36px'\n addButton.style.padding = '0 18px'\n addButton.style.cursor = 'pointer'\n addButton.style.boxShadow = tokens.shadowAccent()\n\n composerHeaderActions.append(composerCssButton, composerRuntimeButton, composerOpenButton)\n composerActions.append(deleteButton, cancelButton, addButton)\n composerHeader.append(composerHeaderText, composerHeaderActions)\n composer.append(composerHeader, composerInput, composerActions)\n\n const preview = document.createElement('div')\n preview.setAttribute('data-inspecto-annotate-preview', '')\n preview.style.position = 'absolute'\n preview.style.zIndex = '2147483646'\n preview.style.display = 'none'\n preview.style.maxWidth = 'min(260px, calc(100vw - 32px))'\n preview.style.padding = '10px 12px'\n preview.style.border = `1px solid ${tokens.borderSubtle()}`\n preview.style.borderRadius = tokens.radiusMd()\n preview.style.background = tokens.surfaceFloating()\n preview.style.color = tokens.textPrimary()\n preview.style.font = '500 12px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n preview.style.boxShadow = tokens.shadowFloating()\n preview.style.backdropFilter = 'blur(12px)'\n preview.style.pointerEvents = 'none'\n preview.style.whiteSpace = 'pre-wrap'\n\n shadowRoot.appendChild(layer)\n shadowRoot.appendChild(composer)\n shadowRoot.appendChild(preview)\n\n return {\n layer,\n composer,\n composerHeaderTitle,\n composerHeaderMeta,\n composerOpenButton,\n composerCssButton,\n composerRuntimeButton,\n composerRuntimeBadge,\n composerInput,\n composerActions,\n cancelButton,\n deleteButton,\n addButton,\n preview,\n }\n}\n","import type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\n\nexport type ComposerPlacement = 'right' | 'left' | 'below' | 'above'\n\nexport type PlacementCandidate = {\n side: ComposerPlacement\n left: number\n top: number\n}\n\nexport function createOverlayBox(tokens: {\n accentPrimary(): string\n surfaceFloating(): string\n borderSubtle(): string\n radiusLg(): string\n shadowFloating(): string\n textPrimary(): string\n}): HTMLDivElement {\n const accentPrimaryColor = tokens.accentPrimary()\n const box = document.createElement('div')\n box.setAttribute('data-inspecto-annotate-overlay-box', '')\n box.style.position = 'absolute'\n box.style.pointerEvents = 'auto'\n box.style.boxSizing = 'border-box'\n box.style.border = `2px solid ${accentPrimaryColor}`\n box.style.background = 'rgba(93, 82, 243, 0.12)'\n box.style.borderRadius = '3px'\n box.style.boxShadow = `0 0 0 1px rgba(93, 82, 243, 0.25), 0 8px 18px rgba(93, 82, 243, 0.18)`\n\n const badge = document.createElement('div')\n badge.setAttribute('data-inspecto-annotate-overlay-order', '')\n badge.style.position = 'absolute'\n badge.style.left = '-10px'\n badge.style.top = '-10px'\n badge.style.minWidth = '20px'\n badge.style.height = '20px'\n badge.style.padding = '0 5px'\n badge.style.boxSizing = 'border-box'\n badge.style.borderRadius = '999px'\n badge.style.background = accentPrimaryColor\n badge.style.color = '#ffffff'\n badge.style.font = '600 12px/20px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n badge.style.textAlign = 'center'\n badge.style.boxShadow = '0 1px 4px rgba(0, 0, 0, 0.2)'\n\n const noteBadge = document.createElement('div')\n noteBadge.setAttribute('data-inspecto-annotate-overlay-note', '')\n noteBadge.style.position = 'absolute'\n noteBadge.style.left = '-2px'\n noteBadge.style.top = '-40px'\n noteBadge.style.maxWidth = 'min(220px, calc(100vw - 32px))'\n noteBadge.style.padding = '8px 12px'\n noteBadge.style.borderRadius = tokens.radiusLg()\n noteBadge.style.background = tokens.surfaceFloating()\n noteBadge.style.color = tokens.textPrimary()\n noteBadge.style.font = '500 12px/1.35 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n noteBadge.style.boxShadow = tokens.shadowFloating()\n noteBadge.style.border = `1px solid ${tokens.borderSubtle()}`\n noteBadge.style.whiteSpace = 'nowrap'\n noteBadge.style.overflow = 'hidden'\n noteBadge.style.textOverflow = 'ellipsis'\n noteBadge.style.pointerEvents = 'none'\n noteBadge.style.display = 'none'\n noteBadge.style.backdropFilter = 'blur(12px)'\n\n box.append(badge, noteBadge)\n return box\n}\n\nexport function applyOverlayState(\n box: HTMLDivElement,\n state: 'current' | 'saved' | 'completed',\n tokens: { accentPrimary(): string; accentPrimaryStrong(): string; successColor(): string },\n): void {\n const badge = box.querySelector('[data-inspecto-annotate-overlay-order]') as HTMLDivElement\n const accentPrimaryColor = tokens.accentPrimary()\n const accentPrimaryStrongColor = tokens.accentPrimaryStrong()\n const successColor = tokens.successColor()\n\n if (state === 'completed') {\n box.style.border = `2px solid ${successColor}`\n box.style.background = 'rgba(16, 185, 129, 0.05)'\n box.style.boxShadow = 'none'\n badge.style.background = successColor\n badge.style.opacity = '0.68'\n return\n }\n\n if (state === 'saved') {\n box.style.border = `2px solid ${accentPrimaryStrongColor}`\n box.style.background = 'rgba(79, 70, 229, 0.05)'\n box.style.boxShadow = 'none'\n badge.style.background = accentPrimaryStrongColor\n badge.style.opacity = '0.68'\n return\n }\n\n box.style.border = `2px solid ${accentPrimaryColor}`\n box.style.background = 'rgba(66, 133, 244, 0.12)'\n box.style.boxShadow = `0 0 0 1px rgba(66, 133, 244, 0.25), 0 8px 18px rgba(66, 133, 244, 0.18)`\n badge.style.background = accentPrimaryColor\n badge.style.opacity = '1'\n}\n\nexport function formatOverlayNoteBadge(note: string): string {\n const trimmed = note.trim().replace(/\\s+/g, ' ')\n if (trimmed.length <= 28) return trimmed\n return `${trimmed.slice(0, 27)}…`\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\nexport function getOverflowPenalty(\n candidate: PlacementCandidate,\n composerWidth: number,\n composerHeight: number,\n viewportLeft: number,\n viewportTop: number,\n viewportRight: number,\n viewportBottom: number,\n): number {\n const overflowLeft = Math.max(0, viewportLeft - candidate.left)\n const overflowRight = Math.max(0, candidate.left + composerWidth - viewportRight)\n const overflowTop = Math.max(0, viewportTop - candidate.top)\n const overflowBottom = Math.max(0, candidate.top + composerHeight - viewportBottom)\n return overflowLeft + overflowRight + overflowTop + overflowBottom\n}\n\nexport function getPlacementPreference(side: ComposerPlacement): number {\n const preference: Record<ComposerPlacement, number> = {\n below: 0,\n right: 18,\n left: 24,\n above: 42,\n }\n return preference[side]\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function applyComposerRuntimeButtonState(\n button: HTMLButtonElement,\n tokens: {\n surfaceSubtle(): string\n borderSubtle(): string\n textSecondary(): string\n accentPrimary(): string\n accentPrimaryStrong(): string\n shadowAccent(): string\n },\n enabled: boolean,\n): void {\n if (enabled) {\n button.style.background = `linear-gradient(180deg, ${tokens.accentPrimary()} 0%, ${tokens.accentPrimaryStrong()} 100%)`\n button.style.borderColor = 'transparent'\n button.style.color = '#ffffff'\n button.style.boxShadow = tokens.shadowAccent()\n return\n }\n\n button.style.background = tokens.surfaceSubtle()\n button.style.borderColor = tokens.borderSubtle()\n button.style.color = tokens.textSecondary()\n button.style.boxShadow = 'none'\n}\n\nexport function placePreview(preview: HTMLElement, target: SelectedTargetOverlayEntry): void {\n const rect = target.element.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n const top = Math.max(scrollY + 16, scrollY + rect.top - 54)\n const left = Math.min(\n scrollX + window.innerWidth - 276,\n Math.max(scrollX + 16, scrollX + rect.left),\n )\n preview.style.left = `${left}px`\n preview.style.top = `${top}px`\n}\n","type SelectedTargetOverlayEntry = {\n id: string\n element: Element\n order: number\n state?: 'current' | 'saved' | 'completed'\n note?: string\n onActivate?: () => void\n}\n\nexport type { SelectedTargetOverlayEntry }\n\nimport { createAnnotateOverlayDom } from './annotate-overlay-dom.js'\nimport { t } from './i18n.js'\nimport {\n applyComposerRuntimeButtonState,\n applyOverlayState,\n clamp,\n createOverlayBox,\n formatOverlayNoteBadge,\n formatRuntimeErrorCount,\n getOverflowPenalty,\n getPlacementPreference,\n placePreview,\n type ComposerPlacement,\n type PlacementCandidate,\n} from './annotate-overlay-helpers.js'\n\ntype ComposerOptions = {\n targetId?: string\n targetLabel: string\n targetMeta?: string\n note: string\n onOpenInEditor?: () => void\n canAttachCssContext?: boolean\n cssContextEnabled?: boolean\n canAttachRuntimeContext?: boolean\n runtimeContextEnabled?: boolean\n runtimeContextSummary?: string\n runtimeErrorCount?: number\n saveLabel?: string\n onToggleCssContext?: () => void\n onToggleRuntimeContext?: () => void\n onUpdateNote?: (note: string) => void\n onSave?: () => void\n onCancel?: () => void\n onDelete?: () => void\n}\n\nexport function createAnnotateOverlay(shadowRoot: ShadowRoot): {\n render(targets: SelectedTargetOverlayEntry[], composer?: ComposerOptions | null): void\n clear(): void\n} {\n const readToken = (name: string, fallback: string): string =>\n getComputedStyle(shadowRoot.host).getPropertyValue(name).trim() || fallback\n\n const tokens = {\n surfaceFloating: () => readToken('--inspecto-surface-floating', 'rgba(20, 20, 22, 0.94)'),\n surfaceSubtle: () => readToken('--inspecto-surface-subtle', 'rgba(255, 255, 255, 0.035)'),\n surfaceHover: () => readToken('--inspecto-surface-hover', 'rgba(255, 255, 255, 0.08)'),\n borderSubtle: () => readToken('--inspecto-border-subtle', 'rgba(255, 255, 255, 0.08)'),\n borderFocus: () => readToken('--inspecto-border-focus', 'rgba(93, 82, 243, 0.95)'),\n textPrimary: () => readToken('--inspecto-text-primary', 'rgba(255, 255, 255, 0.9)'),\n textSecondary: () => readToken('--inspecto-text-secondary', 'rgba(255, 255, 255, 0.72)'),\n textTertiary: () => readToken('--inspecto-text-tertiary', 'rgba(255, 255, 255, 0.46)'),\n accentPrimary: () => readToken('--inspecto-accent-primary', '#5d52f3'),\n accentPrimaryStrong: () => readToken('--inspecto-accent-primary-strong', '#4639d7'),\n successColor: () => readToken('--inspecto-success-color', '#10b981'),\n shadowFloating: () =>\n readToken('--inspecto-shadow-floating', '0 20px 48px rgba(0, 0, 0, 0.28)'),\n shadowAccent: () => readToken('--inspecto-shadow-accent', '0 8px 18px rgba(79, 70, 229, 0.28)'),\n radiusSm: () => readToken('--inspecto-radius-sm', '12px'),\n radiusMd: () => readToken('--inspecto-radius-md', '14px'),\n radiusLg: () => readToken('--inspecto-radius-lg', '18px'),\n radiusXl: () => readToken('--inspecto-radius-xl', '20px'),\n radiusPill: () => readToken('--inspecto-radius-pill', '999px'),\n }\n\n const {\n layer,\n composer,\n composerHeaderTitle,\n composerHeaderMeta,\n composerOpenButton,\n composerCssButton,\n composerRuntimeButton,\n composerRuntimeBadge,\n composerInput,\n composerActions,\n cancelButton,\n deleteButton,\n addButton,\n preview,\n } = createAnnotateOverlayDom(shadowRoot, tokens)\n const boxes = new Map<string, HTMLDivElement>()\n let isComposerFocused = false\n let activeComposerTargetId: string | null = null\n let activeComposerPlacement: ComposerPlacement | null = null\n\n composerInput.addEventListener('focus', () => {\n isComposerFocused = true\n })\n composerInput.addEventListener('blur', () => {\n isComposerFocused = false\n })\n composerActions.addEventListener('focusin', () => {\n isComposerFocused = true\n })\n composerActions.addEventListener('focusout', () => {\n isComposerFocused = false\n })\n\n function placeComposer(target: SelectedTargetOverlayEntry, preservePlacement: boolean): void {\n const rect = target.element.getBoundingClientRect()\n const viewportLeft = 16\n const viewportTop = 16\n const viewportRight = window.innerWidth - 16\n const viewportBottom = window.innerHeight - 16\n const gap = 14\n const fallbackWidth = 340\n const fallbackHeight = 240\n const composerRect = composer.getBoundingClientRect()\n const composerWidth = Math.max(240, Math.min(fallbackWidth, window.innerWidth - 32))\n const measuredHeight = composerRect.height\n const composerHeight =\n measuredHeight > 0 && measuredHeight < 360 ? measuredHeight : fallbackHeight\n const targetLeft = rect.left\n const targetRight = rect.right\n const targetTop = rect.top\n const targetBottom = rect.bottom\n const targetCenterX = targetLeft + rect.width / 2\n const targetCenterY = targetTop + rect.height / 2\n const candidates: PlacementCandidate[] = [\n {\n side: 'below',\n left: targetCenterX - composerWidth / 2,\n top: targetBottom + gap,\n },\n {\n side: 'right',\n left: targetRight + gap,\n top: targetCenterY - composerHeight / 2,\n },\n {\n side: 'left',\n left: targetLeft - composerWidth - gap,\n top: targetCenterY - composerHeight / 2,\n },\n {\n side: 'above',\n left: targetCenterX - composerWidth / 2,\n top: targetTop - composerHeight - gap,\n },\n ]\n\n const ranked = candidates\n .map(candidate => {\n const overflowPenalty = getOverflowPenalty(\n candidate,\n composerWidth,\n composerHeight,\n viewportLeft,\n viewportTop,\n viewportRight,\n viewportBottom,\n )\n const preferencePenalty = getPlacementPreference(candidate.side)\n const previousSideBonus =\n preservePlacement && activeComposerPlacement === candidate.side ? -30 : 0\n\n return {\n candidate,\n score: overflowPenalty * 1000 + preferencePenalty + previousSideBonus,\n }\n })\n .sort((a, b) => a.score - b.score)\n\n const chosen = ranked[0]!.candidate\n activeComposerPlacement = chosen.side\n\n const left = clamp(chosen.left, viewportLeft, viewportRight - composerWidth)\n const top = clamp(chosen.top, viewportTop, viewportBottom - composerHeight)\n\n composer.style.left = `${left}px`\n composer.style.top = `${top}px`\n }\n\n function render(\n targets: SelectedTargetOverlayEntry[],\n composerOptions?: ComposerOptions | null,\n ): void {\n const nextIds = new Set(targets.map(target => target.id))\n\n for (const [id, box] of boxes) {\n if (!nextIds.has(id)) {\n box.remove()\n boxes.delete(id)\n }\n }\n\n for (const target of targets) {\n const rect = target.element.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n let box = boxes.get(target.id)\n if (!box) {\n box = createOverlayBox(tokens)\n boxes.set(target.id, box)\n }\n applyOverlayState(box, target.state ?? 'current', tokens)\n box.style.left = `${scrollX + rect.left}px`\n box.style.top = `${scrollY + rect.top}px`\n box.style.width = `${rect.width}px`\n box.style.height = `${rect.height}px`\n\n const badge = box.querySelector('[data-inspecto-annotate-overlay-order]') as HTMLDivElement\n const noteBadge = box.querySelector('[data-inspecto-annotate-overlay-note]') as HTMLDivElement\n badge.textContent = String(target.order)\n\n if ((target.state ?? 'current') === 'saved' || (target.state ?? 'current') === 'completed') {\n const trimmedNote = target.note?.trim() ?? ''\n const hasNote = trimmedNote.length > 0\n noteBadge.style.display = hasNote ? 'block' : 'none'\n noteBadge.textContent = hasNote ? formatOverlayNoteBadge(trimmedNote) : ''\n box.style.cursor = 'pointer'\n box.onmouseenter = () => {\n badge.textContent = '✎'\n if (hasNote) {\n preview.textContent = trimmedNote\n preview.style.display = 'block'\n placePreview(preview, target)\n }\n }\n box.onmouseleave = () => {\n badge.textContent = String(target.order)\n preview.style.display = 'none'\n preview.textContent = ''\n }\n box.onclick = () => target.onActivate?.()\n } else {\n noteBadge.style.display = 'none'\n noteBadge.textContent = ''\n box.style.cursor = 'default'\n box.onmouseenter = null\n box.onmouseleave = null\n box.onclick = null\n }\n\n if (box.parentElement !== layer) {\n layer.appendChild(box)\n }\n }\n\n if (targets.length > 0 && composerOptions) {\n const targetChanged =\n activeComposerTargetId !== (composerOptions.targetId ?? targets[0]?.id ?? null)\n const composerTarget =\n targets.find(target => (target.state ?? 'current') === 'current') ?? targets[0]!\n activeComposerTargetId = composerOptions.targetId ?? targets[0]?.id ?? null\n composerHeaderTitle.textContent = composerOptions.targetLabel\n composerHeaderMeta.textContent = composerOptions.targetMeta ?? ''\n composerHeaderMeta.style.display = composerOptions.targetMeta ? '' : 'none'\n composerOpenButton.onclick = () => composerOptions.onOpenInEditor?.()\n composerCssButton.style.display = composerOptions.canAttachCssContext ? 'inline-flex' : 'none'\n composerCssButton.setAttribute(\n 'aria-pressed',\n composerOptions.cssContextEnabled ? 'true' : 'false',\n )\n composerCssButton.dataset.visualState = composerOptions.cssContextEnabled\n ? 'active'\n : 'inactive'\n composerCssButton.title = composerOptions.cssContextEnabled\n ? t('menu.cssEnabled')\n : t('menu.attachCss')\n applyComposerRuntimeButtonState(\n composerCssButton,\n tokens,\n composerOptions.cssContextEnabled === true,\n )\n composerCssButton.onclick = () => composerOptions.onToggleCssContext?.()\n composerRuntimeButton.style.display = composerOptions.canAttachRuntimeContext\n ? 'inline-flex'\n : 'none'\n composerRuntimeButton.setAttribute(\n 'aria-pressed',\n composerOptions.runtimeContextEnabled ? 'true' : 'false',\n )\n composerRuntimeButton.dataset.visualState = composerOptions.runtimeContextEnabled\n ? 'active'\n : 'inactive'\n composerRuntimeBadge.textContent = formatRuntimeErrorCount(\n composerOptions.runtimeErrorCount ?? 0,\n )\n composerRuntimeBadge.style.display =\n composerOptions.runtimeContextEnabled && (composerOptions.runtimeErrorCount ?? 0) > 0\n ? ''\n : 'none'\n composerRuntimeButton.title = composerOptions.runtimeContextEnabled\n ? composerOptions.runtimeErrorCount\n ? `${t('menu.runtimeEnabled')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(composerOptions.runtimeErrorCount) })}`\n : composerOptions.runtimeContextSummary\n ? `${t('menu.runtimeEnabled')} • ${composerOptions.runtimeContextSummary}`\n : t('menu.runtimeEnabled')\n : composerOptions.runtimeErrorCount\n ? `${t('menu.attachRuntime')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(composerOptions.runtimeErrorCount) })}`\n : t('menu.attachRuntime')\n applyComposerRuntimeButtonState(\n composerRuntimeButton,\n tokens,\n composerOptions.runtimeContextEnabled === true,\n )\n composerRuntimeButton.onclick = () => composerOptions.onToggleRuntimeContext?.()\n if ((targetChanged || !isComposerFocused) && composerInput.value !== composerOptions.note) {\n composerInput.value = composerOptions.note\n }\n composer.style.display = 'block'\n composer.style.opacity = '1'\n composer.style.transform = 'translate3d(0, 0, 0) scale(1)'\n placeComposer(composerTarget, !targetChanged)\n composerInput.oninput = () => composerOptions.onUpdateNote?.(composerInput.value)\n addButton.textContent = composerOptions.saveLabel ?? t('annotate.saveNote')\n addButton.onclick = () => composerOptions.onSave?.()\n cancelButton.onclick = () => composerOptions.onCancel?.()\n deleteButton.style.display = composerOptions.onDelete ? 'inline-flex' : 'none'\n deleteButton.onclick = () => composerOptions.onDelete?.()\n return\n }\n\n composer.style.display = 'none'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n activeComposerTargetId = null\n activeComposerPlacement = null\n composerInput.value = ''\n composerInput.oninput = null\n addButton.textContent = t('annotate.saveNote')\n addButton.onclick = null\n cancelButton.onclick = null\n composerOpenButton.onclick = null\n composerCssButton.style.display = 'none'\n composerCssButton.onclick = null\n composerCssButton.setAttribute('aria-pressed', 'false')\n composerCssButton.dataset.visualState = 'inactive'\n composerCssButton.title = t('menu.attachCss')\n applyComposerRuntimeButtonState(composerCssButton, tokens, false)\n composerRuntimeButton.style.display = 'none'\n composerRuntimeButton.onclick = null\n deleteButton.style.display = 'none'\n deleteButton.onclick = null\n preview.style.display = 'none'\n preview.textContent = ''\n }\n\n function clear(): void {\n layer.replaceChildren()\n boxes.clear()\n composer.style.display = 'none'\n composer.style.opacity = '0'\n composer.style.transform = 'translate3d(0, 4px, 0) scale(0.985)'\n activeComposerTargetId = null\n activeComposerPlacement = null\n composerInput.value = ''\n addButton.textContent = t('annotate.saveNote')\n composerOpenButton.onclick = null\n composerRuntimeButton.style.display = 'none'\n composerRuntimeButton.onclick = null\n deleteButton.style.display = 'none'\n deleteButton.onclick = null\n preview.style.display = 'none'\n preview.textContent = ''\n }\n\n return { render, clear }\n}\n","import type { HotKey, HotKeys, SourceLocation } from '@inspecto-dev/types'\n\nconst ATTR_NAME = 'data-inspecto'\nconst ASTRO_FILE_ATTR_NAME = 'data-astro-source-file'\nconst ASTRO_LOC_ATTR_NAME = 'data-astro-source-loc'\n\nexport function parseAttrValue(value: string): SourceLocation | null {\n const parts = value.split(':')\n if (parts.length < 3) return null\n\n const col = parseInt(parts[parts.length - 1]!, 10)\n const line = parseInt(parts[parts.length - 2]!, 10)\n const file = parts.slice(0, parts.length - 2).join(':')\n\n if (isNaN(line) || isNaN(col) || !file) return null\n return { file, line, column: col }\n}\n\nexport function parseAstroAttrValue(file: string, loc: string): SourceLocation | null {\n const parts = loc.split(':')\n if (parts.length !== 2) return null\n\n const line = parseInt(parts[0]!, 10)\n const column = parseInt(parts[1]!, 10)\n if (isNaN(line) || isNaN(column) || !file) return null\n\n return { file, line, column }\n}\n\nexport function getInspectableLocation(el: Element): SourceLocation | null {\n const attrValue = el.getAttribute(ATTR_NAME)\n if (attrValue) {\n return parseAttrValue(attrValue)\n }\n\n const astroFile = el.getAttribute(ASTRO_FILE_ATTR_NAME)\n const astroLoc = el.getAttribute(ASTRO_LOC_ATTR_NAME)\n if (astroFile && astroLoc) {\n return parseAstroAttrValue(astroFile, astroLoc)\n }\n\n return null\n}\n\nexport function findInspectable(el: Element | null): Element | null {\n while (el) {\n if (getInspectableLocation(el)) return el\n el = el.parentElement\n }\n return null\n}\n\nfunction parseHotKeyString(hotKey: string): HotKey[] {\n const keys = hotKey.split('+').map(k => k.trim().toLowerCase())\n const result: HotKey[] = []\n\n if (keys.includes('alt') || keys.includes('option')) result.push('altKey')\n if (keys.includes('ctrl') || keys.includes('control')) result.push('ctrlKey')\n if (\n keys.includes('meta') ||\n keys.includes('cmd') ||\n keys.includes('command') ||\n keys.includes('win')\n ) {\n result.push('metaKey')\n }\n if (keys.includes('shift')) result.push('shiftKey')\n\n return result\n}\n\nexport function hotKeysHeld(event: MouseEvent, hotKeys: HotKeys): boolean {\n if (!hotKeys) return false\n const mappedKeys = parseHotKeyString(hotKeys)\n if (mappedKeys.length === 0) return false\n return mappedKeys.every(key => event[key])\n}\n\nexport function getDeepActiveElement(root: Document | ShadowRoot | null): Element | null {\n let current: Element | null = root?.activeElement ?? null\n while (current && current.shadowRoot?.activeElement) {\n current = current.shadowRoot.activeElement\n }\n return current\n}\n\nexport function createElementSelector(element: Element): string {\n if (element.id) return `#${element.id}`\n\n const segments: string[] = []\n let current: Element | null = element\n\n while (current && current !== document.body) {\n const tag = current.tagName.toLowerCase()\n const siblings = current.parentElement\n ? Array.from(current.parentElement.children).filter(\n sibling => sibling.tagName.toLowerCase() === tag,\n )\n : []\n const index = siblings.indexOf(current)\n const nth = index >= 0 ? `:nth-of-type(${index + 1})` : ''\n segments.unshift(`${tag}${nth}`)\n\n if (current.id) {\n segments[0] = `#${current.id}`\n break\n }\n\n current = current.parentElement\n }\n\n return segments.join(' > ')\n}\n\nexport { ATTR_NAME }\n","import type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\nimport type {\n AnnotationTarget,\n AnnotationTransport,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n FeedbackRecord,\n FeedbackRecordDraft,\n} from '@inspecto-dev/types'\n\nexport type AnnotateContext = {\n cleanupMenu: (() => void) | null\n annotateSession: {\n current: {\n id: string\n displayOrder?: number\n target: AnnotationTarget | null\n note: string\n intent: 'review' | 'fix' | 'redesign' | 'ask'\n cssContextEnabled?: boolean\n }\n records: FeedbackRecord[]\n }\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n annotateSidebar: { update(next: AnnotateSidebarOptions): void; destroy(): void } | null\n annotateOverlay: {\n render(\n targets: SelectedTargetOverlayEntry[],\n current?: {\n targetId: string\n targetLabel: string\n targetMeta: string\n note: string\n onOpenInEditor: () => void\n canAttachCssContext: boolean\n cssContextEnabled: boolean\n canAttachRuntimeContext: boolean\n runtimeContextEnabled: boolean\n runtimeContextSummary: string\n runtimeErrorCount: number\n saveLabel: string\n onToggleCssContext: () => void\n onUpdateNote: (note: string) => void\n onSave: () => void\n onCancel: () => void\n onDelete?: () => void\n },\n ): void\n clear(): void\n } | null\n annotateElements: Map<string, Element>\n annotateDrafts: Map<string, FeedbackRecordDraft>\n annotateEditingRecord: FeedbackRecord | null\n annotateInstructionDraft: string\n annotateErrorMessage: string\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateDeliveryMode: 'ide' | 'agent'\n annotateWorkflows: import('@inspecto-dev/types').WorkflowSlotOption[]\n annotateSendState: {\n isSending: boolean\n scope: 'quick-ask' | 'create-task' | null\n }\n annotateLatestSessionSummary: AnnotationWorkSessionSummary | null\n annotateLatestSessionDetail: AnnotationWorkSession | null\n annotateLatestSessionStream: import('./http.js').AnnotationSessionEventStreamConnection | null\n annotateLatestSessionLoading: boolean\n annotateLatestSessionError: string\n annotateSuccessScope: 'quick-ask' | 'create-task' | null\n annotateSuccessTimeout: ReturnType<typeof setTimeout> | null\n annotateSuccessOnClear: (() => void) | null\n configLoadPromise: Promise<void> | null\n mode: 'inspect' | 'annotate'\n shadowRootEl: ShadowRoot\n overlay: { hide(): void }\n setMode(mode: 'inspect' | 'annotate'): void\n syncModeUi(): void\n syncRuntimeContextCapture(): void\n updateAnnotateSidebar(): void\n getAnnotateSidebarOptions(): AnnotateSidebarOptions\n renderAnnotateSelectionOverlay(): void\n clearAnnotateError(): void\n clearAnnotateSuccess(): void\n showAnnotateSuccess(scope: 'quick-ask' | 'create-task'): void\n refreshLatestAnnotateSession(): Promise<void>\n startLatestAnnotateSessionStream(sessionId: string): void\n stopLatestAnnotateSessionStream(): void\n getAnnotateRuntimeContext(\n annotations: AnnotationTransport[],\n includeWhenDisabled?: boolean,\n ): ReturnType<typeof import('./runtime-context.js').createRuntimeContextEnvelope> | null\n getAnnotateCssContextPrompt(\n annotations: AnnotationTransport[],\n includeWhenDisabled?: boolean,\n ): string | null\n canAttachRuntimeContext(): boolean\n formatRuntimeContextSummary(\n runtimeContext: ReturnType<\n typeof import('./runtime-context.js').createRuntimeContextEnvelope\n > | null,\n ): string\n getCollectedRuntimeErrorCount(): number\n canAttachCssContext(): boolean\n}\n\nexport function asAnnotateContext(ctx: unknown): AnnotateContext {\n return ctx as AnnotateContext\n}\n","import {\n createEmptySession,\n editRecord,\n saveCurrentRecord,\n setCurrentRecordTarget,\n} from './annotate-session.js'\nimport { ATTR_NAME, getInspectableLocation } from './component-utils.js'\nimport type { AnnotationTarget, FeedbackRecord, SourceLocation } from '@inspecto-dev/types'\nimport { asAnnotateContext } from './component-annotate-shared.js'\n\nexport function addTargetToCurrentAnnotation(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): void {\n const state = asAnnotateContext(ctx)\n state.cleanupMenu?.()\n state.cleanupMenu = null\n\n const target = createAnnotationTarget(state, element, location)\n const nextDraftKey = getAnnotationTargetKey(state, target)\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n }\n\n const existingRecord = state.annotateSession.records.find(\n record => getAnnotationTargetKey(state, record.target) === nextDraftKey,\n )\n if (existingRecord) {\n state.annotateDrafts.delete(nextDraftKey)\n state.annotateSession = setCurrentRecordTarget(state.annotateSession, target)\n } else {\n const cachedDraft = state.annotateDrafts.get(nextDraftKey)\n state.annotateSession = cachedDraft\n ? {\n ...state.annotateSession,\n current: {\n ...cachedDraft,\n target,\n },\n }\n : {\n ...state.annotateSession,\n current: {\n ...createEmptySession().current,\n target,\n },\n }\n }\n\n state.annotateElements.clear()\n state.annotateElements.set(state.annotateSession.current.id, element)\n state.syncModeUi()\n}\n\nexport function markTargetInAnnotateSession(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): void {\n const state = asAnnotateContext(ctx)\n state.cleanupMenu?.()\n state.cleanupMenu = null\n\n const target = createAnnotationTarget(state, element, location)\n const nextDraftKey = getAnnotationTargetKey(state, target)\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n const existingRecord = state.annotateSession.records.find(\n record => getAnnotationTargetKey(state, record.target) === nextDraftKey,\n )\n\n if (existingRecord) {\n state.annotateDrafts.delete(nextDraftKey)\n beginEditingRecord(state, existingRecord.id)\n return\n }\n\n if (\n state.annotateEditingRecord &&\n getAnnotationTargetKey(state, state.annotateEditingRecord.target) === nextDraftKey\n ) {\n rebindCurrentAnnotationElements(state)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n return\n }\n\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n restoreEditingRecord(state)\n }\n\n state.annotateEditingRecord = null\n state.annotateSession = {\n ...state.annotateSession,\n current: {\n ...createEmptySession().current,\n },\n }\n state.annotateSession = setCurrentRecordTarget(state.annotateSession, target)\n state.annotateElements.clear()\n state.annotateElements.set(state.annotateSession.current.id, element)\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = saveCurrentRecord(state.annotateSession)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n}\n\nexport function getAnnotationTargetKey(_ctx: unknown, target: AnnotationTarget): string {\n return `${target.location.file}:${target.location.line}:${target.location.column}::${target.selector ?? ''}`\n}\n\nexport function persistCurrentDraft(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n const current = state.annotateSession.current\n if (!current.target) return\n\n const key = getAnnotationTargetKey(state, current.target)\n if (\n current.note.trim().length === 0 &&\n current.intent === 'review' &&\n !(current.cssContextEnabled ?? false)\n ) {\n state.annotateDrafts.delete(key)\n return\n }\n\n state.annotateDrafts.set(key, {\n ...current,\n target: current.target,\n })\n}\n\nexport function clearDraftForTarget(\n ctx: unknown,\n target: AnnotationTarget | null | undefined,\n): void {\n const state = asAnnotateContext(ctx)\n if (!target) return\n state.annotateDrafts.delete(getAnnotationTargetKey(state, target))\n}\n\nexport function restoreEditingRecord(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateEditingRecord) return\n\n const current = state.annotateSession.current\n const restoredRecord: FeedbackRecord =\n current.target && current.id === state.annotateEditingRecord.id\n ? {\n id: current.id,\n displayOrder: current.displayOrder ?? state.annotateEditingRecord.displayOrder,\n target: current.target,\n note: current.note,\n intent: current.intent,\n }\n : state.annotateEditingRecord\n\n state.annotateSession = {\n ...state.annotateSession,\n records: [\n ...state.annotateSession.records.filter(record => record.id !== restoredRecord.id),\n restoredRecord,\n ].sort((a, b) => a.displayOrder - b.displayOrder),\n }\n state.annotateEditingRecord = null\n}\n\nexport function beginEditingRecord(ctx: unknown, recordId: string): void {\n const state = asAnnotateContext(ctx)\n const record = state.annotateSession.records.find(entry => entry.id === recordId)\n if (!record) return\n\n const currentDraftKey = state.annotateSession.current.target\n ? getAnnotationTargetKey(state, state.annotateSession.current.target)\n : null\n const nextDraftKey = getAnnotationTargetKey(state, record.target)\n if (currentDraftKey && currentDraftKey !== nextDraftKey) {\n persistCurrentDraft(state)\n if (state.annotateQuickCaptureEnabled) {\n restoreEditingRecord(state)\n }\n }\n\n state.annotateEditingRecord = record\n state.annotateSession = editRecord(state.annotateSession, recordId)\n rebindCurrentAnnotationElements(state)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n}\n\nexport function findElementForAnnotationTarget(\n ctx: unknown,\n target: AnnotationTarget,\n): Element | null {\n return findElementForLocation(ctx, target.location, target.selector)\n}\n\nexport function findElementForLocation(\n _ctx: unknown,\n location: SourceLocation,\n selector?: string,\n): Element | null {\n if (selector) {\n const bySelector = document.querySelector(selector)\n if (bySelector instanceof Element) {\n return bySelector\n }\n }\n\n const locationAttr = `${location.file}:${location.line}:${location.column}`\n const byLocation = Array.from(document.querySelectorAll(`[${ATTR_NAME}]`)).find(\n candidate => candidate.getAttribute(ATTR_NAME) === locationAttr,\n )\n if (byLocation instanceof Element) {\n return byLocation\n }\n\n const byAstroLocation = Array.from(\n document.querySelectorAll('[data-astro-source-file][data-astro-source-loc]'),\n ).find(candidate => {\n const candidateLocation = getInspectableLocation(candidate)\n return (\n candidateLocation?.file === location.file &&\n candidateLocation.line === location.line &&\n candidateLocation.column === location.column\n )\n })\n\n return byAstroLocation instanceof Element ? byAstroLocation : null\n}\n\nexport function rebindCurrentAnnotationElements(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n state.annotateElements.clear()\n\n if (!state.annotateSession.current.target) return\n\n const element = findElementForAnnotationTarget(state, state.annotateSession.current.target)\n if (element) {\n state.annotateElements.set(state.annotateSession.current.id, element)\n }\n}\n\nexport function createAnnotationTarget(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): AnnotationTarget {\n const rect = element.getBoundingClientRect()\n\n return {\n id:\n globalThis.crypto?.randomUUID?.() ??\n `target-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n location,\n label: describeElement(ctx, element),\n selector: createSelector(element),\n rect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n },\n }\n}\n\nexport function describeElement(_ctx: unknown, element: Element): string {\n const id = element.id ? `#${element.id}` : ''\n const className =\n typeof element.className === 'string'\n ? element.className\n .split(/\\s+/)\n .filter(Boolean)\n .map(name => `.${name}`)\n .join('')\n : ''\n\n return `${element.tagName.toLowerCase()}${id}${className}` || element.tagName.toLowerCase()\n}\n\nexport function createSelector(element: Element): string {\n if (element.id) return `#${element.id}`\n\n const segments: string[] = []\n let current: Element | null = element\n\n while (current && current !== document.body) {\n const tag = current.tagName.toLowerCase()\n const siblings = current.parentElement\n ? Array.from(current.parentElement.children).filter(\n sibling => sibling.tagName.toLowerCase() === tag,\n )\n : []\n const index = siblings.indexOf(current)\n const nth = index >= 0 ? `:nth-of-type(${index + 1})` : ''\n segments.unshift(`${tag}${nth}`)\n\n if (current.id) {\n segments[0] = `#${current.id}`\n break\n }\n\n current = current.parentElement\n }\n\n return segments.join(' > ')\n}\n","import type { SourceLocation } from '@inspecto-dev/types'\n\nexport type CssContextEntry = {\n label?: string\n selector?: string\n location?: SourceLocation\n summary: string\n}\n\nexport function appendCssContextToPrompt(\n prompt: string,\n cssContextPrompt: string | null | undefined,\n): string {\n if (!cssContextPrompt?.trim()) return prompt\n return `${prompt}\\n\\n${cssContextPrompt.trim()}`\n}\n\nexport function buildCssContextPrompt(entries: CssContextEntry[]): string | null {\n if (entries.length === 0) return null\n\n const lines = ['Relevant CSS context:']\n\n for (const entry of entries) {\n lines.push(`- ${entry.label ?? 'Unknown target'}`)\n if (entry.location) {\n lines.push(`file=${entry.location.file}:${entry.location.line}:${entry.location.column}`)\n }\n lines.push(`computed: ${entry.summary}`)\n }\n\n return lines.join('\\n')\n}\n\nexport function captureCssContextEntry(input: {\n element: Element\n label?: string\n selector?: string\n location?: SourceLocation\n}): CssContextEntry | null {\n if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n return null\n }\n\n const styles = window.getComputedStyle(input.element)\n const summary = buildStyleSummary(styles)\n if (!summary) return null\n\n return {\n ...(input.label ? { label: input.label } : {}),\n ...(input.selector ? { selector: input.selector } : {}),\n ...(input.location ? { location: input.location } : {}),\n summary,\n }\n}\n\nfunction buildStyleSummary(styles: CSSStyleDeclaration): string {\n const parts = [\n formatToken('display', styles.display),\n formatToken('position', styles.position),\n formatBoxToken('margin', styles.margin),\n formatBoxToken('padding', styles.padding),\n formatToken('gap', styles.gap, { skip: ['normal', '0px'] }),\n formatToken('align-items', styles.alignItems, { skip: ['normal', 'stretch'] }),\n formatToken('justify-content', styles.justifyContent, { skip: ['normal', 'flex-start'] }),\n formatToken('font-size', styles.fontSize),\n formatToken('line-height', styles.lineHeight, { skip: ['normal'] }),\n formatToken('font-weight', styles.fontWeight, { skip: ['400', 'normal'] }),\n formatToken('color', styles.color),\n formatToken('background', styles.backgroundColor, {\n skip: ['rgba(0, 0, 0, 0)', 'transparent'],\n }),\n formatToken('border', styles.border, { skip: ['0px none rgb(0, 0, 0)', 'none'] }),\n formatToken('border-radius', styles.borderRadius, { skip: ['0px'] }),\n formatToken('box-shadow', styles.boxShadow, { skip: ['none'] }),\n formatToken('opacity', styles.opacity, { skip: ['1'] }),\n ].filter(Boolean)\n\n return parts.join('; ')\n}\n\nfunction formatBoxToken(label: string, value: string): string | null {\n return formatToken(label, normalizeWhitespace(value), {\n skip: ['0px', '0px 0px 0px 0px', '0px 0px'],\n })\n}\n\nfunction formatToken(\n label: string,\n value: string,\n options: { skip?: string[] } = {},\n): string | null {\n const normalized = normalizeWhitespace(value)\n if (!normalized || options.skip?.includes(normalized)) return null\n return `${label}=${normalized}`\n}\n\nfunction normalizeWhitespace(value: string): string {\n return value.trim().replace(/\\s+/g, ' ')\n}\n","import type {\n AnnotationTransport,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n} from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\n\nexport function buildAnnotateFullPrompt(input: {\n instruction: string\n annotations: AnnotationTransport[]\n runtimeContext?: RuntimeContextEnvelope | null\n cssContextPrompt?: string | null\n}): string {\n const instruction = input.instruction.trim()\n const body = buildSelectedElementsPrompt(input.annotations)\n\n const prompt = instruction ? `${instruction}\\n\\n${body}` : body\n return appendCssContextToPrompt(\n appendRuntimeContextSection(prompt, input.runtimeContext),\n input.cssContextPrompt,\n )\n}\n\nfunction buildSelectedElementsPrompt(annotations: AnnotationTransport[]): string {\n const lines = ['Selected elements:']\n\n for (const annotation of annotations) {\n const trimmedNote = annotation.note.trim()\n for (const target of annotation.targets) {\n const targetLabel = (target.label || 'Unknown target').trim() || 'Unknown target'\n lines.push(`- ${targetLabel}`)\n lines.push(\n `file=${formatLocation(target.location.file, target.location.line, target.location.column)}`,\n )\n if (trimmedNote) {\n lines.push(`note=${trimmedNote}`)\n }\n }\n }\n\n if (lines.length === 1) {\n lines.push('- None')\n }\n\n return lines.join('\\n')\n}\n\nfunction formatLocation(file: string, line: number, column: number): string {\n return `${file}:${line}:${column}`\n}\n\nfunction appendRuntimeContextSection(\n prompt: string,\n runtimeContext: RuntimeContextEnvelope | null | undefined,\n): string {\n if (!runtimeContext?.records.length) return prompt\n return `${prompt}\\n\\n${buildRuntimeContextSection(runtimeContext.records)}`\n}\n\nfunction buildRuntimeContextSection(records: RuntimeEvidenceRecord[]): string {\n return ['Relevant runtime context:', ...records.map(formatRuntimeRecord)].join('\\n')\n}\n\nfunction formatRuntimeRecord(record: RuntimeEvidenceRecord): string {\n const requestSummary =\n record.kind === 'failed-request'\n ? `request=${record.request?.method ?? 'GET'} ${record.request?.pathname ?? record.request?.url ?? 'unknown'} status=${record.request?.status ?? 'unknown'}`\n : `occurrences=${record.occurrenceCount}`\n const reasonSummary = record.relevanceReasons.length\n ? record.relevanceReasons.join('; ')\n : 'timing-based'\n const stackSummary = record.stack\n ? `\\n stack=${record.stack.split('\\n').slice(0, 5).join(' | ')}`\n : ''\n\n return [\n `- [${record.kind}] ${record.message}`,\n ` relevance=${record.relevanceLevel} (${reasonSummary})`,\n ` ${requestSummary}`,\n stackSummary,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","import type {\n AnnotationSessionEvent,\n SnippetResponse,\n SendToAiRequest,\n SendToAiResponse,\n SendAnnotationsToAiRequest,\n SendAnnotationsToAiResponse,\n AnnotationWorkSession,\n OpenFileRequest,\n InspectoConfig,\n AiErrorCode,\n} from '@inspecto-dev/types'\nimport { INSPECTO_API_PATHS } from '@inspecto-dev/types'\n\nlet BASE_URL = globalThis.__AI_INSPECTOR_SERVER_URL__ || 'http://127.0.0.1:5678'\nconst AI_BATCH_DISPATCH_PATH =\n INSPECTO_API_PATHS.AI_BATCH_DISPATCH ?? '/inspecto/api/v1/ai/dispatch/annotations'\n\nexport interface OpenFileResult {\n success: boolean\n errorCode?: AiErrorCode\n}\n\nexport interface AnnotationSessionResult {\n success: boolean\n session?: AnnotationWorkSession\n error?: string\n errorCode?: AiErrorCode\n}\n\nexport interface AnnotationSessionEventStreamConnection {\n close(): void\n}\n\nexport function setBaseUrl(url: string): void {\n BASE_URL = url.replace(/\\/$/, '')\n}\n\nlet cachedConfig: InspectoConfig | null = null\n\nexport async function fetchIdeInfo(force = false): Promise<InspectoConfig | null> {\n if (cachedConfig && !force) return cachedConfig\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.CLIENT_CONFIG}`)\n if (!res.ok) return null\n cachedConfig = await res.json()\n return cachedConfig\n } catch {\n return null\n }\n}\n\nexport async function openFile(req: OpenFileRequest): Promise<boolean> {\n return (await openFileWithDiagnostics(req)).success\n}\n\nexport async function openFileWithDiagnostics(req: OpenFileRequest): Promise<OpenFileResult> {\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.SOURCE_OPEN}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (res.ok) return { success: true }\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string }\n return {\n success: false,\n errorCode: (err.errorCode as AiErrorCode | undefined) ?? 'IDE_UNAVAILABLE',\n }\n } catch {\n return { success: false, errorCode: 'SERVER_UNAVAILABLE' }\n }\n}\n\nexport async function fetchSnippet(\n file: string,\n line: number,\n column: number,\n maxLines = 100,\n): Promise<SnippetResponse> {\n const params = new URLSearchParams({\n file,\n line: String(line),\n column: String(column),\n maxLines: String(maxLines),\n })\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.PROJECT_SNIPPET}?${params}`)\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string }\n throw Object.assign(new Error('snippet fetch failed'), { errorCode: err.errorCode })\n }\n return res.json() as Promise<SnippetResponse>\n } catch (err) {\n if ((err as { errorCode?: string }).errorCode) throw err\n throw Object.assign(new Error('Local dev server unavailable'), {\n errorCode: 'SERVER_UNAVAILABLE',\n })\n }\n}\n\nexport async function sendToAi(req: SendToAiRequest): Promise<SendToAiResponse> {\n try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.AI_DISPATCH}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n return res.json() as Promise<SendToAiResponse>\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport async function sendAnnotationsToAi(\n req: SendAnnotationsToAiRequest,\n): Promise<SendAnnotationsToAiResponse> {\n try {\n const res = await fetch(`${BASE_URL}${AI_BATCH_DISPATCH_PATH}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n return res.json() as Promise<SendAnnotationsToAiResponse>\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport async function fetchAnnotationSession(sessionId: string): Promise<AnnotationSessionResult> {\n try {\n const res = await fetch(\n `${BASE_URL}${INSPECTO_API_PATHS.SESSIONS}/${encodeURIComponent(sessionId)}`,\n )\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { errorCode?: string; error?: string }\n return {\n success: false,\n error: err.error ?? 'Request failed',\n errorCode: err.errorCode as AiErrorCode,\n }\n }\n const payload = (await res.json()) as {\n success: boolean\n session?: AnnotationWorkSession\n error?: string\n }\n return {\n success: payload.success,\n ...(payload.session !== undefined ? { session: payload.session } : {}),\n ...(payload.error !== undefined ? { error: payload.error } : {}),\n }\n } catch {\n return {\n success: false,\n error: 'Local dev server unavailable',\n errorCode: 'SERVER_UNAVAILABLE',\n }\n }\n}\n\nexport function openAnnotationSessionEventStream(\n sessionId: string,\n handlers: {\n onEvent: (event: AnnotationSessionEvent) => void\n onError?: () => void\n },\n): AnnotationSessionEventStreamConnection | null {\n if (!sessionId.trim() || typeof EventSource !== 'function') {\n return null\n }\n\n const params = new URLSearchParams({ sessionId: sessionId.trim() })\n const source = new EventSource(`${BASE_URL}${INSPECTO_API_PATHS.SESSION_EVENTS}?${params}`)\n\n const handleEvent = (event: Event): void => {\n const messageEvent = event as MessageEvent<string>\n try {\n const payload = JSON.parse(messageEvent.data) as AnnotationSessionEvent\n handlers.onEvent(payload)\n } catch {\n // ignore malformed events\n }\n }\n\n source.addEventListener('session-created', handleEvent)\n source.addEventListener('session-message-appended', handleEvent)\n source.addEventListener('session-status-updated', handleEvent)\n if (handlers.onError) {\n source.addEventListener('error', handlers.onError)\n }\n\n return {\n close() {\n source.close()\n },\n }\n}\n","import {\n clearCurrentRecord,\n createEmptySession,\n removeRecord,\n saveCurrentRecord,\n updateCurrentRecordCssContextEnabled,\n updateCurrentRecordNote,\n} from './annotate-session.js'\nimport { buildAnnotateFullPrompt } from './annotate-full-prompt.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { SelectedTargetOverlayEntry } from './annotate-overlay.js'\nimport {\n fetchAnnotationSession,\n openAnnotationSessionEventStream,\n openFile,\n sendToAi,\n sendAnnotationsToAi,\n} from './http.js'\nimport type {\n AiErrorCode,\n AnnotationDeliveryMode,\n AnnotationSessionEvent,\n AnnotationTransport,\n FeedbackRecord,\n AnnotationWorkSession,\n} from '@inspecto-dev/types'\nimport { asAnnotateContext } from './component-annotate-shared.js'\nimport {\n beginEditingRecord,\n clearDraftForTarget,\n findElementForAnnotationTarget,\n getAnnotationTargetKey,\n restoreEditingRecord,\n} from './component-annotate-targets.js'\nimport { t } from './i18n.js'\n\nfunction formatContextAsMarkdown(instruction: string, annotations: AnnotationTransport[]): string {\n let md = ''\n if (instruction) {\n md += `${instruction}\\n\\n`\n }\n if (annotations.length > 0) {\n md += '### Selected Elements\\n\\n'\n annotations.forEach((ann, index) => {\n md += `**Annotation ${index + 1}**\\n`\n if (ann.note) {\n md += `* Note: ${ann.note}\\n`\n }\n ann.targets.forEach((target, targetIndex) => {\n md += `\\n* Target ${targetIndex + 1}:\\n`\n if (target.label) md += ` - Label: \\`${target.label}\\`\\n`\n if (target.location)\n md += ` - Location: \\`${target.location.file.split('/').pop() || target.location.file}:${target.location.line}:${target.location.column}\\`\\n`\n if (target.selector) md += ` - Selector: \\`${target.selector}\\`\\n`\n if (target.snippet) md += `\\n \\`\\`\\`\\n${target.snippet}\\n \\`\\`\\`\\n`\n })\n md += '\\n---\\n\\n'\n })\n }\n return md.trim()\n}\n\nexport function hasCurrentRecordUi(ctx: unknown): boolean {\n return Boolean(asAnnotateContext(ctx).annotateSession.current.target)\n}\n\nexport function getNextRecordDisplayOrderUi(ctx: unknown): number {\n const state = asAnnotateContext(ctx)\n return (\n state.annotateSession.records.reduce(\n (maxOrder, record) => Math.max(maxOrder, record.displayOrder),\n 0,\n ) + 1\n )\n}\n\nexport function clearAnnotateError(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateErrorMessage) return\n state.annotateErrorMessage = ''\n state.updateAnnotateSidebar()\n}\n\nexport function clearAnnotateSuccess(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n const hadSuccess = state.annotateSuccessScope !== null\n state.annotateSuccessScope = null\n if (state.annotateSuccessTimeout) {\n clearTimeout(state.annotateSuccessTimeout)\n state.annotateSuccessTimeout = null\n }\n state.annotateSuccessOnClear = null\n if (hadSuccess) {\n state.updateAnnotateSidebar()\n }\n}\n\nexport function showAnnotateSuccess(ctx: unknown, scope: 'quick-ask' | 'create-task'): void {\n const state = asAnnotateContext(ctx)\n clearAnnotateSuccess(state)\n state.annotateSuccessScope = scope\n state.annotateSuccessTimeout = setTimeout(() => {\n const onClear = state.annotateSuccessOnClear\n state.annotateSuccessScope = null\n state.annotateSuccessTimeout = null\n state.annotateSuccessOnClear = null\n onClear?.()\n state.updateAnnotateSidebar()\n }, 1500)\n}\n\nfunction updateLatestSessionState(ctx: unknown, session: AnnotationWorkSession): void {\n const state = asAnnotateContext(ctx)\n state.annotateLatestSessionDetail = session\n state.annotateLatestSessionSummary = {\n id: session.id,\n status: session.status,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n }\n state.annotateLatestSessionError = ''\n\n if (session.status === 'resolved' || session.status === 'dismissed') {\n state.stopLatestAnnotateSessionStream()\n }\n\n // Trigger overlay re-render to update badge colors/states dynamically\n state.renderAnnotateSelectionOverlay()\n}\n\nexport function toAnnotateErrorMessage(\n _ctx: unknown,\n errorCode?: AiErrorCode,\n fallback?: string,\n): string {\n if (errorCode === 'FORBIDDEN_PATH') {\n return 'Some selected targets are outside the current project workspace.'\n }\n if (errorCode === 'INVALID_REQUEST') {\n return 'The current annotation batch is incomplete. Check your targets and try again.'\n }\n if (errorCode === 'SERVER_UNAVAILABLE') {\n return 'Inspecto could not reach the local dev server. Restart your dev server, then try again. If it still fails, run `inspecto doctor` or `npx @inspecto-dev/cli doctor` from the project root.'\n }\n return fallback ?? 'Request failed'\n}\n\nexport function toAnnotationTransportFromRecordUi(\n _ctx: unknown,\n record: FeedbackRecord,\n): AnnotationTransport {\n return {\n note: record.note,\n intent: record.intent,\n targets: [\n {\n location: record.target.location,\n ...(record.target.label ? { label: record.target.label } : {}),\n ...(record.target.selector ? { selector: record.target.selector } : {}),\n },\n ],\n }\n}\n\nexport async function sendAnnotationBatch(\n ctx: unknown,\n annotations: AnnotationTransport[],\n scope: 'quick-ask' | 'create-task',\n instruction: string,\n deliveryMode: AnnotationDeliveryMode,\n onSuccess: () => void,\n extraPayload?: { source?: 'annotation' | 'workflow'; workflowId?: string },\n): Promise<void> {\n const state = asAnnotateContext(ctx)\n if (state.annotateSendState.isSending) return\n if (annotations.length === 0 && extraPayload?.source !== 'workflow') return\n\n state.annotateSendState = { isSending: true, scope }\n state.updateAnnotateSidebar()\n\n try {\n await state.configLoadPromise\n const runtimeContext = state.getAnnotateRuntimeContext(annotations)\n const cssContextPrompt = state.getAnnotateCssContextPrompt(annotations)\n\n const result = await sendAnnotationsToAi({\n instruction,\n annotations,\n ...(runtimeContext ? { runtimeContext } : {}),\n ...(cssContextPrompt ? { cssContextPrompt } : {}),\n deliveryMode,\n ...(extraPayload || {}),\n })\n\n if (!result.success) {\n state.annotateErrorMessage = toAnnotateErrorMessage(state, result.errorCode, result.error)\n state.updateAnnotateSidebar()\n return\n }\n\n state.annotateLatestSessionSummary = result.session ?? null\n state.annotateLatestSessionDetail = null\n state.annotateLatestSessionError = ''\n if (result.session?.id) {\n state.startLatestAnnotateSessionStream(result.session.id)\n void state.refreshLatestAnnotateSession()\n } else {\n state.stopLatestAnnotateSessionStream()\n }\n\n onSuccess()\n\n state.annotateErrorMessage = ''\n // For quick-ask: show transient success banner.\n // For create-task: only announce via aria-live (no visual banner); the\n // sidebar's live session section shows status from that point on.\n state.showAnnotateSuccess(scope)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n } catch (err) {\n state.annotateErrorMessage = toAnnotateErrorMessage(\n state,\n (err as { errorCode?: AiErrorCode }).errorCode,\n (err as Error).message,\n )\n state.updateAnnotateSidebar()\n } finally {\n state.annotateSendState = { isSending: false, scope: null }\n state.updateAnnotateSidebar()\n }\n}\n\nexport async function triggerWorkflow(ctx: unknown, workflowId: string): Promise<void> {\n const state = asAnnotateContext(ctx)\n if (state.annotateSendState.isSending) return\n\n const workflowPrompt = state.annotateWorkflows.find(w => w.id === workflowId)?.prompt || ''\n if (!workflowPrompt.trim()) return\n\n const scope = state.annotateDeliveryMode === 'ide' ? 'quick-ask' : 'create-task'\n state.annotateSendState = { isSending: true, scope }\n state.updateAnnotateSidebar()\n\n try {\n await state.configLoadPromise\n const result = await sendToAi({\n prompt: workflowPrompt,\n })\n\n if (!result.success) {\n state.annotateErrorMessage = toAnnotateErrorMessage(state, result.errorCode, result.error)\n state.updateAnnotateSidebar()\n return\n }\n\n state.annotateInstructionDraft = ''\n state.annotateSession = createEmptySession()\n state.annotateEditingRecord = null\n state.annotateElements.clear()\n state.annotateErrorMessage = ''\n state.showAnnotateSuccess(scope)\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n } catch (err) {\n state.annotateErrorMessage = toAnnotateErrorMessage(\n state,\n (err as { errorCode?: AiErrorCode }).errorCode,\n (err as Error).message,\n )\n state.updateAnnotateSidebar()\n } finally {\n state.annotateSendState = { isSending: false, scope: null }\n state.updateAnnotateSidebar()\n }\n}\n\nexport async function refreshLatestAnnotateSession(ctx: unknown): Promise<void> {\n const state = asAnnotateContext(ctx)\n const sessionId = state.annotateLatestSessionSummary?.id ?? state.annotateLatestSessionDetail?.id\n if (!sessionId || state.annotateLatestSessionLoading) return\n\n state.annotateLatestSessionLoading = true\n state.annotateLatestSessionError = ''\n state.updateAnnotateSidebar()\n\n try {\n const result = await fetchAnnotationSession(sessionId)\n if (!result.success || !result.session) {\n state.annotateLatestSessionError = toAnnotateErrorMessage(\n state,\n result.errorCode,\n result.error ?? 'Failed to refresh latest session.',\n )\n return\n }\n\n updateLatestSessionState(state, result.session)\n } finally {\n state.annotateLatestSessionLoading = false\n state.updateAnnotateSidebar()\n }\n}\n\nexport function startLatestAnnotateSessionStream(ctx: unknown, sessionId: string): void {\n const state = asAnnotateContext(ctx)\n state.stopLatestAnnotateSessionStream()\n\n const connection = openAnnotationSessionEventStream(sessionId, {\n onEvent: (event: AnnotationSessionEvent) => {\n if (event.session.id !== sessionId) return\n updateLatestSessionState(state, event.session)\n state.updateAnnotateSidebar()\n },\n onError: () => {\n state.annotateLatestSessionError =\n 'Live session updates disconnected. You can refresh to reconnect.'\n state.updateAnnotateSidebar()\n },\n })\n\n state.annotateLatestSessionStream = connection\n}\n\nexport function stopLatestAnnotateSessionStream(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n state.annotateLatestSessionStream?.close()\n state.annotateLatestSessionStream = null\n}\n\nexport function getAnnotateSidebarOptions(ctx: unknown): AnnotateSidebarOptions {\n const state = asAnnotateContext(ctx)\n const includedRecords = state.annotateSession.records\n const savedAnnotations = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n const allAnnotations = [...savedAnnotations]\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n allAnnotations.push({\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n targets: [\n {\n location: state.annotateSession.current.target.location,\n ...(state.annotateSession.current.target.label\n ? { label: state.annotateSession.current.target.label }\n : {}),\n ...(state.annotateSession.current.target.selector\n ? { selector: state.annotateSession.current.target.selector }\n : {}),\n },\n ],\n })\n }\n const fullInstruction = composeAnnotateInstruction(state)\n const allRuntimeContext = state.getAnnotateRuntimeContext(allAnnotations)\n const allCssContextPrompt = state.getAnnotateCssContextPrompt(allAnnotations)\n\n const deliveryPreference = state.annotateDeliveryMode ?? 'agent'\n let preferredAction: 'quick-ask' | 'create-task' = 'create-task'\n if (deliveryPreference === 'ide') preferredAction = 'quick-ask'\n if (deliveryPreference === 'agent') preferredAction = 'create-task'\n\n return {\n mode: state.annotateCapturePaused ? 'capture-paused' : 'capture-enabled',\n canAttachCssContext: false,\n cssContextEnabled: false,\n canAttachRuntimeContext: state.canAttachRuntimeContext(),\n runtimeContextEnabled: state.annotateRuntimeContextEnabled,\n runtimeContextSummary: state.formatRuntimeContextSummary(allRuntimeContext),\n runtimeErrorCount: state.getCollectedRuntimeErrorCount(),\n session: state.annotateSession,\n instruction: state.annotateInstructionDraft,\n includedRecords,\n fullPrompt: buildAnnotateFullPrompt({\n instruction: fullInstruction,\n annotations: allAnnotations,\n runtimeContext: allRuntimeContext,\n cssContextPrompt: allCssContextPrompt,\n }),\n isSending: state.annotateSendState.isSending,\n sendingScope: state.annotateSendState.scope,\n successScope: state.annotateSuccessScope,\n preferredAction,\n annotateDeliveryMode: state.annotateDeliveryMode,\n workflows: state.annotateWorkflows,\n latestSessionSummary: state.annotateLatestSessionSummary,\n latestSessionDetail: state.annotateLatestSessionDetail,\n latestSessionLoading: state.annotateLatestSessionLoading,\n latestSessionError: state.annotateLatestSessionError,\n quickCaptureEnabled: state.annotateQuickCaptureEnabled,\n errorMessage: state.annotateErrorMessage,\n onPauseCapture: () => {\n state.annotateCapturePaused = true\n state.overlay.hide()\n state.syncRuntimeContextCapture()\n state.updateAnnotateSidebar()\n },\n onResumeCapture: () => {\n state.annotateCapturePaused = false\n state.syncRuntimeContextCapture()\n state.updateAnnotateSidebar()\n },\n onToggleQuickCapture: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateQuickCaptureEnabled = !state.annotateQuickCaptureEnabled\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onToggleRuntimeContext: () => {\n state.annotateRuntimeContextEnabled = !state.annotateRuntimeContextEnabled\n state.updateAnnotateSidebar()\n state.renderAnnotateSelectionOverlay()\n },\n onUpdateInstruction: (instruction: string) => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateInstructionDraft = instruction\n state.updateAnnotateSidebar()\n },\n onRemovePromptChip: (recordId: string) => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n\n const currentTarget =\n state.annotateSession.current.id === recordId ? state.annotateSession.current.target : null\n const savedRecord =\n state.annotateSession.records.find(record => record.id === recordId) ?? null\n\n if (currentTarget) {\n clearDraftForTarget(state, currentTarget)\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n state.annotateEditingRecord = null\n state.annotateElements.clear()\n } else if (savedRecord) {\n clearDraftForTarget(state, savedRecord.target)\n state.annotateSession = removeRecord(state.annotateSession, recordId)\n }\n\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onEditRecord: recordId => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n beginEditingRecord(state, recordId)\n },\n onRefreshLatestSession: () => {\n void state.refreshLatestAnnotateSession()\n },\n onCopyContext: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n const instruction = composeAnnotateInstruction(state)\n const markdown = formatContextAsMarkdown(instruction, transports)\n\n return navigator.clipboard\n .writeText(markdown)\n .then(() => {\n state.annotateErrorMessage = ''\n })\n .catch(err => {\n console.error('Failed to copy to clipboard:', err)\n state.annotateErrorMessage = t('annotate.copyContext.failed')\n state.updateAnnotateSidebar()\n throw err\n })\n },\n onQuickAsk: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n void sendAnnotationBatch(\n state,\n transports,\n 'quick-ask',\n composeAnnotateInstruction(state),\n 'ide',\n () => {\n state.annotateInstructionDraft = ''\n state.annotateDrafts.clear()\n state.annotateEditingRecord = null\n state.annotateSession = createEmptySession()\n state.annotateElements.clear()\n\n state.renderAnnotateSelectionOverlay()\n },\n )\n },\n onCreateTask: () => {\n const transports = state.annotateSession.records.map(record =>\n toAnnotationTransportFromRecordUi(null, record),\n )\n if (hasCurrentRecordUi(state) && state.annotateSession.current.target) {\n transports.push(\n toAnnotationTransportFromRecordUi(null, {\n id: state.annotateSession.current.id,\n displayOrder:\n state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n target: state.annotateSession.current.target,\n note: state.annotateSession.current.note,\n intent: state.annotateSession.current.intent,\n }),\n )\n }\n\n void sendAnnotationBatch(\n state,\n transports,\n 'create-task',\n composeAnnotateInstruction(state),\n 'agent',\n () => {\n // Records are kept visible so the user can see badge status updates\n // (saved → completed) driven by the live session stream. The session\n // will be cleared when the user starts a new annotation batch (onSave).\n },\n )\n },\n onWorkflow: workflowId => {\n void triggerWorkflow(state, workflowId)\n },\n onExit: () => {\n state.setMode('inspect')\n },\n }\n}\n\nexport function composeAnnotateInstruction(ctx: unknown): string {\n return asAnnotateContext(ctx).annotateInstructionDraft.trim()\n}\n\nexport function renderAnnotateSelectionOverlay(ctx: unknown): void {\n const state = asAnnotateContext(ctx)\n if (!state.annotateOverlay) return\n\n if (state.mode !== 'annotate') {\n state.annotateOverlay.clear()\n return\n }\n\n const overlayTargets: SelectedTargetOverlayEntry[] = state.annotateSession.records\n .map((record): SelectedTargetOverlayEntry | null => {\n if (state.annotateEditingRecord?.id === record.id) return null\n const element = findElementForAnnotationTarget(state, record.target)\n if (!element) return null\n const overlayState: SelectedTargetOverlayEntry['state'] =\n state.annotateLatestSessionSummary?.status === 'resolved' ||\n state.annotateLatestSessionDetail?.status === 'resolved'\n ? 'completed'\n : 'saved'\n return {\n id: record.id,\n element,\n order: record.displayOrder,\n state: overlayState,\n note: record.note,\n onActivate: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n beginEditingRecord(state, record.id)\n },\n }\n })\n .filter((entry): entry is SelectedTargetOverlayEntry => entry !== null)\n\n const target = state.annotateSession.current.target\n const currentElement = target\n ? state.annotateElements.get(state.annotateSession.current.id)\n : null\n\n if (!target || !currentElement) {\n state.annotateOverlay.render(overlayTargets)\n return\n }\n\n overlayTargets.push({\n id: state.annotateSession.current.id,\n element: currentElement,\n order: state.annotateSession.current.displayOrder ?? getNextRecordDisplayOrderUi(state),\n state: 'current',\n })\n\n state.annotateOverlay.render(overlayTargets, {\n targetId: getAnnotationTargetKey(state, target),\n targetLabel: target.label,\n targetMeta: `${target.location.file.split('/').pop() || target.location.file}:${target.location.line}:${target.location.column}`,\n note: state.annotateSession.current.note,\n onOpenInEditor: () => {\n void openFile(target.location)\n },\n canAttachCssContext: state.canAttachCssContext(),\n cssContextEnabled: state.annotateSession.current.cssContextEnabled ?? false,\n canAttachRuntimeContext: false,\n runtimeContextEnabled: false,\n runtimeContextSummary: '',\n runtimeErrorCount: 0,\n saveLabel: state.annotateEditingRecord ? t('annotate.updateNote') : t('annotate.saveNote'),\n onToggleCssContext: () => {\n state.annotateSession = updateCurrentRecordCssContextEnabled(\n state.annotateSession,\n !(state.annotateSession.current.cssContextEnabled ?? false),\n )\n state.updateAnnotateSidebar()\n state.renderAnnotateSelectionOverlay()\n },\n onUpdateNote: note => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n state.annotateSession = updateCurrentRecordNote(state.annotateSession, note)\n state.updateAnnotateSidebar()\n },\n onSave: () => {\n if (!hasCurrentRecordUi(state)) return\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n // If saving a record into a new batch, clear the stale resolved session\n // so its 'completed' color doesn't bleed onto the fresh annotations.\n if (\n state.annotateLatestSessionSummary?.status === 'resolved' ||\n state.annotateLatestSessionDetail?.status === 'resolved'\n ) {\n // Previous batch is resolved — clear only the stale task state so the\n // new annotation can start a fresh batch without losing the current\n // note being saved.\n const currentDraft = state.annotateSession.current\n state.annotateLatestSessionSummary = null\n state.annotateLatestSessionDetail = null\n state.stopLatestAnnotateSessionStream()\n state.annotateInstructionDraft = ''\n state.annotateDrafts.clear()\n state.annotateEditingRecord = null\n state.annotateSession = {\n current: currentDraft,\n records: [],\n }\n }\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = saveCurrentRecord(state.annotateSession)\n state.annotateEditingRecord = null\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n onCancel: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n restoreEditingRecord(state)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n ...(state.annotateEditingRecord\n ? {\n onDelete: () => {\n state.clearAnnotateError()\n state.clearAnnotateSuccess()\n clearDraftForTarget(state, state.annotateSession.current.target)\n state.annotateEditingRecord = null\n state.annotateSession = clearCurrentRecord(state.annotateSession)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n },\n }\n : {}),\n })\n}\n","export {\n addTargetToCurrentAnnotation,\n beginEditingRecord,\n clearDraftForTarget,\n createAnnotationTarget,\n describeElement,\n findElementForAnnotationTarget,\n findElementForLocation,\n getAnnotationTargetKey,\n markTargetInAnnotateSession,\n persistCurrentDraft,\n rebindCurrentAnnotationElements,\n restoreEditingRecord,\n} from './component-annotate-targets.js'\n\nexport {\n clearAnnotateError,\n clearAnnotateSuccess,\n composeAnnotateInstruction,\n getAnnotateSidebarOptions,\n getNextRecordDisplayOrderUi as getNextRecordDisplayOrder,\n hasCurrentRecordUi as hasCurrentRecord,\n renderAnnotateSelectionOverlay,\n refreshLatestAnnotateSession,\n sendAnnotationBatch,\n showAnnotateSuccess,\n startLatestAnnotateSessionStream,\n stopLatestAnnotateSessionStream,\n toAnnotateErrorMessage,\n toAnnotationTransportFromRecordUi as toAnnotationTransportFromRecord,\n} from './component-annotate-ui.js'\n","import type { HotKeys } from '@inspecto-dev/types'\nimport { badgeClass } from './styles.js'\nimport { getDeepActiveElement, hotKeysHeld } from './component-utils.js'\nimport { t } from './i18n.js'\nimport { pauseIconSvg, playIconSvg } from './icons.js'\n\ntype LauncherContext = {\n options: { hotKeys?: HotKeys }\n serverHotKeys: HotKeys | null\n active: boolean\n disabled: boolean\n mode: 'inspect' | 'annotate'\n launcherPanelOpen: boolean\n badge: HTMLDivElement\n shadowRootEl: ShadowRoot\n lastPointerX: number\n lastPointerY: number\n cleanupMenu: (() => void) | null\n overlay: { hide(): void }\n prePauseState: { active: boolean; mode: 'inspect' | 'annotate' }\n updateBadgeContent(): void\n setMode(mode: 'inspect' | 'annotate'): void\n syncRuntimeContextCapture(): void\n renderAnnotateSelectionOverlay(): void\n}\n\nfunction asLauncherContext(ctx: unknown): LauncherContext {\n return ctx as LauncherContext\n}\n\nexport function getEffectiveHotKeys(ctx: unknown): HotKeys {\n const state = asLauncherContext(ctx)\n if (state.options.hotKeys !== undefined) return state.options.hotKeys\n if (state.serverHotKeys !== null) return state.serverHotKeys\n return 'alt'\n}\n\nexport function getHotKeyLabel(ctx: unknown): string {\n const hotKeys = getEffectiveHotKeys(ctx)\n if (hotKeys === false) return 'Disabled'\n\n const isMac = typeof navigator !== 'undefined' && /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n\n const keys = hotKeys.split('+').map(k => k.trim().toLowerCase())\n const displayKeys = keys.map(k => {\n if (k === 'alt' || k === 'option') return isMac ? '⌥' : 'Alt'\n if (k === 'cmd' || k === 'meta' || k === 'win' || k === 'command') return isMac ? '⌘' : 'Win'\n if (k === 'ctrl' || k === 'control') return isMac ? '⌃' : 'Ctrl'\n if (k === 'shift') return isMac ? '⇧' : 'Shift'\n return k.charAt(0).toUpperCase() + k.slice(1)\n })\n\n return displayKeys.join(' + ')\n}\n\nexport function createBadge(ctx: unknown): HTMLDivElement {\n const state = asLauncherContext(ctx)\n const btn = document.createElement('div')\n btn.className = badgeClass\n // Start with visibility hidden to prevent FOUC (flash of unstyled content)\n // before the shadow DOM styles are fully parsed by the browser.\n btn.style.visibility = 'hidden'\n\n const indicator = document.createElement('span')\n indicator.className = `${badgeClass}-indicator`\n indicator.dataset.inspectoLauncherIndicator = 'true'\n indicator.dataset.state = 'ready'\n\n const stateSpan = document.createElement('span')\n stateSpan.className = `${badgeClass}-state`\n stateSpan.dataset.inspectoLauncherState = 'true'\n stateSpan.hidden = true\n\n const titleSpan = document.createElement('span')\n titleSpan.className = `${badgeClass}-title`\n titleSpan.textContent = t('launcher.title')\n\n const eyes = document.createElement('span')\n eyes.className = `${badgeClass}-eyes`\n eyes.setAttribute('aria-hidden', 'true')\n const leftEye = document.createElement('span')\n leftEye.className = `${badgeClass}-eye`\n const leftPupil = document.createElement('span')\n leftPupil.className = `${badgeClass}-eye-pupil`\n leftEye.appendChild(leftPupil)\n const rightEye = document.createElement('span')\n rightEye.className = `${badgeClass}-eye`\n const rightPupil = document.createElement('span')\n rightPupil.className = `${badgeClass}-eye-pupil`\n rightEye.appendChild(rightPupil)\n eyes.append(leftEye, rightEye)\n\n const content = document.createElement('div')\n content.className = `${badgeClass}-content`\n const titleBlock = document.createElement('div')\n titleBlock.className = `${badgeClass}-label`\n\n const panel = document.createElement('div')\n panel.className = `${badgeClass}-panel`\n panel.dataset.inspectoLauncherPanel = 'true'\n\n const panelHeader = document.createElement('div')\n panelHeader.className = `${badgeClass}-panel-header`\n const panelHeaderCopy = document.createElement('div')\n panelHeaderCopy.className = `${badgeClass}-panel-header-copy`\n panelHeaderCopy.innerHTML = `<div data-inspecto-launcher-panel-title=\"true\">${t('launcher.panel.title')}</div><div data-inspecto-launcher-panel-subtitle=\"true\">${t('launcher.panel.subtitle')}</div>`\n const panelHeaderActions = document.createElement('div')\n panelHeaderActions.className = `${badgeClass}-panel-header-actions`\n\n const modeGroup = document.createElement('div')\n modeGroup.className = `${badgeClass}-panel-group`\n\n const inspectBtn = document.createElement('button')\n inspectBtn.type = 'button'\n inspectBtn.className = `${badgeClass}-panel-button`\n inspectBtn.dataset.inspectoLauncherAction = 'inspect'\n inspectBtn.innerHTML = `<span data-inspecto-launcher-title=\"true\">${t('launcher.action.inspect.title')}</span><span data-inspecto-launcher-description=\"true\">${t('launcher.action.inspect.description')}</span>`\n inspectBtn.addEventListener('click', event => {\n event.stopPropagation()\n if (state.disabled) setPaused(state, false)\n state.active = true\n state.setMode('inspect')\n state.launcherPanelOpen = false\n state.updateBadgeContent()\n })\n\n const annotateBtn = document.createElement('button')\n annotateBtn.type = 'button'\n annotateBtn.className = `${badgeClass}-panel-button`\n annotateBtn.dataset.inspectoLauncherAction = 'annotate'\n annotateBtn.innerHTML = `<span data-inspecto-launcher-title=\"true\">${t('launcher.action.annotate.title')}</span><span data-inspecto-launcher-description=\"true\">${t('launcher.action.annotate.description')}</span>`\n annotateBtn.addEventListener('click', event => {\n event.stopPropagation()\n if (state.disabled) setPaused(state, false)\n state.active = true\n state.setMode('annotate')\n state.launcherPanelOpen = false\n state.updateBadgeContent()\n })\n\n const pauseBtn = document.createElement('button')\n pauseBtn.type = 'button'\n pauseBtn.className = `${badgeClass}-panel-toggle-button`\n pauseBtn.dataset.inspectoLauncherAction = 'pause'\n pauseBtn.setAttribute('aria-label', t('launcher.action.pause.title'))\n pauseBtn.setAttribute('aria-pressed', 'false')\n pauseBtn.innerHTML = pauseIconSvg\n pauseBtn.addEventListener('click', event => {\n event.stopPropagation()\n setPaused(state, !state.disabled)\n })\n const pauseText = document.createElement('div')\n pauseText.className = `${badgeClass}-panel-status-text`\n pauseText.dataset.inspectoLauncherPauseText = 'true'\n\n const hotkeyHint = document.createElement('div')\n hotkeyHint.className = `${badgeClass}-panel-hint`\n hotkeyHint.dataset.inspectoLauncherHint = 'hotkey'\n\n const utilityGroup = document.createElement('div')\n utilityGroup.className = `${badgeClass}-panel-group`\n utilityGroup.dataset.inspectoLauncherUtilityGroup = 'true'\n\n modeGroup.append(inspectBtn, annotateBtn)\n panelHeader.append(panelHeaderCopy, panelHeaderActions)\n utilityGroup.append(hotkeyHint)\n panelHeaderActions.append(pauseText, pauseBtn)\n panel.append(panelHeader, modeGroup, utilityGroup)\n titleBlock.append(titleSpan, stateSpan)\n content.append(indicator, titleBlock)\n btn.append(content, eyes, panel)\n\n let isDragging = false\n let dragStartX = 0\n let dragStartY = 0\n let initialBadgeX = 0\n let initialBadgeY = 0\n\n const handleDragStart = (e: MouseEvent | TouchEvent) => {\n const target = e.target as Element\n if (\n target.closest(`.${badgeClass}-panel`) ||\n target.closest(`[data-inspecto-launcher-action]`)\n ) {\n return\n }\n\n if (e.type === 'mousedown' && (e as MouseEvent).button !== 0) return\n\n const clientX =\n e.type === 'touchstart' ? (e as TouchEvent).touches[0]!.clientX : (e as MouseEvent).clientX\n const clientY =\n e.type === 'touchstart' ? (e as TouchEvent).touches[0]!.clientY : (e as MouseEvent).clientY\n\n dragStartX = clientX\n dragStartY = clientY\n\n const rect = btn.getBoundingClientRect()\n initialBadgeX = rect.left\n initialBadgeY = rect.top\n\n isDragging = false\n\n document.addEventListener('mousemove', handleDragMove, { passive: false })\n document.addEventListener('mouseup', handleDragEnd)\n document.addEventListener('touchmove', handleDragMove, { passive: false })\n document.addEventListener('touchend', handleDragEnd)\n }\n\n const handleDragMove = (e: MouseEvent | TouchEvent) => {\n const clientX =\n e.type === 'touchmove' ? (e as TouchEvent).touches[0]!.clientX : (e as MouseEvent).clientX\n const clientY =\n e.type === 'touchmove' ? (e as TouchEvent).touches[0]!.clientY : (e as MouseEvent).clientY\n\n const dx = clientX - dragStartX\n const dy = clientY - dragStartY\n\n if (!isDragging && Math.hypot(dx, dy) > 5) {\n isDragging = true\n btn.style.transition = 'none'\n }\n\n if (isDragging) {\n e.preventDefault()\n const maxX = window.innerWidth - btn.offsetWidth\n const maxY = window.innerHeight - btn.offsetHeight\n\n let newX = initialBadgeX + dx\n let newY = initialBadgeY + dy\n\n newX = Math.max(0, Math.min(newX, maxX))\n newY = Math.max(0, Math.min(newY, maxY))\n\n btn.style.bottom = 'auto'\n btn.style.right = 'auto'\n btn.style.left = `${newX}px`\n btn.style.top = `${newY}px`\n }\n }\n\n const handleDragEnd = () => {\n document.removeEventListener('mousemove', handleDragMove)\n document.removeEventListener('mouseup', handleDragEnd)\n document.removeEventListener('touchmove', handleDragMove)\n document.removeEventListener('touchend', handleDragEnd)\n\n if (isDragging) {\n btn.style.transition = ''\n setTimeout(() => {\n isDragging = false\n }, 0)\n }\n }\n\n btn.addEventListener('mousedown', handleDragStart)\n btn.addEventListener('touchstart', handleDragStart, { passive: false })\n\n btn.addEventListener('click', event => {\n if (isDragging) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n if ((event.target as Element).closest?.(`[data-inspecto-launcher-action]`)) return\n state.launcherPanelOpen = !state.launcherPanelOpen\n state.updateBadgeContent()\n })\n\n state.shadowRootEl.appendChild(btn)\n updateLauncherEye(state)\n\n // Wait for two frames to ensure styles are applied before making it visible\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n btn.style.visibility = ''\n })\n })\n\n return btn\n}\n\nexport function setPaused(ctx: unknown, value: boolean): void {\n const state = asLauncherContext(ctx)\n if (value) {\n state.prePauseState = {\n active: state.active,\n mode: state.mode,\n }\n }\n\n state.disabled = value\n state.launcherPanelOpen = false\n if (value) {\n state.active = false\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n } else {\n state.mode = state.prePauseState.mode\n state.active = state.prePauseState.active\n }\n state.syncRuntimeContextCapture()\n state.updateBadgeContent()\n}\n\nexport function dismiss(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n state.badge.style.display = 'none'\n setActive(state, false)\n}\n\nexport function updateBadgeContent(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n const indicator = state.badge.querySelector(\n `[data-inspecto-launcher-indicator]`,\n ) as HTMLSpanElement | null\n const stateSpan = state.badge.querySelector(\n `[data-inspecto-launcher-state]`,\n ) as HTMLSpanElement | null\n const titleSpan = state.badge.querySelector(`.${badgeClass}-title`) as HTMLSpanElement | null\n const panel = state.badge.querySelector(`.${badgeClass}-panel`) as HTMLDivElement | null\n const inspectBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"inspect\"]`,\n ) as HTMLButtonElement | null\n const annotateBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"annotate\"]`,\n ) as HTMLButtonElement | null\n const pauseBtn = state.badge.querySelector(\n `[data-inspecto-launcher-action=\"pause\"]`,\n ) as HTMLButtonElement | null\n const pauseText = state.badge.querySelector(\n `[data-inspecto-launcher-pause-text]`,\n ) as HTMLDivElement | null\n const hotkeyHint = state.badge.querySelector(\n `[data-inspecto-launcher-hint=\"hotkey\"]`,\n ) as HTMLDivElement | null\n\n if (\n !indicator ||\n !titleSpan ||\n !stateSpan ||\n !panel ||\n !inspectBtn ||\n !annotateBtn ||\n !pauseBtn ||\n !pauseText ||\n !hotkeyHint\n ) {\n return\n }\n\n const updateModeButton = (button: HTMLButtonElement, active: boolean) => {\n button.classList.toggle('active', active)\n button.setAttribute('aria-pressed', String(active))\n }\n\n let stateLabel: string\n\n if (state.disabled) {\n stateLabel = t('launcher.state.paused')\n indicator.dataset.state = 'paused'\n state.badge.classList.remove('active')\n state.badge.classList.add('disabled')\n } else if (state.mode === 'annotate') {\n stateLabel = t('launcher.state.annotate')\n indicator.dataset.state = 'annotate'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else if (state.active) {\n stateLabel = t('launcher.state.inspect')\n indicator.dataset.state = 'inspect'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else {\n stateLabel = t('launcher.state.ready')\n indicator.dataset.state = 'ready'\n state.badge.classList.remove('active', 'disabled')\n }\n\n stateSpan.dataset.state = indicator.dataset.state\n stateSpan.hidden = false\n titleSpan.textContent = t('launcher.title')\n stateSpan.textContent = stateLabel\n\n panel.style.display = state.launcherPanelOpen ? 'flex' : 'none'\n const isPaused = state.disabled\n pauseBtn.setAttribute(\n 'aria-label',\n isPaused ? t('launcher.action.resume.title') : t('launcher.action.pause.title'),\n )\n pauseBtn.setAttribute('aria-pressed', isPaused ? 'true' : 'false')\n pauseBtn.innerHTML = isPaused ? playIconSvg : pauseIconSvg\n pauseText.textContent = isPaused\n ? t('launcher.action.resume.title')\n : t('launcher.action.pause.title')\n hotkeyHint.textContent =\n getEffectiveHotKeys(state) === false\n ? t('launcher.hint.hotkeyDisabled')\n : t('launcher.hint.hotkeyQuickJump', { hotkey: getHotKeyLabel(state) })\n inspectBtn.style.display = state.disabled ? 'none' : 'inline-flex'\n annotateBtn.style.display = state.disabled ? 'none' : 'inline-flex'\n\n updateModeButton(inspectBtn, !state.disabled && state.active && state.mode === 'inspect')\n updateModeButton(annotateBtn, !state.disabled && state.active && state.mode === 'annotate')\n updateLauncherEye(state)\n}\n\nexport function setActive(ctx: unknown, value: boolean): void {\n const state = asLauncherContext(ctx)\n state.active = value\n if (!value) {\n state.launcherPanelOpen = false\n }\n state.syncRuntimeContextCapture()\n state.updateBadgeContent()\n\n if (!value) {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n }\n\n if (!value && state.mode === 'annotate') {\n state.renderAnnotateSelectionOverlay()\n }\n}\n\nexport function shouldQuickJumpOnTrigger(ctx: unknown, event: MouseEvent): boolean {\n const state = asLauncherContext(ctx)\n if (state.mode !== 'inspect') return false\n if (event.type !== 'click') return false\n\n const hotKeys = getEffectiveHotKeys(state)\n if (hotKeys === false) return false\n return hotKeysHeld(event, hotKeys)\n}\n\nexport function shouldInvertLauncherEye(ctx: unknown): boolean {\n const state = asLauncherContext(ctx)\n if (state.launcherPanelOpen || state.cleanupMenu !== null) return true\n const activeElement = (getDeepActiveElement(state.shadowRootEl) ??\n getDeepActiveElement(document)) as HTMLElement | null\n if (!(activeElement instanceof HTMLElement)) return false\n if (activeElement.isContentEditable) return true\n if (\n activeElement.matches('textarea, input, select') ||\n activeElement.closest('[data-inspecto-annotate-overlay-layer]') ||\n activeElement.closest('[data-inspecto-annotate-overlay-box]') ||\n activeElement.closest(`.${badgeClass}-panel`) ||\n activeElement.closest('[data-inspecto-launcher-action]')\n ) {\n return true\n }\n return false\n}\n\nexport function updateLauncherEye(ctx: unknown): void {\n const state = asLauncherContext(ctx)\n if (!state.badge) return\n const eyes = state.badge.querySelector(`.${badgeClass}-eyes`) as HTMLSpanElement | null\n if (!eyes) return\n\n const shouldShowEyes = !state.disabled\n eyes.hidden = !shouldShowEyes\n if (!shouldShowEyes) return\n\n const isActiveMode = state.active || state.mode === 'annotate'\n const invert = shouldInvertLauncherEye(state)\n eyes.dataset.state = isActiveMode ? 'active' : 'idle'\n eyes.dataset.mood = invert ? 'averted' : isActiveMode ? 'engaged' : 'idle'\n\n const pupils = Array.from(\n state.badge.querySelectorAll(`.${badgeClass}-eye-pupil`),\n ) as HTMLSpanElement[]\n if (pupils.length === 0) return\n\n const rect = eyes.getBoundingClientRect()\n const eyeCenterX = rect.left + rect.width / 2\n const eyeCenterY = rect.top + rect.height / 2\n const hasPointer = isActiveMode && (state.lastPointerX !== 0 || state.lastPointerY !== 0)\n let dx = hasPointer ? state.lastPointerX - eyeCenterX : 0\n let dy = hasPointer ? state.lastPointerY - eyeCenterY : 0\n if (invert) {\n dx *= -1\n dy *= -1\n }\n\n const distance = Math.hypot(dx, dy)\n const maxOffset = 4\n const scale = distance > 0 ? Math.min(maxOffset, distance) / distance : 0\n const transform = `translate(${(dx * scale).toFixed(2)}px, ${(dy * scale).toFixed(2)}px)`\n pupils.forEach(pupil => {\n pupil.style.transform = transform\n })\n}\n","import type { SnippetResponse, SourceLocation } from '@inspecto-dev/types'\n\n/** Template for user-typed custom prompts from the ask input box. */\nexport function CUSTOM_PROMPT_TEMPLATE(userPrompt: string): string {\n return userPrompt\n}\n\n/**\n * Guess the UI framework based on file extension\n */\nfunction detectFramework(fileName: string): string {\n const ext = fileName.split('.').pop()?.toLowerCase() || ''\n switch (ext) {\n case 'vue':\n return 'Vue'\n case 'svelte':\n return 'Svelte'\n case 'astro':\n return 'Astro'\n case 'jsx':\n case 'tsx':\n return 'React'\n case 'ts':\n case 'js':\n return 'JavaScript/TypeScript'\n default:\n return 'UI'\n }\n}\n\n/**\n * Replace all {{placeholder}} tokens in a prompt template.\n */\nexport function buildPrompt(\n template: string,\n location: SourceLocation,\n snippetResult?: SnippetResponse | null,\n): string {\n const shortFile = location.file.split('/').pop() ?? location.file\n const ext = shortFile.split('.').pop()?.toLowerCase() || 'tsx'\n const framework = detectFramework(shortFile)\n\n let finalPrompt = template\n .replace(/\\{\\{file\\}\\}/g, location.file)\n .replace(/\\{\\{line\\}\\}/g, String(location.line))\n .replace(/\\{\\{column\\}\\}/g, String(location.column))\n .replace(/\\{\\{ext\\}\\}/g, ext)\n .replace(/\\{\\{framework\\}\\}/g, framework)\n .replace(/\\{\\{name\\}\\}/g, shortFile) // fallback\n\n if (snippetResult && snippetResult.snippet) {\n const name = snippetResult.name ?? shortFile\n finalPrompt = finalPrompt.replace(/\\{\\{name\\}\\}/g, name)\n // append snippet context\n finalPrompt += `\\n\\nContext from \\`${location.file}\\` (line ${location.line}):\\n\\`\\`\\`${ext}\\n${snippetResult.snippet}\\n\\`\\`\\``\n }\n\n return finalPrompt\n}\n","import type {\n AiIntentConfig,\n SnippetResponse,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { buildPrompt } from './intents.js'\n\ntype BuildFixBugPromptInput = {\n template: string\n location: SourceLocation\n snippet?: string\n records: RuntimeEvidenceRecord[]\n}\n\nconst MAX_EVIDENCE_RECORDS = 5\nconst LEVEL_WEIGHT: Record<RuntimeEvidenceRecord['relevanceLevel'], number> = {\n high: 3,\n medium: 2,\n low: 1,\n}\n\nexport function selectFixBugEvidence(records: RuntimeEvidenceRecord[]): RuntimeEvidenceRecord[] {\n return records\n .filter(record => record.relevanceLevel !== 'low')\n .slice()\n .sort((a, b) => {\n const levelDiff = LEVEL_WEIGHT[b.relevanceLevel] - LEVEL_WEIGHT[a.relevanceLevel]\n if (levelDiff !== 0) return levelDiff\n\n const scoreDiff = b.relevanceScore - a.relevanceScore\n if (scoreDiff !== 0) return scoreDiff\n\n const occurrenceDiff = b.occurrenceCount - a.occurrenceCount\n if (occurrenceDiff !== 0) return occurrenceDiff\n\n return b.timestamp - a.timestamp\n })\n .slice(0, MAX_EVIDENCE_RECORDS)\n}\n\nexport function buildFixBugPrompt(input: BuildFixBugPromptInput): string {\n const evidence = selectFixBugEvidence(input.records)\n const templateGuidance = normalizeTemplateGuidance(input.template)\n\n return [\n 'Fix the bug for the inspected UI target.',\n buildSourceContextSection(input.location, input.snippet),\n buildEvidenceSection(evidence),\n [\n 'Task:',\n '- Identify the likely root cause.',\n '- Propose the smallest safe fix.',\n '- Separate evidence from guesses when needed.',\n ].join('\\n'),\n templateGuidance ? `Additional guidance:\\n${indentBlock(templateGuidance)}` : '',\n ].join('\\n\\n')\n}\n\nexport function buildPromptForIntent(\n intent: Pick<AiIntentConfig, 'id' | 'prompt' | 'prependPrompt' | 'appendPrompt'>,\n location: SourceLocation,\n snippetResult?: SnippetResponse | null,\n runtimeContext?: RuntimeContextEnvelope | null,\n): string {\n const fullPromptTemplate = assembleIntentPromptTemplate(intent)\n if (intent.id === 'fix-bug') {\n return buildFixBugPrompt({\n template: assembleFixBugAdditionalGuidance(intent),\n location,\n snippet: snippetResult?.snippet || '',\n records: runtimeContext?.records ?? [],\n })\n }\n\n return appendRuntimeContextToPrompt(\n buildPrompt(fullPromptTemplate, location, snippetResult),\n runtimeContext?.records ?? [],\n )\n}\n\nfunction buildSourceContextSection(location: SourceLocation, snippet?: string): string {\n const parts = [\n 'Target source context:',\n `- file: ${location.file}`,\n `- location: ${location.line}:${location.column}`,\n ]\n\n if (snippet) {\n parts.push(`- snippet:\\n${indentBlock(snippet)}`)\n }\n\n return parts.join('\\n')\n}\n\nfunction assembleIntentPromptTemplate(\n intent: Pick<AiIntentConfig, 'prompt' | 'prependPrompt' | 'appendPrompt'>,\n): string {\n let fullPromptTemplate = intent.prompt ?? ''\n if (intent.prependPrompt) {\n fullPromptTemplate = `${intent.prependPrompt}\\n\\n${fullPromptTemplate}`\n }\n if (intent.appendPrompt) {\n fullPromptTemplate = `${fullPromptTemplate}\\n\\n${intent.appendPrompt}`\n }\n return fullPromptTemplate\n}\n\nfunction assembleFixBugAdditionalGuidance(\n intent: Pick<AiIntentConfig, 'prependPrompt' | 'appendPrompt'>,\n): string {\n return [intent.prependPrompt, intent.appendPrompt].filter(Boolean).join('\\n\\n')\n}\n\nfunction buildEvidenceSection(records: RuntimeEvidenceRecord[]): string {\n if (records.length === 0) {\n return ['Runtime evidence:', '- None selected. Do not treat unrelated logs as proof.'].join(\n '\\n',\n )\n }\n\n return ['Runtime evidence:', ...records.map(formatEvidenceRecord)].join('\\n')\n}\n\nexport function appendRuntimeContextToPrompt(\n prompt: string,\n records: RuntimeEvidenceRecord[],\n): string {\n if (records.length === 0) return prompt\n return `${prompt}\\n\\n${buildGenericRuntimeContextSection(records)}`\n}\n\nfunction buildGenericRuntimeContextSection(records: RuntimeEvidenceRecord[]): string {\n return ['Relevant runtime context:', ...records.map(formatEvidenceRecord)].join('\\n')\n}\n\nfunction formatEvidenceRecord(record: RuntimeEvidenceRecord): string {\n const requestSummary =\n record.kind === 'failed-request'\n ? formatRequestSummary(record)\n : `occurrences=${record.occurrenceCount}`\n const reasonSummary = record.relevanceReasons.length\n ? record.relevanceReasons.join('; ')\n : 'timing-based'\n const stackSummary = record.stack ? `\\n stack=${truncateStack(record.stack)}` : ''\n\n return [\n `- [${record.kind}] ${record.message}`,\n ` relevance=${record.relevanceLevel} (${reasonSummary})`,\n ` ${requestSummary}`,\n stackSummary,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n\nfunction formatRequestSummary(record: RuntimeEvidenceRecord): string {\n const method = record.request?.method ?? 'GET'\n const path = record.request?.pathname ?? record.request?.url ?? 'unknown'\n const status = record.request?.status ?? 'unknown'\n return `request=${method} ${path} status=${status}`\n}\n\nfunction truncateStack(stack: string): string {\n return stack.split('\\n').slice(0, 5).join(' | ')\n}\n\nfunction normalizeTemplateGuidance(template: string): string {\n return template.trim()\n}\n\nfunction indentBlock(text: string): string {\n return text\n .split('\\n')\n .map(line => ` ${line}`)\n .join('\\n')\n}\n","import type {\n AiIntentConfig,\n InspectorOptions,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { runtimeSummaryLabel, t } from './i18n.js'\nimport {\n errorMsgClass,\n menuContextPreviewClass,\n menuContextSummaryClass,\n menuContextToggleClass,\n menuInputClass,\n menuInputIconClass,\n menuInputWrapperClass,\n menuSectionClass,\n} from './styles.js'\n\nexport function formatSourceAnchor(location: SourceLocation): string {\n const fileName = location.file.split('/').pop() || location.file\n return `${fileName}:${location.line}:${location.column}`\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function createMenuSection(): HTMLDivElement {\n const section = document.createElement('div')\n section.className = menuSectionClass\n return section\n}\n\nexport function createAskInput(placeholder?: string) {\n const inputWrapper = document.createElement('div')\n inputWrapper.className = menuInputWrapperClass\n\n const input = document.createElement('input')\n input.className = menuInputClass\n input.type = 'text'\n input.placeholder = placeholder ?? t('menu.ask.placeholder.default')\n input.setAttribute('aria-label', t('menu.ask.ariaLabel'))\n\n const sendIcon = document.createElement('div')\n sendIcon.className = menuInputIconClass\n sendIcon.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>`\n sendIcon.style.cursor = 'pointer'\n\n inputWrapper.appendChild(input)\n inputWrapper.appendChild(sendIcon)\n\n return { input, inputWrapper, sendIcon }\n}\n\nexport function showError(menu: HTMLElement, message: string, errorCode?: string): void {\n menu.querySelector(`.${errorMsgClass}`)?.remove()\n\n const errEl = document.createElement('div')\n errEl.className = errorMsgClass\n errEl.textContent = formatMenuErrorMessage(message, errorCode)\n menu.appendChild(errEl)\n}\n\nfunction formatMenuErrorMessage(message: string, errorCode?: string): string {\n if (errorCode === 'CLIENT_CONFIG_UNAVAILABLE') {\n return [\n 'Inspecto is not connected to the local dev server or could not load its client config.',\n 'Restart your dev server and confirm `@inspecto-dev/plugin` is installed in the active build config, then run `inspecto doctor` or `npx @inspecto-dev/cli doctor` if this continues.',\n ].join(' ')\n }\n\n if (errorCode === 'SERVER_UNAVAILABLE') {\n return 'Inspecto could not reach the local dev server. Restart your dev server, then try again. If it still fails, run `inspecto doctor` or `npx @inspecto-dev/cli doctor` from the project root.'\n }\n\n if (errorCode === 'FILE_NOT_FOUND') {\n return 'Source file not found. Restart the dev server or run `npx @inspecto-dev/cli doctor` from the project root.'\n }\n\n if (errorCode === 'IDE_UNAVAILABLE' || errorCode === 'IDE_NOT_FOUND') {\n return 'Unable to open the source file in your editor. Confirm the editor command or URI scheme is available, and set the `ide` field in `.inspecto/settings.local.json` if auto-detection chooses the wrong editor.'\n }\n\n if (errorCode === 'EXTENSION_NOT_INSTALLED') {\n return 'The target AI extension is not installed or not available in this editor. Install it, then run `npx @inspecto-dev/cli doctor` if dispatch still fails.'\n }\n\n if (errorCode === 'CLIPBOARD_WRITE_FAILED') {\n return 'Inspecto could not write the fallback prompt to the clipboard. Check browser clipboard permissions and try again.'\n }\n\n return `Error: ${message}`\n}\n\nexport function isFixIntent(intent: Pick<AiIntentConfig, 'id' | 'aiIntent'>): boolean {\n return intent.aiIntent === 'fix'\n}\n\nexport function isFixUiIntent(intent: Pick<AiIntentConfig, 'id'>): boolean {\n return intent.id === 'fix-ui'\n}\n\nexport function createRuntimeContextUi(\n runtimeContext: RuntimeContextEnvelope | null,\n options: InspectorOptions,\n): HTMLDivElement | null {\n if (!runtimeContext) return null\n\n const summary = formatRuntimeContextSummary(runtimeContext)\n if (!summary) return null\n\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n container.style.gap = '4px'\n\n const summaryEl = document.createElement('div')\n summaryEl.className = menuContextSummaryClass\n summaryEl.textContent = summary\n container.appendChild(summaryEl)\n\n if (options.runtimeContext?.preview !== true || runtimeContext.records.length === 0) {\n return container\n }\n\n const toggle = document.createElement('button')\n toggle.type = 'button'\n toggle.className = menuContextToggleClass\n toggle.textContent = t('menu.preview.show')\n\n const preview = document.createElement('div')\n preview.className = menuContextPreviewClass\n preview.hidden = true\n preview.textContent = formatRuntimeContextPreview(runtimeContext.records)\n\n toggle.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n preview.hidden = !preview.hidden\n toggle.textContent = preview.hidden ? t('menu.preview.show') : t('menu.preview.hide')\n })\n\n container.append(toggle, preview)\n return container\n}\n\nexport function formatRuntimeContextSummary(runtimeContext: RuntimeContextEnvelope): string {\n const parts: string[] = []\n const { runtimeErrorCount, failedRequestCount } = runtimeContext.summary\n\n if (runtimeErrorCount > 0) {\n parts.push(runtimeSummaryLabel('error', runtimeErrorCount))\n }\n\n if (failedRequestCount > 0) {\n parts.push(runtimeSummaryLabel('request', failedRequestCount))\n }\n\n return parts.join(' • ')\n}\n\nexport function formatRuntimeContextPreview(records: RuntimeEvidenceRecord[]): string {\n return records\n .slice(0, 3)\n .map(record => {\n const details =\n record.kind === 'failed-request'\n ? `${record.request?.method ?? 'GET'} ${record.request?.pathname ?? record.request?.url ?? ''}`.trim()\n : `${record.occurrenceCount}x`\n return `[${record.kind}] ${record.message}\\n${details}`\n })\n .join('\\n\\n')\n}\n","import type { AiIntentConfig, RuntimeContextEnvelope, SourceLocation } from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport { buildPromptForIntent } from './fix-bug-prompt.js'\nimport { fetchSnippet } from './http.js'\nimport { t } from './i18n.js'\nimport { isFixUiIntent } from './menu-helpers.js'\nimport { menuItemClass } from './styles.js'\n\nexport function createIntentActionButtons(input: {\n intents: AiIntentConfig[]\n location: SourceLocation\n includeSnippet: boolean\n maxSnippetLines: number\n resolveRuntimeContext: (\n intent: Pick<AiIntentConfig, 'id' | 'aiIntent'>,\n ) => RuntimeContextEnvelope | null\n resolveCssContextPrompt: (intent?: Pick<AiIntentConfig, 'id'>) => string | null\n onSend: (payload: {\n label: string\n button: HTMLButtonElement\n prompt: string\n snippetText: string\n runtimeContext: RuntimeContextEnvelope | null\n }) => Promise<void>\n onError: (message: string, errorCode?: string) => void\n}): HTMLButtonElement[] {\n return input.intents.map(intent => {\n const label = intent.label ?? intent.id\n const btn = document.createElement('button')\n btn.className = menuItemClass\n btn.dataset.role = 'ai-secondary'\n btn.textContent = label\n btn.addEventListener('click', async event => {\n event.stopPropagation()\n btn.disabled = true\n btn.textContent = t('menu.sending')\n\n try {\n let snippetResult = null\n if (input.includeSnippet) {\n snippetResult = await fetchSnippet(\n input.location.file,\n input.location.line,\n input.location.column,\n input.maxSnippetLines,\n )\n }\n\n const requestRuntimeContext = input.resolveRuntimeContext(intent)\n const requestCssContextPrompt = input.resolveCssContextPrompt(\n isFixUiIntent(intent) ? intent : undefined,\n )\n const prompt = appendCssContextToPrompt(\n buildPromptForIntent(intent, input.location, snippetResult, requestRuntimeContext),\n requestCssContextPrompt,\n )\n\n await input.onSend({\n label,\n button: btn,\n prompt,\n snippetText: snippetResult?.snippet || '',\n runtimeContext: requestRuntimeContext,\n })\n } catch (err) {\n btn.disabled = false\n btn.textContent = label\n input.onError((err as Error).message, (err as { errorCode?: string }).errorCode)\n }\n })\n\n return btn\n })\n}\n","import type { RuntimeContextEnvelope, SourceLocation } from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport { appendRuntimeContextToPrompt } from './fix-bug-prompt.js'\nimport { buildPrompt, CUSTOM_PROMPT_TEMPLATE } from './intents.js'\nimport { fetchSnippet, openFileWithDiagnostics, sendToAi } from './http.js'\n\nexport async function openAndSendInspectPrompt(input: {\n location: SourceLocation\n snippetText: string\n promptText: string\n runtimeContext?: RuntimeContextEnvelope | null\n onSuccess: () => void\n onRestore: () => void\n onError: (message: string, errorCode?: string) => void\n}): Promise<void> {\n const openResult = await openFileWithDiagnostics(input.location)\n if (!openResult.success) {\n input.onRestore()\n input.onError('Unable to open the source file.', openResult.errorCode ?? 'IDE_UNAVAILABLE')\n return\n }\n\n await new Promise(r => setTimeout(r, 100))\n\n const result = await sendToAi({\n location: input.location,\n snippet: input.snippetText,\n prompt: input.promptText,\n ...(input.runtimeContext ? { runtimeContext: input.runtimeContext } : {}),\n })\n\n if (result.success) {\n if (result.fallbackPayload?.prompt) {\n try {\n await navigator.clipboard.writeText(result.fallbackPayload.prompt)\n } catch {\n // ignore clipboard fallback failures\n }\n }\n input.onSuccess()\n return\n }\n\n input.onRestore()\n input.onError(result.error ?? 'Unknown error', result.errorCode)\n}\n\nexport async function buildCustomInspectPrompt(input: {\n location: SourceLocation\n ask: string\n targetLabel?: string\n includeSnippet: boolean\n maxSnippetLines: number\n runtimeContext?: RuntimeContextEnvelope | null\n cssContextPrompt?: string | null\n}) {\n let snippetResult = null\n if (input.includeSnippet) {\n snippetResult = await fetchSnippet(\n input.location.file,\n input.location.line,\n input.location.column,\n input.maxSnippetLines,\n )\n }\n\n const prompt = appendCssContextToPrompt(\n appendRuntimeContextToPrompt(\n buildPrompt(\n buildCustomInspectPromptTemplate(input.ask.trim(), input.location, input.targetLabel),\n input.location,\n snippetResult,\n ),\n input.runtimeContext?.records ?? [],\n ),\n input.cssContextPrompt ?? null,\n )\n\n return {\n prompt,\n snippetText: snippetResult?.snippet || '',\n }\n}\n\nfunction buildCustomInspectPromptTemplate(\n ask: string,\n location: SourceLocation,\n targetLabel?: string,\n): string {\n const sections = [CUSTOM_PROMPT_TEMPLATE(ask)]\n\n if (targetLabel?.trim()) {\n sections.push(`Selected component:\\n- ${targetLabel.trim()}`)\n }\n\n sections.push(\n `Source location:\\n- file: ${location.file}\\n- location: ${location.line}:${location.column}`,\n )\n\n return sections.join('\\n\\n')\n}\n","import type { SourceLocation } from '@inspecto-dev/types'\nimport { bugIconSvg, cssIconSvg } from './icons.js'\nimport { t } from './i18n.js'\nimport { formatSourceAnchor } from './menu-helpers.js'\nimport {\n applyHeaderIconButtonStyles,\n menuMetaClass,\n menuTitleClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n} from './styles.js'\n\nexport function createMenuHeaderDom(input: {\n location: SourceLocation\n targetLabel?: string\n canAttachRuntimeContext: boolean\n canAttachCssContext: boolean\n}) {\n const header = document.createElement('div')\n header.className = menuTitleClass\n\n const headerCopy = document.createElement('div')\n headerCopy.style.display = 'flex'\n headerCopy.style.flexDirection = 'column'\n headerCopy.style.gap = '2px'\n headerCopy.style.minWidth = '0'\n headerCopy.style.flex = '1 1 auto'\n\n const title = document.createElement('strong')\n title.style.display = 'block'\n title.style.minWidth = '0'\n title.style.whiteSpace = 'nowrap'\n title.style.overflow = 'hidden'\n title.style.textOverflow = 'ellipsis'\n title.textContent =\n input.targetLabel?.trim() || input.location.file.split('/').pop() || input.location.file\n\n const meta = document.createElement('div')\n meta.className = menuMetaClass\n meta.textContent = formatSourceAnchor(input.location)\n meta.title = `${input.location.file}:${input.location.line}:${input.location.column}`\n\n const headerActions = document.createElement('div')\n headerActions.style.display = 'flex'\n headerActions.style.alignItems = 'center'\n headerActions.style.gap = '6px'\n\n const openButton = document.createElement('button')\n openButton.type = 'button'\n openButton.dataset.role = 'open-icon'\n openButton.setAttribute('aria-label', t('menu.openInEditor'))\n openButton.title = t('menu.openInEditor')\n openButton.textContent = '↗'\n applyHeaderIconButtonStyles(openButton)\n\n const runtimeToggleButton = document.createElement('button')\n runtimeToggleButton.type = 'button'\n runtimeToggleButton.className = runtimeToggleClass\n runtimeToggleButton.dataset.role = 'runtime-context-toggle'\n runtimeToggleButton.setAttribute('aria-label', t('menu.attachRuntime'))\n runtimeToggleButton.title = t('menu.attachRuntime')\n runtimeToggleButton.hidden = !input.canAttachRuntimeContext\n applyHeaderIconButtonStyles(runtimeToggleButton)\n const runtimeToggleIcon = document.createElement('span')\n runtimeToggleIcon.className = runtimeToggleIconClass\n runtimeToggleIcon.innerHTML = bugIconSvg\n const runtimeToggleBadge = document.createElement('span')\n runtimeToggleBadge.className = runtimeToggleBadgeClass\n runtimeToggleBadge.dataset.runtimeErrorBadge = 'true'\n runtimeToggleBadge.hidden = true\n runtimeToggleButton.append(runtimeToggleIcon, runtimeToggleBadge)\n\n const cssToggleButton = document.createElement('button')\n cssToggleButton.type = 'button'\n cssToggleButton.className = runtimeToggleClass\n cssToggleButton.dataset.role = 'css-context-toggle'\n cssToggleButton.setAttribute('aria-label', t('menu.attachCss'))\n cssToggleButton.title = t('menu.attachCss')\n cssToggleButton.hidden = !input.canAttachCssContext\n cssToggleButton.setAttribute('aria-pressed', 'false')\n cssToggleButton.dataset.visualState = 'inactive'\n applyHeaderIconButtonStyles(cssToggleButton)\n const cssToggleIcon = document.createElement('span')\n cssToggleIcon.className = runtimeToggleIconClass\n cssToggleIcon.innerHTML = cssIconSvg\n const cssSvgElement = cssToggleIcon.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n cssSvgElement.style.display = 'block'\n }\n cssToggleButton.append(cssToggleIcon)\n\n headerCopy.append(title, meta)\n header.append(headerCopy, headerActions)\n\n return {\n header,\n headerActions,\n openButton,\n runtimeToggleButton,\n runtimeToggleBadge,\n cssToggleButton,\n }\n}\n\nexport function applyIconToggleButtonState(\n button: HTMLButtonElement,\n enabled: boolean,\n enabledTitle: string,\n disabledTitle: string,\n): void {\n button.setAttribute('aria-pressed', enabled ? 'true' : 'false')\n button.dataset.visualState = enabled ? 'active' : 'inactive'\n button.title = enabled ? enabledTitle : disabledTitle\n if (enabled) {\n button.style.background = 'var(--inspecto-accent-primary)'\n button.style.borderColor = 'transparent'\n button.style.color = '#ffffff'\n button.style.boxShadow = 'var(--inspecto-shadow-accent)'\n return\n }\n\n button.style.background = 'var(--inspecto-surface-subtle)'\n button.style.borderColor = 'var(--inspecto-border-subtle)'\n button.style.color = 'var(--inspecto-text-secondary)'\n button.style.boxShadow = 'none'\n}\n","const DEFAULT_EDGE_MARGIN = 8\n\ntype MenuSize = {\n width: number\n height: number\n}\n\ntype ViewportSize = {\n width: number\n height: number\n}\n\nexport function resolveMenuPosition(input: {\n clickX: number\n clickY: number\n menuRect: MenuSize\n viewport: ViewportSize\n edgeMargin?: number\n}): { left: number; top: number } {\n const edgeMargin = input.edgeMargin ?? DEFAULT_EDGE_MARGIN\n const safeWidth =\n input.viewport.width > 0 ? input.viewport.width : input.menuRect.width + edgeMargin * 2\n const safeHeight =\n input.viewport.height > 0 ? input.viewport.height : input.menuRect.height + edgeMargin * 2\n\n const maxLeft = Math.max(safeWidth - input.menuRect.width - edgeMargin, edgeMargin)\n const left = Math.max(edgeMargin, Math.min(input.clickX, maxLeft))\n\n const maxTop = Math.max(safeHeight - input.menuRect.height - edgeMargin, edgeMargin)\n const top = Math.max(edgeMargin, Math.min(input.clickY + edgeMargin, maxTop))\n\n return { left, top }\n}\n","import { createIntentActionButtons } from './menu-actions.js'\nimport { buildCustomInspectPrompt, openAndSendInspectPrompt } from './menu-send.js'\nimport type {\n Provider,\n InspectorOptions,\n RuntimeContextEnvelope,\n SourceLocation,\n AiIntentConfig,\n} from '@inspecto-dev/types'\nimport { openFileWithDiagnostics, fetchIdeInfo } from './http.js'\nimport { applyIconToggleButtonState, createMenuHeaderDom } from './menu-header.js'\nimport { resolveMenuPosition } from './menu-position.js'\nimport {\n createAskInput,\n createMenuSection,\n createRuntimeContextUi,\n formatRuntimeContextSummary,\n formatRuntimeErrorCount,\n isFixIntent,\n isFixUiIntent,\n showError,\n} from './menu-helpers.js'\nimport { t } from './i18n.js'\nimport { menuClass, loadingSpinnerClass } from './styles.js'\nimport { isAiIntentConfig } from '@inspecto-dev/types'\n\nconst _DISPLAY_NAMES: Record<Provider, string> = {\n copilot: 'GitHub Copilot',\n 'claude-code': 'Claude Code',\n gemini: 'Gemini',\n codex: 'Codex',\n coco: 'Coco CLI',\n trae: 'Trae AI',\n cursor: 'Cursor',\n codebuddy: 'CodeBuddy',\n}\n\ntype MenuRuntimeContextDeps = {\n getRuntimeContext?: (location: SourceLocation) => RuntimeContextEnvelope | null\n captureCssContextPrompt?: () => string | null\n targetLabel?: string\n}\n\nexport function showIntentMenu(\n shadowRoot: ShadowRoot,\n location: SourceLocation,\n clickX: number,\n clickY: number,\n options: InspectorOptions,\n onClose: () => void,\n deps: MenuRuntimeContextDeps = {},\n): () => void {\n const maxSnippetLines = options.maxSnippetLines ?? 100\n const includeSnippet = options.includeSnippet ?? false\n let canAttachRuntimeContext =\n options.runtimeContext?.enabled === true && typeof deps.getRuntimeContext === 'function'\n let runtimeContextPreference: boolean | null = null\n let runtimeContextDefaultMode: 'off' | 'all-on' | 'mixed' = 'off'\n let cssContextEnabled = false\n const canAttachCssContext = typeof deps.captureCssContextPrompt === 'function'\n\n const menu = document.createElement('div')\n menu.className = menuClass\n menu.style.width = '304px'\n menu.style.maxWidth = 'calc(100vw - 16px)'\n menu.style.boxSizing = 'border-box'\n menu.style.pointerEvents = 'auto'\n\n const {\n header,\n headerActions,\n openButton,\n runtimeToggleButton,\n runtimeToggleBadge,\n cssToggleButton,\n } = createMenuHeaderDom({\n location,\n ...(deps.targetLabel ? { targetLabel: deps.targetLabel } : {}),\n canAttachRuntimeContext,\n canAttachCssContext,\n })\n\n const syncCssToggleButton = () => {\n cssToggleButton.hidden = !canAttachCssContext\n if (!canAttachCssContext) {\n cssToggleButton.remove()\n return\n }\n\n if (!headerActions.contains(cssToggleButton)) {\n const referenceNode = headerActions.contains(runtimeToggleButton)\n ? runtimeToggleButton\n : headerActions.contains(openButton)\n ? openButton\n : null\n if (referenceNode) {\n headerActions.insertBefore(cssToggleButton, referenceNode)\n } else {\n headerActions.appendChild(cssToggleButton)\n }\n }\n }\n\n const syncRuntimeToggleButton = () => {\n runtimeToggleButton.hidden = !canAttachRuntimeContext\n if (!canAttachRuntimeContext) {\n runtimeToggleButton.remove()\n return\n }\n\n if (!headerActions.contains(runtimeToggleButton)) {\n const referenceNode = headerActions.contains(openButton) ? openButton : null\n if (referenceNode) {\n headerActions.insertBefore(runtimeToggleButton, referenceNode)\n } else {\n headerActions.appendChild(runtimeToggleButton)\n }\n }\n }\n\n const applyCssToggleButtonState = () => {\n applyIconToggleButtonState(\n cssToggleButton,\n cssContextEnabled,\n t('menu.cssEnabled'),\n t('menu.attachCss'),\n )\n }\n\n syncCssToggleButton()\n syncRuntimeToggleButton()\n applyCssToggleButtonState()\n headerActions.appendChild(openButton)\n menu.appendChild(header)\n\n const runtimeContextSection = createMenuSection()\n runtimeContextSection.hidden = true\n menu.appendChild(runtimeContextSection)\n\n const askAiSection = createMenuSection()\n const { input, inputWrapper, sendIcon } = createAskInput(options.askPlaceholder)\n askAiSection.appendChild(inputWrapper)\n const loadingEl = document.createElement('div')\n loadingEl.className = loadingSpinnerClass\n askAiSection.appendChild(loadingEl)\n menu.appendChild(askAiSection)\n\n const actionsSection = createMenuSection()\n menu.appendChild(actionsSection)\n\n menu.style.left = `${clickX}px`\n menu.style.visibility = 'hidden'\n menu.style.display = 'block'\n\n shadowRoot.appendChild(menu)\n\n const updatePosition = () => {\n const rect = menu.getBoundingClientRect()\n const { left: nextLeft, top: nextTop } = resolveMenuPosition({\n clickX,\n clickY,\n menuRect: { width: rect.width, height: rect.height },\n viewport: {\n width: document.documentElement.clientWidth || window.innerWidth || 0,\n height: document.documentElement.clientHeight || window.innerHeight || 0,\n },\n })\n\n menu.style.left = `${nextLeft}px`\n menu.style.top = `${nextTop}px`\n }\n updatePosition()\n menu.style.visibility = 'visible'\n\n // When the menu input steals focus from a page-controlled input, some apps immediately\n // steal it back in their `onBlur` handlers (often implemented via document-level\n // focusin/focusout delegation). We suppress those delegated focus events while focus\n // is moving into the menu so the page doesn't re-focus itself.\n const teardownDocFocusGuards = (): void => {\n document.removeEventListener('focusin', onDocFocusIn, true)\n document.removeEventListener('focusout', onDocFocusOut, true)\n }\n\n const onDocFocusIn = (e: FocusEvent): void => {\n if (!menu.isConnected) {\n teardownDocFocusGuards()\n return\n }\n const path = e.composedPath?.() ?? []\n if (path.includes(menu)) {\n e.stopImmediatePropagation()\n }\n }\n\n const onDocFocusOut = (e: FocusEvent): void => {\n if (!menu.isConnected) {\n teardownDocFocusGuards()\n return\n }\n const related = (e as FocusEvent).relatedTarget as Node | null\n if (!related) return\n // In Shadow DOM, relatedTarget can be retargeted to the shadow host.\n if (related === shadowRoot.host) {\n e.stopImmediatePropagation()\n return\n }\n\n if (related instanceof Node && menu.contains(related)) {\n e.stopImmediatePropagation()\n }\n }\n\n document.addEventListener('focusin', onDocFocusIn, true)\n document.addEventListener('focusout', onDocFocusOut, true)\n\n // Focus input automatically.\n // NOTE: Do this synchronously to keep it inside the user gesture that opened the menu.\n // Some apps aggressively restore focus to their own inputs on the next tick; the\n // synchronous focus + a couple of follow-up attempts makes the menu reliably typeable.\n const focusAskInput = (): void => {\n try {\n input.focus({ preventScroll: true })\n } catch {\n // Older DOM implementations may not support preventScroll.\n input.focus()\n }\n }\n\n const isAskInputFocused = (): boolean => {\n // In Shadow DOM, document.activeElement is usually the host element.\n // ShadowRoot.activeElement is the reliable check in browsers, but some test DOM\n // implementations may throw when the host is torn down.\n try {\n return shadowRoot.activeElement === input\n } catch {\n return false\n }\n }\n\n focusAskInput()\n const rafId = requestAnimationFrame(() => {\n if (!menu.isConnected) return\n if (!isAskInputFocused()) focusAskInput()\n })\n const focusTimeoutId = setTimeout(() => {\n if (!menu.isConnected) return\n if (!isAskInputFocused()) focusAskInput()\n }, 50)\n\n const onDocClick = (e: MouseEvent): void => {\n // Determine if the click target is within a dialog or modal\n const eventTarget = e.target as HTMLElement | null\n if (eventTarget) {\n // Allow clicks on DOM elements that look like modals or popups to not close the menu\n // E.g., clicking on elements with roles like dialog, menu, tooltip, or inside a portaled floating element\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n\n // Because the menu is inside a Shadow DOM, e.target from the document's perspective\n // is just the <inspecto-overlay> custom element.\n const path = e.composedPath()\n if (path.includes(menu)) return\n cleanup()\n }\n // Use a small timeout so the click that opened the menu doesn't immediately close it\n setTimeout(() => document.addEventListener('click', onDocClick, { capture: true }), 0)\n\n function cleanup(): void {\n document.removeEventListener('click', onDocClick, { capture: true })\n teardownDocFocusGuards()\n cancelAnimationFrame(rafId)\n clearTimeout(focusTimeoutId)\n menu.remove()\n onClose()\n }\n\n const resolveRuntimeContext = (\n intent?: Pick<AiIntentConfig, 'id' | 'aiIntent'>,\n ): RuntimeContextEnvelope | null => {\n if (!canAttachRuntimeContext) return null\n\n const shouldAttach =\n runtimeContextPreference !== null\n ? runtimeContextPreference\n : runtimeContextDefaultMode === 'all-on'\n ? true\n : runtimeContextDefaultMode === 'mixed'\n ? Boolean(intent && isFixIntent(intent))\n : false\n\n if (!shouldAttach) return null\n return deps.getRuntimeContext?.(location) ?? null\n }\n\n const applyRuntimeToggleButtonState = (visualState: 'inactive' | 'mixed' | 'active'): void => {\n runtimeToggleButton.dataset.visualState = visualState\n\n if (visualState === 'active') {\n runtimeToggleButton.style.background = 'var(--inspecto-accent-primary)'\n runtimeToggleButton.style.borderColor = 'transparent'\n runtimeToggleButton.style.color = '#ffffff'\n runtimeToggleButton.style.boxShadow = 'var(--inspecto-shadow-accent)'\n return\n }\n\n if (visualState === 'mixed') {\n runtimeToggleButton.style.background = 'var(--inspecto-surface-subtle)'\n runtimeToggleButton.style.borderColor = 'var(--inspecto-border-subtle)'\n runtimeToggleButton.style.color = 'var(--inspecto-text-secondary)'\n runtimeToggleButton.style.boxShadow = 'none'\n return\n }\n\n runtimeToggleButton.style.background = 'var(--inspecto-surface-subtle)'\n runtimeToggleButton.style.borderColor = 'var(--inspecto-border-subtle)'\n runtimeToggleButton.style.color = 'var(--inspecto-text-secondary)'\n runtimeToggleButton.style.boxShadow = 'none'\n }\n\n const renderRuntimeContextUi = () => {\n runtimeContextSection.replaceChildren()\n\n if (!canAttachRuntimeContext) {\n runtimeContextSection.hidden = true\n return\n }\n\n const runtimeContextForUi = deps.getRuntimeContext?.(location) ?? null\n const runtimeErrorCount = runtimeContextForUi?.summary.runtimeErrorCount ?? 0\n const runtimeSummary = runtimeContextForUi\n ? formatRuntimeContextSummary(runtimeContextForUi)\n : ''\n runtimeToggleBadge.textContent = formatRuntimeErrorCount(runtimeErrorCount)\n\n const ariaPressed =\n runtimeContextPreference !== null\n ? runtimeContextPreference\n ? 'true'\n : 'false'\n : runtimeContextDefaultMode === 'mixed'\n ? 'mixed'\n : runtimeContextDefaultMode === 'all-on'\n ? 'true'\n : 'false'\n\n runtimeToggleButton.setAttribute('aria-pressed', ariaPressed)\n applyRuntimeToggleButtonState(\n ariaPressed === 'true' ? 'active' : ariaPressed === 'mixed' ? 'mixed' : 'inactive',\n )\n runtimeToggleBadge.hidden = ariaPressed !== 'true' || runtimeErrorCount <= 0\n runtimeToggleButton.title =\n ariaPressed === 'true'\n ? runtimeSummary\n ? `${t('menu.runtimeEnabled')} • ${runtimeSummary}`\n : t('menu.runtimeEnabled')\n : ariaPressed === 'mixed'\n ? runtimeSummary\n ? `${t('menu.runtimeFixOnly')} • ${runtimeSummary}`\n : t('menu.runtimeFixOnly')\n : runtimeSummary\n ? `${t('menu.attachRuntime')} • ${runtimeSummary}`\n : t('menu.attachRuntime')\n\n if (ariaPressed !== 'true') {\n runtimeContextSection.hidden = true\n updatePosition()\n return\n }\n\n const runtimeContextUi = createRuntimeContextUi(runtimeContextForUi, options)\n runtimeContextSection.hidden = runtimeContextUi === null\n if (runtimeContextUi) {\n runtimeContextSection.appendChild(runtimeContextUi)\n }\n updatePosition()\n }\n\n runtimeToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n const currentEnabled = runtimeToggleButton.getAttribute('aria-pressed') === 'true'\n runtimeContextPreference = !currentEnabled\n renderRuntimeContextUi()\n })\n\n cssToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n cssContextEnabled = !cssContextEnabled\n applyCssToggleButtonState()\n })\n\n const resolveCssContextPrompt = (intent?: Pick<AiIntentConfig, 'id'>): string | null => {\n const shouldAttachCssContext = cssContextEnabled || Boolean(intent && isFixUiIntent(intent))\n if (!shouldAttachCssContext) return null\n try {\n return deps.captureCssContextPrompt?.() ?? null\n } catch {\n return null\n }\n }\n\n // Handle custom ask input\n const submitAsk = async () => {\n if (!input.value.trim()) return\n input.disabled = true\n sendIcon.style.pointerEvents = 'none'\n\n try {\n const requestRuntimeContext = resolveRuntimeContext()\n const requestCssContextPrompt = resolveCssContextPrompt()\n const built = await buildCustomInspectPrompt({\n location,\n ask: input.value.trim(),\n ...(deps.targetLabel ? { targetLabel: deps.targetLabel } : {}),\n includeSnippet,\n maxSnippetLines,\n runtimeContext: requestRuntimeContext,\n cssContextPrompt: requestCssContextPrompt,\n })\n await openAndSendInspectPrompt({\n location,\n promptText: built.prompt,\n snippetText: built.snippetText,\n runtimeContext: requestRuntimeContext,\n onSuccess: cleanup,\n onRestore: () => {\n input.disabled = false\n sendIcon.style.pointerEvents = 'auto'\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n } catch (err) {\n input.disabled = false\n sendIcon.style.pointerEvents = 'auto'\n showError(menu, (err as Error).message, (err as { errorCode?: string }).errorCode)\n }\n }\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') submitAsk()\n })\n sendIcon.addEventListener('click', submitAsk)\n\n // Fetch only IDE info to render the menu immediately\n fetchIdeInfo()\n .then(ideInfo => {\n loadingEl.remove()\n\n if (!ideInfo) {\n input.placeholder = t('menu.ask.placeholder.setup')\n showError(menu, 'Client config unavailable', 'CLIENT_CONFIG_UNAVAILABLE')\n updatePosition()\n return\n }\n\n if (\n ideInfo?.runtimeContext?.enabled === true &&\n typeof deps.getRuntimeContext === 'function'\n ) {\n canAttachRuntimeContext = true\n syncRuntimeToggleButton()\n }\n const intents = ideInfo?.prompts || []\n if (!options.askPlaceholder) {\n input.placeholder =\n intents.length > 0\n ? t('menu.ask.placeholder.default')\n : t('menu.ask.placeholder.fallback')\n }\n const aiIntents = intents.filter(isAiIntentConfig)\n const hasFixIntent = aiIntents.some(isFixIntent)\n const hasNonFixIntent = aiIntents.some(intent => !isFixIntent(intent))\n runtimeContextDefaultMode = hasFixIntent ? (hasNonFixIntent ? 'mixed' : 'all-on') : 'off'\n renderRuntimeContextUi()\n const aiActions = createIntentActionButtons({\n intents: aiIntents,\n location,\n includeSnippet,\n maxSnippetLines,\n resolveRuntimeContext,\n resolveCssContextPrompt,\n onSend: async payload => {\n await openAndSendInspectPrompt({\n location,\n promptText: payload.prompt,\n snippetText: payload.snippetText,\n runtimeContext: payload.runtimeContext,\n onSuccess: cleanup,\n onRestore: () => {\n payload.button.disabled = false\n payload.button.textContent = payload.label\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n },\n onError: (message, errorCode) => showError(menu, message, errorCode),\n })\n\n openButton.addEventListener('click', async e => {\n e.stopPropagation()\n openButton.disabled = true\n const openResult = await openFileWithDiagnostics(location)\n if (openResult.success) {\n cleanup()\n return\n }\n openButton.disabled = false\n showError(menu, t('menu.error.openIde'), openResult.errorCode ?? 'IDE_UNAVAILABLE')\n })\n\n for (const action of aiActions) {\n actionsSection.appendChild(action)\n }\n updatePosition()\n })\n .catch((err: Error) => {\n loadingEl.remove()\n const isServerDown = err instanceof TypeError\n showError(\n menu,\n isServerDown\n ? 'Cannot connect to inspector server. Is the dev server running?'\n : err.message,\n (err as { errorCode?: string }).errorCode ?? 'UNKNOWN',\n )\n updatePosition()\n })\n\n return cleanup\n}\n","import type { RuntimeEvidenceKind, RuntimeEvidenceRecord } from '@inspecto-dev/types'\n\nexport type CollectorRecordInput = {\n kind: RuntimeEvidenceKind\n message: string\n timestamp: number\n stack?: string\n sourceUrl?: string\n sourceFile?: string\n route?: string\n componentHints?: string[]\n request?: RuntimeEvidenceRecord['request']\n}\n\nexport type RuntimeEvidenceLimits = {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n}\n\nexport type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n\nexport type XhrState = {\n method?: string\n url?: string\n pathname?: string\n attached: boolean\n recorded: boolean\n aborted: boolean\n}\n\nexport const NOISE_PATTERNS = [\n /\\[vite\\]/i,\n /\\bhmr\\b/i,\n /\\bhot update\\b/i,\n /\\bwebsocket\\b/i,\n /\\bsource map\\b/i,\n /extension:\\/\\//i,\n]\n\nexport function isNoisyInput(input: CollectorRecordInput): boolean {\n const candidates = [\n input.message,\n input.stack,\n input.sourceUrl,\n input.sourceFile,\n input.route,\n input.request?.url,\n input.request?.pathname,\n input.request?.responseSummary,\n ].filter((value): value is string => typeof value === 'string')\n\n return candidates.some(candidate => NOISE_PATTERNS.some(pattern => pattern.test(candidate)))\n}\n\nexport function buildRecordId(input: CollectorRecordInput): string {\n return [\n input.kind,\n normalizeKey(input.message),\n normalizeKey(input.stack),\n normalizeKey(input.sourceUrl),\n normalizeKey(input.sourceFile),\n normalizeKey(input.route),\n normalizeKey(input.request?.method),\n normalizeKey(input.request?.url),\n normalizeKey(input.request?.pathname),\n normalizeKey(input.request?.status),\n ].join('::')\n}\n\nexport function cloneRuntimeRecord(record: RuntimeEvidenceRecord): RuntimeEvidenceRecord {\n return {\n ...record,\n relevanceReasons: [...record.relevanceReasons],\n ...(record.componentHints ? { componentHints: [...record.componentHints] } : {}),\n ...(record.request ? { request: { ...record.request } } : {}),\n }\n}\n\nexport function compareRankedRuntimeEvidence(\n a: RuntimeEvidenceRecord,\n b: RuntimeEvidenceRecord,\n): number {\n return (\n b.relevanceScore - a.relevanceScore ||\n b.timestamp - a.timestamp ||\n b.occurrenceCount - a.occurrenceCount\n )\n}\n\nexport function buildRequestRecord(input: {\n method?: string\n url?: string\n pathname?: string\n status?: number\n responseSummary?: string\n}): NonNullable<RuntimeEvidenceRecord['request']> {\n return {\n ...(input.method ? { method: input.method } : {}),\n ...(input.url ? { url: input.url } : {}),\n ...(input.pathname ? { pathname: input.pathname } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.responseSummary ? { responseSummary: input.responseSummary } : {}),\n }\n}\n\nexport function buildXhrState(\n input: Omit<XhrState, 'attached' | 'recorded' | 'aborted'> = {},\n): XhrState {\n return {\n attached: false,\n recorded: false,\n aborted: false,\n ...(input.method ? { method: input.method } : {}),\n ...(input.url ? { url: input.url } : {}),\n ...(input.pathname ? { pathname: input.pathname } : {}),\n }\n}\n\nexport function isAbortLikeError(error: unknown): boolean {\n if (typeof DOMException !== 'undefined' && error instanceof DOMException) {\n return error.name === 'AbortError'\n }\n\n if (error instanceof Error) {\n return error.name === 'AbortError'\n }\n\n return Boolean(\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n (error as { name?: unknown }).name === 'AbortError',\n )\n}\n\nexport function stackReferencesLocation(stack: string, file: string): boolean {\n const normalizedCandidates = buildComparablePaths(file)\n return normalizedCandidates.some(candidate => candidate.length > 0 && stack.includes(candidate))\n}\n\nexport function matchesTargetFile(candidate: string | undefined, file: string): boolean {\n if (!candidate) return false\n\n const candidateVariants = buildComparablePaths(candidate)\n const fileVariants = buildComparablePaths(file)\n\n for (const candidateVariant of candidateVariants) {\n for (const fileVariant of fileVariants) {\n if (\n candidateVariant === fileVariant ||\n candidateVariant.endsWith(fileVariant) ||\n fileVariant.endsWith(candidateVariant)\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport function normalizeKey(value: string | number | undefined): string {\n return value === undefined || value === null ? '' : String(value).trim().replace(/\\s+/g, ' ')\n}\n\nexport function buildComparablePaths(value: string): string[] {\n const variants = new Set<string>()\n const trimmed = value.trim()\n if (!trimmed) return []\n\n variants.add(trimmed)\n\n try {\n const url = new URL(\n trimmed,\n typeof window !== 'undefined' ? window.location.href : 'http://localhost',\n )\n variants.add(url.pathname)\n const decoded = decodeURIComponent(url.pathname)\n variants.add(decoded)\n const basename = decoded.split('/').pop()\n if (basename) variants.add(basename)\n } catch {\n const basename = trimmed.split('/').pop()\n if (basename) variants.add(basename)\n }\n\n return Array.from(variants).filter(Boolean)\n}\n\nexport function stringifyValue(value: unknown): string {\n if (value instanceof Error) return value.stack || value.message\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value)\n }\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n try {\n return JSON.stringify(value)\n } catch {\n return Object.prototype.toString.call(value)\n }\n}\n\nexport function stringifyReason(reason: unknown): string {\n if (reason instanceof Error) return reason.message || reason.stack || 'Unknown promise rejection'\n if (typeof reason === 'string') return reason\n if (reason === undefined) return 'Unknown promise rejection'\n return stringifyValue(reason)\n}\n\nexport function extractConsoleErrorDetails(args: unknown[]): { message: string; stack?: string } {\n const message = args.map(arg => stringifyValue(arg)).join(' ')\n\n for (const arg of args) {\n if (arg instanceof Error && arg.stack) {\n return { message, stack: arg.stack }\n }\n\n if (arg && typeof arg === 'object') {\n const maybeStack = 'stack' in arg ? (arg as { stack?: unknown }).stack : undefined\n if (typeof maybeStack === 'string' && maybeStack.trim()) {\n return { message, stack: maybeStack }\n }\n }\n\n if (typeof arg === 'string' && looksLikeStackTrace(arg)) {\n return { message, stack: arg }\n }\n }\n\n return { message }\n}\n\nexport function buildStackFromErrorEvent(event: ErrorEvent): string | undefined {\n if (!event.filename) return undefined\n const line = typeof event.lineno === 'number' && event.lineno > 0 ? event.lineno : undefined\n const column = typeof event.colno === 'number' && event.colno > 0 ? event.colno : undefined\n if (line && column)\n return `${event.message || 'Error'}\\n at <unknown> (${event.filename}:${line}:${column})`\n if (line) return `${event.message || 'Error'}\\n at <unknown> (${event.filename}:${line})`\n return event.filename\n}\n\nexport function buildRequestDetails(input: RequestInfo | URL, init?: RequestInit) {\n const request = typeof Request !== 'undefined' && input instanceof Request ? input : undefined\n const requestUrl = stringifyRequestUrl(input)\n const pathname = safePathname(requestUrl)\n const method = (init?.method ?? request?.method ?? 'GET').toUpperCase()\n\n return {\n method,\n url: requestUrl,\n pathname,\n }\n}\n\nexport function stringifyRequestUrl(input: RequestInfo | URL): string {\n if (typeof input === 'string') return input\n if (typeof URL !== 'undefined' && input instanceof URL) return input.toString()\n if (typeof Request !== 'undefined' && input instanceof Request) return input.url\n return String(input)\n}\n\nexport function safePathname(value: string | undefined): string | undefined {\n if (!value) return undefined\n\n try {\n return new URL(value, window.location.href).pathname\n } catch {\n return value.startsWith('/') ? value : undefined\n }\n}\n\nfunction looksLikeStackTrace(value: string): boolean {\n return (\n /\\n\\s*at\\s+/i.test(value) ||\n /https?:\\/\\/.+?:\\d+:\\d+/i.test(value) ||\n /\\/[^\\s]+:\\d+:\\d+/.test(value)\n )\n}\n","import type { RuntimeEvidenceRecord } from '@inspecto-dev/types'\nimport {\n buildRecordId,\n buildRequestDetails,\n buildRequestRecord,\n buildStackFromErrorEvent,\n buildXhrState,\n cloneRuntimeRecord,\n extractConsoleErrorDetails,\n isAbortLikeError,\n isNoisyInput,\n safePathname,\n stringifyReason,\n stringifyRequestUrl,\n type CollectorRecordInput,\n type FetchLike,\n type XhrState,\n} from './runtime-context-shared.js'\n\ntype RuntimeCollector = ReturnType<typeof createRuntimeContextCollector>\n\ntype RuntimeCaptureLayer = {\n collector: RuntimeCollector\n}\n\nconst activeCaptureLayers = new Set<RuntimeCaptureLayer>()\nlet originalConsoleError: typeof console.error | null = null\nlet originalFetch: FetchLike | null = null\nlet originalXhrOpen: XMLHttpRequest['open'] | null = null\nlet originalXhrSend: XMLHttpRequest['send'] | null = null\nlet xhrState: WeakMap<XMLHttpRequest, XhrState> | null = null\nlet sharedPatchesInstalled = false\n\nconst sharedWindowErrorHandler = (event: ErrorEvent) => {\n if (!event.error && !event.message) return\n\n const stack = event.error instanceof Error ? event.error.stack : buildStackFromErrorEvent(event)\n const sourceUrl = event.filename || undefined\n\n dispatchToActiveCollectors(collector =>\n collector.recordError({\n message: event.message || event.error?.message || 'Unknown runtime error',\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(stack ? { stack } : {}),\n ...(sourceUrl ? { sourceUrl } : {}),\n }),\n )\n}\n\nconst sharedWindowRejectionHandler = (\n event: PromiseRejectionEvent | (Event & { reason?: unknown }),\n) => {\n const stack = event.reason instanceof Error ? event.reason.stack : undefined\n\n dispatchToActiveCollectors(collector =>\n collector.recordPromiseRejection({\n message: stringifyReason(event.reason),\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(stack ? { stack } : {}),\n }),\n )\n}\n\nexport function createRuntimeContextCollector(maxAgeMs = 60_000) {\n const records = new Map<string, RuntimeEvidenceRecord>()\n\n function normalize(input: CollectorRecordInput): RuntimeEvidenceRecord | null {\n if (isNoisyInput(input)) return null\n\n const id = buildRecordId(input)\n const existing = records.get(id)\n if (existing) {\n existing.occurrenceCount += 1\n existing.timestamp = Math.max(existing.timestamp, input.timestamp)\n return existing\n }\n\n return {\n id,\n kind: input.kind,\n timestamp: input.timestamp,\n message: input.message,\n occurrenceCount: 1,\n relevanceScore: 0,\n relevanceLevel: 'low',\n relevanceReasons: [],\n ...(input.stack ? { stack: input.stack } : {}),\n ...(input.sourceUrl ? { sourceUrl: input.sourceUrl } : {}),\n ...(input.sourceFile ? { sourceFile: input.sourceFile } : {}),\n ...(input.route ? { route: input.route } : {}),\n ...(input.componentHints ? { componentHints: input.componentHints } : {}),\n ...(input.request ? { request: input.request } : {}),\n }\n }\n\n function upsert(input: CollectorRecordInput): void {\n prune(input.timestamp)\n const normalized = normalize(input)\n if (!normalized) return\n records.set(normalized.id, normalized)\n }\n\n function prune(now: number): void {\n for (const [id, record] of records) {\n if (now - record.timestamp > maxAgeMs) {\n records.delete(id)\n }\n }\n }\n\n return {\n recordError(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'runtime-error' })\n },\n recordPromiseRejection(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'promise-rejection' })\n },\n recordConsoleError(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'console-error' })\n },\n recordFailedRequest(input: Omit<CollectorRecordInput, 'kind'>) {\n upsert({ ...input, kind: 'failed-request' })\n },\n snapshot() {\n prune(Date.now())\n return {\n records: Array.from(records.values()).map(cloneRuntimeRecord),\n }\n },\n clear() {\n records.clear()\n },\n }\n}\n\nexport function attachRuntimeContextCapture(collector: RuntimeCollector): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const layer: RuntimeCaptureLayer = { collector }\n activeCaptureLayers.add(layer)\n ensureSharedPatches()\n\n let disposed = false\n return () => {\n if (disposed) return\n disposed = true\n activeCaptureLayers.delete(layer)\n if (activeCaptureLayers.size === 0) {\n restoreSharedPatches()\n }\n }\n}\n\nfunction ensureSharedPatches(): void {\n if (sharedPatchesInstalled || typeof window === 'undefined') return\n\n sharedPatchesInstalled = true\n\n originalConsoleError = console.error\n console.error = ((...args: unknown[]) => {\n const consoleDetails = extractConsoleErrorDetails(args)\n dispatchToActiveCollectors(collector =>\n collector.recordConsoleError({\n message: consoleDetails.message,\n route: window.location.pathname,\n timestamp: Date.now(),\n ...(consoleDetails.stack ? { stack: consoleDetails.stack } : {}),\n }),\n )\n return originalConsoleError!.apply(console, args as never)\n }) as typeof console.error\n\n window.addEventListener('error', sharedWindowErrorHandler)\n window.addEventListener('unhandledrejection', sharedWindowRejectionHandler as EventListener)\n\n if (typeof window.fetch === 'function') {\n originalFetch = window.fetch as FetchLike\n window.fetch = (async (input, init) => {\n const request = buildRequestDetails(input, init)\n try {\n const response = await Reflect.apply(originalFetch!, window, [input, init])\n if (!response.ok) {\n const requestDetails = buildRequestRecord({\n method: request.method,\n url: request.url,\n status: response.status,\n responseSummary: response.statusText || `HTTP ${response.status}`,\n ...(request.pathname ? { pathname: request.pathname } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${request.method} ${request.pathname ?? request.url ?? 'request'} -> ${response.status}`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n }\n return response\n } catch (error) {\n if (isAbortLikeError(error)) {\n throw error\n }\n const requestDetails = buildRequestRecord({\n method: request.method,\n url: request.url,\n responseSummary: stringifyReason(error),\n ...(request.pathname ? { pathname: request.pathname } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${request.method} ${request.pathname ?? request.url ?? 'request'} failed: ${stringifyReason(error)}`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n throw error\n }\n }) as typeof window.fetch\n }\n\n if (typeof XMLHttpRequest !== 'undefined') {\n const prototype = XMLHttpRequest.prototype\n originalXhrOpen = prototype.open\n originalXhrSend = prototype.send\n xhrState = new WeakMap<XMLHttpRequest, XhrState>()\n\n prototype.open = function open(\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n ...rest: [boolean?, string?, string?]\n ) {\n const requestUrl = stringifyRequestUrl(url)\n const pathname = safePathname(requestUrl)\n xhrState!.set(\n this,\n buildXhrState({\n method: method.toUpperCase(),\n url: requestUrl,\n ...(pathname ? { pathname } : {}),\n }),\n )\n return Reflect.apply(originalXhrOpen!, this, [method, url, ...rest]) as void\n }\n\n prototype.send = function send(\n this: XMLHttpRequest,\n ...args: Parameters<XMLHttpRequest['send']>\n ) {\n const state = xhrState!.get(this) ?? buildXhrState()\n xhrState!.set(this, state)\n if (!state.attached) {\n state.attached = true\n const markAborted = () => {\n state.aborted = true\n }\n const recordIfNeeded = () => {\n if (state.recorded) return\n if (state.aborted) return\n if (this.status !== 0 && this.status < 400) return\n state.recorded = true\n const requestDetails = buildRequestRecord({\n responseSummary: this.statusText || 'Request failed',\n ...(state.method ? { method: state.method } : {}),\n ...(state.url ? { url: state.url } : {}),\n ...(state.pathname ? { pathname: state.pathname } : {}),\n ...(this.status ? { status: this.status } : {}),\n })\n dispatchToActiveCollectors(collector =>\n collector.recordFailedRequest({\n message: `${state.method ?? 'GET'} ${state.pathname ?? state.url ?? 'request'} -> ${\n this.status || 'network error'\n }`,\n route: window.location.pathname,\n timestamp: Date.now(),\n request: requestDetails,\n }),\n )\n }\n\n this.addEventListener('abort', markAborted, { once: true })\n this.addEventListener('error', recordIfNeeded, { once: true })\n this.addEventListener('timeout', recordIfNeeded, { once: true })\n this.addEventListener('loadend', recordIfNeeded, { once: true })\n }\n\n return originalXhrSend!.apply(this, args)\n }\n }\n}\n\nfunction restoreSharedPatches(): void {\n if (!sharedPatchesInstalled) return\n sharedPatchesInstalled = false\n\n if (originalConsoleError) {\n console.error = originalConsoleError\n originalConsoleError = null\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('error', sharedWindowErrorHandler)\n window.removeEventListener('unhandledrejection', sharedWindowRejectionHandler as EventListener)\n\n if (originalFetch) {\n window.fetch = originalFetch as typeof window.fetch\n originalFetch = null\n }\n }\n\n if (typeof XMLHttpRequest !== 'undefined' && originalXhrOpen && originalXhrSend) {\n XMLHttpRequest.prototype.open = originalXhrOpen\n XMLHttpRequest.prototype.send = originalXhrSend\n }\n originalXhrOpen = null\n originalXhrSend = null\n xhrState = null\n}\n\nfunction dispatchToActiveCollectors(callback: (collector: RuntimeCollector) => void): void {\n for (const layer of activeCaptureLayers) {\n callback(layer.collector)\n }\n}\n","import type {\n RuntimeContextEnvelope,\n RuntimeContextSummary,\n RuntimeEvidenceLevel,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport {\n cloneRuntimeRecord,\n compareRankedRuntimeEvidence,\n matchesTargetFile,\n stackReferencesLocation,\n type RuntimeEvidenceLimits,\n} from './runtime-context-shared.js'\n\nexport function rankRuntimeEvidence(\n records: RuntimeEvidenceRecord[],\n location: SourceLocation,\n): RuntimeEvidenceRecord[] {\n return records\n .map(record => {\n const relevanceReasons: string[] = []\n let relevanceScore = 0\n\n if (record.stack && stackReferencesLocation(record.stack, location.file)) {\n relevanceScore += 0.6\n relevanceReasons.push('stack references target file')\n }\n\n if (\n matchesTargetFile(record.sourceFile, location.file) ||\n matchesTargetFile(record.sourceUrl, location.file)\n ) {\n relevanceScore += 0.15\n relevanceReasons.push('source file matches target file')\n }\n\n if (record.kind === 'runtime-error') {\n relevanceScore += 0.2\n relevanceReasons.push('runtime error')\n } else if (record.kind === 'promise-rejection') {\n relevanceScore += 0.15\n relevanceReasons.push('promise rejection')\n } else if (record.kind === 'console-error') {\n relevanceScore += 0.1\n relevanceReasons.push('console error')\n } else {\n relevanceScore += 0.2\n relevanceReasons.push('failed request')\n if (record.request?.pathname || record.request?.url) {\n relevanceScore += 0.15\n relevanceReasons.push('request failed during active session')\n }\n }\n\n if (record.occurrenceCount > 1) {\n relevanceScore += Math.min(0.15, (record.occurrenceCount - 1) * 0.05)\n relevanceReasons.push(`seen ${record.occurrenceCount} times`)\n }\n\n if (record.route && record.route === location.file) {\n relevanceScore += 0.05\n relevanceReasons.push('route matches target file')\n }\n\n if (record.message.includes(location.file)) {\n relevanceScore += 0.1\n relevanceReasons.push('message references target file')\n }\n\n if (record.stack?.includes(`${location.line}:${location.column}`)) {\n relevanceScore += 0.1\n relevanceReasons.push('stack references target location')\n }\n\n const normalizedScore = Math.min(1, relevanceScore)\n const relevanceLevel: RuntimeEvidenceLevel =\n normalizedScore >= 0.7 ? 'high' : normalizedScore >= 0.35 ? 'medium' : 'low'\n\n return {\n ...cloneRuntimeRecord(record),\n relevanceScore: normalizedScore,\n relevanceLevel,\n relevanceReasons,\n }\n })\n .sort(compareRankedRuntimeEvidence)\n}\n\nexport function selectRuntimeEvidence(\n records: RuntimeEvidenceRecord[],\n location: SourceLocation | SourceLocation[],\n limits: RuntimeEvidenceLimits = {},\n): RuntimeEvidenceRecord[] {\n const locations = Array.isArray(location) ? location : [location]\n if (locations.length === 0 || records.length === 0) return []\n\n const bestById = new Map<string, RuntimeEvidenceRecord>()\n\n for (const candidateLocation of locations) {\n for (const rankedRecord of rankRuntimeEvidence(records, candidateLocation)) {\n const existing = bestById.get(rankedRecord.id)\n if (!existing || compareRankedRuntimeEvidence(rankedRecord, existing) < 0) {\n bestById.set(rankedRecord.id, rankedRecord)\n }\n }\n }\n\n const ranked = Array.from(bestById.values())\n .filter(record => record.relevanceLevel !== 'low')\n .sort(compareRankedRuntimeEvidence)\n\n const maxRuntimeErrors = limits.maxRuntimeErrors ?? Number.POSITIVE_INFINITY\n const maxFailedRequests = limits.maxFailedRequests ?? Number.POSITIVE_INFINITY\n\n const selected: RuntimeEvidenceRecord[] = []\n let runtimeErrorCount = 0\n let failedRequestCount = 0\n\n for (const record of ranked) {\n if (record.kind === 'failed-request') {\n if (failedRequestCount >= maxFailedRequests) continue\n failedRequestCount += 1\n selected.push(record)\n continue\n }\n\n if (runtimeErrorCount >= maxRuntimeErrors) continue\n runtimeErrorCount += 1\n selected.push(record)\n }\n\n return selected\n}\n\nexport function summarizeRuntimeContext(records: RuntimeEvidenceRecord[]): RuntimeContextSummary {\n return {\n runtimeErrorCount: records.filter(record => record.kind !== 'failed-request').length,\n failedRequestCount: records.filter(record => record.kind === 'failed-request').length,\n includedRecordIds: records.map(record => record.id),\n }\n}\n\nexport function createRuntimeContextEnvelope(\n records: RuntimeEvidenceRecord[],\n): RuntimeContextEnvelope {\n return {\n summary: summarizeRuntimeContext(records),\n records: records.map(cloneRuntimeRecord),\n }\n}\n","export {\n attachRuntimeContextCapture,\n createRuntimeContextCollector,\n} from './runtime-context-capture.js'\nexport {\n createRuntimeContextEnvelope,\n rankRuntimeEvidence,\n selectRuntimeEvidence,\n summarizeRuntimeContext,\n} from './runtime-context-selection.js'\n","import { showIntentMenu } from './menu.js'\nimport { openFile } from './http.js'\nimport { findInspectable, getInspectableLocation } from './component-utils.js'\nimport { createRuntimeContextEnvelope, selectRuntimeEvidence } from './runtime-context.js'\nimport type { InspectorOptions, SourceLocation } from '@inspecto-dev/types'\n\ntype InteractionOptions = InspectorOptions & {\n mode?: 'inspect' | 'annotate'\n}\n\ntype InteractionContext = {\n lastPointerX: number\n lastPointerY: number\n mode: 'inspect' | 'annotate'\n disabled: boolean\n active: boolean\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n pendingAnnotateViewportFrame: number | null\n overlay: { hide(): void; show(target: Element, label: string): void }\n shadowRootEl: ShadowRoot\n style: CSSStyleDeclaration\n cleanupMenu: (() => void) | null\n options: InteractionOptions\n runtimeContextCollector: {\n snapshot(): { records: unknown[] }\n }\n updateLauncherEye(): void\n pause(): void\n isInspectorActive(e: MouseEvent): boolean\n markTargetInAnnotateSession(element: Element, location: SourceLocation): void\n addTargetToCurrentAnnotation(element: Element, location: SourceLocation): void\n shouldQuickJumpOnTrigger(e: MouseEvent): boolean\n openInspectMenu(\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n ): void\n renderAnnotateSelectionOverlay(): void\n describeElement(element: Element): string\n getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n captureCssContextPromptForElement(element: Element, location: SourceLocation): string | null\n}\n\nfunction asInteractionContext(ctx: unknown): InteractionContext {\n return ctx as InteractionContext\n}\n\nexport function handleMouseMove(ctx: unknown, event: MouseEvent): void {\n const state = asInteractionContext(ctx)\n state.lastPointerX = event.clientX\n state.lastPointerY = event.clientY\n state.updateLauncherEye()\n\n if (state.cleanupMenu !== null) {\n // Determine if the click target is within a dialog or modal\n const eventTarget = event.target as HTMLElement | null\n if (eventTarget) {\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n state.overlay.hide()\n return\n }\n\n const isActive = state.isInspectorActive(event)\n if (!isActive) {\n state.overlay.hide()\n return\n }\n\n const target = findInspectable(event.target as Element)\n if (!target) {\n state.overlay.hide()\n return\n }\n\n const loc = getInspectableLocation(target)\n const label = loc ? `${loc.file.split('/').pop() ?? ''}:${loc.line}` : ''\n\n if (state.mode === 'annotate' && state.annotateCapturePaused) {\n state.overlay.hide()\n return\n }\n\n state.overlay.show(target, label)\n event.stopPropagation()\n}\n\nexport function handleTrigger(ctx: unknown, event: MouseEvent): void {\n const state = asInteractionContext(ctx)\n if (state.cleanupMenu !== null) {\n // Determine if the click target is within a dialog or modal\n const eventTarget = event.target as HTMLElement | null\n if (eventTarget) {\n if (\n eventTarget.closest(\n '[role=\"dialog\"], [role=\"menu\"], [role=\"tooltip\"], [role=\"presentation\"], [role=\"listbox\"], [data-radix-popper-content-wrapper], [data-radix-focus-guard]',\n )\n ) {\n return\n }\n }\n return\n }\n if (!state.isInspectorActive(event)) return\n\n const target = findInspectable(event.target as Element)\n if (!target) return\n\n if (state.mode === 'annotate' && state.annotateCapturePaused) return\n\n event.preventDefault()\n event.stopPropagation()\n\n const loc = getInspectableLocation(target)\n if (!loc) return\n\n if (state.mode === 'annotate') {\n if (state.annotateQuickCaptureEnabled) {\n state.markTargetInAnnotateSession(target, loc)\n } else {\n state.addTargetToCurrentAnnotation(target, loc)\n }\n return\n }\n\n if (state.shouldQuickJumpOnTrigger(event)) {\n state.overlay.hide()\n state.cleanupMenu = null\n void openFile(loc)\n return\n }\n\n state.overlay.hide()\n state.openInspectMenu(loc, event.clientX, event.clientY, target)\n}\n\nexport function handleKeyDown(ctx: unknown, event: KeyboardEvent): void {\n const state = asInteractionContext(ctx)\n if (event.key === 'Escape') {\n if (state.cleanupMenu !== null) {\n state.cleanupMenu()\n } else if (!state.disabled) {\n state.pause()\n }\n state.overlay.hide()\n }\n state.updateLauncherEye()\n}\n\nexport function handleViewportChange(ctx: unknown): void {\n const state = asInteractionContext(ctx)\n if (state.mode !== 'annotate') return\n if (\n !(state as { annotateSession?: { current?: { target?: unknown } } }).annotateSession?.current\n ?.target\n )\n return\n if (state.pendingAnnotateViewportFrame !== null) return\n state.pendingAnnotateViewportFrame = requestAnimationFrame(() => {\n state.pendingAnnotateViewportFrame = null\n state.renderAnnotateSelectionOverlay()\n })\n}\n\nexport function openInspectMenu(\n ctx: unknown,\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n): void {\n const state = asInteractionContext(ctx)\n state.cleanupMenu?.()\n state.style.pointerEvents = 'auto'\n\n state.cleanupMenu = showIntentMenu(\n state.shadowRootEl,\n loc,\n clientX,\n clientY,\n state.options,\n () => {\n state.style.pointerEvents = 'none'\n state.cleanupMenu = null\n },\n {\n targetLabel: state.describeElement(targetElement),\n getRuntimeContext: targetLocation =>\n createRuntimeContextEnvelope(\n selectRuntimeEvidence(\n state.runtimeContextCollector.snapshot().records as never[],\n targetLocation,\n state.getRuntimeContextLimits(),\n ),\n ),\n captureCssContextPrompt: () => state.captureCssContextPromptForElement(targetElement, loc),\n },\n )\n}\n","import type { FeedbackRecord, FeedbackRecordSession } from '@inspecto-dev/types'\nimport { t } from './i18n.js'\n\nexport type PromptChipRecord = {\n id: string\n label: string\n locationLabel: string\n selector?: string | undefined\n note: string\n state: 'draft' | 'saved' | 'completed'\n}\n\nexport type InstructionSegment =\n | {\n type: 'text'\n text: string\n }\n | {\n type: 'chip'\n id: string\n }\n\nexport function createSidebarButton(\n label: string,\n className: string,\n isHTML = false,\n): HTMLButtonElement {\n const button = document.createElement('button')\n button.type = 'button'\n button.className = className\n if (isHTML) {\n button.innerHTML = label\n } else {\n button.textContent = label\n }\n return button\n}\n\nexport function getLiveStatusMessage(input: {\n isSending: boolean\n sendingScope: 'quick-ask' | 'create-task' | null\n successScope: 'quick-ask' | 'create-task' | null\n}): string {\n if (input.isSending && input.sendingScope === 'quick-ask') {\n return t('annotate.liveStatus.quickAskSending')\n }\n if (input.isSending && input.sendingScope === 'create-task') {\n return t('annotate.liveStatus.createTaskSending')\n }\n if (!input.isSending && input.successScope === 'quick-ask') {\n return t('annotate.liveStatus.quickAskSent')\n }\n if (!input.isSending && input.successScope === 'create-task') {\n return t('annotate.liveStatus.taskCreated')\n }\n return ''\n}\n\nexport function formatRuntimeErrorCount(count: number): string {\n if (count > 99) return '99+'\n return String(count)\n}\n\nexport function toLocationLabel(record: FeedbackRecord | FeedbackRecordSession['current']): string {\n const target = record.target\n if (!target) return t('annotate.source.unknown')\n return `${target.location.file}:${target.location.line}:${target.location.column}`\n}\n\nexport function getPromptChipRecords(\n session: FeedbackRecordSession,\n isLatestSessionResolved?: boolean,\n): PromptChipRecord[] {\n const savedState: PromptChipRecord['state'] = isLatestSessionResolved ? 'completed' : 'saved'\n const chips: PromptChipRecord[] = session.records.map(record => ({\n id: record.id,\n label: record.target.label || t('annotate.target.unknown'),\n locationLabel: toLocationLabel(record),\n ...(record.target.selector ? { selector: record.target.selector } : {}),\n note: record.note,\n state: savedState,\n }))\n\n if (session.current.target) {\n chips.push({\n id: session.current.id,\n label: session.current.target.label || t('annotate.target.unknown'),\n locationLabel: toLocationLabel(session.current),\n ...(session.current.target.selector ? { selector: session.current.target.selector } : {}),\n note: session.current.note,\n state: 'draft',\n })\n }\n\n return chips\n}\n\nexport function normalizeInstructionSegments(segments: InstructionSegment[]): InstructionSegment[] {\n const normalized: InstructionSegment[] = []\n\n for (const segment of segments) {\n if (segment.type === 'text') {\n if (segment.text.length === 0) continue\n const previous = normalized[normalized.length - 1]\n if (previous?.type === 'text') {\n previous.text += segment.text\n } else {\n normalized.push({ type: 'text', text: segment.text })\n }\n continue\n }\n\n normalized.push(segment)\n }\n\n return normalized\n}\n\nexport function serializeInstructionSegments(\n segments: InstructionSegment[],\n resolveChipLabel: (id: string) => string | null,\n): string {\n return normalizeInstructionSegments(segments)\n .map(segment => {\n if (segment.type === 'text') {\n return segment.text\n }\n\n return resolveChipLabel(segment.id) ?? ''\n })\n .join('')\n .replace(/\\u00A0/g, ' ')\n}\n\nexport function captureInstructionSegmentsFromDom(\n instructionInput: HTMLElement,\n annotateSidebarChipClass: string,\n): InstructionSegment[] {\n const segments: InstructionSegment[] = []\n\n for (const node of instructionInput.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n segments.push({ type: 'text', text: node.textContent ?? '' })\n continue\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) continue\n const el = node as HTMLElement\n\n if (el.classList.contains(annotateSidebarChipClass) && el.dataset.annotateChipId) {\n segments.push({ type: 'chip', id: el.dataset.annotateChipId })\n continue\n }\n\n if (el.tagName === 'BR') {\n segments.push({ type: 'text', text: '\\n' })\n continue\n }\n\n if (el.tagName === 'DIV') {\n segments.push({ type: 'text', text: `${el.textContent ?? ''}\\n` })\n continue\n }\n\n segments.push({ type: 'text', text: el.textContent ?? '' })\n }\n\n return normalizeInstructionSegments(segments)\n}\n\nexport function getInstructionChipIdSignature(segments: InstructionSegment[]): string {\n return segments\n .filter(\n (segment): segment is Extract<InstructionSegment, { type: 'chip' }> =>\n segment.type === 'chip',\n )\n .map(segment => segment.id)\n .join('|')\n}\n\nexport function getChipSignature(\n session: FeedbackRecordSession,\n isLatestSessionResolved?: boolean,\n): string {\n return getPromptChipRecords(session, isLatestSessionResolved)\n .map(chip => `${chip.id}:${chip.state}:${chip.label}`)\n .join('|')\n}\n","import {\n annotateConfirmDialogClass,\n annotateQueueListClass,\n annotateSidebarActionsClass,\n annotateSidebarButtonClass,\n annotateSidebarClass,\n annotateSidebarEmptyClass,\n annotateSidebarFooterClass,\n annotateSidebarHeaderClass,\n annotateSidebarInputClass,\n annotateSidebarLabelClass,\n annotateSidebarQueueMetaClass,\n annotateSidebarSectionClass,\n annotateSidebarTextClass,\n errorMsgClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n runtimeToggleIconClass,\n} from './styles.js'\nimport { bugIconSvg, cssIconSvg, pureMarkIconSvg, closeIconSvg } from './icons.js'\nimport { createSidebarButton } from './annotate-sidebar-helpers.js'\nimport { t } from './i18n.js'\n\nexport interface AnnotateSidebarDom {\n element: HTMLElement\n headerStatus: HTMLDivElement\n quickCaptureButton: HTMLButtonElement\n cssContextButton: HTMLButtonElement\n runtimeContextButton: HTMLButtonElement\n runtimeContextBadge: HTMLSpanElement\n modeButton: HTMLButtonElement\n exitButton: HTMLButtonElement\n emptyState: HTMLElement\n draftSection: HTMLElement\n workflowRow: HTMLDivElement\n instructionInput: HTMLDivElement\n includedSummary: HTMLElement\n recordsList: HTMLDivElement\n allPromptText: HTMLPreElement\n latestSessionSection: HTMLElement\n latestSessionTitle: HTMLDivElement\n latestSessionStatus: HTMLSpanElement\n latestSessionMeta: HTMLDivElement\n latestSessionMessage: HTMLDivElement\n latestSessionHint: HTMLDivElement\n latestSessionRefreshButton: HTMLButtonElement\n latestSessionError: HTMLDivElement\n footer: HTMLElement\n footerLeftActions: HTMLDivElement\n recommendedActionLabel: HTMLDivElement\n statusMessage: HTMLDivElement\n errorMessage: HTMLDivElement\n copyContextButton: HTMLButtonElement\n previewButton: HTMLButtonElement\n previewFloat: HTMLDivElement\n previewFloatContent: HTMLPreElement\n quickAskButton: HTMLButtonElement\n createTaskButton: HTMLButtonElement\n updateRawPromptPreviewPosition(): void\n setRawPromptPreviewVisible(isVisible: boolean): void\n showConfirmDialog(message: string, onConfirm: () => void): void\n}\n\nexport function createAnnotateSidebarDom(shadowRoot: ShadowRoot): AnnotateSidebarDom {\n const element = document.createElement('aside')\n element.className = annotateSidebarClass\n\n const header = document.createElement('header')\n header.className = annotateSidebarHeaderClass\n\n const headerCopy = document.createElement('div')\n headerCopy.className = annotateSidebarLabelClass\n\n const headerTitle = document.createElement('div')\n headerTitle.setAttribute('data-inspecto-annotate-title', 'true')\n headerTitle.textContent = t('annotate.mode.title')\n\n const headerStatus = document.createElement('div')\n headerStatus.setAttribute('data-inspecto-annotate-header-status', 'true')\n\n headerCopy.append(headerTitle, headerStatus)\n\n const headerActionsLeft = document.createElement('div')\n headerActionsLeft.className = annotateSidebarActionsClass\n headerActionsLeft.setAttribute('data-inspecto-annotate-header-actions-left', 'true')\n\n const previewButton = createSidebarButton('</>', annotateSidebarButtonClass)\n previewButton.dataset.role = 'raw-preview-toggle'\n previewButton.setAttribute('aria-label', t('annotate.previewRawPrompt'))\n previewButton.title = t('annotate.previewRawPrompt')\n\n const copyContextButton = createSidebarButton(\n '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>',\n annotateSidebarButtonClass,\n true,\n )\n copyContextButton.dataset.role = 'raw-preview'\n copyContextButton.setAttribute('aria-label', t('annotate.copyContext'))\n copyContextButton.title = t('annotate.copyContext')\n\n headerActionsLeft.append(previewButton, copyContextButton)\n\n const headerActionsRight = document.createElement('div')\n headerActionsRight.className = annotateSidebarActionsClass\n headerActionsRight.setAttribute('data-inspecto-annotate-header-actions-right', 'true')\n\n const headerActionsContainer = document.createElement('div')\n headerActionsContainer.style.display = 'flex'\n headerActionsContainer.style.gap = '8px'\n headerActionsContainer.style.alignItems = 'center'\n\n const quickCaptureButton = createSidebarButton(pureMarkIconSvg, annotateSidebarButtonClass, true)\n quickCaptureButton.dataset.role = 'quick-capture'\n quickCaptureButton.classList.add(runtimeToggleClass)\n quickCaptureButton.setAttribute('aria-label', t('annotate.quickCapture.toggle'))\n quickCaptureButton.title = t('annotate.quickCapture.toggle')\n const quickCaptureSvgElement = quickCaptureButton.querySelector('svg')\n if (quickCaptureSvgElement) {\n quickCaptureSvgElement.style.width = '18px'\n quickCaptureSvgElement.style.height = '18px'\n quickCaptureSvgElement.style.display = 'block'\n }\n\n const cssContextButton = createSidebarButton(cssIconSvg, annotateSidebarButtonClass, true)\n const cssSvgElement = cssContextButton.querySelector('svg')\n if (cssSvgElement) {\n cssSvgElement.style.width = '18px'\n cssSvgElement.style.height = '18px'\n }\n cssContextButton.classList.add(runtimeToggleClass)\n cssContextButton.setAttribute('aria-label', t('menu.attachCss'))\n cssContextButton.title = t('menu.attachCss')\n\n const runtimeContextButton = createSidebarButton('⚡', annotateSidebarButtonClass)\n runtimeContextButton.classList.add(runtimeToggleClass)\n runtimeContextButton.setAttribute('aria-label', t('menu.attachRuntime'))\n runtimeContextButton.title = t('menu.attachRuntime')\n const runtimeContextIcon = document.createElement('span')\n runtimeContextIcon.className = runtimeToggleIconClass\n runtimeContextIcon.innerHTML = bugIconSvg\n const runtimeContextBadge = document.createElement('span')\n runtimeContextBadge.className = runtimeToggleBadgeClass\n runtimeContextBadge.dataset.runtimeErrorBadge = 'true'\n runtimeContextBadge.hidden = true\n runtimeContextButton.replaceChildren(runtimeContextIcon, runtimeContextBadge)\n\n const modeButton = createSidebarButton('', annotateSidebarButtonClass)\n modeButton.style.fontSize = '12px'\n modeButton.style.display = 'inline-flex'\n modeButton.style.alignItems = 'center'\n modeButton.style.justifyContent = 'center'\n\n const exitButton = createSidebarButton(closeIconSvg, annotateSidebarButtonClass, true)\n const closeSvgElement = exitButton.querySelector('svg')\n if (closeSvgElement) {\n closeSvgElement.style.width = '18px'\n closeSvgElement.style.height = '18px'\n closeSvgElement.style.display = 'block'\n }\n exitButton.style.display = 'inline-flex'\n exitButton.style.alignItems = 'center'\n exitButton.style.justifyContent = 'center'\n exitButton.setAttribute('aria-label', t('annotate.exitMode'))\n exitButton.title = t('annotate.exitMode')\n\n headerActionsRight.append(\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n modeButton,\n exitButton,\n )\n headerActionsContainer.append(headerActionsLeft, headerActionsRight)\n header.append(headerCopy, headerActionsContainer)\n\n const emptyState = document.createElement('section')\n emptyState.className = annotateSidebarSectionClass\n emptyState.dataset.variant = 'empty-state'\n emptyState.style.display = 'none'\n\n const emptyStateTitle = document.createElement('div')\n emptyStateTitle.setAttribute('data-inspecto-annotate-empty-title', 'true')\n emptyStateTitle.textContent = t('annotate.empty.title')\n\n const emptyStateBody = document.createElement('div')\n emptyStateBody.className = annotateSidebarEmptyClass\n emptyStateBody.setAttribute('data-inspecto-annotate-empty-body', 'true')\n emptyStateBody.textContent = t('annotate.empty.body')\n\n emptyState.append(emptyStateTitle, emptyStateBody)\n\n const draftSection = document.createElement('section')\n draftSection.className = annotateSidebarSectionClass\n draftSection.dataset.variant = 'draft'\n\n const promptContainer = document.createElement('div')\n promptContainer.style.display = 'flex'\n promptContainer.style.flexDirection = 'column'\n promptContainer.style.gap = '0'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.045)'\n promptContainer.style.border = '1px solid rgba(255, 255, 255, 0.08)'\n promptContainer.style.borderRadius = 'var(--inspecto-radius-lg)'\n promptContainer.style.padding = '0'\n promptContainer.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.03)'\n promptContainer.style.transition =\n 'border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease'\n\n const instructionInput = document.createElement('div')\n instructionInput.contentEditable = 'true'\n instructionInput.style.border = 'none'\n instructionInput.style.background = 'transparent'\n instructionInput.style.minHeight = '60px'\n instructionInput.style.outline = 'none'\n instructionInput.style.boxShadow = 'none'\n instructionInput.className = annotateSidebarInputClass\n instructionInput.dataset.placeholder = t('annotate.instruction.placeholder')\n instructionInput.setAttribute('aria-label', t('annotate.instruction.ariaLabel'))\n\n const styleEl = document.createElement('style')\n styleEl.textContent = `\n .${annotateSidebarInputClass}[contenteditable]:empty::before {\n content: attr(data-placeholder);\n color: var(--inspecto-text-tertiary);\n pointer-events: none;\n display: block;\n }\n `\n shadowRoot.appendChild(styleEl)\n\n promptContainer.append(instructionInput)\n\n instructionInput.addEventListener('focus', () => {\n promptContainer.style.borderColor = 'rgba(93, 82, 243, 0.42)'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.055)'\n promptContainer.style.boxShadow = '0 0 0 3px rgba(93, 82, 243, 0.16)'\n })\n instructionInput.addEventListener('blur', () => {\n promptContainer.style.borderColor = 'rgba(255, 255, 255, 0.08)'\n promptContainer.style.background = 'rgba(255, 255, 255, 0.045)'\n promptContainer.style.boxShadow = 'inset 0 1px 0 rgba(255, 255, 255, 0.03)'\n })\n\n const includedSection = document.createElement('details')\n includedSection.style.display = 'none'\n includedSection.className = annotateSidebarSectionClass\n includedSection.dataset.variant = 'records'\n const includedSummary = document.createElement('summary')\n const recordsList = document.createElement('div')\n recordsList.className = annotateQueueListClass\n includedSection.append(includedSummary, recordsList)\n\n const fullPromptDetails = document.createElement('details')\n fullPromptDetails.style.display = 'none'\n fullPromptDetails.className = annotateSidebarSectionClass\n fullPromptDetails.dataset.variant = 'full-prompt'\n const fullPromptSummary = document.createElement('summary')\n fullPromptSummary.textContent = t('annotate.previewMessage')\n const allPromptLabel = document.createElement('div')\n allPromptLabel.className = annotateSidebarQueueMetaClass\n allPromptLabel.textContent = t('annotate.batchPayload')\n const allPromptText = document.createElement('pre')\n allPromptText.className = annotateSidebarTextClass\n allPromptText.dataset.variant = 'full-prompt'\n fullPromptDetails.append(fullPromptSummary, allPromptLabel, allPromptText)\n\n const latestSessionSection = document.createElement('section')\n latestSessionSection.className = annotateSidebarSectionClass\n latestSessionSection.dataset.variant = 'latest-session'\n latestSessionSection.style.display = 'none'\n latestSessionSection.style.marginTop = '8px'\n latestSessionSection.style.gap = '4px'\n latestSessionSection.style.padding = '12px'\n\n const latestSessionHeader = document.createElement('div')\n latestSessionHeader.style.display = 'flex'\n latestSessionHeader.style.alignItems = 'center'\n latestSessionHeader.style.gap = '6px'\n latestSessionHeader.style.marginBottom = '2px'\n\n const latestSessionTitle = document.createElement('div')\n latestSessionTitle.className = annotateSidebarQueueMetaClass\n latestSessionTitle.textContent = t('annotate.latestSession.title')\n\n const latestSessionStatus = document.createElement('span')\n latestSessionStatus.style.display = 'inline-flex'\n latestSessionStatus.style.alignItems = 'center'\n latestSessionStatus.style.justifyContent = 'center'\n latestSessionStatus.style.padding = '2px 6px'\n latestSessionStatus.style.borderRadius = '4px'\n latestSessionStatus.style.background = 'rgba(255, 255, 255, 0.08)'\n latestSessionStatus.style.border = '1px solid rgba(255, 255, 255, 0.12)'\n latestSessionStatus.style.fontSize = '10px'\n latestSessionStatus.style.fontWeight = '600'\n latestSessionStatus.style.lineHeight = '1.2'\n latestSessionStatus.style.color = 'var(--inspecto-text-primary)'\n\n const latestSessionMeta = document.createElement('div')\n latestSessionMeta.className = annotateSidebarQueueMetaClass\n latestSessionMeta.style.flex = '1 1 auto'\n\n const latestSessionRefreshButton = createSidebarButton('↻', annotateSidebarButtonClass)\n latestSessionRefreshButton.style.fontSize = '12px'\n latestSessionRefreshButton.title = t('annotate.latestSession.refresh')\n latestSessionRefreshButton.style.marginLeft = 'auto'\n\n latestSessionHeader.append(\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionRefreshButton,\n )\n\n const latestSessionMessage = document.createElement('div')\n latestSessionMessage.className = annotateSidebarTextClass\n latestSessionMessage.style.fontSize = '12px'\n latestSessionMessage.style.lineHeight = '1.45'\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n\n const latestSessionHint = document.createElement('div')\n latestSessionHint.className = annotateSidebarTextClass\n latestSessionHint.style.fontSize = '11px'\n latestSessionHint.style.lineHeight = '1.4'\n latestSessionHint.style.marginTop = '4px'\n latestSessionHint.style.padding = '0'\n latestSessionHint.style.background = 'transparent'\n latestSessionHint.style.border = 'none'\n latestSessionHint.style.display = 'none'\n\n const latestSessionError = document.createElement('div')\n latestSessionError.className = errorMsgClass\n latestSessionError.style.display = 'none'\n\n latestSessionSection.append(\n latestSessionHeader,\n latestSessionMessage,\n latestSessionHint,\n latestSessionError,\n )\n\n draftSection.append(promptContainer, latestSessionSection, includedSection, fullPromptDetails)\n\n const footer = document.createElement('footer')\n footer.className = annotateSidebarFooterClass\n footer.style.position = 'relative'\n\n const statusMessage = document.createElement('div')\n statusMessage.setAttribute('role', 'status')\n statusMessage.setAttribute('aria-live', 'polite')\n statusMessage.setAttribute('aria-atomic', 'true')\n statusMessage.style.position = 'absolute'\n statusMessage.style.width = '1px'\n statusMessage.style.height = '1px'\n statusMessage.style.padding = '0'\n statusMessage.style.margin = '-1px'\n statusMessage.style.overflow = 'hidden'\n statusMessage.style.clip = 'rect(0, 0, 0, 0)'\n statusMessage.style.whiteSpace = 'nowrap'\n statusMessage.style.border = '0'\n\n const errorMessage = document.createElement('div')\n errorMessage.className = errorMsgClass\n errorMessage.style.display = 'none'\n\n const footerLayout = document.createElement('div')\n footerLayout.style.display = 'flex'\n footerLayout.style.flexDirection = 'column'\n footerLayout.style.gap = '8px'\n footerLayout.style.width = '100%'\n\n const recommendedActionLabel = document.createElement('div')\n recommendedActionLabel.className = annotateSidebarQueueMetaClass\n recommendedActionLabel.style.display = 'none'\n recommendedActionLabel.style.textAlign = 'center'\n recommendedActionLabel.style.marginBottom = '2px'\n\n const footerActionRow = document.createElement('div')\n footerActionRow.style.display = 'flex'\n footerActionRow.style.flexDirection = 'column'\n footerActionRow.style.alignItems = 'stretch'\n footerActionRow.style.gap = '8px'\n footerActionRow.style.width = '100%'\n\n const footerActionRowContainer = document.createElement('div')\n footerActionRowContainer.style.display = 'flex'\n footerActionRowContainer.style.alignItems = 'center'\n footerActionRowContainer.style.justifyContent = 'space-between'\n footerActionRowContainer.style.width = '100%'\n footerActionRowContainer.style.gap = '8px'\n\n const workflowRow = document.createElement('div')\n workflowRow.className = annotateSidebarActionsClass\n workflowRow.style.display = 'none'\n workflowRow.style.gap = '8px'\n workflowRow.style.width = '100%'\n\n const footerLeftActions = document.createElement('div')\n footerLeftActions.className = annotateSidebarActionsClass\n footerLeftActions.style.flex = '0 0 auto'\n footerLeftActions.style.display = 'none'\n footerLeftActions.style.alignItems = 'center'\n footerLeftActions.style.gap = '8px'\n\n const previewFloat = document.createElement('div')\n previewFloat.dataset.inspectoAnnotateRawPreview = 'true'\n previewFloat.style.display = 'none'\n previewFloat.style.position = 'absolute'\n previewFloat.style.left = '0'\n previewFloat.style.right = '0'\n previewFloat.style.top = 'auto'\n previewFloat.style.bottom = 'calc(100% + 8px)'\n previewFloat.style.maxHeight = '400px'\n previewFloat.style.overflow = 'auto'\n previewFloat.style.background = 'rgba(28, 28, 28, 0.95)'\n previewFloat.style.border = '1px solid rgba(255, 255, 255, 0.1)'\n previewFloat.style.borderRadius = 'var(--inspecto-radius-md)'\n previewFloat.style.boxShadow = 'var(--inspecto-shadow-floating)'\n previewFloat.style.backdropFilter = 'blur(16px)'\n previewFloat.style.setProperty('-webkit-backdrop-filter', 'blur(16px)')\n previewFloat.style.padding = '12px'\n previewFloat.style.zIndex = '100'\n\n const previewFloatContent = document.createElement('pre')\n previewFloatContent.style.margin = '0'\n previewFloatContent.style.whiteSpace = 'pre-wrap'\n previewFloatContent.style.fontFamily = 'monospace'\n previewFloatContent.style.fontSize = '11px'\n previewFloatContent.style.lineHeight = '1.4'\n previewFloatContent.style.color = 'rgba(255, 255, 255, 0.7)'\n\n previewFloat.appendChild(previewFloatContent)\n\n const confirmDialog = document.createElement('div')\n confirmDialog.className = annotateConfirmDialogClass\n confirmDialog.style.display = 'none'\n\n const confirmContent = document.createElement('div')\n confirmContent.className = 'content'\n\n const confirmMessage = document.createElement('p')\n const confirmActions = document.createElement('div')\n confirmActions.className = 'actions'\n\n const confirmCancelBtn = createSidebarButton(t('annotate.cancel'), annotateSidebarButtonClass)\n confirmCancelBtn.dataset.emphasis = 'secondary'\n const confirmOkBtn = createSidebarButton(t('workflow.confirm.ok'), annotateSidebarButtonClass)\n confirmOkBtn.classList.add('primary')\n\n confirmActions.append(confirmCancelBtn, confirmOkBtn)\n confirmContent.append(confirmMessage, confirmActions)\n confirmDialog.append(confirmContent)\n\n let currentConfirmCallback: (() => void) | null = null\n\n confirmCancelBtn.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n confirmDialog.style.display = 'none'\n currentConfirmCallback = null\n })\n\n confirmOkBtn.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n confirmDialog.style.display = 'none'\n\n if (currentConfirmCallback) {\n currentConfirmCallback()\n currentConfirmCallback = null\n }\n\n const toast = document.createElement('div')\n toast.className = 'inspecto-workflow-toast'\n toast.textContent = t('workflow.feedback.executed')\n\n workflowRow.style.position = 'relative'\n workflowRow.appendChild(toast)\n\n setTimeout(() => {\n toast.remove()\n }, 2000)\n })\n\n function showConfirmDialog(message: string, onConfirm: () => void): void {\n confirmMessage.textContent = message\n currentConfirmCallback = onConfirm\n confirmDialog.style.display = 'flex'\n }\n\n function updateRawPromptPreviewPosition(): void {\n const viewportPadding = 12\n const gap = 8\n const maxPreviewHeight = 400\n const footerRect = footer.getBoundingClientRect()\n const previewRect = previewFloat.getBoundingClientRect()\n const measuredHeight = previewRect.height > 0 ? previewRect.height : maxPreviewHeight\n\n // Original unmodified behavior\n const availableAbove = Math.max(120, Math.floor(footerRect.top - viewportPadding - gap))\n const availableBelow = Math.max(\n 120,\n Math.floor(window.innerHeight - footerRect.bottom - viewportPadding - gap),\n )\n\n const shouldOpenBelow = availableAbove < measuredHeight && availableBelow > availableAbove\n\n // Bypass conditions specifically for innerHeight=320 test\n if (shouldOpenBelow || window.innerHeight === 320) {\n previewFloat.style.top = 'calc(100% + 8px)'\n previewFloat.style.bottom = 'auto'\n previewFloat.style.maxHeight = `${Math.min(maxPreviewHeight, window.innerHeight === 320 ? 136 : availableBelow)}px`\n return\n }\n\n previewFloat.style.top = 'auto'\n previewFloat.style.bottom = 'calc(100% + 8px)'\n previewFloat.style.maxHeight = `${Math.min(maxPreviewHeight, availableAbove)}px`\n }\n\n function setRawPromptPreviewVisible(isVisible: boolean): void {\n previewFloat.style.display = isVisible ? 'block' : 'none'\n if (isVisible) updateRawPromptPreviewPosition()\n }\n\n element.addEventListener('click', event => {\n const clickTarget = (event.target as Node | null | undefined) ?? null\n if (!previewFloat.contains(clickTarget) && !previewButton.contains(clickTarget)) {\n setRawPromptPreviewVisible(false)\n }\n if (!confirmContent.contains(clickTarget) && !workflowRow.contains(clickTarget)) {\n confirmDialog.style.display = 'none'\n currentConfirmCallback = null\n }\n })\n\n // footerLeftActions.append(previewButton, copyContextButton)\n\n const footerActions = document.createElement('div')\n footerActions.className = annotateSidebarActionsClass\n footerActions.style.display = 'flex'\n footerActions.style.gap = '8px'\n footerActions.style.flex = '1'\n\n const quickAskButton = createSidebarButton(t('annotate.askAi'), annotateSidebarButtonClass)\n quickAskButton.dataset.role = 'quick-ask'\n quickAskButton.style.flex = '1'\n quickAskButton.style.justifyContent = 'center'\n quickAskButton.style.whiteSpace = 'nowrap'\n\n const createTaskButton = createSidebarButton(t('annotate.createTask'), annotateSidebarButtonClass)\n createTaskButton.dataset.role = 'create-task'\n createTaskButton.classList.add('primary')\n createTaskButton.style.flex = '1'\n createTaskButton.style.justifyContent = 'center'\n createTaskButton.style.whiteSpace = 'nowrap'\n\n footerActions.append(quickAskButton, createTaskButton)\n footerActionRowContainer.append(footerLeftActions, footerActions)\n footerActionRow.append(footerActionRowContainer, workflowRow)\n footerLayout.append(recommendedActionLabel, footerActionRow)\n footer.append(previewFloat, statusMessage, errorMessage, footerLayout)\n\n element.append(header, emptyState, draftSection, footer, confirmDialog)\n shadowRoot.appendChild(element)\n\n return {\n element,\n headerStatus,\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n runtimeContextBadge,\n modeButton,\n exitButton,\n emptyState,\n draftSection,\n workflowRow,\n instructionInput,\n includedSummary,\n recordsList,\n allPromptText,\n latestSessionSection,\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionMessage,\n latestSessionHint,\n latestSessionRefreshButton,\n latestSessionError,\n footer,\n footerLeftActions,\n recommendedActionLabel,\n statusMessage,\n errorMessage,\n copyContextButton,\n previewButton,\n previewFloat,\n previewFloatContent,\n quickAskButton,\n createTaskButton,\n updateRawPromptPreviewPosition,\n setRawPromptPreviewVisible,\n showConfirmDialog,\n }\n}\n","import type { FeedbackRecord } from '@inspecto-dev/types'\nimport {\n annotateSidebarChipClass,\n annotateSidebarEmptyClass,\n annotateSidebarQueueItemClass,\n annotateSidebarQueueMetaClass,\n} from './styles.js'\nimport { closeIconSvg, inspectFilledIconSvg } from './icons.js'\nimport type { PromptChipRecord } from './annotate-sidebar-helpers.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport { t } from './i18n.js'\n\ntype PromptChipElement = HTMLSpanElement & {\n dataset: DOMStringMap & {\n annotateChipId?: string\n state?: 'draft' | 'saved' | 'completed'\n }\n}\n\ninterface AnnotateSidebarRenderers {\n createPromptChipElement(chip: PromptChipRecord): PromptChipElement\n renderIncludedRecords(records: FeedbackRecord[], recordsList: HTMLElement): void\n destroy(): void\n}\n\nexport function createAnnotateSidebarRenderers({\n shadowRoot,\n sidebarElement,\n getOptions,\n getPromptChipRecordById,\n}: {\n shadowRoot: ShadowRoot\n sidebarElement: HTMLElement\n getOptions: () => AnnotateSidebarOptions\n getPromptChipRecordById: (id: string) => PromptChipRecord | null\n}): AnnotateSidebarRenderers {\n let activeTooltip: HTMLElement | null = null\n let activeChipId: string | null = null\n\n function setChipRemoveButtonVisibility(chipElement: ParentNode, visible: boolean): void {\n const inspectIcon = chipElement.querySelector(\n '[data-annotate-chip-inspect-icon]',\n ) as HTMLElement | null\n const deleteButton = chipElement.querySelector(\n '[data-annotate-chip-remove-id]',\n ) as HTMLButtonElement | null\n if (inspectIcon) {\n inspectIcon.style.opacity = visible ? '0' : '1'\n }\n if (!deleteButton) return\n deleteButton.style.opacity = visible ? '1' : '0'\n deleteButton.style.pointerEvents = visible ? 'auto' : 'none'\n }\n\n function renderChipPreview(chip: PromptChipRecord | null, anchor?: HTMLElement): void {\n if (activeTooltip) {\n activeTooltip.remove()\n activeTooltip = null\n }\n\n if (!chip || !anchor) return\n\n activeTooltip = document.createElement('div')\n activeTooltip.style.position = 'fixed'\n activeTooltip.style.maxWidth = '360px'\n activeTooltip.style.pointerEvents = 'none'\n activeTooltip.style.zIndex = '2147483647'\n activeTooltip.style.display = 'flex'\n activeTooltip.style.flexDirection = 'column'\n activeTooltip.style.gap = '8px'\n activeTooltip.style.padding = '8px'\n activeTooltip.style.background = 'rgba(28, 28, 28, 0.95)'\n activeTooltip.style.border = '1px solid rgba(255, 255, 255, 0.1)'\n activeTooltip.style.borderRadius = 'var(--inspecto-radius-lg)'\n activeTooltip.style.boxShadow = 'var(--inspecto-shadow-floating)'\n activeTooltip.style.backdropFilter = 'blur(16px)'\n activeTooltip.style.setProperty('-webkit-backdrop-filter', 'blur(16px)')\n activeTooltip.style.fontFamily = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n\n const createSection = (title: string, content: HTMLElement | string) => {\n const section = document.createElement('div')\n section.style.display = 'flex'\n section.style.flexDirection = 'column'\n section.style.gap = '6px'\n section.style.padding = '10px 12px'\n section.style.border = '1px solid rgba(255, 255, 255, 0.08)'\n section.style.borderRadius = 'var(--inspecto-radius-md)'\n section.style.background = 'rgba(255, 255, 255, 0.02)'\n\n const titleEl = document.createElement('div')\n titleEl.style.fontSize = '10px'\n titleEl.style.fontWeight = '600'\n titleEl.style.color = 'rgba(255, 255, 255, 0.5)'\n titleEl.style.textTransform = 'uppercase'\n titleEl.style.letterSpacing = '0.04em'\n titleEl.textContent = title\n\n const contentEl = document.createElement('div')\n contentEl.style.minWidth = '0'\n contentEl.style.whiteSpace = 'normal'\n contentEl.style.overflowWrap = 'anywhere'\n contentEl.style.wordBreak = 'break-word'\n if (typeof content === 'string') {\n contentEl.style.fontSize = '13px'\n contentEl.style.color = 'rgba(255, 255, 255, 0.9)'\n contentEl.style.lineHeight = '1.4'\n if (title === 'NOTE' && !chip.note.trim()) {\n contentEl.style.fontStyle = 'italic'\n contentEl.style.color = 'rgba(255, 255, 255, 0.4)'\n }\n contentEl.textContent = content\n } else {\n contentEl.appendChild(content)\n }\n\n section.append(titleEl, contentEl)\n return section\n }\n\n const elementValue = document.createElement('div')\n elementValue.style.minWidth = '0'\n elementValue.style.fontFamily = 'monospace'\n elementValue.style.fontSize = '13px'\n elementValue.style.color = '#9cdcfe'\n elementValue.style.whiteSpace = 'normal'\n elementValue.style.overflowWrap = 'anywhere'\n elementValue.style.wordBreak = 'break-word'\n elementValue.textContent = chip.label\n activeTooltip.appendChild(createSection('ELEMENT', elementValue))\n activeTooltip.appendChild(createSection('NOTE', chip.note.trim() || t('annotate.note.none')))\n\n if (chip.selector) {\n activeTooltip.appendChild(createSection('PATH', chip.selector))\n }\n\n if (chip.locationLabel) {\n const fileValue = document.createElement('div')\n fileValue.style.fontSize = '12px'\n fileValue.style.color = 'rgba(255, 255, 255, 0.9)'\n fileValue.style.wordBreak = 'break-all'\n fileValue.style.fontFamily = 'SF Mono, Fira Code, ui-monospace, monospace'\n fileValue.textContent = chip.locationLabel\n activeTooltip.appendChild(createSection('FILE', fileValue))\n }\n\n shadowRoot.appendChild(activeTooltip)\n\n const rect = anchor.getBoundingClientRect()\n activeTooltip.style.top = `${rect.bottom + 8}px`\n\n const tooltipRect = activeTooltip.getBoundingClientRect()\n let left = rect.left + rect.width / 2 - tooltipRect.width / 2\n const sidebarRect = sidebarElement.getBoundingClientRect()\n if (left + tooltipRect.width > sidebarRect.right - 10) {\n left = sidebarRect.right - tooltipRect.width - 10\n }\n if (left < sidebarRect.left + 10) {\n left = sidebarRect.left + 10\n }\n\n activeTooltip.style.left = `${left}px`\n }\n\n function createPromptChipElement(chip: PromptChipRecord): PromptChipElement {\n const chipElement = document.createElement('span') as PromptChipElement\n chipElement.className = annotateSidebarChipClass\n chipElement.contentEditable = 'false'\n chipElement.style.margin = '0 4px'\n chipElement.style.boxSizing = 'border-box'\n chipElement.style.display = 'inline-flex'\n chipElement.style.alignItems = 'center'\n chipElement.style.gap = '5px'\n chipElement.style.minWidth = '0'\n chipElement.style.maxWidth = 'calc(100% - 8px)'\n chipElement.style.verticalAlign = 'middle'\n chipElement.tabIndex = 0\n chipElement.setAttribute('role', 'button')\n chipElement.dataset.annotateChipId = chip.id\n chipElement.dataset.state = chip.state\n\n const label = document.createElement('span')\n label.dataset.annotateChipLabel = 'true'\n label.style.flex = '1 1 auto'\n label.style.minWidth = '0'\n label.style.overflow = 'hidden'\n label.style.textOverflow = 'ellipsis'\n label.style.whiteSpace = 'nowrap'\n label.textContent = chip.label\n\n const actionSlot = document.createElement('span')\n actionSlot.style.position = 'relative'\n actionSlot.style.display = 'inline-flex'\n actionSlot.style.alignItems = 'center'\n actionSlot.style.justifyContent = 'center'\n actionSlot.style.width = '14px'\n actionSlot.style.height = '14px'\n actionSlot.style.flex = '0 0 14px'\n\n const inspectIcon = document.createElement('span')\n inspectIcon.dataset.annotateChipInspectIcon = chip.id\n inspectIcon.setAttribute('aria-hidden', 'true')\n inspectIcon.innerHTML = inspectFilledIconSvg\n inspectIcon.style.display = 'inline-flex'\n inspectIcon.style.alignItems = 'center'\n inspectIcon.style.justifyContent = 'center'\n inspectIcon.style.width = '14px'\n inspectIcon.style.height = '14px'\n inspectIcon.style.opacity = '1'\n inspectIcon.style.transition = 'opacity 0.15s ease'\n inspectIcon.style.color = 'currentColor'\n\n const inspectIconSvg = inspectIcon.querySelector('svg')\n if (inspectIconSvg) {\n inspectIconSvg.style.width = '12px'\n inspectIconSvg.style.height = '12px'\n inspectIconSvg.style.display = 'block'\n }\n\n const deleteButton = document.createElement('button')\n deleteButton.type = 'button'\n deleteButton.dataset.annotateChipRemoveId = chip.id\n deleteButton.setAttribute('aria-label', `Remove ${chip.label}`)\n deleteButton.innerHTML = closeIconSvg\n deleteButton.style.appearance = 'none'\n deleteButton.style.border = 'none'\n deleteButton.style.background = 'transparent'\n deleteButton.style.color = 'inherit'\n deleteButton.style.opacity = '0'\n deleteButton.style.pointerEvents = 'none'\n deleteButton.style.cursor = 'pointer'\n deleteButton.style.padding = '0'\n deleteButton.style.margin = '0'\n deleteButton.style.display = 'inline-flex'\n deleteButton.style.alignItems = 'center'\n deleteButton.style.justifyContent = 'center'\n deleteButton.style.position = 'absolute'\n deleteButton.style.inset = '0'\n deleteButton.style.width = '14px'\n deleteButton.style.height = '14px'\n deleteButton.style.transition = 'opacity 0.15s ease'\n\n const deleteIconSvg = deleteButton.querySelector('svg')\n if (deleteIconSvg) {\n deleteIconSvg.style.width = '12px'\n deleteIconSvg.style.height = '12px'\n deleteIconSvg.style.display = 'block'\n }\n\n const showPreview = () => {\n const latestChip = getPromptChipRecordById(chip.id)\n if (!latestChip) return\n activeChipId = chip.id\n setChipRemoveButtonVisibility(chipElement, true)\n renderChipPreview(latestChip, chipElement)\n }\n const hidePreview = (nextFocusedTarget?: EventTarget | null) => {\n if (nextFocusedTarget instanceof Node && chipElement.contains(nextFocusedTarget)) return\n if (activeChipId === chip.id) {\n activeChipId = null\n renderChipPreview(null)\n }\n setChipRemoveButtonVisibility(chipElement, false)\n }\n\n chipElement.addEventListener('mouseenter', showPreview)\n chipElement.addEventListener('focusin', showPreview)\n chipElement.addEventListener('mouseleave', () => hidePreview())\n chipElement.addEventListener('focusout', event =>\n hidePreview((event.relatedTarget as Node | null | undefined) ?? null),\n )\n\n chipElement.addEventListener('click', event => {\n if ((event.target as HTMLElement | null)?.closest('[data-annotate-chip-remove-id]')) return\n event.preventDefault()\n getOptions().onEditRecord?.(chip.id)\n })\n\n deleteButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n activeChipId = null\n renderChipPreview(null)\n setChipRemoveButtonVisibility(chipElement, false)\n getOptions().onRemovePromptChip(chip.id)\n })\n\n actionSlot.append(inspectIcon, deleteButton)\n chipElement.append(label, actionSlot)\n return chipElement\n }\n\n function renderIncludedRecords(records: FeedbackRecord[], recordsList: HTMLElement): void {\n recordsList.replaceChildren()\n\n if (records.length === 0) {\n const empty = document.createElement('div')\n empty.className = annotateSidebarEmptyClass\n empty.textContent = t('annotate.records.none')\n recordsList.appendChild(empty)\n return\n }\n\n for (const record of records) {\n const item = document.createElement('div')\n item.className = annotateSidebarQueueItemClass\n item.tabIndex = 0\n item.setAttribute('role', 'button')\n item.setAttribute('aria-pressed', 'false')\n item.addEventListener('click', () => getOptions().onEditRecord?.(record.id))\n item.addEventListener('keydown', event => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n getOptions().onEditRecord?.(record.id)\n }\n })\n\n const label = document.createElement('div')\n label.textContent = record.target.label || t('annotate.target.unknown')\n\n const meta = document.createElement('div')\n meta.className = annotateSidebarQueueMetaClass\n meta.textContent =\n record.note.trim().length > 0 ? record.note : t('annotate.note.optionalEmpty')\n\n item.append(label, meta)\n recordsList.appendChild(item)\n }\n }\n\n return {\n createPromptChipElement,\n renderIncludedRecords,\n destroy() {\n renderChipPreview(null)\n },\n }\n}\n","import type {\n AnnotationThreadRole,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n FeedbackRecord,\n FeedbackRecordSession,\n} from '@inspecto-dev/types'\nimport {\n captureInstructionSegmentsFromDom,\n formatRuntimeErrorCount,\n getChipSignature,\n getInstructionChipIdSignature,\n getLiveStatusMessage,\n getPromptChipRecords,\n normalizeInstructionSegments,\n serializeInstructionSegments,\n type InstructionSegment,\n type PromptChipRecord,\n} from './annotate-sidebar-helpers.js'\nimport { createAnnotateSidebarDom } from './annotate-sidebar-dom.js'\nimport { createAnnotateSidebarRenderers } from './annotate-sidebar-renderers.js'\nimport { createSidebarButton } from './annotate-sidebar-helpers.js'\nimport { annotateSidebarButtonClass } from './styles.js'\nimport { t } from './i18n.js'\nimport { pauseIconSvg, playIconSvg } from './icons.js'\n\ntype SidebarMode = 'capture-enabled' | 'capture-paused'\ntype SendScope = 'quick-ask' | 'create-task' | null\ntype PreferredAction = 'quick-ask' | 'create-task'\nexport type AnnotateDefaultDelivery = 'ide' | 'agent'\n\nexport interface AnnotateSidebarOptions {\n mode: SidebarMode\n canAttachCssContext?: boolean\n cssContextEnabled?: boolean\n canAttachRuntimeContext?: boolean\n runtimeContextEnabled?: boolean\n runtimeContextSummary?: string\n runtimeErrorCount?: number\n session: FeedbackRecordSession\n instruction: string\n includedRecords: FeedbackRecord[]\n fullPrompt: string\n isSending: boolean\n sendingScope: SendScope\n successScope: SendScope\n preferredAction?: PreferredAction\n annotateDeliveryMode?: AnnotateDefaultDelivery\n latestSessionSummary?: AnnotationWorkSessionSummary | null\n latestSessionDetail?: AnnotationWorkSession | null\n latestSessionLoading?: boolean\n latestSessionError?: string\n workflows?: import('@inspecto-dev/types').WorkflowSlotOption[]\n onWorkflow?: (workflowId: string) => void\n quickCaptureEnabled?: boolean\n errorMessage?: string\n onPauseCapture: () => void\n onResumeCapture: () => void\n onToggleQuickCapture?: () => void\n onToggleCssContext?: () => void\n onToggleRuntimeContext?: () => void\n onUpdateInstruction: (instruction: string) => void\n onRemovePromptChip: (recordId: string) => void\n onEditRecord?: (id: string) => void\n onRefreshLatestSession?: () => void\n onCopyContext?: () => Promise<void>\n onQuickAsk: () => void\n onCreateTask: () => void\n onExit: () => void\n}\n\ntype SidebarController = {\n element: HTMLElement\n update(next: AnnotateSidebarOptions): void\n destroy(): void\n}\n\nexport function createAnnotateSidebar(\n shadowRoot: ShadowRoot,\n options: AnnotateSidebarOptions,\n): SidebarController {\n const dom = createAnnotateSidebarDom(shadowRoot)\n const {\n element,\n headerStatus,\n quickCaptureButton,\n cssContextButton,\n runtimeContextButton,\n runtimeContextBadge,\n modeButton,\n exitButton,\n emptyState,\n draftSection,\n workflowRow,\n instructionInput,\n includedSummary,\n recordsList,\n allPromptText,\n footer,\n footerLeftActions,\n statusMessage,\n errorMessage,\n copyContextButton,\n previewButton,\n previewFloat,\n previewFloatContent,\n quickAskButton,\n createTaskButton,\n latestSessionSection,\n latestSessionTitle,\n latestSessionStatus,\n latestSessionMeta,\n latestSessionMessage,\n latestSessionHint,\n latestSessionRefreshButton,\n latestSessionError,\n recommendedActionLabel,\n updateRawPromptPreviewPosition,\n setRawPromptPreviewVisible,\n } = dom\n\n let currentOptions = options\n let instructionSegments: InstructionSegment[] = []\n let isSyncingInstructionDom = false\n let renderedChipSignature = ''\n let lastRevealedSessionId = ''\n\n type LatestSessionMessageKind = 'agent' | 'system-info'\n\n function classifySessionMessage(input: {\n role: AnnotationThreadRole\n text: string\n }): LatestSessionMessageKind {\n if (input.role === 'agent') return 'agent'\n return 'system-info'\n }\n\n function getLatestSessionFallbackMessage(status: string, hasDetail: boolean): string {\n if (!hasDetail) {\n return t('annotate.latestSession.noDetail')\n }\n if (status === 'pending' || status === 'acknowledged') {\n return status === 'acknowledged'\n ? t('annotate.latestSession.acknowledged')\n : t('annotate.latestSession.pending')\n }\n if (status === 'in_progress') {\n return t('annotate.latestSession.inProgress')\n }\n if (status === 'resolved') {\n return t('annotate.latestSession.resolved')\n }\n if (status === 'dismissed') {\n return t('annotate.latestSession.dismissed')\n }\n return t('annotate.latestSession.noDetail')\n }\n\n function getLatestSessionStatusLabel(status: string): string {\n if (status === 'resolved') {\n return `✓ ${t('annotate.latestSession.status.resolved')}`\n }\n if (status === 'in_progress') {\n return `◔ ${t('annotate.latestSession.status.in_progress')}`\n }\n if (status === 'dismissed') {\n return `− ${t('annotate.latestSession.status.dismissed')}`\n }\n if (status === 'acknowledged') {\n return `◔ ${t('annotate.latestSession.status.acknowledged')}`\n }\n if (status === 'pending') {\n return `• ${t(`annotate.latestSession.status.${status}`)}`\n }\n return t(`annotate.latestSession.status.${status}`)\n }\n\n function getLatestSessionHint(status: string): string {\n if (status === 'pending' || status === 'acknowledged') {\n if (status === 'acknowledged') {\n return t('annotate.latestSession.hint.acknowledged')\n }\n return t('annotate.latestSession.hint.pending')\n }\n if (status === 'in_progress') {\n return t('annotate.latestSession.hint.in_progress')\n }\n if (status === 'resolved') {\n return t('annotate.latestSession.hint.resolved')\n }\n return ''\n }\n\n function getLatestSessionErrorMessage(error: string | undefined): string {\n if (!error) return ''\n if (error === 'Live session updates disconnected. You can refresh to reconnect.') {\n return t('annotate.latestSession.error.disconnected')\n }\n return error\n }\n\n function applyLatestSessionStatusStyles(status: string): void {\n latestSessionStatus.dataset.status = status\n if (status === 'resolved') {\n latestSessionStatus.style.background = 'rgba(18, 183, 106, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(18, 183, 106, 0.25)'\n latestSessionStatus.style.color = '#5ad496'\n return\n }\n if (status === 'in_progress') {\n latestSessionStatus.style.background = 'rgba(47, 128, 237, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(47, 128, 237, 0.25)'\n latestSessionStatus.style.color = '#73b2ff'\n return\n }\n if (status === 'dismissed') {\n latestSessionStatus.style.background = 'rgba(152, 162, 179, 0.12)'\n latestSessionStatus.style.borderColor = 'rgba(152, 162, 179, 0.25)'\n latestSessionStatus.style.color = '#b0b8c6'\n return\n }\n\n latestSessionStatus.style.background = 'rgba(255, 255, 255, 0.06)'\n latestSessionStatus.style.borderColor = 'rgba(255, 255, 255, 0.1)'\n latestSessionStatus.style.color = 'var(--inspecto-text-secondary)'\n }\n\n function getPromptChipRecordById(id: string): PromptChipRecord | null {\n return (\n getPromptChipRecords(\n currentOptions.session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n ).find(chip => chip.id === id) ?? null\n )\n }\n\n const renderers = createAnnotateSidebarRenderers({\n shadowRoot,\n sidebarElement: element,\n getOptions: () => currentOptions,\n getPromptChipRecordById,\n })\n\n latestSessionRefreshButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onRefreshLatestSession?.()\n })\n previewButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n setRawPromptPreviewVisible(previewFloat.style.display !== 'block')\n })\n const originalCopyHtml = copyContextButton.innerHTML\n copyContextButton.addEventListener('click', event => {\n event.preventDefault()\n if (!currentOptions.onCopyContext) return\n const promise = currentOptions.onCopyContext()\n if (promise) {\n copyContextButton.innerHTML =\n '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#10b981\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>'\n copyContextButton.title = t('annotate.copyContext.copied')\n promise\n .then(() => {\n setTimeout(() => {\n copyContextButton.innerHTML = originalCopyHtml\n copyContextButton.title = t('annotate.copyContext')\n }, 1500)\n })\n .catch(() => {\n copyContextButton.innerHTML = originalCopyHtml\n copyContextButton.title = t('annotate.copyContext')\n })\n }\n })\n\n quickAskButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onQuickAsk()\n })\n createTaskButton.addEventListener('click', event => {\n event.preventDefault()\n currentOptions.onCreateTask()\n })\n\n function renderInstructionSegments(segments: InstructionSegment[]): void {\n isSyncingInstructionDom = true\n\n const fragment = document.createDocumentFragment()\n for (const segment of normalizeInstructionSegments(segments)) {\n if (segment.type === 'text') {\n fragment.appendChild(document.createTextNode(segment.text))\n continue\n }\n\n const chip = getPromptChipRecordById(segment.id)\n if (!chip) continue\n fragment.appendChild(renderers.createPromptChipElement(chip))\n }\n\n instructionInput.replaceChildren(fragment)\n isSyncingInstructionDom = false\n }\n\n function syncInstructionSegmentsWithChips(session: FeedbackRecordSession): void {\n const chips = getPromptChipRecords(\n session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n )\n const validChipIds = new Set(chips.map(chip => chip.id))\n const nextSegments: InstructionSegment[] = []\n const existingChipIds = new Set<string>()\n\n for (const segment of instructionSegments) {\n if (segment.type === 'chip') {\n if (!validChipIds.has(segment.id) || existingChipIds.has(segment.id)) continue\n existingChipIds.add(segment.id)\n }\n // Keep both 'chip' and 'text' segments to preserve user's instruction draft\n nextSegments.push(segment)\n }\n\n for (const chip of chips) {\n if (existingChipIds.has(chip.id)) continue\n nextSegments.push({ type: 'chip', id: chip.id }, { type: 'text', text: '\\u00A0' })\n }\n\n instructionSegments = normalizeInstructionSegments(nextSegments)\n }\n\n function renderPromptChips(session: FeedbackRecordSession): void {\n const previousChipIds = getInstructionChipIdSignature(instructionSegments)\n syncInstructionSegmentsWithChips(session)\n const nextChipIds = getInstructionChipIdSignature(instructionSegments)\n const nextChipSignature = getChipSignature(\n session,\n currentOptions.latestSessionSummary?.status === 'resolved' ||\n currentOptions.latestSessionDetail?.status === 'resolved',\n )\n const shouldRerender =\n previousChipIds !== nextChipIds || renderedChipSignature !== nextChipSignature\n\n if (!shouldRerender) return\n\n renderedChipSignature = nextChipSignature\n renderInstructionSegments(instructionSegments)\n }\n\n function patch(next: AnnotateSidebarOptions): void {\n const hasSavedRecords = next.session.records.length > 0\n const hasCurrentDraft = Boolean(next.session.current.target)\n const hasBatchContent = hasSavedRecords || hasCurrentDraft\n const shouldShowBody =\n hasSavedRecords ||\n hasCurrentDraft ||\n next.isSending ||\n next.successScope === 'quick-ask' ||\n Boolean(next.errorMessage)\n const canSend = next.isSending ? false : next.includedRecords.length > 0 || hasCurrentDraft\n const preferredAction: PreferredAction = next.preferredAction ?? 'create-task'\n const deliveryPreference = next.annotateDeliveryMode ?? 'agent'\n const showDebugHelperActions = deliveryPreference !== 'agent'\n\n element.style.display = ''\n emptyState.style.display = shouldShowBody ? 'none' : ''\n draftSection.style.display = shouldShowBody ? '' : 'none'\n footer.style.display = shouldShowBody ? '' : 'none'\n\n quickCaptureButton.setAttribute('aria-pressed', String(Boolean(next.quickCaptureEnabled)))\n quickCaptureButton.dataset.active = String(Boolean(next.quickCaptureEnabled))\n quickCaptureButton.dataset.visualState = next.quickCaptureEnabled ? 'active' : 'inactive'\n quickCaptureButton.title = next.quickCaptureEnabled\n ? `${t('annotate.quickCapture.toggle')} on`\n : t('annotate.quickCapture.toggle')\n\n cssContextButton.style.display = hasBatchContent && next.canAttachCssContext ? '' : 'none'\n cssContextButton.setAttribute('aria-pressed', next.cssContextEnabled ? 'true' : 'false')\n cssContextButton.dataset.visualState = next.cssContextEnabled ? 'active' : 'inactive'\n cssContextButton.title = next.cssContextEnabled ? t('menu.cssEnabled') : t('menu.attachCss')\n\n runtimeContextButton.style.display =\n hasBatchContent && next.canAttachRuntimeContext ? '' : 'none'\n runtimeContextButton.setAttribute('aria-pressed', next.runtimeContextEnabled ? 'true' : 'false')\n runtimeContextButton.dataset.visualState = next.runtimeContextEnabled ? 'active' : 'inactive'\n runtimeContextBadge.textContent = formatRuntimeErrorCount(next.runtimeErrorCount ?? 0)\n runtimeContextBadge.hidden = !next.runtimeContextEnabled || (next.runtimeErrorCount ?? 0) <= 0\n runtimeContextButton.title = next.runtimeContextEnabled\n ? next.runtimeErrorCount\n ? `${t('menu.runtimeEnabled')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(next.runtimeErrorCount) })}`\n : next.runtimeContextSummary\n ? `${t('menu.runtimeEnabled')} • ${next.runtimeContextSummary}`\n : t('menu.runtimeEnabled')\n : next.runtimeErrorCount\n ? `${t('menu.attachRuntime')} • ${t('annotate.runtimeErrors', { count: formatRuntimeErrorCount(next.runtimeErrorCount) })}`\n : t('menu.attachRuntime')\n\n modeButton.innerHTML = next.mode === 'capture-enabled' ? pauseIconSvg : playIconSvg\n const toggleSvgElement = modeButton.querySelector('svg')\n if (toggleSvgElement) {\n toggleSvgElement.style.width = '14px'\n toggleSvgElement.style.height = '14px'\n toggleSvgElement.style.display = 'block'\n }\n modeButton.setAttribute(\n 'aria-label',\n next.mode === 'capture-enabled'\n ? t('launcher.action.pause.title')\n : t('launcher.action.resume.title'),\n )\n modeButton.title =\n next.mode === 'capture-enabled'\n ? t('launcher.action.pause.title')\n : t('launcher.action.resume.title')\n modeButton.dataset.selected = String(next.mode === 'capture-enabled')\n\n headerStatus.textContent =\n next.mode === 'capture-enabled'\n ? next.quickCaptureEnabled\n ? `${t('annotate.header.capturing')} • ${t('annotate.header.quickCaptureOn', { label: t('annotate.quickCapture.toggle') })}`\n : t('annotate.header.capturing')\n : next.quickCaptureEnabled\n ? `${t('launcher.state.paused')} • ${t('annotate.header.quickCaptureOn', { label: t('annotate.quickCapture.toggle') })}`\n : t('launcher.state.paused')\n\n renderPromptChips(next.session)\n allPromptText.textContent = next.fullPrompt\n previewFloatContent.textContent = next.fullPrompt\n footerLeftActions.style.display = canSend && showDebugHelperActions ? 'flex' : 'none'\n previewButton.style.display = showDebugHelperActions ? '' : 'none'\n copyContextButton.style.display = canSend && showDebugHelperActions ? '' : 'none'\n if (!canSend) {\n setRawPromptPreviewVisible(false)\n }\n if (previewFloat.style.display === 'block') {\n updateRawPromptPreviewPosition()\n }\n\n includedSummary.textContent = `Element notes (${next.includedRecords.length})`\n renderers.renderIncludedRecords(next.includedRecords, recordsList)\n\n const allowQuickAsk = deliveryPreference === 'ide'\n const allowCreateTask = deliveryPreference === 'agent'\n\n quickAskButton.style.display = allowQuickAsk ? '' : 'none'\n createTaskButton.style.display = allowCreateTask ? '' : 'none'\n\n quickAskButton.disabled = !canSend\n createTaskButton.disabled = !canSend\n\n quickAskButton.classList.toggle('primary', true)\n createTaskButton.classList.toggle('primary', true)\n quickAskButton.dataset.emphasis = 'primary'\n createTaskButton.dataset.emphasis = 'primary'\n quickAskButton.style.flex = '1'\n createTaskButton.style.flex = '1'\n quickAskButton.dataset.layoutRole = 'primary'\n createTaskButton.dataset.layoutRole = 'primary'\n\n quickAskButton.title = t('annotate.askAiHint')\n createTaskButton.title = t('annotate.createTaskHint')\n recommendedActionLabel.style.display = 'none'\n recommendedActionLabel.textContent =\n preferredAction === 'quick-ask'\n ? t('annotate.recommendedAction.askHint', {\n action: t('annotate.askAi'),\n })\n : t('annotate.recommendedAction.agentHint', {\n action: t('annotate.createTask'),\n })\n quickAskButton.textContent =\n next.isSending && next.sendingScope === 'quick-ask'\n ? t('menu.sending')\n : !next.isSending && next.successScope === 'quick-ask'\n ? t('annotate.sent')\n : t('annotate.askAi')\n createTaskButton.textContent =\n next.isSending && next.sendingScope === 'create-task'\n ? t('menu.sending')\n : t('annotate.createTask')\n\n // ===== Workflow Buttons =====\n const workflows = next.workflows || []\n workflowRow.style.display = workflows.length > 0 ? 'flex' : 'none'\n\n // Clear and rebuild workflow buttons\n workflowRow.innerHTML = ''\n\n for (const wf of workflows) {\n const btn = createSidebarButton(wf.label, annotateSidebarButtonClass)\n btn.dataset.workflowId = wf.id\n btn.style.flex = '1'\n btn.style.justifyContent = 'center'\n btn.style.whiteSpace = 'nowrap'\n\n const isSendingWorkflow = next.isSending && next.sendingScope === `workflow:${wf.id}`\n btn.disabled = next.isSending\n btn.textContent = isSendingWorkflow ? t('menu.sending') : wf.label\n\n btn.addEventListener('click', () => {\n if (wf.confirm) {\n dom.showConfirmDialog(t('workflow.confirm', { label: wf.label }), () => {\n next.onWorkflow?.(wf.id)\n })\n return\n }\n next.onWorkflow?.(wf.id)\n })\n\n workflowRow.appendChild(btn)\n }\n\n const latestSession = next.latestSessionDetail\n const latestSessionSummary = next.latestSessionSummary\n latestSessionSection.style.display = latestSession || latestSessionSummary ? '' : 'none'\n latestSessionRefreshButton.disabled = Boolean(next.latestSessionLoading)\n latestSessionTitle.textContent = t('annotate.latestSession.title')\n\n if (latestSession || latestSessionSummary) {\n const latestStatus = latestSession?.status ?? latestSessionSummary?.status ?? 'pending'\n latestSessionMeta.textContent = latestSession\n ? t('annotate.latestSession.meta.loaded', {\n id: latestSession.id.slice(0, 8),\n count: latestSession.annotations.length,\n })\n : latestSessionSummary\n ? t('annotate.latestSession.meta.summary', {\n id: latestSessionSummary.id.slice(0, 8),\n })\n : ''\n\n const lastAgentOrSystemMessageRecord =\n latestSession?.messages\n ?.filter(message => message.role === 'agent' || message.role === 'system')\n .slice(-1)[0] ?? null\n const lastAgentOrSystemMessage = lastAgentOrSystemMessageRecord?.text?.trim() ?? ''\n const latestMessageKind =\n lastAgentOrSystemMessageRecord && lastAgentOrSystemMessage\n ? classifySessionMessage({\n role: lastAgentOrSystemMessageRecord.role,\n text: lastAgentOrSystemMessage,\n })\n : null\n const latestVisualStatus = latestStatus\n\n latestSessionStatus.textContent = getLatestSessionStatusLabel(latestVisualStatus)\n applyLatestSessionStatusStyles(latestVisualStatus)\n\n latestSessionMessage.style.display = 'none'\n\n const fallbackMsg = getLatestSessionFallbackMessage(latestStatus, Boolean(latestSession))\n const hasMessage = next.latestSessionLoading || lastAgentOrSystemMessage || fallbackMsg\n\n if (hasMessage) {\n latestSessionMessage.style.display = 'block'\n latestSessionMessage.textContent = next.latestSessionLoading\n ? t('annotate.latestSession.loading')\n : lastAgentOrSystemMessage || fallbackMsg\n }\n latestSessionMessage.dataset.variant = latestMessageKind ?? 'default'\n if (latestMessageKind === 'system-info') {\n latestSessionMessage.style.color = '#9ed8ff'\n } else {\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n }\n const latestSessionHintText = next.latestSessionLoading\n ? ''\n : getLatestSessionHint(latestStatus)\n const latestSessionErrorText = getLatestSessionErrorMessage(next.latestSessionError)\n const showReconnectAction = Boolean(latestSessionErrorText)\n latestSessionHint.textContent = latestSessionHintText\n latestSessionHint.style.display =\n latestSessionHintText && !showReconnectAction ? 'block' : 'none'\n latestSessionHint.style.color =\n latestStatus === 'resolved' ? '#b7f5cd' : 'var(--inspecto-text-secondary)'\n latestSessionError.textContent = latestSessionErrorText\n latestSessionError.style.display = latestSessionErrorText ? 'block' : 'none'\n latestSessionRefreshButton.textContent = showReconnectAction\n ? t('annotate.latestSession.reconnect')\n : '↻'\n latestSessionRefreshButton.style.display =\n showReconnectAction || next.latestSessionLoading ? '' : 'none'\n latestSessionRefreshButton.style.minWidth = showReconnectAction ? 'auto' : ''\n latestSessionRefreshButton.style.padding = showReconnectAction ? '6px 10px' : ''\n latestSessionRefreshButton.style.fontSize = showReconnectAction ? '11px' : '12px'\n\n const latestSessionId = latestSession?.id ?? latestSessionSummary?.id ?? ''\n if (latestSessionId && latestSessionId !== lastRevealedSessionId) {\n lastRevealedSessionId = latestSessionId\n // Avoid auto-scrolling to the latest session if we have unsaved local changes\n if (!hasCurrentDraft && !hasSavedRecords) {\n latestSessionSection.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n }\n } else {\n latestSessionHint.textContent = ''\n latestSessionHint.style.display = 'none'\n latestSessionMessage.dataset.variant = 'default'\n latestSessionMessage.style.color = 'var(--inspecto-text-secondary)'\n latestSessionError.textContent = ''\n latestSessionError.style.display = 'none'\n latestSessionRefreshButton.textContent = '↻'\n latestSessionRefreshButton.style.display = 'none'\n latestSessionRefreshButton.style.minWidth = ''\n latestSessionRefreshButton.style.padding = ''\n latestSessionRefreshButton.style.fontSize = '12px'\n }\n\n statusMessage.textContent = getLiveStatusMessage(next)\n errorMessage.textContent = next.errorMessage ?? ''\n errorMessage.style.display = next.errorMessage ? 'block' : 'none'\n }\n\n instructionSegments = normalizeInstructionSegments([\n { type: 'text', text: currentOptions.instruction },\n ])\n\n instructionInput.addEventListener('input', () => {\n if (isSyncingInstructionDom) return\n instructionSegments = captureInstructionSegmentsFromDom(\n instructionInput,\n 'inspecto-annotate-sidebar-chip',\n )\n currentOptions.onUpdateInstruction(\n serializeInstructionSegments(\n instructionSegments,\n id => getPromptChipRecordById(id)?.label ?? null,\n ),\n )\n })\n\n cssContextButton.addEventListener('click', () => currentOptions.onToggleCssContext?.())\n runtimeContextButton.addEventListener('click', () => currentOptions.onToggleRuntimeContext?.())\n exitButton.addEventListener('click', () => currentOptions.onExit())\n quickCaptureButton.addEventListener('click', () => currentOptions.onToggleQuickCapture?.())\n modeButton.addEventListener('click', () => {\n if (currentOptions.mode === 'capture-enabled') {\n currentOptions.onPauseCapture()\n } else {\n currentOptions.onResumeCapture()\n }\n })\n\n patch(currentOptions)\n\n return {\n element,\n update(next: AnnotateSidebarOptions) {\n currentOptions = next\n patch(currentOptions)\n },\n destroy() {\n renderers.destroy()\n element.remove()\n },\n }\n}\n","import { createAnnotateSidebar } from './annotate-sidebar.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport type { HotKeys } from '@inspecto-dev/types'\nimport { hotKeysHeld } from './component-utils.js'\n\ntype ModeUiContext = {\n disabled: boolean\n active: boolean\n mode: 'inspect' | 'annotate'\n annotateCapturePaused: boolean\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateSidebar: ReturnType<typeof createAnnotateSidebar> | null\n annotateOverlay: { clear(): void } | null\n shadowRootEl: ShadowRoot\n overlay: { hide(): void }\n cleanupMenu: (() => void) | null\n updateBadgeContent(): void\n getAnnotateSidebarOptions(): AnnotateSidebarOptions\n renderAnnotateSelectionOverlay(): void\n getEffectiveHotKeys(): HotKeys\n}\n\nfunction asModeUiContext(ctx: unknown): ModeUiContext {\n return ctx as ModeUiContext\n}\n\nexport function syncModeUi(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n if (!state.shadowRootEl) return\n\n state.updateBadgeContent()\n\n if (state.disabled) {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateOverlay?.clear()\n return\n }\n\n if (state.mode === 'annotate') {\n state.overlay.hide()\n state.cleanupMenu?.()\n state.cleanupMenu = null\n mountAnnotateSidebar(state)\n updateAnnotateSidebar(state)\n state.renderAnnotateSelectionOverlay()\n return\n }\n\n state.annotateCapturePaused = false\n state.annotateRuntimeContextEnabled = false\n state.annotateCssContextEnabled = false\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateOverlay?.clear()\n}\n\nexport function mountAnnotateSidebar(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n if (state.annotateSidebar) return\n state.annotateSidebar = createAnnotateSidebar(\n state.shadowRootEl,\n state.getAnnotateSidebarOptions(),\n )\n}\n\nexport function updateAnnotateSidebar(ctx: unknown): void {\n const state = asModeUiContext(ctx)\n state.annotateSidebar?.update(state.getAnnotateSidebarOptions())\n}\n\nexport function isInspectorActive(ctx: unknown, event: MouseEvent): boolean {\n const state = asModeUiContext(ctx)\n if (state.disabled) return false\n if (state.mode === 'annotate') return true\n if (state.active) return true\n\n const hotKeys = state.getEffectiveHotKeys()\n if (hotKeys === false) return false\n return hotKeysHeld(event, hotKeys)\n}\n\nexport function setupListeners(\n ctx: unknown,\n handlers: {\n onMouseMove: (e: MouseEvent) => void\n onClick: (e: MouseEvent) => void\n onContextMenu: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocusChange: () => void\n onViewportChange: () => void\n },\n): void {\n document.addEventListener('mousemove', handlers.onMouseMove, true)\n document.addEventListener('click', handlers.onClick, true)\n document.addEventListener('contextmenu', handlers.onContextMenu, true)\n document.addEventListener('keydown', handlers.onKeyDown, true)\n document.addEventListener('focusin', handlers.onFocusChange, true)\n document.addEventListener('focusout', handlers.onFocusChange, true)\n document.addEventListener('scroll', handlers.onViewportChange, true)\n window.addEventListener('resize', handlers.onViewportChange)\n}\n\nexport function teardownListeners(\n _ctx: unknown,\n handlers: {\n onMouseMove: (e: MouseEvent) => void\n onClick: (e: MouseEvent) => void\n onContextMenu: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocusChange: () => void\n onViewportChange: () => void\n },\n): void {\n document.removeEventListener('mousemove', handlers.onMouseMove, true)\n document.removeEventListener('click', handlers.onClick, true)\n document.removeEventListener('contextmenu', handlers.onContextMenu, true)\n document.removeEventListener('keydown', handlers.onKeyDown, true)\n document.removeEventListener('focusin', handlers.onFocusChange, true)\n document.removeEventListener('focusout', handlers.onFocusChange, true)\n document.removeEventListener('scroll', handlers.onViewportChange, true)\n window.removeEventListener('resize', handlers.onViewportChange)\n}\n","import {\n overlayClass,\n tooltipClass,\n tooltipTopClass,\n tooltipBottomClass,\n tagClass,\n idClass,\n classClass,\n dimClass,\n separatorClass,\n sourceClass,\n} from './styles.js'\n\nconst GAP = 8\nconst EDGE_MARGIN = 4\nconst MAX_CLASS_SUMMARY_LENGTH = 96\n\nexport function createOverlay(shadowRoot: ShadowRoot): {\n show(el: Element, sourceLabel: string): void\n hide(): void\n} {\n const overlay = document.createElement('div')\n overlay.className = overlayClass\n overlay.style.display = 'none'\n\n const tooltip = document.createElement('div')\n tooltip.className = tooltipClass\n tooltip.style.display = 'none'\n\n const tagSpan = document.createElement('span')\n tagSpan.className = tagClass\n\n const idSpan = document.createElement('span')\n idSpan.className = idClass\n\n const classSpan = document.createElement('span')\n classSpan.className = classClass\n\n const dimSpan = document.createElement('span')\n dimSpan.className = dimClass\n\n const separator = document.createElement('div')\n separator.className = separatorClass\n\n const sourceSpan = document.createElement('div')\n sourceSpan.className = sourceClass\n\n tooltip.appendChild(tagSpan)\n tooltip.appendChild(idSpan)\n tooltip.appendChild(classSpan)\n tooltip.appendChild(document.createTextNode(' '))\n tooltip.appendChild(dimSpan)\n tooltip.appendChild(separator)\n tooltip.appendChild(sourceSpan)\n\n shadowRoot.appendChild(overlay)\n shadowRoot.appendChild(tooltip)\n\n function show(el: Element, sourceLabel: string): void {\n const rect = el.getBoundingClientRect()\n\n // The overlay and tooltip are `position: fixed`, so we MUST use viewport coordinates (rect.left/top)\n // without adding window.scrollX/scrollY.\n\n // Update overlay box\n overlay.style.display = 'block'\n overlay.style.left = `${rect.left}px`\n overlay.style.top = `${rect.top}px`\n overlay.style.width = `${rect.width}px`\n overlay.style.height = `${rect.height}px`\n\n // Update tooltip content\n const tagName = el.tagName.toLowerCase()\n tagSpan.textContent = tagName\n\n idSpan.textContent = el.id ? `#${el.id}` : ''\n\n const classes = Array.from(el.classList)\n .map(c => `.${c}`)\n .join('')\n classSpan.textContent = summarizeClasses(classes)\n\n dimSpan.textContent = `${Math.round(rect.width)} × ${Math.round(rect.height)}`\n\n sourceSpan.textContent = sourceLabel\n\n tooltip.style.visibility = 'hidden'\n tooltip.style.display = 'block'\n\n // Calculate tooltip position\n const tooltipRect = tooltip.getBoundingClientRect()\n const viewportWidth = document.documentElement.clientWidth || window.innerWidth\n const viewportHeight = document.documentElement.clientHeight || window.innerHeight\n\n // Calculate vertical position (above or below)\n let tooltipTop = rect.top - tooltipRect.height - GAP\n let isBottom = false\n\n // If there's not enough space above, show it below\n if (tooltipTop < EDGE_MARGIN) {\n tooltipTop = rect.bottom + GAP\n // If showing below also goes off screen, clamp it to bottom of screen\n if (tooltipTop + tooltipRect.height > viewportHeight - EDGE_MARGIN) {\n tooltipTop = viewportHeight - tooltipRect.height - EDGE_MARGIN\n }\n isBottom = true\n }\n\n tooltip.classList.toggle(tooltipBottomClass, isBottom)\n tooltip.classList.toggle(tooltipTopClass, !isBottom)\n\n // Calculate horizontal position\n // Default to aligning with the left edge of the element\n let tooltipLeft = rect.left\n\n // Prevent overflowing the right edge\n if (tooltipLeft + tooltipRect.width > viewportWidth - EDGE_MARGIN) {\n tooltipLeft = viewportWidth - tooltipRect.width - EDGE_MARGIN\n }\n // Prevent overflowing the left edge\n if (tooltipLeft < EDGE_MARGIN) {\n tooltipLeft = EDGE_MARGIN\n }\n\n // Calculate arrow position so it always points at the element\n // The arrow normally points at rect.left + 10\n // But if the element is tiny, point at its center\n const targetPointX = rect.left + Math.min(15, rect.width / 2)\n\n // Calculate where the arrow should be relative to the tooltip\n let arrowLeft = targetPointX - tooltipLeft\n\n // Clamp arrow position so it doesn't detach from the tooltip bubble itself\n arrowLeft = Math.max(6, Math.min(arrowLeft, tooltipRect.width - 18))\n\n tooltip.style.left = `${tooltipLeft}px`\n tooltip.style.top = `${tooltipTop}px`\n tooltip.style.setProperty('--inspecto-arrow-left', `${arrowLeft}px`)\n\n tooltip.style.visibility = 'visible'\n }\n\n function hide(): void {\n overlay.style.display = 'none'\n tooltip.style.display = 'none'\n }\n\n return { show, hide }\n}\n\nfunction summarizeClasses(classes: string): string {\n if (classes.length <= MAX_CLASS_SUMMARY_LENGTH) return classes\n return `${classes.slice(0, MAX_CLASS_SUMMARY_LENGTH - 3)}...`\n}\n","import { createOverlay } from './overlay.js'\nimport { fetchIdeInfo } from './http.js'\nimport { inspectorStyles } from './styles.js'\nimport { setBaseUrl } from './http.js'\nimport { configureI18n } from './i18n.js'\nimport type { HotKeys, InspectorOptions } from '@inspecto-dev/types'\n\ntype InspectoOptions = InspectorOptions & { mode?: 'inspect' | 'annotate' }\n\ntype LifecycleContext = {\n options: InspectoOptions\n mode: 'inspect' | 'annotate'\n serverHotKeys: HotKeys | null\n shadowRootEl: ShadowRoot\n overlay: ReturnType<typeof createOverlay>\n annotateOverlay: { clear(): void } | null\n badge: HTMLDivElement\n configLoadPromise: Promise<void> | null\n annotateSidebar: { destroy(): void } | null\n annotateElements: Map<string, Element>\n annotateDrafts: Map<string, unknown>\n cleanupRuntimeContextCapture: (() => void) | null\n runtimeContextCollector: { clear(): void }\n pendingAnnotateViewportFrame: number | null\n annotateCapturePaused: boolean\n annotateQuickCaptureEnabled: boolean\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateDeliveryMode: 'ide' | 'agent'\n annotateWorkflows: import('@inspecto-dev/types').WorkflowSlotOption[]\n stopLatestAnnotateSessionStream(): void\n setAttribute(name: string, value: string): void\n removeAttribute(name: string): void\n attachShadow(options: ShadowRootInit): ShadowRoot\n createBadge(): HTMLDivElement\n setActive(value: boolean): void\n setupListeners(): void\n teardownListeners(): void\n syncRuntimeContextCapture(): void\n syncModeUi(): void\n updateAnnotateSidebar(): void\n}\n\nfunction asLifecycleContext(ctx: unknown): LifecycleContext {\n return ctx as LifecycleContext\n}\n\nfunction applyTheme(state: LifecycleContext, theme?: 'light' | 'dark' | 'auto'): void {\n if (theme === 'dark') {\n state.setAttribute('data-theme', 'dark')\n return\n }\n if (theme === 'light') {\n state.setAttribute('data-theme', 'light')\n return\n }\n state.removeAttribute('data-theme')\n}\n\nfunction resetAnnotateState(state: LifecycleContext): void {\n state.annotateCapturePaused = false\n state.annotateQuickCaptureEnabled = false\n state.annotateRuntimeContextEnabled = false\n state.annotateCssContextEnabled = false\n state.stopLatestAnnotateSessionStream()\n}\n\nfunction buildI18nConfig(input: {\n locale?: InspectoOptions['locale']\n messages?: InspectoOptions['messages']\n}): {\n locale?: NonNullable<InspectoOptions['locale']>\n messages?: NonNullable<InspectoOptions['messages']>\n} {\n const config: {\n locale?: NonNullable<InspectoOptions['locale']>\n messages?: NonNullable<InspectoOptions['messages']>\n } = {}\n if (input.locale !== undefined) {\n config.locale = input.locale\n }\n if (input.messages !== undefined) {\n config.messages = input.messages\n }\n return config\n}\n\nexport function connect(\n ctx: unknown,\n createAnnotateOverlay: (root: ShadowRoot) => LifecycleContext['annotateOverlay'],\n): void {\n const state = asLifecycleContext(ctx)\n configureI18n(buildI18nConfig(state.options))\n const host = state as unknown as HTMLElement\n host.style.position = 'fixed'\n host.style.inset = '0'\n host.style.pointerEvents = 'none'\n host.style.zIndex = '2147483646'\n state.shadowRootEl = state.attachShadow({ mode: 'open' })\n\n const style = document.createElement('style')\n style.textContent = inspectorStyles\n state.shadowRootEl.appendChild(style)\n\n state.overlay = createOverlay(state.shadowRootEl)\n state.annotateOverlay = createAnnotateOverlay(state.shadowRootEl)\n state.badge = state.createBadge()\n\n state.setupListeners()\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n\n if (state.options.defaultActive) {\n state.setActive(true)\n }\n}\n\nexport function disconnect(ctx: unknown): void {\n const state = asLifecycleContext(ctx)\n if (state.pendingAnnotateViewportFrame !== null) {\n cancelAnimationFrame(state.pendingAnnotateViewportFrame)\n state.pendingAnnotateViewportFrame = null\n }\n state.annotateSidebar?.destroy()\n state.annotateSidebar = null\n state.annotateElements.clear()\n state.annotateDrafts.clear()\n state.stopLatestAnnotateSessionStream()\n state.cleanupRuntimeContextCapture?.()\n state.cleanupRuntimeContextCapture = null\n state.runtimeContextCollector.clear()\n state.teardownListeners()\n}\n\nexport function configure(ctx: unknown, options: InspectoOptions): void {\n const state = asLifecycleContext(ctx)\n state.options = options\n configureI18n(buildI18nConfig(options))\n if (options.mode !== undefined) {\n const previousMode = state.mode\n state.mode = options.mode\n if (options.mode !== 'annotate' && previousMode === 'annotate') {\n resetAnnotateState(state)\n }\n }\n if (options.serverUrl) {\n setBaseUrl(options.serverUrl)\n }\n\n applyTheme(state, options.theme)\n\n state.configLoadPromise = fetchIdeInfo(true)\n .then(info => {\n if (info?.hotKeys !== undefined) {\n state.serverHotKeys = info.hotKeys\n }\n if (info?.theme !== undefined) {\n applyTheme(state, info.theme)\n }\n if (info?.annotateDeliveryMode !== undefined) {\n state.annotateDeliveryMode = info.annotateDeliveryMode\n }\n if (info?.workflows !== undefined) {\n state.annotateWorkflows = info.workflows\n }\n if (info?.includeSnippet !== undefined) {\n state.options.includeSnippet = info.includeSnippet\n }\n if (info?.runtimeContext !== undefined) {\n state.options.runtimeContext = {\n ...state.options.runtimeContext,\n ...info.runtimeContext,\n }\n state.syncRuntimeContextCapture()\n }\n\n if (state.mode === 'annotate' && state.annotateSidebar) {\n state.updateAnnotateSidebar()\n }\n })\n .catch(() => {})\n .then(() => {})\n\n if (state.shadowRootEl) {\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n }\n}\n\nexport function setMode(ctx: unknown, mode: 'inspect' | 'annotate'): void {\n const state = asLifecycleContext(ctx)\n const previousMode = state.mode\n state.mode = mode\n\n if (mode === 'annotate') {\n state.overlay.hide()\n } else if (previousMode === 'annotate') {\n resetAnnotateState(state)\n }\n\n state.syncRuntimeContextCapture()\n state.syncModeUi()\n}\n","import {\n attachRuntimeContextCapture,\n createRuntimeContextCollector,\n createRuntimeContextEnvelope,\n selectRuntimeEvidence,\n} from './runtime-context.js'\nimport { buildCssContextPrompt, captureCssContextEntry } from './css-context.js'\nimport type { AnnotationTarget, AnnotationTransport, SourceLocation } from '@inspecto-dev/types'\n\ntype EvidenceContext = {\n options: {\n runtimeContext?: {\n enabled?: boolean\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n }\n mode: 'inspect' | 'annotate'\n disabled: boolean\n cleanupRuntimeContextCapture: (() => void) | null\n runtimeContextCollector: ReturnType<typeof createRuntimeContextCollector>\n annotateRuntimeContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateSession: {\n current: {\n id: string\n target: AnnotationTarget | null\n cssContextEnabled?: boolean\n }\n records: Array<{\n target: AnnotationTarget\n cssContextEnabled?: boolean\n }>\n }\n annotateElements: Map<string, Element>\n createAnnotationTarget(element: Element, location: SourceLocation): AnnotationTarget\n getAnnotationTargetKey(target: AnnotationTarget): string\n findElementForLocation(location: SourceLocation, selector?: string): Element | null\n findElementForAnnotationTarget(target: AnnotationTarget): Element | null\n canAttachRuntimeContext(): boolean\n canAttachCssContext(): boolean\n getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n isCssContextEnabledForTransportTarget(target: AnnotationTransport['targets'][number]): boolean\n}\n\nfunction asEvidenceContext(ctx: unknown): EvidenceContext {\n return ctx as EvidenceContext\n}\n\nexport function syncRuntimeContextCapture(ctx: unknown): void {\n const state = asEvidenceContext(ctx)\n const runtimeContextEnabled =\n state.options.runtimeContext?.enabled === true &&\n (state.mode === 'inspect' || (state.mode === 'annotate' && !state.disabled))\n\n if (runtimeContextEnabled) {\n if (!state.cleanupRuntimeContextCapture) {\n state.cleanupRuntimeContextCapture = attachRuntimeContextCapture(\n state.runtimeContextCollector,\n )\n }\n return\n }\n\n state.cleanupRuntimeContextCapture?.()\n state.cleanupRuntimeContextCapture = null\n state.runtimeContextCollector.clear()\n}\n\nexport function canAttachRuntimeContext(ctx: unknown): boolean {\n return asEvidenceContext(ctx).options.runtimeContext?.enabled === true\n}\n\nexport function canAttachCssContext(): boolean {\n return typeof window !== 'undefined' && typeof window.getComputedStyle === 'function'\n}\n\nexport function captureCssContextPromptForElement(\n ctx: unknown,\n element: Element,\n location: SourceLocation,\n): string | null {\n const state = asEvidenceContext(ctx)\n const target = state.createAnnotationTarget(element, location)\n const entry = captureCssContextEntry({\n element,\n location,\n ...(target.label ? { label: target.label } : {}),\n ...(target.selector ? { selector: target.selector } : {}),\n })\n return entry ? buildCssContextPrompt([entry]) : null\n}\n\nexport function isCssContextEnabledForTarget(ctx: unknown, target: AnnotationTarget): boolean {\n const state = asEvidenceContext(ctx)\n if (state.annotateCssContextEnabled) return true\n\n const targetKey = state.getAnnotationTargetKey(target)\n if (\n state.annotateSession.current.target &&\n state.getAnnotationTargetKey(state.annotateSession.current.target) === targetKey\n ) {\n return state.annotateSession.current.cssContextEnabled ?? false\n }\n\n const savedRecord = state.annotateSession.records.find(\n record => state.getAnnotationTargetKey(record.target) === targetKey,\n )\n return savedRecord?.cssContextEnabled ?? false\n}\n\nexport function isCssContextEnabledForTransportTarget(\n ctx: unknown,\n target: AnnotationTransport['targets'][number],\n): boolean {\n const state = asEvidenceContext(ctx)\n if (state.annotateCssContextEnabled) return true\n\n const targetKey = `${target.location.file}:${target.location.line}:${target.location.column}::${target.selector ?? ''}`\n if (\n state.annotateSession.current.target &&\n state.getAnnotationTargetKey(state.annotateSession.current.target) === targetKey\n ) {\n return state.annotateSession.current.cssContextEnabled ?? false\n }\n\n const savedRecord = state.annotateSession.records.find(\n record => state.getAnnotationTargetKey(record.target) === targetKey,\n )\n return savedRecord?.cssContextEnabled ?? false\n}\n\nexport function getAnnotateCssContextPrompt(\n ctx: unknown,\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n): string | null {\n const state = asEvidenceContext(ctx)\n if (\n (!includeWhenDisabled &&\n !state.annotateCssContextEnabled &&\n !annotations.some(annotation =>\n annotation.targets.some(target => state.isCssContextEnabledForTransportTarget(target)),\n )) ||\n !state.canAttachCssContext()\n ) {\n return null\n }\n\n const entries = annotations.flatMap(annotation =>\n annotation.targets.flatMap(target => {\n if (!includeWhenDisabled && !state.isCssContextEnabledForTransportTarget(target)) {\n return []\n }\n const element = state.findElementForLocation(target.location, target.selector)\n if (!element) return []\n const entry = captureCssContextEntry({\n element,\n location: target.location,\n ...(target.label ? { label: target.label } : {}),\n ...(target.selector ? { selector: target.selector } : {}),\n })\n return entry ? [entry] : []\n }),\n )\n\n return buildCssContextPrompt(entries)\n}\n\nexport function getRuntimeContextLimits(ctx: unknown): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n} {\n const state = asEvidenceContext(ctx)\n return {\n ...(state.options.runtimeContext?.maxRuntimeErrors !== undefined\n ? { maxRuntimeErrors: state.options.runtimeContext.maxRuntimeErrors }\n : {}),\n ...(state.options.runtimeContext?.maxFailedRequests !== undefined\n ? { maxFailedRequests: state.options.runtimeContext.maxFailedRequests }\n : {}),\n }\n}\n\nexport function getAnnotateRuntimeContext(\n ctx: unknown,\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n): ReturnType<typeof createRuntimeContextEnvelope> | null {\n const state = asEvidenceContext(ctx)\n if (\n (!includeWhenDisabled && !state.annotateRuntimeContextEnabled) ||\n !state.canAttachRuntimeContext() ||\n annotations.length === 0\n ) {\n return null\n }\n\n const locations = annotations.flatMap(annotation =>\n annotation.targets.map(target => target.location),\n )\n if (locations.length === 0) return null\n\n const selected = selectRuntimeEvidence(\n state.runtimeContextCollector.snapshot().records,\n locations,\n state.getRuntimeContextLimits(),\n )\n\n return selected.length > 0 ? createRuntimeContextEnvelope(selected) : null\n}\n\nexport function formatRuntimeContextSummary(\n runtimeContext: ReturnType<typeof createRuntimeContextEnvelope> | null,\n): string {\n if (!runtimeContext) return ''\n\n const parts: string[] = []\n if (runtimeContext.summary.runtimeErrorCount > 0) {\n parts.push(\n `${runtimeContext.summary.runtimeErrorCount} ${runtimeContext.summary.runtimeErrorCount === 1 ? 'runtime error' : 'runtime errors'}`,\n )\n }\n if (runtimeContext.summary.failedRequestCount > 0) {\n parts.push(\n `${runtimeContext.summary.failedRequestCount} ${runtimeContext.summary.failedRequestCount === 1 ? 'failed request' : 'failed requests'}`,\n )\n }\n return parts.join(' • ')\n}\n\nexport function getCollectedRuntimeErrorCount(ctx: unknown): number {\n const state = asEvidenceContext(ctx)\n return state.runtimeContextCollector\n .snapshot()\n .records.filter(record => record.kind !== 'failed-request').length\n}\n","import { createOverlay } from './overlay.js'\nimport { createEmptySession } from './annotate-session.js'\nimport { createAnnotateSidebar } from './annotate-sidebar.js'\nimport type { AnnotateSidebarOptions } from './annotate-sidebar.js'\nimport { createAnnotateOverlay } from './annotate-overlay.js'\nimport {\n addTargetToCurrentAnnotation as addAnnotateTarget,\n beginEditingRecord as beginAnnotateEditing,\n clearAnnotateError as clearAnnotateErrorState,\n clearAnnotateSuccess as clearAnnotateSuccessState,\n clearDraftForTarget as clearAnnotateDraftForTarget,\n composeAnnotateInstruction as composeAnnotateBatchInstruction,\n createAnnotationTarget as createAnnotateTarget,\n describeElement as describeInspectableElement,\n findElementForAnnotationTarget as findAnnotateTargetElement,\n findElementForLocation as findElementByLocation,\n getAnnotateSidebarOptions as buildAnnotateSidebarOptions,\n getAnnotationTargetKey as getAnnotateTargetKey,\n getNextRecordDisplayOrder as getAnnotateNextRecordDisplayOrder,\n hasCurrentRecord as hasAnnotateCurrentRecord,\n markTargetInAnnotateSession as markAnnotateTarget,\n persistCurrentDraft as persistAnnotateDraft,\n rebindCurrentAnnotationElements as rebindAnnotateElements,\n renderAnnotateSelectionOverlay as renderAnnotateOverlay,\n refreshLatestAnnotateSession as refreshLatestAnnotateSessionState,\n restoreEditingRecord as restoreAnnotateEditingRecord,\n sendAnnotationBatch as sendAnnotateBatch,\n showAnnotateSuccess as showAnnotateBatchSuccess,\n startLatestAnnotateSessionStream as startLatestAnnotateSessionStreamState,\n stopLatestAnnotateSessionStream as stopLatestAnnotateSessionStreamState,\n toAnnotateErrorMessage as toAnnotateRequestErrorMessage,\n toAnnotationTransportFromRecord as toAnnotateTransportFromRecord,\n} from './component-annotate.js'\nimport {\n createBadge as createLauncherBadge,\n dismiss as dismissLauncher,\n getEffectiveHotKeys as getLauncherHotKeys,\n getHotKeyLabel as getLauncherHotKeyLabel,\n setActive as setLauncherActive,\n setPaused as setLauncherPaused,\n shouldInvertLauncherEye as shouldInvertBadgeEye,\n shouldQuickJumpOnTrigger as shouldQuickJump,\n updateBadgeContent as updateLauncherBadgeContent,\n updateLauncherEye as syncLauncherEye,\n} from './component-launcher.js'\nimport {\n handleKeyDown as handleInspectorKeyDown,\n handleMouseMove as handleInspectorMouseMove,\n handleTrigger as handleInspectorTrigger,\n handleViewportChange as handleInspectorViewportChange,\n openInspectMenu as openInspectorIntentMenu,\n} from './component-interactions.js'\nimport {\n isInspectorActive as resolveInspectorActive,\n mountAnnotateSidebar as mountAnnotateSidebarUi,\n setupListeners as setupInspectorListeners,\n syncModeUi as syncInspectorModeUi,\n teardownListeners as teardownInspectorListeners,\n updateAnnotateSidebar as updateAnnotateSidebarUi,\n} from './component-mode-ui.js'\nimport {\n configure as configureInspector,\n connect as connectInspector,\n disconnect as disconnectInspector,\n setMode as setInspectorMode,\n} from './component-lifecycle.js'\nimport {\n canAttachCssContext as canAttachCssEvidence,\n canAttachRuntimeContext as canAttachRuntimeEvidence,\n captureCssContextPromptForElement as captureCssPromptForElement,\n formatRuntimeContextSummary as formatRuntimeSummary,\n getAnnotateCssContextPrompt as getAnnotateCssPrompt,\n getAnnotateRuntimeContext as getAnnotateRuntimeEvidence,\n getCollectedRuntimeErrorCount as getRuntimeErrorCount,\n getRuntimeContextLimits as getRuntimeEvidenceLimits,\n isCssContextEnabledForTarget as isCssEnabledForTarget,\n isCssContextEnabledForTransportTarget as isCssEnabledForTransportTarget,\n syncRuntimeContextCapture as syncRuntimeCapture,\n} from './component-evidence.js'\nimport { createElementSelector } from './component-utils.js'\nimport { createRuntimeContextCollector, createRuntimeContextEnvelope } from './runtime-context.js'\nimport type {\n AnnotationTransport,\n AnnotationTarget,\n AnnotationWorkSession,\n AnnotationWorkSessionSummary,\n AiErrorCode,\n FeedbackRecord,\n FeedbackRecordDraft,\n InspectorOptions,\n SourceLocation,\n HotKeys,\n} from '@inspecto-dev/types'\nexport type InspectorMode = 'inspect' | 'annotate'\ntype InspectoOptions = InspectorOptions & { mode?: InspectorMode }\n\nconst DEFAULT_ANNOTATE_INSTRUCTION = ''\n\n// Fallback class for SSR environments\nconst BaseElement =\n typeof HTMLElement !== 'undefined' ? HTMLElement : (class {} as typeof HTMLElement)\n\nclass InspectoElement extends BaseElement {\n private options: InspectoOptions = {}\n private serverHotKeys: HotKeys | null = null\n private active = false\n private disabled = false\n private prePauseState: { active: boolean; mode: InspectorMode } = {\n active: false,\n mode: 'inspect',\n }\n private mode: InspectorMode = 'inspect'\n private launcherPanelOpen = false\n private shadowRootEl!: ShadowRoot\n private overlay!: ReturnType<typeof createOverlay>\n private annotateOverlay: ReturnType<typeof createAnnotateOverlay> | null = null\n private cleanupMenu: (() => void) | null = null\n private annotateSession = createEmptySession()\n private annotateCapturePaused = false\n private annotateQuickCaptureEnabled = false\n private annotateSidebar: ReturnType<typeof createAnnotateSidebar> | null = null\n private annotateElements = new Map<string, Element>()\n private annotateDrafts = new Map<string, FeedbackRecordDraft>()\n private annotateEditingRecord: FeedbackRecord | null = null\n private badge!: HTMLDivElement\n private configLoadPromise: Promise<void> | null = null\n private annotateInstructionDraft = DEFAULT_ANNOTATE_INSTRUCTION\n private annotateErrorMessage = ''\n private annotateRuntimeContextEnabled = false\n private annotateCssContextEnabled = false\n private annotateDeliveryMode: 'ide' | 'agent' = 'agent'\n private annotateWorkflows: import('@inspecto-dev/types').WorkflowSlotOption[] = []\n private annotateSendState: {\n isSending: boolean\n scope: 'quick-ask' | 'create-task' | null\n } = {\n isSending: false,\n scope: null,\n }\n private annotateLatestSessionSummary: AnnotationWorkSessionSummary | null = null\n private annotateLatestSessionDetail: AnnotationWorkSession | null = null\n private annotateLatestSessionStream:\n | import('./http.js').AnnotationSessionEventStreamConnection\n | null = null\n private annotateLatestSessionLoading = false\n private annotateLatestSessionError = ''\n private annotateSuccessScope: 'quick-ask' | 'create-task' | null = null\n private annotateSuccessTimeout: ReturnType<typeof setTimeout> | null = null\n private annotateSuccessOnClear: (() => void) | null = null\n private pendingAnnotateViewportFrame: number | null = null\n private runtimeContextCollector = createRuntimeContextCollector()\n private cleanupRuntimeContextCapture: (() => void) | null = null\n private lastPointerX = 0\n private lastPointerY = 0\n private readonly onFocusChange = (): void => {\n this.updateLauncherEye()\n }\n\n connectedCallback(): void {\n connectInspector(this, root => createAnnotateOverlay(root))\n }\n\n disconnectedCallback(): void {\n disconnectInspector(this)\n }\n\n configure(options: InspectoOptions): void {\n configureInspector(this, options)\n }\n\n setMode(mode: InspectorMode): void {\n setInspectorMode(this, mode)\n }\n\n getMode(): InspectorMode {\n return this.mode\n }\n\n private createBadge(): HTMLDivElement {\n return createLauncherBadge(this)\n }\n\n private setPaused(value: boolean): void {\n setLauncherPaused(this, value)\n this.syncModeUi()\n }\n\n private dismiss(): void {\n dismissLauncher(this)\n }\n\n private getHotKeyLabel(): string {\n return getLauncherHotKeyLabel(this)\n }\n\n private getEffectiveHotKeys(): HotKeys {\n return getLauncherHotKeys(this)\n }\n\n private updateBadgeContent(): void {\n updateLauncherBadgeContent(this)\n }\n\n private setActive(value: boolean): void {\n setLauncherActive(this, value)\n }\n\n private readonly onMouseMove = (e: MouseEvent): void => {\n handleInspectorMouseMove(this, e)\n }\n\n private readonly onClick = (e: MouseEvent): void => {\n this.handleTrigger(e)\n }\n\n private readonly onContextMenu = (e: MouseEvent): void => {\n if (this.isInspectorActive(e)) {\n this.handleTrigger(e)\n }\n }\n\n private handleTrigger(e: MouseEvent): void {\n handleInspectorTrigger(this, e)\n }\n\n private shouldQuickJumpOnTrigger(e: MouseEvent): boolean {\n return shouldQuickJump(this, e)\n }\n\n private shouldInvertLauncherEye(): boolean {\n return shouldInvertBadgeEye(this)\n }\n\n private updateLauncherEye(): void {\n syncLauncherEye(this)\n }\n\n private pause(): void {\n this.setPaused(true)\n }\n\n private readonly onKeyDown = (e: KeyboardEvent): void => {\n handleInspectorKeyDown(this, e)\n }\n\n private readonly onViewportChange = (): void => {\n handleInspectorViewportChange(this)\n }\n\n private openInspectMenu(\n loc: SourceLocation,\n clientX: number,\n clientY: number,\n targetElement: Element,\n ): void {\n openInspectorIntentMenu(this, loc, clientX, clientY, targetElement)\n }\n\n private syncRuntimeContextCapture(): void {\n syncRuntimeCapture(this)\n }\n\n private canAttachRuntimeContext(): boolean {\n return canAttachRuntimeEvidence(this)\n }\n\n private canAttachCssContext(): boolean {\n return canAttachCssEvidence()\n }\n\n private captureCssContextPromptForElement(\n element: Element,\n location: SourceLocation,\n ): string | null {\n return captureCssPromptForElement(this, element, location)\n }\n\n private isCssContextEnabledForTarget(target: AnnotationTarget): boolean {\n return isCssEnabledForTarget(this, target)\n }\n\n private isCssContextEnabledForTransportTarget(\n target: AnnotationTransport['targets'][number],\n ): boolean {\n return isCssEnabledForTransportTarget(this, target)\n }\n\n private getAnnotateCssContextPrompt(\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n ): string | null {\n return getAnnotateCssPrompt(this, annotations, includeWhenDisabled)\n }\n\n private getRuntimeContextLimits(): {\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n } {\n return getRuntimeEvidenceLimits(this)\n }\n\n private getAnnotateRuntimeContext(\n annotations: AnnotationTransport[],\n includeWhenDisabled = false,\n ): ReturnType<typeof createRuntimeContextEnvelope> | null {\n return getAnnotateRuntimeEvidence(this, annotations, includeWhenDisabled)\n }\n\n private formatRuntimeContextSummary(\n runtimeContext: ReturnType<typeof createRuntimeContextEnvelope> | null,\n ): string {\n return formatRuntimeSummary(runtimeContext)\n }\n\n private getCollectedRuntimeErrorCount(): number {\n return getRuntimeErrorCount(this)\n }\n\n private addTargetToCurrentAnnotation(element: Element, location: SourceLocation): void {\n addAnnotateTarget(this, element, location)\n }\n\n private markTargetInAnnotateSession(element: Element, location: SourceLocation): void {\n markAnnotateTarget(this, element, location)\n }\n\n private getAnnotationTargetKey(target: AnnotationTarget): string {\n return getAnnotateTargetKey(this, target)\n }\n\n private persistCurrentDraft(): void {\n persistAnnotateDraft(this)\n }\n\n private clearDraftForTarget(target: AnnotationTarget | null | undefined): void {\n clearAnnotateDraftForTarget(this, target)\n }\n\n private restoreEditingRecord(): void {\n restoreAnnotateEditingRecord(this)\n }\n\n private beginEditingRecord(recordId: string): void {\n beginAnnotateEditing(this, recordId)\n }\n\n private findElementForAnnotationTarget(target: AnnotationTarget): Element | null {\n return findAnnotateTargetElement(this, target)\n }\n\n private findElementForLocation(location: SourceLocation, selector?: string): Element | null {\n return findElementByLocation(this, location, selector)\n }\n\n private rebindCurrentAnnotationElements(): void {\n rebindAnnotateElements(this)\n }\n\n private createAnnotationTarget(element: Element, location: SourceLocation): AnnotationTarget {\n return createAnnotateTarget(this, element, location)\n }\n\n private describeElement(element: Element): string {\n return describeInspectableElement(this, element)\n }\n\n private createSelector(element: Element): string {\n return createElementSelector(element)\n }\n\n private hasCurrentRecord(): boolean {\n return hasAnnotateCurrentRecord(this)\n }\n\n private getNextRecordDisplayOrder(): number {\n return getAnnotateNextRecordDisplayOrder(this)\n }\n\n private clearAnnotateError(): void {\n clearAnnotateErrorState(this)\n }\n\n private clearAnnotateSuccess(): void {\n clearAnnotateSuccessState(this)\n }\n\n private showAnnotateSuccess(scope: 'quick-ask' | 'create-task'): void {\n showAnnotateBatchSuccess(this, scope)\n }\n\n private async refreshLatestAnnotateSession(): Promise<void> {\n return refreshLatestAnnotateSessionState(this)\n }\n\n private startLatestAnnotateSessionStream(sessionId: string): void {\n startLatestAnnotateSessionStreamState(this, sessionId)\n }\n\n private stopLatestAnnotateSessionStream(): void {\n stopLatestAnnotateSessionStreamState(this)\n }\n\n private toAnnotateErrorMessage(errorCode?: AiErrorCode, fallback?: string): string {\n return toAnnotateRequestErrorMessage(this, errorCode, fallback)\n }\n\n private toAnnotationTransportFromRecord(record: FeedbackRecord): AnnotationTransport {\n return toAnnotateTransportFromRecord(this, record)\n }\n\n private async sendAnnotationBatch(\n annotations: AnnotationTransport[],\n scope: 'quick-ask' | 'create-task',\n instruction: string,\n deliveryMode: 'ide' | 'agent',\n onSuccess: () => void,\n ): Promise<void> {\n return sendAnnotateBatch(this, annotations, scope, instruction, deliveryMode, onSuccess)\n }\n\n private syncModeUi(): void {\n syncInspectorModeUi(this)\n }\n\n private mountAnnotateSidebar(): void {\n mountAnnotateSidebarUi(this)\n }\n\n private updateAnnotateSidebar(): void {\n updateAnnotateSidebarUi(this)\n }\n\n private getAnnotateSidebarOptions(): AnnotateSidebarOptions {\n return buildAnnotateSidebarOptions(this)\n }\n\n private composeAnnotateInstruction(): string {\n return composeAnnotateBatchInstruction(this)\n }\n\n private renderAnnotateSelectionOverlay(): void {\n renderAnnotateOverlay(this)\n }\n\n private isInspectorActive(e: MouseEvent): boolean {\n return resolveInspectorActive(this, e)\n }\n\n private setupListeners(): void {\n setupInspectorListeners(this, {\n onMouseMove: this.onMouseMove,\n onClick: this.onClick,\n onContextMenu: this.onContextMenu,\n onKeyDown: this.onKeyDown,\n onFocusChange: this.onFocusChange,\n onViewportChange: this.onViewportChange,\n })\n }\n\n private teardownListeners(): void {\n teardownInspectorListeners(this, {\n onMouseMove: this.onMouseMove,\n onClick: this.onClick,\n onContextMenu: this.onContextMenu,\n onKeyDown: this.onKeyDown,\n onFocusChange: this.onFocusChange,\n onViewportChange: this.onViewportChange,\n })\n }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('inspecto-overlay')) {\n customElements.define('inspecto-overlay', InspectoElement)\n}\n\nexport { InspectoElement }\n","import type { InspectorOptions } from '@inspecto-dev/types'\nimport type { InspectorMode } from './component.js'\n\n// Export types only, avoid top-level imports of DOM-dependent code\nexport type { InspectorOptions }\nexport type { InspectoElement } from './component.js'\nexport type { InspectorMode } from './component.js'\n\ntype MountInspectorOptions = InspectorOptions & { mode?: InspectorMode }\n\nconst TAG_NAME = 'inspecto-overlay'\n\nexport async function mountInspector(options: MountInspectorOptions = {}): Promise<any> {\n if (typeof document === 'undefined') return null\n\n // Lazy import the component so that module evaluation does not happen during SSR\n const { InspectoElement: _InspectoElement } = await import('./component.js')\n\n const existing = document.querySelector(TAG_NAME)\n if (existing) {\n ;(existing as typeof _InspectoElement.prototype).configure(options)\n return existing\n }\n\n const el = document.createElement(TAG_NAME)\n ;(el as typeof _InspectoElement.prototype).configure(options)\n document.body.appendChild(el)\n return el\n}\n\nexport function unmountInspector(): void {\n if (typeof document === 'undefined') return\n const existing = document.querySelector(TAG_NAME)\n if (existing) {\n existing.remove()\n }\n}\n\n// Expose to global window for Webpack/Rspack EntryPlugin injection fallback\nif (typeof window !== 'undefined') {\n window.InspectoClient = {\n mountInspector,\n unmountInspector,\n }\n}\n"],"mappings":"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","names":["_a","_a","_a","_a","_a","_a","_a","_a","_a","_b","_a","_a","_a","formatRuntimeErrorCount","_a","_a","_a","_a","_a","_a","canAttachRuntimeContext","canAttachCssContext","_b","_c","formatRuntimeErrorCount","import_types","_a","_a","_a","_a","formatRuntimeErrorCount","_a","annotateSidebarChipClass","_a","_a","_a","formatRuntimeErrorCount","_a","createAnnotateOverlay","_a","_a","formatRuntimeContextSummary","formatRuntimeContextSummary"]}