பிளக்-இன்கள்
Dropstone ஐ விரிவுபடுத்த உங்கள் சொந்த பிளக்-இன்களை எழுதுங்கள்.
பிளக்-இன்கள் பல்வேறு நிகழ்வுகளில் இணைந்து Dropstone ஐ விரிவுபடுத்த உங்களை அனுமதிக்கின்றன மற்றும் நடத்தையை தனிப்பயனாக்குகின்றன. நতুன அம்சங்களைச் சேர்க்க, வெளிப்புற சேவைகளுடன் ஒருங்கிணைக்க, அல்லது Dropstone இன் இயல்புநிலை நடத்தையை மாற்ற பிளக்-இன்களை உருவாக்கலாம்.
பிளக்-இன் பயன்படுத்தவும்
பிளக்-இன்களை ஏற்றுவதற்கு இரண்டு வழிகள் உள்ளன.
உள்ளூர் கோப்புகளிலிருந்து
JavaScript அல்லது TypeScript கோப்புகளை பிளக்-இன் கோப்பகத்தில் வைக்கவும்.
.dropstone/plugins/- திட்ட-நிலை பிளக்-இன்கள்~/.config/dropstone/plugins/- உலகளாவிய பிளக்-இன்கள்
இந்த கோப்பகங்களில் உள்ள கோப்புகள் தொடக்கத்தில் தானாக ஏற்றப்படுகின்றன.
npm இலிருந்து
உங்கள் கட்டமைப்பு கோப்பில் npm தொகுப்புகளைக் குறிப்பிடவும்.
{
"$schema": "https://dropstone.io/schema/config.json",
"plugin": ["@my-org/internal-plugin", "dropstone-notify-on-idle"]
}
வழக்கமான மற்றும் scoped npm தொகுப்புகள் இரண்டும் ஆதரிக்கப்படுகின்றன.
பிளக்-இன்கள் எவ்வாறு நிறுவப்படுகின்றன
npm பிளக்-இன்கள் தொடக்கத்தில் Bun ஐப் பயன்படுத்தி தானாக நிறுவப்படுகின்றன. தொகுப்புகள் மற்றும் அவற்றின் சார்புகள் ~/.cache/dropstone/node_modules/ இல் கேச் செய்யப்படுகின்றன.
உள்ளூர் பிளக்-இன்கள் பிளக்-இன் கோப்பகத்திலிருந்து நேரடியாக ஏற்றப்படுகின்றன. வெளிப்புற தொகுப்புகளைப் பயன்படுத்த, உங்கள் கட்டமைப்பு கோப்பகத்தில் package.json ஐ உருவாக்க வேண்டும் (சார்புகள் ஐப் பார்க்கவும்), அல்லது பிளக்-இனை npm க்கு வெளியிட்டு அதை உங்கள் கட்டமைப்பில் சேர்க்கவும்.
ஏற்றும் வரிசை
பிளக்-இன்கள் அனைத்து மூலங்களிலிருந்து ஏற்றப்படுகின்றன மற்றும் அனைத்து கொக்குகளும் வரிசையில் இயங்குகின்றன. ஏற்றும் வரிசை:
- உலகளாவிய கட்டமைப்பு (
~/.config/dropstone/dropstone.json) - திட்ட கட்டமைப்பு (
dropstone.json) - உலகளாவிய பிளக்-இன் கோப்பகம் (
~/.config/dropstone/plugins/) - திட்ட பிளக்-இன் கோப்பகம் (
.dropstone/plugins/)
ஒரே பெயர் மற்றும் பதிப்பு கொண்ட நகல் npm தொகுப்புகள் ஒரு முறை ஏற்றப்படுகின்றன. இருப்பினும், ஒரு உள்ளூர் பிளக்-இன் மற்றும் ஒரு npm பிளக்-இன் ஒரே மாதிரியான பெயர்களுடன் இரண்டும் தனித்தனியாக ஏற்றப்படுகின்றன.
பிளக்-இன் உருவாக்கவும்
ஒரு பிளக்-இன் என்பது ஒன்று அல்லது அதற்கு மேற்பட்ட பிளக்-இன் செயல்பாடுகளை ஏற்றுமதி செய்யும் JavaScript/TypeScript தொகுதி ஆகும். ஒவ்வொரு செயல்பாடும் ஒரு சூழல் பொருளைப் பெறுகிறது மற்றும் ஒரு கொக்குகள் பொருளை வழங்குகிறது.
சார்புகள்
உள்ளூர் பிளக்-இன்கள் மற்றும் தனிப்பயன் கருவிகள் வெளிப்புற npm தொகுப்புகளைப் பயன்படுத்தலாம். உங்கள் கட்டமைப்பு கோப்பகத்தில் நீங்கள் தேவைப்படும் சார்புகளுடன் package.json ஐச் சேர்க்கவும்.
{
"dependencies": {
"shescape": "^2.1.0"
}
}
Dropstone தொடக்கத்தில் bun install ஐ இயக்கி இவற்றை நிறுவுகிறது. உங்கள் பிளக்-இன்கள் மற்றும் கருவிகள் பின்னர் அவற்றை இறக்குமதி செய்யலாம்.
import { escape } from "shescape"
export const MyPlugin = async (ctx) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "bash") {
output.args.command = escape(output.args.command)
}
},
}
}
அடிப்படை கட்டமைப்பு
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
console.log("Plugin initialized!")
return {
// Hook implementations go here
}
}
பிளக்-இன் செயல்பாடு பெறுகிறது:
project: தற்போதைய திட்ட தகவல்.directory: தற்போதைய பணிப்பக்கம்.worktree: git worktree பாதை.client: முகவரிடன் தொடர்பு கொள்ள Dropstone SDK கிளையன்ட்.$: கட்டளைகளை இயக்க Bun இன் shell API.
TypeScript ஆதரவு
TypeScript பிளக்-இன்களுக்கு, பிளக்-இன் தொகுப்பிலிருந்து வகைகளை இறக்குமதி செய்யலாம்:
import type { Plugin } from "@blankline/dropstone-plugin"
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
return {
// Type-safe hook implementations
}
}
நிகழ்வுகள்
பிளக்-இன்கள் கீழே உள்ள எடுத்துக்காட்டு பிரிவில் காணப்படுவது போல் நிகழ்வுகளுக்கு சந்தா செய்யலாம். கிடைக்கக்கூடிய பல்வேறு நிகழ்வுகளின் பட்டியல் இங்கே உள்ளது.
கட்டளை நிகழ்வுகள்
command.executed
கோப்பு நிகழ்வுகள்
file.editedfile.watcher.updated
நிறுவல் நிகழ்வுகள்
installation.updated
LSP நிகழ்வுகள்
lsp.client.diagnosticslsp.updated
செய்தி நிகழ்வுகள்
message.part.removedmessage.part.updatedmessage.removedmessage.updated
அனுமதி நிகழ்வுகள்
permission.askedpermission.replied
சேவையக நிகழ்வுகள்
server.connected
அமர்வு நிகழ்வுகள்
session.createdsession.compactedsession.deletedsession.diffsession.errorsession.idlesession.statussession.updated
Todo நிகழ்வுகள்
todo.updated
Shell நிகழ்வுகள்
shell.env
கருவி நிகழ்வுகள்
tool.execute.aftertool.execute.before
எடுத்துக்காட்டுகள்
dropstone ஐ விரிவுபடுத்த நீங்கள் பயன்படுத்தக்கூடிய பிளக்-இன்களின் சில எடுத்துக்காட்டுகள் இங்கே உள்ளன.
அறிவிப்புகளை அனுப்பவும்
குறிப்பிட்ட நிகழ்வுகள் ஏற்படும்போது அறிவிப்புகளை அனுப்பவும்:
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
return {
event: async ({ event }) => {
// Send notification on session completion
if (event.type === "session.idle") {
await $`osascript -e 'display notification "Session completed!" with title "dropstone"'`
}
},
}
}
macOS இல் AppleScript ஐ இயக்க osascript ஐப் பயன்படுத்துகிறோம். இங்கே அறிவிப்புகளை அனுப்ப இதைப் பயன்படுத்துகிறோம்.
.env பாதுகாப்பு
dropstone ஐ .env கோப்புகளைப் படிப்பதிலிருந்து தடுக்கவும்:
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "read" && output.args.filePath.includes(".env")) {
throw new Error("Do not read .env files")
}
},
}
}
சுற்றுச்சூழல் மாறிகளை செலுத்தவும்
அனைத்து shell இயக்கத்திற்கும் (AI கருவிகள் மற்றும் பயனர் டெர்மினல்கள்) சுற்றுச்சூழல் மாறிகளை செலுத்தவும்:
export const InjectEnvPlugin = async () => {
return {
"shell.env": async (input, output) => {
output.env.MY_API_KEY = "secret"
output.env.PROJECT_ROOT = input.cwd
},
}
}
தனிப்பயன் கருவிகள்
பிளக்-இன்கள் dropstone க்கு தனிப்பயன் கருவிகளையும் சேர்க்கலாம்:
import { type Plugin, tool } from "@blankline/dropstone-plugin"
export const CustomToolsPlugin: Plugin = async (ctx) => {
return {
tool: {
mytool: tool({
description: "This is a custom tool",
args: {
foo: tool.schema.string(),
},
async execute(args, context) {
const { directory, worktree } = context
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
},
}),
},
}
}
tool உதவியாளர் dropstone ஐ அழைக்கக்கூடிய ஒரு தனிப்பயன் கருவியை உருவாக்குகிறது. இது Zod schema செயல்பாடு எடுத்து பின்வருவனவற்றுடன் ஒரு கருவி வரையறையை வழங்குகிறது:
description: கருவி என்ன செய்கிறதுargs: கருவির வாதங்களுக்கான Zod schemaexecute: கருவி அழைக்கப்படும்போது இயங்கும் செயல்பாடு
உங்கள் தனிப்பயன் கருவிகள் உள்ளமைக்கப்பட்ட கருவிகளுடன் dropstone க்கு கிடைக்கும்.
Note:
ஒரு பிளக்-இன் கருவி உள்ளமைக்கப்பட்ட கருவியின் அதே பெயரைப் பயன்படுத்தினால், பிளக்-இன் கருவி முன்னுரிமை பெறுகிறது.
பதிவுசெய்தல்
console.log க்குப் பதிலாக client.app.log() ஐப் பயன்படுத்தவும் கட்டமைக்கப்பட்ட பதிவுசெய்தலுக்கு:
export const MyPlugin = async ({ client }) => {
await client.app.log({
body: {
service: "my-plugin",
level: "info",
message: "Plugin initialized",
extra: { foo: "bar" },
},
})
}
நிலைகள்: debug, info, warn, error. விவரங்களுக்கு SDK குறிப்பு ஐப் பார்க்கவும்.
சுருக்கம் கொக்குகள்
ஒரு அமர்வு சுருக்கப்படும்போது சேர்க்கப்பட்ட சூழலை தனிப்பயனாக்கவும்:
import type { Plugin } from "@blankline/dropstone-plugin"
export const CompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Inject additional context into the compaction prompt
output.context.push(`
## Custom Context
Include any state that should persist across compaction:
- Current task status
- Important decisions made
- Files being actively worked on
`)
},
}
}
experimental.session.compacting கொக்கு LLM ஒரு தொடர்ச்சி சுருக்கத்தை உருவாக்குவதற்கு முன் தீ பிடிக்கிறது. இயல்புநிலை சுருக்கம் உத்தரவு தவறவிடக்கூடிய ডொமைன்-குறிப்பிட்ட சூழலை செலுத்த இதைப் பயன்படுத்தவும்.
output.prompt ஐ அமைப்பதன் மூலம் சுருக்கம் உத்தரவை முழுவதுமாக மாற்றலாம்:
import type { Plugin } from "@blankline/dropstone-plugin"
export const CustomCompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Replace the entire compaction prompt
output.prompt = `
You are generating a continuation prompt for a long-running coding session.
Summarize:
1. The current task and its status
2. Which files are being modified
3. Any blockers or open questions
4. The next steps to complete the work
Format as a structured prompt the next session can use to resume work.
`
},
}
}
output.prompt அமைக்கப்படும்போது, இது இயல்புநிலை சுருக்கம் உத்தரவை முழுவதுமாக மாற்றுகிறது. இந்த வழக்கில் output.context வரிசை புறக்கணிக்கப்படுகிறது.