@vibecontrols/vibe-plugin-ai-copilot 2026.601.1
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.
- package/LICENSE +25 -0
- package/README.md +69 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.js +8 -0
- package/package.json +95 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Burdenoff Consultancy Services Private Limited,
|
|
4
|
+
Algoshred Technologies Private Limited,
|
|
5
|
+
and all its sister companies.
|
|
6
|
+
|
|
7
|
+
Maintainer: Vignesh T.V <https://github.com/tvvignesh>
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11
|
+
in the Software without restriction, including without limitation the rights
|
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
13
|
+
copies of the Software, and to permit persons to whom the Software is furnished
|
|
14
|
+
to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
25
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# @vibecontrols/vibe-plugin-ai-copilot
|
|
2
|
+
|
|
3
|
+
<!-- VIBECONTROLS_OSS_BODY_START -->
|
|
4
|
+
|
|
5
|
+
> GitHub Copilot CLI for the agent runtime.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
vibe plugin install @vibecontrols/vibe-plugin-ai-copilot
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or install the npm package directly into an existing project that hosts the VibeControls agent:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bun add @vibecontrols/vibe-plugin-ai-copilot
|
|
17
|
+
# or
|
|
18
|
+
npm install @vibecontrols/vibe-plugin-ai-copilot
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## How it works
|
|
22
|
+
|
|
23
|
+
AI **providers** implement the `AIProvider` contract from `@vibecontrols/vibe-plugin-ai` (meta). Once installed and registered, the agent can route prompts, hooks and MCP requests through this provider alongside any others you have configured. The meta plugin handles fan-out, provider selection and capability negotiation.
|
|
24
|
+
|
|
25
|
+
This package is a **provider** registered against the `@vibecontrols/vibe-plugin-ai` meta plugin. Install the meta plugin first; this provider plugs into it.
|
|
26
|
+
|
|
27
|
+
## Upstream
|
|
28
|
+
|
|
29
|
+
- **GitHub Copilot CLI** — <https://github.com/github/copilot-cli>
|
|
30
|
+
|
|
31
|
+
## More
|
|
32
|
+
|
|
33
|
+
- npm: <https://www.npmjs.com/package/@vibecontrols/vibe-plugin-ai-copilot>
|
|
34
|
+
- Source: <https://github.com/algoshred/vibe-plugin-ai-copilot>
|
|
35
|
+
- Plugin contract / SDK: <https://github.com/algoshred/vibecontrols-plugin-sdk>
|
|
36
|
+
- Plugin catalogue: <https://vibecontrols.com/plugins/ai-copilot>
|
|
37
|
+
|
|
38
|
+
<!-- VIBECONTROLS_OSS_BODY_END -->
|
|
39
|
+
|
|
40
|
+
<!-- VIBECONTROLS_OSS_FOOTER_START -->
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## About VibeControls
|
|
45
|
+
|
|
46
|
+
**VibeControls** is the agentic engineering mission control for AI-native teams. Vibe-plugins extend the VibeControls agent with new providers, tools, sessions, tunnels, storage backends, and security stages.
|
|
47
|
+
|
|
48
|
+
- Website: <https://vibecontrols.com>
|
|
49
|
+
- Documentation: <https://docs.vibecontrols.com>
|
|
50
|
+
- Plugin SDK: <https://github.com/algoshred/vibecontrols-plugin-sdk>
|
|
51
|
+
- All plugins: <https://github.com/algoshred?q=vibe-plugin-&type=all>
|
|
52
|
+
|
|
53
|
+
## Credits
|
|
54
|
+
|
|
55
|
+
This plugin builds on the following upstream open-source projects. All trademarks and copyrights remain with their respective owners.
|
|
56
|
+
|
|
57
|
+
- **GitHub Copilot CLI** — <https://github.com/github/copilot-cli>
|
|
58
|
+
|
|
59
|
+
## License
|
|
60
|
+
|
|
61
|
+
Released under the [MIT License](./LICENSE).
|
|
62
|
+
|
|
63
|
+
Copyright (c) 2026 Burdenoff Consultancy Services Private Limited, Algoshred Technologies Private Limited, and all its sister companies.
|
|
64
|
+
|
|
65
|
+
Maintainer: **Vignesh T.V** — <https://github.com/tvvignesh>
|
|
66
|
+
|
|
67
|
+
**Note**: this plugin is open source under MIT. The `@vibecontrols/agent` runtime that loads and orchestrates plugins is **closed source** and proprietary to Burdenoff Consultancy Services Pvt. Ltd. If you want a fully self-hostable agent, please open an issue or contact the maintainer.
|
|
68
|
+
|
|
69
|
+
<!-- VIBECONTROLS_OSS_FOOTER_END -->
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe-plugin-copilot
|
|
3
|
+
*
|
|
4
|
+
* GitHub Copilot AI agent provider for VibeControls Agent.
|
|
5
|
+
* CLI-only provider — spawns the CLI binary for prompt execution.
|
|
6
|
+
*/
|
|
7
|
+
import type { VibePlugin, ProfileContext } from "@vibecontrols/plugin-sdk";
|
|
8
|
+
type ProviderMode = "sdk" | "cli";
|
|
9
|
+
type AISessionStatus = "active" | "idle" | "processing" | "error" | "terminated";
|
|
10
|
+
type AILogType = "input" | "output" | "thinking" | "event" | "error" | "metadata";
|
|
11
|
+
interface AISessionConfig {
|
|
12
|
+
name: string;
|
|
13
|
+
agentType: string;
|
|
14
|
+
model?: string;
|
|
15
|
+
maxTokens?: number;
|
|
16
|
+
temperature?: number;
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
workingDirectory?: string;
|
|
19
|
+
providerConfig?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
interface AISession {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
status: AISessionStatus;
|
|
25
|
+
agentType: string;
|
|
26
|
+
provider: string;
|
|
27
|
+
config: AISessionConfig;
|
|
28
|
+
stats: AIUsageStats;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
}
|
|
32
|
+
interface AIContext {
|
|
33
|
+
id: string;
|
|
34
|
+
type: string;
|
|
35
|
+
content: string;
|
|
36
|
+
metadata?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
interface AIResponse {
|
|
39
|
+
content: string;
|
|
40
|
+
model: string;
|
|
41
|
+
inputTokens: number;
|
|
42
|
+
outputTokens: number;
|
|
43
|
+
durationMs: number;
|
|
44
|
+
metadata?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
interface AIStreamChunk {
|
|
47
|
+
type: "text" | "thinking" | "error" | "done";
|
|
48
|
+
content: string;
|
|
49
|
+
tokensUsed?: number;
|
|
50
|
+
}
|
|
51
|
+
interface AILog {
|
|
52
|
+
id: string;
|
|
53
|
+
sessionId: string;
|
|
54
|
+
type: AILogType;
|
|
55
|
+
content: string;
|
|
56
|
+
tokenCount?: number;
|
|
57
|
+
model?: string;
|
|
58
|
+
durationMs?: number;
|
|
59
|
+
createdAt: string;
|
|
60
|
+
}
|
|
61
|
+
interface AILogFilter {
|
|
62
|
+
types?: AILogType[];
|
|
63
|
+
startDate?: string;
|
|
64
|
+
endDate?: string;
|
|
65
|
+
search?: string;
|
|
66
|
+
limit?: number;
|
|
67
|
+
offset?: number;
|
|
68
|
+
}
|
|
69
|
+
interface AIUsageStats {
|
|
70
|
+
inputTokens: number;
|
|
71
|
+
outputTokens: number;
|
|
72
|
+
requestCount: number;
|
|
73
|
+
estimatedCostUsd: number;
|
|
74
|
+
}
|
|
75
|
+
interface AIAgentProvider {
|
|
76
|
+
readonly name: string;
|
|
77
|
+
createSession(config: AISessionConfig): Promise<AISession>;
|
|
78
|
+
sendPrompt(sessionId: string, prompt: string, context?: AIContext[]): Promise<AIResponse>;
|
|
79
|
+
streamPrompt?(sessionId: string, prompt: string, context?: AIContext[], onChunk?: (chunk: AIStreamChunk) => void): Promise<AIResponse>;
|
|
80
|
+
getSessionLogs(sessionId: string, filter?: AILogFilter): Promise<AILog[]>;
|
|
81
|
+
getUsageStats(sessionId: string): Promise<AIUsageStats>;
|
|
82
|
+
configureSession(sessionId: string, config: Partial<AISessionConfig>): Promise<void>;
|
|
83
|
+
destroySession(sessionId: string): Promise<void>;
|
|
84
|
+
listSessions(): Promise<AISession[]>;
|
|
85
|
+
getSessionStatus(sessionId: string): Promise<AISessionStatus>;
|
|
86
|
+
healthCheck(): Promise<{
|
|
87
|
+
ok: boolean;
|
|
88
|
+
message?: string;
|
|
89
|
+
}>;
|
|
90
|
+
getCapabilities?(): Record<string, boolean>;
|
|
91
|
+
getMode?(): ProviderMode;
|
|
92
|
+
setMode?(_mode: ProviderMode): void;
|
|
93
|
+
}
|
|
94
|
+
type CopilotVibePlugin = VibePlugin & {
|
|
95
|
+
providers?: {
|
|
96
|
+
ai?: AIAgentProvider;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
export declare const createPlugin: (_ctx: ProfileContext) => CopilotVibePlugin;
|
|
100
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Elysia as Elysia2}from"elysia";import{Elysia}from"elysia";function createLifecycleHooks(spec){let{name,onInit,onShutdown,onNuke,telemetryEventName,skipPlatforms}=spec;return{onServerStart:async(_app,hostServices)=>{if(skipPlatforms&&skipPlatforms.includes(process.platform)){process.stderr.write(`[${name}] skipping init on unsupported platform '${process.platform}'
|
|
3
|
+
`);return}if(onInit)await onInit(hostServices);if(telemetryEventName)hostServices.telemetry?.emit(telemetryEventName,{plugin:name})},onServerStop:async(hostServices)=>{if(onShutdown)await onShutdown(hostServices)},onNuke:async(hostServices,ctx)=>{if(onNuke)return onNuke(hostServices,ctx)}}}var TelemetryEmitter=class{constructor(pluginName,pluginVersion,hostServices){this.pluginName=pluginName,this.pluginVersion=pluginVersion,this.hostServices=hostServices}pluginName;pluginVersion;hostServices;emit(eventName,payload){let target=this.hostServices?.telemetry;if(!target)return;target.emit(eventName,{plugin:this.pluginName,version:this.pluginVersion,timestamp:new Date().toISOString(),...payload??{}})}emitReady(context){this.emit(`${this.pluginName}.ready`,context)}emitError(error,context){this.emit(`${this.pluginName}.error`,{message:error.message,...context??{}})}emitEvent(type,payload){this.emit(type,payload)}},BoundLogger=class{constructor(logger,source){this.logger=logger,this.source=source}logger;source;info(message,meta){this.logger?.info?.(this.source,message,meta)}warn(message,meta){this.logger?.warn?.(this.source,message,meta)}error(message,meta){this.logger?.error?.(this.source,message,meta)}debug(message,meta){this.logger?.debug?.(this.source,message,meta)}};var CONTEXT_PROVIDER_TYPE="context",REGISTRY_KEY=Symbol.for("@vibecontrols/plugin-sdk:contextProviders@1");function getRegistry(){let slots=globalThis,existing=slots[REGISTRY_KEY];if(existing)return existing;let created=new Map;return slots[REGISTRY_KEY]=created,created}function registerContextProvider(provider,hostServices){if(!provider||typeof provider.name!=="string"||provider.name.length===0)throw Error("ContextProvider.name is required");if(typeof provider.getContext!=="function")throw Error("ContextProvider.getContext must be a function");getRegistry().set(provider.name,provider),hostServices?.serviceRegistry?.registerProvider?.(CONTEXT_PROVIDER_TYPE,provider,provider.name)}function listContextProviders(){return Array.from(getRegistry().values())}function getContextProvider(name){return getRegistry().get(name)}var ProviderRegistry=class{constructor(hostServices){this.hostServices=hostServices}hostServices;registerContextProvider(provider){registerContextProvider(provider,this.hostServices)}listContextProviders(){return listContextProviders()}getContextProvider(name){return getContextProvider(name)}getServiceRegistry(){return this.hostServices?.serviceRegistry}registerProvider(type,name,provider){this.hostServices?.serviceRegistry?.registerProvider?.(type,provider,name)}getProvider(type,name){let reg=this.hostServices?.serviceRegistry;if(!reg)return;if(name===void 0)return reg.getProvider?.(type);if(reg.getProviderByName)return reg.getProviderByName(type,name);if(!reg.listProvidersForType)return;if(!(reg.listProvidersForType(type)??[]).some((entry)=>typeof entry==="string"?entry===name:entry.pluginName===name))return;return reg.getProvider?.(type)}listProviders(type){return(this.hostServices?.serviceRegistry?.listProvidersForType?.(type)??[]).map((entry)=>typeof entry==="string"?entry:entry.pluginName)}withCliContribution(contribution){let contributors=this.hostServices?.cliContributors;if(!contributors)return;for(let section of contribution.statusSections??[])contributors.addStatusSection?.(section);for(let check of contribution.doctorChecks??[])contributors.addDoctorCheck?.(check)}};var PROVIDER_NAME="copilot",CLI_COMMAND="gh";function platformExeName(base){return process.platform==="win32"?`${base}.exe`:base}function resolveCliBin(){let found=typeof Bun<"u"&&typeof Bun.which==="function"?Bun.which(CLI_COMMAND,{PATH:process.env.PATH}):null;if(found)return found;return platformExeName(CLI_COMMAND)}var CLI_BIN=resolveCliBin(),DISPLAY="GitHub Copilot",API_PREFIX=`/api/ai-${PROVIDER_NAME}`,SUPPORTED_MODES=["cli"],PREREQ_NAME="gh-copilot",CLI_INSTALL_COMMAND=["gh","extension","install","github/gh-copilot"];class ProviderImpl{name=PROVIDER_NAME;sessions=new Map;logIngester=null;hostServices=null;logger=null;setHostServices(hs){this.hostServices=hs,this.logger=new BoundLogger(hs.logger,`${PROVIDER_NAME}-provider`);let registry=new ProviderRegistry(hs);this.logIngester=registry.getProvider("ai","log-ingester")??null}async createSession(config){let id=config.providerConfig?.sessionId||crypto.randomUUID(),now=new Date().toISOString(),existing=this.sessions.get(id);if(existing)return existing.status="active",existing.updatedAt=now,{id,name:existing.config.name,status:"active",agentType:existing.config.agentType,provider:PROVIDER_NAME,config:existing.config,stats:existing.stats,createdAt:existing.createdAt,updatedAt:now};let session={id,config,status:"active",stats:{inputTokens:0,outputTokens:0,requestCount:0,estimatedCostUsd:0},createdAt:now,updatedAt:now};return this.sessions.set(id,session),{id,name:config.name,status:"active",agentType:config.agentType,provider:PROVIDER_NAME,config,stats:session.stats,createdAt:now,updatedAt:now}}async sendPrompt(sessionId,prompt,context){let session=this.sessions.get(sessionId);if(!session)throw Error(`Session ${sessionId} not found`);if(session.status==="terminated")throw Error("Session is terminated");session.status="processing",session.updatedAt=new Date().toISOString();let startTime=Date.now(),fullPrompt=prompt;if(context?.length)fullPrompt=prompt+`
|
|
4
|
+
|
|
5
|
+
`+context.map((c)=>`--- Context (${c.type}): ---
|
|
6
|
+
${c.content}`).join(`
|
|
7
|
+
|
|
8
|
+
`);this.logIngester?.append({sessionId,type:"input",content:prompt});try{let args=CLI_ARGS_FN(session.config,fullPrompt),proc=Bun.spawn([CLI_BIN,...args],{stdout:"pipe",stderr:"pipe",cwd:session.config.workingDirectory||process.cwd(),timeout:300000}),stdout=await new Response(proc.stdout).text(),stderr=await new Response(proc.stderr).text(),exitCode=await proc.exited,durationMs=Date.now()-startTime;if(exitCode!==0&&!stdout)throw Error(`${DISPLAY} exited with code ${exitCode}: ${stderr}`);let content=stdout.trim()||stderr.trim(),inputTokens=Math.ceil(fullPrompt.length/4),outputTokens=Math.ceil(content.length/4);return session.stats.inputTokens+=inputTokens,session.stats.outputTokens+=outputTokens,session.stats.requestCount+=1,session.status="active",session.updatedAt=new Date().toISOString(),this.logIngester?.append({sessionId,type:"output",content,tokenCount:outputTokens,model:"default",durationMs}),{content,model:"default",inputTokens,outputTokens,durationMs,metadata:{exitCode,provider:PROVIDER_NAME,mode:"cli"}}}catch(err){session.status="error",session.updatedAt=new Date().toISOString();let errorMsg=err instanceof Error?err.message:"Unknown error";throw this.logIngester?.append({sessionId,type:"error",content:errorMsg}),err}}async getSessionLogs(_sessionId,_filter){return[]}async getUsageStats(sessionId){return this.sessions.get(sessionId)?.stats??{inputTokens:0,outputTokens:0,requestCount:0,estimatedCostUsd:0}}async configureSession(sessionId,config){let s=this.sessions.get(sessionId);if(s)Object.assign(s.config,config),s.updatedAt=new Date().toISOString()}async destroySession(sessionId){let s=this.sessions.get(sessionId);if(s)s.status="terminated",s.updatedAt=new Date().toISOString()}async listSessions(){return Array.from(this.sessions.values()).map((s)=>({id:s.id,name:s.config.name,status:s.status,agentType:s.config.agentType,provider:PROVIDER_NAME,config:s.config,stats:s.stats,createdAt:s.createdAt,updatedAt:s.updatedAt}))}async getSessionStatus(sessionId){return this.sessions.get(sessionId)?.status??"terminated"}async healthCheck(){let version=getCliVersion();return version?{ok:!0,message:`${DISPLAY} ${version}`}:{ok:!1,message:`${DISPLAY} GitHub CLI extension not available`}}getCapabilities(){return{streaming:!1,vision:!1,fileAttachments:!1,toolUse:!1,mcpSupport:!1,voiceMode:!1,cancelSupport:!0,modelListing:!1}}getSupportedModes(){return[...SUPPORTED_MODES]}getDisplayName(){return DISPLAY}getPrereqApiPrefix(){return API_PREFIX}getMode(){return"cli"}setMode(mode){if(mode!=="cli")throw Error(`${DISPLAY} only supports CLI mode`)}log(level,msg){this.logger?.[level](msg)}}function CLI_ARGS_FN(_config,prompt){return["copilot","explain",prompt]}function getCliVersion(){try{let proc=Bun.spawnSync([CLI_BIN,"copilot","--help"],{timeout:5000,stdout:"pipe",stderr:"pipe"});if(proc.exitCode===0)return proc.stdout.toString().trim().split(/\r?\n/)[0]||"gh copilot"}catch{}return null}function createPrereqsRoutes(){return new Elysia2({prefix:"/prereqs"}).get("/status",()=>{let version=getCliVersion();return{satisfied:Boolean(version),missing:version?[]:[{name:PREREQ_NAME,kind:"manual",requiresSudo:!1,description:`${DISPLAY} GitHub CLI extension for CLI mode`}]}}).post("/install",()=>{if(getCliVersion())return{ok:!0,installed:[PREREQ_NAME],pendingSudo:[],errors:[]};let proc=Bun.spawnSync(CLI_INSTALL_COMMAND,{timeout:120000,stdout:"pipe",stderr:"pipe"});if(proc.exitCode===0)return{ok:!0,installed:[PREREQ_NAME],pendingSudo:[],errors:[]};return{ok:!1,installed:[],pendingSudo:[],errors:[{name:PREREQ_NAME,message:proc.stderr.toString().trim()||`Run manually: ${CLI_INSTALL_COMMAND.join(" ")}`}]}})}var PLUGIN_NAME=PROVIDER_NAME,PLUGIN_VERSION="1.0.0",provider=new ProviderImpl,lifecycle=createLifecycleHooks({name:PLUGIN_NAME,telemetryEventName:"ai.provider.ready",onInit:(hostServices)=>{provider.setHostServices(hostServices),new TelemetryEmitter(PLUGIN_NAME,PLUGIN_VERSION,hostServices).emit("ai.provider.ready",{provider:PLUGIN_NAME})},onShutdown:()=>{for(let[id]of provider.sessions)provider.destroySession(id).catch(()=>{})}}),createPlugin=(_ctx)=>({capabilities:{secrets:"read",subprocess:!0,gateway:!1,telemetry:!0},name:PLUGIN_NAME,version:PLUGIN_VERSION,description:`${DISPLAY} AI agent provider for VibeControls`,tags:["provider","integration"],apiPrefix:API_PREFIX,prerequisites:[{name:PREREQ_NAME,kind:"manual",requiresSudo:!1}],providers:{ai:provider},createRoutes:()=>createPrereqsRoutes(),onServerStart:lifecycle.onServerStart,onServerStop:lifecycle.onServerStop});export{createPlugin};
|
package/package.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vibecontrols/vibe-plugin-ai-copilot",
|
|
3
|
+
"version": "2026.601.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"description": "GitHub Copilot AI agent provider for VibeControls Agent",
|
|
7
|
+
"engines": {
|
|
8
|
+
"bun": ">=1.3.14"
|
|
9
|
+
},
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "Vignesh T.V",
|
|
12
|
+
"url": "https://github.com/tvvignesh"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "bun build ./src/index.ts --outdir ./dist --target bun --minify-syntax --minify-whitespace --external elysia && tsc --emitDeclarationOnly --declaration --outDir ./dist",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"lint": "eslint ./src",
|
|
19
|
+
"format": "bunx prettier . --write",
|
|
20
|
+
"format:check": "bunx prettier . --check",
|
|
21
|
+
"type:check": "tsc --noEmit",
|
|
22
|
+
"clean": "rimraf dist",
|
|
23
|
+
"prebuild": "bun run clean",
|
|
24
|
+
"prepublishOnly": "bun run build",
|
|
25
|
+
"sanity": "bun run format:check && bun run lint && bun run type:check && bun run build"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@vibecontrols/plugin-sdk": "2026.601.1",
|
|
29
|
+
"elysia": "^1.3.0",
|
|
30
|
+
"openai": "^4.80.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@eslint/js": "^10.0.1",
|
|
34
|
+
"@types/node": "^22.0.0",
|
|
35
|
+
"bun-types": "^1.3.9",
|
|
36
|
+
"eslint": "^9.30.1",
|
|
37
|
+
"globals": "^17.3.0",
|
|
38
|
+
"prettier": "^3.6.2",
|
|
39
|
+
"rimraf": "^6.0.1",
|
|
40
|
+
"typescript": "^5.9.3",
|
|
41
|
+
"typescript-eslint": "^8.56.0"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@vibecontrols/agent": ">=2.0.0",
|
|
45
|
+
"@vibecontrols/vibe-plugin-ai": "2026.509.1"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"@vibecontrols/agent": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"keywords": [
|
|
53
|
+
"vibecontrols",
|
|
54
|
+
"vibe",
|
|
55
|
+
"vibe-plugin",
|
|
56
|
+
"copilot",
|
|
57
|
+
"ai",
|
|
58
|
+
"bun"
|
|
59
|
+
],
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "git+https://github.com/algoshred/vibe-plugin-ai-copilot.git"
|
|
63
|
+
},
|
|
64
|
+
"bugs": {
|
|
65
|
+
"url": "https://github.com/algoshred/vibe-plugin-ai-copilot/issues"
|
|
66
|
+
},
|
|
67
|
+
"homepage": "https://vibecontrols.com",
|
|
68
|
+
"publishConfig": {
|
|
69
|
+
"access": "public",
|
|
70
|
+
"registry": "https://registry.npmjs.org/"
|
|
71
|
+
},
|
|
72
|
+
"files": [
|
|
73
|
+
"dist/**/*",
|
|
74
|
+
"!dist/**/*.map",
|
|
75
|
+
"README.md",
|
|
76
|
+
"LICENSE"
|
|
77
|
+
],
|
|
78
|
+
"overrides": {
|
|
79
|
+
"lodash": ">=4.17.21",
|
|
80
|
+
"lodash-es": ">=4.17.21",
|
|
81
|
+
"dompurify": ">=3.3.4",
|
|
82
|
+
"fast-xml-parser": ">=4.5.5",
|
|
83
|
+
"@xmldom/xmldom": ">=0.8.12",
|
|
84
|
+
"swiper": ">=12.1.2",
|
|
85
|
+
"brace-expansion": ">=1.1.13",
|
|
86
|
+
"follow-redirects": ">=1.15.12",
|
|
87
|
+
"smol-toml": ">=1.6.1",
|
|
88
|
+
"axios": ">=1.15.0",
|
|
89
|
+
"flatted": ">=3.4.1",
|
|
90
|
+
"yaml": ">=2.8.3",
|
|
91
|
+
"picomatch": ">=2.3.2",
|
|
92
|
+
"immutable": ">=3.8.3",
|
|
93
|
+
"minimatch": ">=3.1.3"
|
|
94
|
+
}
|
|
95
|
+
}
|