@xopcai/xopc 0.0.164 → 0.0.166

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.
Files changed (95) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-RpxkQtQ3.js → agent-avatar-dicebear-Tr2hgn4j.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agents-CxpwxMPE.js → agents-DZ69tC4K.js} +1 -1
  6. package/dist/gateway/static/root/assets/{app-management-settings-panel-DLdjfMXB.js → app-management-settings-panel-D7Nrbhez.js} +1 -1
  7. package/dist/gateway/static/root/assets/{appearance-settings-C89-uxkq.js → appearance-settings-DNNbABFj.js} +1 -1
  8. package/dist/gateway/static/root/assets/{apps-page-k-tZbaRB.js → apps-page-0zXIeywq.js} +1 -1
  9. package/dist/gateway/static/root/assets/{archive-plugin-CqbH5geE.js → archive-plugin-CizqFy4G.js} +1 -1
  10. package/dist/gateway/static/root/assets/{attachment-load-CeU4Qiot.js → attachment-load-DU8KjTua.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automation-suggestion-card-WiOuqXq9.js → automation-suggestion-card-3pqyIveW.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-Bdn3dgC_.js → automations-page-DSz3xDsi.js} +1 -1
  13. package/dist/gateway/static/root/assets/{binary-plugins-C5TdzrhJ.js → binary-plugins-CipUnsOr.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-BjvWhphG.js → block-editor-XoEq6qiv.js} +3 -3
  15. package/dist/gateway/static/root/assets/{browser-settings-page-GsVTGfGs.js → browser-settings-page-COYvq3y5.js} +1 -1
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-DXmzQ3nk.js → browser-workflow-inputs-DRH995XI.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-C1-ptRe4.js → browser-workflows-page-65edjhpz.js} +1 -1
  18. package/dist/gateway/static/root/assets/{capabilities-settings-panel-6d4kVjzl.js → capabilities-settings-panel-LOQyfdsM.js} +1 -1
  19. package/dist/gateway/static/root/assets/{capability-presets-api-C0pVlUyc.js → capability-presets-api-XL4h7dCK.js} +1 -1
  20. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-DCxy5Ls_.js → capability-presets-settings-panel-KPJFkt1h.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channels-settings-Bg3P8k0f.js → channels-settings-D8nH0mve.js} +1 -1
  22. package/dist/gateway/static/root/assets/{connector-logo-CuI5w4qM.js → connector-logo-n4Hg41iD.js} +1 -1
  23. package/dist/gateway/static/root/assets/{connectors-page-6UR7yhIZ.js → connectors-page-jvRWZn3Y.js} +1 -1
  24. package/dist/gateway/static/root/assets/{desktop-pet-BvG8vDXZ.js → desktop-pet-D4OzBOwm.js} +1 -1
  25. package/dist/gateway/static/root/assets/{desktop-pet-settings-CR__kZ8C.js → desktop-pet-settings-CDGezbaf.js} +1 -1
  26. package/dist/gateway/static/root/assets/{directory-picker-path-field-BblWMz3e.js → directory-picker-path-field-DmL4AUXQ.js} +1 -1
  27. package/dist/gateway/static/root/assets/{dreaming-settings-DHMPugDE.js → dreaming-settings-ClUcBKnd.js} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-debug-page-ByVY1gZg.js → extension-debug-page-DsV_KUDM.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-page-DLCKKtbK.js → extension-page-DJv_G1jY.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-settings-page-M-rhlFBC.js → extension-settings-page-DUAlJ4CU.js} +1 -1
  31. package/dist/gateway/static/root/assets/{gateway-config-api-DZHqhbXH.js → gateway-config-api-SVYgzqv7.js} +1 -1
  32. package/dist/gateway/static/root/assets/{gateway-settings-CZswIehx.js → gateway-settings-YL6f2C_F.js} +1 -1
  33. package/dist/gateway/static/root/assets/{goal-create-dialog-TbyRfDas.js → goal-create-dialog-CJJe-4Co.js} +1 -1
  34. package/dist/gateway/static/root/assets/{goal-detail-page-B-QBVOf2.js → goal-detail-page-Da9VMWRd.js} +1 -1
  35. package/dist/gateway/static/root/assets/{goals-config-api-DMxG6f0N.js → goals-config-api-st_Itxa9.js} +1 -1
  36. package/dist/gateway/static/root/assets/{goals-page-BGxki8BR.js → goals-page-B6pC7PYZ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{goals-settings-G-w1gCYD.js → goals-settings-BEZePZ5m.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-Csb90R59.js → heartbeat-settings-DpeD9GQ9.js} +1 -1
  39. package/dist/gateway/static/root/assets/{index-CGwuxvzr.js → index-BhQMnKH1.js} +6 -6
  40. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C_Bl3YOr.js → keyboard-shortcuts-settings-fhssr2-J.js} +1 -1
  41. package/dist/gateway/static/root/assets/{local-app-workbench-page-BR2tBhO3.js → local-app-workbench-page-Ctia6lSG.js} +1 -1
  42. package/dist/gateway/static/root/assets/{local-apps-page-_8Rv-tSk.js → local-apps-page-DWF9rpWQ.js} +1 -1
  43. package/dist/gateway/static/root/assets/{logs-page-CwF0C_Z2.js → logs-page-D3gL6vHX.js} +1 -1
  44. package/dist/gateway/static/root/assets/{markdown-split-CZnZS6gq.js → markdown-split-BuduJ0Ev.js} +1 -1
  45. package/dist/gateway/static/root/assets/{media-plugins-C2XLYC6G.js → media-plugins-CLASZjhT.js} +1 -1
  46. package/dist/gateway/static/root/assets/{notes-page-BkuZxTFo.js → notes-page-ve3XiBDF.js} +1 -1
  47. package/dist/gateway/static/root/assets/{notes-workbench-CD4FADi7.js → notes-workbench-oHU532lp.js} +2 -2
  48. package/dist/gateway/static/root/assets/{page-tabs-DR2FGC4E.js → page-tabs-DU85jn98.js} +1 -1
  49. package/dist/gateway/static/root/assets/{preview-open-alternatives-B65O8wBL.js → preview-open-alternatives-CtchTuRQ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{product-open-page-Cag-utLH.js → product-open-page-DFT6Fx6y.js} +1 -1
  51. package/dist/gateway/static/root/assets/{project-detail-page-COKtUblD.js → project-detail-page-Ceu0NoC1.js} +1 -1
  52. package/dist/gateway/static/root/assets/{projects-page-QYmqanBN.js → projects-page-CdpqOmO8.js} +1 -1
  53. package/dist/gateway/static/root/assets/{remote-access-hub-BU_gBU0f.js → remote-access-hub-D1NKLyiR.js} +1 -1
  54. package/dist/gateway/static/root/assets/{save-bar-controls-DCWpFnPc.js → save-bar-controls-CmcrHpMc.js} +1 -1
  55. package/dist/gateway/static/root/assets/{schedule-field-ClacZdvE.js → schedule-field-DmIkP6JV.js} +1 -1
  56. package/dist/gateway/static/root/assets/{schema-form-BVlbEipU.js → schema-form-Dkk9blN0.js} +1 -1
  57. package/dist/gateway/static/root/assets/{sessions-page-u-Pjbzfm.js → sessions-page-CMj_JaOk.js} +1 -1
  58. package/dist/gateway/static/root/assets/settings-advanced-gate-DR9Q2ZyF.js +1 -0
  59. package/dist/gateway/static/root/assets/{settings-form-section-GSNlQWSW.js → settings-form-section-CuQzWvg5.js} +1 -1
  60. package/dist/gateway/static/root/assets/{settings-loading-skeleton-08Ae5sB_.js → settings-loading-skeleton-C5FNbyej.js} +1 -1
  61. package/dist/gateway/static/root/assets/{settings-page-BseJD4I-.js → settings-page-a-A2yTGE.js} +1 -1
  62. package/dist/gateway/static/root/assets/{settings-page-layout-bSliH-Y3.js → settings-page-layout-MuXpamWD.js} +1 -1
  63. package/dist/gateway/static/root/assets/{setup-status-panel-CGRhJVlt.js → setup-status-panel-BUdh8FKY.js} +1 -1
  64. package/dist/gateway/static/root/assets/{share-preview-page-C114OpTx.js → share-preview-page-BfzzmTgg.js} +1 -1
  65. package/dist/gateway/static/root/assets/{shares-settings-BRFpWFgI.js → shares-settings-8a9qnLF8.js} +1 -1
  66. package/dist/gateway/static/root/assets/{skill-reload-api-cVjU2GnN.js → skill-reload-api-da5gLCer.js} +1 -1
  67. package/dist/gateway/static/root/assets/{skills-page-CoMTjtRT.js → skills-page-CmHj-CKY.js} +1 -1
  68. package/dist/gateway/static/root/assets/{system-settings-panel-El8cDcTY.js → system-settings-panel-CyhRkWMi.js} +1 -1
  69. package/dist/gateway/static/root/assets/{time-picker-CU7hhD8T.js → time-picker-WEPp3HrB.js} +1 -1
  70. package/dist/gateway/static/root/assets/{typed-models-lib-kToxD7Rc.js → typed-models-lib-Bi1uoxFR.js} +1 -1
  71. package/dist/gateway/static/root/assets/{user-context-page-C0xYCSXB.js → user-context-page-BObEyiim.js} +1 -1
  72. package/dist/gateway/static/root/assets/{voice-api-key-field-DzEpwYaU.js → voice-api-key-field-Gvgodhec.js} +1 -1
  73. package/dist/gateway/static/root/assets/{work-discovery-page-DakZqR85.js → work-discovery-page-BHnjvGH1.js} +1 -1
  74. package/dist/gateway/static/root/assets/{work-item-detail-page-CswqPbTT.js → work-item-detail-page-CQ8ybkxx.js} +1 -1
  75. package/dist/gateway/static/root/assets/{work-page-DYRXEk8m.js → work-page-D_U_En23.js} +1 -1
  76. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BwSxyVMM.js → workflow-run-setup-panel-B-Sk6gFn.js} +1 -1
  77. package/dist/gateway/static/root/assets/{workflows-page-CiLSYGuN.js → workflows-page-DT0pzfkz.js} +1 -1
  78. package/dist/gateway/static/root/index.html +1 -1
  79. package/dist/package.js +1 -1
  80. package/dist/src/agent/embedded/run-turn.js +9 -2
  81. package/dist/src/agent/index.js +1 -1
  82. package/dist/src/cli/commands/channels.js +1 -1
  83. package/dist/src/cli/commands/connectors.js +1 -1
  84. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  85. package/dist/src/cli/commands/models.js +1 -1
  86. package/dist/src/cli/commands/onboard.js +1 -1
  87. package/dist/src/extensions/sdk/index.js +1 -1
  88. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  89. package/dist/src/gateway/service.js +2 -2
  90. package/dist/src/providers/index.js +5 -2
  91. package/dist/src/providers/model-ref.d.ts +6 -0
  92. package/dist/src/providers/model-ref.js +15 -0
  93. package/dist/src/providers/model-registry.js +5 -2
  94. package/package.json +1 -1
  95. package/dist/gateway/static/root/assets/settings-advanced-gate-1Yck1PKq.js +0 -1
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260713-1" />
13
13
  <title>xopc</title>
