惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
M
MIT News - Artificial intelligence
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V2EX - 技术
V2EX - 技术
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
SegmentFault 最新的问题
I
InfoQ
H
Hacker News: Front Page
D
Docker
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
博客园 - 【当耐特】
T
Tor Project blog
U
Unit 42
H
Heimdal Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Privacy & Cybersecurity Law Blog
PCI Perspectives
PCI Perspectives
美团技术团队
O
OpenAI News
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
GbyAI
GbyAI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MyScale Blog
MyScale Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4 test: trim doctor command hotspots · openclaw/openclaw@c66f16a test: isolate agent auth and spawn hotspots · openclaw/openclaw@9285935 test: stabilize MCP startup disposal race · openclaw/openclaw@dd9d2eb test: merge browser contract server suites · openclaw/openclaw@5817a76 test: narrow ollama provider discovery setup · openclaw/openclaw@a0d9598 build: declare qa-lab aimock runtime dependency · openclaw/openclaw@24431e5 test: speed up safe-bins exec harness · openclaw/openclaw@ee856ab test: preserve tool helpers in embedded runner mocks · openclaw/openclaw@acd86a0 refactor: move memory embeddings into provider plugins · openclaw/openclaw@77e6e4c test: reuse system-run temp fixtures · openclaw/openclaw@7e9ff0f test: trim hotspot wait overhead · openclaw/openclaw@12a59b0 Check: avoid duplicate boundary prep · openclaw/openclaw@baf11b8 test: reduce hotspot fixture overhead · openclaw/openclaw@3a59edd feat(ui): overhaul settings and slash command UX (#67819) thanks @Bun… · openclaw/openclaw@2cfb660 QA Matrix: exit cleanly on failure · openclaw/openclaw@42805d2 QA Matrix: isolate scenario coverage · openclaw/openclaw@7e659e1 Matrix: refresh crypto bootstrap state · openclaw/openclaw@94081d8 QA Lab: add provider registry · openclaw/openclaw@bb7e982 Matrix: add plugin changelog · openclaw/openclaw@4acab55 test: trim more hotspot overhead · openclaw/openclaw@f485311 test: trim remaining hotspot tests · openclaw/openclaw@6ba8626 test: narrow hotspot mocks · openclaw/openclaw@dbc8179 test: isolate gemini embedding request helpers · openclaw/openclaw@cd330f5 test: trim memory and mcp hotspots · openclaw/openclaw@fd48dfa test: slim provider registry mocks · openclaw/openclaw@2e08c77 test: harden Parallels update smoke · openclaw/openclaw@1a98090 feat: default Anthropic to Opus 4.7 · openclaw/openclaw@628b454 fix: harden node-host shell payload mutability checks · openclaw/openclaw@75c551e fix: land node-host approval binding for native binaries (#66731) (th… · openclaw/openclaw@29919bb CI: add daily schedule to CodeQL workflow (#67645) · openclaw/openclaw@69d25f5 fix(gateway): capture config hash after plugin auto-enable to prevent… · openclaw/openclaw@8c11210 fix: repair sanitized replay tool results before send (#67620) (thank… · openclaw/openclaw@c3c7a99 fix: restrict HTML timeout short-circuit to transient statuses · openclaw/openclaw@de129a6 fix: keep TUI watchdog bound to active run (#67401) (thanks @xantorres) · openclaw/openclaw@3525273 Gateway/skills: dedupe skills prefix-match + drop dead fallback on log · openclaw/openclaw@d7f489f Extensions/lmstudio: back off inference preload after consecutive fai… · openclaw/openclaw@b555214 TUI/streaming: add watchdog that resets the activity indicator after … · openclaw/openclaw@f44ab20 Agents/tool-loop: enable unknown-tool stream guard by default · openclaw/openclaw@36ed367 Gateway/skills: invalidate session skills snapshot on config write · openclaw/openclaw@b23d59a fix: classify HTML provider error pages correctly (#67642) (thanks @s… · openclaw/openclaw@e588e90 fix(skills): remove unused model-usage import (#67641) · openclaw/openclaw@55f05df docs(changelog): credit codex fix superseded PRs · openclaw/openclaw@e485f24 fix(openai-codex): normalize stale transport metadata in resolution a… · openclaw/openclaw@90801ba CI: pin Docker-related GitHub Actions (#67632) · openclaw/openclaw@f697b01 Android: modernize WebView and discovery API usage (#67627) · openclaw/openclaw@44a6e50 fix(deps): bump hono to 4.12.14 and @hono/node-server to 1.19.14 (GHS… · openclaw/openclaw@fbccc18 fix(deps): bump dompurify to 3.4.0 (#67614) · openclaw/openclaw@2c2dc00 CI: add explicit permissions to all workflow jobs (fixes code-scannin… · openclaw/openclaw@01b7516 fix: register bundled TTS providers and route overrides correctly (#6… · openclaw/openclaw@6ea3cdd fix: align host tilde paths with OS home (#62804) (thanks @stainlu) · openclaw/openclaw@ecfaf64 fix: flush creds queue before reconnect socket open (#67464) (thanks … · openclaw/openclaw@405c63f fix: strip standalone <function> tool call tags from visible text (#6… · openclaw/openclaw@78df859 fix(agents): preserve cli session metadata before transcript persist … · openclaw/openclaw@898fd04 docs(changelog): move cli transcript entry · openclaw/openclaw@c1817c6 fix(agents): normalize cli transcript api field · openclaw/openclaw@3a3fae0 docs(changelog): note cli transcript persistence · openclaw/openclaw@6c343f1 fix(agents): persist cli transcript turns · openclaw/openclaw@b8ef507 fix(msteams): harden security-sensitive flows (#65841) · openclaw/openclaw@c56b56e [Dashboard] Fix exec approval modal overflow for long command content… · openclaw/openclaw@053c5b0 Docs: remove QA changelog entry · openclaw/openclaw@7fd5771 QA: fix private runtime source loading (#67428) · openclaw/openclaw@d5933af docs(gateway): correct protocol.md schema path, hello-ok example, aut… · openclaw/openclaw@489404d CI: pin Node 22 runners to 22.18.0 · openclaw/openclaw@4ffa621 models.authStatus: normalize provider ids + tighten env-backed escape… · openclaw/openclaw@f2fdb9d Update CHANGELOG.md · openclaw/openclaw@7694a92 test(parallels): clean up npm update guard jobs · openclaw/openclaw@045ea7b Plugins: prefer scanDir override paths · openclaw/openclaw@b2974da fix(dreaming): default storage.mode to "separate" so phase blocks sto… · openclaw/openclaw@8c392f0 fix(memory-core): skip dreaming transcript ingestion via session stor… · openclaw/openclaw@a1b01f0 fix: dedupe replayed exec.finished node events (#67281) · openclaw/openclaw@5dcf526
chore(deadcode): remove unused plugin contract registry paths · openclaw/openclaw@2800ce4
vincentkoc · 2026-06-22 · via Recent Commits to openclaw:main

@@ -4,37 +4,14 @@ import { normalizeLowercaseStringOrEmpty } from "@openclaw/normalization-core/st

44

import { loadBundledCapabilityRuntimeRegistry } from "../bundled-capability-runtime.js";

55

import { discoverOpenClawPlugins } from "../discovery.js";

66

import { loadPluginManifestRegistry } from "../manifest-registry.js";

7-

import { resolveManifestContractPluginIds } from "../plugin-registry.js";

87

import { resolveBundledExplicitProviderContractsFromPublicArtifacts } from "../provider-contract-public-artifacts.js";

9-

import type {

10-

ImageGenerationProviderPlugin,

11-

MediaUnderstandingProviderPlugin,

12-

TranscriptSourceProvider,

13-

MusicGenerationProviderPlugin,

14-

ProviderPlugin,

15-

RealtimeTranscriptionProviderPlugin,

16-

RealtimeVoiceProviderPlugin,

17-

SpeechProviderPlugin,

18-

VideoGenerationProviderPlugin,

19-

WebFetchProviderPlugin,

20-

WebSearchProviderPlugin,

21-

} from "../types.js";

8+

import type { ProviderPlugin, WebFetchProviderPlugin, WebSearchProviderPlugin } from "../types.js";

229

import { resolveBundledExplicitWebSearchProvidersFromPublicArtifacts } from "../web-provider-public-artifacts.explicit.js";

2310

import {

2411

BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS,

2512

type BundledPluginContractSnapshot,

2613

} from "./inventory/bundled-capability-metadata.js";

2714

import { uniqueStrings } from "./shared.js";

28-

import {

29-

loadVitestImageGenerationProviderContractRegistry,

30-

loadVitestMediaUnderstandingProviderContractRegistry,

31-

loadVitestTranscriptsSourceProviderContractRegistry,

32-

loadVitestMusicGenerationProviderContractRegistry,

33-

loadVitestRealtimeTranscriptionProviderContractRegistry,

34-

loadVitestRealtimeVoiceProviderContractRegistry,

35-

loadVitestSpeechProviderContractRegistry,

36-

loadVitestVideoGenerationProviderContractRegistry,

37-

} from "./speech-vitest-registry.js";

38153916

type BundledCapabilityRuntimeRegistry = ReturnType<typeof loadBundledCapabilityRuntimeRegistry>;

4017

type CapabilityContractEntry<T> = {

@@ -49,38 +26,9 @@ type WebSearchProviderContractEntry = CapabilityContractEntry<WebSearchProviderP

4926

type WebFetchProviderContractEntry = CapabilityContractEntry<WebFetchProviderPlugin> & {

5027

credentialValue: unknown;

5128

};

52-

type SpeechProviderContractEntry = CapabilityContractEntry<SpeechProviderPlugin>;

53-

type RealtimeTranscriptionProviderContractEntry =

54-

CapabilityContractEntry<RealtimeTranscriptionProviderPlugin>;

55-

type RealtimeVoiceProviderContractEntry = CapabilityContractEntry<RealtimeVoiceProviderPlugin>;

56-

type MediaUnderstandingProviderContractEntry =

57-

CapabilityContractEntry<MediaUnderstandingProviderPlugin>;

58-

type TranscriptsSourceProviderContractEntry = CapabilityContractEntry<TranscriptSourceProvider>;

59-

type ImageGenerationProviderContractEntry = CapabilityContractEntry<ImageGenerationProviderPlugin>;

60-

type VideoGenerationProviderContractEntry = CapabilityContractEntry<VideoGenerationProviderPlugin>;

61-

type MusicGenerationProviderContractEntry = CapabilityContractEntry<MusicGenerationProviderPlugin>;

62296330

type PluginRegistrationContractEntry = BundledPluginContractSnapshot;

643165-

type ManifestContractKey =

66-

| "embeddingProviders"

67-

| "speechProviders"

68-

| "realtimeTranscriptionProviders"

69-

| "realtimeVoiceProviders"

70-

| "mediaUnderstandingProviders"

71-

| "transcriptSourceProviders"

72-

| "documentExtractors"

73-

| "imageGenerationProviders"

74-

| "videoGenerationProviders"

75-

| "musicGenerationProviders"

76-

| "webContentExtractors"

77-

| "webFetchProviders"

78-

| "webSearchProviders"

79-

| "migrationProviders"

80-

| "tools";

81-82-

type ManifestRegistryContractKey = "webFetchProviders" | "webSearchProviders";

83-8432

function normalizeProviderEnvVars(

8533

providerEnvVars: Record<string, string[]> | undefined,

8634

): Record<string, string[]> {

@@ -201,55 +149,6 @@ function resolveBundledProviderContractPluginIds(): string[] {

201149

).toSorted((left, right) => left.localeCompare(right));

202150

}

203151204-

function resolveBundledManifestContractPluginIds(contract: ManifestRegistryContractKey): string[] {

205-

return resolveManifestContractPluginIds({

206-

contract,

207-

origin: "bundled",

208-

});

209-

}

210-211-

function resolveBundledManifestPluginIdsForContract(contract: ManifestContractKey): string[] {

212-

return uniqueStrings(

213-

resolveBundledManifestContracts()

214-

.filter((entry) => {

215-

switch (contract) {

216-

case "embeddingProviders":

217-

return entry.embeddingProviderIds.length > 0;

218-

case "speechProviders":

219-

return entry.speechProviderIds.length > 0;

220-

case "realtimeTranscriptionProviders":

221-

return entry.realtimeTranscriptionProviderIds.length > 0;

222-

case "realtimeVoiceProviders":

223-

return entry.realtimeVoiceProviderIds.length > 0;

224-

case "mediaUnderstandingProviders":

225-

return entry.mediaUnderstandingProviderIds.length > 0;

226-

case "transcriptSourceProviders":

227-

return entry.transcriptSourceProviderIds.length > 0;

228-

case "documentExtractors":

229-

return entry.documentExtractorIds.length > 0;

230-

case "imageGenerationProviders":

231-

return entry.imageGenerationProviderIds.length > 0;

232-

case "videoGenerationProviders":

233-

return entry.videoGenerationProviderIds.length > 0;

234-

case "musicGenerationProviders":

235-

return entry.musicGenerationProviderIds.length > 0;

236-

case "webContentExtractors":

237-

return entry.webContentExtractorIds.length > 0;

238-

case "webFetchProviders":

239-

return entry.webFetchProviderIds.length > 0;

240-

case "webSearchProviders":

241-

return entry.webSearchProviderIds.length > 0;

242-

case "migrationProviders":

243-

return entry.migrationProviderIds.length > 0;

244-

case "tools":

245-

return entry.toolNames.length > 0;

246-

}

247-

throw new Error("Unsupported manifest contract key");

248-

})

249-

.map((entry) => entry.pluginId),

250-

).toSorted((left, right) => left.localeCompare(right));

251-

}

252-253152

export let providerContractLoadError: Error | undefined;

254153255154

function formatBundledCapabilityPluginLoadError(params: {

@@ -360,45 +259,6 @@ function loadProviderContractEntriesForPluginId(pluginId: string): ProviderContr

360259

}

361260

}

362261363-

function loadProviderContractRegistry(): ProviderContractEntry[] {

364-

try {

365-

providerContractLoadError = undefined;

366-

const pluginIds = resolveBundledProviderContractPluginIds();

367-

const publicArtifactEntries = pluginIds.flatMap(

368-

(pluginId) =>

369-

resolveBundledExplicitProviderContractsFromPublicArtifacts({

370-

onlyPluginIds: [pluginId],

371-

}) ?? [],

372-

);

373-

const coveredPluginIds = new Set(publicArtifactEntries.map((entry) => entry.pluginId));

374-

const remainingPluginIds = resolveBundledProviderContractPluginIds().filter(

375-

(pluginId) => !coveredPluginIds.has(pluginId),

376-

);

377-

const runtimeEntries =

378-

remainingPluginIds.length > 0

379-

? loadBundledCapabilityRuntimeRegistry({

380-

pluginIds: remainingPluginIds,

381-

pluginSdkResolution: "dist",

382-

}).providers.map((entry) => ({

383-

pluginId: entry.pluginId,

384-

provider: entry.provider,

385-

}))

386-

: [];

387-

return [...publicArtifactEntries, ...runtimeEntries];

388-

} catch (error) {

389-

providerContractLoadError = error instanceof Error ? error : new Error(String(error));

390-

return [];

391-

}

392-

}

393-394-

function loadUniqueProviderContractProviders(): ProviderPlugin[] {

395-

return [

396-

...new Map(

397-

loadProviderContractRegistry().map((entry) => [entry.provider.id, entry.provider]),

398-

).values(),

399-

];

400-

}

401-402262

function loadProviderContractPluginIds(): string[] {

403263

return [...resolveBundledProviderContractPluginIds()];

404264

}

@@ -436,18 +296,6 @@ function resolveWebFetchCredentialValue(provider: WebFetchProviderPlugin): unkno

436296

: "sk-test";

437297

}

438298439-

function loadWebFetchProviderContractRegistry(): WebFetchProviderContractEntry[] {

440-

const registry = loadBundledCapabilityRuntimeRegistry({

441-

pluginIds: resolveBundledManifestContractPluginIds("webFetchProviders"),

442-

pluginSdkResolution: "dist",

443-

});

444-

return registry.webFetchProviders.map((entry) => ({

445-

pluginId: entry.pluginId,

446-

provider: entry.provider,

447-

credentialValue: resolveWebFetchCredentialValue(entry.provider),

448-

}));

449-

}

450-451299

export function resolveWebFetchProviderContractEntriesForPluginId(

452300

pluginId: string,

453301

): WebFetchProviderContractEntry[] {

@@ -466,37 +314,6 @@ export function resolveWebFetchProviderContractEntriesForPluginId(

466314

});

467315

}

