mirror of
https://github.com/trycua/computer.git
synced 2026-05-03 21:49:35 -05:00
Merge pull request #588 from sarinali/fix/link-checker
get rid of cached 500s and update link
This commit is contained in:
@@ -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 }}
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
},
|
||||
() => {}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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'];
|
||||
|
||||
Reference in New Issue
Block a user