dsh-llm-omp-transports 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -8
- package/lib/adapter.d.ts +86 -2
- package/lib/adapter.js +106 -2
- package/lib/adapter.js.map +1 -1
- package/lib/catalog/cursor.d.ts +4 -4
- package/lib/catalog/cursor.js +2 -2
- package/lib/catalog/devin.d.ts +4 -4
- package/lib/catalog/devin.js +2 -2
- package/lib/catalog/factory-droid.d.ts +31 -0
- package/lib/catalog/factory-droid.js +1183 -0
- package/lib/catalog/factory-droid.js.map +1 -0
- package/lib/catalog/gitlab-duo-agent.d.ts +26 -0
- package/lib/catalog/gitlab-duo-agent.js +29 -0
- package/lib/catalog/gitlab-duo-agent.js.map +1 -0
- package/lib/catalog/gitlab-duo.d.ts +32 -0
- package/lib/catalog/gitlab-duo.js +1049 -0
- package/lib/catalog/gitlab-duo.js.map +1 -0
- package/lib/catalog/google-antigravity.d.ts +4 -4
- package/lib/catalog/google-antigravity.js +2 -2
- package/lib/catalog/google-gemini-cli.d.ts +4 -4
- package/lib/catalog/google-gemini-cli.js +2 -2
- package/lib/factory-droid/auth.d.ts +123 -0
- package/lib/factory-droid/auth.js +326 -0
- package/lib/factory-droid/auth.js.map +1 -0
- package/lib/factory-droid/credentials.d.ts +41 -0
- package/lib/factory-droid/credentials.js +185 -0
- package/lib/factory-droid/credentials.js.map +1 -0
- package/lib/gitlab/auth.d.ts +192 -0
- package/lib/gitlab/auth.js +349 -0
- package/lib/gitlab/auth.js.map +1 -0
- package/lib/gitlab/credentials.d.ts +59 -0
- package/lib/gitlab/credentials.js +163 -0
- package/lib/gitlab/credentials.js.map +1 -0
- package/lib/google/callback-listener.d.ts +19 -2
- package/lib/google/callback-listener.js +2 -2
- package/lib/google/callback-listener.js.map +1 -1
- package/lib/google/route.d.ts +3 -1
- package/lib/google/route.js.map +1 -1
- package/lib/index.d.ts +357 -16
- package/lib/index.js +430 -15
- package/lib/index.js.map +1 -1
- package/lib/omp/cursor.mjs +183 -47
- package/lib/omp/devin.mjs +46 -40
- package/lib/omp/factory-droid.mjs +37069 -0
- package/lib/omp/gitlab-duo-agent.mjs +12671 -0
- package/lib/omp/gitlab-duo.mjs +51506 -0
- package/lib/omp/google.mjs +31 -9
- package/lib/omp.d.ts +179 -0
- package/lib/projection.d.ts +160 -3
- package/lib/projection.js +186 -0
- package/lib/projection.js.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -11,8 +11,8 @@ and the plugin page lists both bundle components
|
|
|
11
11
|
|---|---|
|
|
12
12
|
| npm package | `dsh-llm-omp-transports` |
|
|
13
13
|
| Plugin id | `llm-omp-transports` |
|
|
14
|
-
| Routes | `cursor`, `devin`, `google-gemini-cli`, `google-antigravity` (the seam is provider-generic) |
|
|
15
|
-
| Credential scope | `llm-omp-transports/<provider
|
|
14
|
+
| Routes | `cursor`, `devin`, `google-gemini-cli`, `google-antigravity`, `factory-droid`, `gitlab-duo`, `gitlab-duo-agent` (the seam is provider-generic) |
|
|
15
|
+
| Credential scope | `llm-omp-transports/<provider>` — one record per route (`cursor`, `devin`, `google-gemini-cli`, `google-antigravity`, `factory-droid`, `gitlab-duo`, `gitlab-duo-agent`) |
|
|
16
16
|
| Runtime | Node 24 (the bundle imports Node builtins only) |
|
|
17
17
|
| License | MIT |
|
|
18
18
|
|
|
@@ -124,6 +124,55 @@ records — not a second code path.
|
|
|
124
124
|
decodes through `Bun.Image`, which does not exist under Node, so that path is
|
|
125
125
|
dead here by construction; the projection never reaches it.
|
|
126
126
|
|
|
127
|
+
## Factory Droid support status
|
|
128
|
+
|
|
129
|
+
- **Text streaming** — yes, including reasoning parts and usage.
|
|
130
|
+
- **Wires** — four protocols behind one proxy, selected by the model **id** inside the
|
|
131
|
+
artifact (Anthropic Messages for Claude rows, the Responses API for GPT/Grok, Chat
|
|
132
|
+
Completions for Kimi/GLM/DeepSeek, native generateContent for Gemini). The plugin never
|
|
133
|
+
chooses a backend, and rows carry no base URL: the transport derives the per-wire proxy
|
|
134
|
+
path and honours the account's residency host.
|
|
135
|
+
- **Sign-in** — WorkOS **device code**: the flow shows the verification page and the user
|
|
136
|
+
code, the human approves in the browser, and the poll completes the grant. No listener and
|
|
137
|
+
no paste; the attempt's own signal is the only cancellation channel.
|
|
138
|
+
- **Refresh** — yes: one refresh inside a 60 s window under the credential store's per-key
|
|
139
|
+
lock, keeping the account scope (`orgId`/`region`/`inferenceRegion`), which the adapter
|
|
140
|
+
forwards to the transport as `oauthIdentity` so a EU account gets its own host.
|
|
141
|
+
- **Catalog** — 62 rows from the KDL registry seed (`models.json` has no factory-droid key),
|
|
142
|
+
zero-cost Factory credits.
|
|
143
|
+
- **Build** — the graph needs three **entry-scoped build substitutions** (empty catalog data,
|
|
144
|
+
a lean provider registry, a lean env-key map) to fit its ceiling; see the limits below.
|
|
145
|
+
|
|
146
|
+
## GitLab Duo support status
|
|
147
|
+
|
|
148
|
+
Two routes over GitLab's AI surface, both registered from one catalog pin.
|
|
149
|
+
|
|
150
|
+
**`gitlab-duo` (proxy).** The transport POSTs for a direct-access token, substitutes the
|
|
151
|
+
row's `upstreamModelId` and delegates to one of three generic wire transports
|
|
152
|
+
(Anthropic Messages, OpenAI Responses, Chat Completions) through GitLab's gateway.
|
|
153
|
+
|
|
154
|
+
- 16 catalog rows carrying the upstream id, the wire and the full compat object.
|
|
155
|
+
- **Sign-in** — OAuth code with PKCE, the loopback listener on `localhost:8080/callback`
|
|
156
|
+
**without port fallback** (the redirect is registered exactly) and a paste prompt as the
|
|
157
|
+
fallback path. `GITLAB_CLIENT_ID`/`GITLAB_REDIRECT_URI` support a custom OAuth app, and a
|
|
158
|
+
`GITLAB_TOKEN` personal access token works as the bearer.
|
|
159
|
+
- **Refresh** — one refresh inside a 60 s window; the artifact's direct-access token cache
|
|
160
|
+
is keyed on the GitLab token, so a rotated token misses it by construction.
|
|
161
|
+
|
|
162
|
+
**`gitlab-duo-agent` (Duo Workflow).** One WebSocket workflow per turn; GitLab's
|
|
163
|
+
server-side loop yields at every tool call, so DSH's native tool loop executes them and the
|
|
164
|
+
next turn replays the result through the goal transcript.
|
|
165
|
+
|
|
166
|
+
- 1 static row (`claude_sonnet_4_6_vertex`, 1M context); live model discovery is not
|
|
167
|
+
implemented, and the server may pin another model on its side.
|
|
168
|
+
- **Sign-in** — paste-only: the browser hands the code to VS Code, so the human pastes the
|
|
169
|
+
full `vscode://gitlab.gitlab-workflow/authentication?code=…&state=…` URL. The state is
|
|
170
|
+
mandatory (no listener means it is the only thing tying the paste to the attempt), and a
|
|
171
|
+
refresh echoes the `vscode` redirect.
|
|
172
|
+
- **Session state** — a fresh map per request (plan A6): each turn re-seeds a workflow and
|
|
173
|
+
replays the transcript instead of resuming another turn's socket. Correct but heavier;
|
|
174
|
+
sticky resume is a follow-up.
|
|
175
|
+
|
|
127
176
|
## Hard constraints
|
|
128
177
|
|
|
129
178
|
- **Pinned, build-time-only omp.** `@oh-my-pi/pi-ai` and `@oh-my-pi/pi-catalog`
|
|
@@ -208,6 +257,13 @@ records — not a second code path.
|
|
|
208
257
|
code skips the state check (the page is the only place the state could
|
|
209
258
|
travel).
|
|
210
259
|
|
|
260
|
+
- **The Factory Droid artifact strips the registry-derived env-key map.** Its graph would
|
|
261
|
+
otherwise pull omp's whole provider registry, so one entry-scoped substitution keeps the
|
|
262
|
+
pin's `getEnvApiKey` but not the `PROVIDER_REGISTRY` half — the computed Foundry/ADC/Bedrock
|
|
263
|
+
resolvers are gone. That path is unreachable for this route (every request carries the
|
|
264
|
+
stored WorkOS token), and a catalog-declared plain variable (`OPENAI_API_KEY`, …) still
|
|
265
|
+
resolves. The install id is per-process rather than persisted for the same reason: the
|
|
266
|
+
transport must not write to a user's home.
|
|
211
267
|
- **Unofficial Google clients.** The Google routes reuse the OAuth clients and
|
|
212
268
|
client identities the pinned omp rules capture — Gemini CLI
|
|
213
269
|
(`GeminiCLI/0.46.0/...` plus `Client-Metadata`) and Antigravity
|
|
@@ -283,11 +339,29 @@ plugin surface.
|
|
|
283
339
|
|
|
284
340
|
Released under the [MIT License](../../LICENSE).
|
|
285
341
|
|
|
342
|
+
- **The GitLab Duo proxy is the largest artifact.** It bundles three production wire
|
|
343
|
+
transports plus GitLab's gateway shim, which is why its ceiling is the package's highest;
|
|
344
|
+
the same entry-scoped substitutions keep the model catalog and the builtin registry out.
|
|
345
|
+
- **Duo's Anthropic inner wire is not proven end-to-end in the suite.** The transport retries
|
|
346
|
+
a refused turn on that wire, so the test bounds the turn and asserts the request; the SSE
|
|
347
|
+
decode itself is exercised through the OpenAI wires and by the sibling routes' suites.
|
|
348
|
+
- **`gitlab-duo-agent`'s checkpoint loop is not proven in-suite.** The suite proves the REST
|
|
349
|
+
bootstrap, the bearer, and that no socket opens before a workflow exists, plus the adapter's
|
|
350
|
+
tool handoff contract; the fake-socket round trip (start frame, checkpoint deltas,
|
|
351
|
+
`runMCPTool` reseed, stall restart) needs a scripted nine-call bootstrap and a checkpoint
|
|
352
|
+
corpus, and is the recorded follow-up. The first live turn is a manual smoke item.
|
|
353
|
+
|
|
286
354
|
## Deferred
|
|
287
355
|
|
|
288
|
-
`factory-droid`
|
|
289
|
-
`
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
356
|
+
`factory-droid` **ships** in this component: the 17 MB graph that kept it out of the earlier
|
|
357
|
+
plan (issue `I-000253`) is built through the accepted, drift-gated build substitutions, so the
|
|
358
|
+
issue is resolved by that work rather than bypassed. What remains deferred is narrower:
|
|
359
|
+
|
|
360
|
+
- **Sticky GitLab Duo workflow resume.** Each turn re-seeds a workflow and replays the goal
|
|
361
|
+
transcript instead of resuming the previous socket; correct but heavier, and the in-memory
|
|
362
|
+
session map that would resume it is a follow-up.
|
|
363
|
+
- **The live transcript proof for `gitlab-duo-agent`.** The fake-socket checkpoint round trip
|
|
364
|
+
(start frame, checkpoint deltas, `runMCPTool` reseed, stall restart) needs a scripted REST
|
|
365
|
+
bootstrap plus a checkpoint corpus, and the first live turn is a manual smoke item.
|
|
366
|
+
- **The Duo Anthropic inner wire's SSE decode** — the wire retries a refused turn, so its
|
|
367
|
+
suite bounds the turn and asserts the request instead of the stream.
|
package/lib/adapter.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ import { LlmAdapter } from '@deepseek-ai/dsh-llm';
|
|
|
20
20
|
import type { GenerateOptions, LlmModelInfo, LlmProviderInfo, LlmResolvedModelInfo, StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
21
21
|
import type { RouteProfile } from './projection.js';
|
|
22
22
|
import type { OmpAssistantMessageEvent, OmpContext } from './omp.js';
|
|
23
|
-
import type { CursorModelRow, DevinModelRow, GoogleModelRow, OmpCursorModel, OmpCursorOptions, OmpDevinModel, OmpDevinOptions, OmpGoogleModel, OmpGoogleOptions } from './omp.js';
|
|
23
|
+
import type { CursorModelRow, DevinModelRow, FactoryDroidModelRow, GitLabDuoAgentModelRow, GitLabDuoModelRow, GoogleModelRow, OmpCursorModel, OmpCursorOptions, OmpDevinModel, OmpDevinOptions, OmpFactoryDroidModel, OmpFactoryDroidOptions, OmpGitLabDuoAgentModel, OmpGitLabDuoModel, OmpGitLabDuoOptions, OmpGitLabDuoWorkflowOptions, OmpGoogleModel, OmpGoogleOptions } from './omp.js';
|
|
24
24
|
/** The Cursor provider route this adapter owns. */
|
|
25
25
|
export declare const CURSOR_ROUTE = "cursor";
|
|
26
26
|
/** The Devin provider route this adapter owns. */
|
|
@@ -29,6 +29,12 @@ export declare const DEVIN_ROUTE = "devin";
|
|
|
29
29
|
export declare const GOOGLE_GEMINI_CLI_ROUTE = "google-gemini-cli";
|
|
30
30
|
/** The Antigravity provider route this adapter owns. */
|
|
31
31
|
export declare const GOOGLE_ANTIGRAVITY_ROUTE = "google-antigravity";
|
|
32
|
+
/** The Factory Droid provider route this adapter owns. */
|
|
33
|
+
export declare const FACTORY_DROID_ROUTE = "factory-droid";
|
|
34
|
+
/** The GitLab Duo proxy provider route this adapter owns. */
|
|
35
|
+
export declare const GITLAB_DUO_ROUTE = "gitlab-duo";
|
|
36
|
+
/** The GitLab Duo agent (Duo Workflow) provider route this adapter owns. */
|
|
37
|
+
export declare const GITLAB_DUO_AGENT_ROUTE = "gitlab-duo-agent";
|
|
32
38
|
/** Machine code for a model id the generated catalog does not contain. */
|
|
33
39
|
export declare const UNKNOWN_MODEL = "UNKNOWN_MODEL";
|
|
34
40
|
/** Machine code for a provider route this adapter does not serve. */
|
|
@@ -58,7 +64,7 @@ export interface ProjectedTransportRequest<Model, Options> {
|
|
|
58
64
|
/** What differs between the routes: identity, catalog, projection and credential record. */
|
|
59
65
|
export interface TransportRoute<Row extends TransportRow, Model, Options extends TransportOptions> {
|
|
60
66
|
/** Provider id; also the registered route set the projection's profile accepts. */
|
|
61
|
-
readonly id: 'cursor' | 'devin' | 'google-gemini-cli' | 'google-antigravity';
|
|
67
|
+
readonly id: 'cursor' | 'devin' | 'factory-droid' | 'gitlab-duo' | 'gitlab-duo-agent' | 'google-gemini-cli' | 'google-antigravity';
|
|
62
68
|
/** Models-page / provider-info display name. */
|
|
63
69
|
readonly displayName: string;
|
|
64
70
|
/** The `ctx.credentials` record this route reads. */
|
|
@@ -93,6 +99,43 @@ export declare const DEVIN_TRANSPORT_ROUTE: TransportRoute<DevinModelRow, OmpDev
|
|
|
93
99
|
export declare const GOOGLE_GEMINI_CLI_TRANSPORT_ROUTE: TransportRoute<GoogleModelRow, OmpGoogleModel, OmpGoogleOptions>;
|
|
94
100
|
/** The Antigravity route's facts: the same provider over its own catalog and endpoint family. */
|
|
95
101
|
export declare const GOOGLE_ANTIGRAVITY_TRANSPORT_ROUTE: TransportRoute<GoogleModelRow, OmpGoogleModel, OmpGoogleOptions>;
|
|
102
|
+
/**
|
|
103
|
+
* The Factory Droid route's credential record.
|
|
104
|
+
*
|
|
105
|
+
* The WorkOS device-code resolver that reads and writes it lands with the auth
|
|
106
|
+
* task; the key is declared here because the adapter is what names it in
|
|
107
|
+
* `assertUsableApiKey` refusals, and both sides must agree on the string.
|
|
108
|
+
*/
|
|
109
|
+
export declare const FACTORY_DROID_CREDENTIAL_KEY: "llm-omp-transports/factory-droid";
|
|
110
|
+
/**
|
|
111
|
+
* The Factory Droid route's facts.
|
|
112
|
+
*
|
|
113
|
+
* The rows come from the KDL registry seed (the pin's `models.json` has no
|
|
114
|
+
* factory-droid rows), and the transport picks one of four wire protocols from
|
|
115
|
+
* the model id inside the artifact, so the route record carries no wire field.
|
|
116
|
+
*/
|
|
117
|
+
export declare const FACTORY_DROID_TRANSPORT_ROUTE: TransportRoute<FactoryDroidModelRow, OmpFactoryDroidModel, OmpFactoryDroidOptions>;
|
|
118
|
+
/** The GitLab Duo proxy route's credential record. */
|
|
119
|
+
export declare const GITLAB_DUO_CREDENTIAL_KEY: "llm-omp-transports/gitlab-duo";
|
|
120
|
+
/**
|
|
121
|
+
* The GitLab Duo proxy route's facts.
|
|
122
|
+
*
|
|
123
|
+
* The rows come from the pinned catalog's proxy table; each carries the upstream
|
|
124
|
+
* id and the wire the gateway routes it to, so the route record needs no wire
|
|
125
|
+
* field — the transport resolves both from the row.
|
|
126
|
+
*/
|
|
127
|
+
export declare const GITLAB_DUO_TRANSPORT_ROUTE: TransportRoute<GitLabDuoModelRow, OmpGitLabDuoModel, OmpGitLabDuoOptions>;
|
|
128
|
+
/** The GitLab Duo agent route's credential record. */
|
|
129
|
+
export declare const GITLAB_DUO_AGENT_CREDENTIAL_KEY: "llm-omp-transports/gitlab-duo-agent";
|
|
130
|
+
/**
|
|
131
|
+
* The GitLab Duo agent route's facts.
|
|
132
|
+
*
|
|
133
|
+
* One static row: the provider's live model discovery is a non-goal for this
|
|
134
|
+
* slice, so the picker offers what the pinned catalog declares. The transport
|
|
135
|
+
* runs GitLab's server-side workflow loop over a WebSocket; tool execution stays
|
|
136
|
+
* on DSH's side, so the route record carries no executor or wire-model field.
|
|
137
|
+
*/
|
|
138
|
+
export declare const GITLAB_DUO_AGENT_TRANSPORT_ROUTE: TransportRoute<GitLabDuoAgentModelRow, OmpGitLabDuoAgentModel, OmpGitLabDuoWorkflowOptions>;
|
|
96
139
|
/** What an adapter needs from its host plugin. */
|
|
97
140
|
export interface OmpAdapterOptions<Model, Options extends TransportOptions> {
|
|
98
141
|
/**
|
|
@@ -118,6 +161,18 @@ export interface OmpAdapterOptions<Model, Options extends TransportOptions> {
|
|
|
118
161
|
* a non-empty list narrows the advertised models and the accepted ids.
|
|
119
162
|
*/
|
|
120
163
|
models?: () => readonly string[] | undefined;
|
|
164
|
+
/**
|
|
165
|
+
* Extra transport options resolved per request, after the credential.
|
|
166
|
+
*
|
|
167
|
+
* @remarks
|
|
168
|
+
* The Factory Droid route stores its account scope (`orgId`/`region`/
|
|
169
|
+
* `inferenceRegion`) with the grant, and the transport needs it as
|
|
170
|
+
* `options.oauthIdentity` to pick the EU host. The base class merges whatever
|
|
171
|
+
* this returns into the transport options, so a route that has no such data
|
|
172
|
+
* (cursor, devin, google, gitlab) simply omits it — the ignored-field contract
|
|
173
|
+
* the design chose over a route-specific adapter subclass.
|
|
174
|
+
*/
|
|
175
|
+
identity?: () => Promise<Readonly<Record<string, unknown>> | undefined>;
|
|
121
176
|
}
|
|
122
177
|
/** The adapter configuration for one concrete route. */
|
|
123
178
|
interface OmpRouteAdapterConfig<Row extends TransportRow, Model, Options extends TransportOptions> extends OmpAdapterOptions<Model, Options> {
|
|
@@ -140,6 +195,17 @@ declare abstract class OmpTransportAdapter<Row extends TransportRow, Model, Opti
|
|
|
140
195
|
private allowed;
|
|
141
196
|
/** Resolve one catalog row, refusing ids the configured allow-list excludes. */
|
|
142
197
|
private rowFor;
|
|
198
|
+
/**
|
|
199
|
+
* Describe this adapter's own route, echoing the id it was asked about.
|
|
200
|
+
*
|
|
201
|
+
* @remarks
|
|
202
|
+
* The id is echoed back (`id: provider`) so a caller sees the route it named,
|
|
203
|
+
* but only for a route this adapter owns: a foreign id raises
|
|
204
|
+
* {@link UNKNOWN_PROVIDER} instead of answering another provider's id with
|
|
205
|
+
* this route's display name. That guard is a deliberate tightening over the
|
|
206
|
+
* Cursor adapter's first behaviour (it once returned a display name for any
|
|
207
|
+
* id); it applies to every route and is pinned in both directions.
|
|
208
|
+
*/
|
|
143
209
|
providerInfo(provider: string): LlmProviderInfo;
|
|
144
210
|
listModels(provider: string): Promise<readonly LlmModelInfo[]>;
|
|
145
211
|
resolveModel(provider: string, model: string): Promise<LlmResolvedModelInfo>;
|
|
@@ -172,4 +238,22 @@ export declare class OmpGoogleGeminiCliAdapter extends OmpTransportAdapter<Googl
|
|
|
172
238
|
export declare class OmpGoogleAntigravityAdapter extends OmpTransportAdapter<GoogleModelRow, OmpGoogleModel, OmpGoogleOptions> {
|
|
173
239
|
constructor(options: OmpGoogleAdapterConfig);
|
|
174
240
|
}
|
|
241
|
+
/** The DSH llm adapter configuration for the Factory Droid route. */
|
|
242
|
+
export type OmpFactoryDroidAdapterConfig = OmpAdapterOptions<OmpFactoryDroidModel, OmpFactoryDroidOptions>;
|
|
243
|
+
/** The Factory Droid adapter: the bundled `streamFactoryDroid` over the registry seed catalog. */
|
|
244
|
+
export declare class OmpFactoryDroidAdapter extends OmpTransportAdapter<FactoryDroidModelRow, OmpFactoryDroidModel, OmpFactoryDroidOptions> {
|
|
245
|
+
constructor(options: OmpFactoryDroidAdapterConfig);
|
|
246
|
+
}
|
|
247
|
+
/** The DSH llm adapter configuration for the GitLab Duo agent route. */
|
|
248
|
+
export type OmpGitLabDuoAgentAdapterConfig = OmpAdapterOptions<OmpGitLabDuoAgentModel, OmpGitLabDuoWorkflowOptions>;
|
|
249
|
+
/** The GitLab Duo agent adapter: the bundled workflow transport over its one-row catalog. */
|
|
250
|
+
export declare class OmpGitLabDuoAgentAdapter extends OmpTransportAdapter<GitLabDuoAgentModelRow, OmpGitLabDuoAgentModel, OmpGitLabDuoWorkflowOptions> {
|
|
251
|
+
constructor(options: OmpGitLabDuoAgentAdapterConfig);
|
|
252
|
+
}
|
|
253
|
+
/** The DSH llm adapter configuration for the GitLab Duo proxy route. */
|
|
254
|
+
export type OmpGitLabDuoAdapterConfig = OmpAdapterOptions<OmpGitLabDuoModel, OmpGitLabDuoOptions>;
|
|
255
|
+
/** The GitLab Duo adapter: the bundled proxy transport over its 16-row catalog. */
|
|
256
|
+
export declare class OmpGitLabDuoAdapter extends OmpTransportAdapter<GitLabDuoModelRow, OmpGitLabDuoModel, OmpGitLabDuoOptions> {
|
|
257
|
+
constructor(options: OmpGitLabDuoAdapterConfig);
|
|
258
|
+
}
|
|
175
259
|
export {};
|
package/lib/adapter.js
CHANGED
|
@@ -19,11 +19,14 @@
|
|
|
19
19
|
import { LlmAdapter, LlmError, ReasoningEffortId, assertUsableApiKey } from '@deepseek-ai/dsh-llm';
|
|
20
20
|
import { CURSOR_MODELS } from './catalog/cursor.js';
|
|
21
21
|
import { DEVIN_MODELS } from './catalog/devin.js';
|
|
22
|
+
import { FACTORY_DROID_MODELS } from './catalog/factory-droid.js';
|
|
23
|
+
import { GITLAB_DUO_MODELS } from './catalog/gitlab-duo.js';
|
|
24
|
+
import { GITLAB_DUO_AGENT_MODELS } from './catalog/gitlab-duo-agent.js';
|
|
22
25
|
import { GOOGLE_ANTIGRAVITY_MODELS } from './catalog/google-antigravity.js';
|
|
23
26
|
import { GOOGLE_GEMINI_CLI_MODELS } from './catalog/google-gemini-cli.js';
|
|
24
27
|
import { CURSOR_CREDENTIAL_KEY } from './cursor/credentials.js';
|
|
25
28
|
import { DEVIN_CREDENTIAL_KEY } from './devin/credentials.js';
|
|
26
|
-
import { CURSOR_PROFILE, DEVIN_PROFILE, GOOGLE_ANTIGRAVITY_PROFILE, GOOGLE_GEMINI_CLI_PROFILE, abortedFinish, projectDevinRequest, projectEvents, projectGoogleRequest, projectRequest, } from './projection.js';
|
|
29
|
+
import { CURSOR_PROFILE, DEVIN_PROFILE, FACTORY_DROID_PROFILE, GITLAB_DUO_AGENT_PROFILE, GITLAB_DUO_PROFILE, GOOGLE_ANTIGRAVITY_PROFILE, GOOGLE_GEMINI_CLI_PROFILE, abortedFinish, projectDevinRequest, projectEvents, projectFactoryDroidRequest, projectGitLabDuoAgentRequest, projectGitLabDuoRequest, projectGoogleRequest, projectRequest, } from './projection.js';
|
|
27
30
|
/** The Cursor provider route this adapter owns. */
|
|
28
31
|
export const CURSOR_ROUTE = 'cursor';
|
|
29
32
|
/** The Devin provider route this adapter owns. */
|
|
@@ -32,6 +35,12 @@ export const DEVIN_ROUTE = 'devin';
|
|
|
32
35
|
export const GOOGLE_GEMINI_CLI_ROUTE = 'google-gemini-cli';
|
|
33
36
|
/** The Antigravity provider route this adapter owns. */
|
|
34
37
|
export const GOOGLE_ANTIGRAVITY_ROUTE = 'google-antigravity';
|
|
38
|
+
/** The Factory Droid provider route this adapter owns. */
|
|
39
|
+
export const FACTORY_DROID_ROUTE = 'factory-droid';
|
|
40
|
+
/** The GitLab Duo proxy provider route this adapter owns. */
|
|
41
|
+
export const GITLAB_DUO_ROUTE = 'gitlab-duo';
|
|
42
|
+
/** The GitLab Duo agent (Duo Workflow) provider route this adapter owns. */
|
|
43
|
+
export const GITLAB_DUO_AGENT_ROUTE = 'gitlab-duo-agent';
|
|
35
44
|
/** Machine code for a model id the generated catalog does not contain. */
|
|
36
45
|
export const UNKNOWN_MODEL = 'UNKNOWN_MODEL';
|
|
37
46
|
/** Machine code for a provider route this adapter does not serve. */
|
|
@@ -102,6 +111,64 @@ export const GOOGLE_ANTIGRAVITY_TRANSPORT_ROUTE = {
|
|
|
102
111
|
project: (row, options) => projectGoogleRequest(row, GOOGLE_ANTIGRAVITY_PROFILE, options),
|
|
103
112
|
efforts: row => row.thinking?.efforts,
|
|
104
113
|
};
|
|
114
|
+
/**
|
|
115
|
+
* The Factory Droid route's credential record.
|
|
116
|
+
*
|
|
117
|
+
* The WorkOS device-code resolver that reads and writes it lands with the auth
|
|
118
|
+
* task; the key is declared here because the adapter is what names it in
|
|
119
|
+
* `assertUsableApiKey` refusals, and both sides must agree on the string.
|
|
120
|
+
*/
|
|
121
|
+
export const FACTORY_DROID_CREDENTIAL_KEY = `llm-omp-transports/${FACTORY_DROID_ROUTE}`;
|
|
122
|
+
/**
|
|
123
|
+
* The Factory Droid route's facts.
|
|
124
|
+
*
|
|
125
|
+
* The rows come from the KDL registry seed (the pin's `models.json` has no
|
|
126
|
+
* factory-droid rows), and the transport picks one of four wire protocols from
|
|
127
|
+
* the model id inside the artifact, so the route record carries no wire field.
|
|
128
|
+
*/
|
|
129
|
+
export const FACTORY_DROID_TRANSPORT_ROUTE = {
|
|
130
|
+
id: FACTORY_DROID_ROUTE,
|
|
131
|
+
displayName: 'Factory Droid',
|
|
132
|
+
credentialKey: FACTORY_DROID_CREDENTIAL_KEY,
|
|
133
|
+
profile: FACTORY_DROID_PROFILE,
|
|
134
|
+
models: FACTORY_DROID_MODELS,
|
|
135
|
+
project: (row, options) => projectFactoryDroidRequest(row, options),
|
|
136
|
+
};
|
|
137
|
+
/** The GitLab Duo proxy route's credential record. */
|
|
138
|
+
export const GITLAB_DUO_CREDENTIAL_KEY = `llm-omp-transports/${GITLAB_DUO_ROUTE}`;
|
|
139
|
+
/**
|
|
140
|
+
* The GitLab Duo proxy route's facts.
|
|
141
|
+
*
|
|
142
|
+
* The rows come from the pinned catalog's proxy table; each carries the upstream
|
|
143
|
+
* id and the wire the gateway routes it to, so the route record needs no wire
|
|
144
|
+
* field — the transport resolves both from the row.
|
|
145
|
+
*/
|
|
146
|
+
export const GITLAB_DUO_TRANSPORT_ROUTE = {
|
|
147
|
+
id: GITLAB_DUO_ROUTE,
|
|
148
|
+
displayName: 'GitLab Duo',
|
|
149
|
+
credentialKey: GITLAB_DUO_CREDENTIAL_KEY,
|
|
150
|
+
profile: GITLAB_DUO_PROFILE,
|
|
151
|
+
models: GITLAB_DUO_MODELS,
|
|
152
|
+
project: (row, options) => projectGitLabDuoRequest(row, options),
|
|
153
|
+
};
|
|
154
|
+
/** The GitLab Duo agent route's credential record. */
|
|
155
|
+
export const GITLAB_DUO_AGENT_CREDENTIAL_KEY = `llm-omp-transports/${GITLAB_DUO_AGENT_ROUTE}`;
|
|
156
|
+
/**
|
|
157
|
+
* The GitLab Duo agent route's facts.
|
|
158
|
+
*
|
|
159
|
+
* One static row: the provider's live model discovery is a non-goal for this
|
|
160
|
+
* slice, so the picker offers what the pinned catalog declares. The transport
|
|
161
|
+
* runs GitLab's server-side workflow loop over a WebSocket; tool execution stays
|
|
162
|
+
* on DSH's side, so the route record carries no executor or wire-model field.
|
|
163
|
+
*/
|
|
164
|
+
export const GITLAB_DUO_AGENT_TRANSPORT_ROUTE = {
|
|
165
|
+
id: GITLAB_DUO_AGENT_ROUTE,
|
|
166
|
+
displayName: 'GitLab Duo Agent',
|
|
167
|
+
credentialKey: GITLAB_DUO_AGENT_CREDENTIAL_KEY,
|
|
168
|
+
profile: GITLAB_DUO_AGENT_PROFILE,
|
|
169
|
+
models: GITLAB_DUO_AGENT_MODELS,
|
|
170
|
+
project: (row, options) => projectGitLabDuoAgentRequest(row, options),
|
|
171
|
+
};
|
|
105
172
|
/**
|
|
106
173
|
* The DSH llm adapter for one omp-backed route.
|
|
107
174
|
*
|
|
@@ -133,6 +200,17 @@ class OmpTransportAdapter extends LlmAdapter {
|
|
|
133
200
|
}
|
|
134
201
|
return row;
|
|
135
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Describe this adapter's own route, echoing the id it was asked about.
|
|
205
|
+
*
|
|
206
|
+
* @remarks
|
|
207
|
+
* The id is echoed back (`id: provider`) so a caller sees the route it named,
|
|
208
|
+
* but only for a route this adapter owns: a foreign id raises
|
|
209
|
+
* {@link UNKNOWN_PROVIDER} instead of answering another provider's id with
|
|
210
|
+
* this route's display name. That guard is a deliberate tightening over the
|
|
211
|
+
* Cursor adapter's first behaviour (it once returned a display name for any
|
|
212
|
+
* id); it applies to every route and is pinned in both directions.
|
|
213
|
+
*/
|
|
136
214
|
providerInfo(provider) {
|
|
137
215
|
this.assertRoute(provider);
|
|
138
216
|
return { id: provider, name: this.config.route.displayName };
|
|
@@ -194,7 +272,15 @@ class OmpTransportAdapter extends LlmAdapter {
|
|
|
194
272
|
yield abortedFinish();
|
|
195
273
|
return;
|
|
196
274
|
}
|
|
197
|
-
|
|
275
|
+
// Route-specific extras (Factory Droid's account scope) merge beside the
|
|
276
|
+
// credential: they are read from the same record the token came from, so the
|
|
277
|
+
// transport never sees a half-known identity.
|
|
278
|
+
const extras = await this.config.identity?.();
|
|
279
|
+
const transportOptions = {
|
|
280
|
+
...request.options,
|
|
281
|
+
apiKey: accessKey,
|
|
282
|
+
...(extras === undefined ? {} : extras),
|
|
283
|
+
};
|
|
198
284
|
yield* projectEvents(this.config.transport(request.model, request.context, transportOptions), options.signal, this.config.route.profile);
|
|
199
285
|
}
|
|
200
286
|
/** Build the seam's exact-model metadata from one catalog row. */
|
|
@@ -253,4 +339,22 @@ export class OmpGoogleAntigravityAdapter extends OmpTransportAdapter {
|
|
|
253
339
|
super({ route: GOOGLE_ANTIGRAVITY_TRANSPORT_ROUTE, ...options });
|
|
254
340
|
}
|
|
255
341
|
}
|
|
342
|
+
/** The Factory Droid adapter: the bundled `streamFactoryDroid` over the registry seed catalog. */
|
|
343
|
+
export class OmpFactoryDroidAdapter extends OmpTransportAdapter {
|
|
344
|
+
constructor(options) {
|
|
345
|
+
super({ route: FACTORY_DROID_TRANSPORT_ROUTE, ...options });
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/** The GitLab Duo agent adapter: the bundled workflow transport over its one-row catalog. */
|
|
349
|
+
export class OmpGitLabDuoAgentAdapter extends OmpTransportAdapter {
|
|
350
|
+
constructor(options) {
|
|
351
|
+
super({ route: GITLAB_DUO_AGENT_TRANSPORT_ROUTE, ...options });
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/** The GitLab Duo adapter: the bundled proxy transport over its 16-row catalog. */
|
|
355
|
+
export class OmpGitLabDuoAdapter extends OmpTransportAdapter {
|
|
356
|
+
constructor(options) {
|
|
357
|
+
super({ route: GITLAB_DUO_TRANSPORT_ROUTE, ...options });
|
|
358
|
+
}
|
|
359
|
+
}
|
|
256
360
|
//# sourceMappingURL=adapter.js.map
|
package/lib/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAUlG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EACL,cAAc,EACd,aAAa,EACb,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,cAAc,GACf,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/lib/catalog/cursor.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated Cursor model table — do not edit by hand.
|
|
3
3
|
*
|
|
4
|
-
* Source: `@oh-my-pi/pi-catalog@18.12.
|
|
5
|
-
* (123 rows, sha256:
|
|
4
|
+
* Source: `@oh-my-pi/pi-catalog@18.12.6` `src/models.json` key `cursor`
|
|
5
|
+
* (123 rows, sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152). Regenerate with `pnpm -C packages/llm-omp run generate:catalog`.
|
|
6
6
|
*
|
|
7
7
|
* The drift gate in `tests/build.test.ts` pins the same package version and
|
|
8
8
|
* source hash, so an omp bump fails there before this table can describe the
|
|
@@ -19,10 +19,10 @@ import type { CursorModelRow } from '../omp.js';
|
|
|
19
19
|
/** Provenance of {@link CURSOR_MODELS}. */
|
|
20
20
|
export declare const CURSOR_CATALOG_SOURCE: {
|
|
21
21
|
readonly package: "@oh-my-pi/pi-catalog";
|
|
22
|
-
readonly version: "18.12.
|
|
22
|
+
readonly version: "18.12.6";
|
|
23
23
|
readonly file: "src/models.json";
|
|
24
24
|
readonly key: "cursor";
|
|
25
|
-
readonly sourceHash: "sha256:
|
|
25
|
+
readonly sourceHash: "sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152";
|
|
26
26
|
readonly rowCount: 123;
|
|
27
27
|
};
|
|
28
28
|
/** Every Cursor model the pinned catalog serves, sorted by id. */
|
package/lib/catalog/cursor.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** Provenance of {@link CURSOR_MODELS}. */
|
|
2
2
|
export const CURSOR_CATALOG_SOURCE = {
|
|
3
3
|
package: '@oh-my-pi/pi-catalog',
|
|
4
|
-
version: '18.12.
|
|
4
|
+
version: '18.12.6',
|
|
5
5
|
file: 'src/models.json',
|
|
6
6
|
key: 'cursor',
|
|
7
|
-
sourceHash: 'sha256:
|
|
7
|
+
sourceHash: 'sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152',
|
|
8
8
|
rowCount: 123,
|
|
9
9
|
};
|
|
10
10
|
/** Every Cursor model the pinned catalog serves, sorted by id. */
|
package/lib/catalog/devin.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated Devin model table — do not edit by hand.
|
|
3
3
|
*
|
|
4
|
-
* Source: `@oh-my-pi/pi-catalog@18.12.
|
|
5
|
-
* (2 rows, sha256:
|
|
4
|
+
* Source: `@oh-my-pi/pi-catalog@18.12.6` `src/models.json` key `devin`
|
|
5
|
+
* (2 rows, sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152). Regenerate with `pnpm -C packages/llm-omp run generate:catalog`.
|
|
6
6
|
*
|
|
7
7
|
* The drift gate in `tests/build-devin.test.ts` pins the same package version
|
|
8
8
|
* and source hash, so an omp bump fails there before this table can describe
|
|
@@ -17,10 +17,10 @@ import type { DevinModelRow } from '../omp.js';
|
|
|
17
17
|
/** Provenance of {@link DEVIN_MODELS}. */
|
|
18
18
|
export declare const DEVIN_CATALOG_SOURCE: {
|
|
19
19
|
readonly package: "@oh-my-pi/pi-catalog";
|
|
20
|
-
readonly version: "18.12.
|
|
20
|
+
readonly version: "18.12.6";
|
|
21
21
|
readonly file: "src/models.json";
|
|
22
22
|
readonly key: "devin";
|
|
23
|
-
readonly sourceHash: "sha256:
|
|
23
|
+
readonly sourceHash: "sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152";
|
|
24
24
|
readonly rowCount: 2;
|
|
25
25
|
};
|
|
26
26
|
/** Every Devin model the pinned catalog serves, sorted by id. */
|
package/lib/catalog/devin.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** Provenance of {@link DEVIN_MODELS}. */
|
|
2
2
|
export const DEVIN_CATALOG_SOURCE = {
|
|
3
3
|
package: '@oh-my-pi/pi-catalog',
|
|
4
|
-
version: '18.12.
|
|
4
|
+
version: '18.12.6',
|
|
5
5
|
file: 'src/models.json',
|
|
6
6
|
key: 'devin',
|
|
7
|
-
sourceHash: 'sha256:
|
|
7
|
+
sourceHash: 'sha256:b0d9516e8c6cb4254b720e1e2983635776f272057ea6624f753498a3ea883152',
|
|
8
8
|
rowCount: 2,
|
|
9
9
|
};
|
|
10
10
|
/** Every Devin model the pinned catalog serves, sorted by id. */
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated Factory Droid model table — do not edit by hand.
|
|
3
|
+
*
|
|
4
|
+
* Source: `@oh-my-pi/pi-catalog@18.12.6` `src/compat/rules.json`
|
|
5
|
+
* `providers.factory-droid.seed.models` (62 rows, sha256:1b63c611e04b497751acbbe7ec7c12e7f8aff9dd6a2ffcd936f9f719ac2077ba).
|
|
6
|
+
* Regenerate with `pnpm -C packages/llm-omp run generate:catalog`.
|
|
7
|
+
*
|
|
8
|
+
* The rows live in the KDL compat registry because the pinned `models.json`
|
|
9
|
+
* carries no `factory-droid` key; the drift gate in
|
|
10
|
+
* `tests/build-factory-droid.test.ts` pins the same package version and source
|
|
11
|
+
* hash, so an omp bump fails there before this table can describe the wrong
|
|
12
|
+
* models.
|
|
13
|
+
*
|
|
14
|
+
* Every row is a zero-cost Factory credit, and the route multiplexes four wire
|
|
15
|
+
* protocols by model id, so the table carries the identity fields the wire
|
|
16
|
+
* header and the family dispatch read rather than a reduced subset.
|
|
17
|
+
*
|
|
18
|
+
* @module dsh-llm-omp-transports/catalog/factory-droid
|
|
19
|
+
*/
|
|
20
|
+
import type { FactoryDroidModelRow } from '../omp.js';
|
|
21
|
+
/** Provenance of {@link FACTORY_DROID_MODELS}. */
|
|
22
|
+
export declare const FACTORY_DROID_CATALOG_SOURCE: {
|
|
23
|
+
readonly package: "@oh-my-pi/pi-catalog";
|
|
24
|
+
readonly version: "18.12.6";
|
|
25
|
+
readonly file: "src/compat/rules.json";
|
|
26
|
+
readonly key: "factory-droid";
|
|
27
|
+
readonly sourceHash: "sha256:1b63c611e04b497751acbbe7ec7c12e7f8aff9dd6a2ffcd936f9f719ac2077ba";
|
|
28
|
+
readonly rowCount: 62;
|
|
29
|
+
};
|
|
30
|
+
/** Every Factory Droid model the pinned registry seed declares, sorted by id. */
|
|
31
|
+
export declare const FACTORY_DROID_MODELS: readonly FactoryDroidModelRow[];
|