468316469-

function loadWebSearchProviderContractRegistry(): WebSearchProviderContractEntry[] {

470-

const pluginIds = resolveBundledManifestContractPluginIds("webSearchProviders");

471-

const publicArtifactEntries = pluginIds.flatMap((pluginId) =>

472-

(

473-

resolveBundledExplicitWebSearchProvidersFromPublicArtifacts({

474-

onlyPluginIds: [pluginId],

475-

}) ?? []

476-

).map((provider) => ({

477-

pluginId: provider.pluginId,

478-

provider,

479-

credentialValue: resolveWebSearchCredentialValue(provider),

480-

})),

481-

);

482-

const coveredPluginIds = new Set(publicArtifactEntries.map((entry) => entry.pluginId));

483-

const remainingPluginIds = resolveBundledManifestContractPluginIds("webSearchProviders").filter(

484-

(pluginId) => !coveredPluginIds.has(pluginId),

485-

);

486-

const runtimeEntries =

487-

remainingPluginIds.length > 0

488-

? loadBundledCapabilityRuntimeRegistry({

489-

pluginIds: remainingPluginIds,

490-

pluginSdkResolution: "dist",

491-

}).webSearchProviders.map((entry) => ({

492-

pluginId: entry.pluginId,

493-

provider: entry.provider,

494-

credentialValue: resolveWebSearchCredentialValue(entry.provider),

495-

}))

496-

: [];

497-

return [...publicArtifactEntries, ...runtimeEntries];

498-

}

