@teith/openclaw-runware-provider 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 CHANGED
@@ -1,102 +1,120 @@
1
- # @runware/openclaw-provider
1
+ # openclaw-runware-provider
2
2
 
3
- OpenClaw provider plugin for [Runware](https://runware.ai) a unified
4
- OpenAI-compatible endpoint that proxies Claude, GPT, Gemini, Qwen, GLM,
5
- MiniMax, Kimi, and Gemma models.
3
+ OpenClaw plugin that wires Runware (a unified OpenAI-compatible endpoint
4
+ proxying Claude, GPT, Gemini, Qwen, GLM, MiniMax, Kimi, Gemma, …) into
5
+ OpenClaw as a first-class provider. Published as
6
+ `@teith/openclaw-runware-provider` on npm.
6
7
 
7
- ## Install
8
+ The plugin is the inference contract between the Runware-hosted managed
9
+ OpenClaw service (driven by [openclaw-manager][manager]) and the OpenClaw
10
+ gateway running inside each per-tenant pod. The manager installs this
11
+ package into the pod via `OpenClawInstance.spec.plugins`; the plugin
12
+ discovers the model catalog live from `GET /v1/models` on every gateway
13
+ start.
8
14
 
9
- ```bash
10
- openclaw plugins install git:github.com/runware/openclaw-provider@v0.1.0
11
- ```
12
-
13
- Set your API key:
15
+ [manager]: https://github.com/runware/openclaw-manager
14
16
 
15
- ```bash
16
- export RUNWARE_API_KEY=...your key...
17
- ```
17
+ ## Configuration
18
18
 
19
- Register the provider this fetches the model catalog from Runware and
20
- writes it into your OpenClaw config:
19
+ The plugin is configured entirely through environment variables no
20
+ config file, no CLI onboarding step. The managed deployment injects these
21
+ from a per-instance Kubernetes Secret; for local development, export them
22
+ in the shell before launching the gateway.
23
+
24
+ | Variable | Required | Default | Purpose |
25
+ |--------------------|----------|-------------------------------|------------------------------------------------------------------|
26
+ | `RUNWARE_API_KEY` | yes | — | Bearer token used for `/v1/models` and inference |
27
+ | `RUNWARE_BASE_URL` | no | `https://api.runware.ai/v1` | Endpoint override (e.g. `https://api.runware.dev/v1` for staging) |
28
+
29
+ `RUNWARE_API_KEY` resolution prefers `process.env` over openclaw's
30
+ runtime `resolveProviderApiKey(...)` — env is the source of truth in
31
+ the managed deployment, and openclaw's resolver can return stale values
32
+ from internal credential caches.
33
+
34
+ ## What the plugin does
35
+
36
+ - Registers `runware` as an OpenAI-compatible provider in OpenClaw via
37
+ the `providerCatalogEntry` manifest hook (the surface openclaw
38
+ 2026.5.x actually calls; mirrors the bundled `ollama` plugin).
39
+ - Fetches `/v1/models` on every catalog resolution. TTL-cached for 5
40
+ minutes; concurrent requests are deduplicated; the last-known-good
41
+ catalog is served on transient upstream failures.
42
+ - Injects `extra_body: { reasoning_effort: "high" }` into every chat
43
+ completions request so reasoning-capable models stream thinking content.
21
44
 
22
- ```bash
23
- openclaw models auth login --provider runware
24
- ```
45
+ ## Logging
25
46
 
26
- Restart the Gateway if it's running. All Runware models appear in the
27
- Control UI picker.
47
+ The plugin emits structured log lines prefixed with
48
+ `[runware-openclaw-provider]` on these conditions:
28
49
 
29
- ## Configuration
50
+ | Level | When |
51
+ |-------|----------------------------------------------------------------------|
52
+ | warn | `RUNWARE_API_KEY` missing — empty catalog returned |
53
+ | warn | `/v1/models` upstream failed but a cached catalog is being served |
54
+ | error | `/v1/models` upstream failed and no cached catalog exists |
55
+ | error | Any other failure inside `catalog.run` — falls back to empty catalog |
30
56
 
31
- | Variable | Required | Default | Purpose |
32
- |---|---|---|---|
33
- | `RUNWARE_API_KEY` | yes | | API key, used for `/v1/models` discovery and inference |
34
- | `RUNWARE_BASE_URL` | no | `https://api.runware.ai/v1` | Override for dev / staging |
57
+ Transport is `console.{error,warn,info,debug}` by default. The openclaw
58
+ gateway CLI captures process console output into the shared gateway log,
59
+ so these lines show up in `openclaw logs --follow`, the Control UI Logs
60
+ tab, and the gateway stderr without any additional wiring. If a future
61
+ openclaw version starts invoking `register(api)` for external plugins,
62
+ the logger is automatically swapped to `api.logger` so lines are tagged
63
+ by the openclaw scoped logger instead.
35
64
 
36
- Switching environments:
65
+ To follow plugin output in a running managed deployment:
37
66
 
38
67
  ```bash
39
- # dev
40
- export RUNWARE_BASE_URL=https://api.runware.dev/v1
41
- export RUNWARE_API_KEY=...dev key...
42
- openclaw models auth login --provider runware
43
-
44
- # prod (unset override)
45
- unset RUNWARE_BASE_URL
46
- export RUNWARE_API_KEY=...prod key...
47
- openclaw models auth login --provider runware
68
+ openclaw logs --follow | grep runware-openclaw-provider
48
69
  ```
49
70
 
50
- ## What this plugin does
51
-
52
- - Registers `runware` as an OpenAI-compatible provider in OpenClaw.
53
- - Discovers the model catalog live from `GET /v1/models` on registration.
54
- TTL-cached for 5 minutes; last-known-good on transient failures.
55
- - Injects `extra_body: { reasoning_effort: "high" }` into every chat
56
- completions request, so reasoning-capable models stream thinking content.
57
-
58
71
  ## Architecture
59
72
 
60
- Two-file core:
73
+ ```
74
+ src/
75
+ ├── index.ts plugin entry — register(api) callback
76
+ ├── provider-discovery.ts default export consumed by providerCatalogEntry
77
+ ├── models.ts shared model-building primitives + env resolution
78
+ ├── catalog.ts TTL-cached /v1/models fetcher with dedup
79
+ └── openclaw-api.ts local type stubs for the openclaw runtime API
80
+ ```
61
81
 
62
- - `src/index.ts` plugin entry. Registers the provider, defines the
63
- auth flow, and builds the model catalog.
64
- - `src/catalog.ts` TTL-cached `GET /v1/models` fetcher with concurrent
65
- request deduplication and last-known-good fallback.
82
+ `models.ts` is the single source of truth. Both `index.ts`
83
+ (`register(api)` flow, declared but currently not invoked by openclaw
84
+ 2026.5.x for external plugins) and `provider-discovery.ts`
85
+ (`providerCatalogEntry` flow, the one openclaw actually calls) share its
86
+ `resolveApiKey`, `resolveBaseUrl`, `buildProvider`, and
87
+ `buildCatalogRows` helpers — so the picker catalog and the inference
88
+ provider always reflect the same `/v1/models` snapshot.
66
89
 
67
- OpenClaw API surface is described locally in `src/openclaw-api.ts`
68
- the plugin does not import from the `openclaw` package at runtime.
90
+ The plugin does not import from the `openclaw` npm package at runtime;
91
+ the API surface is described locally in `openclaw-api.ts`.
69
92
 
70
93
  ## Development
71
94
 
72
95
  ```bash
73
96
  pnpm install
74
- pnpm test
97
+ pnpm test # vitest, 24 tests
75
98
  pnpm typecheck
76
- pnpm build
77
- ```
78
-
79
- Local install for testing:
80
-
81
- ```bash
82
- openclaw plugins install -l /absolute/path/to/this/repo
99
+ pnpm build # tsc → ./dist
83
100
  ```
84
101
 
85
- Use `-l` to symlink rebuilds become visible after `pnpm build` and a
86
- Gateway restart, without reinstalling.
102
+ `dist/` is committed to git and shipped in the npm tarball because
103
+ openclaw installs plugins with `npm install --ignore-scripts` and cannot
104
+ run a build step inside the operator's init container.
87
105
 
88
106
  ## Release
89
107
 
90
108
  ```bash
91
- pnpm test && pnpm build
92
- git add . && git commit -m "Release v0.1.0"
93
- git tag v0.1.0
109
+ pnpm test && pnpm clean && pnpm build
110
+ # bump version in package.json
111
+ git commit -am "Release vX.Y.Z"
112
+ git tag vX.Y.Z
94
113
  git push origin main --tags
114
+ npm publish --access public
95
115
  ```
96
116
 
97
- `dist/` is committed to the repository because OpenClaw installs plugins
98
- with `npm install --ignore-scripts` and cannot run a build step.
99
-
100
- ## License
101
-
102
- MIT
117
+ Bumping the version requires a matching bump of `cfg.plugin_package` in
118
+ [openclaw-manager][manager]/`src/openclaw_manager/config.py` (and the
119
+ chart values) — the manager pins to an exact version so the install is
120
+ reproducible across instances.
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAeA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBtF;AAwBD,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAiBA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCtF;AAwBD,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
package/dist/catalog.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { logger } from "./logger.js";
1
2
  const CACHE_TTL_MS = 5 * 60 * 1000;
2
3
  const FETCH_TIMEOUT_MS = 5000;
3
4
  let cache = null;
@@ -16,8 +17,16 @@ export async function fetchModelIds(baseUrl, apiKey) {
16
17
  return ids;
17
18
  }
18
19
  catch (err) {
19
- if (cache)
20
+ const message = err instanceof Error ? err.message : String(err);
21
+ if (cache) {
22
+ logger.warn("upstream /v1/models fetch failed; serving stale catalog", {
23
+ baseUrl,
24
+ cachedModels: cache.modelIds.length,
25
+ error: message,
26
+ });
20
27
  return cache.modelIds;
28
+ }
29
+ logger.error("upstream /v1/models fetch failed and no cached catalog is available", { baseUrl, error: message });
21
30
  throw err;
22
31
  }
23
32
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAW9B,IAAI,KAAK,GAAsB,IAAI,CAAC;AACpC,IAAI,QAAQ,GAA6B,IAAI,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,MAAc;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;YACjC,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc;IAC9D,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;YAC1E,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,KAAK,GAAG,IAAI,CAAC;IACb,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,KAAK,EAAE,WAkCZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,KAAK,EAAE,WAmCZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { setHostLogger } from "./logger.js";
1
2
  import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, PROVIDER_ID, PROVIDER_LABEL, buildCatalogRows, buildProvider, resolveApiKey, resolveBaseUrl, } from "./models.js";
