# IdeA Plugin SDK

Minimal public TypeScript SDK for IdeA plugins.

This first version intentionally stays small:

- public manifest types for `idea-plugin.json`;
- public runtime types for plugin modules exposing `activate(ctx)`;
- a lightweight manifest validator;
- a minimal `examples/hello-plugin` plugin.

## Install

```sh
npm install
```

## Build

```sh
npm run build
```

## Typecheck the example

```sh
npm run typecheck:examples
```

## Build the installable hello plugin archive

```sh
npm run package:hello-plugin
```

The archive is written to:

```text
examples/hello-plugin/build/hello-plugin-0.1.0.zip
```

Its ZIP root contains `idea-plugin.json` directly, with no wrapping parent directory. The
compiled ESM entrypoint is emitted at `dist/index.js`, matching the manifest `main` field.

## Plugin shape

An IdeA plugin ships an `idea-plugin.json` manifest and a JavaScript entrypoint built from
TypeScript.

```json
{
  "ideaPluginManifestVersion": 1,
  "id": "com.example.hello",
  "displayName": "Hello Plugin",
  "version": "0.1.0",
  "main": "dist/index.js",
  "trustLevel": "full",
  "contributes": {}
}
```

The entrypoint exports an `activate(ctx)` function:

```ts
import type { ActivateContext } from "@idea/plugin-sdk";

export function activate(ctx: ActivateContext): void {
  ctx.logger.info("hello from plugin");
}
```

## Manifest Validation

```ts
import { validatePluginManifest } from "@idea/plugin-sdk";

const result = validatePluginManifest(manifestJson);
if (!result.success) {
  console.error(result.errors);
}
```

This validator is deliberately strict for core fields and permissive about future unknown fields.
It is not a security boundary.
