更新大量 tsx 原始文件; 已经迁移 login panel; 部分 (#121)

* style(B1-1): 格式化 ink/buddy/cli/context/screens/tasks/services/keybindings/state (43 files)

纯格式化:移除分号、React Compiler import、import 多行展开。
修复了 Box.tsx 和 ScrollBox.tsx 中无效的 global.d.ts import。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-2): 格式化 commands (79 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-3): 格式化 components/messages,permissions,mcp,sandbox,shell (104 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-4): 格式化 components/PromptInput,FeedbackSurvey,tasks,agents,skills,design-system,wizard (73 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-5): 格式化 components其余 + hooks + tools (232 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-6): 格式化 main/entrypoints/utils/moreright (21 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: 更新 README,新增 Run.ps1/TODO.md,删除 V6.md

- README.md: 大幅重写,更详细版本历史和配置示例
- Run.ps1: 新增 Windows 启动脚本
- TODO.md: 新增包完成清单
- V6.md: 删除(架构重构规划已不适用)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: 修复以前的问题

* fix: 修复 login 面板的问题

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
claude-code-best
2026-04-04 23:24:27 +08:00
committed by GitHub
parent 02694918b5
commit 5b1a52b8e0
559 changed files with 103807 additions and 101817 deletions

View File

@@ -1,13 +1,17 @@
import { c as _c } from "react/compiler-runtime";
import * as React from 'react';
import { useState } from 'react';
import { Text } from '../../ink.js';
import { logEvent } from '../../services/analytics/index.js';
import { formatGrantAmount, getCachedOverageCreditGrant, refreshOverageCreditGrantCache } from '../../services/api/overageCreditGrant.js';
import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js';
import { truncate } from '../../utils/format.js';
import type { FeedConfig } from './Feed.js';
const MAX_IMPRESSIONS = 3;
import * as React from 'react'
import { useState } from 'react'
import { Text } from '../../ink.js'
import { logEvent } from '../../services/analytics/index.js'
import {
formatGrantAmount,
getCachedOverageCreditGrant,
refreshOverageCreditGrantCache,
} from '../../services/api/overageCreditGrant.js'
import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js'
import { truncate } from '../../utils/format.js'
import type { FeedConfig } from './Feed.js'
const MAX_IMPRESSIONS = 3
/**
* Whether to show the overage credit upsell on any surface.
@@ -25,16 +29,20 @@ const MAX_IMPRESSIONS = 3;
* (welcome feed, tips).
*/
export function isEligibleForOverageCreditGrant(): boolean {
const info = getCachedOverageCreditGrant();
if (!info || !info.available || info.granted) return false;
return formatGrantAmount(info) !== null;
const info = getCachedOverageCreditGrant()
if (!info || !info.available || info.granted) return false
return formatGrantAmount(info) !== null
}
export function shouldShowOverageCreditUpsell(): boolean {
if (!isEligibleForOverageCreditGrant()) return false;
const config = getGlobalConfig();
if (config.hasVisitedExtraUsage) return false;
if ((config.overageCreditUpsellSeenCount ?? 0) >= MAX_IMPRESSIONS) return false;
return true;
if (!isEligibleForOverageCreditGrant()) return false
const config = getGlobalConfig()
if (config.hasVisitedExtraUsage) return false
if ((config.overageCreditUpsellSeenCount ?? 0) >= MAX_IMPRESSIONS)
return false
return true
}
/**
@@ -42,105 +50,78 @@ export function shouldShowOverageCreditUpsell(): boolean {
* unconditionally on mount — it no-ops if cache is fresh.
*/
export function maybeRefreshOverageCreditCache(): void {
if (getCachedOverageCreditGrant() !== null) return;
void refreshOverageCreditGrantCache();
if (getCachedOverageCreditGrant() !== null) return
void refreshOverageCreditGrantCache()
}
export function useShowOverageCreditUpsell() {
const [show] = useState(_temp);
return show;
}
function _temp() {
maybeRefreshOverageCreditCache();
return shouldShowOverageCreditUpsell();
export function useShowOverageCreditUpsell(): boolean {
const [show] = useState(() => {
maybeRefreshOverageCreditCache()
return shouldShowOverageCreditUpsell()
})
return show
}
export function incrementOverageCreditUpsellSeenCount(): void {
let newCount = 0;
let newCount = 0
saveGlobalConfig(prev => {
newCount = (prev.overageCreditUpsellSeenCount ?? 0) + 1;
newCount = (prev.overageCreditUpsellSeenCount ?? 0) + 1
return {
...prev,
overageCreditUpsellSeenCount: newCount
};
});
logEvent('tengu_overage_credit_upsell_shown', {
seen_count: newCount
});
overageCreditUpsellSeenCount: newCount,
}
})
logEvent('tengu_overage_credit_upsell_shown', { seen_count: newCount })
}
// Copy from "OC & Bulk Overages copy" doc (#6 — CLI /usage)
function getUsageText(amount: string): string {
return `${amount} in extra usage for third-party apps · /extra-usage`;
return `${amount} in extra usage for third-party apps · /extra-usage`
}
// Copy from "OC & Bulk Overages copy" doc (#4 — CLI Welcome screen).
// Char budgets: title ≤19, subtitle ≤48.
const FEED_SUBTITLE = 'On us. Works on third-party apps · /extra-usage';
const FEED_SUBTITLE = 'On us. Works on third-party apps · /extra-usage'
function getFeedTitle(amount: string): string {
return `${amount} in extra usage`;
return `${amount} in extra usage`
}
type Props = {
maxWidth?: number;
twoLine?: boolean;
};
export function OverageCreditUpsell(t0) {
const $ = _c(8);
const {
maxWidth,
twoLine
} = t0;
let t1;
let t2;
if ($[0] !== maxWidth || $[1] !== twoLine) {
t2 = Symbol.for("react.early_return_sentinel");
bb0: {
const info = getCachedOverageCreditGrant();
if (!info) {
t2 = null;
break bb0;
}
const amount = formatGrantAmount(info);
if (!amount) {
t2 = null;
break bb0;
}
if (twoLine) {
const title = getFeedTitle(amount);
let t3;
if ($[4] !== maxWidth) {
t3 = maxWidth ? truncate(FEED_SUBTITLE, maxWidth) : FEED_SUBTITLE;
$[4] = maxWidth;
$[5] = t3;
} else {
t3 = $[5];
}
let t4;
if ($[6] !== t3) {
t4 = <Text dimColor={true}>{t3}</Text>;
$[6] = t3;
$[7] = t4;
} else {
t4 = $[7];
}
t2 = <><Text color="claude">{maxWidth ? truncate(title, maxWidth) : title}</Text>{t4}</>;
break bb0;
}
const text = getUsageText(amount);
const display = maxWidth ? truncate(text, maxWidth) : text;
const highlightLen = Math.min(getFeedTitle(amount).length, display.length);
t1 = <Text dimColor={true}><Text color="claude">{display.slice(0, highlightLen)}</Text>{display.slice(highlightLen)}</Text>;
}
$[0] = maxWidth;
$[1] = twoLine;
$[2] = t1;
$[3] = t2;
} else {
t1 = $[2];
t2 = $[3];
type Props = { maxWidth?: number; twoLine?: boolean }
export function OverageCreditUpsell({
maxWidth,
twoLine,
}: Props): React.ReactNode {
const info = getCachedOverageCreditGrant()
if (!info) return null
const amount = formatGrantAmount(info)
if (!amount) return null
if (twoLine) {
const title = getFeedTitle(amount)
return (
<>
<Text color="claude">
{maxWidth ? truncate(title, maxWidth) : title}
</Text>
<Text dimColor>
{maxWidth ? truncate(FEED_SUBTITLE, maxWidth) : FEED_SUBTITLE}
</Text>
</>
)
}
if (t2 !== Symbol.for("react.early_return_sentinel")) {
return t2;
}
return t1;
const text = getUsageText(amount)
const display = maxWidth ? truncate(text, maxWidth) : text
const highlightLen = Math.min(getFeedTitle(amount).length, display.length)
return (
<Text dimColor>
<Text color="claude">{display.slice(0, highlightLen)}</Text>
{display.slice(highlightLen)}
</Text>
)
}
/**
@@ -151,15 +132,15 @@ export function OverageCreditUpsell(t0) {
* Char budgets: title ≤19, subtitle ≤48.
*/
export function createOverageCreditFeed(): FeedConfig {
const info = getCachedOverageCreditGrant();
const amount = info ? formatGrantAmount(info) : null;
const title = amount ? getFeedTitle(amount) : 'extra usage credit';
const info = getCachedOverageCreditGrant()
const amount = info ? formatGrantAmount(info) : null
const title = amount ? getFeedTitle(amount) : 'extra usage credit'
return {
title,
lines: [],
customContent: {
content: <Text dimColor>{FEED_SUBTITLE}</Text>,
width: Math.max(title.length, FEED_SUBTITLE.length)
}
};
width: Math.max(title.length, FEED_SUBTITLE.length),
},
}
}