499-500317

export function resolveWebSearchProviderContractEntriesForPluginId(

501318

pluginId: string,

502319

): WebSearchProviderContractEntry[] {

@@ -526,102 +343,6 @@ export function resolveWebSearchProviderContractEntriesForPluginId(

526343

});

527344

}

528345529-

function loadSpeechProviderContractRegistry(): SpeechProviderContractEntry[] {

530-

return process.env.VITEST

531-

? loadVitestSpeechProviderContractRegistry()

532-

: loadBundledCapabilityRuntimeRegistry({

533-

pluginIds: resolveBundledManifestPluginIdsForContract("speechProviders"),

534-

pluginSdkResolution: "dist",

535-

}).speechProviders.map((entry) => ({

536-

pluginId: entry.pluginId,

537-

provider: entry.provider,

538-

}));

539-

}

540-541-

function loadRealtimeVoiceProviderContractRegistry(): RealtimeVoiceProviderContractEntry[] {

542-

return process.env.VITEST

543-

? loadVitestRealtimeVoiceProviderContractRegistry()

544-

: loadBundledCapabilityRuntimeRegistry({

545-

pluginIds: resolveBundledManifestPluginIdsForContract("realtimeVoiceProviders"),

546-

pluginSdkResolution: "dist",

547-

}).realtimeVoiceProviders.map((entry) => ({

548-

pluginId: entry.pluginId,

549-

provider: entry.provider,

550-

}));

551-

}

