@shipfox/client-agent 5.0.0 → 6.0.1

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 (163) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +45 -0
  3. package/dist/components/available-provider-card.d.ts +2 -2
  4. package/dist/components/available-provider-card.d.ts.map +1 -1
  5. package/dist/components/available-provider-card.js.map +1 -1
  6. package/dist/components/available-providers-grid.d.ts +2 -2
  7. package/dist/components/available-providers-grid.d.ts.map +1 -1
  8. package/dist/components/available-providers-grid.js +1 -1
  9. package/dist/components/available-providers-grid.js.map +1 -1
  10. package/dist/components/change-default-model-form.d.ts +3 -4
  11. package/dist/components/change-default-model-form.d.ts.map +1 -1
  12. package/dist/components/change-default-model-form.js +2 -4
  13. package/dist/components/change-default-model-form.js.map +1 -1
  14. package/dist/components/custom-model-provider-api-options.d.ts +3 -3
  15. package/dist/components/custom-model-provider-api-options.d.ts.map +1 -1
  16. package/dist/components/custom-model-provider-api-options.js.map +1 -1
  17. package/dist/components/custom-model-provider-form.d.ts +2 -2
  18. package/dist/components/custom-model-provider-form.d.ts.map +1 -1
  19. package/dist/components/custom-model-provider-form.js +12 -10
  20. package/dist/components/custom-model-provider-form.js.map +1 -1
  21. package/dist/components/custom-model-provider-form.stories.d.ts.map +1 -1
  22. package/dist/components/custom-model-provider-form.stories.js +11 -11
  23. package/dist/components/custom-model-provider-form.stories.js.map +1 -1
  24. package/dist/components/custom-model-provider-payload.d.ts +9 -9
  25. package/dist/components/custom-model-provider-payload.d.ts.map +1 -1
  26. package/dist/components/custom-model-provider-payload.js +42 -26
  27. package/dist/components/custom-model-provider-payload.js.map +1 -1
  28. package/dist/components/custom-model-provider-slug.d.ts +1 -1
  29. package/dist/components/custom-model-provider-slug.d.ts.map +1 -1
  30. package/dist/components/custom-model-provider-slug.js +3 -3
  31. package/dist/components/custom-model-provider-slug.js.map +1 -1
  32. package/dist/components/default-model-field.d.ts +2 -2
  33. package/dist/components/default-model-field.d.ts.map +1 -1
  34. package/dist/components/default-model-field.js +1 -1
  35. package/dist/components/default-model-field.js.map +1 -1
  36. package/dist/components/harness-availability.d.ts +4 -7
  37. package/dist/components/harness-availability.d.ts.map +1 -1
  38. package/dist/components/harness-availability.js +2 -11
  39. package/dist/components/harness-availability.js.map +1 -1
  40. package/dist/components/harnesses-section.d.ts.map +1 -1
  41. package/dist/components/harnesses-section.js +4 -6
  42. package/dist/components/harnesses-section.js.map +1 -1
  43. package/dist/components/model-provider-usage-modal.d.ts +2 -2
  44. package/dist/components/model-provider-usage-modal.d.ts.map +1 -1
  45. package/dist/components/model-provider-usage-modal.js +4 -4
  46. package/dist/components/model-provider-usage-modal.js.map +1 -1
  47. package/dist/components/model-provider-usage-modal.stories.d.ts.map +1 -1
  48. package/dist/components/model-provider-usage-modal.stories.js +14 -16
  49. package/dist/components/model-provider-usage-modal.stories.js.map +1 -1
  50. package/dist/components/model-provider-usage-target.d.ts +5 -5
  51. package/dist/components/model-provider-usage-target.d.ts.map +1 -1
  52. package/dist/components/model-provider-usage-target.js +10 -8
  53. package/dist/components/model-provider-usage-target.js.map +1 -1
  54. package/dist/components/model-providers-section.d.ts.map +1 -1
  55. package/dist/components/model-providers-section.js +112 -94
  56. package/dist/components/model-providers-section.js.map +1 -1
  57. package/dist/components/model-providers-section.stories.js +8 -4
  58. package/dist/components/model-providers-section.stories.js.map +1 -1
  59. package/dist/components/test-and-save-form.d.ts +3 -3
  60. package/dist/components/test-and-save-form.d.ts.map +1 -1
  61. package/dist/components/test-and-save-form.js +7 -7
  62. package/dist/components/test-and-save-form.js.map +1 -1
  63. package/dist/core/harness-policy.d.ts +11 -0
  64. package/dist/core/harness-policy.d.ts.map +1 -0
  65. package/dist/core/harness-policy.js +71 -0
  66. package/dist/core/harness-policy.js.map +1 -0
  67. package/dist/core/model-provider-management-reducer.d.ts +51 -0
  68. package/dist/core/model-provider-management-reducer.d.ts.map +1 -0
  69. package/dist/core/model-provider-management-reducer.js +43 -0
  70. package/dist/core/model-provider-management-reducer.js.map +1 -0
  71. package/dist/core/models.d.ts +120 -0
  72. package/dist/core/models.d.ts.map +1 -0
  73. package/dist/core/models.js +3 -0
  74. package/dist/core/models.js.map +1 -0
  75. package/dist/core/onboarding-reducer.d.ts +36 -0
  76. package/dist/core/onboarding-reducer.d.ts.map +1 -0
  77. package/dist/core/onboarding-reducer.js +54 -0
  78. package/dist/core/onboarding-reducer.js.map +1 -0
  79. package/dist/core/provider-policy.d.ts +9 -0
  80. package/dist/core/provider-policy.d.ts.map +1 -0
  81. package/dist/core/provider-policy.js +37 -0
  82. package/dist/core/provider-policy.js.map +1 -0
  83. package/dist/feature.d.ts +7 -0
  84. package/dist/feature.d.ts.map +1 -1
  85. package/dist/feature.js +10 -9
  86. package/dist/feature.js.map +1 -1
  87. package/dist/hooks/api/model-provider-command-mapper.d.ts +11 -0
  88. package/dist/hooks/api/model-provider-command-mapper.d.ts.map +1 -0
  89. package/dist/hooks/api/model-provider-command-mapper.js +144 -0
  90. package/dist/hooks/api/model-provider-command-mapper.js.map +1 -0
  91. package/dist/hooks/api/model-provider-mapper.d.ts +11 -0
  92. package/dist/hooks/api/model-provider-mapper.d.ts.map +1 -0
  93. package/dist/hooks/api/model-provider-mapper.js +94 -0
  94. package/dist/hooks/api/model-provider-mapper.js.map +1 -0
  95. package/dist/hooks/api/model-providers.d.ts +60 -295
  96. package/dist/hooks/api/model-providers.d.ts.map +1 -1
  97. package/dist/hooks/api/model-providers.js +51 -37
  98. package/dist/hooks/api/model-providers.js.map +1 -1
  99. package/dist/pages/model-provider-onboarding-page.d.ts.map +1 -1
  100. package/dist/pages/model-provider-onboarding-page.js +57 -45
  101. package/dist/pages/model-provider-onboarding-page.js.map +1 -1
  102. package/dist/routes/inputs.d.ts +4 -0
  103. package/dist/routes/inputs.d.ts.map +1 -0
  104. package/dist/routes/inputs.js +12 -0
  105. package/dist/routes/inputs.js.map +1 -0
  106. package/dist/routes/model-provider.d.ts.map +1 -1
  107. package/dist/routes/model-provider.js +4 -5
  108. package/dist/routes/model-provider.js.map +1 -1
  109. package/dist/tsconfig.test.tsbuildinfo +1 -1
  110. package/package.json +9 -10
  111. package/src/components/available-provider-card.tsx +2 -2
  112. package/src/components/available-providers-grid.tsx +3 -3
  113. package/src/components/change-default-model-form.tsx +5 -6
  114. package/src/components/custom-model-provider-api-options.ts +3 -3
  115. package/src/components/custom-model-provider-form.stories.tsx +13 -13
  116. package/src/components/custom-model-provider-form.tsx +19 -12
  117. package/src/components/custom-model-provider-payload.test.ts +22 -22
  118. package/src/components/custom-model-provider-payload.ts +69 -54
  119. package/src/components/custom-model-provider-slug.test.ts +1 -1
  120. package/src/components/custom-model-provider-slug.ts +6 -3
  121. package/src/components/default-model-field.tsx +5 -5
  122. package/src/components/harness-availability.test.ts +13 -10
  123. package/src/components/harness-availability.ts +4 -28
  124. package/src/components/harnesses-section.tsx +7 -11
  125. package/src/components/model-provider-usage-modal.stories.tsx +18 -23
  126. package/src/components/model-provider-usage-modal.test.tsx +35 -7
  127. package/src/components/model-provider-usage-modal.tsx +12 -16
  128. package/src/components/model-provider-usage-target.ts +15 -18
  129. package/src/components/model-providers-section.stories.tsx +4 -1
  130. package/src/components/model-providers-section.tsx +112 -125
  131. package/src/components/test-and-save-form.tsx +13 -17
  132. package/src/core/harness-policy.test.ts +15 -0
  133. package/src/core/harness-policy.ts +83 -0
  134. package/src/core/model-provider-management-reducer.test.ts +59 -0
  135. package/src/core/model-provider-management-reducer.ts +72 -0
  136. package/src/core/models.ts +143 -0
  137. package/src/core/onboarding-reducer.test.ts +44 -0
  138. package/src/core/onboarding-reducer.ts +64 -0
  139. package/src/core/provider-policy.ts +53 -0
  140. package/src/feature.ts +12 -10
  141. package/src/hooks/api/model-provider-command-mapper.ts +122 -0
  142. package/src/hooks/api/model-provider-mapper.test.ts +27 -0
  143. package/src/hooks/api/model-provider-mapper.ts +120 -0
  144. package/src/hooks/api/model-providers.test.ts +15 -15
  145. package/src/hooks/api/model-providers.ts +146 -81
  146. package/src/pages/model-provider-onboarding-page.tsx +62 -56
  147. package/src/routes/inputs.test.ts +11 -0
  148. package/src/routes/inputs.ts +9 -0
  149. package/src/routes/model-provider.tsx +4 -3
  150. package/test/fixtures/model-providers.ts +1 -1
  151. package/tsconfig.build.tsbuildinfo +1 -1
  152. package/vercel.json +5 -0
  153. package/dist/components/provider-search.d.ts +0 -4
  154. package/dist/components/provider-search.d.ts.map +0 -1
  155. package/dist/components/provider-search.js +0 -13
  156. package/dist/components/provider-search.js.map +0 -1
  157. package/dist/components/supported-model-provider-catalog-entry.d.ts +0 -8
  158. package/dist/components/supported-model-provider-catalog-entry.d.ts.map +0 -1
  159. package/dist/components/supported-model-provider-catalog-entry.js +0 -9
  160. package/dist/components/supported-model-provider-catalog-entry.js.map +0 -1
  161. package/src/components/provider-search.test.ts +0 -45
  162. package/src/components/provider-search.ts +0 -18
  163. package/src/components/supported-model-provider-catalog-entry.ts +0 -19
