pi-workbuddy 0.2.1 → 0.2.2
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 +3 -3
- package/package.json +1 -1
- package/src/client-identity.js +1 -1
- package/src/native-capabilities.js +1 -3
- package/src/native-errors.js +2 -2
- package/src/native-models.js +3 -1
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ Before discovery, the provider includes conservative fallback metadata for `defa
|
|
|
56
56
|
|
|
57
57
|
There is no hardcoded allowlist of WorkBuddy model IDs. The provider fetches `/v3/config` with the signed-in account and projects compatible model entries into Pi. In Pi 1.3.0, opening `/model` refreshes provider catalogs in the background and updates the picker when discovery finishes. Pi also refreshes catalogs after login; `/workbuddy refresh` is the explicit manual override.
|
|
58
58
|
|
|
59
|
-
A newly advertised model can therefore appear without changing the extension or adding its ID manually. The model must pass the existing compatibility and security filters: disabled models, models explicitly lacking tool support, and custom endpoints/protocols/API keys are excluded. Catalog visibility does not guarantee that your account can run every listed model.
|
|
59
|
+
A newly advertised model can therefore appear without changing the extension or adding its ID manually. The model must pass the existing compatibility and security filters: disabled models, models explicitly lacking tool support, and custom endpoints/protocols/API keys are excluded. Starting with 0.2.2, DeepSeek variants ending in `-sg` are intentionally excluded, including after catalog refresh; the regular DeepSeek models remain available. Catalog visibility does not guarantee that your account can run every listed model.
|
|
60
60
|
|
|
61
61
|
This is refresh-based discovery, not a realtime push subscription or continuous idle polling. Reopen `/model` to check for additions during a long session. Offline mode does not fetch new catalogs. Extension updates may still be necessary if WorkBuddy changes its API, authentication, metadata schema, or wire protocol.
|
|
62
62
|
|
|
@@ -86,14 +86,14 @@ To select the provider, run `/model` and search for `workbuddy`; selecting a mod
|
|
|
86
86
|
- **Chat:** `POST https://www.workbuddy.ai/v2/chat/completions`.
|
|
87
87
|
- **Transport:** gzip requests, SSE framing and UTF-8 normalization, repeated or missing tool-call ID handling, usage tails, and cancellation.
|
|
88
88
|
- **Message conversion and streaming:** delegated to Pi's built-in OpenAI Chat Completions implementation. Payload, response, and provider-event hooks are forwarded.
|
|
89
|
-
- **Metadata:** live catalog metadata is supplemented with reviewed official vendor specifications for
|
|
89
|
+
- **Metadata:** live catalog metadata is supplemented with reviewed official vendor specifications for 23 named models. Context/output use the largest documented or advertised values, not smaller catalog defaults. Image support and reasoning efforts are additive. Routing aliases and newly discovered IDs remain catalog-driven; the reference table is not an allowlist. Disabled models, models without tool support, and custom model URLs, protocols, or API keys are excluded.
|
|
90
90
|
- **Pricing:** model prices are set to zero because USD token rates are unknown—**this does not mean usage is free**. WorkBuddy's `usage.credit` field is not included in Pi's cost accounting; token usage is still processed.
|
|
91
91
|
|
|
92
92
|
### Context and output budgets
|
|
93
93
|
|
|
94
94
|
The default policy is **documented maximum capabilities**, not a conservative gateway-default policy. Context uses the largest positive safe integer among the catalog's input limit, configured context default, supported context lengths, and reviewed vendor context reference. Output similarly uses the larger catalog/vendor maximum, bounded by the shared context budget. Smaller catalog defaults do not reduce these maxima, and a larger live value is never reduced by an older vendor reference.
|
|
95
95
|
|
|
96
|
-
For example, DeepSeek V4.1 Flash now advertises **1,048,576 context tokens**, **393,216 maximum output tokens**, image input, and **low/high/max** thinking. It no longer stays at the catalog's 300K default.
|
|
96
|
+
For example, DeepSeek V4.1 Flash now advertises **1,048,576 context tokens**, **393,216 maximum output tokens**, image input, and **low/high/max** thinking. It no longer stays at the catalog's 300K default. Named preview variants use their base-model references optimistically; identical gateway deployments are not guaranteed. DeepSeek `-sg` variants are not offered. Four routing aliases retain their own live metadata instead of inheriting an invented vendor identity.
|
|
97
97
|
|
|
98
98
|
Image support is enabled when either WorkBuddy or the reviewed vendor reference advertises it, even if gateway metadata disables multimodal input. Supported reasoning efforts combine both sources. Known mandatory-thinking models cannot turn thinking off; Kimi K2.6 uses a thinking toggle rather than an unsupported vendor `reasoning_effort` parameter. Pi exposes text/image input, not every vendor-native audio, video, or hosted-tool feature.
|
|
99
99
|
|
package/package.json
CHANGED
package/src/client-identity.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Compatibility baseline: the operator-supplied WorkBuddy AI 5.8.4 artifact.
|
|
2
2
|
// This is a protocol/version marker, not an assertion that Pi is the official desktop app.
|
|
3
|
-
export const EXTENSION_VERSION = "0.2.
|
|
3
|
+
export const EXTENSION_VERSION = "0.2.2";
|
|
4
4
|
export const WORKBUDDY_PROTOCOL_VERSION = "5.8.4";
|
|
5
5
|
export const USER_AGENT = "CLI/unknown WorkBuddy/" + WORKBUDDY_PROTOCOL_VERSION +
|
|
6
6
|
" pi-workbuddy/" + EXTENSION_VERSION;
|
|
@@ -12,9 +12,7 @@ const deepseek = {
|
|
|
12
12
|
efforts: ["low", "high", "max"],
|
|
13
13
|
source: "https://api-docs.deepseek.com/quick_start/pricing",
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
// This is an optimistic name mapping, not proof of identical gateway deployments.
|
|
17
|
-
add(["deepseek-v4.1-flash", "deepseek-v4.1-flash-sg"], deepseek);
|
|
15
|
+
add(["deepseek-v4.1-flash"], deepseek);
|
|
18
16
|
for (const id of ["gemini-3.5-flash", "gemini-3.8-flash"]) add([id], {
|
|
19
17
|
contextWindow: 1048576, maxOutputTokens: 65536, images: true, reasoning: true,
|
|
20
18
|
onlyReasoning: true,
|
package/src/native-errors.js
CHANGED
|
@@ -31,11 +31,11 @@ export function describeFailure(error) {
|
|
|
31
31
|
for (let current = error, depth = 0; current && depth < 6 && !seen.has(current); current = current.cause, depth++) {
|
|
32
32
|
seen.add(current);
|
|
33
33
|
if (!(current instanceof WorkbuddyError) || !Object.hasOwn(REASONS, current.diagnosticCode)) continue;
|
|
34
|
-
const { status, businessCode, total, accepted, endpoint, disabled, toolLess, unavailable, invalid, duplicate } = current.details;
|
|
34
|
+
const { status, businessCode, total, accepted, endpoint, disabled, toolLess, unavailable, invalid, duplicate, excluded } = current.details;
|
|
35
35
|
const fields = [];
|
|
36
36
|
if (Number.isInteger(status) && status >= 100 && status <= 599) fields.push("HTTP " + status);
|
|
37
37
|
if (Number.isSafeInteger(businessCode)) fields.push("business code " + businessCode);
|
|
38
|
-
for (const [name, value] of Object.entries({ total, accepted, endpoint, disabled, toolLess, unavailable, invalid, duplicate })) {
|
|
38
|
+
for (const [name, value] of Object.entries({ total, accepted, endpoint, disabled, toolLess, unavailable, invalid, duplicate, excluded })) {
|
|
39
39
|
if (Number.isSafeInteger(value) && value >= 0) fields.push(name + "=" + value);
|
|
40
40
|
}
|
|
41
41
|
const hint = current.diagnosticCode === "http" && businessCode === 12403 ?
|
package/src/native-models.js
CHANGED
|
@@ -14,10 +14,12 @@ export function projectModels(config) {
|
|
|
14
14
|
const seen = new Set();
|
|
15
15
|
const models = [];
|
|
16
16
|
const counts = { total: config.models.length, accepted: 0, invalid: 0, duplicate: 0,
|
|
17
|
-
disabled: 0, toolLess: 0, endpoint: 0, unavailable: 0 };
|
|
17
|
+
disabled: 0, toolLess: 0, endpoint: 0, unavailable: 0, excluded: 0 };
|
|
18
18
|
for (const item of config.models) {
|
|
19
19
|
// Report only counts, never model URLs, API keys, remote instructions, or full catalog bodies.
|
|
20
20
|
if (!validId(item?.id)) { counts.invalid++; continue; }
|
|
21
|
+
const normalizedId = item.id.toLowerCase();
|
|
22
|
+
if (normalizedId.startsWith("deepseek-") && normalizedId.endsWith("-sg")) { counts.excluded++; continue; }
|
|
21
23
|
if (seen.has(item.id)) { counts.duplicate++; continue; }
|
|
22
24
|
if (item.disabled === true) { counts.disabled++; continue; }
|
|
23
25
|
if (item.supportsToolCall === false) { counts.toolLess++; continue; }
|