@omg-dev/protocol 0.6.138 → 0.6.140
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/expo-account.d.ts +38 -0
- package/dist/expo-account.d.ts.map +1 -0
- package/dist/expo-account.js +16 -0
- package/dist/expo-account.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/project-preview.d.ts +100 -0
- package/dist/project-preview.d.ts.map +1 -1
- package/dist/project-preview.js +41 -0
- package/dist/project-preview.js.map +1 -1
- package/dist/session-mention-token.d.ts +4 -1
- package/dist/session-mention-token.d.ts.map +1 -1
- package/dist/session-mention-token.js +19 -1
- package/dist/session-mention-token.js.map +1 -1
- package/dist/threads.d.ts +169 -1
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +269 -2
- package/dist/threads.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Expo account of this Computer's Expo CLI, as the preview card sees it.
|
|
3
|
+
*
|
|
4
|
+
* Expo Go on a physical iPhone opens a dev server only when the manifest names
|
|
5
|
+
* the signed-in Expo CLI account (`extra.expoGo.username`) and Expo Go is
|
|
6
|
+
* signed in to the same account. The card checks this before it offers
|
|
7
|
+
* "Open in Expo Go", and offers "Connect Expo" otherwise.
|
|
8
|
+
*
|
|
9
|
+
* TODO(expo-go-58): Expo Go 58 reads `expo_go_prompt_device_auth=1` on the
|
|
10
|
+
* `exps://` link and shows its own "Sign in to Expo Go" sheet (expo/expo#48865).
|
|
11
|
+
* When Expo Go 58 is on the App Store, add it to the "Open in Expo Go" link
|
|
12
|
+
* while `signedIn` is true, so the phone signs in to the same account.
|
|
13
|
+
*/
|
|
14
|
+
export type ExpoConnectState =
|
|
15
|
+
/** `expo login --browser` runs, and the login page is open in the Computer browser. */
|
|
16
|
+
"waiting"
|
|
17
|
+
/** The login finished. The Computer checks the account and the manifest. */
|
|
18
|
+
| "verifying"
|
|
19
|
+
/** Metro restarts so that the manifest names the account. */
|
|
20
|
+
| "restarting" | "done" | "failed" | "cancelled";
|
|
21
|
+
export interface ExpoConnectStatus {
|
|
22
|
+
state: ExpoConnectState;
|
|
23
|
+
startedAt: number;
|
|
24
|
+
/** Short text for the card, for example why the login failed. */
|
|
25
|
+
message?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ExpoAccountSnapshot {
|
|
28
|
+
signedIn: boolean;
|
|
29
|
+
/** The Expo account name, when `signedIn` is true. */
|
|
30
|
+
username?: string;
|
|
31
|
+
/** The last or current "Connect Expo" run on this Computer. */
|
|
32
|
+
connect?: ExpoConnectStatus;
|
|
33
|
+
}
|
|
34
|
+
/** True while a "Connect Expo" run is in progress. */
|
|
35
|
+
export declare function expoConnectActive(status: ExpoConnectStatus | undefined): boolean;
|
|
36
|
+
/** The card text while a "Connect Expo" run is in progress. */
|
|
37
|
+
export declare function expoConnectMessage(status: ExpoConnectStatus): string;
|
|
38
|
+
//# sourceMappingURL=expo-account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expo-account.d.ts","sourceRoot":"","sources":["../src/expo-account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB;AAC1B,uFAAuF;AACrF,SAAS;AACX,4EAA4E;GAC1E,WAAW;AACb,6DAA6D;GAC3D,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAEhF;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CASpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** True while a "Connect Expo" run is in progress. */
|
|
2
|
+
export function expoConnectActive(status) {
|
|
3
|
+
return status?.state === "waiting" || status?.state === "verifying" || status?.state === "restarting";
|
|
4
|
+
}
|
|
5
|
+
/** The card text while a "Connect Expo" run is in progress. */
|
|
6
|
+
export function expoConnectMessage(status) {
|
|
7
|
+
switch (status.state) {
|
|
8
|
+
case "waiting": return "Sign in to Expo in the Computer window…";
|
|
9
|
+
case "verifying": return "Checking the Expo account…";
|
|
10
|
+
case "restarting": return "Restarting the preview with your Expo account…";
|
|
11
|
+
case "done": return status.message ?? "Expo is connected.";
|
|
12
|
+
case "cancelled": return "Expo sign-in was cancelled.";
|
|
13
|
+
case "failed": return status.message ?? "Expo sign-in did not finish. Try again.";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=expo-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expo-account.js","sourceRoot":"","sources":["../src/expo-account.ts"],"names":[],"mappings":"AAuCA,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,MAAqC;IACrE,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE,KAAK,KAAK,WAAW,IAAI,MAAM,EAAE,KAAK,KAAK,YAAY,CAAC;AACxG,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,MAAyB;IAC1D,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,SAAS,EAAE,OAAO,yCAAyC,CAAC;QACjE,KAAK,WAAW,EAAE,OAAO,4BAA4B,CAAC;QACtD,KAAK,YAAY,EAAE,OAAO,gDAAgD,CAAC;QAC3E,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,IAAI,oBAAoB,CAAC;QAC3D,KAAK,WAAW,EAAE,OAAO,6BAA6B,CAAC;QACvD,KAAK,QAAQ,EAAE,OAAO,MAAM,CAAC,OAAO,IAAI,yCAAyC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export type { BrowserLoginRequest, BrowserLoginSnapshot, BrowserLoginCookie } from "./browser-login";
|
|
2
|
-
export type { ProjectPreview, ProjectPreviewSnapshot } from "./project-preview";
|
|
3
|
-
export { PROJECT_PREVIEW_RESTART_MESSAGE } from "./project-preview.js";
|
|
2
|
+
export type { PreviewLevel, ProjectPreview, ProjectPreviewSnapshot, SimulatorStream, SimulatorStreamProvider } from "./project-preview";
|
|
3
|
+
export { inlinePreviewUrl, PREVIEW_LEVEL_LABEL, PROJECT_PREVIEW_RESTART_MESSAGE, PROJECT_PREVIEW_SIMULATOR_PATH, previewLevels, simulatorStatusText } from "./project-preview.js";
|
|
4
|
+
export type { ExpoAccountSnapshot, ExpoConnectState, ExpoConnectStatus } from "./expo-account";
|
|
5
|
+
export { expoConnectActive, expoConnectMessage } from "./expo-account.js";
|
|
4
6
|
export type OmgSessionStatus = "ok" | "blocked";
|
|
5
|
-
export type OmgSessionStatusReason = "model_unavailable" | "out_of_credits" | "provider_auth" | "provider_error" | null;
|
|
7
|
+
export type OmgSessionStatusReason = "model_unavailable" | "out_of_credits" | "provider_auth" | "provider_error" | "interrupted" | "out_of_memory" | null;
|
|
6
8
|
export interface OmgSession {
|
|
7
9
|
agent?: string;
|
|
8
10
|
agentLabel?: string | null;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrG,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { PROJECT_PREVIEW_RESTART_MESSAGE } from "./project-preview.js";
|
|
1
|
+
export { inlinePreviewUrl, PREVIEW_LEVEL_LABEL, PROJECT_PREVIEW_RESTART_MESSAGE, PROJECT_PREVIEW_SIMULATOR_PATH, previewLevels, simulatorStatusText } from "./project-preview.js";
|
|
2
|
+
export { expoConnectActive, expoConnectMessage } from "./expo-account.js";
|
|
2
3
|
export * from "./session-mention-token.js";
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAElL,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA8Q1E,cAAc,4BAA4B,CAAC"}
|
|
@@ -27,7 +27,107 @@ export interface ProjectPreviewSnapshot {
|
|
|
27
27
|
expired?: boolean;
|
|
28
28
|
/** True when the preview has not answered on its port even once. Clients hide the card until then. */
|
|
29
29
|
starting?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Level 2 of the preview card: an iOS Simulator streamed into the page.
|
|
32
|
+
* Present only when the Computer has the simulator flag on
|
|
33
|
+
* (`LFG_PREVIEW_SIMULATOR=1`) and the preview is an Expo app. Clients show
|
|
34
|
+
* the "Simulator" level only when this field is present.
|
|
35
|
+
*/
|
|
36
|
+
simulator?: SimulatorStream;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The three levels of one preview card. "web" is Expo Web from the same Metro
|
|
40
|
+
* server, "simulator" is a streamed iOS Simulator, "device" is Expo Go on the
|
|
41
|
+
* user's own phone. A future "install" level (a signed build for the user's
|
|
42
|
+
* device) goes after "device".
|
|
43
|
+
*/
|
|
44
|
+
export type PreviewLevel = "web" | "simulator" | "device";
|
|
45
|
+
/**
|
|
46
|
+
* One streamed simulator for one preview. The card embeds `streamUrl` (an
|
|
47
|
+
* iframe on the web, a WebView in the app). That page draws the screen and
|
|
48
|
+
* sends taps, typing and swipes itself, so the card needs no input protocol.
|
|
49
|
+
* Until the state is "ready", the card keeps the web preview (level 1) under
|
|
50
|
+
* a status overlay, so the user never sees a blank frame.
|
|
51
|
+
*/
|
|
52
|
+
export interface SimulatorStream {
|
|
53
|
+
/**
|
|
54
|
+
* idle: nothing allocated; the card offers "Start simulator".
|
|
55
|
+
* queued: every simulator is busy. Normal, not an error; see `queuePosition`.
|
|
56
|
+
* starting: allocated, booting or opening the app; see `phase`.
|
|
57
|
+
* ready: `streamUrl` works now.
|
|
58
|
+
* unavailable: no simulator can serve this user now; show `message`.
|
|
59
|
+
* error: the last start failed; show `message` and offer a retry.
|
|
60
|
+
*/
|
|
61
|
+
state: "idle" | "queued" | "starting" | "ready" | "unavailable" | "error";
|
|
62
|
+
/**
|
|
63
|
+
* Identity of the allocated stream. The card reloads its frame only when
|
|
64
|
+
* this changes, not when the token inside `streamUrl` rotates. The stream
|
|
65
|
+
* page renews its own token before `expiresAt`.
|
|
66
|
+
*/
|
|
67
|
+
streamId?: string;
|
|
68
|
+
/**
|
|
69
|
+
* HTTPS page that shows the stream and takes input (touch and mouse). It
|
|
70
|
+
* carries a short-lived token scoped to this user and session. Its origin
|
|
71
|
+
* must allow the omg.dev apps as frame ancestors. Required when "ready".
|
|
72
|
+
*/
|
|
73
|
+
streamUrl?: string;
|
|
74
|
+
/** When the token in `streamUrl` stops working, in epoch milliseconds. */
|
|
75
|
+
expiresAt?: number;
|
|
76
|
+
/** 1 is next. Only when "queued". */
|
|
77
|
+
queuePosition?: number;
|
|
78
|
+
/** Estimated wait until "ready", in milliseconds. "queued" or "starting". */
|
|
79
|
+
etaMs?: number;
|
|
80
|
+
/** The current start step. Only when "starting". Openurl to first frame takes 19 to 54 s, so the card names the step. */
|
|
81
|
+
phase?: "allocating" | "booting" | "opening" | "loading_bundle";
|
|
82
|
+
/** Start progress from 0 to 1, when the provider can tell. */
|
|
83
|
+
progress?: number;
|
|
84
|
+
/** One plain sentence for the user when `state` is "unavailable" or "error". */
|
|
85
|
+
message?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The owner of level 2. The Computer calls it; the card never talks to it
|
|
89
|
+
* directly, and the Computer never holds a Mac credential: the provider calls
|
|
90
|
+
* the control plane with the Computer's binding credential.
|
|
91
|
+
*
|
|
92
|
+
* Release rule: the card polls the snapshot about every 3 seconds, and only
|
|
93
|
+
* while its page is visible. A backgrounded mobile tab sends no unload
|
|
94
|
+
* event, so `stop` is best effort. The provider frees a simulator when it has
|
|
95
|
+
* had no `status` call and no stream viewer for 60 seconds.
|
|
96
|
+
*
|
|
97
|
+
* `preview` carries the Metro URL (`url`) and the Expo Go link (`expoGoUrl`)
|
|
98
|
+
* that the simulator must open.
|
|
99
|
+
*/
|
|
100
|
+
export interface SimulatorStreamProvider {
|
|
101
|
+
/**
|
|
102
|
+
* Cheap; called on every card poll. With `autoStart`, the provider may
|
|
103
|
+
* start a simulator from here when Metro is ready, so the user sees the
|
|
104
|
+
* phone without a tap.
|
|
105
|
+
*/
|
|
106
|
+
status(preview: ProjectPreview): Promise<SimulatorStream>;
|
|
107
|
+
/** The user tapped "Start simulator". Returns the new state: "queued" or "starting". */
|
|
108
|
+
start(preview: ProjectPreview): Promise<SimulatorStream>;
|
|
109
|
+
/** The user left the Simulator level. Best effort; see the release rule. */
|
|
110
|
+
stop(preview: ProjectPreview): Promise<void>;
|
|
111
|
+
/** Start from `status` without a tap. Default off. */
|
|
112
|
+
autoStart?: boolean;
|
|
30
113
|
}
|
|
114
|
+
/** Card action for level 2: POST with `{ sessionId, action: "start" | "stop" }`. Answers with a SimulatorStream. */
|
|
115
|
+
export declare const PROJECT_PREVIEW_SIMULATOR_PATH = "/api/project-preview/simulator";
|
|
31
116
|
/** Message a preview card sends to ask the session agent to start the preview again. */
|
|
32
117
|
export declare const PROJECT_PREVIEW_RESTART_MESSAGE = "The preview stopped. Restart it: start the development server again and expose it with omg_expose_port. For an Expo app, request a new Expo Go link.";
|
|
118
|
+
/** One line for the card while level 2 is not ready. Null when the stream shows. */
|
|
119
|
+
export declare function simulatorStatusText(stream: SimulatorStream): string | null;
|
|
120
|
+
/** The levels a card offers, in order. "simulator" only when the Computer sends its state. */
|
|
121
|
+
export declare function previewLevels(snapshot: Pick<ProjectPreviewSnapshot, "simulator">): PreviewLevel[];
|
|
122
|
+
/** Tab labels, shared by the web and native cards. */
|
|
123
|
+
export declare const PREVIEW_LEVEL_LABEL: Record<PreviewLevel, string>;
|
|
124
|
+
/**
|
|
125
|
+
* The URL an inline frame loads for the web level. The owner URL (`url`)
|
|
126
|
+
* needs the preview sign-in cookie, and an embedded frame does not get it:
|
|
127
|
+
* it is a third-party cookie inside app.omg.dev and inside the app's WebView,
|
|
128
|
+
* so the frame showed "Sign in to continue". The Expo Go host is a signed,
|
|
129
|
+
* short-lived capability URL for the same Metro port, and Metro answers it
|
|
130
|
+
* with the Expo Web page. A plain web preview has no such host and keeps `url`.
|
|
131
|
+
*/
|
|
132
|
+
export declare function inlinePreviewUrl(preview: Pick<ProjectPreview, "url" | "expoGoUrl">): string;
|
|
33
133
|
//# sourceMappingURL=project-preview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-preview.d.ts","sourceRoot":"","sources":["../src/project-preview.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,yHAAyH;IACzH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"project-preview.d.ts","sourceRoot":"","sources":["../src/project-preview.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,yHAAyH;IACzH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1E;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yHAAyH;IACzH,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAChE,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,wFAAwF;IACxF,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,4EAA4E;IAC5E,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,oHAAoH;AACpH,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E,wFAAwF;AACxF,eAAO,MAAM,+BAA+B,yJAC4G,CAAC;AASzJ,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAU1E;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,GAAG,YAAY,EAAE,CAEjG;AAED,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAI5D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,WAAW,CAAC,GAAG,MAAM,CAE3F"}
|
package/dist/project-preview.js
CHANGED
|
@@ -1,3 +1,44 @@
|
|
|
1
|
+
/** Card action for level 2: POST with `{ sessionId, action: "start" | "stop" }`. Answers with a SimulatorStream. */
|
|
2
|
+
export const PROJECT_PREVIEW_SIMULATOR_PATH = "/api/project-preview/simulator";
|
|
1
3
|
/** Message a preview card sends to ask the session agent to start the preview again. */
|
|
2
4
|
export const PROJECT_PREVIEW_RESTART_MESSAGE = "The preview stopped. Restart it: start the development server again and expose it with omg_expose_port. For an Expo app, request a new Expo Go link.";
|
|
5
|
+
const SIMULATOR_PHASE_TEXT = {
|
|
6
|
+
allocating: "Finding a free iPhone simulator…",
|
|
7
|
+
booting: "Starting the iPhone simulator…",
|
|
8
|
+
opening: "Opening your app…",
|
|
9
|
+
loading_bundle: "Loading your app…",
|
|
10
|
+
};
|
|
11
|
+
/** One line for the card while level 2 is not ready. Null when the stream shows. */
|
|
12
|
+
export function simulatorStatusText(stream) {
|
|
13
|
+
const eta = stream.etaMs && stream.etaMs > 0 ? ` About ${Math.max(1, Math.round(stream.etaMs / 1000))} s.` : "";
|
|
14
|
+
switch (stream.state) {
|
|
15
|
+
case "ready": return stream.streamUrl ? null : "Opening the simulator…";
|
|
16
|
+
case "idle": return "See your app on an iPhone simulator.";
|
|
17
|
+
case "queued": return `All simulators are busy. You are number ${stream.queuePosition ?? 1} in line.${eta}`;
|
|
18
|
+
case "starting": return `${stream.phase ? SIMULATOR_PHASE_TEXT[stream.phase] : "Starting the iPhone simulator…"}${eta}`;
|
|
19
|
+
case "unavailable": return stream.message ?? "The simulator is not available now.";
|
|
20
|
+
case "error": return stream.message ?? "The simulator did not start.";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** The levels a card offers, in order. "simulator" only when the Computer sends its state. */
|
|
24
|
+
export function previewLevels(snapshot) {
|
|
25
|
+
return snapshot.simulator ? ["web", "simulator", "device"] : ["web", "device"];
|
|
26
|
+
}
|
|
27
|
+
/** Tab labels, shared by the web and native cards. */
|
|
28
|
+
export const PREVIEW_LEVEL_LABEL = {
|
|
29
|
+
web: "Web",
|
|
30
|
+
simulator: "Simulator",
|
|
31
|
+
device: "Your phone",
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The URL an inline frame loads for the web level. The owner URL (`url`)
|
|
35
|
+
* needs the preview sign-in cookie, and an embedded frame does not get it:
|
|
36
|
+
* it is a third-party cookie inside app.omg.dev and inside the app's WebView,
|
|
37
|
+
* so the frame showed "Sign in to continue". The Expo Go host is a signed,
|
|
38
|
+
* short-lived capability URL for the same Metro port, and Metro answers it
|
|
39
|
+
* with the Expo Web page. A plain web preview has no such host and keeps `url`.
|
|
40
|
+
*/
|
|
41
|
+
export function inlinePreviewUrl(preview) {
|
|
42
|
+
return preview.expoGoUrl?.startsWith("exps://") ? `https://${preview.expoGoUrl.slice("exps://".length)}` : preview.url;
|
|
43
|
+
}
|
|
3
44
|
//# sourceMappingURL=project-preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-preview.js","sourceRoot":"","sources":["../src/project-preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-preview.js","sourceRoot":"","sources":["../src/project-preview.ts"],"names":[],"mappings":"AAsHA,oHAAoH;AACpH,MAAM,CAAC,MAAM,8BAA8B,GAAG,gCAAgC,CAAC;AAE/E,wFAAwF;AACxF,MAAM,CAAC,MAAM,+BAA+B,GAC1C,sJAAsJ,CAAC;AAEzJ,MAAM,oBAAoB,GAA0D;IAClF,UAAU,EAAE,kCAAkC;IAC9C,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,mBAAmB;IAC5B,cAAc,EAAE,mBAAmB;CACpC,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,MAAuB;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,OAAO,EAAE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACxE,KAAK,MAAM,EAAE,OAAO,sCAAsC,CAAC;QAC3D,KAAK,QAAQ,EAAE,OAAO,2CAA2C,MAAM,CAAC,aAAa,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC5G,KAAK,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gCAAgC,GAAG,GAAG,EAAE,CAAC;QACxH,KAAK,aAAa,EAAE,OAAO,MAAM,CAAC,OAAO,IAAI,qCAAqC,CAAC;QACnF,KAAK,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,IAAI,8BAA8B,CAAC;IACxE,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,QAAmD;IAC/E,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAiC;IAC/D,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAkD;IACjF,OAAO,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AACzH,CAAC"}
|
|
@@ -31,7 +31,10 @@ export type ParsedSessionMention = {
|
|
|
31
31
|
};
|
|
32
32
|
/** Titles are free text and may contain link-ending characters. */
|
|
33
33
|
export declare function sanitizeSessionLabel(title: string): string;
|
|
34
|
-
export declare function formatSessionMentionToken(sessionId: string, title: string): string;
|
|
34
|
+
export declare function formatSessionMentionToken(sessionId: string, title: string, kind?: "session" | "thread"): string;
|
|
35
|
+
export declare function formatThreadMentionToken(threadId: string, title: string): string;
|
|
36
|
+
/** The thread id inside an `omg:thread_` link, or null for any other href. */
|
|
37
|
+
export declare function threadRefFromHref(href: string): string | null;
|
|
35
38
|
/** The short ref inside an `omg:session_` link, or null for any other href. */
|
|
36
39
|
export declare function sessionRefFromHref(href: string): string | null;
|
|
37
40
|
/** Every reference in `text`, first-appearance order, one entry per session. */
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"session-mention-token.d.ts","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,11 +35,29 @@ export function sessionMentionPattern() {
|
|
|
35
35
|
export function sanitizeSessionLabel(title) {
|
|
36
36
|
return title.replace(/[[\]()\r\n]/g, " ").replace(/\s+/g, " ").trim();
|
|
37
37
|
}
|
|
38
|
-
export function formatSessionMentionToken(sessionId, title) {
|
|
38
|
+
export function formatSessionMentionToken(sessionId, title, kind = "session") {
|
|
39
|
+
if (kind === "thread")
|
|
40
|
+
return formatThreadMentionToken(sessionId, title);
|
|
39
41
|
const ref = shortSessionRef(sessionId);
|
|
40
42
|
const label = sanitizeSessionLabel(title) || ref;
|
|
41
43
|
return `[#${label}](omg:session_${ref})`;
|
|
42
44
|
}
|
|
45
|
+
// ---- Threads ---------------------------------------------------------------
|
|
46
|
+
//
|
|
47
|
+
// A thread is referenced the same way, `[#Thread title](omg:thread_<id>)`, so
|
|
48
|
+
// the `#` picker can offer both. The id is the full one: a thread link is
|
|
49
|
+
// opened by a client, which has no prefix lookup for threads, and an agent
|
|
50
|
+
// passes it to the thread tools as written (they accept a prefix too).
|
|
51
|
+
const THREAD_ID = "[0-9a-fA-F-]{8,36}";
|
|
52
|
+
export function formatThreadMentionToken(threadId, title) {
|
|
53
|
+
const label = sanitizeSessionLabel(title) || threadId.slice(0, SHORT_LEN);
|
|
54
|
+
return `[#${label}](omg:thread_${threadId})`;
|
|
55
|
+
}
|
|
56
|
+
/** The thread id inside an `omg:thread_` link, or null for any other href. */
|
|
57
|
+
export function threadRefFromHref(href) {
|
|
58
|
+
const match = href.match(new RegExp(`^omg:thread_(${THREAD_ID})$`));
|
|
59
|
+
return match ? match[1] : null;
|
|
60
|
+
}
|
|
43
61
|
/** The short ref inside an `omg:session_` link, or null for any other href. */
|
|
44
62
|
export function sessionRefFromHref(href) {
|
|
45
63
|
const match = href.match(new RegExp(`^omg:session_(${SESSION_REF})$`));
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"session-mention-token.js","sourceRoot":"","sources":["../src/session-mention-token.ts"],"names":[],"mappings":"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"}
|
package/dist/threads.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export type ThreadMessage = {
|
|
|
27
27
|
event: ThreadTaskEvent;
|
|
28
28
|
title?: string | null;
|
|
29
29
|
project?: string | null;
|
|
30
|
+
agent?: string | null;
|
|
30
31
|
};
|
|
31
32
|
/**
|
|
32
33
|
* The top-level message this is a reply to, as in Slack. omg always answers
|
|
@@ -34,9 +35,36 @@ export type ThreadMessage = {
|
|
|
34
35
|
* to the same replies. Absent: a top-level message.
|
|
35
36
|
*/
|
|
36
37
|
replyTo?: string | null;
|
|
38
|
+
/** Pictures, videos and files, drawn under the text as the session chat draws them. */
|
|
39
|
+
media?: ThreadMedia[];
|
|
40
|
+
/** An agent session that posted this as omg (omg_send_thread_message). */
|
|
41
|
+
via?: {
|
|
42
|
+
sessionId: string;
|
|
43
|
+
title?: string | null;
|
|
44
|
+
agent?: string | null;
|
|
45
|
+
};
|
|
37
46
|
/** Client only: sent, not yet stored. */
|
|
38
47
|
pending?: boolean;
|
|
39
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* One picture, video or file in a message. `path` is served by the machine
|
|
51
|
+
* (a thread file, or a task's artifact) and needs the same grant as any
|
|
52
|
+
* other box-served media.
|
|
53
|
+
*/
|
|
54
|
+
export type ThreadMedia = {
|
|
55
|
+
kind: "image" | "video" | "file";
|
|
56
|
+
path: string;
|
|
57
|
+
name?: string | null;
|
|
58
|
+
width?: number | null;
|
|
59
|
+
height?: number | null;
|
|
60
|
+
caption?: string | null;
|
|
61
|
+
};
|
|
62
|
+
/** What a file is, from its name or type, for how a message draws it. */
|
|
63
|
+
export declare function mediaKindFor(name: string, mimeType?: string | null): ThreadMedia["kind"];
|
|
64
|
+
/** Markdown down to the words, for one-line previews and notifications. */
|
|
65
|
+
export declare function plainText(markdown: string): string;
|
|
66
|
+
/** "Photo", "2 photos", "Video", "File": a message's media in a word, for a message with no text. */
|
|
67
|
+
export declare function mediaLabel(media: readonly ThreadMedia[] | undefined): string;
|
|
40
68
|
export type ThreadProject = {
|
|
41
69
|
cwd: string;
|
|
42
70
|
name: string;
|
|
@@ -47,7 +75,7 @@ export type ThreadSummary = {
|
|
|
47
75
|
createdAt: number;
|
|
48
76
|
updatedAt: number;
|
|
49
77
|
project: ThreadProject | null;
|
|
50
|
-
lastMessage: Pick<ThreadMessage, "author" | "text" | "ts"> | null;
|
|
78
|
+
lastMessage: Pick<ThreadMessage, "author" | "text" | "ts" | "media"> | null;
|
|
51
79
|
};
|
|
52
80
|
export type ThreadTaskRow = {
|
|
53
81
|
sessionId: string;
|
|
@@ -57,14 +85,18 @@ export type ThreadTaskRow = {
|
|
|
57
85
|
status: string | null;
|
|
58
86
|
/** Not in the live session list any more. */
|
|
59
87
|
ended: boolean;
|
|
88
|
+
/** The coding agent running it, while it is live. */
|
|
89
|
+
agent?: string | null;
|
|
60
90
|
};
|
|
61
91
|
export type ThreadParticipant = {
|
|
62
92
|
id: string;
|
|
63
93
|
kind: string;
|
|
64
94
|
role?: string;
|
|
95
|
+
/** `avatar` is absolute (Gravatar) or box-relative (`/api/avatars/<file>`). */
|
|
65
96
|
display: {
|
|
66
97
|
name?: string | null;
|
|
67
98
|
fallback: string;
|
|
99
|
+
avatar?: string | null;
|
|
68
100
|
};
|
|
69
101
|
};
|
|
70
102
|
export type ThreadDetail = {
|
|
@@ -74,6 +106,26 @@ export type ThreadDetail = {
|
|
|
74
106
|
participants: ThreadParticipant[];
|
|
75
107
|
messages: ThreadMessage[];
|
|
76
108
|
tasks: ThreadTaskRow[];
|
|
109
|
+
/** Who is writing right now, the caller left out. Absent on a machine from before typing. */
|
|
110
|
+
typing?: ThreadTyping[];
|
|
111
|
+
/**
|
|
112
|
+
* Everyone `@` can name: the people on this machine and the thread's
|
|
113
|
+
* members. Naming someone who is not a member adds them. Absent on a
|
|
114
|
+
* machine from before; then only members are offered.
|
|
115
|
+
*/
|
|
116
|
+
people?: ThreadPerson[];
|
|
117
|
+
};
|
|
118
|
+
export type ThreadPerson = {
|
|
119
|
+
participantId: string;
|
|
120
|
+
name: string;
|
|
121
|
+
avatar?: string | null;
|
|
122
|
+
member: boolean;
|
|
123
|
+
};
|
|
124
|
+
/** Someone writing in a thread: a person at their keyboard, or omg preparing an answer. */
|
|
125
|
+
export type ThreadTyping = {
|
|
126
|
+
author: ThreadAuthor;
|
|
127
|
+
/** The top-level message whose replies they are writing in; null for the main list. */
|
|
128
|
+
replyTo: string | null;
|
|
77
129
|
};
|
|
78
130
|
export type TaskCardState = "working" | "needs-you" | "done" | "failed" | "ended";
|
|
79
131
|
export declare const TASK_STATE_LABEL: Record<TaskCardState, string>;
|
|
@@ -108,6 +160,7 @@ export declare function taskCardFor(message: ThreadMessage, detail: Pick<ThreadD
|
|
|
108
160
|
sessionId: string;
|
|
109
161
|
title: string;
|
|
110
162
|
project: string | null;
|
|
163
|
+
agent: string | null;
|
|
111
164
|
state: TaskCardState;
|
|
112
165
|
} | null;
|
|
113
166
|
/** Slack's rule: a message joins the one above when the same author wrote it within this long. */
|
|
@@ -119,6 +172,14 @@ export declare const THREAD_GROUP_MS: number;
|
|
|
119
172
|
export declare function startsMessageGroup(previous: ThreadMessage | undefined, message: ThreadMessage): boolean;
|
|
120
173
|
/** A stable avatar colour for a person, from their participant id. */
|
|
121
174
|
export declare function authorHue(author: ThreadAuthor): number;
|
|
175
|
+
/**
|
|
176
|
+
* Which agent's mark an omg message wears: the agent whose words it carries.
|
|
177
|
+
* A task's result is that task's agent (remembered on the message, or the
|
|
178
|
+
* live task's for a result from before that); a message an agent session
|
|
179
|
+
* posted is that session's. omg's own replies, and the notes it writes when
|
|
180
|
+
* it starts or relays a task, are omg's: null.
|
|
181
|
+
*/
|
|
182
|
+
export declare function authorAgent(message: ThreadMessage, tasks?: readonly ThreadTaskRow[]): string | null;
|
|
122
183
|
export declare function authorName(author: ThreadAuthor): string;
|
|
123
184
|
/** Top-level messages: what the main list shows. */
|
|
124
185
|
export declare function topLevelMessages(messages: readonly ThreadMessage[]): ThreadMessage[];
|
|
@@ -143,4 +204,111 @@ export declare const THREAD_PULL_HINT = 90;
|
|
|
143
204
|
export declare const THREAD_PULL_ARM = 150;
|
|
144
205
|
/** 0: nothing. 1: show "keep pulling". 2: armed, release starts a thread. */
|
|
145
206
|
export declare function threadPullStage(pull: number): 0 | 1 | 2;
|
|
207
|
+
/** Who `@` offers in a thread. omg is the one member that is not a person. */
|
|
208
|
+
export type ThreadMentionOption = {
|
|
209
|
+
id: string;
|
|
210
|
+
/** What follows the `@`, as typed and as shown. */
|
|
211
|
+
name: string;
|
|
212
|
+
hint: string;
|
|
213
|
+
kind: "omg" | "agent" | "person";
|
|
214
|
+
/** The coding agent's key, for an agent. */
|
|
215
|
+
agent?: string;
|
|
216
|
+
/** The participant, for a person. */
|
|
217
|
+
participantId?: string;
|
|
218
|
+
/** A person's photo, when they have one. */
|
|
219
|
+
avatar?: string | null;
|
|
220
|
+
};
|
|
221
|
+
export declare const THREAD_MENTIONS: readonly ThreadMentionOption[];
|
|
222
|
+
/** A coding agent as the machine lists it (GET /api/bootstrap, /api/coding-agents). */
|
|
223
|
+
export type MentionableAgent = {
|
|
224
|
+
key: string;
|
|
225
|
+
label: string;
|
|
226
|
+
visible?: boolean;
|
|
227
|
+
};
|
|
228
|
+
/** What you type after `@` for an agent: its label's first word. "Claude Code" and "claude" are both "claude". */
|
|
229
|
+
export declare function agentHandle(label: string): string;
|
|
230
|
+
/**
|
|
231
|
+
* The coding agents a thread can @: the ones the machine shows, one per
|
|
232
|
+
* handle (two Claude runtimes are one "@claude"), and never omg's own
|
|
233
|
+
* agent, whose handle would be taken by omg the teammate.
|
|
234
|
+
*/
|
|
235
|
+
export declare function mentionAgents(agents: readonly MentionableAgent[] | undefined): {
|
|
236
|
+
key: string;
|
|
237
|
+
handle: string;
|
|
238
|
+
}[];
|
|
239
|
+
/** Everything `@` offers in a thread: omg, the coding agents, and the other people in it. */
|
|
240
|
+
export declare function threadMentionOptions(agents: readonly MentionableAgent[] | undefined, participants: readonly ThreadParticipant[] | undefined, me?: string | null,
|
|
241
|
+
/** ThreadDetail.people: everyone on the machine. Without it, the members. */
|
|
242
|
+
everyone?: readonly ThreadPerson[]): ThreadMentionOption[];
|
|
243
|
+
/** The coding agent a message asks by name, if any: the first `@handle` in it. */
|
|
244
|
+
export declare function mentionedAgent(text: string, agents: readonly {
|
|
245
|
+
key: string;
|
|
246
|
+
handle: string;
|
|
247
|
+
}[]): {
|
|
248
|
+
key: string;
|
|
249
|
+
handle: string;
|
|
250
|
+
} | null;
|
|
251
|
+
/**
|
|
252
|
+
* An `@word` being typed at the end of the text (the caret is taken to be at
|
|
253
|
+
* the end, as the phone's other pickers do): where it starts and what is
|
|
254
|
+
* typed so far. Null when the text does not end in a mention.
|
|
255
|
+
*/
|
|
256
|
+
export declare function threadMentionAt(text: string): {
|
|
257
|
+
start: number;
|
|
258
|
+
query: string;
|
|
259
|
+
} | null;
|
|
260
|
+
/** The mentions whose name starts with what is typed. */
|
|
261
|
+
export declare function matchThreadMentions(query: string, mentions?: readonly ThreadMentionOption[]): ThreadMentionOption[];
|
|
262
|
+
/** Replace the `@word` being typed with `@name `. */
|
|
263
|
+
export declare function applyThreadMention(text: string, at: {
|
|
264
|
+
start: number;
|
|
265
|
+
}, name: string): string;
|
|
266
|
+
/**
|
|
267
|
+
* How to draw a message's author: the participant's current name and photo
|
|
268
|
+
* when the thread knows them (the server fills both from the roster), else
|
|
269
|
+
* the name the message was written under. omg has no photo; it wears its mark.
|
|
270
|
+
*/
|
|
271
|
+
export declare function authorView(author: ThreadAuthor, participants: readonly ThreadParticipant[] | undefined): {
|
|
272
|
+
name: string;
|
|
273
|
+
avatar: string | null;
|
|
274
|
+
};
|
|
275
|
+
/** A person's typing ping lasts this long, so a closed tab stops showing as typing. */
|
|
276
|
+
export declare const THREAD_TYPING_TTL_MS = 6000;
|
|
277
|
+
/** While the field has text, a client repeats its ping this often. */
|
|
278
|
+
export declare const THREAD_TYPING_PING_MS = 3000;
|
|
279
|
+
/**
|
|
280
|
+
* Who shows as typing in one view. The replies of `rootId`, or the main list
|
|
281
|
+
* when it is null. omg always answers in replies, so the main list also shows
|
|
282
|
+
* omg when it is answering anywhere: otherwise an @omg asked from the main
|
|
283
|
+
* list would look ignored.
|
|
284
|
+
*/
|
|
285
|
+
export declare function typingIn(typing: readonly ThreadTyping[] | undefined, rootId: string | null): ThreadTyping[];
|
|
286
|
+
/** "Alex is typing", "omg is typing", "Alex and Sam are typing", "Several people are typing". */
|
|
287
|
+
export declare function typingLabel(typing: readonly ThreadTyping[], participants?: readonly ThreadParticipant[]): string | null;
|
|
288
|
+
/**
|
|
289
|
+
* The client half of typing: feed it the field's text on every change. It
|
|
290
|
+
* sends `true` when text appears and again every THREAD_TYPING_PING_MS while
|
|
291
|
+
* it stays, and `false` once when the field empties. One owner for the
|
|
292
|
+
* throttle, shared by iOS and the web.
|
|
293
|
+
*/
|
|
294
|
+
export declare function typingPinger(send: (typing: boolean) => void, now?: () => number): (text: string) => void;
|
|
295
|
+
/** Who a mention link names: "omg", or a participant id. Null for any other link. */
|
|
296
|
+
export declare function mentionFromHref(href: string | null | undefined): string | null;
|
|
297
|
+
/**
|
|
298
|
+
* A message with its `@omg` and `@Name` mentions made into links, so the
|
|
299
|
+
* markdown renderer on either client draws them as tags that can be tapped.
|
|
300
|
+
* Code is left as written, and so is an address (`x@omg.dev`): a mention
|
|
301
|
+
* starts a word.
|
|
302
|
+
*/
|
|
303
|
+
export declare function linkMentions(text: string, participants: readonly ThreadParticipant[] | undefined,
|
|
304
|
+
/** The coding agents' handles (mentionAgents), tagged as `agent:<handle>`. */
|
|
305
|
+
agentHandles?: readonly string[]): string;
|
|
306
|
+
/**
|
|
307
|
+
* The people a message names with `@Name`, by participant id: the rule
|
|
308
|
+
* linkMentions draws with, so what is highlighted is who is notified.
|
|
309
|
+
*/
|
|
310
|
+
export declare function mentionedPeople(text: string, people: readonly {
|
|
311
|
+
participantId: string;
|
|
312
|
+
name: string;
|
|
313
|
+
}[]): string[];
|
|
146
314
|
//# sourceMappingURL=threads.d.ts.map
|
package/dist/threads.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
|
package/dist/threads.js
CHANGED
|
@@ -7,6 +7,38 @@
|
|
|
7
7
|
* `taskCardState` below. Keeping that rule here is what stops the phone and
|
|
8
8
|
* the web from disagreeing about whether a task "needs you".
|
|
9
9
|
*/
|
|
10
|
+
const IMAGE_EXT = /\.(png|jpe?g|gif|webp|heic|heif|avif|bmp)$/i;
|
|
11
|
+
const VIDEO_EXT = /\.(mp4|m4v|mov|webm)$/i;
|
|
12
|
+
/** What a file is, from its name or type, for how a message draws it. */
|
|
13
|
+
export function mediaKindFor(name, mimeType) {
|
|
14
|
+
const type = (mimeType ?? "").toLowerCase();
|
|
15
|
+
if (type.startsWith("image/") || IMAGE_EXT.test(name))
|
|
16
|
+
return "image";
|
|
17
|
+
if (type.startsWith("video/") || VIDEO_EXT.test(name))
|
|
18
|
+
return "video";
|
|
19
|
+
return "file";
|
|
20
|
+
}
|
|
21
|
+
/** Markdown down to the words, for one-line previews and notifications. */
|
|
22
|
+
export function plainText(markdown) {
|
|
23
|
+
return markdown
|
|
24
|
+
.replace(/```[\s\S]*?```/g, " ")
|
|
25
|
+
.replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1")
|
|
26
|
+
.replace(/\[([^\]]+)\]\([^)]*\)/g, "$1")
|
|
27
|
+
.replace(/^\s{0,3}(#{1,6}|>|[-*+]|\d+[.)])\s+/gm, "")
|
|
28
|
+
.replace(/(\*\*|__|~~|`)/g, "")
|
|
29
|
+
.replace(/(^|\s)[*_]([^*_\s][^*_]*)[*_](?=\s|$|[.,!?;:])/g, "$1$2")
|
|
30
|
+
.replace(/\s+/g, " ")
|
|
31
|
+
.trim();
|
|
32
|
+
}
|
|
33
|
+
/** "Photo", "2 photos", "Video", "File": a message's media in a word, for a message with no text. */
|
|
34
|
+
export function mediaLabel(media) {
|
|
35
|
+
if (!media?.length)
|
|
36
|
+
return "";
|
|
37
|
+
const kind = media.every((row) => row.kind === media[0].kind) ? media[0].kind : "file";
|
|
38
|
+
const word = kind === "image" ? "photo" : kind === "video" ? "video" : "file";
|
|
39
|
+
const label = media.length === 1 ? word : `${media.length} ${word}s`;
|
|
40
|
+
return label.charAt(0).toUpperCase() + label.slice(1);
|
|
41
|
+
}
|
|
10
42
|
export const TASK_STATE_LABEL = {
|
|
11
43
|
working: "Working",
|
|
12
44
|
"needs-you": "Needs you",
|
|
@@ -82,7 +114,7 @@ export function threadPreview(thread) {
|
|
|
82
114
|
if (!last)
|
|
83
115
|
return "No messages yet";
|
|
84
116
|
const who = last.author.kind === "omg" ? "omg" : last.author.name;
|
|
85
|
-
return `${who}: ${last.text
|
|
117
|
+
return `${who}: ${plainText(last.text) || mediaLabel(last.media)}`;
|
|
86
118
|
}
|
|
87
119
|
/** The task a message is about, as the card needs it. Pure, for both clients. */
|
|
88
120
|
export function taskCardFor(message, detail, messages, openAskSessionIds) {
|
|
@@ -90,10 +122,13 @@ export function taskCardFor(message, detail, messages, openAskSessionIds) {
|
|
|
90
122
|
if (!task)
|
|
91
123
|
return null;
|
|
92
124
|
const row = detail.tasks.find((t) => sameSession(t.sessionId, task.sessionId));
|
|
125
|
+
// A finished task is gone from the live list; its result remembers the agent.
|
|
126
|
+
const remembered = [...messages].reverse().find((m) => m.task?.agent && sameSession(m.task.sessionId, task.sessionId));
|
|
93
127
|
return {
|
|
94
128
|
sessionId: task.sessionId,
|
|
95
129
|
title: row?.title || task.title || "Task",
|
|
96
130
|
project: row?.project || task.project || null,
|
|
131
|
+
agent: row?.agent || remembered?.task?.agent || null,
|
|
97
132
|
state: taskCardState({
|
|
98
133
|
event: latestTaskEvent(messages, task.sessionId),
|
|
99
134
|
row,
|
|
@@ -117,7 +152,8 @@ export function startsMessageGroup(previous, message) {
|
|
|
117
152
|
if (message.author.kind === "human" && previous.author.kind === "human") {
|
|
118
153
|
return previous.author.participantId !== message.author.participantId;
|
|
119
154
|
}
|
|
120
|
-
|
|
155
|
+
// omg's note and then Claude's answer are two voices: each shows its own mark.
|
|
156
|
+
return authorAgent(previous) !== authorAgent(message);
|
|
121
157
|
}
|
|
122
158
|
/** A stable avatar colour for a person, from their participant id. */
|
|
123
159
|
export function authorHue(author) {
|
|
@@ -128,6 +164,22 @@ export function authorHue(author) {
|
|
|
128
164
|
hash = (hash * 31 + char.charCodeAt(0)) >>> 0;
|
|
129
165
|
return hash % 360;
|
|
130
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Which agent's mark an omg message wears: the agent whose words it carries.
|
|
169
|
+
* A task's result is that task's agent (remembered on the message, or the
|
|
170
|
+
* live task's for a result from before that); a message an agent session
|
|
171
|
+
* posted is that session's. omg's own replies, and the notes it writes when
|
|
172
|
+
* it starts or relays a task, are omg's: null.
|
|
173
|
+
*/
|
|
174
|
+
export function authorAgent(message, tasks) {
|
|
175
|
+
if (message.author.kind !== "omg")
|
|
176
|
+
return null;
|
|
177
|
+
const task = message.task;
|
|
178
|
+
if (task && task.event !== "started") {
|
|
179
|
+
return task.agent || tasks?.find((row) => sameSession(row.sessionId, task.sessionId))?.agent || null;
|
|
180
|
+
}
|
|
181
|
+
return message.via?.agent || null;
|
|
182
|
+
}
|
|
131
183
|
export function authorName(author) {
|
|
132
184
|
return author.kind === "omg" ? "omg" : author.name;
|
|
133
185
|
}
|
|
@@ -169,4 +221,219 @@ export function threadPullStage(pull) {
|
|
|
169
221
|
return 1;
|
|
170
222
|
return 0;
|
|
171
223
|
}
|
|
224
|
+
export const THREAD_MENTIONS = [
|
|
225
|
+
{ id: "omg", name: "omg", hint: "Answer, or start a task", kind: "omg" },
|
|
226
|
+
];
|
|
227
|
+
/** What you type after `@` for an agent: its label's first word. "Claude Code" and "claude" are both "claude". */
|
|
228
|
+
export function agentHandle(label) {
|
|
229
|
+
return (label.trim().split(/\s+/)[0] ?? "").toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The coding agents a thread can @: the ones the machine shows, one per
|
|
233
|
+
* handle (two Claude runtimes are one "@claude"), and never omg's own
|
|
234
|
+
* agent, whose handle would be taken by omg the teammate.
|
|
235
|
+
*/
|
|
236
|
+
export function mentionAgents(agents) {
|
|
237
|
+
const seen = new Set(["omg"]);
|
|
238
|
+
const out = [];
|
|
239
|
+
for (const agent of agents ?? []) {
|
|
240
|
+
const handle = agentHandle(agent.label);
|
|
241
|
+
if (agent.visible === false || agent.key === "omg" || !handle || seen.has(handle))
|
|
242
|
+
continue;
|
|
243
|
+
seen.add(handle);
|
|
244
|
+
out.push({ key: agent.key, handle });
|
|
245
|
+
}
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
/** Everything `@` offers in a thread: omg, the coding agents, and the other people in it. */
|
|
249
|
+
export function threadMentionOptions(agents, participants, me,
|
|
250
|
+
/** ThreadDetail.people: everyone on the machine. Without it, the members. */
|
|
251
|
+
everyone) {
|
|
252
|
+
const rows = everyone ??
|
|
253
|
+
(participants ?? []).flatMap((row) => {
|
|
254
|
+
const name = row.kind === "human" ? row.display.name?.trim() : null;
|
|
255
|
+
return name ? [{ participantId: row.id, name, avatar: row.display.avatar ?? null, member: true }] : [];
|
|
256
|
+
});
|
|
257
|
+
const people = rows
|
|
258
|
+
.filter((row) => row.participantId !== me && row.name.trim())
|
|
259
|
+
// Members first: they are who a reply is usually for.
|
|
260
|
+
.sort((a, b) => Number(b.member) - Number(a.member))
|
|
261
|
+
.map((row) => ({
|
|
262
|
+
id: row.participantId,
|
|
263
|
+
name: row.name.trim(),
|
|
264
|
+
hint: row.member ? "In this thread" : "Adds them to the thread",
|
|
265
|
+
kind: "person",
|
|
266
|
+
participantId: row.participantId,
|
|
267
|
+
avatar: row.avatar ?? null,
|
|
268
|
+
}));
|
|
269
|
+
return [
|
|
270
|
+
...THREAD_MENTIONS,
|
|
271
|
+
...mentionAgents(agents).map((agent) => ({
|
|
272
|
+
id: `agent:${agent.key}`,
|
|
273
|
+
name: agent.handle,
|
|
274
|
+
hint: `Start a task with ${agent.handle}`,
|
|
275
|
+
kind: "agent",
|
|
276
|
+
agent: agent.key,
|
|
277
|
+
})),
|
|
278
|
+
...people,
|
|
279
|
+
];
|
|
280
|
+
}
|
|
281
|
+
/** The coding agent a message asks by name, if any: the first `@handle` in it. */
|
|
282
|
+
export function mentionedAgent(text, agents) {
|
|
283
|
+
let best = null;
|
|
284
|
+
for (const agent of agents) {
|
|
285
|
+
const match = new RegExp(`(^|[^\\w@])@${agent.handle}(?![\\w-])`, "i").exec(text);
|
|
286
|
+
if (match && (!best || match.index < best.at))
|
|
287
|
+
best = { ...agent, at: match.index };
|
|
288
|
+
}
|
|
289
|
+
return best ? { key: best.key, handle: best.handle } : null;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* An `@word` being typed at the end of the text (the caret is taken to be at
|
|
293
|
+
* the end, as the phone's other pickers do): where it starts and what is
|
|
294
|
+
* typed so far. Null when the text does not end in a mention.
|
|
295
|
+
*/
|
|
296
|
+
export function threadMentionAt(text) {
|
|
297
|
+
const m = text.match(/(^|\s)@([A-Za-z0-9._-]{0,40})$/);
|
|
298
|
+
if (!m)
|
|
299
|
+
return null;
|
|
300
|
+
return { start: text.length - m[2].length - 1, query: m[2] };
|
|
301
|
+
}
|
|
302
|
+
/** The mentions whose name starts with what is typed. */
|
|
303
|
+
export function matchThreadMentions(query, mentions = THREAD_MENTIONS) {
|
|
304
|
+
const q = query.toLowerCase();
|
|
305
|
+
return mentions.filter((mention) => mention.name.toLowerCase().startsWith(q));
|
|
306
|
+
}
|
|
307
|
+
/** Replace the `@word` being typed with `@name `. */
|
|
308
|
+
export function applyThreadMention(text, at, name) {
|
|
309
|
+
return `${text.slice(0, at.start)}@${name} `;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* How to draw a message's author: the participant's current name and photo
|
|
313
|
+
* when the thread knows them (the server fills both from the roster), else
|
|
314
|
+
* the name the message was written under. omg has no photo; it wears its mark.
|
|
315
|
+
*/
|
|
316
|
+
export function authorView(author, participants) {
|
|
317
|
+
if (author.kind === "omg")
|
|
318
|
+
return { name: "omg", avatar: null };
|
|
319
|
+
const row = participants?.find((participant) => participant.id === author.participantId);
|
|
320
|
+
return {
|
|
321
|
+
name: row?.display.name?.trim() || author.name,
|
|
322
|
+
avatar: row?.display.avatar?.trim() || null,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/* -------------------------------------------------------------------------- */
|
|
326
|
+
/* Typing */
|
|
327
|
+
/* -------------------------------------------------------------------------- */
|
|
328
|
+
/** A person's typing ping lasts this long, so a closed tab stops showing as typing. */
|
|
329
|
+
export const THREAD_TYPING_TTL_MS = 6_000;
|
|
330
|
+
/** While the field has text, a client repeats its ping this often. */
|
|
331
|
+
export const THREAD_TYPING_PING_MS = 3_000;
|
|
332
|
+
/**
|
|
333
|
+
* Who shows as typing in one view. The replies of `rootId`, or the main list
|
|
334
|
+
* when it is null. omg always answers in replies, so the main list also shows
|
|
335
|
+
* omg when it is answering anywhere: otherwise an @omg asked from the main
|
|
336
|
+
* list would look ignored.
|
|
337
|
+
*/
|
|
338
|
+
export function typingIn(typing, rootId) {
|
|
339
|
+
return (typing ?? []).filter((row) => row.replyTo === rootId || (rootId === null && row.author.kind === "omg"));
|
|
340
|
+
}
|
|
341
|
+
/** "Alex is typing", "omg is typing", "Alex and Sam are typing", "Several people are typing". */
|
|
342
|
+
export function typingLabel(typing, participants) {
|
|
343
|
+
const names = [...new Set(typing.map((row) => authorView(row.author, participants).name))];
|
|
344
|
+
if (!names.length)
|
|
345
|
+
return null;
|
|
346
|
+
if (names.length === 1)
|
|
347
|
+
return `${names[0]} is typing`;
|
|
348
|
+
if (names.length === 2)
|
|
349
|
+
return `${names[0]} and ${names[1]} are typing`;
|
|
350
|
+
return "Several people are typing";
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* The client half of typing: feed it the field's text on every change. It
|
|
354
|
+
* sends `true` when text appears and again every THREAD_TYPING_PING_MS while
|
|
355
|
+
* it stays, and `false` once when the field empties. One owner for the
|
|
356
|
+
* throttle, shared by iOS and the web.
|
|
357
|
+
*/
|
|
358
|
+
export function typingPinger(send, now = Date.now) {
|
|
359
|
+
let last = 0;
|
|
360
|
+
let on = false;
|
|
361
|
+
return (text) => {
|
|
362
|
+
if (text.trim()) {
|
|
363
|
+
const at = now();
|
|
364
|
+
if (on && at - last < THREAD_TYPING_PING_MS)
|
|
365
|
+
return;
|
|
366
|
+
on = true;
|
|
367
|
+
last = at;
|
|
368
|
+
send(true);
|
|
369
|
+
}
|
|
370
|
+
else if (on) {
|
|
371
|
+
on = false;
|
|
372
|
+
last = 0;
|
|
373
|
+
send(false);
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/* -------------------------------------------------------------------------- */
|
|
378
|
+
/* Mentions */
|
|
379
|
+
/* -------------------------------------------------------------------------- */
|
|
380
|
+
const MENTION_HREF = "omg:mention/";
|
|
381
|
+
/** Who a mention link names: "omg", or a participant id. Null for any other link. */
|
|
382
|
+
export function mentionFromHref(href) {
|
|
383
|
+
if (!href?.startsWith(MENTION_HREF))
|
|
384
|
+
return null;
|
|
385
|
+
try {
|
|
386
|
+
return decodeURIComponent(href.slice(MENTION_HREF.length)) || null;
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* A message with its `@omg` and `@Name` mentions made into links, so the
|
|
394
|
+
* markdown renderer on either client draws them as tags that can be tapped.
|
|
395
|
+
* Code is left as written, and so is an address (`x@omg.dev`): a mention
|
|
396
|
+
* starts a word.
|
|
397
|
+
*/
|
|
398
|
+
export function linkMentions(text, participants,
|
|
399
|
+
/** The coding agents' handles (mentionAgents), tagged as `agent:<handle>`. */
|
|
400
|
+
agentHandles = []) {
|
|
401
|
+
const targets = new Map([["omg", "omg"]]);
|
|
402
|
+
for (const handle of agentHandles)
|
|
403
|
+
if (!targets.has(handle))
|
|
404
|
+
targets.set(handle, `agent:${handle}`);
|
|
405
|
+
for (const row of participants ?? []) {
|
|
406
|
+
const name = row.kind === "human" ? row.display.name?.trim() : null;
|
|
407
|
+
if (name && !targets.has(name.toLowerCase()))
|
|
408
|
+
targets.set(name.toLowerCase(), row.id);
|
|
409
|
+
}
|
|
410
|
+
// Longest first, so "@Alex Chan" wins over "@Alex".
|
|
411
|
+
const names = [...targets.keys()].sort((a, b) => b.length - a.length);
|
|
412
|
+
const escape = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
413
|
+
const pattern = new RegExp(`(^|[^\\w@\\[\\]/])@(${names.map(escape).join("|")})(?![\\w-])`, "gi");
|
|
414
|
+
return text
|
|
415
|
+
.split(/(```[\s\S]*?```|`[^`\n]*`)/)
|
|
416
|
+
.map((part, index) => index % 2 === 1
|
|
417
|
+
? part
|
|
418
|
+
: part.replace(pattern, (_match, before, name) => {
|
|
419
|
+
const id = targets.get(name.toLowerCase());
|
|
420
|
+
return `${before}[@${name}](${MENTION_HREF}${encodeURIComponent(id)})`;
|
|
421
|
+
}))
|
|
422
|
+
.join("");
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* The people a message names with `@Name`, by participant id: the rule
|
|
426
|
+
* linkMentions draws with, so what is highlighted is who is notified.
|
|
427
|
+
*/
|
|
428
|
+
export function mentionedPeople(text, people) {
|
|
429
|
+
const participants = people.map((row) => ({ id: row.participantId, kind: "human", display: { name: row.name, fallback: row.name } }));
|
|
430
|
+
const linked = linkMentions(text, participants);
|
|
431
|
+
const ids = new Set();
|
|
432
|
+
for (const match of linked.matchAll(/\]\(omg:mention\/([^)]+)\)/g)) {
|
|
433
|
+
const id = mentionFromHref(`omg:mention/${match[1]}`);
|
|
434
|
+
if (id && id !== "omg" && !id.startsWith("agent:"))
|
|
435
|
+
ids.add(id);
|
|
436
|
+
}
|
|
437
|
+
return [...ids];
|
|
438
|
+
}
|
|
172
439
|
//# sourceMappingURL=threads.js.map
|
package/dist/threads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
|