본문으로 건너뛰기

진입점과 공개 타입

진입점(매니페스트의 main)은 activate를 내보내고 선택적으로 deactivate를 내보내는 ESM 번들 하나여야 합니다.

export function activate(context) {
// 플러그인이 불려올 때 호출된다. `context` 는 권한으로 통제되는
// ExtensionContext 다 — 전체 API 는 아래를 보라.
context.commands.register("sayHello", () => {
context.ui.showNotification("Hello from my plugin!");
});
context.events.on("file:save", (filePath) => {
console.log("File saved:", filePath);
});
}
export function deactivate() {
// 플러그인이 내려갈 때 호출된다. context.subscriptions 로 등록한 것
// (명령, 이벤트 리스너, 상태바 항목, 스타일, 패널, 탭)은 자동으로
// 정리된다 — 이 훅은 Disposable 로 추적되지 않는 정리(예: 타이머)에만
// 필요하다.
}

deactivate는 trusted 티어 전용 훅입니다. 샌드박스 플러그인은 되호출되지 않습니다 — 내려가면 그 웹뷰 렐름 전체가 파괴되므로 타이머·리스너·선언 항목이 함께 사라집니다. 거기에 deactivate를 내보내는 것은 생명주기 훅처럼 읽히는 죽은 코드입니다 — 참조 플러그인 word-count에는 일부러 없습니다.

Baram의 내부 소스가 아니라 생성된 공개 타입 선언에 맞춰 작성하십시오.

  • examples/plugins/plugin-api.d.tsnpm run types:plugin(tsc -p tsconfig.plugin-api.json)으로 src/plugins/public-api.ts에서 생성됩니다. 모든 공개 인터페이스(ExtensionContext, AIAPI, NetworkAPI, StorageAPI, UIAPI, CommandsAPI, EditorAPI, EventsAPI, FilesAPI, PluginManifest/PluginCapability/PluginEventName, 그리고 옵션·모델 타입)를 타입 전용 선언으로 다시 내보냅니다.
  • examples/plugins/types.d.ts — 그 배럴이 의존하는 작은 형제 .d.ts입니다.

두 파일을 플러그인 소스 옆으로 복사하고(두 예제 플러그인의 tsconfig.json은 대신 상대 include 경로로 참조합니다 — 어느 쪽이든 됩니다) 거기서 타입을 import하십시오.

// sandboxed (기본 티어)
import type { SandboxContext } from "./plugin-api";
// trusted
import type { ExtensionContext, StatusBarItem } from "./plugin-api";

이렇게 하면 Baram 내부 소스 트리에 의존하지 않고 에디터 자동완성과 타입 검사를 온전히 받습니다 — word-count/src/index.tsai-summary/src/index.ts는 커밋된 .d.ts 파일만으로 타입 검사를 통과합니다(예제 디렉터리에서 npm run typecheck, 또는 tsc --noEmit).