factory: requests say droid 0.233.0, the current release, and moved users get plugin 0.1.16, which does the same (Discord, JL on magpie 0.1.824 with plugin 0.1.15: every model a 403 "Factory: Forbidden" from pi and Claude Code, while droid itself works) — droid 0.233.0's model requests have the headers, paths and body shape of 0.231.0's but for the version (X-Client-Version, User-Agent factory-cli/<ver>), and its binary reads a server-side min_cli_version; magpie and the plugin said 0.231.0, two releases behind. That Factory refuses an old version with a 403 is not confirmed (no Factory account to try with); it is the one difference found. The mover's min is 0.1.16 (published on npm), so keepMovedCurrent updates moved users. go vet, builds (darwin, GOOS=linux, GOOS=windows) and go test -tags nogui -count=1 ./... under a temp HOME pass.

This commit is contained in:
yetone committed 2026-10-04 18:32:42 +08:00
1 parent e950eb080a
commit 040ae5675a
3 files changed
+3 -3

No files matched your search

+1 -1
View File
@@ -66,7 +66,7 @@ const (
// factoryClientID is droid's WorkOS client, production.
factoryClientID = "client_01HNM792M5G5G1A2THWPXKFMXB"
// factoryVersion is the droid release magpie's requests say they are.
factoryVersion = "0.231.0"
factoryVersion = "0.233.0"
// factoryRefreshLead is how long before an access token lapses it is
// renewed; droid renews a minute ahead, magpie a little more.
factoryRefreshLead = 2 * time.Minute
+1 -1
View File
@@ -185,7 +185,7 @@ func TestFactoryGLMFlashImages(t *testing.T) {
if m, ok := factoryModelOf("glm-5.3-flash"); !ok || !m.images {
t.Errorf("glm-5.3-flash: %+v", m)
}
if factoryVersion != "0.231.0" {
if factoryVersion != "0.233.0" {
t.Errorf("factoryVersion %s", factoryVersion)
}
if m, ok := factoryModelOf("gemini-3.1-pro-preview"); !ok || m.api != Gemini || m.upstream != "google" || factoryCore("gemini-3.1-pro-preview") {
+1 -1
View File
@@ -13,7 +13,7 @@ import (
func init() {
movers["factory"] = &mover{
pkg: "@magpie-community/opencode-factory-auth",
min: "0.1.14", // Claude Code 2.1.288's runtime context as a system message of text blocks (#658); a tool whose input_schema has anyOf/oneOf/allOf at its root (Codex's automation_update) wrapped for Claude models (#646); a failure's status and its sign-in mark as the built-in's; Claude 5's system-role metadata as Factory takes it; Claude Code's standalone model-switch system updates; tool results quoting Claude Code's fixed phrases, and Claude Code's directory updates carrying a model; the sign-in renewed ahead of time through auth.refresh; Claude Code with a global CLAUDE.md or a SessionStart hook, and Claude Desktop's model line (#634)
min: "0.1.16", // requests saying droid 0.233.0 (JL: every model 403); Claude Code 2.1.288's runtime context as a system message of text blocks (#658); a tool whose input_schema has anyOf/oneOf/allOf at its root (Codex's automation_update) wrapped for Claude models (#646); a failure's status and its sign-in mark as the built-in's; Claude 5's system-role metadata as Factory takes it; Claude Code's standalone model-switch system updates; tool results quoting Claude Code's fixed phrases, and Claude Code's directory updates carrying a model; the sign-in renewed ahead of time through auth.refresh; Claude Code with a global CLAUDE.md or a SessionStart hook, and Claude Desktop's model line (#634)
agents: []string{"factory"},
out: func() ([]Moving, error) {
ls := factoryLogins()