@@ -0,0 +1,36 @@
1
+ import type { HarnessId, SupportedProvider } from './models.js';
2
+ export type OnboardingState = {
3
+ readonly step: 'choose-harness';
4
+ } | {
5
+ readonly step: 'choose-provider';
6
+ readonly harnessId: HarnessId;
7
+ } | {
8
+ readonly step: 'configure-provider';
9
+ readonly harnessId: HarnessId;
10
+ readonly provider: SupportedProvider;
11
+ readonly error?: string | undefined;
12
+ } | {
13
+ readonly step: 'saving-default-harness';
14
+ readonly harnessId: HarnessId;
15
+ readonly provider: SupportedProvider;
16
+ readonly error?: string | undefined;
17
+ };
18
+ export type OnboardingAction = {
19
+ readonly type: 'harness-selected';
20
+ readonly harnessId: HarnessId;
21
+ } | {
22
+ readonly type: 'back';
23
+ } | {
24
+ readonly type: 'provider-selected';
25
+ readonly provider: SupportedProvider;
26
+ } | {
27
+ readonly type: 'provider-saved';
28
+ } | {
29
+ readonly type: 'default-harness-failed';
30
+ readonly message: string;
31
+ } | {
32
+ readonly type: 'default-harness-saved';
33
+ };
34
+ export declare const initialOnboardingState: OnboardingState;
35
+ export declare function onboardingReducer(state: OnboardingState, action: OnboardingAction): OnboardingState;
36
+ //# sourceMappingURL=onboarding-reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-reducer.d.ts","sourceRoot":"","sources":["../../src/core/onboarding-reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAE9D,MAAM,MAAM,eAAe,GACvB;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAC,GACjC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAAC,GACjE;IACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAEN,MAAM,MAAM,gBAAgB,GACxB;IAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAAC,GAClE;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GACvB;IAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAC,GAC1E;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAC,GACjC;IAAC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;CAAC,CAAC;AAE7C,eAAO,MAAM,sBAAsB,EAAE,eAA0C,CAAC;AAehF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,GACvB,eAAe,CAmBjB"}
@@ -0,0 +1,54 @@
1
+ export const initialOnboardingState = {
2
+ step: 'choose-harness'
3
+ };
4
+ function goBack(state) {
5
+ switch(state.step){
6
+ case 'choose-harness':
7
+ return state;
8
+ case 'choose-provider':
9
+ return initialOnboardingState;
10
+ case 'configure-provider':
11
+ return {
12
+ step: 'choose-provider',
13
+ harnessId: state.harnessId
14
+ };
15
+ case 'saving-default-harness':
16
+ return {
17
+ step: 'configure-provider',
18
+ harnessId: state.harnessId,
19
+ provider: state.provider
20
+ };
21
+ }
22
+ }
23
+ export function onboardingReducer(state, action) {
24
+ switch(action.type){
25
+ case 'harness-selected':
26
+ return {
27
+ step: 'choose-provider',
28
+ harnessId: action.harnessId
29
+ };
30
+ case 'back':
31
+ return goBack(state);
32
+ case 'provider-selected':
33
+ return state.step === 'choose-provider' ? {
34
+ step: 'configure-provider',
35
+ harnessId: state.harnessId,
36
+ provider: action.provider
37
+ } : state;
38
+ case 'provider-saved':
39
+ return state.step === 'configure-provider' ? {
40
+ step: 'saving-default-harness',
41
+ harnessId: state.harnessId,
42
+ provider: state.provider
43
+ } : state;
44
+ case 'default-harness-failed':
45
+ return state.step === 'saving-default-harness' ? {
46
+ ...state,
47
+ error: action.message
48
+ } : state;
49
+ case 'default-harness-saved':
50
+ return initialOnboardingState;
51
+ }
52
+ }
53
+
54
+ //# sourceMappingURL=onboarding-reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/onboarding-reducer.ts"],"sourcesContent":["import type {HarnessId, SupportedProvider} from './models.js';\n\nexport type OnboardingState =\n | {readonly step: 'choose-harness'}\n | {readonly step: 'choose-provider'; readonly harnessId: HarnessId}\n | {\n readonly step: 'configure-provider';\n readonly harnessId: HarnessId;\n readonly provider: SupportedProvider;\n readonly error?: string | undefined;\n }\n | {\n readonly step: 'saving-default-harness';\n readonly harnessId: HarnessId;\n readonly provider: SupportedProvider;\n readonly error?: string | undefined;\n };\n\nexport type OnboardingAction =\n | {readonly type: 'harness-selected'; readonly harnessId: HarnessId}\n | {readonly type: 'back'}\n | {readonly type: 'provider-selected'; readonly provider: SupportedProvider}\n | {readonly type: 'provider-saved'}\n | {readonly type: 'default-harness-failed'; readonly message: string}\n | {readonly type: 'default-harness-saved'};\n\nexport const initialOnboardingState: OnboardingState = {step: 'choose-harness'};\n\nfunction goBack(state: OnboardingState): OnboardingState {\n switch (state.step) {\n case 'choose-harness':\n return state;\n case 'choose-provider':\n return initialOnboardingState;\n case 'configure-provider':\n return {step: 'choose-provider', harnessId: state.harnessId};\n case 'saving-default-harness':\n return {step: 'configure-provider', harnessId: state.harnessId, provider: state.provider};\n }\n}\n\nexport function onboardingReducer(\n state: OnboardingState,\n action: OnboardingAction,\n): OnboardingState {\n switch (action.type) {\n case 'harness-selected':\n return {step: 'choose-provider', harnessId: action.harnessId};\n case 'back':\n return goBack(state);\n case 'provider-selected':\n return state.step === 'choose-provider'\n ? {step: 'configure-provider', harnessId: state.harnessId, provider: action.provider}\n : state;\n case 'provider-saved':\n return state.step === 'configure-provider'\n ? {step: 'saving-default-harness', harnessId: state.harnessId, provider: state.provider}\n : state;\n case 'default-harness-failed':\n return state.step === 'saving-default-harness' ? {...state, error: action.message} : state;\n case 'default-harness-saved':\n return initialOnboardingState;\n }\n}\n"],"names":["initialOnboardingState","step","goBack","state","harnessId","provider","onboardingReducer","action","type","error","message"],"mappings":"AA0BA,OAAO,MAAMA,yBAA0C;IAACC,MAAM;AAAgB,EAAE;AAEhF,SAASC,OAAOC,KAAsB;IACpC,OAAQA,MAAMF,IAAI;QAChB,KAAK;YACH,OAAOE;QACT,KAAK;YACH,OAAOH;QACT,KAAK;YACH,OAAO;gBAACC,MAAM;gBAAmBG,WAAWD,MAAMC,SAAS;YAAA;QAC7D,KAAK;YACH,OAAO;gBAACH,MAAM;gBAAsBG,WAAWD,MAAMC,SAAS;gBAAEC,UAAUF,MAAME,QAAQ;YAAA;IAC5F;AACF;AAEA,OAAO,SAASC,kBACdH,KAAsB,EACtBI,MAAwB;IAExB,OAAQA,OAAOC,IAAI;QACjB,KAAK;YACH,OAAO;gBAACP,MAAM;gBAAmBG,WAAWG,OAAOH,SAAS;YAAA;QAC9D,KAAK;YACH,OAAOF,OAAOC;QAChB,KAAK;YACH,OAAOA,MAAMF,IAAI,KAAK,oBAClB;gBAACA,MAAM;gBAAsBG,WAAWD,MAAMC,SAAS;gBAAEC,UAAUE,OAAOF,QAAQ;YAAA,IAClFF;QACN,KAAK;YACH,OAAOA,MAAMF,IAAI,KAAK,uBAClB;gBAACA,MAAM;gBAA0BG,WAAWD,MAAMC,SAAS;gBAAEC,UAAUF,MAAME,QAAQ;YAAA,IACrFF;QACN,KAAK;YACH,OAAOA,MAAMF,IAAI,KAAK,2BAA2B;gBAAC,GAAGE,KAAK;gBAAEM,OAAOF,OAAOG,OAAO;YAAA,IAAIP;QACvF,KAAK;YACH,OAAOH;IACX;AACF"}
@@ -0,0 +1,9 @@
1
+ import type { HarnessDescriptor, ProviderCatalogEntry, ProviderConfig, SupportedProvider } from './models.js';
2
+ export declare function isSupportedProvider(entry: ProviderCatalogEntry): entry is SupportedProvider;
3
+ export declare function supportsProvider(harness: HarnessDescriptor, providerId: string): boolean;
4
+ export declare function availableProviders(catalog: readonly ProviderCatalogEntry[], configs: readonly ProviderConfig[]): SupportedProvider[];
5
+ export declare function providerMatchesSearch(entry: SupportedProvider, query: string): boolean;
6
+ export declare function customProviderCardMatchesSearch(query: string): boolean;
7
+ export declare function deriveProviderSlug(displayName: string): string;
8
+ export declare function isProviderSlugValid(slug: string): boolean;
9
+ //# sourceMappingURL=provider-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-policy.d.ts","sourceRoot":"","sources":["../../src/core/provider-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,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,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"}
@@ -0,0 +1,37 @@
1
+ export function isSupportedProvider(entry) {
2
+ return entry.kind === 'supported';
3
+ }
4
+ export function supportsProvider(harness, providerId) {
5
+ return harness.supportedProviderIds.includes(providerId);
6
+ }
7
+ export function availableProviders(catalog, configs) {
8
+ const configuredIds = new Set(configs.map((config)=>config.providerId));
9
+ return catalog.filter(isSupportedProvider).filter((provider)=>!configuredIds.has(provider.id));
10
+ }
11
+ export function providerMatchesSearch(entry, query) {
12
+ const needle = query.trim().toLocaleLowerCase();
13
+ if (!needle) return true;
14
+ const terms = [
15
+ entry.id,
16
+ entry.label,
17
+ ...entry.models.flatMap((model)=>[
18
+ model.id,
19
+ model.label
20
+ ])
21
+ ];
22
+ return terms.some((term)=>term.toLocaleLowerCase().includes(needle));
23
+ }
24
+ export function customProviderCardMatchesSearch(query) {
25
+ const needle = query.trim().toLocaleLowerCase();
26
+ if (!needle) return true;
27
+ return 'custom provider openai anthropic google endpoint https public'.includes(needle);
28
+ }
29
+ export function deriveProviderSlug(displayName) {
30
+ return displayName.trim().toLocaleLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
31
+ }
32
+ const PROVIDER_SLUG_RE = /^[a-z][a-z0-9-]{1,62}$/;
33
+ export function isProviderSlugValid(slug) {
34
+ return PROVIDER_SLUG_RE.test(slug);
35
+ }
36
+
37
+ //# sourceMappingURL=provider-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/provider-policy.ts"],"sourcesContent":["import type {\n HarnessDescriptor,\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 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","availableProviders","catalog","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":"AAOA,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,mBACdC,OAAwC,EACxCC,OAAkC;IAElC,MAAMC,gBAAgB,IAAIC,IAAIF,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOT,UAAU;IACvE,OAAOI,QAAQM,MAAM,CAACf,qBAAqBe,MAAM,CAAC,CAACC,WAAa,CAACL,cAAcM,GAAG,CAACD,SAASE,EAAE;AAChG;AAEA,OAAO,SAASC,sBAAsBlB,KAAwB,EAAEmB,KAAa;IAC3E,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,MAAMG,QAAQ;QACZvB,MAAMiB,EAAE;QACRjB,MAAMwB,KAAK;WACRxB,MAAMyB,MAAM,CAACC,OAAO,CAAC,CAACC,QAAU;gBAACA,MAAMV,EAAE;gBAAEU,MAAMH,KAAK;aAAC;KAC3D;IACD,OAAOD,MAAMK,IAAI,CAAC,CAACC,OAASA,KAAKP,iBAAiB,GAAGhB,QAAQ,CAACc;AAChE;AAEA,OAAO,SAASU,gCAAgCX,KAAa;IAC3D,MAAMC,SAASD,MAAME,IAAI,GAAGC,iBAAiB;IAC7C,IAAI,CAACF,QAAQ,OAAO;IACpB,OAAO,gEAAgEd,QAAQ,CAACc;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"}
package/dist/feature.d.ts CHANGED
@@ -1,3 +1,10 @@
1
+ export declare const agentSettingsSections: readonly [{
2
+ readonly id: "settings.agents";
3
+ readonly pathSegment: "agents";
4
+ readonly label: "Agents";
5
+ readonly icon: "robot2Line";
6
+ readonly order: 400;
7
+ }];
1
8
  export declare const agentFeature: {
2
9
  readonly id: "shipfox.agent";
3
10
  readonly routes: readonly [{
@@ -1 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAuBvB,CAAC"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;;;;;;EAQkB,CAAC;AAErD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAevB,CAAC"}
package/dist/feature.js CHANGED
@@ -1,4 +1,13 @@
1
1
  import { defineClientFeature } from '@shipfox/client-shell';
2
+ export const agentSettingsSections = [
3
+ {
4
+ id: 'settings.agents',
5
+ pathSegment: 'agents',
6
+ label: 'Agents',
7
+ icon: 'robot2Line',
8
+ order: 400
9
+ }
10
+ ];
2
11
  export const agentFeature = defineClientFeature({
3
12
  id: 'shipfox.agent',
4
13
  routes: [
@@ -13,15 +22,7 @@ export const agentFeature = defineClientFeature({
13
22
  impl: '@shipfox/client-agent/routes/agents-settings'
14
23
  }
15
24
  ],
16
- settingsSections: [
17
- {
18
- id: 'settings.agents',
19
- pathSegment: 'agents',
20
- label: 'Agents',
21
- icon: 'robot2Line',
22
- order: 400
23
- }
24
- ]
25
+ settingsSections: agentSettingsSections
25
26
  });
26
27
 
27
28
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/feature.ts"],"sourcesContent":["import {defineClientFeature} from '@shipfox/client-shell';\n\nexport const agentFeature = defineClientFeature({\n id: 'shipfox.agent',\n routes: [\n {\n path: '/workspaces/$wid/model-provider',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-agent/routes/model-provider',\n },\n {\n path: '/workspaces/$wid/settings/agents',\n parent: 'workspaceSettings',\n impl: '@shipfox/client-agent/routes/agents-settings',\n },\n ],\n settingsSections: [\n {\n id: 'settings.agents',\n pathSegment: 'agents',\n label: 'Agents',\n icon: 'robot2Line',\n order: 400,\n },\n ],\n});\n"],"names":["defineClientFeature","agentFeature","id","routes","path","parent","impl","settingsSections","pathSegment","label","icon","order"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,wBAAwB;AAE1D,OAAO,MAAMC,eAAeD,oBAAoB;IAC9CE,IAAI;IACJC,QAAQ;QACN;YACEC,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;KACD;IACDC,kBAAkB;QAChB;YACEL,IAAI;YACJM,aAAa;YACbC,OAAO;YACPC,MAAM;YACNC,OAAO;QACT;KACD;AACH,GAAG"}
1
+ {"version":3,"sources":["../src/feature.ts"],"sourcesContent":["import {defineClientFeature, type SettingsSectionEntry} from '@shipfox/client-shell';\n\nexport const agentSettingsSections = [\n {\n id: 'settings.agents',\n pathSegment: 'agents',\n label: 'Agents',\n icon: 'robot2Line',\n order: 400,\n },\n] as const satisfies readonly SettingsSectionEntry[];\n\nexport const agentFeature = defineClientFeature({\n id: 'shipfox.agent',\n routes: [\n {\n path: '/workspaces/$wid/model-provider',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-agent/routes/model-provider',\n },\n {\n path: '/workspaces/$wid/settings/agents',\n parent: 'workspaceSettings',\n impl: '@shipfox/client-agent/routes/agents-settings',\n },\n ],\n settingsSections: agentSettingsSections,\n});\n"],"names":["defineClientFeature","agentSettingsSections","id","pathSegment","label","icon","order","agentFeature","routes","path","parent","impl","settingsSections"],"mappings":"AAAA,SAAQA,mBAAmB,QAAkC,wBAAwB;AAErF,OAAO,MAAMC,wBAAwB;IACnC;QACEC,IAAI;QACJC,aAAa;QACbC,OAAO;QACPC,MAAM;QACNC,OAAO;IACT;CACD,CAAoD;AAErD,OAAO,MAAMC,eAAeP,oBAAoB;IAC9CE,IAAI;IACJM,QAAQ;QACN;YACEC,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;QACA;YACEF,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;KACD;IACDC,kBAAkBX;AACpB,GAAG"}
@@ -0,0 +1,11 @@
1
+ import type { CreateCustomModelProviderBodyDto, DiscoverCustomModelProviderModelsBodyDto, DiscoverCustomModelProviderModelsBySlugBodyDto, SetDefaultHarnessBodyDto, SetDefaultModelProviderBodyDto, UpdateCustomModelProviderBodyDto, UpdateModelProviderConfigBodyDto, UpdateModelProviderDefaultModelBodyDto } from '@shipfox/api-agent-dto';
2
+ import type { CreateCustomProviderCommand, DiscoverProviderModelsCommand, ProviderCredentialsCommand, UpdateCustomProviderCommand } from '#core/models.js';
3
+ export declare function toProviderCredentialsBody(command: ProviderCredentialsCommand): UpdateModelProviderConfigBodyDto;
4
+ export declare function toDefaultModelBody(defaultModel: string | null): UpdateModelProviderDefaultModelBodyDto;
5
+ export declare function toDefaultProviderBody(providerId: string): SetDefaultModelProviderBodyDto;
6
+ export declare function toDefaultHarnessBody(harnessId: 'pi' | 'claude'): SetDefaultHarnessBodyDto;
7
+ export declare function toCreateCustomProviderBody(command: CreateCustomProviderCommand): CreateCustomModelProviderBodyDto;
8
+ export declare function toUpdateCustomProviderBody(command: UpdateCustomProviderCommand): UpdateCustomModelProviderBodyDto;
9
+ export declare function toDiscoverModelsBody(command: DiscoverProviderModelsCommand): DiscoverCustomModelProviderModelsBodyDto;
10
+ export declare function toDiscoverModelsBySlugBody(command: DiscoverProviderModelsCommand): DiscoverCustomModelProviderModelsBySlugBodyDto;
11
+ //# sourceMappingURL=model-provider-command-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-provider-command-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/model-provider-command-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,wCAAwC,EACxC,8CAA8C,EAC9C,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,gCAAgC,EAChC,sCAAsC,EACvC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,2BAA2B,EAG3B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,gCAAgC,CAMlC;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,sCAAsC,CAExC;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,8BAA8B,CAExF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,IAAI,GAAG,QAAQ,GAAG,wBAAwB,CAEzF;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,gCAAgC,CAWlC;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,gCAAgC,CAUlC;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,6BAA6B,GACrC,wCAAwC,CAY1C;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,6BAA6B,GACrC,8CAA8C,CAOhD"}
@@ -0,0 +1,144 @@
1
+ export function toProviderCredentialsBody(command) {
2
+ return {
3
+ ...command.defaultModel === undefined ? {} : {
4
+ default_model: command.defaultModel
5
+ },
6
+ credentials: command.credentials,
7
+ ...command.setAsDefault ? {
8
+ set_as_default: true
9
+ } : {}
10
+ };
11
+ }
12
+ export function toDefaultModelBody(defaultModel) {
13
+ return {
14
+ default_model: defaultModel
15
+ };
16
+ }
17
+ export function toDefaultProviderBody(providerId) {
18
+ return {
19
+ provider_id: providerId
20
+ };
21
+ }
22
+ export function toDefaultHarnessBody(harnessId) {
23
+ return {
24
+ harness_id: harnessId
25
+ };
26
+ }
27
+ export function toCreateCustomProviderBody(command) {
28
+ return {
29
+ slug: command.slug,
30
+ display_name: command.displayName,
31
+ api: command.api,
32
+ base_url: command.baseUrl,
33
+ ...command.apiKey ? {
34
+ api_key: command.apiKey
35
+ } : {},
36
+ ...command.headers?.length ? {
37
+ headers: command.headers.map(toCreateHeader)
38
+ } : {},
39
+ models: command.models.map(toModel),
40
+ ...command.defaultModel ? {
41
+ default_model: command.defaultModel
42
+ } : {}
43
+ };
44
+ }
45
+ export function toUpdateCustomProviderBody(command) {
46
+ return {
47
+ ...command.displayName === undefined ? {} : {
48
+ display_name: command.displayName
49
+ },
50
+ ...command.api === undefined ? {} : {
51
+ api: command.api
52
+ },
53
+ ...command.baseUrl === undefined ? {} : {
54
+ base_url: command.baseUrl
55
+ },
56
+ ...command.apiKey === undefined ? {} : {
57
+ api_key: command.apiKey
58
+ },
59
+ ...command.headers === undefined ? {} : {
60
+ headers: command.headers.map(toUpdateHeader)
61
+ },
62
+ ...command.models === undefined ? {} : {
63
+ models: command.models.map(toModel)
64
+ },
65
+ ...command.defaultModel === undefined ? {} : {
66
+ default_model: command.defaultModel
67
+ }
68
+ };
69
+ }
70
+ export function toDiscoverModelsBody(command) {
71
+ if (command.api === undefined || command.baseUrl === undefined) {
72
+ throw new Error('Model discovery requires an API and base URL.');
73
+ }
74
+ return {
75
+ api: command.api,
76
+ base_url: command.baseUrl,
77
+ ...command.apiKey ? {
78
+ api_key: command.apiKey
79
+ } : {},
80
+ ...command.headers?.length ? {
81
+ headers: command.headers.flatMap(({ name, value })=>value ? [
82
+ {
83
+ name,
84
+ value
85
+ }
86
+ ] : [])
87
+ } : {}
88
+ };
89
+ }
90
+ export function toDiscoverModelsBySlugBody(command) {
91
+ return {
92
+ ...command.api === undefined ? {} : {
93
+ api: command.api
94
+ },
95
+ ...command.baseUrl === undefined ? {} : {
96
+ base_url: command.baseUrl
97
+ },
98
+ ...command.apiKey === undefined ? {} : {
99
+ api_key: command.apiKey
100
+ },
101
+ ...command.headers === undefined ? {} : {
102
+ headers: command.headers.map(toUpdateHeader)
103
+ }
104
+ };
105
+ }
106
+ function toCreateHeader(header) {
107
+ return {
108
+ name: header.name,
109
+ value: header.value ?? '',
110
+ secret: header.secret
111
+ };
112
+ }
113
+ function toUpdateHeader(header) {
114
+ return {
115
+ name: header.name,
116
+ ...header.value === undefined ? {} : {
117
+ value: header.value
118
+ },
119
+ secret: header.secret,
120
+ ...header.keep ? {
121
+ keep: true
122
+ } : {}
123
+ };
124
+ }
125
+ function toModel(model) {
126
+ return {
127
+ id: model.id,
128
+ label: model.label,
129
+ ...model.contextWindow === undefined ? {} : {
130
+ context_window: model.contextWindow
131
+ },
132
+ ...model.maxOutputTokens === undefined ? {} : {
133
+ max_output_tokens: model.maxOutputTokens
134
+ },
135
+ ...model.inputImage ? {
136
+ input_image: true
137
+ } : {},
138
+ ...model.reasoning ? {
139
+ reasoning: true
140
+ } : {}
141
+ };
142
+ }
143
+
144
+ //# sourceMappingURL=model-provider-command-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/api/model-provider-command-mapper.ts"],"sourcesContent":["import type {\n CreateCustomModelProviderBodyDto,\n DiscoverCustomModelProviderModelsBodyDto,\n DiscoverCustomModelProviderModelsBySlugBodyDto,\n SetDefaultHarnessBodyDto,\n SetDefaultModelProviderBodyDto,\n UpdateCustomModelProviderBodyDto,\n UpdateModelProviderConfigBodyDto,\n UpdateModelProviderDefaultModelBodyDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n CreateCustomProviderCommand,\n CustomProviderHeaderCommand,\n CustomProviderModelCommand,\n DiscoverProviderModelsCommand,\n ProviderCredentialsCommand,\n UpdateCustomProviderCommand,\n} from '#core/models.js';\n\nexport function toProviderCredentialsBody(\n command: ProviderCredentialsCommand,\n): UpdateModelProviderConfigBodyDto {\n return {\n ...(command.defaultModel === undefined ? {} : {default_model: command.defaultModel}),\n credentials: command.credentials,\n ...(command.setAsDefault ? {set_as_default: true} : {}),\n };\n}\n\nexport function toDefaultModelBody(\n defaultModel: string | null,\n): UpdateModelProviderDefaultModelBodyDto {\n return {default_model: defaultModel};\n}\n\nexport function toDefaultProviderBody(providerId: string): SetDefaultModelProviderBodyDto {\n return {provider_id: providerId};\n}\n\nexport function toDefaultHarnessBody(harnessId: 'pi' | 'claude'): SetDefaultHarnessBodyDto {\n return {harness_id: harnessId};\n}\n\nexport function toCreateCustomProviderBody(\n command: CreateCustomProviderCommand,\n): CreateCustomModelProviderBodyDto {\n return {\n slug: command.slug,\n display_name: command.displayName,\n api: command.api,\n base_url: command.baseUrl,\n ...(command.apiKey ? {api_key: command.apiKey} : {}),\n ...(command.headers?.length ? {headers: command.headers.map(toCreateHeader)} : {}),\n models: command.models.map(toModel),\n ...(command.defaultModel ? {default_model: command.defaultModel} : {}),\n };\n}\n\nexport function toUpdateCustomProviderBody(\n command: UpdateCustomProviderCommand,\n): UpdateCustomModelProviderBodyDto {\n return {\n ...(command.displayName === undefined ? {} : {display_name: command.displayName}),\n ...(command.api === undefined ? {} : {api: command.api}),\n ...(command.baseUrl === undefined ? {} : {base_url: command.baseUrl}),\n ...(command.apiKey === undefined ? {} : {api_key: command.apiKey}),\n ...(command.headers === undefined ? {} : {headers: command.headers.map(toUpdateHeader)}),\n ...(command.models === undefined ? {} : {models: command.models.map(toModel)}),\n ...(command.defaultModel === undefined ? {} : {default_model: command.defaultModel}),\n };\n}\n\nexport function toDiscoverModelsBody(\n command: DiscoverProviderModelsCommand,\n): DiscoverCustomModelProviderModelsBodyDto {\n if (command.api === undefined || command.baseUrl === undefined) {\n throw new Error('Model discovery requires an API and base URL.');\n }\n return {\n api: command.api,\n base_url: command.baseUrl,\n ...(command.apiKey ? {api_key: command.apiKey} : {}),\n ...(command.headers?.length\n ? {headers: command.headers.flatMap(({name, value}) => (value ? [{name, value}] : []))}\n : {}),\n };\n}\n\nexport function toDiscoverModelsBySlugBody(\n command: DiscoverProviderModelsCommand,\n): DiscoverCustomModelProviderModelsBySlugBodyDto {\n return {\n ...(command.api === undefined ? {} : {api: command.api}),\n ...(command.baseUrl === undefined ? {} : {base_url: command.baseUrl}),\n ...(command.apiKey === undefined ? {} : {api_key: command.apiKey}),\n ...(command.headers === undefined ? {} : {headers: command.headers.map(toUpdateHeader)}),\n };\n}\n\nfunction toCreateHeader(header: CustomProviderHeaderCommand) {\n return {name: header.name, value: header.value ?? '', secret: header.secret};\n}\n\nfunction toUpdateHeader(header: CustomProviderHeaderCommand) {\n return {\n name: header.name,\n ...(header.value === undefined ? {} : {value: header.value}),\n secret: header.secret,\n ...(header.keep ? {keep: true} : {}),\n };\n}\n\nfunction toModel(model: CustomProviderModelCommand) {\n return {\n id: model.id,\n label: model.label,\n ...(model.contextWindow === undefined ? {} : {context_window: model.contextWindow}),\n ...(model.maxOutputTokens === undefined ? {} : {max_output_tokens: model.maxOutputTokens}),\n ...(model.inputImage ? {input_image: true} : {}),\n ...(model.reasoning ? {reasoning: true} : {}),\n };\n}\n"],"names":["toProviderCredentialsBody","command","defaultModel","undefined","default_model","credentials","setAsDefault","set_as_default","toDefaultModelBody","toDefaultProviderBody","providerId","provider_id","toDefaultHarnessBody","harnessId","harness_id","toCreateCustomProviderBody","slug","display_name","displayName","api","base_url","baseUrl","apiKey","api_key","headers","length","map","toCreateHeader","models","toModel","toUpdateCustomProviderBody","toUpdateHeader","toDiscoverModelsBody","Error","flatMap","name","value","toDiscoverModelsBySlugBody","header","secret","keep","model","id","label","contextWindow","context_window","maxOutputTokens","max_output_tokens","inputImage","input_image","reasoning"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CustomModelProviderConfigDto, ListModelProviderConfigsResponseDto, ModelProviderCatalogEntryDto, ModelProviderCatalogResponseDto, ModelProviderConfigDto, ModelProviderConfigResponseDto, SetDefaultHarnessResponseDto, SetDefaultModelProviderResponseDto } from '@shipfox/api-agent-dto';
2
+ import type { BuiltinProviderConfig, CustomProviderConfig, DefaultHarnessSelection, DefaultModelProviderSelection, ProviderCatalog, ProviderCatalogEntry, ProviderConfig, ProviderConfiguration } from '#core/models.js';
3
+ export declare function toProviderCatalog(response: ModelProviderCatalogResponseDto): ProviderCatalog;
4
+ export declare function toProviderCatalogEntry(entry: ModelProviderCatalogEntryDto): ProviderCatalogEntry;
5
+ export declare function toProviderConfiguration(response: ListModelProviderConfigsResponseDto): ProviderConfiguration;
6
+ export declare function toDefaultModelProviderSelection(response: SetDefaultModelProviderResponseDto): DefaultModelProviderSelection;
7
+ export declare function toDefaultHarnessSelection(response: SetDefaultHarnessResponseDto): DefaultHarnessSelection;
8
+ export declare function toProviderConfig(config: ModelProviderConfigResponseDto): ProviderConfig;
9
+ export declare function toBuiltinProviderConfig(config: ModelProviderConfigDto): BuiltinProviderConfig;
10
+ export declare function toCustomProviderConfig(config: CustomModelProviderConfigDto): CustomProviderConfig;
11
+ //# sourceMappingURL=model-provider-mapper.d.ts.map
@@ -0,0 +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,CAE5F;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"}
@@ -0,0 +1,94 @@
1
+ export function toProviderCatalog(response) {
2
+ return {
3
+ providers: response.providers.map(toProviderCatalogEntry)
4
+ };
5
+ }
6
+ export function toProviderCatalogEntry(entry) {
7
+ if (entry.support_status === 'unsupported') {
8
+ return {
9
+ kind: 'unsupported',
10
+ id: entry.id,
11
+ label: entry.label,
12
+ unsupportedReason: entry.unsupported_reason ?? 'Unsupported provider'
13
+ };
14
+ }
15
+ return {
16
+ kind: 'supported',
17
+ id: entry.id,
18
+ label: entry.label,
19
+ defaultModel: entry.default_model,
20
+ credentialFields: entry.credential_fields.map((field)=>({
21
+ key: field.key,
22
+ label: field.label,
23
+ secret: field.secret
24
+ })),
25
+ models: entry.models.map(toAgentModel)
26
+ };
27
+ }
28
+ export function toProviderConfiguration(response) {
29
+ return {
30
+ configs: response.configs.map(toProviderConfig),
31
+ defaultHarnessId: response.default_harness_id,
32
+ defaultProviderId: response.default_provider_id
33
+ };
34
+ }
35
+ export function toDefaultModelProviderSelection(response) {
36
+ return {
37
+ defaultProviderId: response.default_provider_id
38
+ };
39
+ }
40
+ export function toDefaultHarnessSelection(response) {
41
+ return {
42
+ defaultHarnessId: response.default_harness_id
43
+ };
44
+ }
45
+ export function toProviderConfig(config) {
46
+ return config.kind === 'builtin' ? toBuiltinProviderConfig(config) : toCustomProviderConfig(config);
47
+ }
48
+ export function toBuiltinProviderConfig(config) {
49
+ return {
50
+ kind: 'builtin',
51
+ providerId: config.provider_id,
52
+ defaultModel: config.default_model,
53
+ createdAt: config.created_at,
54
+ updatedAt: config.updated_at
55
+ };
56
+ }
57
+ export function toCustomProviderConfig(config) {
58
+ return {
59
+ kind: 'custom',
60
+ providerId: config.provider_id,
61
+ displayName: config.display_name,
62
+ api: config.api,
63
+ baseUrl: config.base_url,
64
+ headers: config.headers.map((header)=>({
65
+ name: header.name,
66
+ value: header.value
67
+ })),
68
+ secretHeaderNames: config.secret_header_names,
69
+ models: config.models.map(toAgentModel),
70
+ defaultModel: config.default_model,
71
+ createdAt: config.created_at,
72
+ updatedAt: config.updated_at
73
+ };
74
+ }
75
+ function toAgentModel(model) {
76
+ return {
77
+ id: model.id,
78
+ label: model.label,
79
+ ...model.context_window === undefined ? {} : {
80
+ contextWindow: model.context_window
81
+ },
82
+ ...model.max_output_tokens === undefined ? {} : {
83
+ maxOutputTokens: model.max_output_tokens
84
+ },
85
+ ...model.input_image === undefined ? {} : {
86
+ inputImage: model.input_image
87
+ },
88
+ ...model.reasoning === undefined ? {} : {
89
+ reasoning: model.reasoning
90
+ }
91
+ };
92
+ }
93
+
94
+ //# sourceMappingURL=model-provider-mapper.js.map
@@ -0,0 +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 {providers: response.providers.map(toProviderCatalogEntry)};\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 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.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","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","context_window","undefined","contextWindow","max_output_tokens","maxOutputTokens","input_image","inputImage","reasoning"],"mappings":"AAsBA,OAAO,SAASA,kBAAkBC,QAAyC;IACzE,OAAO;QAACC,WAAWD,SAASC,SAAS,CAACC,GAAG,CAACC;IAAuB;AACnE;AAEA,OAAO,SAASA,uBAAuBC,KAAmC;IACxE,IAAIA,MAAMC,cAAc,KAAK,eAAe;QAC1C,OAAO;YACLC,MAAM;YACNC,IAAIH,MAAMG,EAAE;YACZC,OAAOJ,MAAMI,KAAK;YAClBC,mBAAmBL,MAAMM,kBAAkB,IAAI;QACjD;IACF;IACA,OAAO;QACLJ,MAAM;QACNC,IAAIH,MAAMG,EAAE;QACZC,OAAOJ,MAAMI,KAAK;QAClBG,cAAcP,MAAMQ,aAAa;QACjCC,kBAAkBT,MAAMU,iBAAiB,CAACZ,GAAG,CAAC,CAACa,QAAW,CAAA;gBACxDC,KAAKD,MAAMC,GAAG;gBACdR,OAAOO,MAAMP,KAAK;gBAClBS,QAAQF,MAAME,MAAM;YACtB,CAAA;QACAC,QAAQd,MAAMc,MAAM,CAAChB,GAAG,CAACiB;IAC3B;AACF;AAEA,OAAO,SAASC,wBACdpB,QAA6C;IAE7C,OAAO;QACLqB,SAASrB,SAASqB,OAAO,CAACnB,GAAG,CAACoB;QAC9BC,kBAAkBvB,SAASwB,kBAAkB;QAC7CC,mBAAmBzB,SAAS0B,mBAAmB;IACjD;AACF;AAEA,OAAO,SAASC,gCACd3B,QAA4C;IAE5C,OAAO;QAACyB,mBAAmBzB,SAAS0B,mBAAmB;IAAA;AACzD;AAEA,OAAO,SAASE,0BACd5B,QAAsC;IAEtC,OAAO;QAACuB,kBAAkBvB,SAASwB,kBAAkB;IAAA;AACvD;AAEA,OAAO,SAASF,iBAAiBO,MAAsC;IACrE,OAAOA,OAAOvB,IAAI,KAAK,YACnBwB,wBAAwBD,UACxBE,uBAAuBF;AAC7B;AAEA,OAAO,SAASC,wBAAwBD,MAA8B;IACpE,OAAO;QACLvB,MAAM;QACN0B,YAAYH,OAAOI,WAAW;QAC9BtB,cAAckB,OAAOjB,aAAa;QAClCsB,WAAWL,OAAOM,UAAU;QAC5BC,WAAWP,OAAOQ,UAAU;IAC9B;AACF;AAEA,OAAO,SAASN,uBAAuBF,MAAoC;IACzE,OAAO;QACLvB,MAAM;QACN0B,YAAYH,OAAOI,WAAW;QAC9BK,aAAaT,OAAOU,YAAY;QAChCC,KAAKX,OAAOW,GAAG;QACfC,SAASZ,OAAOa,QAAQ;QACxBC,SAASd,OAAOc,OAAO,CAACzC,GAAG,CAAC,CAAC0C,SAAY,CAAA;gBAACC,MAAMD,OAAOC,IAAI;gBAAEC,OAAOF,OAAOE,KAAK;YAAA,CAAA;QAChFC,mBAAmBlB,OAAOmB,mBAAmB;QAC7C9B,QAAQW,OAAOX,MAAM,CAAChB,GAAG,CAACiB;QAC1BR,cAAckB,OAAOjB,aAAa;QAClCsB,WAAWL,OAAOM,UAAU;QAC5BC,WAAWP,OAAOQ,UAAU;IAC9B;AACF;AAEA,SAASlB,aAAa8B,KAOrB;IACC,OAAO;QACL1C,IAAI0C,MAAM1C,EAAE;QACZC,OAAOyC,MAAMzC,KAAK;QAClB,GAAIyC,MAAMC,cAAc,KAAKC,YAAY,CAAC,IAAI;YAACC,eAAeH,MAAMC,cAAc;QAAA,CAAC;QACnF,GAAID,MAAMI,iBAAiB,KAAKF,YAAY,CAAC,IAAI;YAACG,iBAAiBL,MAAMI,iBAAiB;QAAA,CAAC;QAC3F,GAAIJ,MAAMM,WAAW,KAAKJ,YAAY,CAAC,IAAI;YAACK,YAAYP,MAAMM,WAAW;QAAA,CAAC;QAC1E,GAAIN,MAAMQ,SAAS,KAAKN,YAAY,CAAC,IAAI;YAACM,WAAWR,MAAMQ,SAAS;QAAA,CAAC;IACvE;AACF"}