You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-`pnpm tsgo:all`: every TypeScript graph above; this is what `pnpm check` runs.
136
-
-`pnpm tsgo:profile [core-test|extensions-test|--all]`: profile fresh graph cost into `.artifacts/tsgo-profile/`.
136
+
-`pnpm tsgo:profile [core-test|extensions-test|--all]`: profile fresh graph cost into `.artifacts/tsgo-profile/`; if a core graph lists `extensions/<id>/`, treat that as boundary/perf debt from imports (usually plugin-sdk facades or shared helpers pulling extension sources).
137
137
- Narrow aliases remain for local loops: `pnpm tsgo:test:src`, `pnpm tsgo:test:ui`, `pnpm tsgo:test:packages`.
138
138
- Do not add `tsc --noEmit`, `typecheck`, or `check:types` lanes for repo type checking. Use `tsgo` graphs. `tsc` is allowed only when emitting declaration/package-boundary compatibility artifacts that `tsgo` does not replace.
139
139
- Boundary rule: core must not know extension implementation details. Extensions hook into core through manifests, registries, capabilities, and public `openclaw/plugin-sdk/*` contracts. If you find core production code naming a specific extension, or a core test that is really testing extension-owned behavior, call it out and prefer moving coverage/logic to the owning extension or a generic contract test.
Copy file name to clipboardExpand all lines: docs/plugins/manifest.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -95,6 +95,12 @@ Those belong in your plugin code and `package.json`.
95
95
"modelSupport": {
96
96
"modelPrefixes": ["router-"]
97
97
},
98
+
"providerEndpoints": [
99
+
{
100
+
"endpointClass": "xai-native",
101
+
"hosts": ["api.x.ai"]
102
+
}
103
+
],
98
104
"cliBackends": ["openrouter-cli"],
99
105
"syntheticAuthRefs": ["openrouter-cli"],
100
106
"providerAuthEnvVars": {
@@ -153,6 +159,7 @@ Those belong in your plugin code and `package.json`.
153
159
|`channels`| No |`string[]`| Channel ids owned by this plugin. Used for discovery and config validation. |
154
160
|`providers`| No |`string[]`| Provider ids owned by this plugin. |
155
161
|`modelSupport`| No |`object`| Manifest-owned shorthand model-family metadata used to auto-load the plugin before runtime. |
162
+
|`providerEndpoints`| No |`object[]`| Manifest-owned endpoint host/baseUrl metadata for provider routes that core must classify before provider runtime loads. |
156
163
|`cliBackends`| No |`string[]`| CLI inference backend ids owned by this plugin. Used for startup auto-activation from explicit config refs. |
157
164
|`syntheticAuthRefs`| No |`string[]`| Provider or CLI backend refs whose plugin-owned synthetic auth hook should be probed during cold model discovery before runtime loads. |
158
165
|`nonSecretAuthMarkers`| No |`string[]`| Bundled-plugin-owned placeholder API key values that represent non-secret local, OAuth, or ambient credential state. |
@@ -602,6 +609,9 @@ See [Configuration reference](/gateway/configuration) for the full `plugins.*` s
602
609
-`providerAuthAliases` lets provider variants reuse another provider's auth
603
610
env vars, auth profiles, config-backed auth, and API-key onboarding choice
604
611
without hardcoding that relationship in core.
612
+
-`providerEndpoints` lets provider plugins own simple endpoint host/baseUrl
613
+
matching metadata. Use it only for endpoint classes core already supports;
614
+
the plugin still owns runtime behavior.
605
615
-`syntheticAuthRefs` is the cheap metadata path for provider-owned synthetic
606
616
auth hooks that must be visible to cold model discovery before the runtime
607
617
registry exists. Only list refs whose runtime provider or CLI backend actually
0 commit comments