Dropstone Docs

பிளக்-இன்கள்

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 க்கு வெளியிட்டு அதை உங்கள் கட்டமைப்பில் சேர்க்கவும்.


ஏற்றும் வரிசை

பிளக்-இன்கள் அனைத்து மூலங்களிலிருந்து ஏற்றப்படுகின்றன மற்றும் அனைத்து கொக்குகளும் வரிசையில் இயங்குகின்றன. ஏற்றும் வரிசை:

  1. உலகளாவிய கட்டமைப்பு (~/.config/dropstone/dropstone.json)
  2. திட்ட கட்டமைப்பு (dropstone.json)
  3. உலகளாவிய பிளக்-இன் கோப்பகம் (~/.config/dropstone/plugins/)
  4. திட்ட பிளக்-இன் கோப்பகம் (.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.edited
  • file.watcher.updated

நிறுவல் நிகழ்வுகள்

  • installation.updated

LSP நிகழ்வுகள்

  • lsp.client.diagnostics
  • lsp.updated

செய்தி நிகழ்வுகள்

  • message.part.removed
  • message.part.updated
  • message.removed
  • message.updated

அனுமதி நிகழ்வுகள்

  • permission.asked
  • permission.replied

சேவையக நிகழ்வுகள்

  • server.connected

அமர்வு நிகழ்வுகள்

  • session.created
  • session.compacted
  • session.deleted
  • session.diff
  • session.error
  • session.idle
  • session.status
  • session.updated

Todo நிகழ்வுகள்

  • todo.updated

Shell நிகழ்வுகள்

  • shell.env

கருவி நிகழ்வுகள்

  • tool.execute.after
  • tool.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 schema
  • execute: கருவி அழைக்கப்படும்போது இயங்கும் செயல்பாடு

உங்கள் தனிப்பயன் கருவிகள் உள்ளமைக்கப்பட்ட கருவிகளுடன் 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 வரிசை புறக்கணிக்கப்படுகிறது.

Ctrl+I