Skip to content

Add Qiniu MaaS (Conatus Free) provider plugin - #374

Open
lakegan wants to merge 7 commits into
magpie-community:mainfrom
lakegan:add-qiniu-provider
Open

lakegan wants to merge 7 commits into
magpie-community:mainfrom
lakegan:add-qiniu-provider

Conversation

@lakegan

@lakegan lakegan commented Oct 25, 2026 •

Copy link
Copy Markdown

Add Qiniu MaaS provider plugin

What it does

A provider plugin for 七牛云 MaaS (Modelink). Sign in with one API key and use
the 89 models Qiniu serves — DeepSeek, Qwen, GLM, Kimi, MiniMax, Doubao, Xiaomi
MiMo and Qiniu's own Conatus. The 1024 Programmer's Day activity
(details) makes a few of them
free until 2026-11-30; the plugin marks those models free: true but does not
depend on the activity.

How it is built

  • config declares the provider (Qiniu is not in models.dev) with a built-in
    snapshot of 89 models, so models are listed even offline.
  • provider.models refetches GET /v1/models at run time (that endpoint is
    anonymously readable) and merges over the snapshot. If it fails, the host keeps
    the declared list.
  • auth.loader watches for 401 + auth_api_key_invalid and answers with
    X-Magpie-Sign-In: expired, so a dead key marks the account for re-sign-in
    instead of failing over like an ordinary request error.
  • auth.usage (magpie's own hook, ignored by OpenCode) reads today's token
    spend through Qiniu's management API
    GET https://api.qiniu.com/ai/inapi/v3/stat/new, signed HMAC-SHA1 with an
    optional AccessKey/SecretKey pair asked for at sign-in and kept in the
    account's metadata.

Notes worth knowing

  • Qiniu has no public "remaining allowance" endpoint — only consumed
    amounts. So there is no default quota: without dailyQuota the window
    reports used tokens only, with no limit and no used percentage. A built-in
    1e8 would have handed every user a made-up "100% remaining" window, and magpie
    suspends an account once a window reaches 100% — which would hit paying users
    and anyone on a paid model, long after the activity ends. When dailyQuota
    is set, only the free models are counted, since the allowance covers those
    alone.
  • The usage endpoint's field names are not what they look like: the billing item
    is in key (cache / ncache / output), the unit is in unit_name, and
    total counts unit_size_default tokens (1000) rather than single tokens.
    Reading name/unit yields undefined and leaves the spend at zero, which
    makes the usage card sit at "100% remaining" forever — the parsing and a
    regression test pinning the real response shape are both in lib/usage.mjs /
    test/usage.test.mjs.
  • The activity's free allowance is per account and resets daily at 00:00
    (Asia/Shanghai). When it runs out Qiniu rejects the call outright rather than
    switching to a paid model, so the plugin does no automatic fallback.
  • Capability flags (tools / vision / reasoning) are heuristic: /v1/models
    returns only context_length and max_tokens. An explicit instruct
    exclusion wins over the family patterns, so qwen3-coder-480b-a35b-instruct
    is not mistaken for a thinking model. Users can override any model in
    plugins.json.
  • auth.methods carries two optional prompts (accessKey, secretKey) so the
    AK/SK can be entered in the sign-in dialog instead of a config file. Both may
    be left empty. Qiniu's model API key (sk-…) and its account AK/SK are
    different credentials and are never mixed: the key signs model calls, the
    AK/SK only reads usage. Credentials travel with the account — there is no
    environment-variable fallback, because one QINIU_ACCESS_KEY would be applied
    to every account that left the prompts blank.
  • The plugin never writes magpie's own config. The key URL is declared in the
    provider metadata (keysUrl) and the host decides how to render it.
  • Model keys are derived from the whole sorted id set, so the same model list
    yields the same keys regardless of the order Qiniu returns it in.

Testing

59 node:test cases, all offline with fetch stubbed:

  • sign.mjs verified against the example in
    https://developer.qiniu.com/kodo/1201/access-token — byte-for-byte match
    (MY_ACCESS_KEY:1uLvuZM6l6oCzZFqkJ6oI4oFMVQ=).
  • usage parsing against the real /stat/new response shape, the no-default-quota
    contract (limit/used absent unless dailyQuota is set), the free-model
    filter, the absence of an env-var fallback, window shape, and the credential
    mix-up guard (a sk- key entered as SecretKey is reported before any request
    is made).
  • model naming, the instruct exclusion, order-independent keys, and filtering.
  • hook contracts: config / auth / provider.
node --test "test/*.test.mjs"
node scripts/check.mjs        # loads the plugin and fetches the live model list

No runtime dependencies; only node:crypto and global fetch.

Registry entry

{ "package": "@magpie-community/opencode-qiniu-auth", "name": "七牛云 · Conatus Free", "providers": ["qiniu"], "community": true,
  "summary": { "en": "…", "zh": "…" } }

Added to registry.json; the package itself lives in packages/qiniu/.

Qiniu (七牛云) MaaS / Modelink, provider id "qiniu": sign in with one
sk- API key and use the 89 models Qiniu serves, including the free tier of
the 1024 activity's Conatus.

- config declares the provider with a built-in 89-model snapshot
- provider.models refetches /v1/models at run time and merges over it
- auth.loader turns a dead key into X-Magpie-Sign-In: expired
- auth.usage reads today's token spend through Qiniu's management API,
  signed with an optional AccessKey/SecretKey asked at sign-in

No runtime dependencies. 45 node:test cases, all offline.
@lakegan
lakegan force-pushed the add-qiniu-provider branch from 9c31020 to b8885de Compare October 25, 2026 00:46
Qiniu's /ai/inapi/v3/stat/new names the billing item in `key`
(cache/ncache/output) and the unit in `unit_name`, and its `total` is
counted in `unit_size_default` tokens (1000). Reading `name`/`unit`
yielded undefined, so tokens stayed 0 - and since the percentage is
derived from it, the usage card sat at "100% remaining" no matter how
much was actually spent.

Now all three items are summed with the right multiplier. Verified
against the live endpoint: today's spend parses to 2.08M tokens.

Also adds a regression test pinning the real response shape, and
sumUsage now accepts modelFilter so per-model numbers stay correct.
Brings the branch up to date with magpie-community/plugins main
(trae 0.2.22 and earlier) so the PR no longer reads as diverged.
Only packages/qiniu/ and the qiniu entry in registry.json are ours;
every other file is taken from upstream byte-for-byte.
@lakegan

lakegan commented Oct 25, 2026

Copy link
Copy Markdown
Author

Hi, a note in case it helps while this is waiting for review.

CI hasn't run. check-runs is still 0 — this is my first contribution from a fork, so the workflows need a maintainer to approve once. Nothing is failing; they just never started.

What I verified locally in the meantime:

  • node --test "test/*.test.mjs" → 49/49 pass, all offline with fetch stubbed
  • node scripts/check.mjs → loads the plugin, 89 built-in models / 89 live models / 4 free
  • lib/sign.mjs matches the example in https://developer.qiniu.com/kodo/1201/access-token byte-for-byte
  • live /v1/models is anonymously readable (89 models), so the declared snapshot and the runtime refetch agree

One thing worth flagging for review — Qiniu's usage endpoint uses non-obvious field names, which I got wrong on the first pass and fixed in 6c08258:

key               → the billing item (cache / ncache / output), not `name`
unit_name         → "token", not `unit`
unit_size_default → 1000, i.e. `total` counts *thousands* of tokens

Reading name/unit returns undefined, which left the spend at 0 and made the usage card sit at "100% remaining" indefinitely. test/usage.test.mjs now pins the real response shape so it can't regress.

I also merged upstream main in (4df3c247) so the branch is no longer diverged — packages/trae/ and every other upstream file are taken byte-for-byte from main; the only files that are mine are packages/qiniu/ and the three-line registry.json addition.

Happy to change anything you'd rather see done differently.

@yetone yetone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感谢提交!我逐行看了 4df3c24,七牛云是云厂商,可以收。下面这些问题需要先改:

已跑

  • 沙箱 HOME 下 bun test packages/qiniu:49 pass,fetch 全部是 stub,不会联网。bun scripts/check.mjs qiniu:✓。
  • 用 magpie 插件宿主跑 scripts/try.sh qiniu:能加载,列出 89 个模型,状态是未登录。我没有七牛账号,所以没发过真实请求。

必须改

  1. 每日额度是编出来的(index.mjs 里的 dailyLimit: Number(opts.dailyQuota) || DEFAULT_DAILY_QUOTA)。不填 dailyQuota 的话,每个用户都会拿到一个 1e8/天的窗口,used 也会按百分比算。这和 usage.mjs 的注释、PR 说明里的「不填就只显示已用量」「never invents a balance」对不上。还有几个问题:
    • 活动页写的是「认证用户每日 1 亿 Token,充值后最高 10 亿」,只算免费模型,活动到 2026-11-30 23:59 结束。现在的累计没设 usageModel 时把所有模型的 token 都算进去了;
    • 窗口到 100% 时,magpie 的路由会把这个账号挂起。充值用户、用付费模型的用户都会被误伤;11-30 之后这个额度就完全是编的了。
      改法:不填就不给 limit,只报已用量(不带 used 百分比)。百分比只在用户自己填了 dailyQuota 时才出,而且只算活动覆盖的那个模型。
  2. scripts/patch-keys-url.mjs 直接改写 ~/.config/magpie/providers.json。这个脚本虽然不打进包(不在 files 里),但 README 让用户自己去跑。插件不能写 magpie 的配置文件,请删掉这个脚本和 README 里对应的那段。需要链接的话,放在插件自己的 provider 元数据里。
  3. 推理模型判断误伤 instruct 模型(REASONING_RE)。像 qwen3-coder-480b-a35b-instruct、qwen3-235b-a22b-instruct-2507 这种 instruct 模型,因为名字里有 qwen3 就被标成了推理模型。请排除 instruct,或者按七牛 API 返回的字段判断。

应该改

  1. AK/SK 会退回环境变量 QINIU_ACCESS_KEY / QINIU_SECRET_KEY(index.mjs:85-87)。登录时填的 AK/SK 已经够用了,再退回环境变量的话,同一个变量会套到每个没填 AK/SK 的账号上,查出来的是别人的用量。GUI 启动的 magpie 也读不到 shell 变量,README:155 的 export 写法在那种情况下没用。请去掉环境变量这条退路,README 也一起改。
  2. 市场里的名字叫「七牛云 · Conatus Free」,绑的是一个 11-30 就结束的活动。请改成「七牛云」,活动的事写在描述里。
  3. 小问题:模型 key 去掉了厂商前缀,冲突时才退回完整 id,所以同一个模型的 key 取决于列表顺序,七牛加了一个同名模型,旧 key 就可能变。建议直接用完整 id,或者让去前缀的规则和顺序无关。

Review feedback on magpie-community#374, all of it fair:

* dailyQuota no longer has a default. Qiniu never returned a daily limit,
  so a built-in 1e8 handed every user a made-up "100% remaining" window -
  and at 100% magpie suspends the account, which would hit paying users
  and anyone on a paid model. Without dailyQuota the window now reports
  used tokens only, with no limit and no used percentage.
  When dailyQuota *is* set, only the free models are counted, because the
  activity's allowance covers those alone (and ends 2026-11-30).

* The AK/SK env-var fallback is gone. One QINIU_ACCESS_KEY would be applied
  to every account that left the prompts blank, so the usage shown could be
  someone else's; a GUI-launched magpie cannot see shell variables anyway.
  Credentials now travel with the account only.

* scripts/patch-keys-url.mjs removed, and the README with it. A plugin must
  not rewrite magpie's providers.json; the key URL is declared in the
  provider metadata and the host decides how to render it.

* instruct models are no longer flagged as reasoning models. Names like
  qwen3-coder-480b-a35b-instruct matched /qwen3/ and were marked as thinking
  models; an explicit instruct exclusion now wins over the family patterns.

* Model keys are order-independent. The old "fall back to the full id on
  collision" rule depended on list order, so the same model list could yield
  different keys. Keys are now planned over the whole sorted id set.

* Provider name is 七牛云 rather than the activity's name; the activity is
  described in the summary instead.

59 node:test cases (was 49), all offline. Each fix has a regression test that
fails when the fix is reverted.
The entry was named after Conatus Free, but that is an activity ending
2026-11-30 - the provider is 七牛云 and outlives it. The free models are
described in the summary instead.
Primes the PR's diff base so the qoder QwenWork change that landed
upstream after the previous merge is no longer attributed to this PR.
Only packages/qiniu/ and the qiniu entry in registry.json come from the
branch; every other file is taken from upstream byte-for-byte.
@lakegan

lakegan commented Oct 25, 2026

Copy link
Copy Markdown
Author

Thanks — all six points were right, and the quota one was a real bug, not just an inconsistency.

Fixed in d78633b (standalone) / cbf9f7c (this branch), plus 982e532 for the registry entry.

The invented daily quota (必须改)

Agreed, and I'm sorry for shipping it. dailyQuota now has no default:

  • Without dailyQuota the window reports used tokens only — no limit, no used percentage.
  • limit + used appear only when the user sets dailyQuota themselves.
  • When set, it counts only the free models (-free ids), since the activity's allowance covers those alone. The 100%-suspends-the-account risk you described is exactly why nothing is inferred.
不填:  { name: "今日已用", amount: 2077790, display: "已用 2.08M(配 dailyQuota 可算剩余)" }
填了:  { name: "今日额度", amount: 2077790, used: 2.08, limit: 100000000,
        display: "剩余 97.92M / 共 100M(已用 2.08M)" }

scripts/patch-keys-url.mjs (必须改)

Deleted, along with the README section. You're right that a plugin has no business rewriting magpie's providers.json. keysUrl stays in the config provider metadata only; the host can render it or not.

Reasoning vs instruct (必须改)

INSTRUCT_RE now wins over the family patterns:

const hasReasoning = (id) => {
  if (INSTRUCT_RE.test(id)) return false
  return REASONING_IDS.has(id) || REASONING_RE.test(id)
}

The four offenders in the live catalogue are fixed: qwen3-coder-480b-a35b-instruct, qwen3-235b-a22b-instruct-2507, qwen3-30b-a3b-instruct-2507, qwen3-next-80b-a3b-instruct. There's a second test asserting the exclusion doesn't overshoot — qwen/qwen3.8-max, deepseek-v4-pro, glm-5.3 etc. are still reasoning.

Env-var fallback (应该改)

Removed. readCredentials is now metadata → options, nothing else. Your reasoning is the stronger argument and I've written it into the code comment: one QINIU_ACCESS_KEY would be applied to every account whose prompts were left blank, and a GUI-launched magpie can't see shell variables anyway. The README export block is gone. A test now sets those env vars and asserts zero requests are made.

Provider name (应该改)

七牛云 throughout — provider name, default plan, PR title and registry entry. The activity is described in the summary and README instead. Registry entry is now:

{ "package": "@magpie-community/opencode-qiniu-auth", "name": "七牛云", "providers": ["qiniu"], "community": true,
  "summary": { "en": "…Models covered by the 1024 Programmer's Day activity (free until 2026-11-30) are marked free…" } }

Key order-dependence (小问题)

Fixed by planning keys over the whole sorted id set instead of accumulating as we go:

export function planKeys(ids) {
  const list = [...new Set(ids.map(String))].sort()
  // 短名出现一次才采用,否则该 id 保留完整 id
}

Same list, any order, same keys. Test asserts forward/reverse/shuffled all produce identical key sets. I kept the short-name convention rather than switching to full ids (it's what users type), and documented the residual: if Qiniu later adds a colliding name, that one short key reverts to the full id — unavoidable for any de-prefixing scheme, and qiniu/deepseek/deepseek-v4-pro always works as an escape hatch.

Also

Merged upstream again so the diff base primes past the qoder/QwenWork change — registry.json is back to +3 -1 and nothing outside packages/qiniu/ is attributed to this PR.

Tests: 49 → 59. Each fix has a regression test that fails when the fix is reverted — I checked by reverting them:

  • restore || 100_000_000 → 2 tests fail
  • drop the instruct guard → 1 test fails

Still no runtime dependencies, still all offline.

Happy to split this into a smaller commit series, or to drop the model-key change entirely if you'd rather see full ids — say the word.

@yetone

yetone commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Thanks for this! I reviewed it at 2b760b8, merged onto current main. Qiniu is a cloud serving models, its own Conatus among them, so it belongs here as a provider.

What I ran, in a sandbox HOME with the proxy pointed at a dead port:

  • bun test packages/qiniu: 59 pass. node --test: 59 pass.
  • The whole repo: 2725 pass, 0 fail. scripts/check.mjs: ✓ qiniu.
  • I broke five rules by hand, and each one turned its test red:
    • the unit_size_default multiplier;
    • the 401 → X-Magpie-Sign-In: expired path;
    • the sk- SecretKey guard;
    • the instruct exclusion;
    • "no used without dailyQuota".
  • A real magpie: plugin add and plugin login worked. A chat through the gateway with a fake key reached api.qnaigc.com, which answered 401 auth_api_key_invalid. magpie then showed the account as "Signed out", as intended.

Three things to fix before it can merge:

  1. None of the free models is shown to agents. magpie gives agents the first 24 models of a vendor's list ("agents see up to 24 of its models"). The snapshot and the live list are both sorted by id. So the exposed 24 are ByteDance Doubao Seed … DeepSeek … doubao-1.5-vision-pro, and qiniu/conatus-free, kimi-k3-free, glm-4.5-air-free and nemotron-…-free are left out. Those are the models the plugin and its registry entry are about. Please put the free models (and the flagships you want shown) first, in both lib/catalog.mjs and the order provider.models returns.

  2. Every account without AK/SK shows an error. The AK/SK prompts are optional, but auth.usage returns error: "未填 AccessKey/SecretKey…" when they are left empty. The account row then reads "Allowance unavailable: 未填 AccessKey/SecretKey: …重新登录并填写这两项即可" for everyone who skipped them, as if something were broken. When no AK/SK is set, please return { windows: [] } with no error. The README can explain how to add them.

  3. Models Qiniu drops stay listed forever. provider.models returns { ...known, ...buildModels(rows, known) }. known is the declared snapshot, so any id that is no longer in the live /v1/models is still offered, and requests to it will fail. When the live list reads, list the live ids only, and use known just to keep per-model overrides for ids that are still there. Please add a test with a live list that lacks a snapshot id.

Not tried: a request with a real key, and the AK/SK usage read. I have no Qiniu account. A one-line note of a real run of each in the PR, once these are fixed, would help.

…op offline models

The three blockers from review, plus the activity tier that replaces the
hand-typed 100000000.

* None of the free models was shown to agents. magpie hands agents the
  first 24 models of a vendor's list, and both the snapshot and
  provider.models were sorted by id — so bytedance/… and deepseek/…
  filled all 24 slots and qiniu/conatus-free, kimi-k3-free,
  glm-4.5-air-free and nemotron-…-free fell outside. Those are the models
  this plugin and its registry entry are about. Ordering is now explicit:
  free models first (qiniu/conatus-free pinned at magpie-community#1), then the
  flagships, then the rest by id — in lib/catalog.mjs (regenerated, so the
  file itself carries the order) and in what provider.models returns.
  selectModels sorts on the way out, so no caller can skip it.

* Every account without AK/SK showed an error. The prompts are optional,
  but auth.usage returned error: "未填 AccessKey/SecretKey…", so the
  account row read "Allowance unavailable: …" for everyone who skipped
  them, as if something were broken. It now returns { windows: [] } with
  no error field; the README explains how to add the pair.

* Models Qiniu drops stayed listed forever. provider.models spread
  `known` as the base of the result, so any snapshot id was offered even
  after it left /v1/models, and requests to it would fail. The live list
  is now the source of truth and `known` only supplies per-model
  overrides for ids that are still there. Falling back to the snapshot
  when the live read fails is kept on purpose and marked as such. New
  test: a live list that lacks a snapshot id.

* activityTier replaces the hand-typed quota. Qiniu returns no plan,
  verification state or recharge history through /inapi/v3/stat/new, so
  the plugin cannot tell which tier an account is on — the user declares
  it: verified (1e8/day) or verified-plus (1e9/day, verified plus 100 CNY
  recharged). dailyQuota still wins when set, for quotas outside the
  activity. A wrong tier name raises instead of silently reading as "no
  quota". The activity ends 2026-11-30; after that the tiers stop
  yielding a limit rather than fabricating one.

Registry entry: model count 89 → 91, and the summary now mentions
activityTier and that free models are listed first.

78 node:test cases (was 59), all offline. Each fix has a regression test
that was confirmed to fail when the fix is reverted. scripts/check.mjs
passes; 91 built-in models, 4 free, 91 live.

Still not tried, and I have no Qiniu account: a request with a real key,
and an AK/SK usage read.
@lakegan

lakegan commented Oct 26, 2026

Copy link
Copy Markdown
Author

All three fixed in aec0b90.

Free models now visible to agents. Ordering is explicit everywhere — lib/catalog.mjs (regenerated, so the file carries the order) and what provider.models returns. Free models first (qiniu/conatus-free pinned at #1), then flagships, then the rest by id. The first four slots are now conatus-free, kimi-k3-free, nemotron-3-ultra-550b-a55b0-free, glm-4.5-air-free — all inside the 24 an agent sees. selectModels sorts on the way out so no caller can skip it.

No AK/SK is no longer an error. auth.usage returns { windows: [] } with no error field; the README explains how to add the pair.

Dropped models no longer linger. provider.models is driven by the live list; known only supplies per-model overrides for ids that still exist. Falling back to the snapshot when the live read fails is kept on purpose and marked as such. Added a test with a live list that lacks a snapshot id.

Plus activityTier. The usage endpoint returns no plan, verification state or recharge history, so the plugin can't tell which tier an account is on — the user declares it: verified (1e8/day) or verified-plus (1e9/day, verified + 100 CNY recharged). dailyQuota still wins when set. A wrong tier name raises instead of reading as "no quota". After 2026-11-30 the tiers stop yielding a limit rather than fabricating one.

Registry entry updated too: 91 models, and the summary mentions activityTier and that free models are listed first.

78 node:test cases (was 59), all offline. scripts/check.mjs passes — 91 built-in, 4 free, 91 live. Each new test was confirmed to fail when its fix is reverted.

On the two you couldn't try: I do have a Qiniu account and the AK/SK usage read works against the real /stat/new (已用 26.77M). The inference call with a real key is the one thing I have not run end-to-end — I won't claim it here.

@yetone yetone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at aec0b90.

What was run

  • bun test packages/qiniu in a sandbox HOME/TMPDIR: 78 pass, 0 fail.
  • bun scripts/check.mjs qiniu: ok. The branch merges cleanly into main.
  • npm view @magpie-community/opencode-qiniu-auth: E404, so it has never been published.
  • I probed the plugin with a fake fetch:
    • Without activityTier/dailyQuota, the usage window has no used, so it shows as a text row.
    • With activityTier, the window has used, limit and model: "-free", and routing narrows it to the free models. That part is right.
    • A 401 auth_api_key_invalid sets x-magpie-sign-in: expired.
    • An account's own AK/SK take precedence over the plugin options. That part is right too.

The logic works. Before merging, these need changing:

  1. Every user-facing string is Chinese only. This covers:

    • the sign-in method label (七牛云 API Key);
    • the prompt messages and placeholders;
    • the usage window names (今日已用, 今日额度) and the display text;
    • every error message.

    magpie runs in English too, so each string needs an English form. Either use English, or put both languages in the string as other packages do. The registry name 七牛云 can stay; it was asked for earlier.

  2. Version. package.json is at 0.5.0, but the package has never been on npm. Please start at 0.1.0, as we asked River to do.

  3. The README is out of date and Chinese only.

    • It cites "39 个用例" and "49 个用例", but the suite has 78 tests now. Drop the counts.
    • It says plan/usageModel defaults to -free only when dailyQuota is set, but activityTier sets it too.
    • "Magpie 私有增至" should read 增值.
    • Please add an English section, at least for install, the options and what the usage row shows.
  4. AK/SK scope. The README says these keys have "权限极高": they are the whole Qiniu account's root credentials. If Qiniu lets you create a sub-account or IAM key limited to reading usage/stats, recommend that in the prompt and the README. If it doesn't, say plainly in the prompt that the key can manage the whole account and is optional (it is only used for the usage row).

Happy to merge once 1–3 are done.

@Gyl1219

Gyl1219 commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Hi @lakegan —— 这个 PR 你还继续推吗?

距上次活动大概 3 天了(你最后的提交 aec0b904 是 10-26,yetone 的 review 是 10-27),现在分支和 main 有冲突(mergeable_state: dirty)。

我想把七牛云 MaaS 加成我自己插件里的一条渠道(magpie-providers-hub,registry 条目已在 #502 合并),但不想让 registry 里出现第二个七牛云入口 —— 那正是 #502 里我那五条重叠渠道被砍掉的理由。

所以动手前先问一句:

  • 如果你还要继续:我就完全不动,等你合并后直接装 @magpie-community/opencode-qiniu-auth。yetone 10-27 那 4 条看着不大(双语字符串、版本改 0.1.0、README 准确性、AK/SK 权限说明),其中 i18n 那遍是纯机械活,需要的话我可以帮忙。
  • 如果你不打算做了:我想把它以 hub-qiniu 的形式并进我的插件,按 MIT 复用你的实现并署名给你。你点头我就照做,署名和 LICENSE 都会保留。

不管哪种我都想先问清楚再动手,免得白写一遍或者撞车。

@yetone —— 同步一下这件事,避免两个七牛云入口不小心都进 registry。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants