@shipfox/client-agent 22.0.3 → 24.0.0

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 (31) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +23 -0
  3. package/dist/components/agent-workflow-example.d.ts.map +1 -1
  4. package/dist/components/agent-workflow-example.js +0 -1
  5. package/dist/components/agent-workflow-example.js.map +1 -1
  6. package/dist/components/model-providers-section.stories.js +2 -1
  7. package/dist/components/model-providers-section.stories.js.map +1 -1
  8. package/dist/core/models.d.ts +2 -0
  9. package/dist/core/models.d.ts.map +1 -1
  10. package/dist/core/models.js.map +1 -1
  11. package/dist/core/provider-policy.d.ts.map +1 -1
  12. package/dist/core/provider-policy.js +8 -2
  13. package/dist/core/provider-policy.js.map +1 -1
  14. package/dist/hooks/api/model-provider-mapper.d.ts.map +1 -1
  15. package/dist/hooks/api/model-provider-mapper.js +3 -1
  16. package/dist/hooks/api/model-provider-mapper.js.map +1 -1
  17. package/dist/tsconfig.test.tsbuildinfo +1 -1
  18. package/package.json +4 -4
  19. package/src/components/agent-workflow-example.test.ts +2 -2
  20. package/src/components/agent-workflow-example.ts +0 -1
  21. package/src/components/harness-availability.test.ts +4 -1
  22. package/src/components/model-providers-section.stories.tsx +3 -1
  23. package/src/components/model-providers-section.test.tsx +28 -1
  24. package/src/core/models.ts +2 -0
  25. package/src/core/provider-policy.test.ts +78 -0
  26. package/src/core/provider-policy.ts +8 -2
  27. package/src/hooks/api/model-provider-mapper.test.ts +19 -1
  28. package/src/hooks/api/model-provider-mapper.ts +2 -0
  29. package/src/pages/model-provider-onboarding-page.test.tsx +7 -5
  30. package/test/fixtures/model-providers.ts +3 -0
  31. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 38 files with swc (564.33ms)
2
+ Successfully compiled: 38 files with swc (291.54ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @shipfox/client-agent
2
2
 
3
+ ## 24.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 989eb11: Adds `managed_provider_id` and `instance_default_provider_id` to the model-provider catalog response so clients can detect when an installation provides inference and omit redundant provider setup.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [07410fe]
12
+ - Updated dependencies [989eb11]
13
+ - @shipfox/api-agent-dto@15.0.0
14
+ - @shipfox/client-ui@24.0.0
15
+ - @shipfox/client-shell@24.0.0
16
+
17
+ ## 23.0.0
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [693e656]
22
+ - Updated dependencies [09924ca]
23
+ - @shipfox/client-shell@23.0.0
24
+ - @shipfox/api-agent-dto@14.0.0
25
+
3
26
  ## 22.0.3
4
27
 
5
28
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"agent-workflow-example.d.ts","sourceRoot":"","sources":["../../src/components/agent-workflow-example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,8BAA8B,CAAC;AAKhF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,6BAA6B,CAAC;CACrD;AAED,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,UAAU,EACV,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,oBAAoB,CA2BvB"}
1
+ {"version":3,"file":"agent-workflow-example.d.ts","sourceRoot":"","sources":["../../src/components/agent-workflow-example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,6BAA6B,EAAC,MAAM,8BAA8B,CAAC;AAKhF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,6BAA6B,CAAC;CACrD;AAED,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,UAAU,EACV,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,oBAAoB,CA0BvB"}
@@ -6,7 +6,6 @@ export function buildAgentWorkflowExample({ harness, providerId, model }) {
6
6
  'triggers:',
7
7
  ' on_demand:',
8
8
  ' source: manual',
9
- ' event: fire',
10
9
  'jobs:',
11
10
  ' agent:',
12
11
  ' runner: ubuntu-latest',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/agent-workflow-example.ts"],"sourcesContent":["import type {CodeBlockHighlightedLineRange} from '@shipfox/react-ui/code-block';\n\nconst YAML_SAFE_PLAIN_SCALAR_RE = /^[A-Za-z][A-Za-z0-9._/-]*$/;\nconst YAML_AMBIGUOUS_PLAIN_SCALAR_RE = /^(?:false|n|no|null|off|on|true|y|yes)$/i;\n\nexport interface AgentWorkflowExample {\n code: string;\n highlightedLineRange: CodeBlockHighlightedLineRange;\n}\n\nexport function buildAgentWorkflowExample({\n harness,\n providerId,\n model,\n}: {\n harness: string;\n providerId: string;\n model: string;\n}): AgentWorkflowExample {\n const lines = [\n 'name: Agent',\n 'triggers:',\n ' on_demand:',\n ' source: manual',\n ' event: fire',\n 'jobs:',\n ' agent:',\n ' runner: ubuntu-latest',\n ' steps:',\n ' - name: implement',\n ` harness: ${formatYamlPlainOrSingleQuotedScalar(harness)}`,\n ` provider: ${formatYamlPlainOrSingleQuotedScalar(providerId)}`,\n ` model: ${formatYamlPlainOrSingleQuotedScalar(model)}`,\n ' prompt: Describe the change you want the agent to make.',\n ];\n const harnessLineIndex = lines.findIndex((line) => line.trimStart().startsWith('harness:'));\n const modelLineIndex = lines.findIndex((line) => line.trimStart().startsWith('model:'));\n\n return {\n code: lines.join('\\n'),\n highlightedLineRange: {\n startLine: harnessLineIndex + 1,\n endLine: modelLineIndex + 1,\n },\n };\n}\n\nfunction formatYamlPlainOrSingleQuotedScalar(value: string): string {\n if (!requiresYamlSingleQuotes(value)) return value;\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\nfunction requiresYamlSingleQuotes(value: string): boolean {\n return !YAML_SAFE_PLAIN_SCALAR_RE.test(value) || YAML_AMBIGUOUS_PLAIN_SCALAR_RE.test(value);\n}\n"],"names":["YAML_SAFE_PLAIN_SCALAR_RE","YAML_AMBIGUOUS_PLAIN_SCALAR_RE","buildAgentWorkflowExample","harness","providerId","model","lines","formatYamlPlainOrSingleQuotedScalar","harnessLineIndex","findIndex","line","trimStart","startsWith","modelLineIndex","code","join","highlightedLineRange","startLine","endLine","value","requiresYamlSingleQuotes","replaceAll","test"],"mappings":"AAEA,MAAMA,4BAA4B;AAClC,MAAMC,iCAAiC;AAOvC,OAAO,SAASC,0BAA0B,EACxCC,OAAO,EACPC,UAAU,EACVC,KAAK,EAKN;IACC,MAAMC,QAAQ;QACZ;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,CAAC,iBAAiB,EAAEC,oCAAoCJ,UAAU;QAClE,CAAC,kBAAkB,EAAEI,oCAAoCH,aAAa;QACtE,CAAC,eAAe,EAAEG,oCAAoCF,QAAQ;QAC9D;KACD;IACD,MAAMG,mBAAmBF,MAAMG,SAAS,CAAC,CAACC,OAASA,KAAKC,SAAS,GAAGC,UAAU,CAAC;IAC/E,MAAMC,iBAAiBP,MAAMG,SAAS,CAAC,CAACC,OAASA,KAAKC,SAAS,GAAGC,UAAU,CAAC;IAE7E,OAAO;QACLE,MAAMR,MAAMS,IAAI,CAAC;QACjBC,sBAAsB;YACpBC,WAAWT,mBAAmB;YAC9BU,SAASL,iBAAiB;QAC5B;IACF;AACF;AAEA,SAASN,oCAAoCY,KAAa;IACxD,IAAI,CAACC,yBAAyBD,QAAQ,OAAOA;IAC7C,OAAO,CAAC,CAAC,EAAEA,MAAME,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC;AAC3C;AAEA,SAASD,yBAAyBD,KAAa;IAC7C,OAAO,CAACnB,0BAA0BsB,IAAI,CAACH,UAAUlB,+BAA+BqB,IAAI,CAACH;AACvF"}
1
+ {"version":3,"sources":["../../src/components/agent-workflow-example.ts"],"sourcesContent":["import type {CodeBlockHighlightedLineRange} from '@shipfox/react-ui/code-block';\n\nconst YAML_SAFE_PLAIN_SCALAR_RE = /^[A-Za-z][A-Za-z0-9._/-]*$/;\nconst YAML_AMBIGUOUS_PLAIN_SCALAR_RE = /^(?:false|n|no|null|off|on|true|y|yes)$/i;\n\nexport interface AgentWorkflowExample {\n code: string;\n highlightedLineRange: CodeBlockHighlightedLineRange;\n}\n\nexport function buildAgentWorkflowExample({\n harness,\n providerId,\n model,\n}: {\n harness: string;\n providerId: string;\n model: string;\n}): AgentWorkflowExample {\n const lines = [\n 'name: Agent',\n 'triggers:',\n ' on_demand:',\n ' source: manual',\n 'jobs:',\n ' agent:',\n ' runner: ubuntu-latest',\n ' steps:',\n ' - name: implement',\n ` harness: ${formatYamlPlainOrSingleQuotedScalar(harness)}`,\n ` provider: ${formatYamlPlainOrSingleQuotedScalar(providerId)}`,\n ` model: ${formatYamlPlainOrSingleQuotedScalar(model)}`,\n ' prompt: Describe the change you want the agent to make.',\n ];\n const harnessLineIndex = lines.findIndex((line) => line.trimStart().startsWith('harness:'));\n const modelLineIndex = lines.findIndex((line) => line.trimStart().startsWith('model:'));\n\n return {\n code: lines.join('\\n'),\n highlightedLineRange: {\n startLine: harnessLineIndex + 1,\n endLine: modelLineIndex + 1,\n },\n };\n}\n\nfunction formatYamlPlainOrSingleQuotedScalar(value: string): string {\n if (!requiresYamlSingleQuotes(value)) return value;\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\nfunction requiresYamlSingleQuotes(value: string): boolean {\n return !YAML_SAFE_PLAIN_SCALAR_RE.test(value) || YAML_AMBIGUOUS_PLAIN_SCALAR_RE.test(value);\n}\n"],"names":["YAML_SAFE_PLAIN_SCALAR_RE","YAML_AMBIGUOUS_PLAIN_SCALAR_RE","buildAgentWorkflowExample","harness","providerId","model","lines","formatYamlPlainOrSingleQuotedScalar","harnessLineIndex","findIndex","line","trimStart","startsWith","modelLineIndex","code","join","highlightedLineRange","startLine","endLine","value","requiresYamlSingleQuotes","replaceAll","test"],"mappings":"AAEA,MAAMA,4BAA4B;AAClC,MAAMC,iCAAiC;AAOvC,OAAO,SAASC,0BAA0B,EACxCC,OAAO,EACPC,UAAU,EACVC,KAAK,EAKN;IACC,MAAMC,QAAQ;QACZ;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,CAAC,iBAAiB,EAAEC,oCAAoCJ,UAAU;QAClE,CAAC,kBAAkB,EAAEI,oCAAoCH,aAAa;QACtE,CAAC,eAAe,EAAEG,oCAAoCF,QAAQ;QAC9D;KACD;IACD,MAAMG,mBAAmBF,MAAMG,SAAS,CAAC,CAACC,OAASA,KAAKC,SAAS,GAAGC,UAAU,CAAC;IAC/E,MAAMC,iBAAiBP,MAAMG,SAAS,CAAC,CAACC,OAASA,KAAKC,SAAS,GAAGC,UAAU,CAAC;IAE7E,OAAO;QACLE,MAAMR,MAAMS,IAAI,CAAC;QACjBC,sBAAsB;YACpBC,WAAWT,mBAAmB;YAC9BU,SAASL,iBAAiB;QAC5B;IACF;AACF;AAEA,SAASN,oCAAoCY,KAAa;IACxD,IAAI,CAACC,yBAAyBD,QAAQ,OAAOA;IAC7C,OAAO,CAAC,CAAC,EAAEA,MAAME,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC;AAC3C;AAEA,SAASD,yBAAyBD,KAAa;IAC7C,OAAO,CAACnB,0BAA0BsB,IAAI,CAACH,UAAUlB,+BAA+BqB,IAAI,CAACH;AACvF"}
@@ -298,7 +298,8 @@ function fetchForScenario(scenario) {
298
298
  return Promise.resolve(jsonResponse({
299
299
  providers: catalogForScenario(scenario),
300
300
  ...scenario === 'managed-only' ? {
301
- workspace_providers: 'disabled'
301
+ workspace_providers: 'disabled',
302
+ managed_provider_id: 'shipfox'
302
303
  } : {}
303
304
  }));
304
305
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/model-providers-section.stories.tsx"],"sourcesContent":["import type {\n CustomModelProviderConfigDto,\n ModelProviderCatalogEntryDto,\n ModelProviderConfigDto,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {configureApiClient} from '@shipfox/client-api';\nimport {Toaster} from '@shipfox/react-ui/toast';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query';\nimport {useMemo} from 'react';\nimport {screen, userEvent, within} from 'storybook/test';\nimport {WorkspaceModelProvidersSection} from './model-providers-section.js';\n\nconst WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';\n\ntype Scenario =\n | 'mixed'\n | 'empty-configured'\n | 'all-configured'\n | 'custom-configured'\n | 'loading'\n | 'configs-error'\n | 'catalog-error'\n | 'managed-only'\n | 'long-names';\n\ninterface ModelProvidersStoryProps {\n scenario: Scenario;\n}\n\nconst CATALOG: ModelProviderCatalogEntryDto[] = [\n providerEntry({\n id: 'anthropic',\n label: 'Anthropic',\n default_model: 'claude-opus-4-8',\n models: [\n {id: 'claude-opus-4-8', label: 'Claude Opus 4.8'},\n {id: 'claude-haiku-4-5', label: 'Claude Haiku 4.5'},\n ],\n }),\n providerEntry({\n id: 'openai',\n label: 'OpenAI',\n default_model: 'gpt-5.5-pro',\n models: [\n {id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'},\n {id: 'gpt-5-mini', label: 'GPT-5 Mini'},\n ],\n }),\n providerEntry({\n id: 'xai',\n label: 'xAI',\n default_model: 'grok-code-fast-1',\n models: [{id: 'grok-code-fast-1', label: 'Grok Code Fast 1'}],\n }),\n providerEntry({\n id: 'openrouter',\n label: 'OpenRouter',\n default_model: 'openrouter/auto',\n models: [{id: 'openrouter/auto', label: 'OpenRouter Auto'}],\n }),\n providerEntry({\n id: 'google',\n label: 'Google Gemini',\n default_model: 'gemini-3-pro',\n models: [{id: 'gemini-3-pro', label: 'Gemini 3 Pro'}],\n }),\n providerEntry({\n id: 'mistral',\n label: 'Mistral AI',\n default_model: 'codestral-latest',\n models: [{id: 'codestral-latest', label: 'Codestral Latest'}],\n }),\n providerEntry({\n id: 'groq',\n label: 'Groq',\n default_model: 'llama-4-fast',\n models: [{id: 'llama-4-fast', label: 'Llama 4 Fast'}],\n }),\n providerEntry({\n id: 'deepseek',\n label: 'DeepSeek',\n default_model: 'deepseek-coder',\n models: [{id: 'deepseek-coder', label: 'DeepSeek Coder'}],\n }),\n providerEntry({\n id: 'moonshotai',\n label: 'Moonshot AI',\n default_model: 'kimi-k2',\n models: [{id: 'kimi-k2', label: 'Kimi K2'}],\n }),\n providerEntry({\n id: 'azure-openai-responses',\n label: 'Azure OpenAI Responses',\n default_model: 'gpt-5.5-pro',\n models: [{id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'}],\n }),\n providerEntry({\n id: 'amazon-bedrock',\n label: 'Amazon Bedrock',\n support_status: 'unsupported',\n credential_fields: [],\n unsupported_reason: 'AWS cloud credentials are not supported yet.',\n models: [],\n }),\n];\n\nfunction ModelProvidersStory({scenario}: ModelProvidersStoryProps) {\n configureApiClient({\n baseUrl: 'https://api.example.test',\n fetchImpl: fetchForScenario(scenario),\n });\n\n const queryClient = useMemo(\n () => new QueryClient({defaultOptions: {queries: {retry: false}}}),\n [],\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <div className=\"mx-auto w-full max-w-[760px] bg-background-subtle-base p-24\">\n <WorkspaceModelProvidersSection workspaceId={WORKSPACE_ID} />\n </div>\n <Toaster />\n </QueryClientProvider>\n );\n}\n\nconst meta = {\n title: 'Agent/ProviderSettings',\n component: ModelProvidersStory,\n parameters: {layout: 'fullscreen'},\n args: {scenario: 'mixed'},\n} satisfies Meta<typeof ModelProvidersStory>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Playground: Story = {};\n\nexport const ManagedOnly: Story = {\n args: {scenario: 'managed-only'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findByText('Managed by this instance. No workspace credentials are required.');\n await canvas.findByRole('button', {name: 'Use in a workflow'});\n },\n};\n\nexport const EmptyConfigured: Story = {\n args: {scenario: 'empty-configured'},\n};\n\nexport const AllConfigured: Story = {\n args: {scenario: 'all-configured'},\n};\n\nexport const CustomConfigured: Story = {\n args: {scenario: 'custom-configured'},\n};\n\nexport const Loading: Story = {\n args: {scenario: 'loading'},\n};\n\nexport const ConfigsError: Story = {\n args: {scenario: 'configs-error'},\n};\n\nexport const CatalogError: Story = {\n args: {scenario: 'catalog-error'},\n};\n\nexport const LongNames: Story = {\n args: {scenario: 'long-names'},\n};\n\nexport const FilteredAvailableProviders: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.type(\n await canvas.findByRole('searchbox', {name: 'Search providers'}),\n 'openrouter',\n );\n await canvas.findByRole('button', {name: 'Configure OpenRouter'});\n },\n};\n\nexport const NoMatchingAvailableProviders: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.type(\n await canvas.findByRole('searchbox', {name: 'Search providers'}),\n 'not-a-provider',\n );\n await canvas.findByRole('button', {name: 'Clear search'});\n },\n};\n\nexport const ConfigureModalOpen: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(await canvas.findByRole('button', {name: 'Configure Anthropic'}));\n await screen.findByLabelText('API key');\n },\n};\n\nexport const CustomProviderModalOpen: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(await canvas.findByRole('button', {name: 'Configure custom provider'}));\n await screen.findByRole('dialog', {name: 'Add custom provider'});\n },\n};\n\nexport const WorkflowExampleModalOpen: Story = {\n args: {scenario: 'mixed'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(\n await canvas.findByRole('button', {name: 'Open Anthropic provider actions'}),\n );\n await userEvent.click(await screen.findByRole('menuitem', {name: 'View workflow example'}));\n await screen.findByRole('dialog', {name: 'Use Anthropic in a workflow'});\n },\n};\n\nfunction fetchForScenario(scenario: Scenario): typeof fetch {\n return (input) => {\n const url = requestUrl(input);\n if (scenario === 'loading') return new Promise<Response>(() => undefined);\n if (url.pathname.endsWith('/agent/model-provider-catalog')) {\n if (scenario === 'catalog-error') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n providers: catalogForScenario(scenario),\n ...(scenario === 'managed-only' ? {workspace_providers: 'disabled'} : {}),\n }),\n );\n }\n if (url.pathname.endsWith('/agent/model-providers')) {\n if (scenario === 'configs-error') return Promise.resolve(errorResponse());\n return Promise.resolve(jsonResponse(configsForScenario(scenario)));\n }\n return Promise.resolve(jsonResponse({}, {status: 404}));\n };\n}\n\nfunction catalogForScenario(scenario: Scenario): ModelProviderCatalogEntryDto[] {\n if (scenario === 'managed-only') {\n return [\n providerEntry({\n id: 'shipfox',\n label: 'Shipfox Managed',\n default_model: 'claude-opus-4-8',\n credential_fields: [],\n models: [\n {id: 'claude-opus-4-8', label: 'Claude Opus 4.8', api: 'anthropic-messages'},\n {id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro', api: 'openai-responses'},\n ],\n }),\n ];\n }\n if (scenario !== 'long-names') return CATALOG;\n return [\n providerEntry({\n id: 'anthropic',\n label: 'Anthropic Enterprise Production Claude Provider With Long Label',\n default_model: 'claude-opus-4-8',\n }),\n providerEntry({\n id: 'openai',\n label: 'OpenAI Platform Shared Workspace Credentials With Long Label',\n default_model: 'gpt-5.5-pro',\n models: [{id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'}],\n }),\n ];\n}\n\nfunction configsForScenario(scenario: Scenario) {\n if (scenario === 'managed-only') {\n return {configs: [], default_provider_id: null, default_harness_id: null};\n }\n if (scenario === 'empty-configured' || scenario === 'configs-error') {\n return {configs: [], default_provider_id: null, default_harness_id: null};\n }\n if (scenario === 'all-configured') {\n return {\n configs: CATALOG.filter((entry) => entry.support_status === 'supported').map((entry) =>\n providerConfig({\n provider_id: entry.id as SupportedModelProviderId,\n }),\n ),\n default_provider_id: 'anthropic',\n default_harness_id: null,\n };\n }\n if (scenario === 'custom-configured') {\n return {\n configs: [providerConfig({provider_id: 'anthropic'}), customProviderConfig()],\n default_provider_id: 'local-vllm',\n default_harness_id: null,\n };\n }\n return {\n configs: [providerConfig({provider_id: 'anthropic'})],\n default_provider_id: 'anthropic',\n default_harness_id: null,\n };\n}\n\nfunction customProviderConfig(): CustomModelProviderConfigDto {\n return {\n kind: 'custom',\n provider_id: 'local-vllm',\n display_name: 'Local vLLM',\n api: 'openai-completions',\n base_url: 'http://localhost:8000/v1',\n headers: [{name: 'x-region', value: 'us'}],\n secret_header_names: ['authorization'],\n models: [\n {id: 'llama-3.1', label: 'Llama 3.1'},\n {id: 'qwen-coder', label: 'Qwen Coder'},\n ],\n default_model: 'llama-3.1',\n created_at: '2026-05-08T00:00:00.000Z',\n updated_at: '2026-05-08T00:00:00.000Z',\n };\n}\n\nfunction providerEntry(\n overrides: Partial<ModelProviderCatalogEntryDto> = {},\n): ModelProviderCatalogEntryDto {\n return {\n id: 'anthropic',\n label: 'Anthropic',\n support_status: 'supported',\n default_model: null,\n credential_fields: [{key: 'api_key', label: 'API key', secret: true}],\n unsupported_reason: null,\n models: [{id: 'claude-opus-4-8', label: 'Claude Opus 4.8'}],\n ...overrides,\n };\n}\n\nfunction providerConfig(\n overrides: Partial<Omit<ModelProviderConfigDto, 'kind'>> = {},\n): ModelProviderConfigDto {\n return {\n kind: 'builtin',\n provider_id: 'anthropic',\n default_model: null,\n created_at: '2026-05-08T00:00:00.000Z',\n updated_at: '2026-05-08T00:00:00.000Z',\n ...overrides,\n };\n}\n\nfunction requestUrl(input: RequestInfo | URL): URL {\n if (typeof input === 'string') return new URL(input);\n if (input instanceof URL) return input;\n return new URL(input.url);\n}\n\nfunction jsonResponse(body: unknown, init: ResponseInit = {}) {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {'content-type': 'application/json'},\n ...init,\n });\n}\n\nfunction errorResponse() {\n return jsonResponse({code: 'server-error'}, {status: 500, statusText: 'Server error'});\n}\n"],"names":["configureApiClient","Toaster","QueryClient","QueryClientProvider","useMemo","screen","userEvent","within","WorkspaceModelProvidersSection","WORKSPACE_ID","CATALOG","providerEntry","id","label","default_model","models","support_status","credential_fields","unsupported_reason","ModelProvidersStory","scenario","baseUrl","fetchImpl","fetchForScenario","queryClient","defaultOptions","queries","retry","client","div","className","workspaceId","meta","title","component","parameters","layout","args","Playground","ManagedOnly","play","canvasElement","canvas","findByText","findByRole","name","EmptyConfigured","AllConfigured","CustomConfigured","Loading","ConfigsError","CatalogError","LongNames","FilteredAvailableProviders","type","NoMatchingAvailableProviders","ConfigureModalOpen","click","findByLabelText","CustomProviderModalOpen","WorkflowExampleModalOpen","input","url","requestUrl","Promise","undefined","pathname","endsWith","resolve","errorResponse","jsonResponse","providers","catalogForScenario","workspace_providers","configsForScenario","status","api","configs","default_provider_id","default_harness_id","filter","entry","map","providerConfig","provider_id","customProviderConfig","kind","display_name","base_url","headers","value","secret_header_names","created_at","updated_at","overrides","key","secret","URL","body","init","Response","JSON","stringify","code","statusText"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/model-providers-section.stories.tsx"],"sourcesContent":["import type {\n CustomModelProviderConfigDto,\n ModelProviderCatalogEntryDto,\n ModelProviderConfigDto,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {configureApiClient} from '@shipfox/client-api';\nimport {Toaster} from '@shipfox/react-ui/toast';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query';\nimport {useMemo} from 'react';\nimport {screen, userEvent, within} from 'storybook/test';\nimport {WorkspaceModelProvidersSection} from './model-providers-section.js';\n\nconst WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';\n\ntype Scenario =\n | 'mixed'\n | 'empty-configured'\n | 'all-configured'\n | 'custom-configured'\n | 'loading'\n | 'configs-error'\n | 'catalog-error'\n | 'managed-only'\n | 'long-names';\n\ninterface ModelProvidersStoryProps {\n scenario: Scenario;\n}\n\nconst CATALOG: ModelProviderCatalogEntryDto[] = [\n providerEntry({\n id: 'anthropic',\n label: 'Anthropic',\n default_model: 'claude-opus-4-8',\n models: [\n {id: 'claude-opus-4-8', label: 'Claude Opus 4.8'},\n {id: 'claude-haiku-4-5', label: 'Claude Haiku 4.5'},\n ],\n }),\n providerEntry({\n id: 'openai',\n label: 'OpenAI',\n default_model: 'gpt-5.5-pro',\n models: [\n {id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'},\n {id: 'gpt-5-mini', label: 'GPT-5 Mini'},\n ],\n }),\n providerEntry({\n id: 'xai',\n label: 'xAI',\n default_model: 'grok-code-fast-1',\n models: [{id: 'grok-code-fast-1', label: 'Grok Code Fast 1'}],\n }),\n providerEntry({\n id: 'openrouter',\n label: 'OpenRouter',\n default_model: 'openrouter/auto',\n models: [{id: 'openrouter/auto', label: 'OpenRouter Auto'}],\n }),\n providerEntry({\n id: 'google',\n label: 'Google Gemini',\n default_model: 'gemini-3-pro',\n models: [{id: 'gemini-3-pro', label: 'Gemini 3 Pro'}],\n }),\n providerEntry({\n id: 'mistral',\n label: 'Mistral AI',\n default_model: 'codestral-latest',\n models: [{id: 'codestral-latest', label: 'Codestral Latest'}],\n }),\n providerEntry({\n id: 'groq',\n label: 'Groq',\n default_model: 'llama-4-fast',\n models: [{id: 'llama-4-fast', label: 'Llama 4 Fast'}],\n }),\n providerEntry({\n id: 'deepseek',\n label: 'DeepSeek',\n default_model: 'deepseek-coder',\n models: [{id: 'deepseek-coder', label: 'DeepSeek Coder'}],\n }),\n providerEntry({\n id: 'moonshotai',\n label: 'Moonshot AI',\n default_model: 'kimi-k2',\n models: [{id: 'kimi-k2', label: 'Kimi K2'}],\n }),\n providerEntry({\n id: 'azure-openai-responses',\n label: 'Azure OpenAI Responses',\n default_model: 'gpt-5.5-pro',\n models: [{id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'}],\n }),\n providerEntry({\n id: 'amazon-bedrock',\n label: 'Amazon Bedrock',\n support_status: 'unsupported',\n credential_fields: [],\n unsupported_reason: 'AWS cloud credentials are not supported yet.',\n models: [],\n }),\n];\n\nfunction ModelProvidersStory({scenario}: ModelProvidersStoryProps) {\n configureApiClient({\n baseUrl: 'https://api.example.test',\n fetchImpl: fetchForScenario(scenario),\n });\n\n const queryClient = useMemo(\n () => new QueryClient({defaultOptions: {queries: {retry: false}}}),\n [],\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <div className=\"mx-auto w-full max-w-[760px] bg-background-subtle-base p-24\">\n <WorkspaceModelProvidersSection workspaceId={WORKSPACE_ID} />\n </div>\n <Toaster />\n </QueryClientProvider>\n );\n}\n\nconst meta = {\n title: 'Agent/ProviderSettings',\n component: ModelProvidersStory,\n parameters: {layout: 'fullscreen'},\n args: {scenario: 'mixed'},\n} satisfies Meta<typeof ModelProvidersStory>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Playground: Story = {};\n\nexport const ManagedOnly: Story = {\n args: {scenario: 'managed-only'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await canvas.findByText('Managed by this instance. No workspace credentials are required.');\n await canvas.findByRole('button', {name: 'Use in a workflow'});\n },\n};\n\nexport const EmptyConfigured: Story = {\n args: {scenario: 'empty-configured'},\n};\n\nexport const AllConfigured: Story = {\n args: {scenario: 'all-configured'},\n};\n\nexport const CustomConfigured: Story = {\n args: {scenario: 'custom-configured'},\n};\n\nexport const Loading: Story = {\n args: {scenario: 'loading'},\n};\n\nexport const ConfigsError: Story = {\n args: {scenario: 'configs-error'},\n};\n\nexport const CatalogError: Story = {\n args: {scenario: 'catalog-error'},\n};\n\nexport const LongNames: Story = {\n args: {scenario: 'long-names'},\n};\n\nexport const FilteredAvailableProviders: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.type(\n await canvas.findByRole('searchbox', {name: 'Search providers'}),\n 'openrouter',\n );\n await canvas.findByRole('button', {name: 'Configure OpenRouter'});\n },\n};\n\nexport const NoMatchingAvailableProviders: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.type(\n await canvas.findByRole('searchbox', {name: 'Search providers'}),\n 'not-a-provider',\n );\n await canvas.findByRole('button', {name: 'Clear search'});\n },\n};\n\nexport const ConfigureModalOpen: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(await canvas.findByRole('button', {name: 'Configure Anthropic'}));\n await screen.findByLabelText('API key');\n },\n};\n\nexport const CustomProviderModalOpen: Story = {\n args: {scenario: 'empty-configured'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(await canvas.findByRole('button', {name: 'Configure custom provider'}));\n await screen.findByRole('dialog', {name: 'Add custom provider'});\n },\n};\n\nexport const WorkflowExampleModalOpen: Story = {\n args: {scenario: 'mixed'},\n play: async ({canvasElement}) => {\n const canvas = within(canvasElement);\n await userEvent.click(\n await canvas.findByRole('button', {name: 'Open Anthropic provider actions'}),\n );\n await userEvent.click(await screen.findByRole('menuitem', {name: 'View workflow example'}));\n await screen.findByRole('dialog', {name: 'Use Anthropic in a workflow'});\n },\n};\n\nfunction fetchForScenario(scenario: Scenario): typeof fetch {\n return (input) => {\n const url = requestUrl(input);\n if (scenario === 'loading') return new Promise<Response>(() => undefined);\n if (url.pathname.endsWith('/agent/model-provider-catalog')) {\n if (scenario === 'catalog-error') return Promise.resolve(errorResponse());\n return Promise.resolve(\n jsonResponse({\n providers: catalogForScenario(scenario),\n ...(scenario === 'managed-only'\n ? {workspace_providers: 'disabled', managed_provider_id: 'shipfox'}\n : {}),\n }),\n );\n }\n if (url.pathname.endsWith('/agent/model-providers')) {\n if (scenario === 'configs-error') return Promise.resolve(errorResponse());\n return Promise.resolve(jsonResponse(configsForScenario(scenario)));\n }\n return Promise.resolve(jsonResponse({}, {status: 404}));\n };\n}\n\nfunction catalogForScenario(scenario: Scenario): ModelProviderCatalogEntryDto[] {\n if (scenario === 'managed-only') {\n return [\n providerEntry({\n id: 'shipfox',\n label: 'Shipfox Managed',\n default_model: 'claude-opus-4-8',\n credential_fields: [],\n models: [\n {id: 'claude-opus-4-8', label: 'Claude Opus 4.8', api: 'anthropic-messages'},\n {id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro', api: 'openai-responses'},\n ],\n }),\n ];\n }\n if (scenario !== 'long-names') return CATALOG;\n return [\n providerEntry({\n id: 'anthropic',\n label: 'Anthropic Enterprise Production Claude Provider With Long Label',\n default_model: 'claude-opus-4-8',\n }),\n providerEntry({\n id: 'openai',\n label: 'OpenAI Platform Shared Workspace Credentials With Long Label',\n default_model: 'gpt-5.5-pro',\n models: [{id: 'gpt-5.5-pro', label: 'GPT-5.5 Pro'}],\n }),\n ];\n}\n\nfunction configsForScenario(scenario: Scenario) {\n if (scenario === 'managed-only') {\n return {configs: [], default_provider_id: null, default_harness_id: null};\n }\n if (scenario === 'empty-configured' || scenario === 'configs-error') {\n return {configs: [], default_provider_id: null, default_harness_id: null};\n }\n if (scenario === 'all-configured') {\n return {\n configs: CATALOG.filter((entry) => entry.support_status === 'supported').map((entry) =>\n providerConfig({\n provider_id: entry.id as SupportedModelProviderId,\n }),\n ),\n default_provider_id: 'anthropic',\n default_harness_id: null,\n };\n }\n if (scenario === 'custom-configured') {\n return {\n configs: [providerConfig({provider_id: 'anthropic'}), customProviderConfig()],\n default_provider_id: 'local-vllm',\n default_harness_id: null,\n };\n }\n return {\n configs: [providerConfig({provider_id: 'anthropic'})],\n default_provider_id: 'anthropic',\n default_harness_id: null,\n };\n}\n\nfunction customProviderConfig(): CustomModelProviderConfigDto {\n return {\n kind: 'custom',\n provider_id: 'local-vllm',\n display_name: 'Local vLLM',\n api: 'openai-completions',\n base_url: 'http://localhost:8000/v1',\n headers: [{name: 'x-region', value: 'us'}],\n secret_header_names: ['authorization'],\n models: [\n {id: 'llama-3.1', label: 'Llama 3.1'},\n {id: 'qwen-coder', label: 'Qwen Coder'},\n ],\n default_model: 'llama-3.1',\n created_at: '2026-05-08T00:00:00.000Z',\n updated_at: '2026-05-08T00:00:00.000Z',\n };\n}\n\nfunction providerEntry(\n overrides: Partial<ModelProviderCatalogEntryDto> = {},\n): ModelProviderCatalogEntryDto {\n return {\n id: 'anthropic',\n label: 'Anthropic',\n support_status: 'supported',\n default_model: null,\n credential_fields: [{key: 'api_key', label: 'API key', secret: true}],\n unsupported_reason: null,\n models: [{id: 'claude-opus-4-8', label: 'Claude Opus 4.8'}],\n ...overrides,\n };\n}\n\nfunction providerConfig(\n overrides: Partial<Omit<ModelProviderConfigDto, 'kind'>> = {},\n): ModelProviderConfigDto {\n return {\n kind: 'builtin',\n provider_id: 'anthropic',\n default_model: null,\n created_at: '2026-05-08T00:00:00.000Z',\n updated_at: '2026-05-08T00:00:00.000Z',\n ...overrides,\n };\n}\n\nfunction requestUrl(input: RequestInfo | URL): URL {\n if (typeof input === 'string') return new URL(input);\n if (input instanceof URL) return input;\n return new URL(input.url);\n}\n\nfunction jsonResponse(body: unknown, init: ResponseInit = {}) {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {'content-type': 'application/json'},\n ...init,\n });\n}\n\nfunction errorResponse() {\n return jsonResponse({code: 'server-error'}, {status: 500, statusText: 'Server error'});\n}\n"],"names":["configureApiClient","Toaster","QueryClient","QueryClientProvider","useMemo","screen","userEvent","within","WorkspaceModelProvidersSection","WORKSPACE_ID","CATALOG","providerEntry","id","label","default_model","models","support_status","credential_fields","unsupported_reason","ModelProvidersStory","scenario","baseUrl","fetchImpl","fetchForScenario","queryClient","defaultOptions","queries","retry","client","div","className","workspaceId","meta","title","component","parameters","layout","args","Playground","ManagedOnly","play","canvasElement","canvas","findByText","findByRole","name","EmptyConfigured","AllConfigured","CustomConfigured","Loading","ConfigsError","CatalogError","LongNames","FilteredAvailableProviders","type","NoMatchingAvailableProviders","ConfigureModalOpen","click","findByLabelText","CustomProviderModalOpen","WorkflowExampleModalOpen","input","url","requestUrl","Promise","undefined","pathname","endsWith","resolve","errorResponse","jsonResponse","providers","catalogForScenario","workspace_providers","managed_provider_id","configsForScenario","status","api","configs","default_provider_id","default_harness_id","filter","entry","map","providerConfig","provider_id","customProviderConfig","kind","display_name","base_url","headers","value","secret_header_names","created_at","updated_at","overrides","key","secret","URL","body","init","Response","JSON","stringify","code","statusText"],"mappings":"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"}
@@ -64,6 +64,8 @@ export type ProviderConfig = BuiltinProviderConfig | CustomProviderConfig;
64
64
  export interface ProviderCatalog {
65
65
  readonly providers: readonly ProviderCatalogEntry[];
66
66
  readonly workspaceProviders: WorkspaceProvidersPolicy;
67
+ readonly managedProviderId: string | null;
68
+ readonly instanceDefaultProviderId: string | null;
67
69
  }
68
70
  export interface ProviderConfiguration {
69
71
  readonly configs: readonly ProviderConfig[];
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/models.ts"],"sourcesContent":["export type HarnessId = 'pi' | 'claude';\nexport type WorkspaceProvidersPolicy = 'enabled' | 'disabled';\nexport type ProviderApi =\n | 'openai-completions'\n | 'openai-responses'\n | 'anthropic-messages'\n | 'google-generative-ai';\n\nexport interface HarnessDescriptor {\n readonly id: HarnessId;\n readonly label: string;\n readonly description: string;\n readonly supportedProviderIds: readonly string[];\n}\n\nexport interface AgentModel {\n readonly id: string;\n readonly label: string;\n readonly api?: ProviderApi | undefined;\n readonly contextWindow?: number | undefined;\n readonly maxOutputTokens?: number | undefined;\n readonly inputImage?: boolean | undefined;\n readonly reasoning?: boolean | undefined;\n}\n\nexport interface CredentialField {\n readonly key: string;\n readonly label: string;\n readonly secret: boolean;\n}\n\nexport interface SupportedProvider {\n readonly kind: 'supported';\n readonly id: string;\n readonly label: string;\n readonly defaultModel: string | null;\n readonly credentialFields: readonly CredentialField[];\n readonly models: readonly AgentModel[];\n}\n\nexport interface UnsupportedProvider {\n readonly kind: 'unsupported';\n readonly id: string;\n readonly label: string;\n readonly unsupportedReason: string;\n}\n\nexport type ProviderCatalogEntry = SupportedProvider | UnsupportedProvider;\n\nexport interface BuiltinProviderConfig {\n readonly kind: 'builtin';\n readonly providerId: string;\n readonly defaultModel: string | null;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport interface ProviderHeader {\n readonly name: string;\n readonly value: string;\n}\n\nexport interface CustomProviderConfig {\n readonly kind: 'custom';\n readonly providerId: string;\n readonly displayName: string;\n readonly api: ProviderApi;\n readonly baseUrl: string;\n readonly headers: readonly ProviderHeader[];\n readonly secretHeaderNames: readonly string[];\n readonly models: readonly AgentModel[];\n readonly defaultModel: string | null;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport type ProviderConfig = BuiltinProviderConfig | CustomProviderConfig;\n\nexport interface ProviderCatalog {\n readonly providers: readonly ProviderCatalogEntry[];\n readonly workspaceProviders: WorkspaceProvidersPolicy;\n}\n\nexport interface ProviderConfiguration {\n readonly configs: readonly ProviderConfig[];\n readonly defaultHarnessId: HarnessId | null;\n readonly defaultProviderId: string | null;\n}\n\nexport interface DefaultModelProviderSelection {\n readonly defaultProviderId: string | null;\n}\n\nexport interface DefaultHarnessSelection {\n readonly defaultHarnessId: HarnessId;\n}\n\nexport interface ProviderCredentialsCommand {\n defaultModel?: string | null | undefined;\n credentials: Record<string, string>;\n setAsDefault?: boolean | undefined;\n}\n\nexport interface CustomProviderHeaderCommand {\n name: string;\n value?: string | undefined;\n secret: boolean;\n keep?: boolean | undefined;\n}\n\nexport interface CustomProviderModelCommand {\n id: string;\n label: string;\n contextWindow?: number | undefined;\n maxOutputTokens?: number | undefined;\n inputImage?: boolean | undefined;\n reasoning?: boolean | undefined;\n}\n\nexport interface CreateCustomProviderCommand {\n slug: string;\n displayName: string;\n api: ProviderApi;\n baseUrl: string;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n models: CustomProviderModelCommand[];\n defaultModel?: string | null | undefined;\n}\n\nexport interface UpdateCustomProviderCommand {\n displayName?: string | undefined;\n api?: ProviderApi | undefined;\n baseUrl?: string | undefined;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n models?: CustomProviderModelCommand[] | undefined;\n defaultModel?: string | null | undefined;\n}\n\nexport interface DiscoverProviderModelsCommand {\n api?: ProviderApi | undefined;\n baseUrl?: string | undefined;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n}\n"],"names":[],"mappings":"AA4IA,WAKC"}
1
+ {"version":3,"sources":["../../src/core/models.ts"],"sourcesContent":["export type HarnessId = 'pi' | 'claude';\nexport type WorkspaceProvidersPolicy = 'enabled' | 'disabled';\nexport type ProviderApi =\n | 'openai-completions'\n | 'openai-responses'\n | 'anthropic-messages'\n | 'google-generative-ai';\n\nexport interface HarnessDescriptor {\n readonly id: HarnessId;\n readonly label: string;\n readonly description: string;\n readonly supportedProviderIds: readonly string[];\n}\n\nexport interface AgentModel {\n readonly id: string;\n readonly label: string;\n readonly api?: ProviderApi | undefined;\n readonly contextWindow?: number | undefined;\n readonly maxOutputTokens?: number | undefined;\n readonly inputImage?: boolean | undefined;\n readonly reasoning?: boolean | undefined;\n}\n\nexport interface CredentialField {\n readonly key: string;\n readonly label: string;\n readonly secret: boolean;\n}\n\nexport interface SupportedProvider {\n readonly kind: 'supported';\n readonly id: string;\n readonly label: string;\n readonly defaultModel: string | null;\n readonly credentialFields: readonly CredentialField[];\n readonly models: readonly AgentModel[];\n}\n\nexport interface UnsupportedProvider {\n readonly kind: 'unsupported';\n readonly id: string;\n readonly label: string;\n readonly unsupportedReason: string;\n}\n\nexport type ProviderCatalogEntry = SupportedProvider | UnsupportedProvider;\n\nexport interface BuiltinProviderConfig {\n readonly kind: 'builtin';\n readonly providerId: string;\n readonly defaultModel: string | null;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport interface ProviderHeader {\n readonly name: string;\n readonly value: string;\n}\n\nexport interface CustomProviderConfig {\n readonly kind: 'custom';\n readonly providerId: string;\n readonly displayName: string;\n readonly api: ProviderApi;\n readonly baseUrl: string;\n readonly headers: readonly ProviderHeader[];\n readonly secretHeaderNames: readonly string[];\n readonly models: readonly AgentModel[];\n readonly defaultModel: string | null;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport type ProviderConfig = BuiltinProviderConfig | CustomProviderConfig;\n\nexport interface ProviderCatalog {\n readonly providers: readonly ProviderCatalogEntry[];\n readonly workspaceProviders: WorkspaceProvidersPolicy;\n readonly managedProviderId: string | null;\n readonly instanceDefaultProviderId: string | null;\n}\n\nexport interface ProviderConfiguration {\n readonly configs: readonly ProviderConfig[];\n readonly defaultHarnessId: HarnessId | null;\n readonly defaultProviderId: string | null;\n}\n\nexport interface DefaultModelProviderSelection {\n readonly defaultProviderId: string | null;\n}\n\nexport interface DefaultHarnessSelection {\n readonly defaultHarnessId: HarnessId;\n}\n\nexport interface ProviderCredentialsCommand {\n defaultModel?: string | null | undefined;\n credentials: Record<string, string>;\n setAsDefault?: boolean | undefined;\n}\n\nexport interface CustomProviderHeaderCommand {\n name: string;\n value?: string | undefined;\n secret: boolean;\n keep?: boolean | undefined;\n}\n\nexport interface CustomProviderModelCommand {\n id: string;\n label: string;\n contextWindow?: number | undefined;\n maxOutputTokens?: number | undefined;\n inputImage?: boolean | undefined;\n reasoning?: boolean | undefined;\n}\n\nexport interface CreateCustomProviderCommand {\n slug: string;\n displayName: string;\n api: ProviderApi;\n baseUrl: string;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n models: CustomProviderModelCommand[];\n defaultModel?: string | null | undefined;\n}\n\nexport interface UpdateCustomProviderCommand {\n displayName?: string | undefined;\n api?: ProviderApi | undefined;\n baseUrl?: string | undefined;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n models?: CustomProviderModelCommand[] | undefined;\n defaultModel?: string | null | undefined;\n}\n\nexport interface DiscoverProviderModelsCommand {\n api?: ProviderApi | undefined;\n baseUrl?: string | undefined;\n apiKey?: string | undefined;\n headers?: CustomProviderHeaderCommand[] | undefined;\n}\n"],"names":[],"mappings":"AA8IA,WAKC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-policy.d.ts","sourceRoot":"","sources":["../../src/core/provider-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,IAAI,iBAAiB,CAE3F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAExF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAElF;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,GAAG,SAAS,GACnC,iBAAiB,GAAG,SAAS,CAG/B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,EAAE,SAAS,cAAc,EAAE,GACjC,iBAAiB,EAAE,CAGrB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAStF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAItE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM9D;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"provider-policy.d.ts","sourceRoot":"","sources":["../../src/core/provider-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,IAAI,iBAAiB,CAE3F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAExF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAElF;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,GAAG,SAAS,GACnC,iBAAiB,GAAG,SAAS,CAS/B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,EAAE,SAAS,cAAc,EAAE,GACjC,iBAAiB,EAAE,CAGrB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAStF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAItE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM9D;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -8,8 +8,14 @@ export function isManagedOnlyCatalog(catalog) {
8
8
  return catalog?.workspaceProviders === 'disabled';
9
9
  }
10
10
  export function managedProviderFromCatalog(catalog) {
11
- if (!isManagedOnlyCatalog(catalog)) return undefined;
12
- return catalog?.providers.find(isSupportedProvider);
11
+ const providers = catalog?.providers;
12
+ const managedProviderId = catalog?.managedProviderId;
13
+ if (providers === undefined) return undefined;
14
+ if (managedProviderId === null || managedProviderId === undefined) {
15
+ return isManagedOnlyCatalog(catalog) ? providers.find(isSupportedProvider) : undefined;
16
+ }
17
+ const managedEntry = providers.find((provider)=>provider.id === managedProviderId);
18
+ return managedEntry !== undefined && isSupportedProvider(managedEntry) ? managedEntry : undefined;
13
19
  }
14
20
  export function availableProviders(catalog, configs) {
15
21
  const configuredIds = new Set(configs.map((config)=>config.providerId));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/provider-policy.ts"],"sourcesContent":["import type {\n HarnessDescriptor,\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderConfig,\n SupportedProvider,\n} from './models.js';\n\nexport function isSupportedProvider(entry: ProviderCatalogEntry): entry is SupportedProvider {\n return entry.kind === 'supported';\n}\n\nexport function supportsProvider(harness: HarnessDescriptor, providerId: string): boolean {\n return harness.supportedProviderIds.includes(providerId);\n}\n\nexport function isManagedOnlyCatalog(catalog: ProviderCatalog | undefined): boolean {\n return catalog?.workspaceProviders === 'disabled';\n}\n\nexport function managedProviderFromCatalog(\n catalog: ProviderCatalog | undefined,\n): SupportedProvider | undefined {\n if (!isManagedOnlyCatalog(catalog)) return undefined;\n return catalog?.providers.find(isSupportedProvider);\n}\n\nexport function availableProviders(\n catalog: readonly ProviderCatalogEntry[],\n configs: readonly ProviderConfig[],\n): SupportedProvider[] {\n const configuredIds = new Set(configs.map((config) => config.providerId));\n return catalog.filter(isSupportedProvider).filter((provider) => !configuredIds.has(provider.id));\n}\n\nexport function providerMatchesSearch(entry: SupportedProvider, query: string): boolean {\n const needle = query.trim().toLocaleLowerCase();\n if (!needle) return true;\n const terms = [\n entry.id,\n entry.label,\n ...entry.models.flatMap((model) => [model.id, model.label]),\n ];\n return terms.some((term) => term.toLocaleLowerCase().includes(needle));\n}\n\nexport function customProviderCardMatchesSearch(query: string): boolean {\n const needle = query.trim().toLocaleLowerCase();\n if (!needle) return true;\n return 'custom provider openai anthropic google endpoint https public'.includes(needle);\n}\n\nexport function deriveProviderSlug(displayName: string): string {\n return displayName\n .trim()\n .toLocaleLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nconst PROVIDER_SLUG_RE = /^[a-z][a-z0-9-]{1,62}$/;\n\nexport function isProviderSlugValid(slug: string): boolean {\n return PROVIDER_SLUG_RE.test(slug);\n}\n"],"names":["isSupportedProvider","entry","kind","supportsProvider","harness","providerId","supportedProviderIds","includes","isManagedOnlyCatalog","catalog","workspaceProviders","managedProviderFromCatalog","undefined","providers","find","availableProviders","configs","configuredIds","Set","map","config","filter","provider","has","id","providerMatchesSearch","query","needle","trim","toLocaleLowerCase","terms","label","models","flatMap","model","some","term","customProviderCardMatchesSearch","deriveProviderSlug","displayName","replace","PROVIDER_SLUG_RE","isProviderSlugValid","slug","test"],"mappings":"AAQA,OAAO,SAASA,oBAAoBC,KAA2B;IAC7D,OAAOA,MAAMC,IAAI,KAAK;AACxB;AAEA,OAAO,SAASC,iBAAiBC,OAA0B,EAAEC,UAAkB;IAC7E,OAAOD,QAAQE,oBAAoB,CAACC,QAAQ,CAACF;AAC/C;AAEA,OAAO,SAASG,qBAAqBC,OAAoC;IACvE,OAAOA,SAASC,uBAAuB;AACzC;AAEA,OAAO,SAASC,2BACdF,OAAoC;IAEpC,IAAI,CAACD,qBAAqBC,UAAU,OAAOG;IAC3C,OAAOH,SAASI,UAAUC,KAAKd;AACjC;AAEA,OAAO,SAASe,mBACdN,OAAwC,EACxCO,OAAkC;IAElC,MAAMC,gBAAgB,IAAIC,IAAIF,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOf,UAAU;IACvE,OAAOI,QAAQY,MAAM,CAACrB,qBAAqBqB,MAAM,CAAC,CAACC,WAAa,CAACL,cAAcM,GAAG,CAACD,SAASE,EAAE;AAChG;AAEA,OAAO,SAASC,sBAAsBxB,KAAwB,EAAEyB,KAAa;IAC3E,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,MAAMG,QAAQ;QACZ7B,MAAMuB,EAAE;QACRvB,MAAM8B,KAAK;WACR9B,MAAM+B,MAAM,CAACC,OAAO,CAAC,CAACC,QAAU;gBAACA,MAAMV,EAAE;gBAAEU,MAAMH,KAAK;aAAC;KAC3D;IACD,OAAOD,MAAMK,IAAI,CAAC,CAACC,OAASA,KAAKP,iBAAiB,GAAGtB,QAAQ,CAACoB;AAChE;AAEA,OAAO,SAASU,gCAAgCX,KAAa;IAC3D,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,OAAO,gEAAgEpB,QAAQ,CAACoB;AAClF;AAEA,OAAO,SAASW,mBAAmBC,WAAmB;IACpD,OAAOA,YACJX,IAAI,GACJC,iBAAiB,GACjBW,OAAO,CAAC,eAAe,KACvBA,OAAO,CAAC,YAAY;AACzB;AAEA,MAAMC,mBAAmB;AAEzB,OAAO,SAASC,oBAAoBC,IAAY;IAC9C,OAAOF,iBAAiBG,IAAI,CAACD;AAC/B"}
1
+ {"version":3,"sources":["../../src/core/provider-policy.ts"],"sourcesContent":["import type {\n HarnessDescriptor,\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderConfig,\n SupportedProvider,\n} from './models.js';\n\nexport function isSupportedProvider(entry: ProviderCatalogEntry): entry is SupportedProvider {\n return entry.kind === 'supported';\n}\n\nexport function supportsProvider(harness: HarnessDescriptor, providerId: string): boolean {\n return harness.supportedProviderIds.includes(providerId);\n}\n\nexport function isManagedOnlyCatalog(catalog: ProviderCatalog | undefined): boolean {\n return catalog?.workspaceProviders === 'disabled';\n}\n\nexport function managedProviderFromCatalog(\n catalog: ProviderCatalog | undefined,\n): SupportedProvider | undefined {\n const providers = catalog?.providers;\n const managedProviderId = catalog?.managedProviderId;\n if (providers === undefined) return undefined;\n if (managedProviderId === null || managedProviderId === undefined) {\n return isManagedOnlyCatalog(catalog) ? providers.find(isSupportedProvider) : undefined;\n }\n const managedEntry = providers.find((provider) => provider.id === managedProviderId);\n return managedEntry !== undefined && isSupportedProvider(managedEntry) ? managedEntry : undefined;\n}\n\nexport function availableProviders(\n catalog: readonly ProviderCatalogEntry[],\n configs: readonly ProviderConfig[],\n): SupportedProvider[] {\n const configuredIds = new Set(configs.map((config) => config.providerId));\n return catalog.filter(isSupportedProvider).filter((provider) => !configuredIds.has(provider.id));\n}\n\nexport function providerMatchesSearch(entry: SupportedProvider, query: string): boolean {\n const needle = query.trim().toLocaleLowerCase();\n if (!needle) return true;\n const terms = [\n entry.id,\n entry.label,\n ...entry.models.flatMap((model) => [model.id, model.label]),\n ];\n return terms.some((term) => term.toLocaleLowerCase().includes(needle));\n}\n\nexport function customProviderCardMatchesSearch(query: string): boolean {\n const needle = query.trim().toLocaleLowerCase();\n if (!needle) return true;\n return 'custom provider openai anthropic google endpoint https public'.includes(needle);\n}\n\nexport function deriveProviderSlug(displayName: string): string {\n return displayName\n .trim()\n .toLocaleLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nconst PROVIDER_SLUG_RE = /^[a-z][a-z0-9-]{1,62}$/;\n\nexport function isProviderSlugValid(slug: string): boolean {\n return PROVIDER_SLUG_RE.test(slug);\n}\n"],"names":["isSupportedProvider","entry","kind","supportsProvider","harness","providerId","supportedProviderIds","includes","isManagedOnlyCatalog","catalog","workspaceProviders","managedProviderFromCatalog","providers","managedProviderId","undefined","find","managedEntry","provider","id","availableProviders","configs","configuredIds","Set","map","config","filter","has","providerMatchesSearch","query","needle","trim","toLocaleLowerCase","terms","label","models","flatMap","model","some","term","customProviderCardMatchesSearch","deriveProviderSlug","displayName","replace","PROVIDER_SLUG_RE","isProviderSlugValid","slug","test"],"mappings":"AAQA,OAAO,SAASA,oBAAoBC,KAA2B;IAC7D,OAAOA,MAAMC,IAAI,KAAK;AACxB;AAEA,OAAO,SAASC,iBAAiBC,OAA0B,EAAEC,UAAkB;IAC7E,OAAOD,QAAQE,oBAAoB,CAACC,QAAQ,CAACF;AAC/C;AAEA,OAAO,SAASG,qBAAqBC,OAAoC;IACvE,OAAOA,SAASC,uBAAuB;AACzC;AAEA,OAAO,SAASC,2BACdF,OAAoC;IAEpC,MAAMG,YAAYH,SAASG;IAC3B,MAAMC,oBAAoBJ,SAASI;IACnC,IAAID,cAAcE,WAAW,OAAOA;IACpC,IAAID,sBAAsB,QAAQA,sBAAsBC,WAAW;QACjE,OAAON,qBAAqBC,WAAWG,UAAUG,IAAI,CAACf,uBAAuBc;IAC/E;IACA,MAAME,eAAeJ,UAAUG,IAAI,CAAC,CAACE,WAAaA,SAASC,EAAE,KAAKL;IAClE,OAAOG,iBAAiBF,aAAad,oBAAoBgB,gBAAgBA,eAAeF;AAC1F;AAEA,OAAO,SAASK,mBACdV,OAAwC,EACxCW,OAAkC;IAElC,MAAMC,gBAAgB,IAAIC,IAAIF,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOnB,UAAU;IACvE,OAAOI,QAAQgB,MAAM,CAACzB,qBAAqByB,MAAM,CAAC,CAACR,WAAa,CAACI,cAAcK,GAAG,CAACT,SAASC,EAAE;AAChG;AAEA,OAAO,SAASS,sBAAsB1B,KAAwB,EAAE2B,KAAa;IAC3E,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,MAAMG,QAAQ;QACZ/B,MAAMiB,EAAE;QACRjB,MAAMgC,KAAK;WACRhC,MAAMiC,MAAM,CAACC,OAAO,CAAC,CAACC,QAAU;gBAACA,MAAMlB,EAAE;gBAAEkB,MAAMH,KAAK;aAAC;KAC3D;IACD,OAAOD,MAAMK,IAAI,CAAC,CAACC,OAASA,KAAKP,iBAAiB,GAAGxB,QAAQ,CAACsB;AAChE;AAEA,OAAO,SAASU,gCAAgCX,KAAa;IAC3D,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,OAAO,gEAAgEtB,QAAQ,CAACsB;AAClF;AAEA,OAAO,SAASW,mBAAmBC,WAAmB;IACpD,OAAOA,YACJX,IAAI,GACJC,iBAAiB,GACjBW,OAAO,CAAC,eAAe,KACvBA,OAAO,CAAC,YAAY;AACzB;AAEA,MAAMC,mBAAmB;AAEzB,OAAO,SAASC,oBAAoBC,IAAY;IAC9C,OAAOF,iBAAiBG,IAAI,CAACD;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-provider-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/model-provider-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,mCAAmC,EACnC,4BAA4B,EAC5B,+BAA+B,EAC/B,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,EAC5B,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,6BAA6B,EAC7B,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,+BAA+B,GAAG,eAAe,CAK5F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B,GAAG,oBAAoB,CAqBhG;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,mCAAmC,GAC5C,qBAAqB,CAMvB;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kCAAkC,GAC3C,6BAA6B,CAE/B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,4BAA4B,GACrC,uBAAuB,CAEzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,8BAA8B,GAAG,cAAc,CAIvF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,sBAAsB,GAAG,qBAAqB,CAQ7F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,oBAAoB,CAcjG"}
1
+ {"version":3,"file":"model-provider-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/model-provider-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,mCAAmC,EACnC,4BAA4B,EAC5B,+BAA+B,EAC/B,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,EAC5B,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,6BAA6B,EAC7B,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,+BAA+B,GAAG,eAAe,CAO5F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B,GAAG,oBAAoB,CAqBhG;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,mCAAmC,GAC5C,qBAAqB,CAMvB;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kCAAkC,GAC3C,6BAA6B,CAE/B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,4BAA4B,GACrC,uBAAuB,CAEzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,8BAA8B,GAAG,cAAc,CAIvF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,sBAAsB,GAAG,qBAAqB,CAQ7F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,oBAAoB,CAcjG"}
@@ -1,7 +1,9 @@
1
1
  export function toProviderCatalog(response) {
2
2
  return {
3
3
  providers: response.providers.map(toProviderCatalogEntry),
4
- workspaceProviders: response.workspace_providers ?? 'enabled'
4
+ workspaceProviders: response.workspace_providers ?? 'enabled',
5
+ managedProviderId: response.managed_provider_id ?? null,
6
+ instanceDefaultProviderId: response.instance_default_provider_id ?? null
5
7
  };
6
8
  }
7
9
  export function toProviderCatalogEntry(entry) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/model-provider-mapper.ts"],"sourcesContent":["import type {\n CustomModelProviderConfigDto,\n ListModelProviderConfigsResponseDto,\n ModelProviderCatalogEntryDto,\n ModelProviderCatalogResponseDto,\n ModelProviderConfigDto,\n ModelProviderConfigResponseDto,\n SetDefaultHarnessResponseDto,\n SetDefaultModelProviderResponseDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n AgentModel,\n BuiltinProviderConfig,\n CustomProviderConfig,\n DefaultHarnessSelection,\n DefaultModelProviderSelection,\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderConfig,\n ProviderConfiguration,\n} from '#core/models.js';\n\nexport function toProviderCatalog(response: ModelProviderCatalogResponseDto): ProviderCatalog {\n return {\n providers: response.providers.map(toProviderCatalogEntry),\n workspaceProviders: response.workspace_providers ?? 'enabled',\n };\n}\n\nexport function toProviderCatalogEntry(entry: ModelProviderCatalogEntryDto): ProviderCatalogEntry {\n if (entry.support_status === 'unsupported') {\n return {\n kind: 'unsupported',\n id: entry.id,\n label: entry.label,\n unsupportedReason: entry.unsupported_reason ?? 'Unsupported provider',\n };\n }\n return {\n kind: 'supported',\n id: entry.id,\n label: entry.label,\n defaultModel: entry.default_model,\n credentialFields: entry.credential_fields.map((field) => ({\n key: field.key,\n label: field.label,\n secret: field.secret,\n })),\n models: entry.models.map(toAgentModel),\n };\n}\n\nexport function toProviderConfiguration(\n response: ListModelProviderConfigsResponseDto,\n): ProviderConfiguration {\n return {\n configs: response.configs.map(toProviderConfig),\n defaultHarnessId: response.default_harness_id,\n defaultProviderId: response.default_provider_id,\n };\n}\n\nexport function toDefaultModelProviderSelection(\n response: SetDefaultModelProviderResponseDto,\n): DefaultModelProviderSelection {\n return {defaultProviderId: response.default_provider_id};\n}\n\nexport function toDefaultHarnessSelection(\n response: SetDefaultHarnessResponseDto,\n): DefaultHarnessSelection {\n return {defaultHarnessId: response.default_harness_id};\n}\n\nexport function toProviderConfig(config: ModelProviderConfigResponseDto): ProviderConfig {\n return config.kind === 'builtin'\n ? toBuiltinProviderConfig(config)\n : toCustomProviderConfig(config);\n}\n\nexport function toBuiltinProviderConfig(config: ModelProviderConfigDto): BuiltinProviderConfig {\n return {\n kind: 'builtin',\n providerId: config.provider_id,\n defaultModel: config.default_model,\n createdAt: config.created_at,\n updatedAt: config.updated_at,\n };\n}\n\nexport function toCustomProviderConfig(config: CustomModelProviderConfigDto): CustomProviderConfig {\n return {\n kind: 'custom',\n providerId: config.provider_id,\n displayName: config.display_name,\n api: config.api,\n baseUrl: config.base_url,\n headers: config.headers.map((header) => ({name: header.name, value: header.value})),\n secretHeaderNames: config.secret_header_names,\n models: config.models.map(toAgentModel),\n defaultModel: config.default_model,\n createdAt: config.created_at,\n updatedAt: config.updated_at,\n };\n}\n\nfunction toAgentModel(model: {\n id: string;\n label: string;\n api?: AgentModel['api'];\n context_window?: number | undefined;\n max_output_tokens?: number | undefined;\n input_image?: boolean | undefined;\n reasoning?: boolean | undefined;\n}): AgentModel {\n return {\n id: model.id,\n label: model.label,\n ...(model.api === undefined ? {} : {api: model.api}),\n ...(model.context_window === undefined ? {} : {contextWindow: model.context_window}),\n ...(model.max_output_tokens === undefined ? {} : {maxOutputTokens: model.max_output_tokens}),\n ...(model.input_image === undefined ? {} : {inputImage: model.input_image}),\n ...(model.reasoning === undefined ? {} : {reasoning: model.reasoning}),\n };\n}\n"],"names":["toProviderCatalog","response","providers","map","toProviderCatalogEntry","workspaceProviders","workspace_providers","entry","support_status","kind","id","label","unsupportedReason","unsupported_reason","defaultModel","default_model","credentialFields","credential_fields","field","key","secret","models","toAgentModel","toProviderConfiguration","configs","toProviderConfig","defaultHarnessId","default_harness_id","defaultProviderId","default_provider_id","toDefaultModelProviderSelection","toDefaultHarnessSelection","config","toBuiltinProviderConfig","toCustomProviderConfig","providerId","provider_id","createdAt","created_at","updatedAt","updated_at","displayName","display_name","api","baseUrl","base_url","headers","header","name","value","secretHeaderNames","secret_header_names","model","undefined","context_window","contextWindow","max_output_tokens","maxOutputTokens","input_image","inputImage","reasoning"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/hooks/api/model-provider-mapper.ts"],"sourcesContent":["import type {\n CustomModelProviderConfigDto,\n ListModelProviderConfigsResponseDto,\n ModelProviderCatalogEntryDto,\n ModelProviderCatalogResponseDto,\n ModelProviderConfigDto,\n ModelProviderConfigResponseDto,\n SetDefaultHarnessResponseDto,\n SetDefaultModelProviderResponseDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n AgentModel,\n BuiltinProviderConfig,\n CustomProviderConfig,\n DefaultHarnessSelection,\n DefaultModelProviderSelection,\n ProviderCatalog,\n ProviderCatalogEntry,\n ProviderConfig,\n ProviderConfiguration,\n} from '#core/models.js';\n\nexport function toProviderCatalog(response: ModelProviderCatalogResponseDto): ProviderCatalog {\n return {\n providers: response.providers.map(toProviderCatalogEntry),\n workspaceProviders: response.workspace_providers ?? 'enabled',\n managedProviderId: response.managed_provider_id ?? null,\n instanceDefaultProviderId: response.instance_default_provider_id ?? null,\n };\n}\n\nexport function toProviderCatalogEntry(entry: ModelProviderCatalogEntryDto): ProviderCatalogEntry {\n if (entry.support_status === 'unsupported') {\n return {\n kind: 'unsupported',\n id: entry.id,\n label: entry.label,\n unsupportedReason: entry.unsupported_reason ?? 'Unsupported provider',\n };\n }\n return {\n kind: 'supported',\n id: entry.id,\n label: entry.label,\n defaultModel: entry.default_model,\n credentialFields: entry.credential_fields.map((field) => ({\n key: field.key,\n label: field.label,\n secret: field.secret,\n })),\n models: entry.models.map(toAgentModel),\n };\n}\n\nexport function toProviderConfiguration(\n response: ListModelProviderConfigsResponseDto,\n): ProviderConfiguration {\n return {\n configs: response.configs.map(toProviderConfig),\n defaultHarnessId: response.default_harness_id,\n defaultProviderId: response.default_provider_id,\n };\n}\n\nexport function toDefaultModelProviderSelection(\n response: SetDefaultModelProviderResponseDto,\n): DefaultModelProviderSelection {\n return {defaultProviderId: response.default_provider_id};\n}\n\nexport function toDefaultHarnessSelection(\n response: SetDefaultHarnessResponseDto,\n): DefaultHarnessSelection {\n return {defaultHarnessId: response.default_harness_id};\n}\n\nexport function toProviderConfig(config: ModelProviderConfigResponseDto): ProviderConfig {\n return config.kind === 'builtin'\n ? toBuiltinProviderConfig(config)\n : toCustomProviderConfig(config);\n}\n\nexport function toBuiltinProviderConfig(config: ModelProviderConfigDto): BuiltinProviderConfig {\n return {\n kind: 'builtin',\n providerId: config.provider_id,\n defaultModel: config.default_model,\n createdAt: config.created_at,\n updatedAt: config.updated_at,\n };\n}\n\nexport function toCustomProviderConfig(config: CustomModelProviderConfigDto): CustomProviderConfig {\n return {\n kind: 'custom',\n providerId: config.provider_id,\n displayName: config.display_name,\n api: config.api,\n baseUrl: config.base_url,\n headers: config.headers.map((header) => ({name: header.name, value: header.value})),\n secretHeaderNames: config.secret_header_names,\n models: config.models.map(toAgentModel),\n defaultModel: config.default_model,\n createdAt: config.created_at,\n updatedAt: config.updated_at,\n };\n}\n\nfunction toAgentModel(model: {\n id: string;\n label: string;\n api?: AgentModel['api'];\n context_window?: number | undefined;\n max_output_tokens?: number | undefined;\n input_image?: boolean | undefined;\n reasoning?: boolean | undefined;\n}): AgentModel {\n return {\n id: model.id,\n label: model.label,\n ...(model.api === undefined ? {} : {api: model.api}),\n ...(model.context_window === undefined ? {} : {contextWindow: model.context_window}),\n ...(model.max_output_tokens === undefined ? {} : {maxOutputTokens: model.max_output_tokens}),\n ...(model.input_image === undefined ? {} : {inputImage: model.input_image}),\n ...(model.reasoning === undefined ? {} : {reasoning: model.reasoning}),\n };\n}\n"],"names":["toProviderCatalog","response","providers","map","toProviderCatalogEntry","workspaceProviders","workspace_providers","managedProviderId","managed_provider_id","instanceDefaultProviderId","instance_default_provider_id","entry","support_status","kind","id","label","unsupportedReason","unsupported_reason","defaultModel","default_model","credentialFields","credential_fields","field","key","secret","models","toAgentModel","toProviderConfiguration","configs","toProviderConfig","defaultHarnessId","default_harness_id","defaultProviderId","default_provider_id","toDefaultModelProviderSelection","toDefaultHarnessSelection","config","toBuiltinProviderConfig","toCustomProviderConfig","providerId","provider_id","createdAt","created_at","updatedAt","updated_at","displayName","display_name","api","baseUrl","base_url","headers","header","name","value","secretHeaderNames","secret_header_names","model","undefined","context_window","contextWindow","max_output_tokens","maxOutputTokens","input_image","inputImage","reasoning"],"mappings":"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"}