552-553-

function loadRealtimeTranscriptionProviderContractRegistry(): RealtimeTranscriptionProviderContractEntry[] {

554-

return process.env.VITEST

555-

? loadVitestRealtimeTranscriptionProviderContractRegistry()

556-

: loadBundledCapabilityRuntimeRegistry({

557-

pluginIds: resolveBundledManifestPluginIdsForContract("realtimeTranscriptionProviders"),

558-

pluginSdkResolution: "dist",

559-

}).realtimeTranscriptionProviders.map((entry) => ({

560-

pluginId: entry.pluginId,

561-

provider: entry.provider,

562-

}));

563-

}

564-565-

function loadMediaUnderstandingProviderContractRegistry(): MediaUnderstandingProviderContractEntry[] {

566-

return process.env.VITEST

567-

? loadVitestMediaUnderstandingProviderContractRegistry()

568-

: loadBundledCapabilityRuntimeRegistry({

569-

pluginIds: resolveBundledManifestPluginIdsForContract("mediaUnderstandingProviders"),

570-

pluginSdkResolution: "dist",

571-

}).mediaUnderstandingProviders.map((entry) => ({

572-

pluginId: entry.pluginId,

573-

provider: entry.provider,

574-

}));

575-

}

576-577-

function loadTranscriptsSourceProviderContractRegistry(): TranscriptsSourceProviderContractEntry[] {

578-

return process.env.VITEST

579-

? loadVitestTranscriptsSourceProviderContractRegistry()

580-

: loadBundledCapabilityRuntimeRegistry({

581-

pluginIds: resolveBundledManifestPluginIdsForContract("transcriptSourceProviders"),

582-

pluginSdkResolution: "dist",

583-

}).transcriptSourceProviders.map((entry) => ({

584-

pluginId: entry.pluginId,

585-

provider: entry.provider,

586-

}));

587-

}