2
3
  const PLUGIN_ID = "runware-openclaw-provider";
3
4
  /**
@@ -26,6 +27,8 @@ const entry = {
26
27
  name: PROVIDER_LABEL,
27
28
  description: "Runware — unified OpenAI-compatible access to Claude, GPT, Gemini, Qwen, GLM, MiniMax, Kimi, and Gemma.",
28
29
  register(api) {
30
+ if (api.logger)
31
+ setHostLogger(api.logger);
29
32
  api.registerProvider({
30
33
  id: PROVIDER_ID,
31
34
  label: PROVIDER_LABEL,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,KAAK,GAAgB;IACzB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,yGAAyG;IAE3G,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,gBAAgB,CAAC;YACnB,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;YAC5C,IAAI,EAAE,EAAE;YACR,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;gBACf,GAAG,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;oBACjC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,CAAC;aACF;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,4BAA4B,CAAC;YAC/B,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzB,OAAO,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,KAAK,GAAgB;IACzB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,yGAAyG;IAE3G,QAAQ,CAAC,GAAG;QACV,IAAI,GAAG,CAAC,MAAM;YAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,gBAAgB,CAAC;YACnB,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;YAC5C,IAAI,EAAE,EAAE;YACR,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;gBACf,GAAG,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;oBACjC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,CAAC;aACF;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,4BAA4B,CAAC;YAC/B,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzB,OAAO,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Plugin-scoped logger with two transports:
3
+ *
4
+ * - default: console.error/warn/info/debug. OpenClaw's gateway CLI
5
+ * captures process console output and writes it to the shared gateway
6
+ * log file alongside its own logger output, so anything we emit here
7
+ * surfaces in `openclaw logs --follow` and the Control UI Logs tab
8
+ * without any wiring. This is the only path available from the
9
+ * `providerCatalogEntry` hook, where we never get a `register(api)` call
10
+ * and therefore never see `api.logger`.
11
+ *
12
+ * - host: `setHostLogger(api.logger)` swaps console for openclaw's plugin
13
+ * logger. Used from the `register(api)` flow when openclaw actually
14
+ * invokes it (currently 2026.5.x does not for external plugins, but
15
+ * future versions are expected to per the SDK docs).
16
+ *
17
+ * Both modes prepend the plugin id so the line is greppable in the shared
18
+ * gateway log next to log lines from bundled plugins.
19
+ */
20
+ export interface HostLogger {
21
+ error: (message: string) => void;
22
+ warn: (message: string) => void;
23
+ info: (message: string) => void;
24
+ debug?: (message: string) => void;
25
+ }
26
+ export declare function setHostLogger(next: HostLogger | null): void;
27
+ export declare const logger: {
28
+ readonly error: (message: string, meta?: Record<string, unknown>) => void;
29
+ readonly warn: (message: string, meta?: Record<string, unknown>) => void;
30
+ readonly info: (message: string, meta?: Record<string, unknown>) => void;
31
+ readonly debug: (message: string, meta?: Record<string, unknown>) => void;
32
+ };
33
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE3D;AAeD,eAAO,MAAM,MAAM;8BACF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;6BAK9C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;6BAK7C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;8BAK5C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;CAKpD,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Plugin-scoped logger with two transports:
3
+ *
4
+ * - default: console.error/warn/info/debug. OpenClaw's gateway CLI
5
+ * captures process console output and writes it to the shared gateway
6
+ * log file alongside its own logger output, so anything we emit here
7
+ * surfaces in `openclaw logs --follow` and the Control UI Logs tab
8
+ * without any wiring. This is the only path available from the
9
+ * `providerCatalogEntry` hook, where we never get a `register(api)` call
10
+ * and therefore never see `api.logger`.
11
+ *
12
+ * - host: `setHostLogger(api.logger)` swaps console for openclaw's plugin
13
+ * logger. Used from the `register(api)` flow when openclaw actually
14
+ * invokes it (currently 2026.5.x does not for external plugins, but
15
+ * future versions are expected to per the SDK docs).
16
+ *
17
+ * Both modes prepend the plugin id so the line is greppable in the shared
18
+ * gateway log next to log lines from bundled plugins.
19
+ */
20
+ const PREFIX = "[runware-openclaw-provider]";
21
+ let host = null;
22
+ export function setHostLogger(next) {
23
+ host = next;
24
+ }
25
+ function safeStringify(meta) {
26
+ try {
27
+ return JSON.stringify(meta);
28
+ }
29
+ catch {
30
+ return "[unserializable meta]";
31
+ }
32
+ }
33
+ function format(message, meta) {
34
+ if (!meta || Object.keys(meta).length === 0)
35
+ return `${PREFIX} ${message}`;
36
+ return `${PREFIX} ${message} ${safeStringify(meta)}`;
37
+ }
38
+ export const logger = {
39
+ error(message, meta) {
40
+ const line = format(message, meta);
41
+ if (host)
42
+ host.error(line);
43
+ else
44
+ console.error(line);
45
+ },
46
+ warn(message, meta) {
47
+ const line = format(message, meta);
48
+ if (host)
49
+ host.warn(line);
50
+ else
51
+ console.warn(line);
52
+ },
53
+ info(message, meta) {
54
+ const line = format(message, meta);
55
+ if (host)
56
+ host.info(line);
57
+ else
58
+ console.info(line);
59
+ },
60
+ debug(message, meta) {
61
+ const line = format(message, meta);
62
+ if (host?.debug)
63
+ host.debug(line);
64
+ else if (!host)
65
+ (console.debug ?? console.log).call(console, line);
66
+ },
67
+ };
68
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAS7C,IAAI,IAAI,GAAsB,IAAI,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uBAAuB,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAAe,EAAE,IAA8B;IAC7D,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;IAC3E,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC7B,IAAI,CAAC,IAAI;YAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;CACO,CAAC"}
package/dist/models.d.ts CHANGED
@@ -69,10 +69,19 @@ export declare function humanizeModelId(id: string): string;
69
69
  */