14
- <script type="module" crossorigin src="/assets/index-CGwuxvzr.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-BhQMnKH1.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.164";
2
+ var version = "0.0.166";
3
3
  //#endregion
4
4
  export { version };
@@ -7,6 +7,7 @@ import { getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFa
7
7
  import { abortEmbeddedRun, queueEmbeddedSteer, registerEmbeddedRun, unregisterEmbeddedRun } from "./runs.js";
8
8
  import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
9
9
  import { detectToolLoops } from "../orchestration/loop-guard.js";
10
+ import { tryApplySessionTranscriptHygiene } from "../transcript/transcript-hygiene.js";
10
11
  //#region src/agent/embedded/run-turn.ts
11
12
  init_logger();
12
13
  const log = createLogger("EmbeddedRun");
@@ -76,8 +77,13 @@ async function runXopcEmbeddedTurn(params) {
76
77
  const { session, reused } = runner;
77
78
  const streamFnWithXopcExtensions = wrapStreamFnForXopcExtensions(session.agent.streamFunction);
78
79
  const loggingStreamFn = (streamModel, context, options) => {
79
- const loopGuard = detectToolLoops(extractRecentToolCalls(context.messages));
80
- let effectiveContext = context;
80
+ const sourceMessages = [...context.messages];
81
+ const hygienicMessages = tryApplySessionTranscriptHygiene(sourceMessages, streamModel);
82
+ const loopGuard = detectToolLoops(extractRecentToolCalls(hygienicMessages));
83
+ let effectiveContext = {
84
+ ...context,
85
+ messages: hygienicMessages
86
+ };
81
87
  if (loopGuard.injection || loopGuard.hiddenTools.size > 0) {
82
88
  const messages = loopGuard.injection ? [...context.messages, {
83
89
  role: "user",
@@ -98,6 +104,7 @@ async function runXopcEmbeddedTurn(params) {
98
104
  modelRef: `${streamModel.provider}/${streamModel.id}`,
99
105
  systemPromptLength: effectiveContext.systemPrompt?.length ?? 0,
100
106
  messageCount: effectiveContext.messages.length,
107
+ transcriptRepaired: hygienicMessages !== sourceMessages,
101
108
  toolCount: effectiveContext.tools?.length ?? 0,
102
109
  lastUserMessagePreview: getLastUserMessagePreview(effectiveContext.messages),
103
110
  loopWarningInjected: !!loopGuard.injection,
@@ -5,10 +5,10 @@ import { AgentInbox } from "./ipc/inbox.js";
5
5
  import { AgentBus } from "./ipc/bus.js";
6
6
  import { AgentSocketClient, AgentSocketServer, isSocketAvailable } from "./ipc/socket.js";
7
7
  import "./ipc/index.js";
8
- import { AgentService } from "./service.js";
9
8
  import { resolveTranscriptPolicy } from "./transcript/transcript-policy.js";
10
9
  import { dropThinkingBlocks } from "./transcript/thinking.js";
11
10
  import { applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, resolvePolicyForModel, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence } from "./transcript/transcript-hygiene.js";
11
+ import { AgentService } from "./service.js";
12
12
  import { stripToolMessages } from "./transcript/strip-tool-messages.js";
13
13
  import "./transcript/index.js";
14
14
  export { AgentBus, AgentInbox, AgentService, AgentSocketClient, AgentSocketServer, applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, createResponseMessage, createSignalMessage, createTaskMessage, dropThinkingBlocks, extractToolCallsFromAssistant, extractToolResultId, isSocketAvailable, isValidIPCMessage, makeMissingToolResult, repairToolUseResultPairing, resolvePolicyForModel, resolveTranscriptPolicy, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolMessages, stripToolResultDetails, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence };
@@ -1,8 +1,8 @@
1
1
  import { buildChannelCatalogForConfig, init_channel_catalog_service } from "../../channels/catalog/channel-catalog-service.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { formatExamples, register } from "../registry.js";
3
4
  import { listChannelPairingState } from "../../channels/pairing/pairing-service.js";
4
5
  import { approveChannelPairingFromCli } from "../../channels/pairing/approve-cli.js";
5
- import { formatExamples, register } from "../registry.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  import { Command } from "commander";
8
8
  //#region src/cli/commands/channels.ts
@@ -1,8 +1,8 @@
1
1
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
2
2
  import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
3
3
  import { register } from "../registry.js";
4
- import { confirm } from "@inquirer/prompts";
5
4
  import { Command } from "commander";
5
+ import { confirm } from "@inquirer/prompts";
6
6
  //#region src/cli/commands/connectors.ts
7
7
  init_loader();
8
8
  function parsePairs(values, option) {
@@ -12,8 +12,8 @@ import { join, resolve } from "node:path";
12
12
  import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
13
13
  import { execSync } from "node:child_process";
14
14
  import { createHash } from "node:crypto";
15
- import { confirm } from "@inquirer/prompts";
16
15
  import { Command } from "commander";
16
+ import { confirm } from "@inquirer/prompts";
17
17
  import semver from "semver";
18
18
  //#region src/cli/commands/extension-marketplace.ts
19
19
  init_loader();
@@ -8,8 +8,8 @@ import "../../config/index.js";
8
8
  import { prepareUpdateGlobalDefaults } from "../../gateway/global-defaults-admin.js";
9
9
  import { colors } from "../utils/colors.js";
10
10
  import { runCliOAuthLogin } from "../utils/oauth-login.js";
11
- import { input } from "@inquirer/prompts";
12
11
  import { Command } from "commander";
12
+ import { input } from "@inquirer/prompts";
13
13
  //#region src/cli/commands/models.ts
14
14
  init_credentials();
15
15
  init_schema();
@@ -8,8 +8,8 @@ import { initWorkspace } from "../utils/init-workspace.js";
8
8
  import { setupModel } from "./onboard/model.js";
9
9
  import { getChannelConfigurators } from "./onboard/channels/registry.js";
10
10
  import { setupChannels } from "./onboard/channels/index.js";
11
- import { select } from "@inquirer/prompts";
12
11
  import { Command } from "commander";
12
+ import { select } from "@inquirer/prompts";
13
13
  //#region src/cli/commands/onboard.ts
14
14
  init_schema();
15
15
  function isInteractive() {
@@ -7,8 +7,8 @@ import { SlotRegistry, getSlotRegistry, registerSlotType } from "../slots.js";
7
7
  import { ExtensionDiagnostics, ExtensionLoaderCacheImpl, getExtensionCache, getExtensionDiagnostics } from "../diagnostics.js";
8
8
  import "../loader.js";
9
9
  import { ExtensionHookRunner, createHookContext, isHookEvent } from "../hooks.js";
10
- import { defineChannelPluginEntry } from "./channel-entry.js";
11
10
  import { registerExtensionCliProgram } from "./channel-helpers.js";
11
+ import { defineChannelPluginEntry } from "./channel-entry.js";
12
12
  import { lazyFunction, lazyModule } from "./lazy.js";
13
13
  import { createMockExtensionApi, createTestGateway } from "./testing.js";
14
14
  //#region src/extensions/sdk/index.ts
@@ -7,9 +7,9 @@ import { messagesToClientHistory } from "../../../session/client-history.js";
7
7
  import "../../../workflows/domain/index.js";
8
8
  import { resolveWorkflowRunArtifactsDir } from "../../../workflows/store/paths.js";
9
9
  import { WorkflowDraftService } from "../../../workflows/draft/workflow-draft-service.js";
10
+ import "../../../workflows/draft/index.js";
10
11
  import { WorkflowDraftConflictError, WorkflowDraftStore } from "../../../workflows/authoring/workflow-draft-store.js";
11
12
  import "../../../workflows/authoring/index.js";
12
- import "../../../workflows/draft/index.js";
13
13
  import { basename, join } from "node:path";
14
14
  import { readFile, stat } from "node:fs/promises";
15
15
  //#region src/gateway/hono/routes/workflows.ts
@@ -37,11 +37,11 @@ import { AgentService } from "../agent/service.js";
37
37
  import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
38
38
  import { AutomationService } from "../automations/service/automation-service.js";
39
39
  import "../automations/index.js";
40
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
41
+ import "../config/index.js";
40
42
  import { setPairingBroadcastSink } from "../channels/pairing/pairing-events.js";
41
43
  import { registerClarifyBridge } from "./clarify-runtime.js";
42
44
  import { ChannelManager } from "../channels/manager.js";
43
- import { getWorkspacePath } from "../config/workspace-path-helpers.js";
44
- import "../config/index.js";
45
45
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
46
46
  import "../knowledge/index.js";
47
47
  import { startConnectorMemorySyncCoordinator } from "../connectors/memory-sync-coordinator.js";
@@ -3,6 +3,7 @@ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
3
  import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
4
  import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
5
5
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
6
+ import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
6
7
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
7
8
  import { CredentialResolver, hasCredentials, init_credentials, resolveApiKey } from "../auth/credentials.js";
8
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.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
- if (trimmedRef.includes("/")) {
94
- const [provider, modelId] = trimmedRef.split("/");
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,6 @@
1
+ export interface ProviderModelRef {
2
+ provider: string;
3
+ modelId: string;
4
+ }
5
+ /** Split a provider-qualified model reference while preserving slashes in the model ID. */
6
+ export declare function splitProviderModelRef(ref: string): ProviderModelRef | undefined;
@@ -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 };
@@ -6,6 +6,7 @@ import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from ".
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
- if (ref.includes("/")) {
180
- const [provider, modelId] = ref.split("/");
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.164",
3
+ "version": "0.0.166",
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",
@@ -1 +0,0 @@
1
- import{ti as e}from"./index-CGwuxvzr.js";function t(t){let{children:n,fallback:r}=t,i=r===void 0?null:r;return e()?n:i}export{t};