@omg-dev/protocol 0.6.136 → 0.6.137
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.
|
@@ -36,4 +36,68 @@ export declare function formatSessionMentionToken(sessionId: string, title: stri
|
|
|
36
36
|
export declare function sessionRefFromHref(href: string): string | null;
|
|
37
37
|
/** Every reference in `text`, first-appearance order, one entry per session. */
|
|
38
38
|
export declare function parseSessionMentions(text: string): ParsedSessionMention[];
|
|
39
|
+
/**
|
|
40
|
+
* Agents quote a session as a bare short id in inline code (`228efabd`),
|
|
41
|
+
* because that is the form every omg.dev tool returns. The `omg:session_`
|
|
42
|
+
* href for such a span, or null when the text is not a session id. Only the
|
|
43
|
+
* exact 8-hex short form or a full UUID qualifies: anything looser would
|
|
44
|
+
* turn ordinary code into links. A span that looks right but names no
|
|
45
|
+
* session (an 8-char git sha) resolves to nothing, so the tap does nothing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function sessionHrefFromCodespan(text: string): string | null;
|
|
48
|
+
export type SessionIds = {
|
|
49
|
+
sessionId?: string | null;
|
|
50
|
+
nativeSessionId?: string | null;
|
|
51
|
+
/** Shown in place of a bare id when a reference is rendered. */
|
|
52
|
+
title?: string | null;
|
|
53
|
+
};
|
|
54
|
+
/** The subset of OmgClient a reference lookup needs, so tests can fake it. */
|
|
55
|
+
export type SessionRefClient = {
|
|
56
|
+
peekSessions(): SessionIds[] | null;
|
|
57
|
+
listSessions(): Promise<SessionIds[]>;
|
|
58
|
+
transport: {
|
|
59
|
+
request<T>(path: string, init?: RequestInit): Promise<T>;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The one session in `list` that `ref` names. Null when nothing or more than
|
|
64
|
+
* one session matches: a guess would open the wrong transcript.
|
|
65
|
+
*/
|
|
66
|
+
export declare function findSessionRef(ref: string, list: SessionIds[] | null): SessionIds | null;
|
|
67
|
+
/** Full id for a short ref within `list`, or null (see `findSessionRef`). */
|
|
68
|
+
export declare function resolveSessionRef(ref: string, list: SessionIds[] | null): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* The same ladder omg.dev's MCP layer climbs for an agent-facing short id:
|
|
71
|
+
* the sessions already in hand, then the live list, then the durable
|
|
72
|
+
* catalog. Each rung is skipped once a rung below has answered.
|
|
73
|
+
*/
|
|
74
|
+
export declare function lookupSessionRefWith(client: SessionRefClient, ref: string): Promise<SessionIds | null>;
|
|
75
|
+
export declare function resolveSessionRefWith(client: SessionRefClient, ref: string): Promise<string | null>;
|
|
76
|
+
/**
|
|
77
|
+
* The tap handler for a rendered reference, with the router injected.
|
|
78
|
+
*
|
|
79
|
+
* The lookup is asynchronous and the app can switch machine or sign out
|
|
80
|
+
* while it runs. An answer is only acted on when the client it came from is
|
|
81
|
+
* still the registered one: a session id from the previous box must never
|
|
82
|
+
* be pushed onto the new one. Every failure is swallowed here, because a
|
|
83
|
+
* markdown tap has nowhere to report and an unhandled rejection is worse
|
|
84
|
+
* than a tap that does nothing.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createSessionRefOpener(deps: {
|
|
87
|
+
navigate: (sessionId: string) => void;
|
|
88
|
+
resolve?: (client: SessionRefClient, ref: string) => Promise<string | null>;
|
|
89
|
+
lookup?: (client: SessionRefClient, ref: string) => Promise<SessionIds | null>;
|
|
90
|
+
}): {
|
|
91
|
+
register(client: SessionRefClient | null): void;
|
|
92
|
+
/** True when `href` was a session reference and has been taken over. */
|
|
93
|
+
open(href: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* The title to show for `ref`, or null while it is unknown. The first call
|
|
96
|
+
* for a ref starts one lookup; `subscribe` fires when it lands. A ref that
|
|
97
|
+
* names no session, or one without a title, stays null so the caller
|
|
98
|
+
* keeps showing the id.
|
|
99
|
+
*/
|
|
100
|
+
label(ref: string): string | null;
|
|
101
|
+
subscribe(listener: () => void): () => void;
|
|
102
|
+
};
|
|
39
103
|
//# sourceMappingURL=session-mention-token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-mention-token.d.ts","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlF;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAWzE"}
|
|
1
|
+
{"version":3,"file":"session-mention-token.d.ts","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlF;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAWzE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOnE;AAQD,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,IAAI,UAAU,EAAE,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE;QAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC;CACzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAaxF;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEvF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAc5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAChF,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,wEAAwE;IACxE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C,CAqEA"}
|
|
@@ -60,4 +60,158 @@ export function parseSessionMentions(text) {
|
|
|
60
60
|
}
|
|
61
61
|
return out;
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Agents quote a session as a bare short id in inline code (`228efabd`),
|
|
65
|
+
* because that is the form every omg.dev tool returns. The `omg:session_`
|
|
66
|
+
* href for such a span, or null when the text is not a session id. Only the
|
|
67
|
+
* exact 8-hex short form or a full UUID qualifies: anything looser would
|
|
68
|
+
* turn ordinary code into links. A span that looks right but names no
|
|
69
|
+
* session (an 8-char git sha) resolves to nothing, so the tap does nothing.
|
|
70
|
+
*/
|
|
71
|
+
export function sessionHrefFromCodespan(text) {
|
|
72
|
+
const t = text.trim();
|
|
73
|
+
if (/^[0-9a-f]{8}$/i.test(t))
|
|
74
|
+
return `omg:session_${t}`;
|
|
75
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)) {
|
|
76
|
+
return `omg:session_${t}`;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The one session in `list` that `ref` names. Null when nothing or more than
|
|
82
|
+
* one session matches: a guess would open the wrong transcript.
|
|
83
|
+
*/
|
|
84
|
+
export function findSessionRef(ref, list) {
|
|
85
|
+
const lower = ref.toLowerCase();
|
|
86
|
+
const matches = new Map();
|
|
87
|
+
for (const session of list ?? []) {
|
|
88
|
+
for (const candidate of [session.sessionId, session.nativeSessionId]) {
|
|
89
|
+
if (candidate && candidate.toLowerCase().startsWith(lower)) {
|
|
90
|
+
matches.set(session.sessionId ?? candidate, session);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (matches.size !== 1)
|
|
95
|
+
return null;
|
|
96
|
+
const [[id, session]] = [...matches];
|
|
97
|
+
return { ...session, sessionId: id };
|
|
98
|
+
}
|
|
99
|
+
/** Full id for a short ref within `list`, or null (see `findSessionRef`). */
|
|
100
|
+
export function resolveSessionRef(ref, list) {
|
|
101
|
+
return findSessionRef(ref, list)?.sessionId ?? null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The same ladder omg.dev's MCP layer climbs for an agent-facing short id:
|
|
105
|
+
* the sessions already in hand, then the live list, then the durable
|
|
106
|
+
* catalog. Each rung is skipped once a rung below has answered.
|
|
107
|
+
*/
|
|
108
|
+
export async function lookupSessionRefWith(client, ref) {
|
|
109
|
+
const peeked = findSessionRef(ref, client.peekSessions());
|
|
110
|
+
if (peeked)
|
|
111
|
+
return peeked;
|
|
112
|
+
const listed = await client.listSessions().catch(() => null);
|
|
113
|
+
const live = findSessionRef(ref, listed);
|
|
114
|
+
if (live)
|
|
115
|
+
return live;
|
|
116
|
+
const found = await client.transport
|
|
117
|
+
.request("/api/sessions/find", {
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers: { "Content-Type": "application/json" },
|
|
120
|
+
body: JSON.stringify({ sessionId: ref, limit: 5 }),
|
|
121
|
+
})
|
|
122
|
+
.catch(() => null);
|
|
123
|
+
return findSessionRef(ref, found?.sessions ?? null);
|
|
124
|
+
}
|
|
125
|
+
export async function resolveSessionRefWith(client, ref) {
|
|
126
|
+
return (await lookupSessionRefWith(client, ref))?.sessionId ?? null;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The tap handler for a rendered reference, with the router injected.
|
|
130
|
+
*
|
|
131
|
+
* The lookup is asynchronous and the app can switch machine or sign out
|
|
132
|
+
* while it runs. An answer is only acted on when the client it came from is
|
|
133
|
+
* still the registered one: a session id from the previous box must never
|
|
134
|
+
* be pushed onto the new one. Every failure is swallowed here, because a
|
|
135
|
+
* markdown tap has nowhere to report and an unhandled rejection is worse
|
|
136
|
+
* than a tap that does nothing.
|
|
137
|
+
*/
|
|
138
|
+
export function createSessionRefOpener(deps) {
|
|
139
|
+
const resolve = deps.resolve ?? resolveSessionRefWith;
|
|
140
|
+
const lookup = deps.lookup ?? lookupSessionRefWith;
|
|
141
|
+
let current = null;
|
|
142
|
+
let generation = 0;
|
|
143
|
+
// Titles belong to the registered client: a switch clears them.
|
|
144
|
+
let labels = new Map();
|
|
145
|
+
const pending = new Set();
|
|
146
|
+
const listeners = new Set();
|
|
147
|
+
const notify = () => {
|
|
148
|
+
for (const listener of listeners)
|
|
149
|
+
listener();
|
|
150
|
+
};
|
|
151
|
+
return {
|
|
152
|
+
register(client) {
|
|
153
|
+
generation += 1;
|
|
154
|
+
current = client;
|
|
155
|
+
const hadLabels = labels.size > 0;
|
|
156
|
+
labels = new Map();
|
|
157
|
+
pending.clear();
|
|
158
|
+
// A reader can trigger registration from inside a render. Tell
|
|
159
|
+
// subscribers later, and only when titles were actually dropped.
|
|
160
|
+
if (hadLabels)
|
|
161
|
+
queueMicrotask(notify);
|
|
162
|
+
},
|
|
163
|
+
label(ref) {
|
|
164
|
+
const key = ref.toLowerCase();
|
|
165
|
+
if (labels.has(key))
|
|
166
|
+
return labels.get(key) ?? null;
|
|
167
|
+
const client = current;
|
|
168
|
+
if (!client)
|
|
169
|
+
return null;
|
|
170
|
+
const known = findSessionRef(ref, client.peekSessions());
|
|
171
|
+
if (known) {
|
|
172
|
+
const title = known.title?.trim() || null;
|
|
173
|
+
labels.set(key, title);
|
|
174
|
+
return title;
|
|
175
|
+
}
|
|
176
|
+
if (pending.has(key))
|
|
177
|
+
return null;
|
|
178
|
+
pending.add(key);
|
|
179
|
+
const startedAt = generation;
|
|
180
|
+
Promise.resolve()
|
|
181
|
+
.then(() => lookup(client, ref))
|
|
182
|
+
.catch(() => null)
|
|
183
|
+
.then((session) => {
|
|
184
|
+
if (current !== client || generation !== startedAt)
|
|
185
|
+
return;
|
|
186
|
+
pending.delete(key);
|
|
187
|
+
labels.set(key, session?.title?.trim() || null);
|
|
188
|
+
notify();
|
|
189
|
+
});
|
|
190
|
+
return null;
|
|
191
|
+
},
|
|
192
|
+
subscribe(listener) {
|
|
193
|
+
listeners.add(listener);
|
|
194
|
+
return () => {
|
|
195
|
+
listeners.delete(listener);
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
open(href) {
|
|
199
|
+
const ref = sessionRefFromHref(href);
|
|
200
|
+
if (!ref)
|
|
201
|
+
return false;
|
|
202
|
+
const client = current;
|
|
203
|
+
if (!client)
|
|
204
|
+
return true;
|
|
205
|
+
const startedAt = generation;
|
|
206
|
+
Promise.resolve()
|
|
207
|
+
.then(() => resolve(client, ref))
|
|
208
|
+
.then((full) => {
|
|
209
|
+
if (full && current === client && generation === startedAt)
|
|
210
|
+
deps.navigate(full);
|
|
211
|
+
})
|
|
212
|
+
.catch(() => { });
|
|
213
|
+
return true;
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
63
217
|
//# sourceMappingURL=session-mention-token.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-mention-token.js","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,SAAS,GAAG,+EAA+E,CAAC;AAClG,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAE3C,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,MAAM,CAAC,4CAA4C,WAAW,MAAM,EAAE,GAAG,CAAC,CAAC;AACxF,CAAC;AAQD,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,KAAa;IACxE,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IACjD,OAAO,KAAK,KAAK,iBAAiB,GAAG,GAAG,CAAC;AAC3C,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,iBAAiB,WAAW,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"session-mention-token.js","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"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"}
|