ummaya 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/pyproject.toml +2 -2
- package/tui/package.json +1 -1
- package/tui/src/bridge/bridgeEnabled.ts +1 -1
- package/tui/src/commands/chrome/chrome.tsx +3 -4
- package/tui/src/commands/createMovedToPluginCommand.ts +1 -1
- package/tui/src/commands/extra-usage/extra-usage-core.ts +2 -4
- package/tui/src/commands/insights.ts +5 -4
- package/tui/src/commands/install-github-app/ApiKeyStep.tsx +1 -2
- package/tui/src/commands/install-github-app/ExistingWorkflowStep.tsx +1 -1
- package/tui/src/commands/install-github-app/InstallAppStep.tsx +1 -1
- package/tui/src/commands/install-github-app/install-github-app.tsx +2 -2
- package/tui/src/commands/install-github-app/setupGitHubActions.ts +2 -2
- package/tui/src/commands/install-slack-app/install-slack-app.ts +1 -1
- package/tui/src/commands/mobile/mobile.tsx +3 -3
- package/tui/src/commands/stickers/stickers.ts +1 -1
- package/tui/src/commands/upgrade/upgrade.tsx +3 -4
- package/tui/src/components/ClaudeInChromeOnboarding.tsx +2 -3
- package/tui/src/components/Feedback.tsx +8 -2
- package/tui/src/components/FeedbackSurvey/submitTranscriptShare.ts +7 -2
- package/tui/src/components/Passes/Passes.tsx +1 -1
- package/tui/src/components/WorkflowMultiselectDialog.tsx +1 -1
- package/tui/src/components/messages/AssistantTextMessage.tsx +1 -2
- package/tui/src/constants/github-app.ts +19 -26
- package/tui/src/constants/oauth.ts +28 -59
- package/tui/src/constants/product.ts +6 -6
- package/tui/src/entrypoints/sdk/coreSchemas.ts +1 -1
- package/tui/src/services/analytics/firstPartyEventLogger.ts +0 -3
- package/tui/src/services/analytics/firstPartyEventLoggingExporter.ts +34 -12
- package/tui/src/services/analytics/growthbook.ts +17 -16
- package/tui/src/services/api/filesApi.ts +4 -14
- package/tui/src/services/api/metricsOptOut.ts +20 -1
- package/tui/src/services/mcp/channelNotification.ts +1 -1
- package/tui/src/services/mcp/officialRegistry.ts +5 -1
- package/tui/src/services/mcp/useManageMCPConnections.ts +1 -1
- package/tui/src/services/mcp/utils.ts +2 -2
- package/tui/src/services/tokenEstimation.ts +0 -1
- package/tui/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +6 -6
- package/tui/src/tools/McpAuthTool/McpAuthTool.ts +1 -1
- package/tui/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +1 -1
- package/tui/src/tools/RemoteTriggerTool/prompt.ts +2 -2
- package/tui/src/tools/WebFetchTool/preapproved.ts +0 -4
- package/tui/src/tools/WebFetchTool/utils.ts +15 -11
- package/tui/src/upstreamproxy/upstreamproxy.ts +9 -15
- package/tui/src/utils/autoUpdater.ts +4 -1
- package/tui/src/utils/claudeInChrome/mcpServer.ts +1 -1
- package/tui/src/utils/claudeInChrome/setup.ts +1 -1
- package/tui/src/utils/claudeInChrome/toolRendering.tsx +1 -2
- package/tui/src/utils/desktopDeepLink.ts +18 -18
- package/tui/src/utils/fastMode.ts +1 -1
- package/tui/src/utils/http.ts +1 -5
- package/tui/src/utils/ide.ts +6 -5
- package/tui/src/utils/model/providers.ts +6 -10
- package/tui/src/utils/modelCost.ts +0 -2
- package/tui/src/utils/nativeInstaller/download.ts +15 -17
- package/tui/src/utils/plugins/installCounts.ts +4 -11
- package/tui/src/utils/plugins/officialMarketplaceGcs.ts +5 -18
- package/tui/src/utils/releaseNotes.ts +2 -2
- package/tui/src/utils/settings/types.ts +1 -1
- package/tui/src/utils/statusNoticeDefinitions.tsx +3 -3
- package/tui/src/utils/telemetry/bigqueryExporter.ts +20 -13
- package/uv.lock +1 -1
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* inc-5046: fetch the official marketplace from a GCS mirror instead of
|
|
3
|
-
* git-cloning GitHub on every startup.
|
|
4
|
-
*
|
|
5
|
-
* Backend (anthropic#317037) publishes a marketplace-only zip alongside the
|
|
6
|
-
* titanium squashfs, keyed by base repo SHA. This module fetches the `latest`
|
|
7
|
-
* pointer, compares against a local sentinel, and downloads+extracts the zip
|
|
8
|
-
* when there's a new SHA. Callers decide fallback behavior on failure.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
1
|
import axios from 'axios'
|
|
12
2
|
import { chmod, mkdir, readFile, rename, rm, writeFile } from 'fs/promises'
|
|
13
3
|
import { dirname, join, resolve, sep } from 'path'
|
|
@@ -20,13 +10,7 @@ import { errorMessage, getErrnoCode } from '../errors.js'
|
|
|
20
10
|
|
|
21
11
|
type SafeString = AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
// binary ships from — nativeInstaller/download.ts:24 uses the raw GCS URL).
|
|
25
|
-
// `{sha}.zip` is content-addressed so CDN can cache it indefinitely;
|
|
26
|
-
// `latest` has Cache-Control: max-age=300 so CDN staleness is bounded.
|
|
27
|
-
// Backend (anthropic#317037) populates this prefix.
|
|
28
|
-
const GCS_BASE =
|
|
29
|
-
'https://downloads.claude.ai/claude-code-releases/plugins/claude-plugins-official'
|
|
13
|
+
const GCS_BASE = process.env.UMMAYA_OFFICIAL_MARKETPLACE_BASE_URL?.trim()
|
|
30
14
|
|
|
31
15
|
// Zip arc paths are seed-dir-relative (marketplaces/claude-plugins-official/…)
|
|
32
16
|
// so the titanium seed machinery can use the same zip. Strip this prefix when
|
|
@@ -48,6 +32,9 @@ export async function fetchOfficialMarketplaceFromGcs(
|
|
|
48
32
|
installLocation: string,
|
|
49
33
|
marketplacesCacheDir: string,
|
|
50
34
|
): Promise<string | null> {
|
|
35
|
+
if (!GCS_BASE) {
|
|
36
|
+
return null
|
|
37
|
+
}
|
|
51
38
|
// Defense in depth: this function does `rm(installLocation, {recursive})`
|
|
52
39
|
// during the atomic swap. A corrupted known_marketplaces.json (gh-32793 —
|
|
53
40
|
// Windows path read on WSL, literal tilde, manual edit) could point at the
|
|
@@ -158,7 +145,7 @@ export async function fetchOfficialMarketplaceFromGcs(
|
|
|
158
145
|
// values below are static enums or a git SHA — not code/filepaths/PII.
|
|
159
146
|
logEvent('tengu_plugin_remote_fetch', {
|
|
160
147
|
source: 'marketplace_gcs' as SafeString,
|
|
161
|
-
host:
|
|
148
|
+
host: new URL(GCS_BASE).host as SafeString,
|
|
162
149
|
is_official: true,
|
|
163
150
|
outcome: outcome as SafeString,
|
|
164
151
|
duration_ms: Math.round(performance.now() - start),
|
|
@@ -26,9 +26,9 @@ const MAX_RELEASE_NOTES_SHOWN = 5
|
|
|
26
26
|
* 3. Next time the user starts Claude, the cached changelog is available immediately
|
|
27
27
|
*/
|
|
28
28
|
export const CHANGELOG_URL =
|
|
29
|
-
'https://github.com/
|
|
29
|
+
'https://github.com/umyunsang/UMMAYA/blob/main/CHANGELOG.md'
|
|
30
30
|
const RAW_CHANGELOG_URL =
|
|
31
|
-
'https://raw.githubusercontent.com/
|
|
31
|
+
'https://raw.githubusercontent.com/umyunsang/UMMAYA/refs/heads/main/CHANGELOG.md'
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Get the path for the cached changelog file.
|
|
@@ -887,7 +887,7 @@ export const SettingsSchema = lazySchema(() =>
|
|
|
887
887
|
.string()
|
|
888
888
|
.optional()
|
|
889
889
|
.describe(
|
|
890
|
-
'Display name for the assistant, shown in the
|
|
890
|
+
'Display name for the assistant, shown in the UMMAYA remote session list',
|
|
891
891
|
),
|
|
892
892
|
}
|
|
893
893
|
: {}),
|
|
@@ -125,13 +125,13 @@ const bothAuthMethodsNotice: StatusNoticeDefinition = {
|
|
|
125
125
|
<Box flexDirection="column" marginLeft={3}>
|
|
126
126
|
<Text color="warning">
|
|
127
127
|
· Trying to use{' '}
|
|
128
|
-
{authTokenInfo.source === 'claude.ai' ? '
|
|
128
|
+
{authTokenInfo.source === 'claude.ai' ? 'UMMAYA remote auth' : authTokenInfo.source}
|
|
129
129
|
?{' '}
|
|
130
|
-
{apiKeySource === 'ANTHROPIC_API_KEY' ? 'Unset the ANTHROPIC_API_KEY environment variable, or
|
|
130
|
+
{apiKeySource === 'ANTHROPIC_API_KEY' ? 'Unset the ANTHROPIC_API_KEY environment variable, or run ummaya /logout then say "No" to the API key approval before login.' : apiKeySource === 'apiKeyHelper' ? 'Unset the apiKeyHelper setting.' : 'ummaya /logout'}
|
|
131
131
|
</Text>
|
|
132
132
|
<Text color="warning">
|
|
133
133
|
· Trying to use {apiKeySource}?{' '}
|
|
134
|
-
{authTokenInfo.source === 'claude.ai' ? '
|
|
134
|
+
{authTokenInfo.source === 'claude.ai' ? 'ummaya /logout to sign out of UMMAYA remote auth.' : `Unset the ${authTokenInfo.source} environment variable.`}
|
|
135
135
|
</Text>
|
|
136
136
|
</Box>
|
|
137
137
|
</Box>;
|
|
@@ -37,25 +37,26 @@ type InternalMetricsPayload = {
|
|
|
37
37
|
metrics: Metric[]
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
function getMetricsExportEndpoint(): string | undefined {
|
|
41
|
+
const baseUrl =
|
|
42
|
+
process.env.UMMAYA_METRICS_BASE_URL ??
|
|
43
|
+
(process.env.USER_TYPE === 'ant'
|
|
44
|
+
? process.env.ANT_CLAUDE_CODE_METRICS_ENDPOINT
|
|
45
|
+
: undefined)
|
|
46
|
+
const trimmed = baseUrl?.trim()
|
|
47
|
+
return trimmed
|
|
48
|
+
? `${trimmed.replace(/\/$/, '')}/api/claude_code/metrics`
|
|
49
|
+
: undefined
|
|
50
|
+
}
|
|
51
|
+
|
|
40
52
|
export class BigQueryMetricsExporter implements PushMetricExporter {
|
|
41
|
-
private readonly endpoint: string
|
|
53
|
+
private readonly endpoint: string | undefined
|
|
42
54
|
private readonly timeout: number
|
|
43
55
|
private pendingExports: Promise<void>[] = []
|
|
44
56
|
private isShutdown = false
|
|
45
57
|
|
|
46
58
|
constructor(options: { timeout?: number } = {}) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
process.env.USER_TYPE === 'ant' &&
|
|
51
|
-
process.env.ANT_CLAUDE_CODE_METRICS_ENDPOINT
|
|
52
|
-
) {
|
|
53
|
-
this.endpoint =
|
|
54
|
-
process.env.ANT_CLAUDE_CODE_METRICS_ENDPOINT +
|
|
55
|
-
'/api/claude_code/metrics'
|
|
56
|
-
} else {
|
|
57
|
-
this.endpoint = defaultEndpoint
|
|
58
|
-
}
|
|
59
|
+
this.endpoint = getMetricsExportEndpoint()
|
|
59
60
|
|
|
60
61
|
this.timeout = options.timeout || 5000
|
|
61
62
|
}
|
|
@@ -101,6 +102,12 @@ export class BigQueryMetricsExporter implements PushMetricExporter {
|
|
|
101
102
|
return
|
|
102
103
|
}
|
|
103
104
|
|
|
105
|
+
if (!this.endpoint) {
|
|
106
|
+
logForDebugging('BigQuery metrics export: endpoint not configured')
|
|
107
|
+
resultCallback({ code: ExportResultCode.SUCCESS })
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
|
|
104
111
|
// Check organization-level metrics opt-out
|
|
105
112
|
const metricsStatus = await checkMetricsEnabled()
|
|
106
113
|
if (!metricsStatus.enabled) {
|