588-589-

function loadImageGenerationProviderContractRegistry(): ImageGenerationProviderContractEntry[] {

590-

return process.env.VITEST

591-

? loadVitestImageGenerationProviderContractRegistry()

592-

: loadBundledCapabilityRuntimeRegistry({

593-

pluginIds: resolveBundledManifestPluginIdsForContract("imageGenerationProviders"),

594-

pluginSdkResolution: "dist",

595-

}).imageGenerationProviders.map((entry) => ({

596-

pluginId: entry.pluginId,

597-

provider: entry.provider,

598-

}));

599-

}

600-601-

function loadVideoGenerationProviderContractRegistry(): VideoGenerationProviderContractEntry[] {

602-

return process.env.VITEST

603-

? loadVitestVideoGenerationProviderContractRegistry()

604-

: loadBundledCapabilityRuntimeRegistry({

605-

pluginIds: resolveBundledManifestPluginIdsForContract("videoGenerationProviders"),

606-

pluginSdkResolution: "dist",

607-

}).videoGenerationProviders.map((entry) => ({

608-

pluginId: entry.pluginId,

609-

provider: entry.provider,

610-

}));

611-

}

612-613-

function loadMusicGenerationProviderContractRegistry(): MusicGenerationProviderContractEntry[] {

614-

return process.env.VITEST

615-

? loadVitestMusicGenerationProviderContractRegistry()

616-

: loadBundledCapabilityRuntimeRegistry({

617-

pluginIds: resolveBundledManifestPluginIdsForContract("musicGenerationProviders"),

618-

pluginSdkResolution: "dist",

619-

}).musicGenerationProviders.map((entry) => ({

620-

pluginId: entry.pluginId,

621-

provider: entry.provider,

622-

}));

623-

}

