Official
git
Built-in git UI (JavaScript UI plugin).
The app opens the listing; nothing installs until an agent in your Plugins workspace has read the files and you enable the plugin. In a terminal: cvg install convergence/git@0.2.0
Permissions in 0.2.0
Files
main.ts1.5 KB
// Register the source-control command and views synchronously, then follow event streams.
// Repository effects follow the view lifecycle; render modules remain pure.
import * as Effect from "effect/Effect";
import * as Stream from "effect/Stream";
import { Commands, Events, Views, runPlugin } from "convergence/effect";
import { Git } from "./controller.ts";
import { runFinished } from "./status.ts";
import { renderRail, renderPanel } from "./views/panel.ts";
const program = Effect.gen(function* () {
const git = yield* Git;
const commands = yield* Commands;
yield* commands.register("git.toggle", git.toggle);
const views = yield* Views;
git.views.push(
yield* views.slot(
"rail",
(ctx) => {
ctx.run(git.show(ctx.app.workspaceId));
return renderRail(ctx, git);
},
{ on: ["app_state"], order: 20 },
),
);
git.views.push(
yield* views.slot("right", (ctx) => renderPanel(ctx, git), {
on: ["app_state"],
order: 20,
title: "Source Control",
}),
);
const events = yield* Events;
yield* events.all.pipe(
Stream.runForEach((event) => {
if (
(event.event === "git_changed" && event.workspaceId === git.state.workspaceId) ||
(event.event === "agent" && runFinished(event.kind)) ||
event.event === "workspaces_changed"
)
return Effect.forkScoped(git.refresh(), { startImmediately: true });
return Effect.void;
}),
Effect.forkScoped({ startImmediately: true }),
);
});
export const activate = runPlugin(Git.layer, program);Versions
| Version | Published | Plugin API | Size | Permissions | Status |
|---|---|---|---|---|---|
| 0.2.0latest | Oct 5, 2026 | >=2 <3 | 13.4 KB | 4 permissions | Listed |
No comments yet.