70
70
  export declare function resolveBaseUrl(env?: Record<string, string | undefined>): string;
71
71
  /**
72
- * Resolve the Runware API key, preferring openclaw's
73
- * `ctx.resolveProviderApiKey(...)` when available (this is how the runtime
74
- * threads through secret references and per-provider profiles), falling
75
- * back to the explicit env map, finally to `process.env`.
72
+ * Resolve the Runware API key. The env variable wins over openclaw's
73
+ * `ctx.resolveProviderApiKey(...)` because env is the source of truth in
74
+ * the managed-deployment scenario where this plugin actually runs: each
75
+ * instance pod gets `RUNWARE_API_KEY` injected from a Kubernetes Secret
76
+ * that the openclaw-manager keeps in sync with the Runware Admin API.
77
+ *
78
+ * `ctx.resolveProviderApiKey` can return a stale value — openclaw's
79
+ * credentials resolver caches keys from auto-enable / config snapshots /
80
+ * legacy auth-profile state, and we observed it returning an old (revoked)
81
+ * key here even though the secret was rotated and the new key is live in
82
+ * env. Reversing the order makes env authoritative and falls back to the
83
+ * runtime-resolved key only when env is empty (e.g. running outside a
84
+ * managed deployment, where the user configured the key via the wizard).
76
85
  */
