dsh-connect-workbuddy 4.0.0 → 4.2.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/CHANGELOG.md +50 -0
- package/README.en.md +1 -0
- package/README.md +1 -0
- package/lib/bin.js +1 -1
- package/lib/client.js +824 -9
- package/lib/{host-heartbeat-vvVjdY_q.js → host-heartbeat-C4TXu8ew.js} +367 -25
- package/lib/index.d.ts +212 -2
- package/lib/index.js +787 -9
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -116,6 +116,12 @@ interface WorkBuddyStoreOptions {
|
|
|
116
116
|
* pre-dual-provider location. Injectable for tests.
|
|
117
117
|
*/
|
|
118
118
|
legacyOwnPath?: string;
|
|
119
|
+
/**
|
|
120
|
+
* The unified credential vault directory for this store. Defaults to the
|
|
121
|
+
* per-region directory under the Harness home; injectable so the vault's
|
|
122
|
+
* merge/scan behaviour is testable without touching a real machine.
|
|
123
|
+
*/
|
|
124
|
+
vaultDir?: string;
|
|
119
125
|
/**
|
|
120
126
|
* Auth directories to scan, overriding the platform defaults. Injectable so
|
|
121
127
|
* the multi-account scan is testable without touching a real machine.
|
|
@@ -233,6 +239,9 @@ declare class WorkBuddyCredentialStore {
|
|
|
233
239
|
private readonly ownPathExplicit;
|
|
234
240
|
private readonly legacyOwnPath;
|
|
235
241
|
private readonly legacyOwnPathExplicit;
|
|
242
|
+
private readonly vaultDirExplicit;
|
|
243
|
+
/** The vault directory, resolved ONCE at construction. */
|
|
244
|
+
private readonly vaultDirResolved;
|
|
236
245
|
private readonly authDirs;
|
|
237
246
|
private readonly resolveAtRestKey;
|
|
238
247
|
private desktopPathOverride;
|
|
@@ -268,6 +277,8 @@ declare class WorkBuddyCredentialStore {
|
|
|
268
277
|
* the real machine's legacy copy.
|
|
269
278
|
*/
|
|
270
279
|
private ownCandidates;
|
|
280
|
+
/** The vault directory this store reads and writes (fixed at construction). */
|
|
281
|
+
private vaultDir;
|
|
271
282
|
/** Repoint the desktop file or directory; applies on the next read. */
|
|
272
283
|
setDesktopPath(path: string | undefined): void;
|
|
273
284
|
/**
|
|
@@ -321,6 +332,16 @@ declare class WorkBuddyCredentialStore {
|
|
|
321
332
|
* which is what keeps the two regions' providers from cross-billing.
|
|
322
333
|
*/
|
|
323
334
|
private readAll;
|
|
335
|
+
/**
|
|
336
|
+
* Merge the scan's credentials into the vault and read the vault back.
|
|
337
|
+
*
|
|
338
|
+
* Incremental by contract: a scan that finds nothing new writes nothing.
|
|
339
|
+
* Per account, the vault entry is written only when the scan's read is
|
|
340
|
+
* fresher by {@link isFresherVaultEntry} — so a steady-state scan is
|
|
341
|
+
* mtime-stable and every sync is O(accounts) reads with at most one write
|
|
342
|
+
* per CHANGED account.
|
|
343
|
+
*/
|
|
344
|
+
private syncVault;
|
|
324
345
|
/**
|
|
325
346
|
* Default when no account is explicitly selected: the live sign-in, else the
|
|
326
347
|
* freshest credential. Following the app's current sign-in is the documented
|
|
@@ -396,6 +417,31 @@ declare class WorkBuddyCredentialStore {
|
|
|
396
417
|
private describeMissingCredential;
|
|
397
418
|
/** Read-only sign-in summary; never refreshes and never throws. */
|
|
398
419
|
status(): Promise<WorkBuddyAuthStatus>;
|
|
420
|
+
/**
|
|
421
|
+
* Persist one OAuth sign-in into the unified vault.
|
|
422
|
+
*
|
|
423
|
+
* The credential is written with `source: 'dsh'` (it never came from a
|
|
424
|
+
* desktop file) and joins the readable set on the next scan — the vault is
|
|
425
|
+
* read by `readAll()` like any other source, so no separate discovery path
|
|
426
|
+
* exists. The write is idempotent per account id: re-adding an account
|
|
427
|
+
* replaces its entry, which is exactly what re-issuing a login means.
|
|
428
|
+
*
|
|
429
|
+
* Returns the account id so the card can offer to select it right away.
|
|
430
|
+
*/
|
|
431
|
+
addOAuthAccount(credential: Omit<WorkBuddyCredential, 'source' | 'filePath'>): Promise<string>;
|
|
432
|
+
/**
|
|
433
|
+
* Remove ONE account's plugin-stored credential by id.
|
|
434
|
+
*
|
|
435
|
+
* Only the VAULT entry is deleted — the desktop app's auth files are read-only
|
|
436
|
+
* to this plugin and are never touched, so an account that still exists as a
|
|
437
|
+
* desktop sign-in reappears on the next scan. That is the honest behaviour:
|
|
438
|
+
* the button means "forget what the plugin stored", not "sign the app out".
|
|
439
|
+
*
|
|
440
|
+
* Returns whether a stored entry was actually removed, so the caller can
|
|
441
|
+
* distinguish "removed" from "this account only ever existed as a desktop
|
|
442
|
+
* sign-in" without a second scan.
|
|
443
|
+
*/
|
|
444
|
+
removeAccount(accountId: string): Promise<boolean>;
|
|
399
445
|
/**
|
|
400
446
|
* Remove every plugin-owned copy this store could read (per-region file,
|
|
401
447
|
* legacy single file, and their lock siblings); the desktop files are
|
|
@@ -406,7 +452,6 @@ declare class WorkBuddyCredentialStore {
|
|
|
406
452
|
logout(): Promise<void>;
|
|
407
453
|
private needsRefresh;
|
|
408
454
|
private refreshNow;
|
|
409
|
-
private saveOwn;
|
|
410
455
|
/**
|
|
411
456
|
* Every readable plugin-owned copy, in candidate order; absent or corrupt
|
|
412
457
|
* files are skipped rather than propagated.
|
|
@@ -578,6 +623,30 @@ interface UpstreamErrorDetail {
|
|
|
578
623
|
* them at the openresty layer with an HTML 401.
|
|
579
624
|
*/
|
|
580
625
|
declare function regionOf(domain: string): WorkBuddyRegion;
|
|
626
|
+
/**
|
|
627
|
+
* The STRICT counterpart of {@link regionOf}: a region's domain only when it is
|
|
628
|
+
* positively recognised, `undefined` for anything else.
|
|
629
|
+
*
|
|
630
|
+
* `regionOf`'s catch-all is deliberate — the CN product is single-homed, so an
|
|
631
|
+
* unrecognised spelling is treated as CN and a real (if oddly written) CN
|
|
632
|
+
* credential still resolves. That reasoning holds only for a domain the
|
|
633
|
+
* UPSTREAM issued. It does not hold for a value read out of a file someone
|
|
634
|
+
* handed the plugin: there "unrecognised" means "cannot be classified", and
|
|
635
|
+
* calling it CN would file a foreign or spoofed credential in the CN vault.
|
|
636
|
+
* Import gates must use this, not {@link regionOf}.
|
|
637
|
+
*
|
|
638
|
+
* Both sides are matched on their registrable domain, so a bare host and any
|
|
639
|
+
* subdomain qualify while a lookalike such as `codebuddy.cn.evil.com` cannot.
|
|
640
|
+
*
|
|
641
|
+
* `copilot.tencent.com` is NOT a third product — it is this plugin's OWN CN
|
|
642
|
+
* chat gateway (`CN_CHAT_BASE`), and the credential's `domain` field carries it
|
|
643
|
+
* verbatim on real records. Refusing it here made the plugin reject its own
|
|
644
|
+
* export: the card exported 8 accounts, and re-importing that file skipped the
|
|
645
|
+
* three whose `domain` was the gateway. It cannot be spoofed into the wrong
|
|
646
|
+
* region by being recognised here — it names the CN gateway, so admitting it is
|
|
647
|
+
* the same decision as admitting `workbuddy.cn`.
|
|
648
|
+
*/
|
|
649
|
+
declare function knownRegionOf(domain: string): WorkBuddyRegion | undefined;
|
|
581
650
|
/**
|
|
582
651
|
* Normalize an OpenAI chat-completions body for the WorkBuddy upstream:
|
|
583
652
|
* force `stream: true` (the upstream rejects non-streaming), flatten
|
|
@@ -1778,6 +1847,59 @@ declare const WORKBUDDY_CHECKIN_PATH = "/plugins/dsh-connect-workbuddy/checkin";
|
|
|
1778
1847
|
* browser half.
|
|
1779
1848
|
*/
|
|
1780
1849
|
declare const WORKBUDDY_PROBE_PATH = "/plugins/dsh-connect-workbuddy/probe";
|
|
1850
|
+
/**
|
|
1851
|
+
* One entry of the transfer PREVIEW: display fields only, never token
|
|
1852
|
+
* material. `hasToken` is the import decision input — the import step skips
|
|
1853
|
+
* records without one — and the indexes are the FILE's positions, so the user
|
|
1854
|
+
* picks by the same numbers the import call sends back.
|
|
1855
|
+
*/
|
|
1856
|
+
interface WorkBuddyTransferPreviewEntry {
|
|
1857
|
+
index: number;
|
|
1858
|
+
uid: string;
|
|
1859
|
+
nickname: string;
|
|
1860
|
+
email: string;
|
|
1861
|
+
hasToken: boolean;
|
|
1862
|
+
}
|
|
1863
|
+
/** The preview answer: the desensitized listing plus the file's total count. */
|
|
1864
|
+
interface WorkBuddyTransferPreview {
|
|
1865
|
+
accounts: readonly WorkBuddyTransferPreviewEntry[];
|
|
1866
|
+
total: number;
|
|
1867
|
+
}
|
|
1868
|
+
/**
|
|
1869
|
+
* The import answer. `imported` counts records merged into the vault (new OR
|
|
1870
|
+
* overwritten — both change the stored entry); `skipped` counts what was
|
|
1871
|
+
* left out: missing token, a bad index, or a record whose login domain does
|
|
1872
|
+
* not belong to the addressed region.
|
|
1873
|
+
*/
|
|
1874
|
+
interface WorkBuddyTransferImportAnswer {
|
|
1875
|
+
imported: number;
|
|
1876
|
+
skipped: number;
|
|
1877
|
+
}
|
|
1878
|
+
/**
|
|
1879
|
+
* The shared file format's record shape, subset the importer consumes.
|
|
1880
|
+
*
|
|
1881
|
+
* Contract with sibling tools exporting the same format: a JSON array of
|
|
1882
|
+
* objects keyed in snake_case — `access_token` (required), `refresh_token`,
|
|
1883
|
+
* `uid`, `nickname`, `email`, `domain`, `expiresAt` (epoch ms),
|
|
1884
|
+
* `refreshExpiresAt`, `auth_raw`. Extra fields ride along untouched.
|
|
1885
|
+
*/
|
|
1886
|
+
interface WorkBuddyTransferRecord {
|
|
1887
|
+
access_token: string;
|
|
1888
|
+
refresh_token?: string;
|
|
1889
|
+
uid?: string;
|
|
1890
|
+
nickname?: string;
|
|
1891
|
+
email?: string;
|
|
1892
|
+
domain?: string;
|
|
1893
|
+
/** Access-token expiry in epoch MILLISECONDS, the sibling format's unit. */
|
|
1894
|
+
expiresAt?: number;
|
|
1895
|
+
refreshExpiresAt?: number;
|
|
1896
|
+
/** The sibling tool's original credential document, preserved verbatim. */
|
|
1897
|
+
auth_raw?: unknown;
|
|
1898
|
+
}
|
|
1899
|
+
/** The export answer: the records themselves, tokens included. */
|
|
1900
|
+
interface WorkBuddyTransferExportAnswer {
|
|
1901
|
+
accounts: WorkBuddyTransferRecord[];
|
|
1902
|
+
}
|
|
1781
1903
|
/** Query parameter naming the region a card request addresses. */
|
|
1782
1904
|
declare const WORKBUDDY_REGION_PARAM = "region";
|
|
1783
1905
|
/** Every region, in card tab order. */
|
|
@@ -2410,7 +2532,79 @@ interface WorkBuddyStatusRouteOptions {
|
|
|
2410
2532
|
* that needs a working probe dependency.
|
|
2411
2533
|
*/
|
|
2412
2534
|
pool?: WorkBuddyPoolDeps;
|
|
2535
|
+
/**
|
|
2536
|
+
* OAuth QR sign-in: start a login and poll it to completion.
|
|
2537
|
+
*
|
|
2538
|
+
* Optional as a whole: a Host built without it simply omits the card's
|
|
2539
|
+
* sign-in affordance (an older bundle keeps rendering, minus the button).
|
|
2540
|
+
*/
|
|
2541
|
+
oauth?: WorkBuddyOAuthDeps;
|
|
2542
|
+
/**
|
|
2543
|
+
* Batch credential export / import between machines.
|
|
2544
|
+
*
|
|
2545
|
+
* Optional as a whole: a Host built without it simply omits the card's
|
|
2546
|
+
* transfer section (an older bundle keeps rendering, minus the buttons).
|
|
2547
|
+
*/
|
|
2548
|
+
transfer?: WorkBuddyTransferDeps;
|
|
2413
2549
|
}
|
|
2550
|
+
/**
|
|
2551
|
+
* What the transfer route needs from the Host. Everything is region-scoped:
|
|
2552
|
+
* the two regions' vaults are parallel stacks, and an export of one tab must
|
|
2553
|
+
* never leak the other tab's accounts.
|
|
2554
|
+
*/
|
|
2555
|
+
interface WorkBuddyTransferDeps {
|
|
2556
|
+
/**
|
|
2557
|
+
* Export the named accounts' credentials in the shared transfer format.
|
|
2558
|
+
* Unknown ids are simply absent from the answer; an answer with zero
|
|
2559
|
+
* records means nothing named was exportable (the caller decides whether
|
|
2560
|
+
* that is an error).
|
|
2561
|
+
*/
|
|
2562
|
+
exportAccounts(region: WorkBuddyRegion, accountIds: readonly string[]): Promise<WorkBuddyTransferExportAnswer>;
|
|
2563
|
+
/** Parse transfer-file text into the desensitized preview. */
|
|
2564
|
+
previewImport(region: WorkBuddyRegion, text: string): Promise<WorkBuddyTransferPreview>;
|
|
2565
|
+
/**
|
|
2566
|
+
* Merge the selected file entries into the region's vault. Returns the
|
|
2567
|
+
* counters the card reports; `skipped` covers missing tokens, bad indexes,
|
|
2568
|
+
* and records belonging to the other region.
|
|
2569
|
+
*/
|
|
2570
|
+
importAccounts(region: WorkBuddyRegion, text: string, indexes: readonly number[]): Promise<WorkBuddyTransferImportAnswer>;
|
|
2571
|
+
}
|
|
2572
|
+
/**
|
|
2573
|
+
* What the OAuth route needs from the Host: the two session actions, plus the
|
|
2574
|
+
* persistence step the route cannot do itself (only the Host may touch the
|
|
2575
|
+
* credential vault).
|
|
2576
|
+
*/
|
|
2577
|
+
interface WorkBuddyOAuthDeps {
|
|
2578
|
+
/**
|
|
2579
|
+
* Start one login for the region. Resolves the URL the user opens to scan
|
|
2580
|
+
* and confirm, or an actionable error.
|
|
2581
|
+
*/
|
|
2582
|
+
start(region: WorkBuddyRegion): Promise<WorkBuddyOAuthStartResult>;
|
|
2583
|
+
/**
|
|
2584
|
+
* Poll once. The card repeats until `done` — then either the account was
|
|
2585
|
+
* persisted (the Host saved it to the vault) or an error is reported.
|
|
2586
|
+
*/
|
|
2587
|
+
poll(region: WorkBuddyRegion, loginId: string): Promise<WorkBuddyOAuthPollView>;
|
|
2588
|
+
}
|
|
2589
|
+
/** The start answer, token-free (the state never leaves the Host). */
|
|
2590
|
+
type WorkBuddyOAuthStartResult = {
|
|
2591
|
+
loginId: string;
|
|
2592
|
+
verificationUri: string;
|
|
2593
|
+
expiresIn: number;
|
|
2594
|
+
} | {
|
|
2595
|
+
error: string;
|
|
2596
|
+
};
|
|
2597
|
+
/** The poll answer the card sees. `account` carries display fields only. */
|
|
2598
|
+
type WorkBuddyOAuthPollView = {
|
|
2599
|
+
done: false;
|
|
2600
|
+
} | {
|
|
2601
|
+
done: true;
|
|
2602
|
+
accountName: string;
|
|
2603
|
+
accountId: string;
|
|
2604
|
+
} | {
|
|
2605
|
+
done: true;
|
|
2606
|
+
error: string;
|
|
2607
|
+
};
|
|
2414
2608
|
/**
|
|
2415
2609
|
* What the pool route needs from the Host.
|
|
2416
2610
|
*
|
|
@@ -2444,6 +2638,22 @@ interface WorkBuddyPoolDeps {
|
|
|
2444
2638
|
* checked) instead of passing the guard and running a batch over nothing.
|
|
2445
2639
|
*/
|
|
2446
2640
|
effectiveMemberAccountIds?(region: WorkBuddyRegion): Promise<readonly string[]>;
|
|
2641
|
+
/**
|
|
2642
|
+
* Test ONE account against the region's target model.
|
|
2643
|
+
*
|
|
2644
|
+
* The per-row button's Host half. Optional: a Host built without it simply
|
|
2645
|
+
* omits the row button (an older bundle keeps rendering, minus the control).
|
|
2646
|
+
* Returns undefined when the region cannot name a target model — the same
|
|
2647
|
+
* refusal the batch route reports as 409.
|
|
2648
|
+
*/
|
|
2649
|
+
testOne?(region: WorkBuddyRegion, accountId: string): Promise<WorkBuddyPoolTestRow | undefined>;
|
|
2650
|
+
/**
|
|
2651
|
+
* Forget ONE account's plugin-stored credential. Only the vault entry is
|
|
2652
|
+
* removed; the desktop app's files are never touched. Returns whether an
|
|
2653
|
+
* entry existed — false means the account exists only as a desktop sign-in
|
|
2654
|
+
* (or was already gone), which the card reports instead of a silent no-op.
|
|
2655
|
+
*/
|
|
2656
|
+
removeOne?(region: WorkBuddyRegion, accountId: string): Promise<boolean>;
|
|
2447
2657
|
/**
|
|
2448
2658
|
* Today's check-in state per account id.
|
|
2449
2659
|
*
|
|
@@ -2772,4 +2982,4 @@ declare function legacyAttributionRegion(value: Config, accountsFor: (region: Wo
|
|
|
2772
2982
|
*/
|
|
2773
2983
|
declare function apply(ctx: Context, config: Config): void;
|
|
2774
2984
|
//#endregion
|
|
2775
|
-
export { CREDENTIAL_REJECTED_CODE, Config, DEFAULT_PROBE_INPUT_TOKENS, ENCRYPTED_CREDENTIAL_CODE, FALLBACK_WORKBUDDY_MODELS, FALLBACK_WORKBUDDY_MODELS_GLOBAL, NATIVE_MODALITY_BY_MODEL_ID, PROBE_INPUT_TOKEN_CHOICES, PROBE_MAX_TOKENS, PROBE_SYSTEM_PROMPT, REFUSES_OFF_MODEL_IDS, type UpstreamErrorKind, WORKBUDDY_ACCOUNTS_REFRESH_PATH, WORKBUDDY_APP_EXECUTABLE_ENV, WORKBUDDY_AUTH_FILENAME, WORKBUDDY_AUTH_FILE_ENV, WORKBUDDY_CHECKIN_PATH, WORKBUDDY_CONNECT_VERSION, WORKBUDDY_GLOBAL_PROVIDER, WORKBUDDY_HOST_HEARTBEAT_FILENAME, WORKBUDDY_MODELS_REFRESH_PATH, WORKBUDDY_PROBE_PATH, WORKBUDDY_PROVIDER, WORKBUDDY_PROVIDERS, WORKBUDDY_PROVIDER_DISPLAY_NAMES, WORKBUDDY_REGIONS, WORKBUDDY_REGION_PARAM, WORKBUDDY_SETTINGS_NS, WORKBUDDY_STREAM_IDLE_TIMEOUT_MS, WORKBUDDY_USAGE_PATH, type WorkBuddyAccountChoice, type WorkBuddyAdapter, type WorkBuddyAuthStatus, type WorkBuddyCandidateFailure, WorkBuddyCatalog, type WorkBuddyChatResult, type WorkBuddyCredential, type WorkBuddyCredentialRecovery, WorkBuddyCredentialRejectedError, WorkBuddyCredentialStore, type WorkBuddyCreditPackage, type WorkBuddyCredits, WorkBuddyEncryptedCredentialError, type WorkBuddyEncryptedField, type WorkBuddyHostHeartbeat, type WorkBuddyModelInfo, type WorkBuddyNativeModality, WorkBuddyPoolPreferences, type WorkBuddyProbeClient, type WorkBuddyProbeOutcome, type WorkBuddyProbeResult, type WorkBuddyProbeStore, type WorkBuddyReasoning, type WorkBuddyRecoveryCandidate, type WorkBuddyRefreshOutcome, WorkBuddyRegionState, type WorkBuddyShim, type WorkBuddyStatusRouteOptions, type WorkBuddyStoreOptions, WorkBuddyUpstreamClient, type WorkBuddyUpstreamModel, type WorkBuddyUsabilityProbeOptions, apply, asVolatile, authFileName, classifyUpstreamError, clearAtRestKeyCache, clearHostHeartbeat, cooldownOf, createAccountUsabilityProbe, createWorkBuddyAdapter, createWorkBuddyShim, creditOfStream, defaultDesktopAuthCandidates, defaultDesktopAuthDirs, defaultDesktopAuthPath, defaultOffModelIds, deriveAtRestKey, deriveAtRestKeyId, deriveCatalog, fallbackModelsFor, fetchAtRestKeyPayload, findWorkbuddyAppExecutable, hasEncryptedCredentialFields, imageDefaultFor, inject, isCredentialRejectedError, isEncryptedCredentialError, isEncryptedFieldWrapper, isHeartbeatProcessAlive, isWorkbuddyBundle, legacyAttributionRegion, legacyWorkbuddyOwnAuthPath, macosBundleExecutable, macosNestedAppBundles, name, nativeModalityOf, nextRegionEnabled, nextRegionSlots, offDefaultFor, openEncryptedField, outcomeOfFailure, parseCreditMultiplier, parseReasoning, parseRetryAfter, parseUpstreamModel, parseWorkBuddyAuth, prepareChatBody, probeModel, probeRequestBody, probeSucceeded, processStartTimeMs, readAtRestKey, readHostHeartbeat, regionCleared, regionEnabled, regionEnabledOf, regionOf, regionOfProvider, regionOfStatusUrl, regionStateOf, registerWorkBuddyStatusRoute, resolveCredentialRecovery, selectAccountFor, settingsNamespaceOf, toPersistedWorkBuddyModel, unwrapVolatileDeep, withEffectiveOff, withWorkBuddyRegion, workBuddyDisplayName, workBuddyModelInput, workBuddyThinkingLevelMap, workBuddyWebStatus, workbuddyAccountId, workbuddyAppExecutableCandidates, workbuddyHostHeartbeatPath, workbuddyOwnAuthPath, writeHostHeartbeat };
|
|
2985
|
+
export { CREDENTIAL_REJECTED_CODE, Config, DEFAULT_PROBE_INPUT_TOKENS, ENCRYPTED_CREDENTIAL_CODE, FALLBACK_WORKBUDDY_MODELS, FALLBACK_WORKBUDDY_MODELS_GLOBAL, NATIVE_MODALITY_BY_MODEL_ID, PROBE_INPUT_TOKEN_CHOICES, PROBE_MAX_TOKENS, PROBE_SYSTEM_PROMPT, REFUSES_OFF_MODEL_IDS, type UpstreamErrorKind, WORKBUDDY_ACCOUNTS_REFRESH_PATH, WORKBUDDY_APP_EXECUTABLE_ENV, WORKBUDDY_AUTH_FILENAME, WORKBUDDY_AUTH_FILE_ENV, WORKBUDDY_CHECKIN_PATH, WORKBUDDY_CONNECT_VERSION, WORKBUDDY_GLOBAL_PROVIDER, WORKBUDDY_HOST_HEARTBEAT_FILENAME, WORKBUDDY_MODELS_REFRESH_PATH, WORKBUDDY_PROBE_PATH, WORKBUDDY_PROVIDER, WORKBUDDY_PROVIDERS, WORKBUDDY_PROVIDER_DISPLAY_NAMES, WORKBUDDY_REGIONS, WORKBUDDY_REGION_PARAM, WORKBUDDY_SETTINGS_NS, WORKBUDDY_STREAM_IDLE_TIMEOUT_MS, WORKBUDDY_USAGE_PATH, type WorkBuddyAccountChoice, type WorkBuddyAdapter, type WorkBuddyAuthStatus, type WorkBuddyCandidateFailure, WorkBuddyCatalog, type WorkBuddyChatResult, type WorkBuddyCredential, type WorkBuddyCredentialRecovery, WorkBuddyCredentialRejectedError, WorkBuddyCredentialStore, type WorkBuddyCreditPackage, type WorkBuddyCredits, WorkBuddyEncryptedCredentialError, type WorkBuddyEncryptedField, type WorkBuddyHostHeartbeat, type WorkBuddyModelInfo, type WorkBuddyNativeModality, WorkBuddyPoolPreferences, type WorkBuddyProbeClient, type WorkBuddyProbeOutcome, type WorkBuddyProbeResult, type WorkBuddyProbeStore, type WorkBuddyReasoning, type WorkBuddyRecoveryCandidate, type WorkBuddyRefreshOutcome, WorkBuddyRegionState, type WorkBuddyShim, type WorkBuddyStatusRouteOptions, type WorkBuddyStoreOptions, WorkBuddyUpstreamClient, type WorkBuddyUpstreamModel, type WorkBuddyUsabilityProbeOptions, apply, asVolatile, authFileName, classifyUpstreamError, clearAtRestKeyCache, clearHostHeartbeat, cooldownOf, createAccountUsabilityProbe, createWorkBuddyAdapter, createWorkBuddyShim, creditOfStream, defaultDesktopAuthCandidates, defaultDesktopAuthDirs, defaultDesktopAuthPath, defaultOffModelIds, deriveAtRestKey, deriveAtRestKeyId, deriveCatalog, fallbackModelsFor, fetchAtRestKeyPayload, findWorkbuddyAppExecutable, hasEncryptedCredentialFields, imageDefaultFor, inject, isCredentialRejectedError, isEncryptedCredentialError, isEncryptedFieldWrapper, isHeartbeatProcessAlive, isWorkbuddyBundle, knownRegionOf, legacyAttributionRegion, legacyWorkbuddyOwnAuthPath, macosBundleExecutable, macosNestedAppBundles, name, nativeModalityOf, nextRegionEnabled, nextRegionSlots, offDefaultFor, openEncryptedField, outcomeOfFailure, parseCreditMultiplier, parseReasoning, parseRetryAfter, parseUpstreamModel, parseWorkBuddyAuth, prepareChatBody, probeModel, probeRequestBody, probeSucceeded, processStartTimeMs, readAtRestKey, readHostHeartbeat, regionCleared, regionEnabled, regionEnabledOf, regionOf, regionOfProvider, regionOfStatusUrl, regionStateOf, registerWorkBuddyStatusRoute, resolveCredentialRecovery, selectAccountFor, settingsNamespaceOf, toPersistedWorkBuddyModel, unwrapVolatileDeep, withEffectiveOff, withWorkBuddyRegion, workBuddyDisplayName, workBuddyModelInput, workBuddyThinkingLevelMap, workBuddyWebStatus, workbuddyAccountId, workbuddyAppExecutableCandidates, workbuddyHostHeartbeatPath, workbuddyOwnAuthPath, writeHostHeartbeat };
|