Aller au contenu
English

Étendre Outpost

Trouvez le contrat à implémenter pour ajouter un agent, une sandbox, un service de modèle, un stockage ou une file.

L’adaptateur d’agent décrit la commande à lancer et interprète sa sortie. Le fournisseur de sandbox exécute cette commande. En séparant ces responsabilités, le même adaptateur peut fonctionner avec différents fournisseurs.

import { createAgent, dispatch, type AgentAdapter } from "@elie-laloum/outpost";
import { repository, sandboxProvider } from "./outpost.config.ts";

const mycli: AgentAdapter = {
  name: "mycli",
  request: ({ text }) => ({
    executable: "mycli",
    arguments: ["--json"],
    stdin: text ?? "",
  }),
  events: (line) => [{ kind: "text", text: line }],
};

await dispatch({
  agent: createAgent({ harness: { kind: "cli", bind: () => mycli } }),
  sandboxProvider,
  repository,
  brief: { text: "Summarize the README." },
});

Passer cet agent sur votre propre sandbox ne change que sandboxProvider. Stocker les checkpoints dans votre propre système de stockage ne change que le transporter des stockages.

Outpost continue de gérer le cycle d’exécution autour de votre intégration. Votre adaptateur ou fournisseur implémente son contrat, tandis que l’application prend en charge les opérations suivantes.

  • Supervision des processusAttend le code de sortie, borne la sortie et arrête les agents inactifs.
  • AnnulationTransmet signaux et échéances aux commandes, aux transferts et aux requêtes de modèle.
  • Reprises et réparationsReprises de tâche, réparations des réponses typées, pauses de quota et agents de secours.
  • ObservationTransmet les événements décodés aux observateurs et aux journaux, et cumule les tokens consommés.
  • Workspace et GitWorktrees, verrous de branche, intégration et synchronisation vers l’hôte.
  • Répertoire personnel de l’agentInstalle les plans d’identifiants et de configuration de l’adaptateur dans le répertoire personnel privé de la sandbox.

Testez ce qu’un utilisateur observe quand les choses tournent mal : un code de sortie non nul, une sortie fermée avant la fin du processus, une exécution annulée ou expirée, une libération appelée deux fois. Vérifiez qui possède chaque ressource et que les fichiers temporaires disparaissent en cas de succès, d’échec et d’annulation.

Pour un fournisseur de sandbox, diagnose() lance une sonde limitée contre une vraie sandbox : Node.js, Git, flux de sortie séparés, code de sortie non nul, répertoire personnel et, avec transfers, transferts de fichiers binaires.

import { reportValue } from "./reporter.ts";
import { createSandbox } from "@elie-laloum/outpost";
import { repository, sandboxProvider } from "./outpost.config.ts";

await using sandbox = await createSandbox({ sandboxProvider, repository });
const report = await sandbox.diagnose({ transfers: true });
reportValue(report.hasFailures, report.checks);
// Example output: false [ { id: "sandbox.node", status: "pass", … }, … ]

Chargez un SDK tiers uniquement depuis le point d’entrée de votre intégration, et déclarez-le comme dépendance pair optionnelle. Outpost fait de même : @elie-laloum/outpost/providers/vercel, /transports/s3 et /queues/bullmq chargent leur SDK, l’import principal non.

Pour ajouter à Outpost lui-même un agent ou un fournisseur intégré, suivez AGENTS.md dans le dépôt.

API : CliHarness · AgentAdapter · ConversationStore · SandboxProvider · SandboxLease · ModelProvider · Transport · TaskQueue · diagnoseSandbox.

DecisionProvider évalue des questions typées sur un état JSON sans perte. Il est indépendant de ModelProvider et n’alloue aucune sandbox. Utilisez l’adapter HTTP System One commun à Jev et aux endpoints Laya compatibles, ou implémentez une requête annulable renvoyant les réponses natives et l’usage disponible. Voir les décisions typées et le routage par étape.