77
86
  export declare function resolveApiKey(ctx: {
78
87
  resolveProviderApiKey?: (providerId: string) => {
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAKnD,QAAA,MAAM,YAAY;;;;CAAwD,CAAC;AAC3E,QAAA,MAAM,SAAS;;;;;CAAgE,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,SAAS,CAAC;IACvB,MAAM,EAAE,OAAO,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,oBAAoB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,SAAS,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAI/E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,MAAM,GAAG,SAAS,CAKrB;AA8BD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAKnD,QAAA,MAAM,YAAY;;;;CAAwD,CAAC;AAC3E,QAAA,MAAM,SAAS;;;;;CAAgE,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,SAAS,CAAC;IACvB,MAAM,EAAE,OAAO,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,oBAAoB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,SAAS,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAI/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,MAAM,GAAG,SAAS,CAKrB;AA8BD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B"}
package/dist/models.js CHANGED
@@ -47,17 +47,26 @@ export function resolveBaseUrl(env) {
47
47
  return trimmed.length > 0 ? trimmed : DEFAULT_BASE_URL;
48
48
  }
49
49
  /**
50
- * Resolve the Runware API key, preferring openclaw's
51
- * `ctx.resolveProviderApiKey(...)` when available (this is how the runtime
52
- * threads through secret references and per-provider profiles), falling
53
- * back to the explicit env map, finally to `process.env`.
50
+ * Resolve the Runware API key. The env variable wins over openclaw's
51
+ * `ctx.resolveProviderApiKey(...)` because env is the source of truth in
52
+ * the managed-deployment scenario where this plugin actually runs: each
53
+ * instance pod gets `RUNWARE_API_KEY` injected from a Kubernetes Secret
54
+ * that the openclaw-manager keeps in sync with the Runware Admin API.
55
+ *
56
+ * `ctx.resolveProviderApiKey` can return a stale value — openclaw's
57
+ * credentials resolver caches keys from auto-enable / config snapshots /
58
+ * legacy auth-profile state, and we observed it returning an old (revoked)
59
+ * key here even though the secret was rotated and the new key is live in
60
+ * env. Reversing the order makes env authoritative and falls back to the
61
+ * runtime-resolved key only when env is empty (e.g. running outside a
62
+ * managed deployment, where the user configured the key via the wizard).
54
63
  */
55
64
  export function resolveApiKey(ctx) {
56
- const fromAuth = ctx.resolveProviderApiKey?.(PROVIDER_ID).apiKey;
57
- if (typeof fromAuth === "string" && fromAuth.length > 0)
58
- return fromAuth;
59
65
  const fromEnv = ctx.env?.[API_KEY_ENV_VAR] ?? process.env[API_KEY_ENV_VAR];
60
- return typeof fromEnv === "string" && fromEnv.length > 0 ? fromEnv : undefined;
66
+ if (typeof fromEnv === "string" && fromEnv.length > 0)
67
+ return fromEnv;
68
+ const fromAuth = ctx.resolveProviderApiKey?.(PROVIDER_ID).apiKey;
69
+ return typeof fromAuth === "string" && fromAuth.length > 0 ? fromAuth : undefined;
61
70
  }
62
71
  function buildModelEntry(id) {
63
72
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * a downstream consumer of openclaw's TypeScript types. Keeping the surface
6
6
  * minimal here also lets us track exactly which hooks we touch.
7
7
  */
8
+ import type { HostLogger } from "./logger.js";
8
9
  import type { ModelCatalogRow } from "./models.js";
9
10
  /**
10
11
  * Context passed to plugin hooks (`registerProvider.catalog.run`,
@@ -24,6 +25,7 @@ export interface CatalogContext {
24
25
  * available on the underlying object — we just don't type them here.
25
26
  */
26
27
  export interface PluginApi {
28
+ logger?: HostLogger;
27
29
  registerProvider: (spec: unknown) => void;
28
30
  registerModelCatalogProvider: (spec: {
29
31
  provider: string;
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-api.d.ts","sourceRoot":"","sources":["../src/openclaw-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,4BAA4B,EAAE,CAAC,IAAI,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,WAAW,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;KACzE,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC"}
1
+ {"version":3,"file":"openclaw-api.d.ts","sourceRoot":"","sources":["../src/openclaw-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,4BAA4B,EAAE,CAAC,IAAI,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,WAAW,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;KACzE,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-discovery.d.ts","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AAEH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAYD,iBAAe,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC,CAUxF;AAED,QAAA,MAAM,wBAAwB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"provider-discovery.d.ts","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AAEH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAYD,iBAAe,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC,CA4BxF;AAED,QAAA,MAAM,wBAAwB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { logger } from "./logger.js";
1
2
  import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_LABEL, buildProvider, resolveApiKey, resolveBaseUrl, } from "./models.js";
2
3
  function emptyProvider(baseUrl) {
3
4
  return {
@@ -16,9 +17,21 @@ async function runwareCatalogRun(ctx) {
16
17
  // an empty provider shape so openclaw treats the catalog as "known but
17
18
  // currently unpopulated" rather than crashing. The next invocation will
18
19
  // re-resolve and fill in models once the key is present.
19
- if (!apiKey)
20
+ if (!apiKey) {
21
+ logger.warn(`${API_KEY_ENV_VAR} is not set — returning an empty Runware catalog`, { baseUrl });
20
22
  return { provider: emptyProvider(baseUrl) };
21
- return { provider: await buildProvider(apiKey, baseUrl) };
23
+ }
24
+ try {
25
+ return { provider: await buildProvider(apiKey, baseUrl) };
26
+ }
27
+ catch (err) {
28
+ // openclaw silently swallows rejections from catalog.run, which is why
29
+ // upstream failures were previously invisible. Log explicitly via the
30
+ // gateway CLI's console capture and degrade to an empty catalog so the
31
+ // gateway keeps booting — the next invocation will retry.
32
+ logger.error("failed to build Runware provider catalog — returning empty fallback", { baseUrl, error: err instanceof Error ? err.message : String(err) });
33
+ return { provider: emptyProvider(baseUrl) };
34
+ }
22
35
  }
23
36
  const runwareProviderDiscovery = {
24
37
  id: PROVIDER_ID,
@@ -1 +1 @@
1
- {"version":3,"file":"provider-discovery.js","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAwBrB,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,OAAO;QACP,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,oBAAoB;QACzB,cAAc,EAAE,GAAG;QACnB,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,yDAAyD;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE;QACP,KAAK,EAAE,MAAe;QACtB,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"provider-discovery.js","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAwBrB,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,OAAO;QACP,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,oBAAoB;QACzB,cAAc,EAAE,GAAG;QACnB,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,yDAAyD;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CACT,GAAG,eAAe,kDAAkD,EACpE,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,0DAA0D;QAC1D,MAAM,CAAC,KAAK,CACV,qEAAqE,EACrE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACrE,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE;QACP,KAAK,EAAE,MAAe;QACtB,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teith/openclaw-runware-provider",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "OpenClaw provider plugin for Runware — unified OpenAI-compatible access to Claude, GPT, Gemini, Qwen, GLM, MiniMax, Kimi, and Gemma.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,8 +17,7 @@
17
17
  "files": [
18
18
  "dist",
19
19
  "openclaw.plugin.json",
20
- "README.md",
21
- "LICENSE"
20
+ "README.md"
22
21
  ],
23
22
  "scripts": {
24
23
  "build": "tsc -p tsconfig.build.json",
@@ -38,10 +37,6 @@
38
37
  "runware"
39
38
  ]
40
39
  },
41
- "repository": {
42
- "type": "git",
43
- "url": "https://github.com/runware/openclaw-provider.git"
44
- },
45
40
  "keywords": [
46
41
  "openclaw",
47
42
  "openclaw-plugin",
package/dist/types.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export type { ModelCatalogRow, ProviderShape, ModelEntry } from "./models.js";
2
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}