| ... | @@ -125,6 +125,31 @@ describe("parseModelsCliOutput", () => { | ... | @@ -125,6 +125,31 @@ describe("parseModelsCliOutput", () => { |
| 125 | NodeAssert.ok(model.variants); | 125 | NodeAssert.ok(model.variants); |
| 126 | NodeAssert.equal(model.variants!["medium"] !== undefined, true); | 126 | NodeAssert.equal(model.variants!["medium"] !== undefined, true); |
| 127 | }); | 127 | }); |
| | 128 | |
| | 129 | it("keeps a model whose JSON body has a slash and no interior whitespace", () => { |
| | 130 | // OpenRouter-style: the model id contains a `/` and no string value has a |
| | 131 | // space, so the JSON body line itself matches the slug regex. It must still |
| | 132 | // be treated as the body of the preceding slug, not a new slug. |
| | 133 | const stdout = [ |
| | 134 | "openrouter/qwen/qwen3-coder", |
| | 135 | JSON.stringify({ |
| | 136 | id: "qwen/qwen3-coder", |
| | 137 | providerID: "openrouter", |
| | 138 | name: "qwen3-coder", |
| | 139 | status: "active", |
| | 140 | }), |
| | 141 | ].join("\n"); |
| | 142 | |
| | 143 | const result = parseModelsCliOutput(stdout); |
| | 144 | NodeAssert.equal(result.providers.size, 1); |
| | 145 | NodeAssert.deepEqual([...result.connected], ["openrouter"]); |
| | 146 | const provider = result.providers.get("openrouter")!; |
| | 147 | NodeAssert.ok(provider); |
| | 148 | const model = provider.models["qwen/qwen3-coder"]!; |
| | 149 | NodeAssert.ok(model); |
| | 150 | NodeAssert.equal(model.id, "qwen/qwen3-coder"); |
| | 151 | NodeAssert.equal(model.providerID, "openrouter"); |
| | 152 | }); |
| 128 | }); | 153 | }); |
| 129 | | 154 | |
| 130 | describe("parseAgentListCliOutput", () => { | 155 | describe("parseAgentListCliOutput", () => { |