Merge pull request #588 from sarinali/fix/link-checker

get rid of cached 500s and update link
This commit is contained in:
Sarina Li
2025-11-18 10:08:58 -05:00
committed by GitHub
7 changed files with 47 additions and 30 deletions
+2 -9
View File
@@ -15,19 +15,12 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Restore lychee cache
uses: actions/cache@v4
with:
path: .lycheecache
key: cache-lychee-${{ github.sha }}
restore-keys: cache-lychee-
- name: Run Lychee link checker
uses: lycheeverse/lychee-action@v2
id: lychee
with:
# Check all markdown files
args: --verbose --no-progress --cache --max-cache-age 1d --accept 200..=299,403 --exclude '^file://' --exclude 'localhost' --exclude '127\.0\.0\.1' '**/*.md'
args: --verbose --no-progress --max-cache-age 1d --accept 200..=299,403 --exclude '^file://' --exclude 'localhost' --exclude '127\.0\.0\.1' '**/*.md'
# Output results to file for parsing
output: lychee-output.md
# Don't fail the build on broken links (warning mode)
@@ -66,7 +59,7 @@ jobs:
fi
- name: Send results to Slack
if: always()
if: always() && github.ref == 'refs/heads/main'
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
+1 -1
View File
@@ -294,7 +294,7 @@ This design keeps everything organized and safe. The AI can only interact with t
### Prerequisites
1. **Lume CLI Setup**
For installing the standalone lume binary, run the following command from a terminal, or download the [latest pkg](https://github.com/trycua/cua/releases/latest/download/lume.pkg.tar.gz).
For installing the standalone lume binary, run the following command from a terminal, or download the [latest pkg](https://github.com/trycua/cua/releases/download/lume-v0.2.22/lume-darwin.pkg.tar.gz).
```bash
sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
+5 -4
View File
@@ -11,15 +11,16 @@ Today the story changes - we're announcing general availability of **Cloud Windo
Cloud Windows Sandboxes are now generally available. You get a full Windows 11 desktop in your browser with Edge and Python pre-installed, working seamlessly with all our [Computer-Use libraries](https://github.com/trycua/cua) for RPA, UI automation, code execution, and agent development.
**What's new with this release:**
- Hot-start under 1 second
- Direct noVNC over HTTPS under our sandbox.cua.ai domain
- 3 sandbox sizes available:
| Size | CPU | RAM | Storage |
|------|-----|-----|---------|
| Small | 2 cores | 8 GB | 128 GB SSD |
| Size | CPU | RAM | Storage |
| ------ | ------- | ----- | ---------- |
| Small | 2 cores | 8 GB | 128 GB SSD |
| Medium | 4 cores | 16 GB | 128 GB SSD |
| Large | 8 cores | 32 GB | 256 GB SSD |
| Large | 8 cores | 32 GB | 256 GB SSD |
<div align="center">
<video src="https://github.com/user-attachments/assets/8ab07646-6018-4128-87ce-53180cfea696" width="600" controls></video>
+8 -1
View File
@@ -1,5 +1,12 @@
{
"title": "Computer SDK",
"description": "Build computer-using agents with the Computer SDK",
"pages": ["computers", "commands", "tracing-api", "sandboxed-python", "custom-computer-handlers", "computer-ui"]
"pages": [
"computers",
"commands",
"tracing-api",
"sandboxed-python",
"custom-computer-handlers",
"computer-ui"
]
}
+6 -1
View File
@@ -50,7 +50,12 @@ export function registerAuthCommands(y: Argv) {
() => {},
envHandler
)
.command('logout', 'Clear stored API credentials from this machine', () => {}, logoutHandler)
.command(
'logout',
'Clear stored API credentials from this machine',
() => {},
logoutHandler
)
.demandCommand(1, 'You must provide an auth command');
},
() => {}
+21 -13
View File
@@ -94,9 +94,7 @@ const deleteHandler = async (argv: Record<string, unknown>) => {
const body = (await res.json().catch(() => ({}))) as {
status?: string;
};
console.log(
`Sandbox deletion initiated: ${body.status ?? 'deleting'}`
);
console.log(`Sandbox deletion initiated: ${body.status ?? 'deleting'}`);
return;
}
@@ -273,31 +271,36 @@ export function registerSandboxCommands(y: Argv) {
.command(
'delete <name>',
'Permanently delete a sandbox and all its data',
(y) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
(y) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
deleteHandler
)
.command(
'start <name>',
'Start a stopped sandbox',
(y) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
(y) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
startHandler
)
.command(
'stop <name>',
'Stop a running sandbox (data is preserved)',
(y) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
(y) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
stopHandler
)
.command(
'restart <name>',
'Restart a sandbox (reboot the system)',
(y) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
(y) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
restartHandler
)
.command(
['vnc <name>', 'open <name>'],
'Open remote desktop (VNC) connection in your browser',
(y) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
(y) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
openHandler
)
.demandCommand(1, 'You must provide a sandbox command');
@@ -350,31 +353,36 @@ export function registerSandboxCommands(y: Argv) {
.command({
command: 'delete <name>',
describe: false as any, // Hide from help
builder: (y: Argv) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
builder: (y: Argv) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
handler: deleteHandler,
} as any)
.command({
command: 'start <name>',
describe: false as any, // Hide from help
builder: (y: Argv) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
builder: (y: Argv) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
handler: startHandler,
} as any)
.command({
command: 'stop <name>',
describe: false as any, // Hide from help
builder: (y: Argv) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
builder: (y: Argv) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
handler: stopHandler,
} as any)
.command({
command: 'restart <name>',
describe: false as any, // Hide from help
builder: (y: Argv) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
builder: (y: Argv) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
handler: restartHandler,
} as any)
.command({
command: ['vnc <name>', 'open <name>'],
describe: false as any, // Hide from help
builder: (y: Argv) => y.positional('name', { type: 'string', describe: 'Sandbox name' }),
builder: (y: Argv) =>
y.positional('name', { type: 'string', describe: 'Sandbox name' }),
handler: openHandler,
} as any);
+4 -1
View File
@@ -25,7 +25,10 @@ export type SandboxItem = {
host?: string;
};
export function printSandboxList(items: SandboxItem[], showPasswords: boolean = false) {
export function printSandboxList(
items: SandboxItem[],
showPasswords: boolean = false
) {
const headers = showPasswords
? ['NAME', 'STATUS', 'PASSWORD', 'HOST']
: ['NAME', 'STATUS', 'HOST'];