@burdenoff/vibe-plugin-notify 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Type definitions for vibe-plugin-notify
3
+ *
4
+ * Generic notification plugin for AI coding tools (OpenCode, Claude Code, Gemini CLI, etc.)
5
+ */
6
+ import type { Elysia } from "elysia";
7
+ import type { Command } from "commander";
8
+ export type PluginTag = "backend" | "frontend" | "cli" | "provider" | "adapter" | "integration";
9
+ export interface StorageProvider {
10
+ get(namespace: string, key: string): Promise<string | null>;
11
+ set(namespace: string, key: string, value: string): Promise<void>;
12
+ delete(namespace: string, key: string): Promise<boolean>;
13
+ keys(namespace: string): Promise<string[]>;
14
+ list(namespace: string): Promise<Array<{
15
+ key: string;
16
+ value: string;
17
+ }>>;
18
+ }
19
+ export interface Logger {
20
+ debug(source: string, message: string, metadata?: Record<string, unknown>): void;
21
+ info(source: string, message: string, metadata?: Record<string, unknown>): void;
22
+ warn(source: string, message: string, metadata?: Record<string, unknown>): void;
23
+ error(source: string, message: string, metadata?: Record<string, unknown>): void;
24
+ }
25
+ export interface ServiceRegistry {
26
+ registerService(pluginName: string, serviceName: string, service: unknown): void;
27
+ getService<T>(pluginName: string, serviceName: string): T | undefined;
28
+ unregisterServices(pluginName: string): void;
29
+ }
30
+ export interface HostServices {
31
+ storage: StorageProvider;
32
+ logger: Logger;
33
+ serviceRegistry: ServiceRegistry;
34
+ getProvider<T>(type: "tunnel" | "session"): T | undefined;
35
+ getAgentBaseUrl(): string;
36
+ getAgentVersion(): string;
37
+ }
38
+ export interface PluginRouteDeps {
39
+ db: unknown;
40
+ serviceRegistry: ServiceRegistry;
41
+ pluginManager: unknown;
42
+ }
43
+ export interface VibePlugin {
44
+ name: string;
45
+ version: string;
46
+ description?: string;
47
+ tags?: PluginTag[];
48
+ cliCommand?: string;
49
+ apiPrefix?: string;
50
+ dependencies?: string[];
51
+ publicPaths?: string[];
52
+ providers?: Record<string, unknown>;
53
+ ui?: {
54
+ staticDir?: string;
55
+ devUrl?: string;
56
+ title?: string;
57
+ icon?: string;
58
+ };
59
+ createRoutes?: (deps: PluginRouteDeps) => any;
60
+ onCliSetup?: (program: Command, hostServices: HostServices) => void | Promise<void>;
61
+ onServerStart?: (app: Elysia, hostServices: HostServices) => void | Promise<void>;
62
+ onServerReady?: (app: Elysia, hostServices: HostServices) => void | Promise<void>;
63
+ onServerStop?: () => void | Promise<void>;
64
+ }
65
+ /**
66
+ * Generic event from AI coding tools (OpenCode, Claude Code, Gemini CLI, etc.)
67
+ */
68
+ export interface NotifyEvent {
69
+ type: string;
70
+ properties?: Record<string, unknown>;
71
+ timestamp?: string;
72
+ /** Source tool identifier (e.g., "opencode", "claude-code", "gemini-cli") */
73
+ source?: string;
74
+ }
75
+ export interface WebhookEndpoint {
76
+ id: string;
77
+ name: string;
78
+ url: string;
79
+ enabled: boolean;
80
+ eventTypes: string[];
81
+ headers?: Record<string, string>;
82
+ createdAt: string;
83
+ updatedAt: string;
84
+ }
85
+ export interface WebhookDelivery {
86
+ id: string;
87
+ webhookId: string;
88
+ eventType: string;
89
+ payload: string;
90
+ status: "pending" | "delivered" | "failed" | "abandoned";
91
+ statusCode?: number;
92
+ error?: string;
93
+ attemptNumber: number;
94
+ createdAt: string;
95
+ deliveredAt?: string;
96
+ }
97
+ export interface WebhookPayload {
98
+ id: string;
99
+ timestamp: string;
100
+ event: {
101
+ type: string;
102
+ sessionId?: string;
103
+ sessionTitle?: string;
104
+ properties: Record<string, unknown>;
105
+ };
106
+ source: {
107
+ agent: string;
108
+ plugin: string;
109
+ version: string;
110
+ /** Source tool identifier (e.g., "opencode", "claude-code", "gemini-cli") */
111
+ tool?: string;
112
+ };
113
+ }
114
+ export interface PluginConfig {
115
+ webhookTimeoutMs: number;
116
+ webhookRetryCount: number;
117
+ }
118
+ export declare const DEFAULT_CONFIG: PluginConfig;
119
+ export declare const STORAGE_NAMESPACE = "notify";
120
+ export declare const STORAGE_KEYS: {
121
+ readonly WEBHOOKS: "webhooks";
122
+ readonly DELIVERIES: "deliveries";
123
+ readonly CONNECTION_STATUS: "connection_status";
124
+ };
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Type definitions for vibe-plugin-notify
3
+ *
4
+ * Generic notification plugin for AI coding tools (OpenCode, Claude Code, Gemini CLI, etc.)
5
+ */
6
+ export const DEFAULT_CONFIG = {
7
+ webhookTimeoutMs: 30000,
8
+ webhookRetryCount: 3,
9
+ };
10
+ // =============================================================================
11
+ // Storage Keys
12
+ // =============================================================================
13
+ export const STORAGE_NAMESPACE = "notify";
14
+ export const STORAGE_KEYS = {
15
+ WEBHOOKS: "webhooks",
16
+ DELIVERIES: "deliveries",
17
+ CONNECTION_STATUS: "connection_status",
18
+ };
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgLH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEF,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@burdenoff/vibe-plugin-notify",
3
+ "version": "1.0.0",
4
+ "description": "Webhook notifications for AI coding tools - VibeControls Agent plugin",
5
+ "main": "./dist/index.js",
6
+ "type": "module",
7
+ "engines": {
8
+ "bun": ">=1.3.0"
9
+ },
10
+ "scripts": {
11
+ "build": "bun run tsc",
12
+ "lint": "eslint ./src",
13
+ "format": "bunx prettier . --write",
14
+ "format:check": "bunx prettier . --check",
15
+ "type:check": "tsc --noEmit",
16
+ "clean": "rimraf dist",
17
+ "prebuild": "bun run clean",
18
+ "prepublishOnly": "bun run build",
19
+ "sanity": "bun run format:check && bun run lint && bun run type:check && bun run build"
20
+ },
21
+ "keywords": [
22
+ "vibecontrols",
23
+ "vibe",
24
+ "vibe-plugin",
25
+ "webhook",
26
+ "notifications",
27
+ "slack",
28
+ "discord",
29
+ "task-completion",
30
+ "opencode",
31
+ "claude-code",
32
+ "gemini-cli",
33
+ "ai-coding",
34
+ "elysia",
35
+ "bun"
36
+ ],
37
+ "author": {
38
+ "name": "Vignesh T.V",
39
+ "email": "vignesh@burdenoff.com",
40
+ "url": "https://github.com/tvvignesh"
41
+ },
42
+ "license": "SEE LICENSE IN LICENSE",
43
+ "devDependencies": {
44
+ "@eslint/js": "^10.0.1",
45
+ "@types/bun": "^1.2.10",
46
+ "commander": "^14.0.3",
47
+ "elysia": "^1.3.0",
48
+ "eslint": "^9.30.1",
49
+ "globals": "^17.3.0",
50
+ "prettier": "^3.6.2",
51
+ "rimraf": "^6.0.1",
52
+ "typescript": "^5.8.3",
53
+ "typescript-eslint": "^8.56.0"
54
+ },
55
+ "peerDependencies": {
56
+ "elysia": ">=1.3.0"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "elysia": {
60
+ "optional": true
61
+ }
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/algoshred/vibe-plugin-notify.git"
66
+ },
67
+ "bugs": {
68
+ "url": "https://github.com/algoshred/vibe-plugin-notify/issues"
69
+ },
70
+ "homepage": "https://vibecontrols.com",
71
+ "publishConfig": {
72
+ "access": "public",
73
+ "registry": "https://registry.npmjs.org/"
74
+ },
75
+ "files": [
76
+ "dist/**/*",
77
+ "README.md",
78
+ "LICENSE"
79
+ ]
80
+ }