@wenathlan/extension 1.1.62 → 1.1.63
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 +4 -3
- package/dist/environments.d.ts +10 -0
- package/dist/environments.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +553 -1
- package/dist/index.js.map +4 -4
- package/dist/memory.d.ts +99 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/policy.d.ts +54 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/sessioninterface.d.ts +213 -0
- package/dist/sessioninterface.d.ts.map +1 -0
- package/dist/types.d.ts +198 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +727 -2
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/offscreen.js +4 -0
- package/extension/dist/offscreen.js.map +2 -2
- package/extension/dist/pagebridge.js.map +1 -1
- package/extension/dist/popup.html +1 -1
- package/extension/dist/popup.js +26 -0
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +1 -1
- package/extension/dist/sidepanel.js +414 -219
- package/extension/dist/sidepanel.js.map +3 -3
- package/extension/dist/transparencypage.html +1 -0
- package/extension/dist/transparencypage.js +42 -0
- package/extension/dist/transparencypage.js.map +2 -2
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<section><h2>Ratelimit buckets</h2><div id="ratelimit" class="panel"></div></section>
|
|
19
19
|
<section><h2>Phishguard</h2><div id="phishguard" class="panel"></div></section>
|
|
20
20
|
<section><h2>Redactshot regions</h2><div id="redact" class="panel"></div></section>
|
|
21
|
+
<section><h2>Session interface options</h2><div id="sessionoptions" class="panel"></div></section>
|
|
21
22
|
</main>
|
|
22
23
|
<script type="module" src="transparencypage.js"></script>
|
|
23
24
|
</body>
|
|
@@ -153,4 +153,46 @@ async function render() {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
render().catch((error) => reportstatus(error instanceof Error ? error.message : String(error)));
|
|
156
|
+
function rendersessionoptions(view) {
|
|
157
|
+
const root = document.querySelector("#sessionoptions");
|
|
158
|
+
if (!root) return;
|
|
159
|
+
root.replaceChildren();
|
|
160
|
+
root.append(line(`Recall index window: ${view.recallwindow !== void 0 ? `${view.recallwindow} milliseconds` : "the whole index stays live"}. Summary length window: ${view.summarywindow !== void 0 ? `${view.summarywindow} steps` : "no cap"}. Historysearch index: ${view.historyindex !== false ? "on" : "off"}. Cancelrun rollback: ${view.cancelrollback === "none" ? "none" : "queued"}.`));
|
|
161
|
+
const recallwindow = field("recall index window ms", "number");
|
|
162
|
+
const noteretention = field("notes retention ms", "number");
|
|
163
|
+
const scratchretention = field("scratchpad retention ms", "number");
|
|
164
|
+
const summaryretention = field("summaries retention ms", "number");
|
|
165
|
+
const correctionretention = field("corrections retention ms", "number");
|
|
166
|
+
const summarywindow = field("summary window steps", "number");
|
|
167
|
+
const historyindex = document.createElement("input");
|
|
168
|
+
historyindex.type = "checkbox";
|
|
169
|
+
historyindex.checked = view.historyindex !== false;
|
|
170
|
+
const historylabel = document.createElement("label");
|
|
171
|
+
historylabel.append(historyindex, " build the historysearch index");
|
|
172
|
+
const cancelrollback = document.createElement("select");
|
|
173
|
+
for (const option of ["queued", "none"]) {
|
|
174
|
+
const entry = document.createElement("option");
|
|
175
|
+
entry.value = option;
|
|
176
|
+
entry.textContent = option;
|
|
177
|
+
cancelrollback.append(entry);
|
|
178
|
+
}
|
|
179
|
+
cancelrollback.value = view.cancelrollback === "none" ? "none" : "queued";
|
|
180
|
+
root.append(document.createElement("hr"), recallwindow, noteretention, scratchretention, summaryretention, correctionretention, summarywindow, historylabel, cancelrollback, button("Save session preferences", async () => {
|
|
181
|
+
await request({ kind: "sessions", settings: {
|
|
182
|
+
...recallwindow.value.trim() !== "" ? { recallwindow: Number(recallwindow.value.trim()) } : {},
|
|
183
|
+
...noteretention.value.trim() !== "" ? { noteretention: Number(noteretention.value.trim()) } : {},
|
|
184
|
+
...scratchretention.value.trim() !== "" ? { scratchpadretention: Number(scratchretention.value.trim()) } : {},
|
|
185
|
+
...summaryretention.value.trim() !== "" ? { summaryretention: Number(summaryretention.value.trim()) } : {},
|
|
186
|
+
...correctionretention.value.trim() !== "" ? { correctionretention: Number(correctionretention.value.trim()) } : {},
|
|
187
|
+
...summarywindow.value.trim() !== "" ? { summarywindow: Number(summarywindow.value.trim()) } : {},
|
|
188
|
+
historyindex: historyindex.checked,
|
|
189
|
+
cancelrollback: cancelrollback.value
|
|
190
|
+
} });
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
async function rendersessionoptionsview() {
|
|
194
|
+
const context = await request({ kind: "context" });
|
|
195
|
+
rendersessionoptions({ ...context.sessionpreferences ?? {}, ...context.sessionview !== void 0 ? { historyindex: context.sessionview.historyindex, ...context.sessionview.cancelrollback !== void 0 ? { cancelrollback: context.sessionview.cancelrollback } : {} } : {} });
|
|
196
|
+
}
|
|
197
|
+
void rendersessionoptionsview().catch((error) => reportstatus(error instanceof Error ? error.message : String(error)));
|
|
156
198
|
//# sourceMappingURL=transparencypage.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../transparencypage.ts"],
|
|
4
|
-
"sourcesContent": ["/** The transparencypage of the 1.1.62 family: the declared options surface lists every active grant with its origin, scope and boundary beside a revoke action, every consent window ever granted with its expiry, the connectallow entries with their senders, the permdiff of each installed update, the safedefaults applications and the secretvault labels; the options manage vault entries with add, label and delete only, the connectallow senders, the ratelimit buckets per origin, the phishguard threshold and the redactshot regions with their geometry, and no surface ever displays or exports a secret value. */\n\ntype transparencyview = {\n version: string;\n posture: string;\n grants: Array<{ origin: string; scope: string; boundary: string; grantedat: number }>;\n windows: Array<{ id: string; origin: string; state: string; boundary: string; startedat: number; expiresat: number }>;\n connectallow: Array<{ senderid: string; displayname: string; origin?: string; addedat: number }>;\n permdiffs: Array<{ fromversion: string; toversion: string; added: string[]; removed: string[]; computedat: number }>;\n safedefaults: Array<{ origin: string; firstseenat: number }>;\n vault: Array<{ vaultid: string; label: string; scope: string; provenance: string; createdat: number; lastusedat?: number }>;\n};\n\ntype securityview = {\n vault?: Array<{ vaultid: string; label: string; scope: string; provenance: string; createdat: number; lastusedat?: number }>;\n connectallow?: Array<{ senderid: string; displayname: string; origin?: string; addedat: number }>;\n phishverdicts?: Array<{ origin: string; matchedorigin?: string; distance: number; threshold: number; blocked: boolean; reason: string; at: number }>;\n deferred?: Array<{ stepid: string; kind: string; origin: string; reason: string; resetsat: number; at: number }>;\n phishdistance?: number;\n redactregions?: Array<{ id: string; origin: string; template: string; x: number; y: number; width: number; height: number; reason: string; source: string; createdat: number }>;\n};\n\n/** Sends one reviewed message to the background and returns its value. */\nasync function request<T>(message: Record<string, unknown>): Promise<T> {\n const answer = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: T; error?: string };\n if (!answer.ok) throw new Error(answer.error ?? \"The background request failed.\");\n return answer.value as T;\n}\n\nfunction line(text: string): HTMLElement {\n const node = document.createElement(\"p\");\n node.textContent = text;\n return node;\n}\n\nfunction button(label: string, action: () => Promise<void>): HTMLButtonElement {\n const node = document.createElement(\"button\");\n node.type = \"button\";\n node.textContent = label;\n node.addEventListener(\"click\", () => { void action().then(() => render()).catch(error => reportstatus(error instanceof Error ? error.message : String(error))); });\n return node;\n}\n\nfunction field(placeholder: string, kind: \"text\" | \"number\" = \"text\"): HTMLInputElement {\n const node = document.createElement(\"input\");\n node.type = kind;\n node.placeholder = placeholder;\n node.style.marginRight = \"0.4rem\";\n return node;\n}\n\nfunction reportstatus(text: string): void {\n const node = document.querySelector<HTMLElement>(\"#status\") ?? document.createElement(\"p\");\n node.id = \"status\";\n node.textContent = text;\n if (!node.isConnected) document.querySelector(\"main\")?.prepend(node);\n}\n\nasync function render(): Promise<void> {\n const report = await request<transparencyview>({ kind: \"transparency\" });\n const security = await request<securityview>({ kind: \"security\" });\n\n const grantsroot = document.querySelector<HTMLElement>(\"#grants\");\n if (grantsroot) {\n grantsroot.replaceChildren();\n if (report.grants.length === 0) grantsroot.append(line(\"No active grant exists; the denydefault posture refuses every origin.\"));\n for (const grant of report.grants) {\n const row = line(`${grant.origin} \u2014 ${grant.scope} \u2014 boundary ${grant.boundary} \u2014 granted ${new Date(grant.grantedat).toLocaleString()}`);\n row.append(\" \", button(\"Revoke allowlist grant\", async () => { await request({ kind: \"security\", allowlist: { remove: { origin: grant.origin } } }); }));\n grantsroot.append(row);\n }\n }\n\n const windowsroot = document.querySelector<HTMLElement>(\"#windows\");\n if (windowsroot) {\n windowsroot.replaceChildren();\n if (report.windows.length === 0) windowsroot.append(line(\"No consent window was ever granted.\"));\n for (const window of report.windows) windowsroot.append(line(`${window.origin} \u2014 ${window.state} \u2014 boundary ${window.boundary} \u2014 started ${new Date(window.startedat).toLocaleString()} \u2014 expiry ${new Date(window.expiresat).toLocaleString()}`));\n }\n\n const sendersroot = document.querySelector<HTMLElement>(\"#senders\");\n if (sendersroot) {\n sendersroot.replaceChildren();\n if ((security.connectallow ?? []).length === 0) sendersroot.append(line(\"The connectallow list ships empty by default; every unknown sender drops without handler execution.\"));\n for (const entry of security.connectallow ?? []) {\n const row = line(`${entry.displayname} (${entry.senderid})${entry.origin !== undefined ? ` of ${entry.origin}` : \"\"} \u2014 allowed ${new Date(entry.addedat).toLocaleString()}`);\n row.append(\" \", button(\"Remove sender\", async () => { await request({ kind: \"security\", connectallow: { remove: { senderid: entry.senderid } } }); }));\n sendersroot.append(row);\n }\n const senderid = field(\"sender id\");\n const displayname = field(\"display name\");\n const origin = field(\"origin (optional)\");\n sendersroot.append(document.createElement(\"hr\"), senderid, displayname, origin, button(\"Allow external sender\", async () => {\n await request({ kind: \"security\", connectallow: { add: { senderid: senderid.value.trim(), displayname: displayname.value.trim(), ...(origin.value.trim() !== \"\" ? { origin: origin.value.trim() } : {}) } } });\n }));\n }\n\n const permdiffsroot = document.querySelector<HTMLElement>(\"#permdiffs\");\n if (permdiffsroot) {\n permdiffsroot.replaceChildren();\n if (report.permdiffs.length === 0) permdiffsroot.append(line(\"No installed update recorded a permdiff yet.\"));\n for (const diff of report.permdiffs) permdiffsroot.append(line(`${diff.fromversion} \u2192 ${diff.toversion} \u2014 added ${diff.added.length > 0 ? diff.added.join(\", \") : \"nothing\"} \u2014 removed ${diff.removed.length > 0 ? diff.removed.join(\", \") : \"nothing\"} \u2014 ${new Date(diff.computedat).toLocaleString()}`));\n }\n\n const safedefaultsroot = document.querySelector<HTMLElement>(\"#safedefaults\");\n if (safedefaultsroot) {\n safedefaultsroot.replaceChildren();\n if (report.safedefaults.length === 0) safedefaultsroot.append(line(\"No unknown origin received the safedefaults profile yet.\"));\n for (const application of report.safedefaults) safedefaultsroot.append(line(`${application.origin} \u2014 first seen ${new Date(application.firstseenat).toLocaleString()} \u2014 reads only, every sensitive class denied`));\n }\n\n const vaultroot = document.querySelector<HTMLElement>(\"#vault\");\n if (vaultroot) {\n vaultroot.replaceChildren();\n if (report.vault.length === 0) vaultroot.append(line(\"The secretvault holds no entry; values live behind the vault seam and never persist.\"));\n for (const entry of report.vault) {\n const row = line(`${entry.label} \u2014 ${entry.scope} \u2014 ${entry.provenance} \u2014 stored ${new Date(entry.createdat).toLocaleString()}${entry.lastusedat !== undefined ? ` \u2014 last used ${new Date(entry.lastusedat).toLocaleString()}` : \"\"} \u2014 the value never displays or exports`);\n row.append(\" \", button(\"Delete\", async () => { await request({ kind: \"security\", vault: { delete: { vaultid: entry.vaultid } } }); }));\n vaultroot.append(row);\n }\n const label = field(\"label\");\n const scope = field(\"origin scope\");\n const value = document.createElement(\"input\");\n value.type = \"password\";\n value.placeholder = \"value (stays behind the vault)\";\n value.style.marginRight = \"0.4rem\";\n vaultroot.append(document.createElement(\"hr\"), label, scope, value, button(\"Store secret\", async () => {\n await request({ kind: \"security\", vault: { add: { label: label.value.trim(), scope: scope.value.trim(), value: value.value } } });\n value.value = \"\";\n }));\n }\n\n const ratelimitroot = document.querySelector<HTMLElement>(\"#ratelimit\");\n if (ratelimitroot) {\n ratelimitroot.replaceChildren();\n if ((security.deferred ?? []).length > 0) for (const deferred of security.deferred ?? []) ratelimitroot.append(line(`Deferred: the ${deferred.kind} step ${deferred.stepid} on ${deferred.origin} waits for the bucket reset at ${new Date(deferred.resetsat).toLocaleTimeString()}.`));\n else ratelimitroot.append(line(\"No deferred command waits for a bucket reset.\"));\n const origin = field(\"origin\");\n const limit = field(\"limit\", \"number\");\n const window = field(\"window ms\", \"number\");\n ratelimitroot.append(document.createElement(\"hr\"), origin, limit, window, button(\"Configure bucket\", async () => {\n await request({ kind: \"security\", ratelimit: { set: { origin: origin.value.trim(), limit: Number(limit.value.trim()), window: Number(window.value.trim()) } } });\n }), \" \", button(\"Remove bucket\", async () => { await request({ kind: \"security\", ratelimit: { remove: { origin: origin.value.trim() } } }); }));\n }\n\n const phishroot = document.querySelector<HTMLElement>(\"#phishguard\");\n if (phishroot) {\n phishroot.replaceChildren();\n if ((security.phishverdicts ?? []).length === 0) phishroot.append(line(\"No phishguard verdict exists yet; a credential step on a new origin records the first one.\"));\n for (const verdict of security.phishverdicts ?? []) phishroot.append(line(`${verdict.origin}${verdict.matchedorigin !== undefined ? ` sits ${verdict.distance} from ${verdict.matchedorigin}` : ` sits ${verdict.distance} from the closest granted origin`} under the threshold ${verdict.threshold}${verdict.blocked ? \" \u2014 blocked\" : \"\"}.`));\n const threshold = field(\"distance threshold 0..1\", \"number\");\n phishroot.append(document.createElement(\"hr\"), threshold, button(\"Save threshold\", async () => {\n await request({ kind: \"security\", settings: { phishdistance: Number(threshold.value.trim()) } });\n }));\n }\n\n const redactroot = document.querySelector<HTMLElement>(\"#redact\");\n if (redactroot) {\n redactroot.replaceChildren();\n if ((security.redactregions ?? []).length === 0) redactroot.append(line(\"No redactshot region exists yet; draw one and the capture seam masks it across viewport, element and stitched captures.\"));\n for (const region of security.redactregions ?? []) {\n const row = line(`${region.origin}/${region.template} \u2014 ${region.x},${region.y} of ${region.width}x${region.height} \u2014 ${region.source} \u2014 ${region.reason}`);\n row.append(\" \", button(\"Remove region\", async () => { await request({ kind: \"security\", redact: { remove: { id: region.id } } }); }));\n redactroot.append(row);\n }\n redactroot.append(line(\"Draw one region with its origin, page template, geometry and reason; the capture seam masks the regions of that origin and template across viewport, element and stitched captures.\"));\n const origin = field(\"origin\");\n const template = field(\"page template\");\n const x = field(\"x\", \"number\");\n const y = field(\"y\", \"number\");\n const width = field(\"width\", \"number\");\n const height = field(\"height\", \"number\");\n const reason = field(\"reason\");\n redactroot.append(origin, template, x, y, width, height, reason, button(\"Draw region\", async () => {\n await request({ kind: \"security\", redact: { add: { origin: origin.value.trim(), template: template.value.trim(), x: Number(x.value.trim()), y: Number(y.value.trim()), width: Number(width.value.trim()), height: Number(height.value.trim()), reason: reason.value.trim() } } });\n }));\n }\n}\n\nrender().catch(error => reportstatus(error instanceof Error ? error.message : String(error)));\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/** The transparencypage of the 1.1.62 family: the declared options surface lists every active grant with its origin, scope and boundary beside a revoke action, every consent window ever granted with its expiry, the connectallow entries with their senders, the permdiff of each installed update, the safedefaults applications and the secretvault labels; the options manage vault entries with add, label and delete only, the connectallow senders, the ratelimit buckets per origin, the phishguard threshold and the redactshot regions with their geometry, and no surface ever displays or exports a secret value. */\n\ntype transparencyview = {\n version: string;\n posture: string;\n grants: Array<{ origin: string; scope: string; boundary: string; grantedat: number }>;\n windows: Array<{ id: string; origin: string; state: string; boundary: string; startedat: number; expiresat: number }>;\n connectallow: Array<{ senderid: string; displayname: string; origin?: string; addedat: number }>;\n permdiffs: Array<{ fromversion: string; toversion: string; added: string[]; removed: string[]; computedat: number }>;\n safedefaults: Array<{ origin: string; firstseenat: number }>;\n vault: Array<{ vaultid: string; label: string; scope: string; provenance: string; createdat: number; lastusedat?: number }>;\n};\n\ntype securityview = {\n vault?: Array<{ vaultid: string; label: string; scope: string; provenance: string; createdat: number; lastusedat?: number }>;\n connectallow?: Array<{ senderid: string; displayname: string; origin?: string; addedat: number }>;\n phishverdicts?: Array<{ origin: string; matchedorigin?: string; distance: number; threshold: number; blocked: boolean; reason: string; at: number }>;\n deferred?: Array<{ stepid: string; kind: string; origin: string; reason: string; resetsat: number; at: number }>;\n phishdistance?: number;\n redactregions?: Array<{ id: string; origin: string; template: string; x: number; y: number; width: number; height: number; reason: string; source: string; createdat: number }>;\n};\n\n/** Sends one reviewed message to the background and returns its value. */\nasync function request<T>(message: Record<string, unknown>): Promise<T> {\n const answer = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: T; error?: string };\n if (!answer.ok) throw new Error(answer.error ?? \"The background request failed.\");\n return answer.value as T;\n}\n\nfunction line(text: string): HTMLElement {\n const node = document.createElement(\"p\");\n node.textContent = text;\n return node;\n}\n\nfunction button(label: string, action: () => Promise<void>): HTMLButtonElement {\n const node = document.createElement(\"button\");\n node.type = \"button\";\n node.textContent = label;\n node.addEventListener(\"click\", () => { void action().then(() => render()).catch(error => reportstatus(error instanceof Error ? error.message : String(error))); });\n return node;\n}\n\nfunction field(placeholder: string, kind: \"text\" | \"number\" = \"text\"): HTMLInputElement {\n const node = document.createElement(\"input\");\n node.type = kind;\n node.placeholder = placeholder;\n node.style.marginRight = \"0.4rem\";\n return node;\n}\n\nfunction reportstatus(text: string): void {\n const node = document.querySelector<HTMLElement>(\"#status\") ?? document.createElement(\"p\");\n node.id = \"status\";\n node.textContent = text;\n if (!node.isConnected) document.querySelector(\"main\")?.prepend(node);\n}\n\nasync function render(): Promise<void> {\n const report = await request<transparencyview>({ kind: \"transparency\" });\n const security = await request<securityview>({ kind: \"security\" });\n\n const grantsroot = document.querySelector<HTMLElement>(\"#grants\");\n if (grantsroot) {\n grantsroot.replaceChildren();\n if (report.grants.length === 0) grantsroot.append(line(\"No active grant exists; the denydefault posture refuses every origin.\"));\n for (const grant of report.grants) {\n const row = line(`${grant.origin} \u2014 ${grant.scope} \u2014 boundary ${grant.boundary} \u2014 granted ${new Date(grant.grantedat).toLocaleString()}`);\n row.append(\" \", button(\"Revoke allowlist grant\", async () => { await request({ kind: \"security\", allowlist: { remove: { origin: grant.origin } } }); }));\n grantsroot.append(row);\n }\n }\n\n const windowsroot = document.querySelector<HTMLElement>(\"#windows\");\n if (windowsroot) {\n windowsroot.replaceChildren();\n if (report.windows.length === 0) windowsroot.append(line(\"No consent window was ever granted.\"));\n for (const window of report.windows) windowsroot.append(line(`${window.origin} \u2014 ${window.state} \u2014 boundary ${window.boundary} \u2014 started ${new Date(window.startedat).toLocaleString()} \u2014 expiry ${new Date(window.expiresat).toLocaleString()}`));\n }\n\n const sendersroot = document.querySelector<HTMLElement>(\"#senders\");\n if (sendersroot) {\n sendersroot.replaceChildren();\n if ((security.connectallow ?? []).length === 0) sendersroot.append(line(\"The connectallow list ships empty by default; every unknown sender drops without handler execution.\"));\n for (const entry of security.connectallow ?? []) {\n const row = line(`${entry.displayname} (${entry.senderid})${entry.origin !== undefined ? ` of ${entry.origin}` : \"\"} \u2014 allowed ${new Date(entry.addedat).toLocaleString()}`);\n row.append(\" \", button(\"Remove sender\", async () => { await request({ kind: \"security\", connectallow: { remove: { senderid: entry.senderid } } }); }));\n sendersroot.append(row);\n }\n const senderid = field(\"sender id\");\n const displayname = field(\"display name\");\n const origin = field(\"origin (optional)\");\n sendersroot.append(document.createElement(\"hr\"), senderid, displayname, origin, button(\"Allow external sender\", async () => {\n await request({ kind: \"security\", connectallow: { add: { senderid: senderid.value.trim(), displayname: displayname.value.trim(), ...(origin.value.trim() !== \"\" ? { origin: origin.value.trim() } : {}) } } });\n }));\n }\n\n const permdiffsroot = document.querySelector<HTMLElement>(\"#permdiffs\");\n if (permdiffsroot) {\n permdiffsroot.replaceChildren();\n if (report.permdiffs.length === 0) permdiffsroot.append(line(\"No installed update recorded a permdiff yet.\"));\n for (const diff of report.permdiffs) permdiffsroot.append(line(`${diff.fromversion} \u2192 ${diff.toversion} \u2014 added ${diff.added.length > 0 ? diff.added.join(\", \") : \"nothing\"} \u2014 removed ${diff.removed.length > 0 ? diff.removed.join(\", \") : \"nothing\"} \u2014 ${new Date(diff.computedat).toLocaleString()}`));\n }\n\n const safedefaultsroot = document.querySelector<HTMLElement>(\"#safedefaults\");\n if (safedefaultsroot) {\n safedefaultsroot.replaceChildren();\n if (report.safedefaults.length === 0) safedefaultsroot.append(line(\"No unknown origin received the safedefaults profile yet.\"));\n for (const application of report.safedefaults) safedefaultsroot.append(line(`${application.origin} \u2014 first seen ${new Date(application.firstseenat).toLocaleString()} \u2014 reads only, every sensitive class denied`));\n }\n\n const vaultroot = document.querySelector<HTMLElement>(\"#vault\");\n if (vaultroot) {\n vaultroot.replaceChildren();\n if (report.vault.length === 0) vaultroot.append(line(\"The secretvault holds no entry; values live behind the vault seam and never persist.\"));\n for (const entry of report.vault) {\n const row = line(`${entry.label} \u2014 ${entry.scope} \u2014 ${entry.provenance} \u2014 stored ${new Date(entry.createdat).toLocaleString()}${entry.lastusedat !== undefined ? ` \u2014 last used ${new Date(entry.lastusedat).toLocaleString()}` : \"\"} \u2014 the value never displays or exports`);\n row.append(\" \", button(\"Delete\", async () => { await request({ kind: \"security\", vault: { delete: { vaultid: entry.vaultid } } }); }));\n vaultroot.append(row);\n }\n const label = field(\"label\");\n const scope = field(\"origin scope\");\n const value = document.createElement(\"input\");\n value.type = \"password\";\n value.placeholder = \"value (stays behind the vault)\";\n value.style.marginRight = \"0.4rem\";\n vaultroot.append(document.createElement(\"hr\"), label, scope, value, button(\"Store secret\", async () => {\n await request({ kind: \"security\", vault: { add: { label: label.value.trim(), scope: scope.value.trim(), value: value.value } } });\n value.value = \"\";\n }));\n }\n\n const ratelimitroot = document.querySelector<HTMLElement>(\"#ratelimit\");\n if (ratelimitroot) {\n ratelimitroot.replaceChildren();\n if ((security.deferred ?? []).length > 0) for (const deferred of security.deferred ?? []) ratelimitroot.append(line(`Deferred: the ${deferred.kind} step ${deferred.stepid} on ${deferred.origin} waits for the bucket reset at ${new Date(deferred.resetsat).toLocaleTimeString()}.`));\n else ratelimitroot.append(line(\"No deferred command waits for a bucket reset.\"));\n const origin = field(\"origin\");\n const limit = field(\"limit\", \"number\");\n const window = field(\"window ms\", \"number\");\n ratelimitroot.append(document.createElement(\"hr\"), origin, limit, window, button(\"Configure bucket\", async () => {\n await request({ kind: \"security\", ratelimit: { set: { origin: origin.value.trim(), limit: Number(limit.value.trim()), window: Number(window.value.trim()) } } });\n }), \" \", button(\"Remove bucket\", async () => { await request({ kind: \"security\", ratelimit: { remove: { origin: origin.value.trim() } } }); }));\n }\n\n const phishroot = document.querySelector<HTMLElement>(\"#phishguard\");\n if (phishroot) {\n phishroot.replaceChildren();\n if ((security.phishverdicts ?? []).length === 0) phishroot.append(line(\"No phishguard verdict exists yet; a credential step on a new origin records the first one.\"));\n for (const verdict of security.phishverdicts ?? []) phishroot.append(line(`${verdict.origin}${verdict.matchedorigin !== undefined ? ` sits ${verdict.distance} from ${verdict.matchedorigin}` : ` sits ${verdict.distance} from the closest granted origin`} under the threshold ${verdict.threshold}${verdict.blocked ? \" \u2014 blocked\" : \"\"}.`));\n const threshold = field(\"distance threshold 0..1\", \"number\");\n phishroot.append(document.createElement(\"hr\"), threshold, button(\"Save threshold\", async () => {\n await request({ kind: \"security\", settings: { phishdistance: Number(threshold.value.trim()) } });\n }));\n }\n\n const redactroot = document.querySelector<HTMLElement>(\"#redact\");\n if (redactroot) {\n redactroot.replaceChildren();\n if ((security.redactregions ?? []).length === 0) redactroot.append(line(\"No redactshot region exists yet; draw one and the capture seam masks it across viewport, element and stitched captures.\"));\n for (const region of security.redactregions ?? []) {\n const row = line(`${region.origin}/${region.template} \u2014 ${region.x},${region.y} of ${region.width}x${region.height} \u2014 ${region.source} \u2014 ${region.reason}`);\n row.append(\" \", button(\"Remove region\", async () => { await request({ kind: \"security\", redact: { remove: { id: region.id } } }); }));\n redactroot.append(row);\n }\n redactroot.append(line(\"Draw one region with its origin, page template, geometry and reason; the capture seam masks the regions of that origin and template across viewport, element and stitched captures.\"));\n const origin = field(\"origin\");\n const template = field(\"page template\");\n const x = field(\"x\", \"number\");\n const y = field(\"y\", \"number\");\n const width = field(\"width\", \"number\");\n const height = field(\"height\", \"number\");\n const reason = field(\"reason\");\n redactroot.append(origin, template, x, y, width, height, reason, button(\"Draw region\", async () => {\n await request({ kind: \"security\", redact: { add: { origin: origin.value.trim(), template: template.value.trim(), x: Number(x.value.trim()), y: Number(y.value.trim()), width: Number(width.value.trim()), height: Number(height.value.trim()), reason: reason.value.trim() } } });\n }));\n }\n}\n\nrender().catch(error => reportstatus(error instanceof Error ? error.message : String(error)));\n\ntype sessionoptionsview = {\n recallwindow?: number;\n noteretention?: number;\n scratchpadretention?: number;\n summaryretention?: number;\n correctionretention?: number;\n summarywindow?: number;\n historyindex?: boolean;\n cancelrollback?: string;\n};\n\n/** Renders the session interface options of the 1.1.63 family: the semantic recall index window, the retention windows of the notes, the scratchpad, the summaries and the corrections, the runsummary length window, the historysearch index toggle and the cancelrun rollback preference \u2014 every value stays a user choice with no engine cap. */\nfunction rendersessionoptions(view: sessionoptionsview): void {\n const root = document.querySelector<HTMLElement>(\"#sessionoptions\");\n if (!root) return;\n root.replaceChildren();\n root.append(line(`Recall index window: ${view.recallwindow !== undefined ? `${view.recallwindow} milliseconds` : \"the whole index stays live\"}. Summary length window: ${view.summarywindow !== undefined ? `${view.summarywindow} steps` : \"no cap\"}. Historysearch index: ${view.historyindex !== false ? \"on\" : \"off\"}. Cancelrun rollback: ${view.cancelrollback === \"none\" ? \"none\" : \"queued\"}.`));\n const recallwindow = field(\"recall index window ms\", \"number\");\n const noteretention = field(\"notes retention ms\", \"number\");\n const scratchretention = field(\"scratchpad retention ms\", \"number\");\n const summaryretention = field(\"summaries retention ms\", \"number\");\n const correctionretention = field(\"corrections retention ms\", \"number\");\n const summarywindow = field(\"summary window steps\", \"number\");\n const historyindex = document.createElement(\"input\");\n historyindex.type = \"checkbox\";\n historyindex.checked = view.historyindex !== false;\n const historylabel = document.createElement(\"label\");\n historylabel.append(historyindex, \" build the historysearch index\");\n const cancelrollback = document.createElement(\"select\");\n for (const option of [\"queued\", \"none\"]) {\n const entry = document.createElement(\"option\");\n entry.value = option;\n entry.textContent = option;\n cancelrollback.append(entry);\n }\n cancelrollback.value = view.cancelrollback === \"none\" ? \"none\" : \"queued\";\n root.append(document.createElement(\"hr\"), recallwindow, noteretention, scratchretention, summaryretention, correctionretention, summarywindow, historylabel, cancelrollback, button(\"Save session preferences\", async () => {\n await request({ kind: \"sessions\", settings: {\n ...(recallwindow.value.trim() !== \"\" ? { recallwindow: Number(recallwindow.value.trim()) } : {}),\n ...(noteretention.value.trim() !== \"\" ? { noteretention: Number(noteretention.value.trim()) } : {}),\n ...(scratchretention.value.trim() !== \"\" ? { scratchpadretention: Number(scratchretention.value.trim()) } : {}),\n ...(summaryretention.value.trim() !== \"\" ? { summaryretention: Number(summaryretention.value.trim()) } : {}),\n ...(correctionretention.value.trim() !== \"\" ? { correctionretention: Number(correctionretention.value.trim()) } : {}),\n ...(summarywindow.value.trim() !== \"\" ? { summarywindow: Number(summarywindow.value.trim()) } : {}),\n historyindex: historyindex.checked,\n cancelrollback: cancelrollback.value,\n } });\n }));\n}\n\n/** Loads the session interface preferences through the context report and renders the options surface. */\nasync function rendersessionoptionsview(): Promise<void> {\n const context = await request<{ sessionview?: { historyindex: boolean; cancelrollback?: string }; sessionpreferences?: sessionoptionsview }>({ kind: \"context\" });\n rendersessionoptions({ ...(context.sessionpreferences ?? {}), ...(context.sessionview !== undefined ? { historyindex: context.sessionview.historyindex, ...(context.sessionview.cancelrollback !== undefined ? { cancelrollback: context.sessionview.cancelrollback } : {}) } : {}) });\n}\n\nvoid rendersessionoptionsview().catch(error => reportstatus(error instanceof Error ? error.message : String(error)));\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/extension/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOEjO8Z0PDgQyfvawGcaO2j+o0GLCFTLNj7TkYC/Avo9l2NenMRq7gp90Nfd7E9MViv/OMcCKSYZ5unv12QPRtv31C+a5UQWDFAOP/cH5mwMd6hsayElrSoW8ta+FwFqmr9dIFkn7cQEU3YhZr4Gcbs+ycUHOxVgDA4NBKB0rQ6e9VW5LvTw0isRYUrqM+M72vKxHk9zUIYYn/LGPvottKBYi2GLr0PHSeC2UE+Shmq7vcFIXj6hDjvD4kLJ5sKoUllEcZ1TPuBcnHUQ9ndKA5iktXDQOIJCUJmi7a0YJ2PGg7fvpYfT9k0ai/qZ+pIoRfoOEwE01bPoDn7NjeYnNQIDAQAB",
|
|
4
4
|
"name": "Devthink",
|
|
5
|
-
"version": "1.1.
|
|
5
|
+
"version": "1.1.63",
|
|
6
6
|
"description": "A consent-first bridge for reviewed browser-agent tasks.",
|
|
7
7
|
"permissions": [
|
|
8
8
|
"activeTab",
|