Verstak Plugin SDK — manifest schema, TypeScript SDK, RPC protocol, capability contracts, event schemas, test helpers, packaging tools
 
 
Go to file
mirivlad e2d07145d6 feat: allow secret workbench resources 2026-06-29 20:44:02 +08:00
dist feat: allow secret workbench resources 2026-06-29 20:44:02 +08:00
schemas feat: allow secret workbench resources 2026-06-29 20:44:02 +08:00
scripts feat: add workspaceItems contribution point + openProviders to contributions schema 2026-06-19 16:41:25 +08:00
src feat: allow secret workbench resources 2026-06-29 20:44:02 +08:00
.gitignore chore: add .gitignore, remove node_modules from tracking 2026-06-16 12:12:31 +08:00
AGENTS.md docs: add AGENTS.md with platform architecture rules 2026-06-16 11:53:17 +08:00
README.md feat: expose file byte read API 2026-06-29 03:16:16 +08:00
package-lock.json feat: add scripts/build.sh, test.sh, check.sh 2026-06-16 12:11:59 +08:00
package.json feat: add manifest schema, TypeScript types, PluginAPI, RPC client, event schemas, sync schemas 2026-06-16 11:55:47 +08:00
tsconfig.json feat: add manifest schema, TypeScript types, PluginAPI, RPC client, event schemas, sync schemas 2026-06-16 11:55:47 +08:00

README.md

verstak-sdk

Verstak Plugin SDK — manifest schema, TypeScript SDK, RPC protocol, capability contracts, event schemas, test helpers, packaging tools

Bundled Frontend API Contract

Verstak Desktop creates the real API with createPluginAPI(pluginId) and passes it to bundled plugin components at mount time. The SDK exports TypeScript types for that host-provided object:

  • settings.read/write/writeAll
  • capabilities.list/get/has
  • commands.register/execute/executeFor
  • contributions.list
  • events.publish/subscribe
  • files.list/metadata/readText/readBytes/writeText/createFolder/move/trash/listTrash/restoreTrash
  • workbench.openResource/editResource
  • optional dispose

Files paths are canonical vault-relative slash paths. Backslashes, Windows/UNC absolute paths, traversal, null bytes, .verstak variants, and symlink read/write/move/trash operations are rejected by the host. Text read/write is UTF-8 only; readText is limited to 2 MB and readBytes returns a bounded base64 payload for regular files up to 8 MB.

Open/edit routing uses OpenResourceRequest with kind: "vault-file" and contexts generic-text, generic-markdown, and notes-markdown. Plugins that request routing declare workbench.open; editor/viewer plugins contribute contributes.openProviders. A no-match route returns status: "no-provider".

contributions.list(point) returns host-flattened contribution records with pluginId. Files and Notes use this with commands.executeFor(pluginId, handler, args) to run action providers declared by other plugins.

Workspace lifecycle events are workspace.created, workspace.renamed, workspace.trashed, and workspace.selected. Payloads include workspaceRootPath and workspaceName; rename/trash events include previous or trash metadata.

Bundled frontend plugins are trusted/cooperative and run in the desktop JS context. Current permission checks are contract checks, not a security boundary; real isolation belongs to a later sidecar/sandbox milestone.