Ressources
Exemples
Snippets copiables construits uniquement à partir des interfaces OrbitWake actuellement vérifiées. Les exemples authentifiés supposent que le code s’exécute dans un contexte OrbitWake déjà connecté ; aucun exemple n’utilise de cookie, token IDE ou secret interne en clair.
CLI — installation et première session
$ npm install -g @orbitwake/cli
$ orbitwake login
$ cd /chemin/vers/votre-projet
$ orbitwakecd est une commande shell standard. Les trois autres commandes sont les commandes OrbitWake CLI confirmées aujourd’hui.
VS Code — installer l’extension
code --install-extension orbitwake.orbitwake-vscodeLa build actuelle exige VS Code 1.106 ou plus récent.
VS Code — commandes disponibles
OrbitWake: Connect IDE
OrbitWake: Disconnect IDE
OrbitWake: Ask About Selection
Ces commandes sont à lancer depuis la Command Palette. Ask/Agent, Preview, Apply et Reject sont des actions du panneau, pas des commandes publiques séparées.
Domains — requête publique en curl
La recherche de domaine est l’un des exemples réellement publics du runtime actuel :
curl "https://orbitwake.com/api/domains/search?domain=example.com"Le endpoint applique son propre rate limit et peut retourner Retry-After sur 429.
Domains — fetch navigateur
const response = await fetch(
"/api/domains/search?domain=example.com"
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.error ?? `HTTP ${response.status}`);
}
const result = await response.json();
console.log(result.domain);
console.log(result.available);
console.log(result.priceUsd);AI — requête JSON dans un contexte OrbitWake authentifié
const response = await fetch("/api/ai/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "orbitwake-auto",
mode: "general",
messages: [
{
role: "user",
content: "Explique cette fonction en termes simples."
}
],
maxOutputTokens: 800
})
});
const payload = await response.json();
if (!response.ok) {
throw new Error(payload.error ?? `HTTP ${response.status}`);
}
console.log(payload.response.text);AI — lire le streaming SSE
const response = await fetch("/api/ai/stream", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "orbitwake-auto",
mode: "general",
messages: [
{ role: "user", content: "Donne-moi un résumé court." }
]
})
});
if (!response.ok || !response.body) {
const error = await response.json().catch(() => ({}));
throw new Error(error.error ?? `HTTP ${response.status}`);
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
let text = "";
while (true) {
const { done, value } = await reader.read();
buffer += decoder.decode(value ?? new Uint8Array(), {
stream: !done
});
buffer = buffer.replace(/\r\n/g, "\n");
let boundary = buffer.indexOf("\n\n");
while (boundary >= 0) {
const block = buffer.slice(0, boundary);
buffer = buffer.slice(boundary + 2);
const lines = block.split("\n");
const event = lines
.find((line) => line.startsWith("event:"))
?.slice(6)
.trim();
const data = lines
.filter((line) => line.startsWith("data:"))
.map((line) => line.slice(5).trimStart())
.join("\n");
if (data) {
const payload = JSON.parse(data);
if (event === "delta") {
text += payload.text ?? "";
console.log(text);
}
if (event === "error") {
throw new Error(payload.error ?? "Streaming failed");
}
if (event === "done") {
console.log(payload.response);
}
}
boundary = buffer.indexOf("\n\n");
}
if (done) break;
}Le parser utilise un buffer car un chunk réseau peut contenir un événement partiel ou plusieurs événements à la fois.
Memory — lire les memories
Exemple depuis un contexte web OrbitWake déjà connecté :
const response = await fetch(
"/api/memory?scope=project&search=database"
);
const payload = await response.json();
if (!response.ok) {
throw new Error(payload.error ?? `HTTP ${response.status}`);
}
console.table(payload.memories);Memory — créer une entrée
const response = await fetch("/api/memory", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
scope: "project",
category: "decision",
title: "Base de données",
content: "Utiliser PostgreSQL.",
projectKey: "my-project",
pinned: true
})
});
const payload = await response.json();
if (!response.ok) {
throw new Error(payload.error ?? `HTTP ${response.status}`);
}
console.log(payload.memory);Une memory project nécessite une projectKey. Le contenu est limité à 4 000 caractères dans le runtime actuel.
Connectors — lister les dépôts GitHub
Ce read action suppose qu’un Connector GitHub valide est déjà connecté au workspace OrbitWake.
const response = await fetch("/api/connectors/execute", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
connectorId: "github",
actionName: "github.list_repositories",
input: {}
})
});
const payload = await response.json();
if (!response.ok || payload.result?.success === false) {
throw new Error(
payload.result?.error?.message ??
payload.error ??
`HTTP ${response.status}`
);
}
console.log(payload.result);Les actions de lecture GitHub utilisent la permission read, autorisée par défaut dans la policy Connectors actuelle.
Connectors — détecter une approval requise
if (response.status === 202) {
const payload = await response.json();
console.log("Approval required");
console.log(payload.approval);
}
Les actions write et sensitive peuvent demander une approval. Cet exemple ne déclenche pas lui-même une écriture GitHub.
GitHub — noms d’actions confirmés
| Lecture | Écriture / sensible |
|---|---|
github.list_repositories | github.create_branch |
github.search_code | github.create_file |
github.read_file | github.update_file |
github.list_branches | github.create_issue |
github.list_pull_requests | github.create_pull_request |
github.list_issues | github.merge_pull_request — sensitive |
Projects — forme de création
Projects est une private beta. Exemple de body, sans exécution automatique :
POST /api/projects
{
"name": "Mon projet"
}
La création est une opération persistante. Vérifiez l’accès beta et évitez de rejouer aveuglément un POST après un timeout.
Projects — forme d’un fichier
PUT /api/projects/:projectId/files
{
"path": "src/app.ts",
"content": "export const ready = true;",
"contentType": "text/typescript"
}
La limite actuelle est de 512 KB par fichier dans la private beta inspectée.
API — gestion d’erreur générique
async function orbitwakeJson(url, options = {}) {
const response = await fetch(url, options);
const payload = await response.json().catch(() => ({}));
if (!response.ok) {
const message =
typeof payload.error === "string"
? payload.error
: `OrbitWake request failed (${response.status})`;
const error = new Error(message);
error.status = response.status;
throw error;
}
return payload;
}Connectors et SSE nécessitent une logique supplémentaire : l’échec peut être représenté dans result.success ou dans un événement error.
API — respecter Retry-After
if (response.status === 429) {
const retryAfter = Number(
response.headers.get("Retry-After") ?? "0"
);
console.log(
`Retry after ${retryAfter} second(s)`
);
}Le header est confirmé sur la recherche de domaine. Ne supposez pas qu’il existe sur toutes les routes.
Règles de sécurité pour les exemples
- ne copiez jamais
orbitwake_sessiondans un script ou un dépôt ; - ne publiez jamais un token IDE, admin ou webhook ;
- ne réutilisez pas un token IDE comme clé API générale ;
- ne transformez pas une route interne en intégration tierce de production ;
- revoyez les opérations mutatives avant de relancer un POST/PUT/PATCH/DELETE.
Ce qui est réellement “copiable” aujourd’hui
Les commandes CLI, l’installation VS Code et la recherche de domaine publique peuvent être exécutées directement dans leur environnement respectif.
Les snippets AI, Memory et Connectors montrent les appels utilisés par les clients OrbitWake dans un contexte authentifié. Ils servent d’exemples d’intégration interne actuelle, pas de contrat d’API publique externe.
Prochaine étape
La prochaine ressource sera une page Dépannage qui centralisera les chemins de diagnostic CLI, VS Code, API, Connectors et accès beta.