@pickaxe/driftstone
v1.3.0
Published
TypeScript SDK for the Driftstone API.
Readme
Driftstone TypeScript
TypeScript SDK for the Driftstone repository API.
Install
npm install driftstoneQuick Start
import { Driftstone } from "driftstone";
const client = new Driftstone({ apiKey: "dk-..." });
const repo = await client.repos.create("hello-world");
const upload = await client.repos.createUpload("hello-world", {
storageDir: "ver-1234abcd",
branch: "main",
files: [{ name: "README.md", hash: "64-character-sha256-or-client-hash" }],
});
await client.uploadFiles(upload, upload.uploadUrls, ".");
await client.repos.completeUpload("hello-world", upload.uploadId);
const download = await client.repos.createDownload("hello-world", {
type: "main",
files: [{ path: "ver-1234abcd/README.md" }],
});
console.log(repo.id, download.downloadUrls);Extensions
const extension = await client.extensions.create({
name: "README reviewer",
prompt: "Inspect README changes and suggest concise release-note updates.",
presets: ["openclaw"],
});
const run = await client.extensions.run(extension.id, {
path: "organizations/org-.../repositories/hello-world/main/ver-1234abcd",
prompt: "Focus on docs/README.md.",
});
const status = await client.extensions.poll(run.runId);
console.log(status.status, status.result);Configuration
const client = new Driftstone({
apiKey: "dk-...",
version: "v1",
timeout: 30_000,
baseUrl: "https://api.driftstone.ai",
});The default base URL mirrors the Python SDK. Set baseUrl when targeting a custom deployment or the public custom domain.
Repositories
await client.repos.create("hello-world");
await client.repos.list({ page: 1, pageSize: 10 });
await client.repos.get("hello-world");
await client.repos.delete("hello-world");Branches
await client.repos.createBranch("hello-world", "feature-readme", {
storageDir: "state-123",
deriveFromMain: true,
transforms: {
"README.md": "# Example Repo\nUpdated content.\n",
},
});
await client.repos.createBranch("hello-world", "empty-feature", {
deriveFromMain: false,
});
await client.repos.listBranches("hello-world");
await client.repos.getBranch("hello-world", "feature-readme");
await client.repos.deleteBranch("hello-world", "feature-readme");Uploads And Downloads
const upload = await client.repos.createUpload("hello-world", {
storageDir: "ver-1234abcd",
files: [{ name: "README.md", hash: "sha256-or-client-hash" }],
});
await client.uploadFiles(upload, upload.uploadUrls, ".");
await client.repos.completeUpload("hello-world", upload.uploadId);
const files = await client.repos.createDirectoryDownload("hello-world", {
type: "main",
directory: "ver-1234abcd",
});Directory Copies
const copy = await client.repos.copyDirectory("hello-world", {
sourceDir: "ver-1234abcd",
destDir: "state-456",
sourceBranch: "main",
destBranch: "feature-readme",
});
const status = await client.repos.getCopyStatus("hello-world", copy.runId);