@xopcai/xopc 0.0.165 → 0.0.167
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DkALQFJT.js → activity-store-DjEDu38T.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CKVX2TyD.js → agent-avatar-dicebear-DQULz7qY.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CnzkBgKC.js +2 -0
- package/dist/gateway/static/root/assets/{api-DPIXEcIq.js → api-DwVCuPOb.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-ClToHdDF.js → app-management-settings-panel-DOjWALVF.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Ci2jWAkQ.js → appearance-settings-C31COUIC.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DCow0nte.js → apps-page-lSC486eu.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-CKv5A1_M.js → archive-plugin-DQPvLqfx.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-LgoN-Vwo.js → attachment-load-DwT1x1rc.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-BwnZqDQE.js → automation-suggestion-card-ByYBiiMR.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DWWHMqCZ.js → automations-page-iZTnc1YZ.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-WwMRnBdP.js → binary-plugins-CRXiHoZS.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CThEfJSn.js → block-editor-CHO6ILiz.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-settings-page-7x8rKLOl.js → browser-settings-page-C-OOPZcJ.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-DCj9DG0A.js → browser-workflow-inputs-3UaarfXS.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-C1k2vHLV.js → browser-workflows-page-BFaa-N_D.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BayH0Uom.js +7 -0
- package/dist/gateway/static/root/assets/capability-presets-api-DdCHSzcA.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-JlhjAhT7.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-B5rLegwk.js → channel-recipient-api-BOkLI89e.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-DU93p9RZ.js → channels-settings-C-Spmwr5.js} +1 -1
- package/dist/gateway/static/root/assets/channels-status-swr-ZrqadU60.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-au5xzRMl.js → connector-logo-CbcC0T6i.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-B9sD56hT.js → connectors-page-DpDmJ3Nx.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CaTO9bAV.js → desktop-pet-CR7RGQff.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CORq2BIE.js → desktop-pet-settings-BudmCcPE.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Daf0tqrN.js → directory-picker-path-field-BLG2Oe6z.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-CJqJpvgc.js → dreaming-settings-BwBGC0SG.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-0XmiUqsm.js → extension-debug-page-Pr65_hLC.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C_9HSvyu.js → extension-page-BuJDcoKn.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DcmUCmOu.js → extension-settings-page-B3802tn5.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-CZqfsxJf.js → gateway-config-api-D-NVkfts.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-CzX8TVmO.js → gateway-settings-DIdsKVXv.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-ulwTJovP.js → gateway-startup-retry-qnEmj-vL.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-Dbj_sgV-.js → goal-create-dialog-51j_DxgV.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-BdkiZwW-.js → goal-detail-page-CeqMr5GF.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-config-api-Cvlq3jyf.js → goals-config-api-BkVBh7ct.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-BD9ztXNA.js → goals-page-lf3oM4Xa.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-settings-CSGvHJDi.js → goals-settings-Cg7MJLvx.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-BvXA7oNN.js → heartbeat-settings-BV3kJOcX.js} +1 -1
- package/dist/gateway/static/root/assets/{index-CfOzvGDb.js → index-B24B26og.js} +9 -9
- package/dist/gateway/static/root/assets/index-DfE2j0g8.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-B9K5rTZZ.js +1 -0
- package/dist/gateway/static/root/assets/{local-app-workbench-page-DH4nglP_.js → local-app-workbench-page-ehzr9CBG.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-BScdXqMo.js → local-apps-page-BBx6mfAD.js} +1 -1
- package/dist/gateway/static/root/assets/locale-store-tnRLWdx2.js +1 -0
- package/dist/gateway/static/root/assets/{logs-page-BBpAWjyF.js → logs-page-xuwEkusZ.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-8hnAS25m.js → markdown-split-DRDddIt8.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DzlHseMD.js → media-plugins-Dn3hxhOV.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-C96Zjb0V.js → messages-B1EG4gdu.js} +2 -4
- package/dist/gateway/static/root/assets/{notes-page-DbDHFPiI.js → notes-page-BtKHSb4z.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-workbench-B-A9whbg.js → notes-workbench-DXGXn5XF.js} +2 -2
- package/dist/gateway/static/root/assets/{page-tabs-CXJiygUJ.js → page-tabs-P2BEd1D8.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Cq6aue5a.js → preview-open-alternatives-DrkjmW0F.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-nP8vuNlJ.js → product-open-page-CGzMEowb.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-BXrscUbq.js → project-detail-page-IiE2ddWb.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-m0EKUeaY.js → projects-page-DGOVhaYI.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-B16uQSY5.js → remote-access-hub-l_y_Shgl.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-BPgnLY1p.js → save-bar-controls-BkGrufxl.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-rHWpueWl.js → schedule-field-A8tDpL-9.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CHKIUrzk.js → schema-form-N6_hDWgx.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-C5_qtznc.js → sessions-page-CAX4ipPv.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-eVlH9brU.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CR4J0N4X.js → settings-form-section-Bb6yYt5f.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-B8v-lHKT.js → settings-loading-skeleton-Q_Vh6HEl.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BcLf8Rd5.js → settings-page-CjOtQpbR.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-Co31Becn.js → settings-page-layout-CtESNNdx.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-BFLA1Fsj.js → setup-status-panel-CGxHXgJB.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-B5vMe8DY.js → share-preview-page-C65IsFmd.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-DL2tKPq6.js → shares-settings-Ct3fcbHr.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-ElA5kabh.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-DAOZXlp5.js → skills-page-FeieOEn3.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CHt3FXI8.js → system-settings-panel-CdUl2I0D.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-D37XLD_C.js → theme-store-H9T49Iar.js} +1 -1
- package/dist/gateway/static/root/assets/{time-picker-C9Rr1IUV.js → time-picker-EkhqT3fS.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-QMF30Yvh.js → typed-models-lib-5xRRUE9Y.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DBh0dOC9.js → use-channel-catalog-UACJTyH0.js} +1 -1
- package/dist/gateway/static/root/assets/{user-context-page-D6EEhj-e.js → user-context-page-DHiRvd4i.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-Gjjs3qih.js → voice-api-key-field-Bql0SPCp.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-CDnL9daG.js → work-discovery-page-BcmZux7y.js} +1 -1
- package/dist/gateway/static/root/assets/{work-item-detail-page-BCoT4p1E.js → work-item-detail-page-D94Q5zVD.js} +1 -1
- package/dist/gateway/static/root/assets/{work-page-l8h2Y50w.js → work-page-DdFBMDcB.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DnOfronD.js → workflow-run-setup-panel-Dow7ZztR.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-IVbQ83CW.js → workflows-page-wOVSoduy.js} +1 -1
- package/dist/gateway/static/root/index.html +8 -8
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +3 -3
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/goals/post-turn.js +1 -1
- package/dist/src/agent/image/generation/custom-openai-images-provider.d.ts +7 -0
- package/dist/src/agent/image/generation/custom-openai-images-provider.js +81 -0
- package/dist/src/agent/image/generation/{openai-compatible-image-provider.d.ts → openai-images-provider.d.ts} +10 -31
- package/dist/src/agent/image/generation/{openai-compatible-image-provider.js → openai-images-provider.js} +36 -23
- package/dist/src/agent/image/generation/provider-registry.d.ts +2 -0
- package/dist/src/agent/image/generation/provider-registry.js +50 -4
- package/dist/src/agent/image/generation/providers/openai.js +2 -2
- package/dist/src/agent/image/generation/runtime.js +5 -1
- package/dist/src/agent/image/generation/types.d.ts +11 -0
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/ipc/inbox.js +1 -1
- package/dist/src/agent/memory/dreaming/config.js +1 -1
- package/dist/src/agent/service.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/connectors.js +2 -2
- package/dist/src/cli/commands/doctor/checks/image-providers.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/image-providers.js +68 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/flow.js +2 -0
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +2 -2
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +5 -5
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.d.ts +325 -0
- package/dist/src/config/models-json.js +140 -5
- package/dist/src/connectors/connector-memory-sync.js +1 -1
- package/dist/src/connectors/health.js +1 -1
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/custom-image-providers.d.ts +89 -0
- package/dist/src/gateway/custom-image-providers.js +59 -0
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +183 -2
- package/dist/src/gateway/hono/routes/update.js +2 -2
- package/dist/src/gateway/image-generation-setup.js +7 -1
- package/dist/src/gateway/index.js +1 -1
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/service/config-coordinator.js +3 -1
- package/dist/src/gateway/service.js +6 -6
- package/dist/src/goals/goal-workflow-judge.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/gateway-processes.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +2 -2
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/media-shared/http/index.d.ts +1 -1
- package/dist/src/media-shared/http/index.js +2 -2
- package/dist/src/media-shared/http/provider-http.d.ts +2 -0
- package/dist/src/media-shared/http/provider-http.js +43 -4
- package/dist/src/notes/service.js +1 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +7 -4
- package/dist/src/providers/model-ref.d.ts +6 -0
- package/dist/src/providers/model-ref.js +15 -0
- package/dist/src/providers/model-reference-auditor.d.ts +1 -0
- package/dist/src/providers/model-reference-auditor.js +23 -13
- package/dist/src/providers/model-registry.js +6 -3
- package/dist/src/tui/tui-startup-resources.js +2 -2
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/agents-F8749KZ_.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DIwGIpuS.js +0 -2
- package/dist/gateway/static/root/assets/capability-presets-api-C_NVbV7o.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DBdvIcV0.js +0 -2
- package/dist/gateway/static/root/assets/channels-status-swr-DZZq0upi.js +0 -1
- package/dist/gateway/static/root/assets/index-BXtJvaQl.css +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-xb6mna1C.js +0 -1
- package/dist/gateway/static/root/assets/locale-store-C_ax27uc.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DQlbm1mA.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-C8jkuLob.js +0 -1
|
@@ -4,5 +4,5 @@ import { BlockedPrivateNetworkError, assertNotPrivateNetwork, classifyHost, defa
|
|
|
4
4
|
import { resolveProviderHttpRequestConfig } from "./resolve-provider-http-request-config.js";
|
|
5
5
|
import { ProviderHttpError, assertOk, assertOkOrThrowHttpError, assertOkOrThrowProviderError, createProviderHttpError, extractProviderErrorDetail, extractProviderRequestId, extractVendorErrorFields, formatProviderErrorPayload, formatProviderHttpErrorMessage, readResponseTextLimited, truncateErrorDetail } from "./provider-http-errors.js";
|
|
6
6
|
import { SsrfBlockedError, assertSafeUrl, isPrivateIpAddress, isPrivateIpv4, isPrivateIpv6 } from "./ssrf-guard.js";
|
|
7
|
-
import { createProviderOperationDeadline, fetchWithTimeoutGuarded, getJsonRequest, normalizeBaseUrl, postJsonRequest, postMultipartRequest, waitProviderOperationPollInterval } from "./provider-http.js";
|
|
8
|
-
export { BlockedPrivateNetworkError, ProviderHttpError, SsrfBlockedError, TimeoutAbortError, assertNotPrivateNetwork, assertOk, assertOkOrThrowHttpError, assertOkOrThrowProviderError, assertSafeUrl, classifyHost, collectProviderApiKeysForExecution, createProviderHttpError, createProviderOperationDeadline, defaultPolicy as defaultPrivateNetworkPolicy, executeWithApiKeyRotation, extractProviderErrorDetail, extractProviderRequestId, extractVendorErrorFields, fetchWithTimeoutGuarded, formatProviderErrorPayload, formatProviderHttpErrorMessage, getJsonRequest, isPrivateIpAddress, isPrivateIpv4, isPrivateIpv6, isRotatableAuthFailure, isTimeoutAbortError, normalizeBaseUrl, pickEffectiveTimeoutMs, pickTimeoutMsOrFallback, postJsonRequest, postMultipartRequest, privateNetworkPolicyToSsrfGuardOptions, readResponseTextLimited, resolveDeadline, resolveProviderHttpRequestConfig, truncateErrorDetail, waitProviderOperationPollInterval };
|
|
7
|
+
import { createProviderOperationDeadline, fetchWithTimeoutGuarded, getJsonRequest, normalizeBaseUrl, postJsonRequest, postMultipartRequest, readJsonResponseLimited, waitProviderOperationPollInterval } from "./provider-http.js";
|
|
8
|
+
export { BlockedPrivateNetworkError, ProviderHttpError, SsrfBlockedError, TimeoutAbortError, assertNotPrivateNetwork, assertOk, assertOkOrThrowHttpError, assertOkOrThrowProviderError, assertSafeUrl, classifyHost, collectProviderApiKeysForExecution, createProviderHttpError, createProviderOperationDeadline, defaultPolicy as defaultPrivateNetworkPolicy, executeWithApiKeyRotation, extractProviderErrorDetail, extractProviderRequestId, extractVendorErrorFields, fetchWithTimeoutGuarded, formatProviderErrorPayload, formatProviderHttpErrorMessage, getJsonRequest, isPrivateIpAddress, isPrivateIpv4, isPrivateIpv6, isRotatableAuthFailure, isTimeoutAbortError, normalizeBaseUrl, pickEffectiveTimeoutMs, pickTimeoutMsOrFallback, postJsonRequest, postMultipartRequest, privateNetworkPolicyToSsrfGuardOptions, readJsonResponseLimited, readResponseTextLimited, resolveDeadline, resolveProviderHttpRequestConfig, truncateErrorDetail, waitProviderOperationPollInterval };
|
|
@@ -39,6 +39,8 @@ export interface GetJsonRequestOptions extends ProviderHttpRequestConfig {
|
|
|
39
39
|
headers?: Record<string, string> | Headers;
|
|
40
40
|
}
|
|
41
41
|
export declare function getJsonRequest(url: string | URL, options: GetJsonRequestOptions): Promise<Response>;
|
|
42
|
+
/** Read and parse a JSON response without allowing an unbounded body allocation. */
|
|
43
|
+
export declare function readJsonResponseLimited(response: Response, maxBytes: number): Promise<unknown>;
|
|
42
44
|
/**
|
|
43
45
|
* Normalize a base URL: trim trailing slash, force http(s) scheme.
|
|
44
46
|
*/
|
|
@@ -49,7 +49,8 @@ async function postJsonRequest(url, options) {
|
|
|
49
49
|
init: {
|
|
50
50
|
method: "POST",
|
|
51
51
|
headers,
|
|
52
|
-
body: JSON.stringify(options.body)
|
|
52
|
+
body: JSON.stringify(options.body),
|
|
53
|
+
redirect: "error"
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
56
|
await assertOkOrThrowProviderError(response, options.label);
|
|
@@ -62,7 +63,8 @@ async function postMultipartRequest(url, options) {
|
|
|
62
63
|
init: {
|
|
63
64
|
method: "POST",
|
|
64
65
|
headers,
|
|
65
|
-
body: options.body
|
|
66
|
+
body: options.body,
|
|
67
|
+
redirect: "error"
|
|
66
68
|
}
|
|
67
69
|
});
|
|
68
70
|
await assertOkOrThrowProviderError(response, options.label);
|
|
@@ -75,12 +77,49 @@ async function getJsonRequest(url, options) {
|
|
|
75
77
|
...options,
|
|
76
78
|
init: {
|
|
77
79
|
method: "GET",
|
|
78
|
-
headers
|
|
80
|
+
headers,
|
|
81
|
+
redirect: "error"
|
|
79
82
|
}
|
|
80
83
|
});
|
|
81
84
|
await assertOkOrThrowProviderError(response, options.label);
|
|
82
85
|
return response;
|
|
83
86
|
}
|
|
87
|
+
/** Read and parse a JSON response without allowing an unbounded body allocation. */
|
|
88
|
+
async function readJsonResponseLimited(response, maxBytes) {
|
|
89
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0) throw new Error("JSON response byte limit must be a positive safe integer.");
|
|
90
|
+
const declaredLength = Number.parseInt(response.headers.get("content-length") ?? "", 10);
|
|
91
|
+
if (Number.isFinite(declaredLength) && declaredLength > maxBytes) throw new Error(`Provider JSON response exceeds ${maxBytes} bytes.`);
|
|
92
|
+
const reader = response.body?.getReader();
|
|
93
|
+
if (!reader) throw new Error("Provider returned an empty JSON response.");
|
|
94
|
+
const chunks = [];
|
|
95
|
+
let total = 0;
|
|
96
|
+
try {
|
|
97
|
+
while (true) {
|
|
98
|
+
const { value, done } = await reader.read();
|
|
99
|
+
if (done) break;
|
|
100
|
+
if (!value?.byteLength) continue;
|
|
101
|
+
total += value.byteLength;
|
|
102
|
+
if (total > maxBytes) {
|
|
103
|
+
await reader.cancel().catch(() => {});
|
|
104
|
+
throw new Error(`Provider JSON response exceeds ${maxBytes} bytes.`);
|
|
105
|
+
}
|
|
106
|
+
chunks.push(value);
|
|
107
|
+
}
|
|
108
|
+
} finally {
|
|
109
|
+
reader.releaseLock();
|
|
110
|
+
}
|
|
111
|
+
const body = new Uint8Array(total);
|
|
112
|
+
let offset = 0;
|
|
113
|
+
for (const chunk of chunks) {
|
|
114
|
+
body.set(chunk, offset);
|
|
115
|
+
offset += chunk.byteLength;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
return JSON.parse(new TextDecoder().decode(body));
|
|
119
|
+
} catch {
|
|
120
|
+
throw new Error("Provider returned invalid JSON.");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
84
123
|
/**
|
|
85
124
|
* Normalize a base URL: trim trailing slash, force http(s) scheme.
|
|
86
125
|
*/
|
|
@@ -107,4 +146,4 @@ async function waitProviderOperationPollInterval(intervalMs, signal) {
|
|
|
107
146
|
await setTimeout$1(intervalMs, void 0, { signal });
|
|
108
147
|
}
|
|
109
148
|
//#endregion
|
|
110
|
-
export { createProviderOperationDeadline, fetchWithTimeoutGuarded, getJsonRequest, normalizeBaseUrl, postJsonRequest, postMultipartRequest, waitProviderOperationPollInterval };
|
|
149
|
+
export { createProviderOperationDeadline, fetchWithTimeoutGuarded, getJsonRequest, normalizeBaseUrl, postJsonRequest, postMultipartRequest, readJsonResponseLimited, waitProviderOperationPollInterval };
|
|
@@ -4,8 +4,8 @@ import { buildNoteAttachmentRef } from "./attachment-ref.js";
|
|
|
4
4
|
import { parseNoteMarkdown } from "./note-markdown.js";
|
|
5
5
|
import { changedFieldsFromPatch, emitActivity, previewText, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
|
|
6
6
|
import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
7
|
-
import { completeWithResolvedCredentials } from "../providers/model-call.js";
|
|
8
7
|
import { publishAutomationProductEvent } from "../automations/product-events.js";
|
|
8
|
+
import { completeWithResolvedCredentials } from "../providers/model-call.js";
|
|
9
9
|
import { NotesStore } from "./store.js";
|
|
10
10
|
import { partitionAttachmentsByReference } from "./note-attachment-sync.js";
|
|
11
11
|
import { buildNoteAgentContextArtifact, getCachedNoteAgentContextArtifact } from "./agent-context.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
|
|
2
1
|
import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
|
|
2
|
+
import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
|
|
3
3
|
import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
|
|
4
4
|
//#region src/providers/auth-runtime/resolve-auth.ts
|
|
5
5
|
init_env_keys();
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
3
|
+
import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
|
|
4
|
+
import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
|
|
3
5
|
import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
|
|
6
|
+
import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
|
|
4
7
|
import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
|
|
5
|
-
import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
|
|
6
8
|
import { CredentialResolver, hasCredentials, init_credentials, resolveApiKey } from "../auth/credentials.js";
|
|
7
|
-
import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
|
|
8
9
|
import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
|
|
9
10
|
import { getSupplementalModels, init_model_supplements } from "./model-supplements.js";
|
|
10
11
|
import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
|
|
@@ -90,8 +91,9 @@ function resolveModel(ref) {
|
|
|
90
91
|
if (!trimmedRef) throw new Error("No default model configured. Choose a model in onboarding or set agents.capabilityPresets.default.models.roles.<role>.model.");
|
|
91
92
|
const customModel = getModelRegistry().resolve(trimmedRef);
|
|
92
93
|
if (customModel) return customModel;
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
const qualifiedRef = splitProviderModelRef(trimmedRef);
|
|
95
|
+
if (qualifiedRef) {
|
|
96
|
+
const { provider, modelId } = qualifiedRef;
|
|
95
97
|
const piAiModel = getModel(provider, modelId);
|
|
96
98
|
if (piAiModel) return normalizeProviderModel(piAiModel);
|
|
97
99
|
const supplementalModel = getSupplementalModels().find((m) => m.provider === provider && m.id === modelId);
|
|
@@ -316,6 +318,7 @@ var init_providers = __esmMin((() => {
|
|
|
316
318
|
init_env_keys();
|
|
317
319
|
init_constants();
|
|
318
320
|
init_model_supplements();
|
|
321
|
+
init_model_ref();
|
|
319
322
|
init_plugin_registry();
|
|
320
323
|
OPENAI_CODEX_CANONICAL_BASE_URL = "https://chatgpt.com/backend-api/codex";
|
|
321
324
|
PROVIDER_META = {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
//#region src/providers/model-ref.ts
|
|
3
|
+
/** Split a provider-qualified model reference while preserving slashes in the model ID. */
|
|
4
|
+
function splitProviderModelRef(ref) {
|
|
5
|
+
const slashIndex = ref.indexOf("/");
|
|
6
|
+
if (slashIndex <= 0 || slashIndex === ref.length - 1) return void 0;
|
|
7
|
+
return {
|
|
8
|
+
provider: ref.slice(0, slashIndex),
|
|
9
|
+
modelId: ref.slice(slashIndex + 1)
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
var init_model_ref = __esmMin((() => {}));
|
|
13
|
+
//#endregion
|
|
14
|
+
init_model_ref();
|
|
15
|
+
export { init_model_ref, splitProviderModelRef };
|
|
@@ -11,4 +11,5 @@ export interface ModelReferenceHealth {
|
|
|
11
11
|
export declare function auditModelReferences(config: Config, sessionConfigs?: ReadonlyMap<string, SessionAgentConfig>, deps?: {
|
|
12
12
|
registry?: ModelRegistry;
|
|
13
13
|
catalog?: ModelCatalogSnapshot;
|
|
14
|
+
resolveImageGenerationModel?: (ref: string) => boolean;
|
|
14
15
|
}): ModelReferenceHealth[];
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
|
|
2
2
|
import { getModelRegistry, init_model_registry } from "./model-registry.js";
|
|
3
|
+
import { parseImageGenerationModelRef } from "../agent/image/generation/model-ref.js";
|
|
4
|
+
import { getImageGenerationProvider } from "../agent/image/generation/provider-registry.js";
|
|
3
5
|
//#region src/providers/model-reference-auditor.ts
|
|
4
6
|
init_model_catalog_store();
|
|
5
7
|
init_model_registry();
|
|
6
8
|
function asRecord(value) {
|
|
7
9
|
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
8
10
|
}
|
|
9
|
-
function addRef(out, value, location) {
|
|
11
|
+
function addRef(out, value, location, kind = "text") {
|
|
10
12
|
if (typeof value === "string" && value.trim()) out.push({
|
|
11
13
|
ref: value.trim(),
|
|
12
|
-
location
|
|
14
|
+
location,
|
|
15
|
+
kind
|
|
13
16
|
});
|
|
14
17
|
}
|
|
15
|
-
function collectToolModel(out, value, location) {
|
|
18
|
+
function collectToolModel(out, value, location, kind = "text") {
|
|
16
19
|
const model = asRecord(value);
|
|
17
20
|
if (!model) return;
|
|
18
|
-
addRef(out, model.primary, `${location}.primary
|
|
19
|
-
if (Array.isArray(model.fallbacks)) model.fallbacks.forEach((ref, index) => addRef(out, ref, `${location}.fallbacks[${index}]
|
|
21
|
+
addRef(out, model.primary, `${location}.primary`, kind);
|
|
22
|
+
if (Array.isArray(model.fallbacks)) model.fallbacks.forEach((ref, index) => addRef(out, ref, `${location}.fallbacks[${index}]`, kind));
|
|
20
23
|
}
|
|
21
24
|
function collectModelPolicy(out, value, location) {
|
|
22
25
|
const policy = asRecord(value);
|
|
@@ -29,7 +32,7 @@ function collectModelPolicy(out, value, location) {
|
|
|
29
32
|
if (Array.isArray(role.fallbacks)) role.fallbacks.forEach((ref, index) => addRef(out, ref, `${location}.roles.${roleId}.fallbacks[${index}]`));
|
|
30
33
|
}
|
|
31
34
|
collectToolModel(out, policy.imageModel, `${location}.imageModel`);
|
|
32
|
-
collectToolModel(out, policy.imageGenerationModel, `${location}.imageGenerationModel
|
|
35
|
+
collectToolModel(out, policy.imageGenerationModel, `${location}.imageGenerationModel`, "image-generation");
|
|
33
36
|
}
|
|
34
37
|
function collectReferences(config, sessionConfigs) {
|
|
35
38
|
const out = [];
|
|
@@ -47,22 +50,29 @@ function suggestedRef(ref, catalog) {
|
|
|
47
50
|
const first = source.models.find((model) => model.availability === "available");
|
|
48
51
|
return first ? `${providerId}/${first.id}` : void 0;
|
|
49
52
|
}
|
|
53
|
+
function hasImageGenerationModel(ref) {
|
|
54
|
+
const parsed = parseImageGenerationModelRef(ref);
|
|
55
|
+
if (!parsed) return false;
|
|
56
|
+
return getImageGenerationProvider(parsed.provider)?.models.includes(parsed.model) ?? false;
|
|
57
|
+
}
|
|
50
58
|
function auditModelReferences(config, sessionConfigs = /* @__PURE__ */ new Map(), deps = {}) {
|
|
51
59
|
const registry = deps.registry ?? getModelRegistry();
|
|
52
60
|
const catalog = deps.catalog ?? getModelCatalogStore().load();
|
|
61
|
+
const resolveImageGenerationModel = deps.resolveImageGenerationModel ?? hasImageGenerationModel;
|
|
53
62
|
const grouped = /* @__PURE__ */ new Map();
|
|
54
63
|
for (const reference of collectReferences(config, sessionConfigs)) {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
grouped.set(reference.ref,
|
|
64
|
+
const references = grouped.get(reference.ref) ?? [];
|
|
65
|
+
references.push(reference);
|
|
66
|
+
grouped.set(reference.ref, references);
|
|
58
67
|
}
|
|
59
|
-
return [...grouped.entries()].map(([ref,
|
|
60
|
-
const availability = registry.resolve(ref) ? "available" : "unavailable";
|
|
61
|
-
const
|
|
68
|
+
return [...grouped.entries()].map(([ref, references]) => {
|
|
69
|
+
const availability = references.every((reference) => reference.kind === "image-generation" ? resolveImageGenerationModel(ref) : Boolean(registry.resolve(ref))) ? "available" : "unavailable";
|
|
70
|
+
const textOnly = references.every((reference) => reference.kind === "text");
|
|
71
|
+
const suggestion = availability === "unavailable" && textOnly ? suggestedRef(ref, catalog) : void 0;
|
|
62
72
|
return {
|
|
63
73
|
ref,
|
|
64
74
|
availability,
|
|
65
|
-
locations,
|
|
75
|
+
locations: references.map((reference) => reference.location),
|
|
66
76
|
...suggestion ? { suggestedRef: suggestion } : {}
|
|
67
77
|
};
|
|
68
78
|
}).sort((a, b) => a.ref.localeCompare(b.ref));
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
-
import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
|
|
5
4
|
import { resolveModelsJsonPath } from "../config/paths.js";
|
|
5
|
+
import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
|
|
6
6
|
import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
|
|
7
7
|
import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
|
|
8
8
|
import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
|
|
9
|
+
import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
|
|
9
10
|
import { existsSync, readFileSync } from "fs";
|
|
10
11
|
import { getModels, getProviders } from "@earendil-works/pi-ai/compat";
|
|
11
12
|
//#region src/providers/model-registry.ts
|
|
@@ -96,6 +97,7 @@ var init_model_registry = __esmMin((() => {
|
|
|
96
97
|
init_logger();
|
|
97
98
|
init_env_keys();
|
|
98
99
|
init_model_catalog_store();
|
|
100
|
+
init_model_ref();
|
|
99
101
|
log = createLogger("ModelRegistry");
|
|
100
102
|
ModelRegistry = class {
|
|
101
103
|
models = [];
|
|
@@ -176,8 +178,9 @@ var init_model_registry = __esmMin((() => {
|
|
|
176
178
|
*/
|
|
177
179
|
resolve(ref) {
|
|
178
180
|
this.ensureLoaded();
|
|
179
|
-
|
|
180
|
-
|
|
181
|
+
const qualifiedRef = splitProviderModelRef(ref);
|
|
182
|
+
if (qualifiedRef) {
|
|
183
|
+
const { provider, modelId } = qualifiedRef;
|
|
181
184
|
return this.find(provider, modelId);
|
|
182
185
|
}
|
|
183
186
|
for (const model of this.models) if (model.id === ref) return model;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
|
-
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir, resolveUserProfilePath } from "../config/paths.js";
|
|
3
2
|
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
3
|
+
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir, resolveUserProfilePath } from "../config/paths.js";
|
|
4
4
|
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
5
|
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
|
6
6
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
7
7
|
import { loadSkills } from "../agent/skills/index.js";
|
|
8
|
+
import { listConnectorInstances } from "../connectors/instances.js";
|
|
8
9
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
9
10
|
import "../config/index.js";
|
|
10
|
-
import { listConnectorInstances } from "../connectors/instances.js";
|
|
11
11
|
import { basename } from "node:path";
|
|
12
12
|
//#region src/tui/tui-startup-resources.ts
|
|
13
13
|
init_paths();
|
package/dist/src/tui/tui.js
CHANGED
|
@@ -2,10 +2,10 @@ import { version } from "../../package.js";
|
|
|
2
2
|
import { resolveStateDir, resolveXopcDatabasePath } from "../config/paths-state.js";
|
|
3
3
|
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
4
4
|
import { init_agent_session_key, normalizeAgentId } from "../routing/agent-session-key.js";
|
|
5
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
5
6
|
import { init_paths } from "../config/paths.js";
|
|
6
7
|
import { loadConfig } from "../config/loader.js";
|
|
7
8
|
import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderConfiguredSync } from "../providers/index.js";
|
|
8
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
9
9
|
import { renderWorkflowFinalSummary, renderWorkflowPanel } from "../agent/workflow/snapshot.js";
|
|
10
10
|
import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
|
|
11
11
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
2
1
|
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
2
|
+
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
3
3
|
import { publishAutomationProductEvent } from "../../automations/product-events.js";
|
|
4
4
|
import { GoalService } from "../../goals/goal-service.js";
|
|
5
5
|
import "../../goals/index.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.167",
|
|
4
4
|
"description": "Local-first AI system that remembers context, coordinates AI, and sustains long-term progress.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"semver": "^7.8.1",
|
|
101
101
|
"silk-wasm": "^3.7.1",
|
|
102
102
|
"thread-stream": "^4.2.0",
|
|
103
|
-
"undici": "^8.
|
|
103
|
+
"undici": "^8.9.0",
|
|
104
104
|
"uuid": "^14.0.0",
|
|
105
105
|
"ws": "^8.21.0",
|
|
106
106
|
"zod": "^4.4.3"
|