624-625346

function createLazyArrayView<T>(load: () => T[]): T[] {

626347

return new Proxy([] as T[], {

627348

get(_target, prop) {

@@ -654,19 +375,6 @@ function createLazyArrayView<T>(load: () => T[]): T[] {

654375

});

655376

}

656377657-

export const providerContractRegistry: ProviderContractEntry[] = createLazyArrayView(

658-

loadProviderContractRegistry,

659-

);

660-

export const uniqueProviderContractProviders: ProviderPlugin[] = createLazyArrayView(

661-

loadUniqueProviderContractProviders,

662-

);

663-

export const providerContractPluginIds: string[] = createLazyArrayView(

664-

loadProviderContractPluginIds,

665-

);

666-

export const providerContractCompatPluginIds: string[] = createLazyArrayView(

667-

loadProviderContractCompatPluginIds,

668-

);

669-670378

export function requireProviderContractProvider(providerId: string): ProviderPlugin {

671379

const pluginIds = resolveBundledProviderContractPluginIdsByProviderId().get(providerId) ?? [];

672380

const entries = loadProviderContractEntriesForPluginIds(pluginIds);

@@ -732,27 +440,12 @@ export function resolveProviderContractProvidersForPluginIds(

732440

];

733441

}

734442735-

export const webSearchProviderContractRegistry: WebSearchProviderContractEntry[] =

736-

createLazyArrayView(loadWebSearchProviderContractRegistry);

737-

export const webFetchProviderContractRegistry: WebFetchProviderContractEntry[] =

738-

createLazyArrayView(loadWebFetchProviderContractRegistry);

739-

export const speechProviderContractRegistry: SpeechProviderContractEntry[] = createLazyArrayView(

740-

loadSpeechProviderContractRegistry,

443+

export const providerContractPluginIds: string[] = createLazyArrayView(

444+

loadProviderContractPluginIds,

445+

);

446+

export const providerContractCompatPluginIds: string[] = createLazyArrayView(

447+

loadProviderContractCompatPluginIds,

741448

);

742-

export const realtimeTranscriptionProviderContractRegistry: RealtimeTranscriptionProviderContractEntry[] =

743-

createLazyArrayView(loadRealtimeTranscriptionProviderContractRegistry);

744-

export const realtimeVoiceProviderContractRegistry: RealtimeVoiceProviderContractEntry[] =

745-

createLazyArrayView(loadRealtimeVoiceProviderContractRegistry);

746-

export const mediaUnderstandingProviderContractRegistry: MediaUnderstandingProviderContractEntry[] =

747-

createLazyArrayView(loadMediaUnderstandingProviderContractRegistry);

748-

export const transcriptsSourceProviderContractRegistry: TranscriptsSourceProviderContractEntry[] =

749-

createLazyArrayView(loadTranscriptsSourceProviderContractRegistry);

750-

export const imageGenerationProviderContractRegistry: ImageGenerationProviderContractEntry[] =

751-

createLazyArrayView(loadImageGenerationProviderContractRegistry);

752-

export const videoGenerationProviderContractRegistry: VideoGenerationProviderContractEntry[] =

753-

createLazyArrayView(loadVideoGenerationProviderContractRegistry);

754-

export const musicGenerationProviderContractRegistry: MusicGenerationProviderContractEntry[] =

755-

createLazyArrayView(loadMusicGenerationProviderContractRegistry);

756449757450

function loadPluginRegistrationContractRegistry(): PluginRegistrationContractEntry[] {

758451

return resolveBundledManifestContracts();