ummaya 0.2.13 → 0.2.14

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.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "ummaya",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "ummaya",
9
- "version": "0.2.13",
9
+ "version": "0.2.14",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@alcalzone/ansi-tokenize": "^0.3.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ummaya",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "description": "Conversational multi-agent harness for Korean public-service channels",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ummaya"
3
- version = "0.2.13"
3
+ version = "0.2.14"
4
4
  description = "Conversational multi-agent platform for Korean public APIs"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -333,7 +333,7 @@ min_confidence = 80
333
333
 
334
334
  [tool.commitizen]
335
335
  name = "cz_conventional_commits"
336
- version = "0.2.13"
336
+ version = "0.2.14"
337
337
  tag_format = "v$version"
338
338
 
339
339
  # PyTorch CPU-only wheel for Docker image size discipline (SC-1: ≤ 2 GB).
package/tui/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ummaya",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
@@ -111,8 +111,7 @@ export function OAuthFlowStep({
111
111
  const timer_0 = setTimeout(setShowPastePrompt, 3000, true);
112
112
  timersRef.current.add(timer_0);
113
113
  }, {
114
- loginWithClaudeAi: true,
115
- // Always use Claude AI for subscription tokens
114
+ loginWithFriendliAi: true,
116
115
  inferenceOnly: true,
117
116
  expiresIn: 365 * 24 * 60 * 60 // 1 year
118
117
  });
@@ -7,7 +7,7 @@ import { useExitOnCtrlCDWithKeybindings } from '../../hooks/useExitOnCtrlCDWithK
7
7
  import type { KeyboardEvent } from '../../ink/events/keyboard-event.js';
8
8
  import { Box } from '../../ink.js';
9
9
  import type { LocalJSXCommandOnDone } from '../../types/command.js';
10
- import { FRIENDLI_PRIMARY_ENV, getAnthropicApiKey, isAnthropicAuthEnabled } from '../../utils/auth.js';
10
+ import { FRIENDLI_PRIMARY_ENV, getFriendliApiKey, isFriendliAuthEnabled } from '../../utils/auth.js';
11
11
  import { openBrowser } from '../../utils/browser.js';
12
12
  import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
13
13
  import { getGithubRepo } from '../../utils/git.js';
