diff --git a/OpenclawSkill.md b/OpenclawSkill.md index 5a165a9..8b14bfd 100644 --- a/OpenclawSkill.md +++ b/OpenclawSkill.md @@ -47,6 +47,45 @@ this will check the health, and if not setup, it will prompt you to set up the C ## Instructions Use these commands for when you need to interact with shsf from the command line. Its faster than using the ui for almost all ops. +## Ui Links +Get the ui url with: +```bash +shsf uiurl +``` + +## Available UI Routes + +Below are the main routes you can use in the SHSF web UI. These are not clickable links, but you can navigate to them in your browser. + +**General** +- `/`: Home Page + +**Documentation** +- `/docs`: Documentation + +**Account** +- `/account`: Account Settings +- `/login`: Login +- `/register`: Register + +**Functions** +- `/functions`: Shows your functions, grouped by their respective namespaces (requires auth). +- `/functions/:id`: View details for a specific function (requires auth). + +**Other** +- `/admin`: Admin dashboard (admin only, requires authentication) +- `/storage`: Storage management (requires auth) +- `/cron-jobs`: Cron job management (requires auth) +- `/access-tokens`: Access token management (requires auth) +- `/guest-users`: Guest user management (requires auth) +- `/guest-access`: Guest access portal + +### Example +After creating a function and receiving an ID (for example, 81), you can share the following URL with your human so they can view the function in the UI: +``` +[UI_URL]/functions/[ID] +``` + ## Update Update with your package manager of choice. Preferably pnpm: ```bash diff --git a/package.json b/package.json index 6e50562..201c736 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shsf-cli", - "version": "2.0.3", + "version": "2.0.4", "description": "", "type": "module", "files": [ diff --git a/src/commands/uiurl.ts b/src/commands/uiurl.ts new file mode 100644 index 0000000..ef50a0f --- /dev/null +++ b/src/commands/uiurl.ts @@ -0,0 +1,52 @@ +import chalk from "chalk"; +import { getApiClient } from "../api.js"; + +export const uiUrlDefinition = { + name: "uiurl", + description: "Get the URL for the SHSF UI.", + action: async () => { + await getUiURL(); + }, +}; + +async function getUiURL(): Promise { + const client = await getApiClient(); + + try { + const response = await client.get<{ status: string; uiUrl: string }>("/api/global/uiUrl"); + + if (response.status === 200 && response.data.status === "OK") { + console.log( + `${chalk.green("✓")} SHSF UI URL: ${chalk.bgGreen.black(` ${response.data.uiUrl} `)}` + ); + } else { + console.log( + `${chalk.yellow("!")} SHSF Status: ${chalk.bgYellow.black(" UNEXPECTED RESPONSE ")}`, + ); + console.log(`Status Code: ${chalk.blue(response.status)}`); + console.log(`Response Data: ${JSON.stringify(response.data)}`); + } + } catch (error: any) { + if (error.response) { + console.error( + `${chalk.red("✗")} SHSF Status: ${chalk.bgRed.black(" UNHEALTHY ")}`, + ); + console.error(`Status Code: ${chalk.red(error.response.status)}`); + console.error( + `Message: ${chalk.yellow(error.response.data.message || "Unknown error from server")}`, + ); + } else if (error.request) { + console.error( + `${chalk.red("✗")} SHSF Status: ${chalk.bgRed.black(" DISCONNECTED ")}`, + ); + console.error( + `Error: ${chalk.yellow("Could not connect to the SHSF instance. Check your connection or SHSF_INSTANCE URL.")}`, + ); + } else { + console.error( + `${chalk.red("✗")} SHSF Status: ${chalk.bgRed.black(" LOCAL ERROR ")}`, + ); + console.error(`Error: ${chalk.yellow(error.message)}`); + } + } +}