@knpkv/relay-product 0.1.0
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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/conversation.d.ts +336 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +227 -0
- package/dist/conversation.js.map +1 -0
- package/dist/dock.d.ts +36 -0
- package/dist/dock.d.ts.map +1 -0
- package/dist/dock.js +224 -0
- package/dist/dock.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +85 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +63 -0
- package/dist/model.js.map +1 -0
- package/dist/registry.d.ts +54 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +36 -0
- package/dist/registry.js.map +1 -0
- package/package.json +68 -0
package/dist/dock.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
2
|
+
import { Component, type ReactElement, type ReactNode } from "react";
|
|
3
|
+
import { type RelayProductDockHost, type RelayPullRequestDockRegistration } from "./registry.js";
|
|
4
|
+
import type { RelaySelectorState } from "./model.js";
|
|
5
|
+
declare const RelayProductDockInvariantViolation_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
|
|
6
|
+
readonly _tag: "RelayProductDockInvariantViolation";
|
|
7
|
+
} & Readonly<A>;
|
|
8
|
+
export declare class RelayProductDockInvariantViolation extends RelayProductDockInvariantViolation_base<{
|
|
9
|
+
readonly boundary: "conversation" | "selector";
|
|
10
|
+
}> {
|
|
11
|
+
}
|
|
12
|
+
interface RelayDockChromeBoundaryState {
|
|
13
|
+
readonly failed: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Keep routed product content mounted when optional Relay chrome cannot load. */
|
|
16
|
+
export declare class RelayProductDockChromeBoundary extends Component<{
|
|
17
|
+
readonly children: ReactNode;
|
|
18
|
+
}, RelayDockChromeBoundaryState> {
|
|
19
|
+
state: RelayDockChromeBoundaryState;
|
|
20
|
+
static getDerivedStateFromError(cause: unknown): RelayDockChromeBoundaryState;
|
|
21
|
+
render(): ReactNode;
|
|
22
|
+
}
|
|
23
|
+
interface RelayProductDockProps {
|
|
24
|
+
readonly children: ReactNode;
|
|
25
|
+
readonly host: RelayProductDockHost;
|
|
26
|
+
}
|
|
27
|
+
export declare const relaySelectionMatchesRegistration: (selection: RelaySelectorState, registration: RelayPullRequestDockRegistration) => boolean;
|
|
28
|
+
/** Own one collapsed Relay dock while application pages register exact PR threads underneath it. */
|
|
29
|
+
export declare const RelayProductDock: ({ children, host }: RelayProductDockProps) => ReactElement;
|
|
30
|
+
/** Render the chrome for a registration provider; keep this component lazy at product route boundaries. */
|
|
31
|
+
export declare const RelayProductDockChrome: ({ host }: {
|
|
32
|
+
readonly host: RelayProductDockHost;
|
|
33
|
+
}) => ReactElement;
|
|
34
|
+
export { RelayProductDockProvider, RelayProductDockProviderMissing, useRelayProductDockRegistration, useRelayPullRequestDock } from "./registry.js";
|
|
35
|
+
export type { RelayProductDockHost, RelayProductDockMessage, RelayPullRequestDockRegistration } from "./registry.js";
|
|
36
|
+
//# sourceMappingURL=dock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dock.d.ts","sourceRoot":"","sources":["../src/dock.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAMrC,OAAO,EAEL,SAAS,EAET,KAAK,YAAY,EACjB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAA;AAad,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,gCAAgC,EAGtC,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;;;;AAEpD,qBAAa,kCAAmC,SAAQ,wCAAuD;IAC7G,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAAA;CAC/C,CAAC;CAAG;AAOL,UAAU,4BAA4B;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,kFAAkF;AAClF,qBAAa,8BAA+B,SAAQ,SAAS,CAC3D;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,EAChC,4BAA4B,CAC7B;IACU,KAAK,EAAE,4BAA4B,CAAoB;IAEhE,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,CAG5E;IAEQ,MAAM,IAAI,SAAS,CAE3B;CACF;AAcD,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CACpC;AAyKD,eAAO,MAAM,iCAAiC,cACjC,kBAAkB,gBACf,gCAAgC,KAC7C,OAEuE,CAAA;AAkG1E,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,uBAAwB,qBAAqB,KAAG,YAO5E,CAAA;AAED,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,aAAc;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,KAAG,YAoE1F,CAAA;AAED,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACxB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/dock.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as Cause from "effect/Cause";
|
|
3
|
+
import * as Data from "effect/Data";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Exit from "effect/Exit";
|
|
6
|
+
import * as Result from "effect/Result";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import { Component, lazy, Suspense, useCallback, useEffect, useRef, useState } from "react";
|
|
9
|
+
import { ContinuePullRequestConversationRequest, PullRequestConversationLocator, pullRequestThreadIdentity } from "./conversation.js";
|
|
10
|
+
import { RelayProductDockProvider, useRelayProductDockRegistration } from "./registry.js";
|
|
11
|
+
export class RelayProductDockInvariantViolation extends Data.TaggedError("RelayProductDockInvariantViolation") {
|
|
12
|
+
}
|
|
13
|
+
const LazyRelayDock = lazy(async () => {
|
|
14
|
+
const patterns = await import("@knpkv/rly/patterns");
|
|
15
|
+
return { default: patterns.RelayDock };
|
|
16
|
+
});
|
|
17
|
+
/** Keep routed product content mounted when optional Relay chrome cannot load. */
|
|
18
|
+
export class RelayProductDockChromeBoundary extends Component {
|
|
19
|
+
state = { failed: false };
|
|
20
|
+
static getDerivedStateFromError(cause) {
|
|
21
|
+
void cause;
|
|
22
|
+
return { failed: true };
|
|
23
|
+
}
|
|
24
|
+
render() {
|
|
25
|
+
return this.state.failed ? null : this.props.children;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const actionFailureDescription = (failure) => {
|
|
29
|
+
switch (failure._tag) {
|
|
30
|
+
case "RelayAuthenticationRequired":
|
|
31
|
+
return "Authenticate with this product before using its Relay conversations.";
|
|
32
|
+
case "RelayAuthorizationDenied":
|
|
33
|
+
return "This session cannot use Relay for pull-request conversations.";
|
|
34
|
+
case "RelayAuthenticationUnavailable":
|
|
35
|
+
return "The product authentication boundary is unavailable.";
|
|
36
|
+
case "PullRequestConversationNotFound":
|
|
37
|
+
return `No Relay conversation matches ${failure.repositoryName} PR #${failure.pullRequestId}.`;
|
|
38
|
+
case "PullRequestConversationAmbiguous":
|
|
39
|
+
return `${String(failure.matches)} Relay conversations match this pull request; include its account.`;
|
|
40
|
+
case "PullRequestConversationLookupFailed":
|
|
41
|
+
return "Relay could not search the product's pull-request conversations.";
|
|
42
|
+
case "PullRequestConversationRedirectFailed":
|
|
43
|
+
return "Relay found the conversation but could not open its exact pull-request page.";
|
|
44
|
+
case "PullRequestConversationContinuationRejected":
|
|
45
|
+
return failure.reason === "conversation-busy"
|
|
46
|
+
? "This pull-request conversation already has a run in progress."
|
|
47
|
+
: failure.reason === "selection-unavailable"
|
|
48
|
+
? "The selected Relay profile or model is no longer available."
|
|
49
|
+
: "This pull-request conversation no longer exists.";
|
|
50
|
+
case "PullRequestConversationContinuationFailed":
|
|
51
|
+
return "Relay could not continue this pull-request conversation.";
|
|
52
|
+
case "RelayProductAdapterContractError":
|
|
53
|
+
return "The active product does not own this pull-request conversation.";
|
|
54
|
+
case "RelayProductContinuationReceiptMismatch":
|
|
55
|
+
return "Relay returned a continuation receipt for another pull-request conversation.";
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const failureFromCause = (cause) => {
|
|
59
|
+
const failure = cause.reasons.find(Cause.isFailReason);
|
|
60
|
+
return failure === undefined
|
|
61
|
+
? "Relay ended unexpectedly. No request was accepted."
|
|
62
|
+
: actionFailureDescription(failure.error);
|
|
63
|
+
};
|
|
64
|
+
const useRelayDockAction = () => {
|
|
65
|
+
const [state, setState] = useState({ description: null, pending: false });
|
|
66
|
+
const request = useRef(0);
|
|
67
|
+
useEffect(() => () => {
|
|
68
|
+
request.current += 1;
|
|
69
|
+
}, []);
|
|
70
|
+
const run = useCallback((effect) => {
|
|
71
|
+
request.current += 1;
|
|
72
|
+
const current = request.current;
|
|
73
|
+
setState({ description: null, pending: true });
|
|
74
|
+
void Effect.runPromiseExit(effect).then((exit) => {
|
|
75
|
+
if (request.current !== current)
|
|
76
|
+
return;
|
|
77
|
+
setState(Exit.isSuccess(exit)
|
|
78
|
+
? { description: null, pending: false }
|
|
79
|
+
: { description: failureFromCause(exit.cause), pending: false });
|
|
80
|
+
});
|
|
81
|
+
}, []);
|
|
82
|
+
return [state, run];
|
|
83
|
+
};
|
|
84
|
+
const HostConversationLocator = ({ host }) => {
|
|
85
|
+
const [accountId, setAccountId] = useState("");
|
|
86
|
+
const [pullRequestId, setPullRequestId] = useState("");
|
|
87
|
+
const [region, setRegion] = useState("");
|
|
88
|
+
const [repositoryName, setRepositoryName] = useState("");
|
|
89
|
+
const [validation, setValidation] = useState(null);
|
|
90
|
+
const [action, runAction] = useRelayDockAction();
|
|
91
|
+
const submit = (event) => {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
const account = accountId.trim();
|
|
94
|
+
const locatorInput = account.length === 0
|
|
95
|
+
? {
|
|
96
|
+
provider: "codecommit",
|
|
97
|
+
pullRequestId: pullRequestId.trim(),
|
|
98
|
+
region: region.trim(),
|
|
99
|
+
repositoryName: repositoryName.trim()
|
|
100
|
+
}
|
|
101
|
+
: {
|
|
102
|
+
accountId: account,
|
|
103
|
+
provider: "codecommit",
|
|
104
|
+
pullRequestId: pullRequestId.trim(),
|
|
105
|
+
region: region.trim(),
|
|
106
|
+
repositoryName: repositoryName.trim()
|
|
107
|
+
};
|
|
108
|
+
const decoded = Schema.decodeUnknownResult(PullRequestConversationLocator)(locatorInput);
|
|
109
|
+
if (Result.isFailure(decoded)) {
|
|
110
|
+
setValidation("Enter a region, repository, and pull-request number.");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
setValidation(null);
|
|
114
|
+
runAction(host.locatePullRequestConversation(decoded.success));
|
|
115
|
+
};
|
|
116
|
+
return (_jsxs("form", { "aria-label": "Find a pull request conversation", onSubmit: submit, children: [_jsx("h2", { children: "Find a pull request conversation" }), _jsx("p", { children: "Relay opens the exact product page before continuing a PR thread." }), _jsxs("label", { children: [_jsx("span", { children: "Region" }), _jsx("input", { onChange: (event) => setRegion(event.currentTarget.value), value: region })] }), _jsxs("label", { children: [_jsx("span", { children: "Repository" }), _jsx("input", { onChange: (event) => setRepositoryName(event.currentTarget.value), value: repositoryName })] }), _jsxs("label", { children: [_jsx("span", { children: "Pull request" }), _jsx("input", { inputMode: "numeric", onChange: (event) => setPullRequestId(event.currentTarget.value), value: pullRequestId })] }), _jsxs("label", { children: [_jsx("span", { children: "Account (optional)" }), _jsx("input", { onChange: (event) => setAccountId(event.currentTarget.value), value: accountId })] }), validation === null && action.description === null ? null : (_jsx("p", { "aria-live": "assertive", role: "alert", children: validation ?? action.description })), _jsx("button", { disabled: action.pending, type: "submit", children: action.pending ? "Opening PR conversation…" : "Open PR conversation" })] }));
|
|
117
|
+
};
|
|
118
|
+
const ThreadMessages = ({ messages }) => messages.length === 0 ? (_jsx("p", { children: "No Relay turns yet. The first message starts this PR's durable thread." })) : (_jsx("ol", { "aria-label": "Pull request conversation", children: messages.map((message) => (_jsxs("li", { "data-relay-message-role": message.role, children: [_jsx("strong", { children: message.role === "relay" ? "Relay" : message.role === "operator" ? "You" : "System" }), _jsx("p", { children: message.text })] }, message.id))) }));
|
|
119
|
+
export const relaySelectionMatchesRegistration = (selection, registration) => registration.selection.profiles.some(({ id }) => id === selection.profileId) &&
|
|
120
|
+
registration.selection.models.some(({ id }) => id === selection.modelId);
|
|
121
|
+
const PullRequestContinuation = ({ registration, selection }) => {
|
|
122
|
+
const [message, setMessage] = useState("");
|
|
123
|
+
const [validation, setValidation] = useState(null);
|
|
124
|
+
const [action, runAction] = useRelayDockAction();
|
|
125
|
+
const selectionMatchesRegistration = relaySelectionMatchesRegistration(selection, registration);
|
|
126
|
+
const submit = (event) => {
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
if (!selectionMatchesRegistration) {
|
|
129
|
+
setValidation("Rerun Relay with the selected profile or model before continuing this PR thread.");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const decoded = Schema.decodeUnknownResult(ContinuePullRequestConversationRequest)({
|
|
133
|
+
conversation: registration.conversation,
|
|
134
|
+
message: message.trim(),
|
|
135
|
+
selection
|
|
136
|
+
});
|
|
137
|
+
if (Result.isFailure(decoded)) {
|
|
138
|
+
setValidation("Enter a pull-request request of 8,000 characters or fewer.");
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
setValidation(null);
|
|
142
|
+
runAction(registration
|
|
143
|
+
.continuePullRequestConversation(decoded.success)
|
|
144
|
+
.pipe(Effect.tap(() => Effect.sync(() => setMessage("")))));
|
|
145
|
+
};
|
|
146
|
+
return (_jsxs("form", { "aria-label": "Continue pull request conversation", onSubmit: submit, children: [_jsxs("label", { children: [_jsx("span", { children: "Continue this PR thread" }), _jsx("textarea", { maxLength: 8_000, onChange: (event) => setMessage(event.currentTarget.value), placeholder: "Ask Relay to verify one concrete part of this pull request\u2026", rows: 3, value: message })] }), validation === null && action.description === null ? null : (_jsx("p", { "aria-live": "assertive", role: "alert", children: validation ?? action.description })), !selectionMatchesRegistration && validation === null ? (_jsx("p", { "aria-live": "polite", children: "Rerun Relay with the selected profile or model before continuing this PR thread." })) : null, _jsx("button", { disabled: action.pending || message.trim().length === 0 || !selectionMatchesRegistration, type: "submit", children: action.pending ? "Continuing on this PR…" : "Continue on this PR" })] }));
|
|
147
|
+
};
|
|
148
|
+
const relayDockState = (host, registration) => {
|
|
149
|
+
if (registration === null) {
|
|
150
|
+
return { content: _jsx(HostConversationLocator, { host: host }), status: "ready" };
|
|
151
|
+
}
|
|
152
|
+
switch (registration.status) {
|
|
153
|
+
case "loading":
|
|
154
|
+
return {
|
|
155
|
+
description: "Loading the durable conversation for this pull request.",
|
|
156
|
+
status: "loading",
|
|
157
|
+
title: "Loading PR thread"
|
|
158
|
+
};
|
|
159
|
+
case "error":
|
|
160
|
+
return { description: registration.description, status: "error", title: "PR thread unavailable" };
|
|
161
|
+
case "unavailable":
|
|
162
|
+
return { description: registration.description, status: "unavailable", title: "Relay unavailable for this PR" };
|
|
163
|
+
case "ready":
|
|
164
|
+
return { content: _jsx(ThreadMessages, { messages: registration.messages }), status: "ready" };
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const selectionIdentity = (registration) => registration === null ? "host" : JSON.stringify(pullRequestThreadIdentity(registration.conversation));
|
|
168
|
+
const selectorRevision = (selection) => JSON.stringify({
|
|
169
|
+
modelId: selection.modelId,
|
|
170
|
+
models: selection.models,
|
|
171
|
+
profileId: selection.profileId,
|
|
172
|
+
profiles: selection.profiles
|
|
173
|
+
});
|
|
174
|
+
/** Own one collapsed Relay dock while application pages register exact PR threads underneath it. */
|
|
175
|
+
export const RelayProductDock = ({ children, host }) => {
|
|
176
|
+
return (_jsxs(RelayProductDockProvider, { children: [children, _jsx(RelayProductDockChrome, { host: host })] }));
|
|
177
|
+
};
|
|
178
|
+
/** Render the chrome for a registration provider; keep this component lazy at product route boundaries. */
|
|
179
|
+
export const RelayProductDockChrome = ({ host }) => {
|
|
180
|
+
const registration = useRelayProductDockRegistration();
|
|
181
|
+
const activeSelection = registration?.selection ?? host.selection;
|
|
182
|
+
const identity = selectionIdentity(registration);
|
|
183
|
+
const activeSelectorRevision = selectorRevision(activeSelection);
|
|
184
|
+
const [selection, setSelection] = useState(activeSelection);
|
|
185
|
+
useEffect(() => setSelection(activeSelection), [activeSelectorRevision, identity]);
|
|
186
|
+
const setModel = (value) => {
|
|
187
|
+
const option = selection.models.find(({ id }) => id === value);
|
|
188
|
+
if (option === undefined)
|
|
189
|
+
return;
|
|
190
|
+
const pairedProfile = selection.profiles.find(({ id }) => id === option.id);
|
|
191
|
+
setSelection(pairedProfile === undefined
|
|
192
|
+
? { ...selection, modelId: option.id }
|
|
193
|
+
: { ...selection, modelId: option.id, profileId: pairedProfile.id });
|
|
194
|
+
};
|
|
195
|
+
const setProfile = (value) => {
|
|
196
|
+
const option = selection.profiles.find(({ id }) => id === value);
|
|
197
|
+
if (option === undefined)
|
|
198
|
+
return;
|
|
199
|
+
const pairedModel = selection.models.find(({ id }) => id === option.id);
|
|
200
|
+
setSelection(pairedModel === undefined
|
|
201
|
+
? { ...selection, profileId: option.id }
|
|
202
|
+
: { ...selection, modelId: pairedModel.id, profileId: option.id });
|
|
203
|
+
};
|
|
204
|
+
const readyRegistration = registration?.status === "ready" ? registration : null;
|
|
205
|
+
return (_jsx("div", { "data-relay-product-dock-chrome": "", style: {
|
|
206
|
+
insetBlockEnd: "max(var(--rly-space-16), env(safe-area-inset-bottom, 0px))",
|
|
207
|
+
insetInlineEnd: "max(var(--rly-space-16), env(safe-area-inset-right, 0px))",
|
|
208
|
+
position: "fixed",
|
|
209
|
+
zIndex: 80
|
|
210
|
+
}, children: _jsx(RelayProductDockChromeBoundary, { children: _jsx(Suspense, { fallback: null, children: _jsx(LazyRelayDock, { context: registration?.context ?? host.context, defaultOpen: false, footer: readyRegistration === null ? undefined : (_jsx(PullRequestContinuation, { registration: readyRegistration, selection: selection }, identity)), selection: {
|
|
211
|
+
model: {
|
|
212
|
+
onValueChange: setModel,
|
|
213
|
+
options: selection.models.map(({ id, label }) => ({ label, value: id })),
|
|
214
|
+
value: selection.modelId
|
|
215
|
+
},
|
|
216
|
+
profile: {
|
|
217
|
+
onValueChange: setProfile,
|
|
218
|
+
options: selection.profiles.map(({ id, label }) => ({ label, value: id })),
|
|
219
|
+
value: selection.profileId
|
|
220
|
+
}
|
|
221
|
+
}, state: relayDockState(host, registration) }) }) }) }));
|
|
222
|
+
};
|
|
223
|
+
export { RelayProductDockProvider, RelayProductDockProviderMissing, useRelayProductDockRegistration, useRelayPullRequestDock } from "./registry.js";
|
|
224
|
+
//# sourceMappingURL=dock.js.map
|
package/dist/dock.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dock.js","sourceRoot":"","sources":["../src/dock.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { InvalidRelaySelectorState, makeInitialRelayState, RelayDockState, RelaySelectorOption, RelaySelectorState, RelayState } from "./model.js";
|
|
2
|
+
export { AgenticProduct, ContinuePullRequestConversationRequest, layer, makeRelayProductAdapter, ProductAuthorization, PullRequestContinuationMessage, PullRequestConversation, PullRequestConversationAmbiguous, PullRequestConversationContinuation, PullRequestConversationContinuationFailed, type PullRequestConversationContinuationFailure, PullRequestConversationContinuationRejected, PullRequestConversationLocator, PullRequestConversationLookupFailed, type PullRequestConversationLookupFailure, PullRequestConversationNotFound, PullRequestConversationRedirectFailed, PullRequestThreadIdentity, pullRequestThreadIdentity, type RelayAuthenticationFailure, RelayAuthenticationRequired, RelayAuthenticationUnavailable, RelayAuthorizationDenied, RelayProduct, type RelayProductAdapter, RelayProductAdapterContractError, RelayProductContinuationReceiptMismatch, RelayProductOperation, type RelayProductPort } from "./conversation.js";
|
|
3
|
+
export { RelayProductDock, RelayProductDockChrome, RelayProductDockChromeBoundary, type RelayProductDockHost, RelayProductDockInvariantViolation, type RelayProductDockMessage, RelayProductDockProvider, RelayProductDockProviderMissing, type RelayPullRequestDockRegistration, relaySelectionMatchesRegistration, useRelayProductDockRegistration, useRelayPullRequestDock } from "./dock.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACX,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,cAAc,EACd,sCAAsC,EACtC,KAAK,EACL,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,gCAAgC,EAChC,mCAAmC,EACnC,yCAAyC,EACzC,KAAK,0CAA0C,EAC/C,2CAA2C,EAC3C,8BAA8B,EAC9B,mCAAmC,EACnC,KAAK,oCAAoC,EACzC,+BAA+B,EAC/B,qCAAqC,EACrC,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,YAAY,EACZ,KAAK,mBAAmB,EACxB,gCAAgC,EAChC,uCAAuC,EACvC,qBAAqB,EACrB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,8BAA8B,EAC9B,KAAK,oBAAoB,EACzB,kCAAkC,EAClC,KAAK,uBAAuB,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,KAAK,gCAAgC,EACrC,iCAAiC,EACjC,+BAA+B,EAC/B,uBAAuB,EACxB,MAAM,WAAW,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { InvalidRelaySelectorState, makeInitialRelayState, RelayDockState, RelaySelectorOption, RelaySelectorState, RelayState } from "./model.js";
|
|
2
|
+
export { AgenticProduct, ContinuePullRequestConversationRequest, layer, makeRelayProductAdapter, ProductAuthorization, PullRequestContinuationMessage, PullRequestConversation, PullRequestConversationAmbiguous, PullRequestConversationContinuation, PullRequestConversationContinuationFailed, PullRequestConversationContinuationRejected, PullRequestConversationLocator, PullRequestConversationLookupFailed, PullRequestConversationNotFound, PullRequestConversationRedirectFailed, PullRequestThreadIdentity, pullRequestThreadIdentity, RelayAuthenticationRequired, RelayAuthenticationUnavailable, RelayAuthorizationDenied, RelayProduct, RelayProductAdapterContractError, RelayProductContinuationReceiptMismatch, RelayProductOperation } from "./conversation.js";
|
|
3
|
+
export { RelayProductDock, RelayProductDockChrome, RelayProductDockChromeBoundary, RelayProductDockInvariantViolation, RelayProductDockProvider, RelayProductDockProviderMissing, relaySelectionMatchesRegistration, useRelayProductDockRegistration, useRelayPullRequestDock } from "./dock.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACX,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,cAAc,EACd,sCAAsC,EACtC,KAAK,EACL,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,gCAAgC,EAChC,mCAAmC,EACnC,yCAAyC,EAEzC,2CAA2C,EAC3C,8BAA8B,EAC9B,mCAAmC,EAEnC,+BAA+B,EAC/B,qCAAqC,EACrC,yBAAyB,EACzB,yBAAyB,EAEzB,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,YAAY,EAEZ,gCAAgC,EAChC,uCAAuC,EACvC,qBAAqB,EAEtB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,8BAA8B,EAE9B,kCAAkC,EAElC,wBAAwB,EACxB,+BAA+B,EAE/B,iCAAiC,EACjC,+BAA+B,EAC/B,uBAAuB,EACxB,MAAM,WAAW,CAAA"}
|
package/dist/model.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
export declare const RelaySelectorOption: Schema.Struct<{
|
|
4
|
+
readonly id: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
5
|
+
readonly label: Schema.String;
|
|
6
|
+
}>;
|
|
7
|
+
export interface RelaySelectorOption extends Schema.Schema.Type<typeof RelaySelectorOption> {
|
|
8
|
+
}
|
|
9
|
+
export declare const RelaySelectorState: Schema.Struct<{
|
|
10
|
+
readonly modelId: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
11
|
+
readonly models: Schema.$Array<Schema.Struct<{
|
|
12
|
+
readonly id: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
13
|
+
readonly label: Schema.String;
|
|
14
|
+
}>>;
|
|
15
|
+
readonly profileId: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
16
|
+
readonly profiles: Schema.$Array<Schema.Struct<{
|
|
17
|
+
readonly id: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
18
|
+
readonly label: Schema.String;
|
|
19
|
+
}>>;
|
|
20
|
+
}>;
|
|
21
|
+
export interface RelaySelectorState extends Schema.Schema.Type<typeof RelaySelectorState> {
|
|
22
|
+
}
|
|
23
|
+
export declare const RelayDockState: Schema.TaggedUnion<{
|
|
24
|
+
readonly collapsed: Schema.TaggedStruct<"collapsed", {}>;
|
|
25
|
+
readonly expanded: Schema.TaggedStruct<"expanded", {}>;
|
|
26
|
+
}>;
|
|
27
|
+
export type RelayDockState = typeof RelayDockState.Type;
|
|
28
|
+
export declare const RelayState: Schema.Struct<{
|
|
29
|
+
readonly dock: Schema.TaggedUnion<{
|
|
30
|
+
readonly collapsed: Schema.TaggedStruct<"collapsed", {}>;
|
|
31
|
+
readonly expanded: Schema.TaggedStruct<"expanded", {}>;
|
|
32
|
+
}>;
|
|
33
|
+
readonly selection: Schema.Struct<{
|
|
34
|
+
readonly modelId: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
35
|
+
readonly models: Schema.$Array<Schema.Struct<{
|
|
36
|
+
readonly id: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
37
|
+
readonly label: Schema.String;
|
|
38
|
+
}>>;
|
|
39
|
+
readonly profileId: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
40
|
+
readonly profiles: Schema.$Array<Schema.Struct<{
|
|
41
|
+
readonly id: Schema.brand<Schema.String, "RelaySelectorId">;
|
|
42
|
+
readonly label: Schema.String;
|
|
43
|
+
}>>;
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
export interface RelayState extends Schema.Schema.Type<typeof RelayState> {
|
|
47
|
+
}
|
|
48
|
+
declare const InvalidRelaySelectorState_base: Schema.Class<InvalidRelaySelectorState, Schema.TaggedStruct<"InvalidRelaySelectorState", {
|
|
49
|
+
readonly reason: Schema.Literals<readonly ["duplicate-model", "duplicate-profile", "invalid-input", "model-not-found", "profile-not-found"]>;
|
|
50
|
+
}>, import("effect/Cause").YieldableError>;
|
|
51
|
+
export declare class InvalidRelaySelectorState extends InvalidRelaySelectorState_base {
|
|
52
|
+
}
|
|
53
|
+
/** Decode the visible selector state and initialize the product-owned dock as collapsed. */
|
|
54
|
+
export declare const makeInitialRelayState: (input: {
|
|
55
|
+
readonly modelId: string;
|
|
56
|
+
readonly models: readonly {
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly label: string;
|
|
59
|
+
}[];
|
|
60
|
+
readonly profileId: string;
|
|
61
|
+
readonly profiles: readonly {
|
|
62
|
+
readonly id: string;
|
|
63
|
+
readonly label: string;
|
|
64
|
+
}[];
|
|
65
|
+
}) => Effect.Effect<{
|
|
66
|
+
readonly dock: {
|
|
67
|
+
readonly _tag: "collapsed";
|
|
68
|
+
} | {
|
|
69
|
+
readonly _tag: "expanded";
|
|
70
|
+
};
|
|
71
|
+
readonly selection: {
|
|
72
|
+
readonly modelId: string & import("effect/Brand").Brand<"RelaySelectorId">;
|
|
73
|
+
readonly models: readonly {
|
|
74
|
+
readonly id: string & import("effect/Brand").Brand<"RelaySelectorId">;
|
|
75
|
+
readonly label: string;
|
|
76
|
+
}[];
|
|
77
|
+
readonly profileId: string & import("effect/Brand").Brand<"RelaySelectorId">;
|
|
78
|
+
readonly profiles: readonly {
|
|
79
|
+
readonly id: string & import("effect/Brand").Brand<"RelaySelectorId">;
|
|
80
|
+
readonly label: string;
|
|
81
|
+
}[];
|
|
82
|
+
};
|
|
83
|
+
}, InvalidRelaySelectorState, never>;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAQvC,eAAO,MAAM,mBAAmB;;;EAG9B,CAAA;AACF,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,mBAAmB,CAAC;CAAG;AAY9F,eAAO,MAAM,kBAAkB;;;;;;;;;;;EAa9B,CAAA;AACD,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC;CAAG;AAE5F,eAAO,MAAM,cAAc;;;EAGzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;EAGrB,CAAA;AACF,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC;CAAG;;;;AAE5E,qBAAa,yBAA0B,SAAQ,8BAW9C;CAAG;AAIJ,4FAA4F;AAC5F,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAsBhC,CAAA"}
|
package/dist/model.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
const SelectorId = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)).pipe(Schema.brand("RelaySelectorId"));
|
|
4
|
+
export const RelaySelectorOption = Schema.Struct({
|
|
5
|
+
id: SelectorId,
|
|
6
|
+
label: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200))
|
|
7
|
+
});
|
|
8
|
+
const RelaySelectorStateInput = Schema.Struct({
|
|
9
|
+
modelId: SelectorId,
|
|
10
|
+
models: Schema.Array(RelaySelectorOption).check(Schema.isMinLength(1)),
|
|
11
|
+
profileId: SelectorId,
|
|
12
|
+
profiles: Schema.Array(RelaySelectorOption).check(Schema.isMinLength(1))
|
|
13
|
+
});
|
|
14
|
+
const hasUniqueOptionIds = (options) => new Set(options.map(({ id }) => id)).size === options.length;
|
|
15
|
+
export const RelaySelectorState = RelaySelectorStateInput.check(Schema.makeFilter(({ profiles }) => hasUniqueOptionIds(profiles), {
|
|
16
|
+
expected: "unique Relay profile option identifiers"
|
|
17
|
+
}), Schema.makeFilter(({ models }) => hasUniqueOptionIds(models), {
|
|
18
|
+
expected: "unique Relay model option identifiers"
|
|
19
|
+
}), Schema.makeFilter(({ profileId, profiles }) => profiles.some(({ id }) => id === profileId), {
|
|
20
|
+
expected: "a selected Relay profile present in the profile options"
|
|
21
|
+
}), Schema.makeFilter(({ modelId, models }) => models.some(({ id }) => id === modelId), {
|
|
22
|
+
expected: "a selected Relay model present in the model options"
|
|
23
|
+
}));
|
|
24
|
+
export const RelayDockState = Schema.TaggedUnion({
|
|
25
|
+
collapsed: {},
|
|
26
|
+
expanded: {}
|
|
27
|
+
});
|
|
28
|
+
export const RelayState = Schema.Struct({
|
|
29
|
+
dock: RelayDockState,
|
|
30
|
+
selection: RelaySelectorState
|
|
31
|
+
});
|
|
32
|
+
export class InvalidRelaySelectorState extends Schema.TaggedError()("InvalidRelaySelectorState", {
|
|
33
|
+
reason: Schema.Literals([
|
|
34
|
+
"duplicate-model",
|
|
35
|
+
"duplicate-profile",
|
|
36
|
+
"invalid-input",
|
|
37
|
+
"model-not-found",
|
|
38
|
+
"profile-not-found"
|
|
39
|
+
])
|
|
40
|
+
}) {
|
|
41
|
+
}
|
|
42
|
+
const decodeSelectorStateInput = Schema.decodeUnknownEffect(RelaySelectorStateInput);
|
|
43
|
+
/** Decode the visible selector state and initialize the product-owned dock as collapsed. */
|
|
44
|
+
export const makeInitialRelayState = Effect.fn("RelayProduct.makeInitialRelayState")(function* (input) {
|
|
45
|
+
const selection = yield* decodeSelectorStateInput(input).pipe(Effect.mapError(() => new InvalidRelaySelectorState({ reason: "invalid-input" })));
|
|
46
|
+
if (!hasUniqueOptionIds(selection.profiles)) {
|
|
47
|
+
return yield* new InvalidRelaySelectorState({ reason: "duplicate-profile" });
|
|
48
|
+
}
|
|
49
|
+
if (!hasUniqueOptionIds(selection.models)) {
|
|
50
|
+
return yield* new InvalidRelaySelectorState({ reason: "duplicate-model" });
|
|
51
|
+
}
|
|
52
|
+
if (!selection.profiles.some(({ id }) => id === selection.profileId)) {
|
|
53
|
+
return yield* new InvalidRelaySelectorState({ reason: "profile-not-found" });
|
|
54
|
+
}
|
|
55
|
+
if (!selection.models.some(({ id }) => id === selection.modelId)) {
|
|
56
|
+
return yield* new InvalidRelaySelectorState({ reason: "model-not-found" });
|
|
57
|
+
}
|
|
58
|
+
return RelayState.make({
|
|
59
|
+
dock: RelayDockState.cases.collapsed.make({}),
|
|
60
|
+
selection: RelaySelectorState.make(selection)
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACpC,MAAM,CAAC,SAAS,EAAE,EAClB,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CACxB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAEvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;CAC7F,CAAC,CAAA;AAGF,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtE,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CACzE,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAA2C,EAAW,EAAE,CAClF,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAA;AAE9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAC7D,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;IAChE,QAAQ,EAAE,yCAAyC;CACpD,CAAC,EACF,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;IAC5D,QAAQ,EAAE,uCAAuC;CAClD,CAAC,EACF,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;IAC1F,QAAQ,EAAE,yDAAyD;CACpE,CAAC,EACF,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;IAClF,QAAQ,EAAE,qDAAqD;CAChE,CAAC,CACH,CAAA;AAGD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;IAC/C,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;CACb,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,kBAAkB;CAC9B,CAAC,CAAA;AAGF,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,WAAW,EAA6B,CAC5F,2BAA2B,EAC3B;IACE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;QACtB,iBAAiB;QACjB,mBAAmB;QACnB,eAAe;QACf,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;CACH,CACF;CAAG;AAEJ,MAAM,wBAAwB,GAAG,MAAM,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAA;AAEpF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAAC,QAAQ,CAAC,EAC5F,KAA6C;IAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAClF,CAAA;IACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,IAAI,yBAAyB,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,CAAC,IAAI,yBAAyB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC,CAAC,IAAI,yBAAyB,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC,CAAC,IAAI,yBAAyB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;KAC9C,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type * as Effect from "effect/Effect";
|
|
2
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
3
|
+
import type { AgenticProduct, ContinuePullRequestConversationRequest, PullRequestConversation, PullRequestConversationContinuationFailure, PullRequestConversationLocator, PullRequestConversationLookupFailure, PullRequestConversationRedirectFailed, RelayAuthenticationFailure, RelayProductAdapterContractError, RelayProductContinuationReceiptMismatch } from "./conversation.js";
|
|
4
|
+
import type { RelaySelectorState } from "./model.js";
|
|
5
|
+
export interface RelayProductDockHost {
|
|
6
|
+
readonly context: ReadonlyArray<{
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly value: string;
|
|
10
|
+
}>;
|
|
11
|
+
readonly locatePullRequestConversation: (locator: PullRequestConversationLocator) => Effect.Effect<void, RelayProductDockLocateFailure>;
|
|
12
|
+
readonly product: AgenticProduct;
|
|
13
|
+
readonly selection: RelaySelectorState;
|
|
14
|
+
}
|
|
15
|
+
export interface RelayProductDockMessage {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly role: "operator" | "relay" | "system";
|
|
18
|
+
readonly text: string;
|
|
19
|
+
}
|
|
20
|
+
type RelayProductDockContinuationFailure = RelayAuthenticationFailure | PullRequestConversationContinuationFailure | RelayProductAdapterContractError | RelayProductContinuationReceiptMismatch;
|
|
21
|
+
type RelayProductDockLocateFailure = RelayAuthenticationFailure | PullRequestConversationLookupFailure | PullRequestConversationRedirectFailed | RelayProductAdapterContractError;
|
|
22
|
+
interface RelayPullRequestDockRegistrationBase {
|
|
23
|
+
readonly context: ReadonlyArray<{
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly label: string;
|
|
26
|
+
readonly value: string;
|
|
27
|
+
}>;
|
|
28
|
+
readonly conversation: PullRequestConversation;
|
|
29
|
+
readonly selection: RelaySelectorState;
|
|
30
|
+
}
|
|
31
|
+
export type RelayPullRequestDockRegistration = RelayPullRequestDockRegistrationBase & ({
|
|
32
|
+
readonly status: "loading";
|
|
33
|
+
} | {
|
|
34
|
+
readonly continuePullRequestConversation: (request: typeof ContinuePullRequestConversationRequest.Type) => Effect.Effect<void, RelayProductDockContinuationFailure>;
|
|
35
|
+
readonly messages: ReadonlyArray<RelayProductDockMessage>;
|
|
36
|
+
readonly status: "ready";
|
|
37
|
+
} | {
|
|
38
|
+
readonly description: string;
|
|
39
|
+
readonly status: "error" | "unavailable";
|
|
40
|
+
});
|
|
41
|
+
export declare class RelayProductDockProviderMissing extends Error {
|
|
42
|
+
readonly _tag = "RelayProductDockProviderMissing";
|
|
43
|
+
constructor();
|
|
44
|
+
}
|
|
45
|
+
/** Provide one route-lifetime registration slot without loading the dock chrome. */
|
|
46
|
+
export declare const RelayProductDockProvider: ({ children }: {
|
|
47
|
+
readonly children: ReactNode;
|
|
48
|
+
}) => ReactElement;
|
|
49
|
+
/** Attach one exact PR controller to the application-level Relay dock for this route lifetime. */
|
|
50
|
+
export declare const useRelayPullRequestDock: (registration: RelayPullRequestDockRegistration) => void;
|
|
51
|
+
/** Read the current route registration from the lightweight provider. */
|
|
52
|
+
export declare const useRelayProductDockRegistration: () => RelayPullRequestDockRegistration | null;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAA;AAEd,OAAO,KAAK,EACV,cAAc,EACd,sCAAsC,EACtC,uBAAuB,EACvB,0CAA0C,EAC1C,8BAA8B,EAC9B,oCAAoC,EACpC,qCAAqC,EACrC,0BAA0B,EAC1B,gCAAgC,EAChC,uCAAuC,EACxC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxG,QAAQ,CAAC,6BAA6B,EAAE,CACtC,OAAO,EAAE,8BAA8B,KACpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAA;IACvD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,KAAK,mCAAmC,GACpC,0BAA0B,GAC1B,0CAA0C,GAC1C,gCAAgC,GAChC,uCAAuC,CAAA;AAE3C,KAAK,6BAA6B,GAC9B,0BAA0B,GAC1B,oCAAoC,GACpC,qCAAqC,GACrC,gCAAgC,CAAA;AAEpC,UAAU,oCAAoC;IAC5C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxG,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;CACvC;AAED,MAAM,MAAM,gCAAgC,GAAG,oCAAoC,GACjF,CACI;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAC3B,GACD;IACE,QAAQ,CAAC,+BAA+B,EAAE,CACxC,OAAO,EAAE,OAAO,sCAAsC,CAAC,IAAI,KACxD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAA;IAC7D,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;IACzD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB,GACD;IACE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;CACzC,CACJ,CAAA;AAOH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,IAAI,qCAAoC;IAEjD,cAEC;CACF;AAID,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,iBAAkB;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,KAAG,YAUzF,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,uBAAuB,iBAAkB,gCAAgC,KAAG,IAIxF,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,+BAA+B,QAAO,gCAAgC,GAAG,IAIrF,CAAA"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
|
|
3
|
+
export class RelayProductDockProviderMissing extends Error {
|
|
4
|
+
_tag = "RelayProductDockProviderMissing";
|
|
5
|
+
constructor() {
|
|
6
|
+
super("Relay product dock provider is missing");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const RelayPullRequestDockContext = createContext(undefined);
|
|
10
|
+
/** Provide one route-lifetime registration slot without loading the dock chrome. */
|
|
11
|
+
export const RelayProductDockProvider = ({ children }) => {
|
|
12
|
+
const [registration, setRegistration] = useState(null);
|
|
13
|
+
const register = useCallback((next) => {
|
|
14
|
+
setRegistration(next);
|
|
15
|
+
return () => {
|
|
16
|
+
setRegistration((current) => (current === next ? null : current));
|
|
17
|
+
};
|
|
18
|
+
}, []);
|
|
19
|
+
const registry = useMemo(() => ({ register, registration }), [register, registration]);
|
|
20
|
+
return _jsx(RelayPullRequestDockContext, { value: registry, children: children });
|
|
21
|
+
};
|
|
22
|
+
/** Attach one exact PR controller to the application-level Relay dock for this route lifetime. */
|
|
23
|
+
export const useRelayPullRequestDock = (registration) => {
|
|
24
|
+
const registry = useContext(RelayPullRequestDockContext);
|
|
25
|
+
if (registry === undefined)
|
|
26
|
+
throw new RelayProductDockProviderMissing();
|
|
27
|
+
useEffect(() => registry.register(registration), [registration, registry.register]);
|
|
28
|
+
};
|
|
29
|
+
/** Read the current route registration from the lightweight provider. */
|
|
30
|
+
export const useRelayProductDockRegistration = () => {
|
|
31
|
+
const registry = useContext(RelayPullRequestDockContext);
|
|
32
|
+
if (registry === undefined)
|
|
33
|
+
throw new RelayProductDockProviderMissing();
|
|
34
|
+
return registry.registration;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,aAAa,EAGb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACT,MAAM,OAAO,CAAA;AAwEd,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,IAAI,GAAG,iCAAiC,CAAA;IAEjD;QACE,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACjD,CAAC;CACF;AAED,MAAM,2BAA2B,GAAG,aAAa,CAA2C,SAAS,CAAC,CAAA;AAEtG,oFAAoF;AACpF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAE,QAAQ,EAAoC,EAAgB,EAAE;IACvG,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAA0C,IAAI,CAAC,CAAA;IAC/F,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAsC,EAAE,EAAE;QACtE,eAAe,CAAC,IAAI,CAAC,CAAA;QACrB,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QACnE,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,MAAM,QAAQ,GAAG,OAAO,CAA+B,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAA;IACpH,OAAO,KAAC,2BAA2B,IAAC,KAAK,EAAE,QAAQ,YAAG,QAAQ,GAA+B,CAAA;AAC/F,CAAC,CAAA;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,YAA8C,EAAQ,EAAE;IAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAA;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,+BAA+B,EAAE,CAAA;IACvE,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;AACrF,CAAC,CAAA;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAA4C,EAAE;IAC3F,MAAM,QAAQ,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAA;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,+BAA+B,EAAE,CAAA;IACvE,OAAO,QAAQ,CAAC,YAAY,CAAA;AAC9B,CAAC,CAAA"}
|