@omg-dev/app 0.1.323 → 0.1.325
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/dist-lib/{ChangelogPage-CgwS9K1R.js → ChangelogPage-BbMkeM-k.js} +42 -1
- package/dist-lib/{SessionFilesPanel-vAGfdiqD.js → SessionFilesPanel-CO7GeudW.js} +1 -1
- package/dist-lib/{TermView-DLKQl-yl.js → TermView-CW03or0l.js} +1 -1
- package/dist-lib/{chat-engine-BllXgEia.js → chat-engine-Cw53pOrb.js} +1 -1
- package/dist-lib/{coding-agents-page-78HnFaOD.js → coding-agents-page-Bq951kv9.js} +1 -1
- package/dist-lib/{embedded-BgLSMF4E.js → embedded-B_CV8zzR.js} +2175 -2151
- package/dist-lib/{highlighted-body-OFNGDK62-DI8qFchC.js → highlighted-body-OFNGDK62-BFHCVYnY.js} +1 -1
- package/dist-lib/{index-DbqbmqNj.js → index-DNB8RA4N.js} +1 -1
- package/dist-lib/index.d.ts +49 -0
- package/dist-lib/index.js +1 -1
- package/dist-lib/mermaid-GHXKKRXX-DbAgzNwG.js +4 -0
- package/dist-lib/{resume-session-sheet-D5RZ8bwQ.js → resume-session-sheet-Cezw8wk-.js} +1 -1
- package/dist-lib/{session-token-usage-CFXPavjx.js → session-token-usage-DnxWQClQ.js} +1 -1
- package/dist-lib/{shipped-page-DWKpmjtx.js → shipped-page-BlyiY5sW.js} +1 -1
- package/dist-lib/{streamdown-response-BaisNaaU.js → streamdown-response-C7vdsjzr.js} +4 -4
- package/dist-lib/sw.js +16 -2
- package/package.json +2 -2
- package/dist-lib/mermaid-GHXKKRXX-CV6iAjsp.js +0 -4
package/dist-lib/{highlighted-body-OFNGDK62-DI8qFchC.js → highlighted-body-OFNGDK62-BFHCVYnY.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as c, L as f, A as d } from "./streamdown-response-
|
|
1
|
+
import { R as c, L as f, A as d } from "./streamdown-response-C7vdsjzr.js";
|
|
2
2
|
import { useContext as p, useState as L, useEffect as N } from "react";
|
|
3
3
|
import { jsx as x } from "react/jsx-runtime";
|
|
4
4
|
var A = ({ code: s, language: e, raw: a, className: o, startLine: m, lineNumbers: u, ...g }) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { w as T, s as U, h as X, c as Y, v as G, S as J, o as k, l as Q, f as M, m as y } from "./streamdown-response-
|
|
1
|
+
import { w as T, s as U, h as X, c as Y, v as G, S as J, o as k, l as Q, f as M, m as y } from "./streamdown-response-C7vdsjzr.js";
|
|
2
2
|
import v from "./katex-jHfnQmlp.js";
|
|
3
3
|
function Z(t, e) {
|
|
4
4
|
return B(t, {}) || { type: "root", children: [] };
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -25,6 +25,41 @@ export interface OmgErrorSink {
|
|
|
25
25
|
appVersion?: string;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Push notifications in an embedded surface.
|
|
30
|
+
*
|
|
31
|
+
* The machine encrypts each notice INTO the push (RFC 8291), so the worker that
|
|
32
|
+
* receives it needs no callback to the machine — which matters here, because
|
|
33
|
+
* the receiving worker belongs to the HOST's origin, where the machine's
|
|
34
|
+
* /api/push/pending does not exist.
|
|
35
|
+
*
|
|
36
|
+
* A host that wants notifications only has to render the decrypted message in
|
|
37
|
+
* its own service worker:
|
|
38
|
+
*
|
|
39
|
+
* self.addEventListener("push", (event) => {
|
|
40
|
+
* const n = event.data?.json();
|
|
41
|
+
* if (!n?.title) return;
|
|
42
|
+
* event.waitUntil(self.registration.showNotification(n.title, {
|
|
43
|
+
* body: n.body || "",
|
|
44
|
+
* tag: n.tag,
|
|
45
|
+
* requireInteraction: !!n.requireInteraction,
|
|
46
|
+
* data: { url: n.url },
|
|
47
|
+
* }));
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* `url` arrives absolute, resolved against the origin the device subscribed
|
|
51
|
+
* from. The host never sees the notification text — it is encrypted end to end
|
|
52
|
+
* between the machine and the device.
|
|
53
|
+
*/
|
|
54
|
+
export interface OmgPushNotification {
|
|
55
|
+
title: string;
|
|
56
|
+
body?: string;
|
|
57
|
+
/** Absolute deep link into the surface the device subscribed from. */
|
|
58
|
+
url?: string;
|
|
59
|
+
tag?: string;
|
|
60
|
+
requireInteraction?: boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
28
63
|
/** Presentation-only identity supplied by an embedding host. */
|
|
29
64
|
export interface EmbeddedViewer {
|
|
30
65
|
id: string;
|
|
@@ -48,9 +83,23 @@ export interface OmgAppSurfaceProps {
|
|
|
48
83
|
* session ownership, filtering, or authorization semantics.
|
|
49
84
|
*/
|
|
50
85
|
viewer?: EmbeddedViewer;
|
|
86
|
+
/**
|
|
87
|
+
* Route dictation audio to the host's own transcription broker instead of to
|
|
88
|
+
* the LFG server this UI was served from. A hosted surface should set this:
|
|
89
|
+
* transcription is funded and metered by the platform, so it must not depend
|
|
90
|
+
* on a provider key the connected machine may or may not hold.
|
|
91
|
+
*/
|
|
92
|
+
hostedTranscription?: HostedTranscription;
|
|
51
93
|
errorSink?: OmgErrorSink;
|
|
52
94
|
}
|
|
53
95
|
|
|
96
|
+
export interface HostedTranscription {
|
|
97
|
+
/** Absolute wss:// URL of the transcription broker. */
|
|
98
|
+
url: string;
|
|
99
|
+
/** Fresh viewer JWT, or null when the session can no longer be proven. */
|
|
100
|
+
getToken: () => Promise<string | null>;
|
|
101
|
+
}
|
|
102
|
+
|
|
54
103
|
export declare function OmgAppSurface(
|
|
55
104
|
props: OmgAppSurfaceProps,
|
|
56
105
|
): JSX.Element;
|
package/dist-lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as t, jsxs as s, Fragment as N } from "react/jsx-runtime";
|
|
2
|
-
import { r as H, n as Q, a as le, o as re, p as oe, q as ie, X, A, f as u, R as B, s as ce, u as de, v as J, T as ue, w as me, x as he, y as pe, L as fe } from "./embedded-
|
|
2
|
+
import { r as H, n as Q, a as le, o as re, p as oe, q as ie, X, A, f as u, R as B, s as ce, u as de, v as J, T as ue, w as me, x as he, y as pe, L as fe } from "./embedded-B_CV8zzR.js";
|
|
3
3
|
import { useState as a, useRef as L, useEffect as v, useCallback as ge } from "react";
|
|
4
4
|
function we({
|
|
5
5
|
initial: m,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as s, jsxs as n, Fragment as $ } from "react/jsx-runtime";
|
|
2
|
-
import { a as C, D as T, b as M, c as D, d as S, G as F, e as L, t as R, L as j, f as z } from "./embedded-
|
|
2
|
+
import { a as C, D as T, b as M, c as D, d as S, G as F, e as L, t as R, L as j, f as z } from "./embedded-B_CV8zzR.js";
|
|
3
3
|
import { useState as g, useCallback as P, useEffect as U } from "react";
|
|
4
4
|
function u({
|
|
5
5
|
title: r,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as l, jsx as r, Fragment as me } from "react/jsx-runtime";
|
|
2
2
|
import { useState as f, useEffect as w, useRef as fe, useContext as $e, useMemo as ze } from "react";
|
|
3
|
-
import { z as ve, O as he, Q as Te, U as S, V as ge, W as Se, Y as Pe, Z as je, B as Fe, L as pe, v as J, y as Ye, R as Ge, f as P, T as Be, _ as Ke, k as be, g as Ue, $ as He, a as L, a0 as k, a1 as R, l as _, a2 as W, a3 as Ve, a4 as qe, a5 as Qe, a6 as Xe, P as Je, a7 as We } from "./embedded-
|
|
3
|
+
import { z as ve, O as he, Q as Te, U as S, V as ge, W as Se, Y as Pe, Z as je, B as Fe, L as pe, v as J, y as Ye, R as Ge, f as P, T as Be, _ as Ke, k as be, g as Ue, $ as He, a as L, a0 as k, a1 as R, l as _, a2 as W, a3 as Ve, a4 as qe, a5 as Qe, a6 as Xe, P as Je, a7 as We } from "./embedded-B_CV8zzR.js";
|
|
4
4
|
/**
|
|
5
5
|
* @license lucide-react v0.577.0 - ISC
|
|
6
6
|
*
|
|
@@ -3,7 +3,7 @@ var Od = (e, t, n) => t in e ? Rd(e, t, { enumerable: !0, configurable: !0, writ
|
|
|
3
3
|
var le = (e, t, n) => Od(e, typeof t != "symbol" ? t + "" : t, n);
|
|
4
4
|
import { jsx as y, jsxs as J, Fragment as _t } from "react/jsx-runtime";
|
|
5
5
|
import { memo as he, useId as Dd, useTransition as Pd, useMemo as Ee, useRef as Re, useEffect as De, useState as ge, createElement as Xa, isValidElement as Vt, cloneElement as Md, useContext as Pe, createContext as Jt, useCallback as ze, Suspense as wi, lazy as Zu } from "react";
|
|
6
|
-
import { ad as Ju, f as eo, a8 as vd, m as Bd, a9 as Fd } from "./embedded-
|
|
6
|
+
import { ad as Ju, f as eo, a8 as vd, m as Bd, a9 as Fd } from "./embedded-B_CV8zzR.js";
|
|
7
7
|
import { createPortal as to } from "react-dom";
|
|
8
8
|
import { f as Ur, p as Ka, e as Za, g as Ja, h as Jn, s as Mt, z as no, i as ro, j as io, k as Hd, l as es, w as Ud, b as zd, c as $d, m as jd, d as qd } from "./engine-compile-BeZvvx0I.js";
|
|
9
9
|
import { g as ao } from "./_commonjsHelpers-C6fGbg64.js";
|
|
@@ -18959,7 +18959,7 @@ var yc = Jt(!1), kk = () => Pe(yc), Ua = (...e) => nc(Ju(e)), xk = (e, t) => {
|
|
|
18959
18959
|
for (; t > 0 && e[t - 1] === `
|
|
18960
18960
|
`; ) t--;
|
|
18961
18961
|
return e.slice(0, t);
|
|
18962
|
-
}, wk = Zu(() => import("./highlighted-body-OFNGDK62-
|
|
18962
|
+
}, wk = Zu(() => import("./highlighted-body-OFNGDK62-BFHCVYnY.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), Lk = ({ code: e, language: t, className: n, children: r, isIncomplete: i = !1, startLine: a, lineNumbers: s, ...u }) => {
|
|
18963
18963
|
let o = ee(), l = Ee(() => Sk(e), [e]), d = Ee(() => ({ bg: "transparent", fg: "inherit", tokens: l.split(`
|
|
18964
18964
|
`).map((f) => [{ content: f, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [l]);
|
|
18965
18965
|
return y(Cc.Provider, { value: { code: e }, children: J(Ik, { isIncomplete: i, language: t, children: [y(Nk, { language: t }), r ? y("div", { className: o("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"), children: y("div", { className: o("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"), "data-streamdown": "code-block-actions", children: r }) }) : null, y(wi, { fallback: y(Ck, { className: n, language: t, lineNumbers: s, result: d, startLine: a, ...u }), children: y(wk, { className: n, code: l, language: t, lineNumbers: s, raw: d, startLine: a, ...u }) })] }) });
|
|
@@ -19301,7 +19301,7 @@ var yc = Jt(!1), kk = () => Pe(yc), Ua = (...e) => nc(Ju(e)), xk = (e, t) => {
|
|
|
19301
19301
|
}, Zk = ({ children: e, className: t, showControls: n, showCopy: r = !0, showDownload: i = !0, showFullscreen: a = !0, ...s }) => {
|
|
19302
19302
|
let u = ee(), o = n && r, l = n && i, d = n && a, f = o || l || d;
|
|
19303
19303
|
return J("div", { className: u("my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2"), "data-streamdown": "table-wrapper", children: [f ? J("div", { className: u("flex items-center justify-end gap-1"), children: [o ? y(Rc, {}) : null, l ? y(Oc, {}) : null, d ? y(Kk, { showCopy: o, showDownload: l, children: e }) : null] }) : null, y("div", { className: u("border-collapse overflow-x-auto overflow-y-auto rounded-md border border-border bg-background"), children: y("table", { className: u("w-full divide-y divide-border", t), "data-streamdown": "table", ...s, children: e }) })] });
|
|
19304
|
-
}, Jk = /startLine=(\d+)/, ex = /\bnoLineNumbers\b/, tx = Zu(() => import("./mermaid-GHXKKRXX-
|
|
19304
|
+
}, Jk = /startLine=(\d+)/, ex = /\bnoLineNumbers\b/, tx = Zu(() => import("./mermaid-GHXKKRXX-DbAgzNwG.js").then((e) => ({ default: e.Mermaid }))), nx = /language-([^\s]+)/;
|
|
19305
19305
|
function Jr(e, t) {
|
|
19306
19306
|
if (!(e != null && e.position || t != null && t.position)) return !0;
|
|
19307
19307
|
if (!(e != null && e.position && t != null && t.position)) return !1;
|
|
@@ -20814,7 +20814,7 @@ function S6(e) {
|
|
|
20814
20814
|
}
|
|
20815
20815
|
function w6() {
|
|
20816
20816
|
return Tr || (Tr = Promise.all([
|
|
20817
|
-
import("./index-
|
|
20817
|
+
import("./index-DNB8RA4N.js"),
|
|
20818
20818
|
import("./index-JkCQXUYs.js").then((e) => e.bp)
|
|
20819
20819
|
]).then(([e, t]) => {
|
|
20820
20820
|
Hn = { math: e.math, mermaid: t.mermaid };
|
package/dist-lib/sw.js
CHANGED
|
@@ -121,6 +121,9 @@ async function showOmgNotification(title, options) {
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
async function showLatest(payload) {
|
|
124
|
+
// Encrypted-payload push: everything needed is in the message, so render it
|
|
125
|
+
// without calling back to the API. This is the path that works when the app
|
|
126
|
+
// is served from an origin that is not the lfg box.
|
|
124
127
|
if (payload?.title) {
|
|
125
128
|
await showOmgNotification(payload.title, {
|
|
126
129
|
body: payload.body || "",
|
|
@@ -128,6 +131,7 @@ async function showLatest(payload) {
|
|
|
128
131
|
badge: "/icon-maskable.svg",
|
|
129
132
|
tag: payload.tag || "lfg",
|
|
130
133
|
renotify: true,
|
|
134
|
+
requireInteraction: !!payload.requireInteraction,
|
|
131
135
|
data: { url: payload.url || "/" },
|
|
132
136
|
});
|
|
133
137
|
return;
|
|
@@ -205,9 +209,19 @@ self.addEventListener("notificationclick", (event) => {
|
|
|
205
209
|
const all = await self.clients.matchAll({ type: "window", includeUncontrolled: true });
|
|
206
210
|
const client = all.find((c) => "focus" in c);
|
|
207
211
|
if (client) {
|
|
208
|
-
|
|
212
|
+
// navigate() rejects for a cross-origin target — which an absolute url
|
|
213
|
+
// from a hosted surface legitimately is. Focus the window regardless,
|
|
214
|
+
// then let openWindow handle the destination we could not navigate to.
|
|
215
|
+
let navigated = true;
|
|
216
|
+
if ("navigate" in client) {
|
|
217
|
+
try {
|
|
218
|
+
await client.navigate(target);
|
|
219
|
+
} catch {
|
|
220
|
+
navigated = false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
209
223
|
await client.focus();
|
|
210
|
-
return;
|
|
224
|
+
if (navigated) return;
|
|
211
225
|
}
|
|
212
226
|
if (self.clients.openWindow) await self.clients.openWindow(target);
|
|
213
227
|
})(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omg-dev/app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.325",
|
|
4
4
|
"description": "The full OMG application surface for React hosts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://omg.dev",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"type": "module",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@omg-dev/client": "0.1.
|
|
27
|
+
"@omg-dev/client": "0.1.325",
|
|
28
28
|
"@ai-sdk/react": "^4.0.19",
|
|
29
29
|
"@base-ui/react": "^1.3.0",
|
|
30
30
|
"@number-flow/react": "^0.6.2",
|