@wenathlan/extension 1.1.64 → 1.1.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/attentionfeed.d.ts +74 -0
- package/dist/attentionfeed.d.ts.map +1 -0
- package/dist/backgroundruns.d.ts +71 -0
- package/dist/backgroundruns.d.ts.map +1 -0
- package/dist/datagrid.d.ts +46 -0
- package/dist/datagrid.d.ts.map +1 -0
- package/dist/evidenceviews.d.ts +45 -0
- package/dist/evidenceviews.d.ts.map +1 -0
- package/dist/flowlibrary.d.ts +147 -0
- package/dist/flowlibrary.d.ts.map +1 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1437 -3
- package/dist/index.js.map +4 -4
- package/dist/memory.d.ts +104 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/outputcompare.d.ts +68 -0
- package/dist/outputcompare.d.ts.map +1 -0
- package/dist/pickerviews.d.ts +72 -0
- package/dist/pickerviews.d.ts.map +1 -0
- package/dist/policy.d.ts +122 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/portability.d.ts +35 -0
- package/dist/portability.d.ts.map +1 -0
- package/dist/protocol.d.ts +281 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/quickactions.d.ts +46 -0
- package/dist/quickactions.d.ts.map +1 -0
- package/dist/runreplay.d.ts +53 -0
- package/dist/runreplay.d.ts.map +1 -0
- package/dist/siteprefs.d.ts +45 -0
- package/dist/siteprefs.d.ts.map +1 -0
- package/dist/statusviews.d.ts +65 -0
- package/dist/statusviews.d.ts.map +1 -0
- package/dist/surfaces.d.ts +2 -2
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/syncbridge.d.ts +80 -0
- package/dist/syncbridge.d.ts.map +1 -0
- package/dist/tourviews.d.ts +28 -0
- package/dist/tourviews.d.ts.map +1 -0
- package/dist/types.d.ts +444 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +1841 -5
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/dashboardpage.html +3 -0
- package/extension/dist/dashboardpage.js +108 -0
- package/extension/dist/dashboardpage.js.map +2 -2
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/optionspage.html +5 -0
- package/extension/dist/optionspage.js +222 -0
- package/extension/dist/optionspage.js.map +2 -2
- package/extension/dist/pagebridge.js.map +1 -1
- package/extension/dist/popup.html +2 -2
- package/extension/dist/popup.js +102 -0
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +2 -2
- package/extension/dist/sidepanel.js +219 -3
- package/extension/dist/sidepanel.js.map +2 -2
- package/extension/dist/style.css +3 -1
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../optionspage.ts"],
|
|
4
|
-
"sourcesContent": ["export {};\n\n/**\n * Optionspage runtime of the 1.1.64 family.\n * The optionspage gathers every setting into one page with sections: the onboarding replay, the commandpalette recent window and shortcut, the logstream live buffer bound, the taskinput history retention, the diffpreview offscreen offload ceiling and the session interface options of the 1.1.63 family, while the transparency, consent and security sections of the earlier releases import through the embedded transparencypage; every write takes effect without reloading the extension because the background reads its settings live on each decision.\n */\n\nconst statusnode = document.querySelector<HTMLElement>(\"#status\");\nconst onboardingroot = document.querySelector<HTMLElement>(\"#onboarding\");\nconst paletterecentsinput = document.querySelector<HTMLInputElement>(\"#paletterecents\");\nconst paletteshortcutinput = document.querySelector<HTMLInputElement>(\"#paletteshortcut\");\nconst logstreambufferinput = document.querySelector<HTMLInputElement>(\"#logstreambuffer\");\nconst taskinputretentioninput = document.querySelector<HTMLInputElement>(\"#taskinputretention\");\nconst diffpreviewbytesinput = document.querySelector<HTMLInputElement>(\"#diffpreviewbytes\");\nconst recallwindowinput = document.querySelector<HTMLInputElement>(\"#recallwindow\");\nconst noteretentioninput = document.querySelector<HTMLInputElement>(\"#noteretention\");\nconst summarywindowinput = document.querySelector<HTMLInputElement>(\"#summarywindow\");\n\nfunction status(message: string, error = false): void { if (statusnode) { statusnode.textContent = message; statusnode.dataset.state = error ? \"error\" : \"ready\"; } }\nasync function request(message: unknown): Promise<unknown> { const response = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: unknown; error?: string }; if (!response.ok) throw new Error(response.error); return response.value; }\n\ntype surfacecontext = { sessionpreferences?: { recallwindow?: number; noteretention?: number; summarywindow?: number }; surfacepreferences?: { paletterecents?: number; paletteshortcut?: string; logstreambuffer?: number; taskinputretention?: number; diffpreviewbytes?: number } };\n\n/** Loads the stored surface options into the inputs; an absent value keeps the placeholder that names the documented default. */\nasync function load(): Promise<void> {\n try {\n const context = await request({ kind: \"context\" }) as surfacecontext;\n const preferences = context.surfacepreferences ?? {};\n const session = context.sessionpreferences ?? {};\n if (preferences.paletterecents !== undefined && paletterecentsinput) paletterecentsinput.value = String(preferences.paletterecents);\n if (preferences.paletteshortcut !== undefined && paletteshortcutinput) paletteshortcutinput.value = preferences.paletteshortcut;\n if (preferences.logstreambuffer !== undefined && logstreambufferinput) logstreambufferinput.value = String(preferences.logstreambuffer);\n if (preferences.taskinputretention !== undefined && taskinputretentioninput) taskinputretentioninput.value = String(preferences.taskinputretention);\n if (preferences.diffpreviewbytes !== undefined && diffpreviewbytesinput) diffpreviewbytesinput.value = String(preferences.diffpreviewbytes);\n if (session.recallwindow !== undefined && recallwindowinput) recallwindowinput.value = String(session.recallwindow);\n if (session.noteretention !== undefined && noteretentioninput) noteretentioninput.value = String(session.noteretention);\n if (session.summarywindow !== undefined && summarywindowinput) summarywindowinput.value = String(session.summarywindow);\n status(\"The surface options loaded; every write takes effect without reloading the extension.\");\n } catch (error) { status(error instanceof Error ? error.message : String(error), true); }\n}\n\n/** Writes the commandpalette options; the recent window and the shortcut stay user choices with no engine defaults forced. */\nasync function savepalette(): Promise<void> {\n const paletterecents = paletterecentsinput?.value.trim() ?? \"\";\n const paletteshortcut = paletteshortcutinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(paletterecents !== \"\" ? { paletterecents: Number(paletterecents) } : {}), ...(paletteshortcut !== \"\" ? { paletteshortcut } : {}) } });\n status(`The palette options saved${paletterecents !== \"\" ? ` with the recent window of ${paletterecents}` : \"\"}${paletteshortcut !== \"\" ? ` and the shortcut ${paletteshortcut}` : \"\"}.`);\n}\n\n/** Writes the logstream live buffer bound; the full history stays in memory whatever the bound. */\nasync function savelogstream(): Promise<void> {\n const bound = logstreambufferinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(bound !== \"\" ? { logstreambuffer: Number(bound) } : {}) } });\n status(bound === \"\" ? \"No bound configured; the live window keeps every event.\" : `The logstream live buffer bound of ${bound} saved; the full history stays in memory.`);\n}\n\n/** Writes the taskinput history retention. */\nasync function savetaskinput(): Promise<void> {\n const retention = taskinputretentioninput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(retention !== \"\" ? { taskinputretention: Number(retention) } : {}) } });\n status(retention === \"\" ? \"No retention configured; the taskinput history keeps every entry.\" : `The taskinput history retention of ${retention} milliseconds saved.`);\n}\n\n/** Writes the diffpreview offscreen offload byte ceiling. */\nasync function savediff(): Promise<void> {\n const bytes = diffpreviewbytesinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(bytes !== \"\" ? { diffpreviewbytes: Number(bytes) } : {}) } });\n status(bytes === \"\" ? \"No ceiling configured; every diff stays inline.\" : `The diffpreview offload ceiling of ${bytes} bytes saved.`);\n}\n\n/** Writes the session interface options of the 1.1.63 family through the sessions settings seam. */\nasync function savesession(): Promise<void> {\n const recallwindow = recallwindowinput?.value.trim() ?? \"\";\n const noteretention = noteretentioninput?.value.trim() ?? \"\";\n const summarywindow = summarywindowinput?.value.trim() ?? \"\";\n await request({ kind: \"sessions\", settings: { ...(recallwindow !== \"\" ? { recallwindow: Number(recallwindow) } : {}), ...(noteretention !== \"\" ? { noteretention: Number(noteretention) } : {}), ...(summarywindow !== \"\" ? { summarywindow: Number(summarywindow) } : {}) } });\n status(\"The session interface options saved; the recall window, the note retention and the summary window take effect at once.\");\n}\n\n/** Renders the onboarding state and replays the walkthrough on demand. */\nasync function renderonboarding(): Promise<void> {\n if (!onboardingroot) return;\n try {\n const result = await request({ kind: \"surface\", onboarding: {} }) as { steps: Array<{ id: string; title: string; body: string; surface: string }>; state?: { stepscompleted: string[]; done: boolean } };\n onboardingroot.replaceChildren();\n const state = result.state;\n const line = document.createElement(\"p\");\n line.textContent = state === undefined ? \"The onboarding walkthrough never ran; it starts on the next popup open.\" : state.done ? `The walkthrough is done (${state.stepscompleted.length} steps); the replay restarts it on demand and writes no second consent event.` : `The walkthrough stands at ${state.stepscompleted.length} of ${result.steps.length} steps.`;\n onboardingroot.append(line);\n const list = document.createElement(\"ol\");\n list.className = \"audit\";\n for (const step of result.steps) list.append(Object.assign(document.createElement(\"li\"), { textContent: `${step.title} (${step.surface}): ${step.body}${state?.stepscompleted.includes(step.id) ? \" \u2014 done\" : \"\"}` }));\n onboardingroot.append(list);\n } catch (error) { onboardingroot.textContent = error instanceof Error ? error.message : String(error); }\n}\n\ndocument.querySelector<HTMLButtonElement>(\"#replayonboarding\")?.addEventListener(\"click\", () => { void (async () => { await request({ kind: \"surface\", onboarding: { replay: true } }); status(\"The onboarding walkthrough replays; it opens on the next popup open.\"); await renderonboarding(); })().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#palettesettings\")?.addEventListener(\"click\", () => { void savepalette().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#logstreamsettings\")?.addEventListener(\"click\", () => { void savelogstream().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#taskinputsettings\")?.addEventListener(\"click\", () => { void savetaskinput().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#diffsettings\")?.addEventListener(\"click\", () => { void savediff().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#sessionsettings\")?.addEventListener(\"click\", () => { void savesession().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\n\n/** The optionspage sees settings changes through the single broadcast channel so two open pages never drift. */\nconst surfacechannel: BroadcastChannel | undefined = typeof BroadcastChannel === \"function\" ? new BroadcastChannel(\"devthinksurfaces\") : undefined;\nsurfacechannel?.addEventListener(\"message\", (event: MessageEvent) => { const frame = event.data as { channel?: string }; if (frame?.channel === \"settings\") { void load().catch(() => { /* a failing reload keeps the last loaded options */ }); } });\n\nvoid load();\nvoid renderonboarding();\n"],
|
|
5
|
-
"mappings": ";AAOA,IAAM,aAAa,SAAS,cAA2B,SAAS;AAChE,IAAM,iBAAiB,SAAS,cAA2B,aAAa;AACxE,IAAM,sBAAsB,SAAS,cAAgC,iBAAiB;AACtF,IAAM,uBAAuB,SAAS,cAAgC,kBAAkB;AACxF,IAAM,uBAAuB,SAAS,cAAgC,kBAAkB;AACxF,IAAM,0BAA0B,SAAS,cAAgC,qBAAqB;AAC9F,IAAM,wBAAwB,SAAS,cAAgC,mBAAmB;AAC1F,IAAM,oBAAoB,SAAS,cAAgC,eAAe;AAClF,IAAM,qBAAqB,SAAS,cAAgC,gBAAgB;AACpF,IAAM,qBAAqB,SAAS,cAAgC,gBAAgB;AAEpF,SAAS,OAAO,SAAiB,QAAQ,OAAa;AAAE,MAAI,YAAY;AAAE,eAAW,cAAc;AAAS,eAAW,QAAQ,QAAQ,QAAQ,UAAU;AAAA,EAAS;AAAE;AACpK,eAAe,QAAQ,SAAoC;AAAE,QAAM,WAAW,MAAM,OAAO,QAAQ,YAAY,OAAO;AAAuD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,SAAS,KAAK;AAAG,SAAO,SAAS;AAAO;AAKvP,eAAe,OAAsB;AACnC,MAAI;AACF,UAAM,UAAU,MAAM,QAAQ,EAAE,MAAM,UAAU,CAAC;AACjD,UAAM,cAAc,QAAQ,sBAAsB,CAAC;AACnD,UAAM,UAAU,QAAQ,sBAAsB,CAAC;AAC/C,QAAI,YAAY,mBAAmB,UAAa,oBAAqB,qBAAoB,QAAQ,OAAO,YAAY,cAAc;AAClI,QAAI,YAAY,oBAAoB,UAAa,qBAAsB,sBAAqB,QAAQ,YAAY;AAChH,QAAI,YAAY,oBAAoB,UAAa,qBAAsB,sBAAqB,QAAQ,OAAO,YAAY,eAAe;AACtI,QAAI,YAAY,uBAAuB,UAAa,wBAAyB,yBAAwB,QAAQ,OAAO,YAAY,kBAAkB;AAClJ,QAAI,YAAY,qBAAqB,UAAa,sBAAuB,uBAAsB,QAAQ,OAAO,YAAY,gBAAgB;AAC1I,QAAI,QAAQ,iBAAiB,UAAa,kBAAmB,mBAAkB,QAAQ,OAAO,QAAQ,YAAY;AAClH,QAAI,QAAQ,kBAAkB,UAAa,mBAAoB,oBAAmB,QAAQ,OAAO,QAAQ,aAAa;AACtH,QAAI,QAAQ,kBAAkB,UAAa,mBAAoB,oBAAmB,QAAQ,OAAO,QAAQ,aAAa;AACtH,WAAO,uFAAuF;AAAA,EAChG,SAAS,OAAO;AAAE,WAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI;AAAA,EAAG;AAC1F;AAGA,eAAe,cAA6B;AAC1C,QAAM,iBAAiB,qBAAqB,MAAM,KAAK,KAAK;AAC5D,QAAM,kBAAkB,sBAAsB,MAAM,KAAK,KAAK;AAC9D,QAAM,QAAQ,EAAE,MAAM,WAAW,UAAU,EAAE,GAAI,mBAAmB,KAAK,EAAE,gBAAgB,OAAO,cAAc,EAAE,IAAI,CAAC,GAAI,GAAI,oBAAoB,KAAK,EAAE,gBAAgB,IAAI,CAAC,EAAG,EAAE,CAAC;AACrL,SAAO,4BAA4B,mBAAmB,KAAK,8BAA8B,cAAc,KAAK,EAAE,GAAG,oBAAoB,KAAK,qBAAqB,eAAe,KAAK,EAAE,GAAG;AAC1L;AAGA,eAAe,gBAA+B;AAC5C,QAAM,QAAQ,sBAAsB,MAAM,KAAK,KAAK;AACpD,QAAM,QAAQ,EAAE,MAAM,WAAW,UAAU,EAAE,GAAI,UAAU,KAAK,EAAE,iBAAiB,OAAO,KAAK,EAAE,IAAI,CAAC,EAAG,EAAE,CAAC;AAC5G,SAAO,UAAU,KAAK,4DAA4D,sCAAsC,KAAK,2CAA2C;AAC1K;AAGA,eAAe,gBAA+B;AAC5C,QAAM,YAAY,yBAAyB,MAAM,KAAK,KAAK;AAC3D,QAAM,QAAQ,EAAE,MAAM,WAAW,UAAU,EAAE,GAAI,cAAc,KAAK,EAAE,oBAAoB,OAAO,SAAS,EAAE,IAAI,CAAC,EAAG,EAAE,CAAC;AACvH,SAAO,cAAc,KAAK,sEAAsE,sCAAsC,SAAS,sBAAsB;AACvK;AAGA,eAAe,WAA0B;AACvC,QAAM,QAAQ,uBAAuB,MAAM,KAAK,KAAK;AACrD,QAAM,QAAQ,EAAE,MAAM,WAAW,UAAU,EAAE,GAAI,UAAU,KAAK,EAAE,kBAAkB,OAAO,KAAK,EAAE,IAAI,CAAC,EAAG,EAAE,CAAC;AAC7G,SAAO,UAAU,KAAK,oDAAoD,sCAAsC,KAAK,eAAe;AACtI;AAGA,eAAe,cAA6B;AAC1C,QAAM,eAAe,mBAAmB,MAAM,KAAK,KAAK;AACxD,QAAM,gBAAgB,oBAAoB,MAAM,KAAK,KAAK;AAC1D,QAAM,gBAAgB,oBAAoB,MAAM,KAAK,KAAK;AAC1D,QAAM,QAAQ,EAAE,MAAM,YAAY,UAAU,EAAE,GAAI,iBAAiB,KAAK,EAAE,cAAc,OAAO,YAAY,EAAE,IAAI,CAAC,GAAI,GAAI,kBAAkB,KAAK,EAAE,eAAe,OAAO,aAAa,EAAE,IAAI,CAAC,GAAI,GAAI,kBAAkB,KAAK,EAAE,eAAe,OAAO,aAAa,EAAE,IAAI,CAAC,EAAG,EAAE,CAAC;AAC9Q,SAAO,wHAAwH;AACjI;AAGA,eAAe,mBAAkC;AAC/C,MAAI,CAAC,eAAgB;AACrB,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,EAAE,MAAM,WAAW,YAAY,CAAC,EAAE,CAAC;AAChE,mBAAe,gBAAgB;AAC/B,UAAM,QAAQ,OAAO;AACrB,UAAM,OAAO,SAAS,cAAc,GAAG;AACvC,SAAK,cAAc,UAAU,SAAY,4EAA4E,MAAM,OAAO,4BAA4B,MAAM,eAAe,MAAM,kFAAkF,6BAA6B,MAAM,eAAe,MAAM,OAAO,OAAO,MAAM,MAAM;AAC7V,mBAAe,OAAO,IAAI;AAC1B,UAAM,OAAO,SAAS,cAAc,IAAI;AACxC,SAAK,YAAY;AACjB,eAAW,QAAQ,OAAO,MAAO,MAAK,OAAO,OAAO,OAAO,SAAS,cAAc,IAAI,GAAG,EAAE,aAAa,GAAG,KAAK,KAAK,KAAK,KAAK,OAAO,MAAM,KAAK,IAAI,GAAG,OAAO,eAAe,SAAS,KAAK,EAAE,IAAI,iBAAY,EAAE,GAAG,CAAC,CAAC;AACrN,mBAAe,OAAO,IAAI;AAAA,EAC5B,SAAS,OAAO;AAAE,mBAAe,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAAG;AACzG;AAEA,SAAS,cAAiC,mBAAmB,GAAG,iBAAiB,SAAS,MAAM;AAAE,QAAM,YAAY;AAAE,UAAM,QAAQ,EAAE,MAAM,WAAW,YAAY,EAAE,QAAQ,KAAK,EAAE,CAAC;AAAG,WAAO,sEAAsE;AAAG,UAAM,iBAAiB;AAAA,EAAG,GAAG,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AAC9X,SAAS,cAAiC,kBAAkB,GAAG,iBAAiB,SAAS,MAAM;AAAE,OAAK,YAAY,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AAC3M,SAAS,cAAiC,oBAAoB,GAAG,iBAAiB,SAAS,MAAM;AAAE,OAAK,cAAc,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AAC/M,SAAS,cAAiC,oBAAoB,GAAG,iBAAiB,SAAS,MAAM;AAAE,OAAK,cAAc,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AAC/M,SAAS,cAAiC,eAAe,GAAG,iBAAiB,SAAS,MAAM;AAAE,OAAK,SAAS,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AACrM,SAAS,cAAiC,kBAAkB,GAAG,iBAAiB,SAAS,MAAM;AAAE,OAAK,YAAY,EAAE,MAAM,WAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI,CAAC;AAAG,CAAC;AAG3M,IAAM,iBAA+C,OAAO,qBAAqB,aAAa,IAAI,iBAAiB,kBAAkB,IAAI;AACzI,gBAAgB,iBAAiB,WAAW,CAAC,UAAwB;AAAE,QAAM,QAAQ,MAAM;AAA8B,MAAI,OAAO,YAAY,YAAY;AAAE,SAAK,KAAK,EAAE,MAAM,MAAM;AAAA,IAAuD,CAAC;AAAA,EAAG;AAAE,CAAC;AAEpP,KAAK,KAAK;AACV,KAAK,iBAAiB;",
|
|
4
|
+
"sourcesContent": ["export {};\n\n/**\n * Optionspage runtime of the 1.1.64 family.\n * The optionspage gathers every setting into one page with sections: the onboarding replay, the commandpalette recent window and shortcut, the logstream live buffer bound, the taskinput history retention, the diffpreview offscreen offload ceiling and the session interface options of the 1.1.63 family, while the transparency, consent and security sections of the earlier releases import through the embedded transparencypage; every write takes effect without reloading the extension because the background reads its settings live on each decision.\n */\n\nconst statusnode = document.querySelector<HTMLElement>(\"#status\");\nconst onboardingroot = document.querySelector<HTMLElement>(\"#onboarding\");\nconst paletterecentsinput = document.querySelector<HTMLInputElement>(\"#paletterecents\");\nconst paletteshortcutinput = document.querySelector<HTMLInputElement>(\"#paletteshortcut\");\nconst logstreambufferinput = document.querySelector<HTMLInputElement>(\"#logstreambuffer\");\nconst taskinputretentioninput = document.querySelector<HTMLInputElement>(\"#taskinputretention\");\nconst diffpreviewbytesinput = document.querySelector<HTMLInputElement>(\"#diffpreviewbytes\");\nconst recallwindowinput = document.querySelector<HTMLInputElement>(\"#recallwindow\");\nconst noteretentioninput = document.querySelector<HTMLInputElement>(\"#noteretention\");\nconst summarywindowinput = document.querySelector<HTMLInputElement>(\"#summarywindow\");\n\nfunction status(message: string, error = false): void { if (statusnode) { statusnode.textContent = message; statusnode.dataset.state = error ? \"error\" : \"ready\"; } }\nasync function request(message: unknown): Promise<unknown> { const response = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: unknown; error?: string }; if (!response.ok) throw new Error(response.error); return response.value; }\n\ntype surfacecontext = { sessionpreferences?: { recallwindow?: number; noteretention?: number; summarywindow?: number }; surfacepreferences?: { paletterecents?: number; paletteshortcut?: string; logstreambuffer?: number; taskinputretention?: number; diffpreviewbytes?: number } };\n\n/** Loads the stored surface options into the inputs; an absent value keeps the placeholder that names the documented default. */\nasync function load(): Promise<void> {\n try {\n const context = await request({ kind: \"context\" }) as surfacecontext;\n const preferences = context.surfacepreferences ?? {};\n const session = context.sessionpreferences ?? {};\n if (preferences.paletterecents !== undefined && paletterecentsinput) paletterecentsinput.value = String(preferences.paletterecents);\n if (preferences.paletteshortcut !== undefined && paletteshortcutinput) paletteshortcutinput.value = preferences.paletteshortcut;\n if (preferences.logstreambuffer !== undefined && logstreambufferinput) logstreambufferinput.value = String(preferences.logstreambuffer);\n if (preferences.taskinputretention !== undefined && taskinputretentioninput) taskinputretentioninput.value = String(preferences.taskinputretention);\n if (preferences.diffpreviewbytes !== undefined && diffpreviewbytesinput) diffpreviewbytesinput.value = String(preferences.diffpreviewbytes);\n if (session.recallwindow !== undefined && recallwindowinput) recallwindowinput.value = String(session.recallwindow);\n if (session.noteretention !== undefined && noteretentioninput) noteretentioninput.value = String(session.noteretention);\n if (session.summarywindow !== undefined && summarywindowinput) summarywindowinput.value = String(session.summarywindow);\n status(\"The surface options loaded; every write takes effect without reloading the extension.\");\n } catch (error) { status(error instanceof Error ? error.message : String(error), true); }\n}\n\n/** Writes the commandpalette options; the recent window and the shortcut stay user choices with no engine defaults forced. */\nasync function savepalette(): Promise<void> {\n const paletterecents = paletterecentsinput?.value.trim() ?? \"\";\n const paletteshortcut = paletteshortcutinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(paletterecents !== \"\" ? { paletterecents: Number(paletterecents) } : {}), ...(paletteshortcut !== \"\" ? { paletteshortcut } : {}) } });\n status(`The palette options saved${paletterecents !== \"\" ? ` with the recent window of ${paletterecents}` : \"\"}${paletteshortcut !== \"\" ? ` and the shortcut ${paletteshortcut}` : \"\"}.`);\n}\n\n/** Writes the logstream live buffer bound; the full history stays in memory whatever the bound. */\nasync function savelogstream(): Promise<void> {\n const bound = logstreambufferinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(bound !== \"\" ? { logstreambuffer: Number(bound) } : {}) } });\n status(bound === \"\" ? \"No bound configured; the live window keeps every event.\" : `The logstream live buffer bound of ${bound} saved; the full history stays in memory.`);\n}\n\n/** Writes the taskinput history retention. */\nasync function savetaskinput(): Promise<void> {\n const retention = taskinputretentioninput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(retention !== \"\" ? { taskinputretention: Number(retention) } : {}) } });\n status(retention === \"\" ? \"No retention configured; the taskinput history keeps every entry.\" : `The taskinput history retention of ${retention} milliseconds saved.`);\n}\n\n/** Writes the diffpreview offscreen offload byte ceiling. */\nasync function savediff(): Promise<void> {\n const bytes = diffpreviewbytesinput?.value.trim() ?? \"\";\n await request({ kind: \"surface\", settings: { ...(bytes !== \"\" ? { diffpreviewbytes: Number(bytes) } : {}) } });\n status(bytes === \"\" ? \"No ceiling configured; every diff stays inline.\" : `The diffpreview offload ceiling of ${bytes} bytes saved.`);\n}\n\n/** Writes the session interface options of the 1.1.63 family through the sessions settings seam. */\nasync function savesession(): Promise<void> {\n const recallwindow = recallwindowinput?.value.trim() ?? \"\";\n const noteretention = noteretentioninput?.value.trim() ?? \"\";\n const summarywindow = summarywindowinput?.value.trim() ?? \"\";\n await request({ kind: \"sessions\", settings: { ...(recallwindow !== \"\" ? { recallwindow: Number(recallwindow) } : {}), ...(noteretention !== \"\" ? { noteretention: Number(noteretention) } : {}), ...(summarywindow !== \"\" ? { summarywindow: Number(summarywindow) } : {}) } });\n status(\"The session interface options saved; the recall window, the note retention and the summary window take effect at once.\");\n}\n\n/** Renders the onboarding state and replays the walkthrough on demand. */\nasync function renderonboarding(): Promise<void> {\n if (!onboardingroot) return;\n try {\n const result = await request({ kind: \"surface\", onboarding: {} }) as { steps: Array<{ id: string; title: string; body: string; surface: string }>; state?: { stepscompleted: string[]; done: boolean } };\n onboardingroot.replaceChildren();\n const state = result.state;\n const line = document.createElement(\"p\");\n line.textContent = state === undefined ? \"The onboarding walkthrough never ran; it starts on the next popup open.\" : state.done ? `The walkthrough is done (${state.stepscompleted.length} steps); the replay restarts it on demand and writes no second consent event.` : `The walkthrough stands at ${state.stepscompleted.length} of ${result.steps.length} steps.`;\n onboardingroot.append(line);\n const list = document.createElement(\"ol\");\n list.className = \"audit\";\n for (const step of result.steps) list.append(Object.assign(document.createElement(\"li\"), { textContent: `${step.title} (${step.surface}): ${step.body}${state?.stepscompleted.includes(step.id) ? \" \u2014 done\" : \"\"}` }));\n onboardingroot.append(list);\n } catch (error) { onboardingroot.textContent = error instanceof Error ? error.message : String(error); }\n}\n\ndocument.querySelector<HTMLButtonElement>(\"#replayonboarding\")?.addEventListener(\"click\", () => { void (async () => { await request({ kind: \"surface\", onboarding: { replay: true } }); status(\"The onboarding walkthrough replays; it opens on the next popup open.\"); await renderonboarding(); })().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#palettesettings\")?.addEventListener(\"click\", () => { void savepalette().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#logstreamsettings\")?.addEventListener(\"click\", () => { void savelogstream().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#taskinputsettings\")?.addEventListener(\"click\", () => { void savetaskinput().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#diffsettings\")?.addEventListener(\"click\", () => { void savediff().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#sessionsettings\")?.addEventListener(\"click\", () => { void savesession().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\n\n/** The optionspage sees settings changes through the single broadcast channel so two open pages never drift. */\nconst surfacechannel: BroadcastChannel | undefined = typeof BroadcastChannel === \"function\" ? new BroadcastChannel(\"devthinksurfaces\") : undefined;\nsurfacechannel?.addEventListener(\"message\", (event: MessageEvent) => { const frame = event.data as { channel?: string }; if (frame?.channel === \"settings\") { void load().catch(() => { /* a failing reload keeps the last loaded options */ }); } });\n\nvoid load();\nvoid renderonboarding();\n\n/**\n * Interface finishing options of the 1.1.65 family: the darklight theme preference with its manual override, the interface language of the locale bundles, the recenttray depth, the step toast live count, the notification consent and preference, the user editable shortcutkeys, the importexport bundles with their dropimport zone and the featuretour replay with the guidedtip recall.\n */\nconst themepreferenceselect = document.querySelector<HTMLSelectElement>(\"#themepreference\");\nconst uilanguageselect = document.querySelector<HTMLSelectElement>(\"#uilanguage\");\nconst recenttraydepthinput = document.querySelector<HTMLInputElement>(\"#recenttraydepth\");\nconst toastlivecountinput = document.querySelector<HTMLInputElement>(\"#toastlivecount\");\nconst notifyconsentinput = document.querySelector<HTMLInputElement>(\"#notifyconsent\");\nconst notifyenabledinput = document.querySelector<HTMLInputElement>(\"#notifyenabled\");\nconst shortcutlistnode = document.querySelector<HTMLElement>(\"#shortcutlist\");\nconst shortcuteditinput = document.querySelector<HTMLInputElement>(\"#shortcutedit\");\nconst bundlenode = document.querySelector<HTMLElement>(\"#bundlestatus\");\nconst dropzonenode = document.querySelector<HTMLElement>(\"#dropzone\");\nconst tourstopsnode = document.querySelector<HTMLElement>(\"#tourstops\");\n\ntype finishingcontext = { surfacepreferences?: { recenttraydepth?: number; notifyconsent?: boolean; notifyenabled?: boolean; themepreference?: string; uilanguage?: string; toastlivecount?: number } };\n\n/** Loads the finishing options beside the surface options. */\nasync function loadfinishing(): Promise<void> {\n try {\n const context = await request({ kind: \"context\" }) as finishingcontext;\n const preferences = context.surfacepreferences ?? {};\n if (preferences.themepreference !== undefined && themepreferenceselect) themepreferenceselect.value = preferences.themepreference;\n if (preferences.uilanguage !== undefined && uilanguageselect) uilanguageselect.value = preferences.uilanguage;\n if (preferences.recenttraydepth !== undefined && recenttraydepthinput) recenttraydepthinput.value = String(preferences.recenttraydepth);\n if (preferences.toastlivecount !== undefined && toastlivecountinput) toastlivecountinput.value = String(preferences.toastlivecount);\n if (notifyconsentinput) notifyconsentinput.checked = preferences.notifyconsent === true;\n if (notifyenabledinput) notifyenabledinput.checked = preferences.notifyenabled !== false;\n } catch (error) { status(error instanceof Error ? error.message : String(error), true); }\n}\n\n/** Saves the finishing options: the theme preference, the language, the tray depth, the toast live count and the notification consent and preference. */\nasync function savefinishing(): Promise<void> {\n const themepreference = themepreferenceselect?.value ?? \"\";\n const uilanguage = uilanguageselect?.value ?? \"\";\n const recenttraydepth = recenttraydepthinput?.value.trim() ?? \"\";\n const toastlivecount = toastlivecountinput?.value.trim() ?? \"\";\n await request({ kind: \"views\", settings: { ...(themepreference !== \"\" ? { themepreference } : {}), ...(uilanguage !== \"\" ? { uilanguage } : {}), ...(recenttraydepth !== \"\" ? { recenttraydepth: Number(recenttraydepth) } : {}), ...(toastlivecount !== \"\" ? { toastlivecount: Number(toastlivecount) } : {}), notifyconsent: notifyconsentinput?.checked === true, notifyenabled: notifyenabledinput?.checked === true } });\n await applythemelive();\n status(\"The interface finishing options saved; the theme, the language, the tray depth and the toast live count take effect at once.\");\n}\n\n/** Resolves and applies the darklight tokens on the live document so the theme covers the optionspage too. */\nasync function applythemelive(): Promise<void> {\n try {\n const result = await request({ kind: \"views\", theme: { resolve: true, preference: themepreferenceselect?.value ?? \"\" } }) as { appearance: { mode: \"dark\" | \"light\"; tokens: Record<string, string>; source: string } };\n for (const [name, value] of Object.entries(result.appearance.tokens)) document.documentElement.style.setProperty(`--theme-${name}`, value);\n document.documentElement.style.setProperty(\"color-scheme\", result.appearance.mode);\n } catch { /* a failing theme read keeps the shipped light theme */ }\n}\n\n/** Renders the user editable shortcutkeys bindings with their display text. */\nasync function rendershortcuts(): Promise<void> {\n if (!shortcutlistnode) return;\n try {\n const result = await request({ kind: \"views\", shortcut: { list: true } }) as { bindings?: Array<{ command: string; key: string; modifiers: string[]; display?: string }> };\n shortcutlistnode.replaceChildren();\n const list = document.createElement(\"ul\");\n list.className = \"audit\";\n for (const binding of result.bindings ?? []) {\n const combination = [...binding.modifiers, binding.key].join(\"+\");\n list.append(Object.assign(document.createElement(\"li\"), { textContent: `${binding.command}: ${binding.display ?? combination}` }));\n }\n shortcutlistnode.append(list);\n } catch (error) { shortcutlistnode.textContent = error instanceof Error ? error.message : String(error); }\n}\n\n/** Saves one edited shortcut binding from its \"command: combination\" text. */\nasync function saveshortcut(): Promise<void> {\n const text = shortcuteditinput?.value.trim() ?? \"\";\n const split = text.split(\":\");\n const command = split[0]?.trim() ?? \"\";\n const combination = split.slice(1).join(\":\").trim();\n if (command === \"\" || combination === \"\") { status(\"The shortcut edit needs its command and its combination, such as pauserun: alt+q.\", true); return; }\n await request({ kind: \"views\", shortcut: { edit: { command, text: combination } } });\n status(`The ${command} shortcut now binds ${combination}; the command keeps its palette gates.`);\n await rendershortcuts();\n}\n\n/** Renders the featuretour stops so the replay walkthrough reads its route first. */\nasync function rendertourstops(): Promise<void> {\n if (!tourstopsnode) return;\n try {\n const result = await request({ kind: \"views\", tour: { stops: true } }) as { stops?: Array<{ id: string; surface: string; title: string; body: string }> };\n tourstopsnode.replaceChildren();\n const list = document.createElement(\"ol\");\n list.className = \"audit\";\n for (const stop of result.stops ?? []) list.append(Object.assign(document.createElement(\"li\"), { textContent: `${stop.title} (${stop.surface}): ${stop.body}` }));\n tourstopsnode.append(list);\n } catch (error) { tourstopsnode.textContent = error instanceof Error ? error.message : String(error); }\n}\n\n/** Exports the settings bundle and renders its honest exclusion list. */\nasync function exportbundle(): Promise<void> {\n const result = await request({ kind: \"views\", importexport: { export: true } }) as { payload: { profile: string; exclusions: string[]; contents: { originprofiles: unknown[]; siteprofiles: unknown[]; notes: unknown[] } } };\n if (bundlenode) bundlenode.textContent = `The bundle of the profile ${result.payload.profile} carries ${result.payload.contents.siteprofiles.length} site profile${result.payload.contents.siteprofiles.length === 1 ? \"\" : \"s\"} and ${result.payload.contents.notes.length} note${result.payload.contents.notes.length === 1 ? \"\" : \"s\"}; ${result.payload.exclusions.join(\" and \")} never enter any bundle.`;\n status(\"The settings bundle exported with its exclusion list.\");\n}\n\n/** Validates one pasted bundle and applies its preferences when the validation passes. */\nasync function importbundle(): Promise<void> {\n const text = window.prompt(\"Paste the importexport bundle json\") ?? \"\";\n if (text.trim() === \"\") return;\n const parsed = JSON.parse(text) as Record<string, unknown>;\n const validation = await request({ kind: \"views\", importexport: { validate: parsed } }) as { ok: boolean; reason: string };\n if (!validation.ok) { status(validation.reason, true); return; }\n const applied = await request({ kind: \"views\", importexport: { apply: { preferences: (parsed as { contents?: { preferences?: Record<string, unknown> } }).contents?.preferences ?? {} } } }) as { applied: string[] };\n status(`The bundle applied ${applied.applied.length} preference key${applied.applied.length === 1 ? \"\" : \"s\"} after its validation passed.`);\n await loadfinishing();\n}\n\n/** Accepts the csv, json and workflow files the user drops on the dropimport zone. */\nfunction wir(dropimportzone: HTMLElement): void {\n dropimportzone.addEventListener(\"dragover\", event => { event.preventDefault(); });\n dropimportzone.addEventListener(\"drop\", event => {\n event.preventDefault();\n const file = event.dataTransfer?.files[0];\n if (file === undefined) return;\n void file.text().then(head => request({ kind: \"views\", dropimport: { file: { filename: file.name, bytes: file.size, head: head.slice(0, 2000) } } })).then(result => {\n const session = (result as { session: { filename: string; kind: string } }).session;\n status(`The dropimport detected the ${session.kind} kind of ${session.filename}; the import path takes the file from here.`);\n }).catch(error => status(error instanceof Error ? error.message : String(error), true));\n });\n}\nif (dropzonenode) wir(dropzonenode);\n\ndocument.querySelector<HTMLButtonElement>(\"#finishingsettings\")?.addEventListener(\"click\", () => { void savefinishing().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#shortcutsettings\")?.addEventListener(\"click\", () => { void saveshortcut().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#exportbundle\")?.addEventListener(\"click\", () => { void exportbundle().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#importbundle\")?.addEventListener(\"click\", () => { void importbundle().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#replaytour\")?.addEventListener(\"click\", () => { void (async () => { await request({ kind: \"views\", tour: { replay: true } }); status(\"The featuretour replays with its datagrid, compareviewer and pickeroverlay stops.\"); })().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\ndocument.querySelector<HTMLButtonElement>(\"#recalltips\")?.addEventListener(\"click\", () => { void (async () => { await request({ kind: \"views\", tips: { recall: true } }); status(\"The guidedtips recalled; they show again during the picker sessions.\"); })().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\nthemepreferenceselect?.addEventListener(\"change\", () => { void applythemelive().catch(() => { /* a failing theme read keeps the shipped light theme */ }); });\n\nvoid loadfinishing();\nvoid applythemelive();\nvoid rendershortcuts();\nvoid rendertourstops();\n\n/**\n * Syncbridge options of the 1.1.66 ecosystem family: the optionspage manages the manifest sync providers and their explicit opt in state and shows the conflict records with their resolve actions; no hook ever defaults on.\n */\nconst syncproviderlist = document.querySelector<HTMLElement>(\"#syncproviderlist\");\nconst syncconflictsroot = document.querySelector<HTMLElement>(\"#syncconflicts\");\nconst syncendpointinput = document.querySelector<HTMLInputElement>(\"#syncendpoint\");\nconst syncproviderselect = document.querySelector<HTMLSelectElement>(\"#syncprovider\");\n\n/** Renders the syncbridge providers and hooks with their opt in states beside the open conflict records. */\nasync function rendersyncbridge(): Promise<void> {\n if (syncproviderlist) {\n try {\n const providers = await request({ kind: \"ecosystem\", sync: { providers: true } }) as { providers: Array<{ provider: string; label: string; note: string }> };\n const hooks = await request({ kind: \"ecosystem\", sync: { hooks: true } }) as { hooks: Array<{ id: string; provider: string; direction: string; optin: boolean; endpoint: string; state: string }> };\n syncproviderlist.replaceChildren();\n for (const provider of providers.providers) {\n const row = document.createElement(\"p\");\n row.textContent = `${provider.label}: ${provider.note}`;\n syncproviderlist.append(row);\n }\n for (const hook of hooks.hooks) {\n const row = document.createElement(\"p\");\n row.textContent = `${hook.provider} hook \u2014 ${hook.endpoint} \u2014 ${hook.direction} \u2014 ${hook.optin ? \"opted in\" : \"opted out\"} \u2014 ${hook.state}`;\n row.append(\" \", (() => { const element = document.createElement(\"button\"); element.type = \"button\"; element.className = \"secondary\"; element.textContent = hook.optin ? \"Opt out\" : \"Opt in\"; element.addEventListener(\"click\", () => { void request({ kind: \"ecosystem\", sync: { hook: { optin: { hookid: hook.id, optin: !hook.optin } } } }).then(() => rendersyncbridge()).catch(error => status(error instanceof Error ? error.message : String(error), true)); }); return element; })());\n syncproviderlist.append(row);\n }\n } catch (error) { syncproviderlist.textContent = error instanceof Error ? error.message : String(error); }\n }\n if (syncconflictsroot) {\n try {\n const conflicts = await request({ kind: \"ecosystem\", sync: { conflicts: true } }) as { conflicts: Array<{ id: string; manifestid: string; local: { version: string }; remote: { version: string }; resolution?: string }> };\n syncconflictsroot.replaceChildren();\n if (conflicts.conflicts.length === 0) { syncconflictsroot.textContent = \"No syncbridge conflict stands open; both versions surface here whenever digests differ.\"; return; }\n for (const conflict of conflicts.conflicts) {\n const row = document.createElement(\"p\");\n row.textContent = `${conflict.manifestid}: local ${conflict.local.version} vs remote ${conflict.remote.version}${conflict.resolution !== undefined ? ` \u2014 resolved ${conflict.resolution}` : \"\"}`;\n if (conflict.resolution === undefined) for (const resolution of [\"local\", \"remote\", \"merge\"] as const) {\n const element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = \"secondary\";\n element.textContent = resolution;\n element.addEventListener(\"click\", () => { void request({ kind: \"ecosystem\", sync: { resolve: { conflictid: conflict.id, resolution } } }).then(() => rendersyncbridge()).catch(error => status(error instanceof Error ? error.message : String(error), true)); });\n row.append(\" \", element);\n }\n syncconflictsroot.append(row);\n }\n } catch (error) { syncconflictsroot.textContent = error instanceof Error ? error.message : String(error); }\n }\n}\n\ndocument.querySelector<HTMLButtonElement>(\"#synccreate\")?.addEventListener(\"click\", () => { void (async () => {\n const endpoint = syncendpointinput?.value.trim() ?? \"\";\n if (endpoint === \"\") throw new Error(\"The syncbridge hook needs its user configured endpoint; no provider address is ever hardcoded.\");\n await request({ kind: \"ecosystem\", sync: { hook: { add: { provider: syncproviderselect?.value === \"web\" ? \"web\" : \"file\", direction: \"both\", endpoint } } } });\n if (syncendpointinput) syncendpointinput.value = \"\";\n status(`The syncbridge hook of ${endpoint} was added opted out; no hook ever defaults on.`);\n await rendersyncbridge();\n})().catch(error => status(error instanceof Error ? error.message : String(error), true)); });\n\nvoid rendersyncbridge();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|