@@ -50,11 +50,11 @@ function secretListContains(lines: string[], secretName: string): boolean {
50
50
  function InstallGitHubApp(props: {
51
51
  onDone: (message: string) => void;
52
52
  }): React.ReactNode {
53
- const [existingApiKey] = useState(() => getAnthropicApiKey());
53
+ const [existingApiKey] = useState(() => getFriendliApiKey());
54
54
  const [state, setState] = useState({
55
55
  ...INITIAL_STATE,
56
56
  useExistingKey: !!existingApiKey,
57
- selectedApiKeyOption: (existingApiKey ? 'existing' : isAnthropicAuthEnabled() ? 'oauth' : 'new') as 'existing' | 'new' | 'oauth'
57
+ selectedApiKeyOption: (existingApiKey ? 'existing' : isFriendliAuthEnabled() ? 'oauth' : 'new') as 'existing' | 'new' | 'oauth'
58
58
  });
59
59
  useExitOnCtrlCDWithKeybindings();
60
60
  React.useEffect(() => {
@@ -545,7 +545,7 @@ function InstallGitHubApp(props: {
545
545
  case 'check-existing-secret':
546
546
  return <CheckExistingSecretStep useExistingSecret={state.useExistingSecret} secretName={state.secretName} onToggleUseExistingSecret={handleToggleUseExistingSecret} onSecretNameChange={handleSecretNameChange} onSubmit={handleSubmit} />;
547
547
  case 'api-key':
548
- return <ApiKeyStep existingApiKey={existingApiKey} useExistingKey={state.useExistingKey} apiKeyOrOAuthToken={state.apiKeyOrOAuthToken} onApiKeyChange={handleApiKeyChange} onToggleUseExistingKey={handleToggleUseExistingKey} onSubmit={handleSubmit} onCreateOAuthToken={isAnthropicAuthEnabled() ? handleCreateOAuthToken : undefined} selectedOption={state.selectedApiKeyOption} onSelectOption={handleApiKeyOptionChange} />;
548
+ return <ApiKeyStep existingApiKey={existingApiKey} useExistingKey={state.useExistingKey} apiKeyOrOAuthToken={state.apiKeyOrOAuthToken} onApiKeyChange={handleApiKeyChange} onToggleUseExistingKey={handleToggleUseExistingKey} onSubmit={handleSubmit} onCreateOAuthToken={isFriendliAuthEnabled() ? handleCreateOAuthToken : undefined} selectedOption={state.selectedApiKeyOption} onSelectOption={handleApiKeyOptionChange} />;
549
549
  case 'creating':
550
550
  return <CreatingStep currentWorkflowInstallStep={state.currentWorkflowInstallStep} secretExists={state.secretExists} useExistingSecret={state.useExistingSecret} secretName={state.secretName} skipWorkflow={state.workflowAction === 'skip'} selectedWorkflows={state.selectedWorkflows} />;
551
551
  case 'success':
@@ -48,6 +48,7 @@ export function buildAuthUrl({
48
48
  state,
49
49
  port,
50
50
  isManual,
51
+ loginWithFriendliAi,
51
52
  loginWithClaudeAi,
52
53
  inferenceOnly,
53
54
  orgUUID,
@@ -58,13 +59,14 @@ export function buildAuthUrl({
58
59
  state: string
59
60
  port: number
60
61
  isManual: boolean
62
+ loginWithFriendliAi?: boolean
61
63
  loginWithClaudeAi?: boolean
62
64
  inferenceOnly?: boolean
63
65
  orgUUID?: string
64
66
  loginHint?: string
65
67
  loginMethod?: string
66
68
  }): string {
67
- const authUrlBase = loginWithClaudeAi
69
+ const authUrlBase = (loginWithFriendliAi ?? loginWithClaudeAi)
68
70
  ? getOauthConfig().CLAUDE_AI_AUTHORIZE_URL
69
71
  : getOauthConfig().CONSOLE_AUTHORIZE_URL
70
72
 
@@ -32,6 +32,7 @@ export class OAuthService {
32
32
  async startOAuthFlow(
33
33
  authURLHandler: (url: string, automaticUrl?: string) => Promise<void>,
34
34
  options?: {
35
+ loginWithFriendliAi?: boolean
35
36
  loginWithClaudeAi?: boolean
36
37
  inferenceOnly?: boolean
37
38
  expiresIn?: number
@@ -56,11 +57,12 @@ export class OAuthService {
56
57
  const state = crypto.generateState()
57
58
 
58
59
  // Build auth URLs for both automatic and manual flows
60
+ const loginWithFriendliAi = options?.loginWithFriendliAi ?? options?.loginWithClaudeAi
59
61
  const opts = {
60
62
  codeChallenge,
61
63
  state,
62
64
  port: this.port,
63
- loginWithClaudeAi: options?.loginWithClaudeAi,
65
+ loginWithFriendliAi,
64
66
  inferenceOnly: options?.inferenceOnly,
65
67
  orgUUID: options?.orgUUID,
66
68
  loginHint: options?.loginHint,
@@ -136,6 +136,8 @@ export function isEnterpriseSubscriber(): boolean { return false }
136
136
 
137
137
  export function isAnthropicAuthEnabled(): boolean { return false }
138
138
 
139
+ export function isFriendliAuthEnabled(): boolean { return false }
140
+
139
141
  export function is1PApiCustomer(): boolean { return false }
140
142
 
141
143
  export function isUsing3PServices(): boolean { return false }
@@ -167,6 +169,10 @@ export function getAnthropicApiKey(): null | string {
167
169
  return getAnthropicApiKeyWithSource().key
168
170
  }
169
171
 
172
+ export function getFriendliApiKey(): null | string {
173
+ return getAnthropicApiKeyWithSource().key
174
+ }
175
+
170
176
  export function getAnthropicApiKeyWithSource(
171
177
  _opts: { skipRetrievingKeyFromApiKeyHelper?: boolean } = {},
172
178
  ): { key: null | string; source: ApiKeySource } {
package/uv.lock CHANGED
@@ -3052,7 +3052,7 @@ wheels = [
3052
3052
 
3053
3053
  [[package]]
3054
3054
  name = "ummaya"
3055
- version = "0.2.13"
3055
+ version = "0.2.14"
3056
3056
  source = { editable = "." }
3057
3057
  dependencies = [
3058
3058
  { name = "defusedxml" },