@inspecto-dev/core 0.2.0-alpha.4 → 0.3.0-alpha.1

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.
@@ -0,0 +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/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-launcher.ts","../src/intents.ts","../src/fix-bug-prompt.ts","../src/menu-actions.ts","../src/menu-send.ts","../src/menu-helpers.ts","../src/menu-header.ts","../src/menu.ts","../src/runtime-context-shared.ts","../src/runtime-context-capture.ts","../src/runtime-context-selection.ts","../src/screenshot-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"],"sourcesContent":["import type {\n AnnotationTarget,\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,\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: 16px;\n right: 16px;\n z-index: 2147483647;\n width: min(380px, calc(100vw - 32px));\n min-height: 220px;\n max-height: calc(100vh - 32px);\n display: flex;\n flex-direction: column;\n gap: 14px;\n box-sizing: border-box;\n padding: 15px 15px 16px;\n overflow: visible;\n color: var(--inspecto-text-primary);\n background:\n radial-gradient(circle at top right, rgba(93, 82, 243, 0.12), transparent 34%),\n linear-gradient(180deg, rgba(32, 32, 36, 0.96) 0%, rgba(21, 21, 24, 0.96) 100%);\n border: 1px solid rgba(255, 255, 255, 0.07);\n border-radius: 22px;\n box-shadow: 0 22px 42px rgba(0, 0, 0, 0.24);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n pointer-events: auto;\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n }\n\n .${annotateSidebarHeaderClass} {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n padding-bottom: 10px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\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: 15px;\n line-height: 1.2;\n font-weight: 700;\n color: var(--inspecto-text-primary);\n letter-spacing: 0;\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: 24px;\n padding: 0 9px;\n border-radius: var(--inspecto-radius-pill);\n background: rgba(255, 255, 255, 0.04);\n border: 1px solid rgba(255, 255, 255, 0.06);\n font-size: 11px;\n line-height: 1.2;\n font-weight: 600;\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: 8px;\n min-height: 0;\n padding: 12px;\n border: 1px solid rgba(255, 255, 255, 0.05);\n border-radius: 18px;\n background: rgba(255, 255, 255, 0.022);\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"modes\"] { gap: 8px; padding: 8px 10px; }\n .${annotateSidebarSectionClass}[data-variant=\"draft\"] { gap: 0; padding: 0; border: none; background: transparent; }\n .${annotateSidebarSectionClass}[data-variant=\"chip-preview\"] { gap: 8px; padding: 10px; background: rgba(255, 255, 255, 0.03); }\n .${annotateSidebarSectionClass}[data-variant=\"records\"] { padding: 0; overflow: hidden; background: rgba(255, 255, 255, 0.028); border-color: rgba(255, 255, 255, 0.08); }\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: 10px;\n padding: 10px 2px 0;\n background: transparent;\n border-color: transparent;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-title=\"true\"] {\n font-size: 17px;\n line-height: 1.25;\n font-weight: 700;\n color: var(--inspecto-text-primary);\n max-width: 22ch;\n }\n\n .${annotateSidebarSectionClass}[data-variant=\"empty-state\"] [data-inspecto-annotate-empty-body=\"true\"] {\n max-width: 29ch;\n color: rgba(255, 255, 255, 0.56);\n font-size: 12px;\n line-height: 1.55;\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: 104px;\n padding: 12px 13px;\n resize: vertical;\n line-height: 1.5;\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(93, 82, 243, 0.24);\n background: rgba(93, 82, 243, 0.12);\n color: #d7d3ff;\n border-radius: var(--inspecto-radius-pill);\n padding: 5px 8px 5px 10px;\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(93, 82, 243, 0.2);\n border-color: rgba(93, 82, 243, 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: 0;\n max-height: 180px;\n overflow: auto;\n padding: 0 10px 10px;\n }\n\n .${annotateSidebarTargetItemClass}, .${annotateSidebarQueueItemClass} {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 10px;\n margin: 4px 6px;\n border: none;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 14px;\n background: transparent;\n cursor: pointer;\n box-sizing: border-box;\n transition: background 0.15s ease, color 0.15s ease, margin 0.15s ease, padding 0.15s ease, border-color 0.15s ease;\n }\n\n .${annotateSidebarQueueItemClass}:hover { background: rgba(255, 255, 255, 0.04); }\n .${annotateSidebarQueueItemClass}:focus-visible { outline: none; background: rgba(255, 255, 255, 0.03); box-shadow: inset 0 0 0 1px var(--inspecto-border-focus); }\n .${annotateSidebarQueueItemClass}[data-selected=\"true\"] { background: rgba(93, 82, 243, 0.1); box-shadow: inset 3px 0 0 rgba(93, 82, 243, 0.85); border-bottom-color: transparent; }\n .${annotateSidebarQueueItemClass} > :not(.${annotateSidebarActionsClass}):first-child { font-size: 12px; line-height: 1.4; color: var(--inspecto-text-primary); word-break: break-word; }\n .${annotateSidebarQueueItemClass} > .${annotateSidebarQueueMetaClass} { order: 2; font-size: 10px; line-height: 1.35; color: var(--inspecto-text-tertiary); }\n .${annotateQueueListClass} > .${annotateSidebarQueueItemClass}:last-child { border-bottom: none; padding-bottom: 2px; }\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: 6px 0;\n border: none;\n border-radius: 0;\n border-bottom: 1px solid rgba(127, 127, 127, 0.16);\n background: transparent;\n }\n\n .${annotateTargetListClass} > .${annotateSidebarTargetItemClass}:last-child { border-bottom: none; padding-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: 8px; padding-top: 2px; }\n .${annotateSidebarFooterClass} .${annotateSidebarActionsClass} { justify-content: flex-end; align-items: stretch; }\n .${annotateSidebarActionsClass} { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }\n\n .${annotateSidebarButtonClass} {\n appearance: none;\n border: 1px solid var(--inspecto-border-subtle);\n background: rgba(255, 255, 255, 0.04);\n color: var(--inspecto-text-primary);\n border-radius: var(--inspecto-radius-pill);\n padding: 7px 10px;\n font: inherit;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 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: transparent; transform: translateY(-1px); }\n .${annotateSidebarButtonClass}:disabled { opacity: 0.5; cursor: not-allowed; }\n .${annotateSidebarClass} .${annotateSidebarButtonClass}.primary { background: linear-gradient(180deg, var(--inspecto-accent-primary) 0%, var(--inspecto-accent-primary-strong) 100%); color: #ffffff; border-color: transparent; box-shadow: var(--inspecto-shadow-accent); }\n .${annotateSidebarFooterClass} .${annotateSidebarButtonClass} { min-height: 36px; padding: 0 12px; font-size: 11px; font-weight: 600; border-radius: var(--inspecto-radius-pill); }\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); }\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 flex-direction: column;\n gap: 3px;\n padding: 2px 4px 4px;\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 }\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-button.secondary {\n padding: 0;\n background: transparent;\n color: var(--inspecto-text-secondary);\n border-color: transparent;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 4px;\n box-shadow: none;\n min-height: 0;\n }\n\n .${badgeClass}-panel-button.secondary [data-inspecto-launcher-title=\"true\"] {\n font-weight: 600;\n font-size: 11px;\n }\n\n .${badgeClass}-panel-button.secondary [data-inspecto-launcher-description=\"true\"] {\n font-size: 10px;\n max-width: none;\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 min-width: 304px;\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 .${menuItemClass}[data-role=\"screenshot-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-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-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 14px/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 screenshotIconSvg = `<svg viewBox=\"-0.51 -0.51 51.82 51.82\" width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"5.08\"> <path d=\"M19.844 7.938H7.938v11.905m0 11.113v11.906h11.905m23.019-11.906v11.906H30.956m11.906-23.018V7.938H30.956\"></path> <circle cx=\"25.4\" cy=\"25.4\" r=\"8.731\"></circle> </g> </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 { applyHeaderIconButtonStyles } from './styles.js'\nimport { bugIconSvg, screenshotIconSvg, cssIconSvg } from './icons.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', 'Open in Editor')\n composerOpenButton.title = 'Open in Editor'\n composerOpenButton.textContent = '↗'\n composerOpenButton.style.appearance = 'none'\n composerOpenButton.style.cursor = 'pointer'\n applyHeaderIconButtonStyles(composerOpenButton)\n\n const composerScreenshotButton = document.createElement('button')\n composerScreenshotButton.type = 'button'\n composerScreenshotButton.setAttribute('aria-label', 'Attach screenshot context')\n composerScreenshotButton.title = 'Attach screenshot context'\n composerScreenshotButton.style.appearance = 'none'\n composerScreenshotButton.style.cursor = 'pointer'\n composerScreenshotButton.style.display = 'none'\n applyHeaderIconButtonStyles(composerScreenshotButton)\n composerScreenshotButton.innerHTML = screenshotIconSvg\n const screenshotSvgElement = composerScreenshotButton.querySelector('svg')\n if (screenshotSvgElement) {\n screenshotSvgElement.style.width = '18px'\n screenshotSvgElement.style.height = '18px'\n }\n\n const composerCssButton = document.createElement('button')\n composerCssButton.type = 'button'\n composerCssButton.setAttribute('aria-label', 'Attach CSS context')\n composerCssButton.title = 'Attach CSS context'\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', 'Attach runtime context')\n composerRuntimeButton.title = 'Attach runtime context'\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 = 'What should change for this component?'\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 = '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 14px/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 = '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 14px/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 = 'Save note'\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 14px/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(\n composerScreenshotButton,\n composerCssButton,\n composerRuntimeButton,\n composerOpenButton,\n )\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 composerScreenshotButton,\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',\n tokens: { accentPrimary(): string; accentPrimaryStrong(): 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 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(\n preview: HTMLElement,\n target: SelectedTargetOverlayEntry,\n): 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'\n note?: string\n onActivate?: () => void\n}\n\nexport type { SelectedTargetOverlayEntry }\n\nimport { createAnnotateOverlayDom } from './annotate-overlay-dom.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 canAttachScreenshotContext?: boolean\n screenshotContextEnabled?: boolean\n canAttachCssContext?: boolean\n cssContextEnabled?: boolean\n canAttachRuntimeContext?: boolean\n runtimeContextEnabled?: boolean\n runtimeContextSummary?: string\n runtimeErrorCount?: number\n saveLabel?: string\n onToggleScreenshotContext?: () => void\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 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 composerScreenshotButton,\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') {\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 composerScreenshotButton.style.display = composerOptions.canAttachScreenshotContext\n ? 'inline-flex'\n : 'none'\n composerScreenshotButton.setAttribute(\n 'aria-pressed',\n composerOptions.screenshotContextEnabled ? 'true' : 'false',\n )\n composerScreenshotButton.dataset.visualState = composerOptions.screenshotContextEnabled\n ? 'active'\n : 'inactive'\n composerScreenshotButton.title = composerOptions.screenshotContextEnabled\n ? 'Screenshot context enabled'\n : 'Attach screenshot context'\n applyComposerRuntimeButtonState(\n composerScreenshotButton,\n tokens,\n composerOptions.screenshotContextEnabled === true,\n )\n composerScreenshotButton.onclick = () => composerOptions.onToggleScreenshotContext?.()\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 ? 'CSS context enabled'\n : 'Attach CSS context'\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 ? `Runtime context enabled • ${formatRuntimeErrorCount(composerOptions.runtimeErrorCount)} errors`\n : composerOptions.runtimeContextSummary\n ? `Runtime context enabled • ${composerOptions.runtimeContextSummary}`\n : 'Runtime context enabled'\n : composerOptions.runtimeErrorCount\n ? `Attach runtime context • ${formatRuntimeErrorCount(composerOptions.runtimeErrorCount)} errors`\n : 'Attach runtime context'\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 ?? 'Save note'\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 = 'Save note'\n addButton.onclick = null\n cancelButton.onclick = null\n composerOpenButton.onclick = null\n composerScreenshotButton.style.display = 'none'\n composerScreenshotButton.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 = 'Attach CSS context'\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 = 'Save note'\n composerOpenButton.onclick = null\n composerScreenshotButton.style.display = 'none'\n composerScreenshotButton.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'\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 findInspectable(el: Element | null): Element | null {\n while (el) {\n if (el.hasAttribute(ATTR_NAME)) 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 FeedbackRecord,\n FeedbackRecordDraft,\n ScreenshotContext,\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 canAttachScreenshotContext: boolean\n screenshotContextEnabled: boolean\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 annotateScreenshotContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotateSendState: {\n isSending: boolean\n scope: 'batch' | null\n }\n annotateSuccessScope: 'batch' | null\n annotateSuccessTimeout: ReturnType<typeof setTimeout> | 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: 'batch'): void\n getAnnotationResponseMode(): 'unified' | 'per-annotation'\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<typeof import('./runtime-context.js').createRuntimeContextEnvelope> | null,\n ): string\n getCollectedRuntimeErrorCount(): number\n canAttachCssContext(): boolean\n captureAnnotateScreenshotContext(\n annotations: AnnotationTransport[],\n scope: 'current' | 'batch',\n ): Promise<ScreenshotContext | null>\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 } 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(ctx: unknown, target: AnnotationTarget): 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\n return byLocation instanceof Element ? byLocation : 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 ScreenshotContext,\n} from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\n\nexport function buildAnnotateFullPrompt(input: {\n instruction: string\n annotations: AnnotationTransport[]\n responseMode: 'unified' | 'per-annotation'\n runtimeContext?: RuntimeContextEnvelope | null\n screenshotContext?: ScreenshotContext | 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 appendScreenshotContextSection(\n appendCssContextToPrompt(\n appendRuntimeContextSection(prompt, input.runtimeContext),\n input.cssContextPrompt,\n ),\n input.screenshotContext,\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 appendScreenshotContextSection(\n prompt: string,\n screenshotContext: ScreenshotContext | null | undefined,\n): string {\n if (!screenshotContext || (!screenshotContext.imageDataUrl && !screenshotContext.imageAssetId)) {\n return prompt\n }\n\n const lines = [\n 'Visual screenshot context attached:',\n `- capturedAt=${screenshotContext.capturedAt}`,\n `- mimeType=${screenshotContext.mimeType}`,\n ]\n\n if (screenshotContext.imageAssetId) {\n lines.push(`- imageAssetId=${screenshotContext.imageAssetId}`)\n }\n\n return `${prompt}\\n\\n${lines.join('\\n')}`\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 SnippetResponse,\n SendToAiRequest,\n SendToAiResponse,\n SendAnnotationsToAiRequest,\n SendAnnotationsToAiResponse,\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 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 try {\n const res = await fetch(`${BASE_URL}${INSPECTO_API_PATHS.IDE_OPEN}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(req),\n })\n return res.ok\n } catch {\n return false\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 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}\n\nexport async function sendToAi(req: SendToAiRequest): Promise<SendToAiResponse> {\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}\n\nexport async function sendAnnotationsToAi(\n req: SendAnnotationsToAiRequest,\n): Promise<SendAnnotationsToAiResponse> {\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}\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 { openFile, sendAnnotationsToAi } from './http.js'\nimport type { AiErrorCode, AnnotationTransport, FeedbackRecord } 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'\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 if (hadSuccess) {\n state.updateAnnotateSidebar()\n }\n}\n\nexport function showAnnotateSuccess(ctx: unknown, scope: 'batch'): void {\n const state = asAnnotateContext(ctx)\n clearAnnotateSuccess(state)\n state.annotateSuccessScope = scope\n state.annotateSuccessTimeout = setTimeout(() => {\n state.annotateSuccessScope = null\n state.annotateSuccessTimeout = null\n state.updateAnnotateSidebar()\n }, 1500)\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 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: 'batch',\n instruction: string,\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 screenshotContext = state.annotateScreenshotContextEnabled\n ? await state.captureAnnotateScreenshotContext(annotations, scope)\n : null\n const cssContextPrompt = state.getAnnotateCssContextPrompt(annotations)\n\n const result = await sendAnnotationsToAi({\n instruction,\n annotations,\n responseMode: state.getAnnotationResponseMode(),\n ...(runtimeContext ? { runtimeContext } : {}),\n ...(screenshotContext ? { screenshotContext } : {}),\n ...(cssContextPrompt ? { cssContextPrompt } : {}),\n })\n\n if (!result.success) {\n state.annotateErrorMessage = toAnnotateErrorMessage(state, result.errorCode, result.error)\n state.updateAnnotateSidebar()\n return\n }\n\n onSuccess()\n state.annotateErrorMessage = ''\n state.showAnnotateSuccess(scope)\n state.annotateElements.clear()\n state.renderAnnotateSelectionOverlay()\n state.updateAnnotateSidebar()\n } catch {\n state.annotateErrorMessage = 'Request failed'\n state.updateAnnotateSidebar()\n } finally {\n state.annotateSendState = { isSending: false, scope: null }\n state.updateAnnotateSidebar()\n }\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 return {\n mode: state.annotateCapturePaused ? 'capture-paused' : 'capture-enabled',\n canAttachScreenshotContext: false,\n screenshotContextEnabled: state.annotateScreenshotContextEnabled,\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 responseMode: state.getAnnotationResponseMode(),\n runtimeContext: allRuntimeContext,\n cssContextPrompt: allCssContextPrompt,\n }),\n isSending: state.annotateSendState.isSending,\n sendingScope: state.annotateSendState.scope,\n successScope: state.annotateSuccessScope,\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 onSend: () => {\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(state, transports, 'batch', composeAnnotateInstruction(state), () => {\n state.annotateDrafts.clear()\n state.annotateEditingRecord = null\n state.annotateSession = createEmptySession()\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 => {\n if (state.annotateEditingRecord?.id === record.id) return null\n const element = findElementForAnnotationTarget(state, record.target)\n if (!element) return null\n return {\n id: record.id,\n element,\n order: record.displayOrder,\n state: 'saved' as const,\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 ? state.annotateElements.get(state.annotateSession.current.id) : 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 canAttachScreenshotContext: false,\n screenshotContextEnabled: false,\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 ? 'Update note' : 'Save note',\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 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","import type { HotKeys } from '@inspecto-dev/types'\nimport { badgeClass } from './styles.js'\nimport { getDeepActiveElement, hotKeysHeld } from './component-utils.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 =\n 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 btn.style.display = 'flex'\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 = 'Inspecto'\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 panelHeader.innerHTML =\n '<div data-inspecto-launcher-panel-title=\"true\">Choose a mode</div><div data-inspecto-launcher-panel-subtitle=\"true\">Your next page click will follow this mode.</div>'\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 =\n '<span data-inspecto-launcher-title=\"true\">Inspect</span><span data-inspecto-launcher-description=\"true\">Click one component to inspect or ask AI</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 =\n '<span data-inspecto-launcher-title=\"true\">Annotate</span><span data-inspecto-launcher-description=\"true\">Capture notes across components, then Ask AI once</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-button secondary`\n pauseBtn.dataset.inspectoLauncherAction = 'pause'\n pauseBtn.innerHTML =\n '<span data-inspecto-launcher-title=\"true\">Pause selection</span><span data-inspecto-launcher-description=\"true\">Use the page normally for a moment</span>'\n pauseBtn.addEventListener('click', event => {\n event.stopPropagation()\n setPaused(state, !state.disabled)\n })\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 utilityGroup.append(pauseBtn, hotkeyHint)\n panel.append(panelHeader, modeGroup, utilityGroup)\n titleBlock.append(titleSpan, stateSpan)\n content.append(indicator, titleBlock)\n btn.append(content, eyes, panel)\n\n btn.addEventListener('click', event => {\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 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 hotkeyHint = state.badge.querySelector(\n `[data-inspecto-launcher-hint=\"hotkey\"]`,\n ) as HTMLDivElement | null\n\n if (!indicator || !titleSpan || !stateSpan || !panel || !inspectBtn || !annotateBtn || !pauseBtn || !hotkeyHint) {\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 = ''\n\n if (state.disabled) {\n stateLabel = 'Selection 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 = 'Annotate mode'\n indicator.dataset.state = 'annotate'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else if (state.active) {\n stateLabel = 'Inspect mode'\n indicator.dataset.state = 'inspect'\n state.badge.classList.remove('disabled')\n state.badge.classList.add('active')\n } else {\n stateLabel = '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 = 'Inspecto'\n stateSpan.textContent = stateLabel\n\n panel.style.display = state.launcherPanelOpen ? 'flex' : 'none'\n pauseBtn.innerHTML = state.disabled\n ? '<span data-inspecto-launcher-title=\"true\">Resume selection</span><span data-inspecto-launcher-description=\"true\">Start capturing page clicks again</span>'\n : '<span data-inspecto-launcher-title=\"true\">Pause selection</span><span data-inspecto-launcher-description=\"true\">Use the page normally for a moment</span>'\n hotkeyHint.textContent =\n getEffectiveHotKeys(state) === false\n ? 'Hotkey disabled. Open the launcher to choose Inspect or Annotate.'\n : `Hotkey: ${getHotKeyLabel(state)} for quick jump`\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 ScreenshotContext,\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 'You are fixing a bug for the currently inspected UI target.',\n buildSourceContextSection(input.location, input.snippet),\n buildEvidenceSection(evidence),\n 'Guardrails:',\n '- Prioritize evidence-backed conclusions.',\n '- Separate confirmed evidence from hypotheses.',\n '- Avoid strong claims when the runtime evidence is weak or unrelated.',\n '- Ask follow-up questions if the evidence is insufficient for a safe fix.',\n 'Response contract:',\n '1. Most likely root cause',\n '2. Confirmed evidence',\n '3. Hypotheses',\n '4. Minimal fix',\n '5. Follow-up questions (only if needed)',\n templateGuidance\n ? `Configured intent guidance (reference only):\\n${indentBlock(templateGuidance)}`\n : '',\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: fullPromptTemplate,\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 buildEvidenceSection(records: RuntimeEvidenceRecord[]): string {\n if (records.length === 0) {\n return [\n 'High-confidence runtime evidence:',\n '- None selected. Do not treat unrelated logs as proof.',\n ].join('\\n')\n }\n\n return ['High-confidence 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\nexport function appendScreenshotContextToPrompt(\n prompt: string,\n screenshotContext: ScreenshotContext | null | undefined,\n): string {\n if (!screenshotContext || (!screenshotContext.imageDataUrl && !screenshotContext.imageAssetId)) {\n return prompt\n }\n\n const lines = [\n 'Visual screenshot context attached:',\n `- capturedAt=${screenshotContext.capturedAt}`,\n `- mimeType=${screenshotContext.mimeType}`,\n ...(screenshotContext.imageAssetId ? [`- imageAssetId=${screenshotContext.imageAssetId}`] : []),\n ]\n\n return `${prompt}\\n\\n${lines.join('\\n')}`\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 IntentConfig,\n RuntimeContextEnvelope,\n ScreenshotContext,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport { appendScreenshotContextToPrompt, buildPromptForIntent } from './fix-bug-prompt.js'\nimport { fetchSnippet } from './http.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: (intent: Pick<IntentConfig, 'id' | 'aiIntent'>) => RuntimeContextEnvelope | null\n resolveScreenshotContext: () => Promise<ScreenshotContext | null>\n resolveCssContextPrompt: () => string | null\n onSend: (payload: {\n label: string\n button: HTMLButtonElement\n prompt: string\n snippetText: string\n runtimeContext: RuntimeContextEnvelope | null\n screenshotContext: ScreenshotContext | 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 = '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 requestScreenshotContext = await input.resolveScreenshotContext()\n const requestCssContextPrompt = input.resolveCssContextPrompt()\n const prompt = appendCssContextToPrompt(\n appendScreenshotContextToPrompt(\n buildPromptForIntent(intent, input.location, snippetResult, requestRuntimeContext),\n requestScreenshotContext,\n ),\n requestCssContextPrompt,\n )\n\n await input.onSend({\n label,\n button: btn,\n prompt,\n snippetText: snippetResult?.snippet || '',\n runtimeContext: requestRuntimeContext,\n screenshotContext: requestScreenshotContext,\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 {\n RuntimeContextEnvelope,\n ScreenshotContext,\n SourceLocation,\n} from '@inspecto-dev/types'\nimport { appendCssContextToPrompt } from './css-context.js'\nimport {\n appendRuntimeContextToPrompt,\n appendScreenshotContextToPrompt,\n} from './fix-bug-prompt.js'\nimport { buildPrompt, CUSTOM_PROMPT_TEMPLATE } from './intents.js'\nimport { fetchSnippet, openFile, sendToAi } from './http.js'\n\nexport async function openAndSendInspectPrompt(input: {\n location: SourceLocation\n snippetText: string\n promptText: string\n runtimeContext?: RuntimeContextEnvelope | null\n screenshotContext?: ScreenshotContext | null\n onSuccess: () => void\n onRestore: () => void\n onError: (message: string, errorCode?: string) => void\n}): Promise<void> {\n const opened = await openFile(input.location)\n if (!opened) {\n input.onRestore()\n input.onError('Unable to open file in the IDE.', '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 ...(input.screenshotContext ? { screenshotContext: input.screenshotContext } : {}),\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 includeSnippet: boolean\n maxSnippetLines: number\n runtimeContext?: RuntimeContextEnvelope | null\n screenshotContext?: ScreenshotContext | 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 appendScreenshotContextToPrompt(\n appendRuntimeContextToPrompt(\n buildPrompt(CUSTOM_PROMPT_TEMPLATE(input.ask.trim()), input.location, snippetResult),\n input.runtimeContext?.records ?? [],\n ),\n input.screenshotContext ?? null,\n ),\n input.cssContextPrompt ?? null,\n )\n\n return {\n prompt,\n snippetText: snippetResult?.snippet || '',\n }\n}\n","import type {\n InspectorOptions,\n IntentConfig,\n RuntimeContextEnvelope,\n RuntimeEvidenceRecord,\n SourceLocation,\n} from '@inspecto-dev/types'\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 ?? 'Add a custom ask or extra instruction...'\n input.setAttribute('aria-label', 'Custom ask')\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 =\n errorCode === 'FILE_NOT_FOUND'\n ? 'Source file not found. Is the server running?'\n : `Error: ${message}`\n menu.appendChild(errEl)\n}\n\nexport function isFixIntent(intent: Pick<IntentConfig, 'id' | 'aiIntent'>): boolean {\n return intent.aiIntent === 'fix'\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 = 'Show preview'\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 ? 'Show preview' : 'Hide preview'\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(\n `${runtimeErrorCount} ${runtimeErrorCount === 1 ? 'runtime error' : 'runtime errors'}`,\n )\n }\n\n if (failedRequestCount > 0) {\n parts.push(\n `${failedRequestCount} ${failedRequestCount === 1 ? 'failed request' : 'failed requests'}`,\n )\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 { SourceLocation } from '@inspecto-dev/types'\nimport { bugIconSvg, cssIconSvg, screenshotIconSvg } from './icons.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 canAttachScreenshotContext: 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\n const title = document.createElement('strong')\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', 'Open in Editor')\n openButton.title = 'Open in Editor'\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', 'Attach runtime context')\n runtimeToggleButton.title = 'Attach runtime context'\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 screenshotToggleButton = document.createElement('button')\n screenshotToggleButton.type = 'button'\n screenshotToggleButton.className = runtimeToggleClass\n screenshotToggleButton.dataset.role = 'screenshot-context-toggle'\n screenshotToggleButton.setAttribute('aria-label', 'Attach screenshot context')\n screenshotToggleButton.title = 'Attach screenshot context'\n screenshotToggleButton.hidden = !input.canAttachScreenshotContext\n screenshotToggleButton.setAttribute('aria-pressed', 'false')\n screenshotToggleButton.dataset.visualState = 'inactive'\n applyHeaderIconButtonStyles(screenshotToggleButton)\n const screenshotToggleIcon = document.createElement('span')\n screenshotToggleIcon.className = runtimeToggleIconClass\n screenshotToggleIcon.innerHTML = screenshotIconSvg\n screenshotToggleButton.append(screenshotToggleIcon)\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', 'Attach CSS context')\n cssToggleButton.title = 'Attach CSS context'\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 screenshotToggleButton,\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","import { createIntentActionButtons } from './menu-actions.js'\nimport { buildCustomInspectPrompt, openAndSendInspectPrompt } from './menu-send.js'\nimport type {\n Provider,\n InspectorOptions,\n ScreenshotContext,\n SourceLocation,\n IntentConfig,\n} from '@inspecto-dev/types'\nimport { openFile, fetchIdeInfo } from './http.js'\nimport {\n applyIconToggleButtonState,\n createMenuHeaderDom,\n} from './menu-header.js'\nimport {\n createAskInput,\n createMenuSection,\n createRuntimeContextUi,\n formatRuntimeContextSummary,\n formatRuntimeErrorCount,\n formatSourceAnchor,\n isFixIntent,\n showError,\n} from './menu-helpers.js'\nimport {\n menuClass,\n menuMetaClass,\n loadingSpinnerClass,\n menuItemClass,\n runtimeToggleBadgeClass,\n runtimeToggleClass,\n} from './styles.js'\n\nconst MENU_WIDTH = 280\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}\n\ntype MenuRuntimeContextDeps = {\n getRuntimeContext?: (location: SourceLocation) => RuntimeContextEnvelope | null\n captureScreenshotContext?: () => Promise<ScreenshotContext | null>\n captureCssContextPrompt?: () => string | null\n canAttachScreenshotContext?: boolean\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 canAttachScreenshotContext = false\n let runtimeContextPreference: boolean | null = null\n let runtimeContextDefaultMode: 'off' | 'all-on' | 'mixed' = 'off'\n let screenshotContextEnabled = false\n let cssContextEnabled = false\n const canAttachCssContext = typeof deps.captureCssContextPrompt === 'function'\n\n const menu = document.createElement('div')\n menu.className = menuClass\n\n const {\n header,\n headerActions,\n openButton,\n runtimeToggleButton,\n runtimeToggleBadge,\n screenshotToggleButton,\n cssToggleButton,\n } = createMenuHeaderDom({\n location,\n targetLabel: deps.targetLabel,\n canAttachRuntimeContext,\n canAttachScreenshotContext,\n canAttachCssContext,\n })\n\n const syncScreenshotToggleButton = () => {\n screenshotToggleButton.hidden = !canAttachScreenshotContext\n\n if (!canAttachScreenshotContext) {\n screenshotToggleButton.remove()\n return\n }\n\n if (!headerActions.contains(screenshotToggleButton)) {\n const referenceNode = headerActions.contains(runtimeToggleButton)\n ? runtimeToggleButton\n : headerActions.contains(openButton)\n ? openButton\n : null\n if (referenceNode) {\n headerActions.insertBefore(screenshotToggleButton, referenceNode)\n } else {\n headerActions.appendChild(screenshotToggleButton)\n }\n }\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 'CSS context enabled',\n 'Attach CSS context',\n )\n }\n\n syncScreenshotToggleButton()\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 const viewportWidth = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)\n const safeWidth = viewportWidth > 0 ? viewportWidth : MENU_WIDTH\n menu.style.left = `${Math.min(clickX, Math.max(safeWidth - MENU_WIDTH, 0))}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 viewportHeight = Math.max(\n document.documentElement.clientHeight || 0,\n window.innerHeight || 0,\n )\n const safeHeight = viewportHeight > 0 ? viewportHeight : rect.height + 16\n menu.style.top = `${Math.min(clickY + 8, Math.max(safeHeight - rect.height - 8, 0))}px`\n }\n updatePosition()\n menu.style.visibility = 'visible'\n\n // Focus input automatically\n setTimeout(() => input.focus(), 0)\n\n const onDocClick = (e: MouseEvent): void => {\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 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 = (\n visualState: 'inactive' | 'mixed' | 'active',\n ): 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 ? formatRuntimeContextSummary(runtimeContextForUi) : ''\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 ? `Runtime context enabled • ${runtimeSummary}`\n : 'Runtime context enabled'\n : ariaPressed === 'mixed'\n ? runtimeSummary\n ? `Runtime context defaults to fix actions only • ${runtimeSummary}`\n : 'Runtime context defaults to fix actions only until you choose otherwise'\n : runtimeSummary\n ? `Attach runtime context • ${runtimeSummary}`\n : 'Attach runtime context'\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 screenshotToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n screenshotContextEnabled = !screenshotContextEnabled\n screenshotToggleButton.setAttribute('aria-pressed', screenshotContextEnabled ? 'true' : 'false')\n screenshotToggleButton.dataset.visualState = screenshotContextEnabled ? 'active' : 'inactive'\n })\n\n cssToggleButton.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n cssContextEnabled = !cssContextEnabled\n applyCssToggleButtonState()\n })\n\n const resolveScreenshotContext = async (): Promise<ScreenshotContext | null> => {\n if (!screenshotContextEnabled) return null\n\n try {\n return (await deps.captureScreenshotContext?.()) ?? null\n } catch {\n return null\n }\n }\n\n const resolveCssContextPrompt = (): string | null => {\n if (!cssContextEnabled) 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 requestScreenshotContext = await resolveScreenshotContext()\n const requestCssContextPrompt = resolveCssContextPrompt()\n const built = await buildCustomInspectPrompt({\n location,\n ask: input.value.trim(),\n includeSnippet,\n maxSnippetLines,\n runtimeContext: requestRuntimeContext,\n screenshotContext: requestScreenshotContext,\n cssContextPrompt: requestCssContextPrompt,\n })\n await openAndSendInspectPrompt({\n location,\n promptText: built.prompt,\n snippetText: built.snippetText,\n runtimeContext: requestRuntimeContext,\n screenshotContext: requestScreenshotContext,\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 (\n ideInfo?.runtimeContext?.enabled === true &&\n typeof deps.getRuntimeContext === 'function'\n ) {\n canAttachRuntimeContext = true\n syncRuntimeToggleButton()\n }\n\n const intents = ideInfo?.prompts || []\n if (!options.askPlaceholder) {\n input.placeholder =\n intents.length > 0\n ? 'Add a custom ask or extra instruction...'\n : 'Ask anything about this component...'\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 resolveScreenshotContext,\n resolveCssContextPrompt,\n onSend: async payload => {\n await openAndSendInspectPrompt({\n location,\n promptText: payload.prompt,\n snippetText: payload.snippetText,\n runtimeContext: payload.runtimeContext,\n screenshotContext: payload.screenshotContext,\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 opened = await openFile(location)\n if (opened) {\n cleanup()\n return\n }\n openButton.disabled = false\n showError(menu, 'Unable to open file in the IDE.', '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 {\n RuntimeEvidenceKind,\n RuntimeEvidenceLevel,\n RuntimeEvidenceRecord,\n SourceLocation,\n} 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(input: Omit<XhrState, 'attached' | 'recorded' | 'aborted'> = {}): 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","import html2canvas from 'html2canvas'\nimport type { ScreenshotContext } from '@inspecto-dev/types'\n\nconst SCREENSHOT_PADDING = 12\n\nexport async function captureElementScreenshot(\n element: Element,\n): Promise<ScreenshotContext | null> {\n const rect = element.getBoundingClientRect()\n if (rect.width <= 0 || rect.height <= 0) return null\n\n const ownerDocument = element.ownerDocument\n const view = ownerDocument.defaultView\n if (!view) return null\n\n try {\n const left = Math.max(0, rect.left + view.scrollX - SCREENSHOT_PADDING)\n const top = Math.max(0, rect.top + view.scrollY - SCREENSHOT_PADDING)\n const width = Math.ceil(rect.width + SCREENSHOT_PADDING * 2)\n const height = Math.ceil(rect.height + SCREENSHOT_PADDING * 2)\n const root = ownerDocument.documentElement\n\n const canvas = await html2canvas(root, {\n backgroundColor: null,\n logging: false,\n useCORS: true,\n x: left,\n y: top,\n width,\n height,\n windowWidth: root.scrollWidth,\n windowHeight: root.scrollHeight,\n })\n\n return {\n enabled: true,\n capturedAt: new Date().toISOString(),\n mimeType: 'image/png',\n imageDataUrl: canvas.toDataURL('image/png'),\n }\n } catch {\n return null\n }\n}\n","import { showIntentMenu } from './menu.js'\nimport { openFile } from './http.js'\nimport { ATTR_NAME, findInspectable, parseAttrValue } from './component-utils.js'\nimport { createRuntimeContextEnvelope, selectRuntimeEvidence } from './runtime-context.js'\nimport { captureElementScreenshot } from './screenshot-context.js'\nimport type { SourceLocation } from '@inspecto-dev/types'\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 cleanupMenu: (() => void) | null\n options: {\n screenshotContext?: { enabled?: boolean }\n }\n runtimeContextCollector: {\n snapshot(): { records: unknown[] }\n }\n updateLauncherEye(): 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(loc: SourceLocation, clientX: number, clientY: number, targetElement: Element): 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 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 attrValue = target.getAttribute(ATTR_NAME)!\n const loc = parseAttrValue(attrValue)\n const label = loc ? `${loc.file.split('/').pop() ?? ''}:${loc.line}` : attrValue\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.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 attrValue = target.getAttribute(ATTR_NAME)!\n const loc = parseAttrValue(attrValue)\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.cleanupMenu?.()\n state.cleanupMenu = null\n void openFile(loc)\n return\n }\n\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 state.cleanupMenu?.()\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 (!(state as { annotateSession?: { current?: { target?: unknown } } }).annotateSession?.current?.target)\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(ctx: unknown, loc: SourceLocation, clientX: number, clientY: number, targetElement: Element): void {\n const state = asInteractionContext(ctx)\n state.cleanupMenu?.()\n\n state.cleanupMenu = showIntentMenu(\n state.shadowRootEl,\n loc,\n clientX,\n clientY,\n state.options,\n () => {\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 captureScreenshotContext: () => captureElementScreenshot(targetElement),\n captureCssContextPrompt: () => state.captureCssContextPromptForElement(targetElement, loc),\n canAttachScreenshotContext: state.options.screenshotContext?.enabled === true,\n },\n )\n}\n","import type { FeedbackRecord, FeedbackRecordSession } from '@inspecto-dev/types'\n\nexport type PromptChipRecord = {\n id: string\n label: string\n locationLabel: string\n selector?: string | undefined\n note: string\n state: 'draft' | 'saved'\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: 'batch' | null\n successScope: 'batch' | null\n}): string {\n if (input.isSending && input.sendingScope === 'batch') {\n return 'Sending notes to AI.'\n }\n if (!input.isSending && input.successScope === 'batch') {\n return 'Notes sent to AI.'\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 'Unknown source'\n return `${target.location.file}:${target.location.line}:${target.location.column}`\n}\n\nexport function getPromptChipRecords(session: FeedbackRecordSession): PromptChipRecord[] {\n const chips: PromptChipRecord[] = session.records.map(record => ({\n id: record.id,\n label: record.target.label || 'Unknown target',\n locationLabel: toLocationLabel(record),\n ...(record.target.selector ? { selector: record.target.selector } : {}),\n note: record.note,\n state: 'saved',\n }))\n\n if (session.current.target) {\n chips.push({\n id: session.current.id,\n label: session.current.target.label || 'Unknown target',\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(\n segments: InstructionSegment[],\n): 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' }> => segment.type === 'chip',\n )\n .map(segment => segment.id)\n .join('|')\n}\n\nexport function getChipSignature(session: FeedbackRecordSession): string {\n return getPromptChipRecords(session)\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 {\n bugIconSvg,\n cssIconSvg,\n pureMarkIconSvg,\n screenshotIconSvg,\n closeIconSvg,\n} from './icons.js'\nimport { createSidebarButton } from './annotate-sidebar-helpers.js'\n\nexport interface AnnotateSidebarDom {\n element: HTMLElement\n headerStatus: HTMLDivElement\n quickCaptureButton: HTMLButtonElement\n screenshotContextButton: 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 footer: HTMLElement\n statusMessage: HTMLDivElement\n errorMessage: HTMLDivElement\n previewCodeButton: HTMLButtonElement\n previewFloat: HTMLDivElement\n previewFloatContent: HTMLPreElement\n sendButton: 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 = 'Annotate mode'\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(\n pureMarkIconSvg,\n annotateSidebarButtonClass,\n true,\n )\n quickCaptureButton.dataset.role = 'quick-capture'\n quickCaptureButton.classList.add(runtimeToggleClass)\n quickCaptureButton.setAttribute('aria-label', 'Toggle quick capture')\n quickCaptureButton.title = 'Toggle quick capture'\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 screenshotContextButton = createSidebarButton(\n screenshotIconSvg,\n annotateSidebarButtonClass,\n true,\n )\n const screenshotSvgElement = screenshotContextButton.querySelector('svg')\n if (screenshotSvgElement) {\n screenshotSvgElement.style.width = '18px'\n screenshotSvgElement.style.height = '18px'\n }\n screenshotContextButton.classList.add(runtimeToggleClass)\n screenshotContextButton.setAttribute('aria-label', 'Attach screenshot context')\n screenshotContextButton.title = 'Attach screenshot context'\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', 'Attach CSS context')\n cssContextButton.title = 'Attach CSS context'\n\n const runtimeContextButton = createSidebarButton('⚡', annotateSidebarButtonClass)\n runtimeContextButton.classList.add(runtimeToggleClass)\n runtimeContextButton.setAttribute('aria-label', 'Attach runtime context')\n runtimeContextButton.title = 'Attach runtime context'\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', 'Exit annotate mode')\n exitButton.title = 'Exit annotate mode'\n\n headerActions.append(\n quickCaptureButton,\n screenshotContextButton,\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 = 'Start by clicking a component'\n\n const emptyStateBody = document.createElement('div')\n emptyStateBody.className = annotateSidebarEmptyClass\n emptyStateBody.setAttribute('data-inspecto-annotate-empty-body', 'true')\n emptyStateBody.textContent =\n 'Each click opens one note. Save a few notes first, then add an overall goal and Ask AI once.'\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 = 'Overall goal for this batch (optional)...'\n instructionInput.setAttribute('aria-label', 'Overall goal')\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 = 'Preview message'\n const allPromptLabel = document.createElement('div')\n allPromptLabel.className = annotateSidebarQueueMetaClass\n allPromptLabel.textContent = 'Batch payload'\n const allPromptText = document.createElement('pre')\n allPromptText.className = annotateSidebarTextClass\n allPromptText.dataset.variant = 'full-prompt'\n fullPromptDetails.append(fullPromptSummary, allPromptLabel, allPromptText)\n draftSection.append(promptContainer, 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.alignItems = 'center'\n footerLayout.style.justifyContent = 'space-between'\n footerLayout.style.width = '100%'\n\n const footerLeftActions = document.createElement('div')\n footerLeftActions.className = annotateSidebarActionsClass\n footerLeftActions.style.flex = '0 0 auto'\n\n const previewCodeButton = createSidebarButton('</>', annotateSidebarButtonClass)\n previewCodeButton.dataset.inspectoAnnotateRawPromptButton = 'true'\n previewCodeButton.dataset.role = 'raw-preview'\n previewCodeButton.style.fontFamily = 'monospace'\n previewCodeButton.style.fontSize = '12px'\n previewCodeButton.style.fontWeight = '600'\n previewCodeButton.title = 'View raw prompt payload'\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 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 if (shouldOpenBelow) {\n previewFloat.style.top = 'calc(100% + 8px)'\n previewFloat.style.bottom = 'auto'\n previewFloat.style.maxHeight = `${Math.min(maxPreviewHeight, 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 syncRawPromptButtonState(isVisible: boolean): void {\n previewCodeButton.dataset.selected = isVisible ? 'true' : 'false'\n }\n\n function setRawPromptPreviewVisible(isVisible: boolean): void {\n previewFloat.style.display = isVisible ? 'block' : 'none'\n syncRawPromptButtonState(isVisible)\n if (isVisible) updateRawPromptPreviewPosition()\n }\n\n previewCodeButton.addEventListener('click', event => {\n event.stopPropagation()\n setRawPromptPreviewVisible(previewFloat.style.display !== 'block')\n })\n\n element.addEventListener('click', event => {\n const clickTarget = (event.target as Node | null | undefined) ?? null\n if (!previewFloat.contains(clickTarget) && clickTarget !== previewCodeButton) {\n setRawPromptPreviewVisible(false)\n }\n })\n\n footerLeftActions.appendChild(previewCodeButton)\n\n const footerActions = document.createElement('div')\n footerActions.className = annotateSidebarActionsClass\n const sendButton = createSidebarButton('Ask AI', annotateSidebarButtonClass)\n sendButton.dataset.role = 'send'\n sendButton.classList.add('primary')\n\n footerActions.append(sendButton)\n footerLayout.append(footerLeftActions, footerActions)\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 screenshotContextButton,\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 statusMessage,\n errorMessage,\n previewCodeButton,\n previewFloat,\n previewFloatContent,\n sendButton,\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'\n\ntype PromptChipElement = HTMLSpanElement & {\n dataset: DOMStringMap & {\n annotateChipId?: string\n state?: 'draft' | 'saved'\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 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 contentEl.style.wordBreak = 'break-word'\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.fontFamily = 'monospace'\n elementValue.style.fontSize = '13px'\n elementValue.style.color = '#9cdcfe'\n elementValue.textContent = chip.label\n activeTooltip.appendChild(createSection('ELEMENT', elementValue))\n activeTooltip.appendChild(createSection('NOTE', chip.note.trim() || 'No note provided'))\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.display = 'inline-flex'\n chipElement.style.alignItems = 'center'\n chipElement.style.gap = '5px'\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.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 = 'No records included yet.'\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 || 'Unknown target'\n\n const meta = document.createElement('div')\n meta.className = annotateSidebarQueueMetaClass\n meta.textContent = record.note.trim().length > 0 ? record.note : 'Optional note left empty.'\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 { FeedbackRecord, FeedbackRecordSession } 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 { pauseIconSvg, playIconSvg } from './icons.js'\n\ntype SidebarMode = 'capture-enabled' | 'capture-paused'\ntype SendScope = 'batch' | null\n\nexport interface AnnotateSidebarOptions {\n mode: SidebarMode\n canAttachScreenshotContext?: boolean\n screenshotContextEnabled?: boolean\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 quickCaptureEnabled?: boolean\n errorMessage?: string\n onPauseCapture: () => void\n onResumeCapture: () => void\n onToggleQuickCapture?: () => void\n onToggleScreenshotContext?: () => void\n onToggleCssContext?: () => void\n onToggleRuntimeContext?: () => void\n onUpdateInstruction: (instruction: string) => void\n onRemovePromptChip: (recordId: string) => void\n onEditRecord?: (id: string) => void\n onSend: () => 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 screenshotContextButton,\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 statusMessage,\n errorMessage,\n previewCodeButton,\n previewFloat,\n previewFloatContent,\n sendButton,\n updateRawPromptPreviewPosition,\n setRawPromptPreviewVisible,\n } = dom\n\n let currentOptions = options\n let instructionSegments: InstructionSegment[] = []\n let isSyncingInstructionDom = false\n let renderedChipSignature = ''\n\n function getPromptChipRecordById(id: string): PromptChipRecord | null {\n return getPromptChipRecords(currentOptions.session).find(chip => chip.id === id) ?? null\n }\n\n const renderers = createAnnotateSidebarRenderers({\n shadowRoot,\n sidebarElement: element,\n getOptions: () => currentOptions,\n getPromptChipRecordById,\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(session)\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 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(session)\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 !== null ||\n Boolean(next.errorMessage)\n const canSend = next.isSending ? false : next.includedRecords.length > 0 || hasCurrentDraft\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 ? 'Quick capture on' : 'Toggle quick capture'\n\n screenshotContextButton.style.display =\n hasBatchContent && next.canAttachScreenshotContext ? '' : 'none'\n screenshotContextButton.setAttribute(\n 'aria-pressed',\n next.screenshotContextEnabled ? 'true' : 'false',\n )\n screenshotContextButton.dataset.visualState = next.screenshotContextEnabled\n ? 'active'\n : 'inactive'\n screenshotContextButton.title = next.screenshotContextEnabled\n ? 'Screenshot context enabled'\n : 'Attach screenshot context'\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 ? 'CSS context enabled' : 'Attach CSS context'\n\n runtimeContextButton.style.display = 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 ? `Runtime context enabled • ${formatRuntimeErrorCount(next.runtimeErrorCount)} errors`\n : next.runtimeContextSummary\n ? `Runtime context enabled • ${next.runtimeContextSummary}`\n : 'Runtime context enabled'\n : next.runtimeErrorCount\n ? `Attach runtime context • ${formatRuntimeErrorCount(next.runtimeErrorCount)} errors`\n : 'Attach runtime context'\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' ? 'Pause selection' : 'Resume selection',\n )\n modeButton.title = next.mode === 'capture-enabled' ? 'Pause selection' : 'Resume selection'\n modeButton.dataset.selected = String(next.mode === 'capture-enabled')\n\n headerStatus.textContent =\n next.mode === 'capture-enabled'\n ? next.quickCaptureEnabled\n ? 'Capturing clicks • Quick capture on'\n : 'Capturing clicks'\n : next.quickCaptureEnabled\n ? 'Selection paused • Quick capture on'\n : 'Selection paused'\n\n renderPromptChips(next.session)\n allPromptText.textContent = next.fullPrompt\n previewFloatContent.textContent = next.fullPrompt\n previewCodeButton.style.display = canSend ? '' : '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 sendButton.disabled = !canSend\n sendButton.textContent =\n next.isSending && next.sendingScope === 'batch'\n ? 'Sending...'\n : !next.isSending && next.successScope === 'batch'\n ? 'Sent'\n : 'Ask AI'\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 screenshotContextButton.addEventListener('click', () =>\n currentOptions.onToggleScreenshotContext?.(),\n )\n cssContextButton.addEventListener('click', () => currentOptions.onToggleCssContext?.())\n runtimeContextButton.addEventListener('click', () => currentOptions.onToggleRuntimeContext?.())\n sendButton.addEventListener('click', () => currentOptions.onSend())\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 annotateScreenshotContextEnabled: 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.annotateScreenshotContextEnabled = 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(state.shadowRootEl, state.getAnnotateSidebarOptions())\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(ctx: unknown, 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}): 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(_ctx: unknown, 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}): 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\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\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 = 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","import { createOverlay } from './overlay.js'\nimport { fetchIdeInfo } from './http.js'\nimport { inspectorStyles } from './styles.js'\nimport { setBaseUrl } from './http.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 annotateScreenshotContextEnabled: boolean\n annotateCssContextEnabled: boolean\n annotationResponseMode: 'unified' | 'per-annotation'\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.annotateScreenshotContextEnabled = false\n state.annotateCssContextEnabled = false\n}\n\nexport function connect(ctx: unknown, createAnnotateOverlay: (root: ShadowRoot) => LifecycleContext['annotateOverlay']): void {\n const state = asLifecycleContext(ctx)\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.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 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?.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 if (info?.screenshotContext !== undefined) {\n state.options.screenshotContext = {\n ...state.options.screenshotContext,\n ...info.screenshotContext,\n }\n }\n if (info?.annotationResponseMode !== undefined) {\n state.options.annotationResponseMode = info.annotationResponseMode\n state.annotationResponseMode = info.annotationResponseMode\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 { attachRuntimeContextCapture, createRuntimeContextEnvelope, selectRuntimeEvidence } from './runtime-context.js'\nimport { captureElementScreenshot } from './screenshot-context.js'\nimport { buildCssContextPrompt, captureCssContextEntry } from './css-context.js'\nimport type { AnnotationTarget, AnnotationTransport, ScreenshotContext, SourceLocation } from '@inspecto-dev/types'\n\ntype EvidenceContext = {\n options: {\n runtimeContext?: {\n enabled?: boolean\n maxRuntimeErrors?: number\n maxFailedRequests?: number\n }\n screenshotContext?: { enabled?: boolean }\n }\n mode: 'inspect' | 'annotate'\n disabled: boolean\n cleanupRuntimeContextCapture: (() => void) | null\n runtimeContextCollector: {\n snapshot(): { records: unknown[] }\n clear(): void\n }\n annotateRuntimeContextEnabled: boolean\n annotateScreenshotContextEnabled: 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 canAttachScreenshotContext(): 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(state.runtimeContextCollector)\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 canAttachScreenshotContext(ctx: unknown): boolean {\n return asEvidenceContext(ctx).options.screenshotContext?.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(\n ctx: unknown,\n target: AnnotationTarget,\n): 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 as never[],\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: { kind?: string }) => record.kind !== 'failed-request').length\n}\n\nexport function resolveAnnotateScreenshotElement(\n ctx: unknown,\n annotations: AnnotationTransport[],\n scope: 'current' | 'batch',\n): Element | null {\n const state = asEvidenceContext(ctx)\n const currentElement = state.annotateSession.current.target\n ? (state.annotateElements.get(state.annotateSession.current.id) ??\n state.findElementForAnnotationTarget(state.annotateSession.current.target))\n : null\n\n if (scope === 'current') return currentElement\n\n for (const annotation of annotations) {\n for (const target of annotation.targets) {\n const element = state.findElementForLocation(target.location, target.selector)\n if (element) return element\n }\n }\n\n return currentElement\n}\n\nexport async function captureAnnotateScreenshotContext(\n ctx: unknown,\n annotations: AnnotationTransport[],\n scope: 'current' | 'batch',\n): Promise<ScreenshotContext | null> {\n const state = asEvidenceContext(ctx)\n if (!state.canAttachScreenshotContext() || !state.annotateScreenshotContextEnabled) {\n return null\n }\n\n const element = resolveAnnotateScreenshotElement(state, annotations, scope)\n return element ? captureElementScreenshot(element) : null\n}\n","import { createOverlay } from './overlay.js'\nimport { showIntentMenu } from './menu.js'\nimport {\n createEmptySession,\n updateCurrentRecordIntent,\n} 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 restoreEditingRecord as restoreAnnotateEditingRecord,\n sendAnnotationBatch as sendAnnotateBatch,\n showAnnotateSuccess as showAnnotateBatchSuccess,\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 canAttachScreenshotContext as canAttachScreenshotEvidence,\n captureAnnotateScreenshotContext as captureAnnotateScreenshotEvidence,\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 resolveAnnotateScreenshotElement as resolveAnnotateScreenshotTarget,\n syncRuntimeContextCapture as syncRuntimeCapture,\n} from './component-evidence.js'\nimport {\n ATTR_NAME,\n createElementSelector,\n findInspectable,\n hotKeysHeld,\n parseAttrValue,\n} from './component-utils.js'\nimport {\n createRuntimeContextCollector,\n createRuntimeContextEnvelope,\n selectRuntimeEvidence,\n} from './runtime-context.js'\nimport { captureElementScreenshot } from './screenshot-context.js'\nimport type {\n AnnotationTransport,\n AnnotationTarget,\n AiErrorCode,\n FeedbackRecord,\n FeedbackRecordDraft,\n InspectorOptions,\n SourceLocation,\n HotKeys,\n ScreenshotContext,\n} from '@inspecto-dev/types'\nimport { sendAnnotationsToAi } from './http.js'\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 annotationResponseMode: 'unified' | 'per-annotation' = 'unified'\n private annotateInstructionDraft = DEFAULT_ANNOTATE_INSTRUCTION\n private annotateErrorMessage = ''\n private annotateRuntimeContextEnabled = false\n private annotateScreenshotContextEnabled = false\n private annotateCssContextEnabled = false\n private annotateSendState: {\n isSending: boolean\n scope: 'batch' | null\n } = {\n isSending: false,\n scope: null,\n }\n private annotateSuccessScope: 'batch' | null = null\n private annotateSuccessTimeout: ReturnType<typeof setTimeout> | 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 getAnnotationResponseMode(): 'unified' | 'per-annotation' {\n return this.annotationResponseMode\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 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 canAttachScreenshotContext(): boolean {\n return canAttachScreenshotEvidence(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 resolveAnnotateScreenshotElement(\n annotations: AnnotationTransport[],\n scope: 'current' | 'batch',\n ): Element | null {\n return resolveAnnotateScreenshotTarget(this, annotations, scope)\n }\n\n private async captureAnnotateScreenshotContext(\n annotations: AnnotationTransport[],\n scope: 'current' | 'batch',\n ): Promise<ScreenshotContext | null> {\n return captureAnnotateScreenshotEvidence(this, annotations, scope)\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: 'batch'): void {\n showAnnotateBatchSuccess(this, scope)\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: 'batch',\n instruction: string,\n onSuccess: () => void,\n ): Promise<void> {\n return sendAnnotateBatch(this, annotations, scope, instruction, 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') {\n customElements.define('inspecto-overlay', InspectoElement)\n}\n\nexport { InspectoElement }\n"],"mappings":"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","names":["_a","_a","_a","_a","_a","_a","_a","_a","_a","_a","_a","_a","_a","_a","formatRuntimeErrorCount","_a","_a","_a","canAttachRuntimeContext","canAttachScreenshotContext","canAttachCssContext","_b","_c","formatRuntimeErrorCount","_a","_a","_a","_a","formatRuntimeErrorCount","_a","annotateSidebarChipClass","_a","_a","_a","formatRuntimeErrorCount","_a","createAnnotateOverlay","_a","_a","formatRuntimeContextSummary","formatRuntimeContextSummary"]}