feat: add pink-purple theme, fix image paste race condition, allow @/commands anywhere in input
- Add Pink Purple theme (hot pink/purple/magenta on dark plum background) - Fix race condition where clearPastedImages() in input-area ran before the async message handler could read the images, silently dropping them - Allow @ file picker and / command menu to trigger at any cursor position, not just when the input is empty - Update CHANGELOG and README with new changes
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
*
|
||||
* Types for the progressive disclosure skill system.
|
||||
* Skills are loaded in 3 levels: metadata → body → external references.
|
||||
* Supports built-in skills, project skills, and external agents
|
||||
* from .claude/, .github/, .codetyper/ directories.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -19,6 +21,17 @@ export type SkillTriggerType =
|
||||
| "auto" // Automatically triggered based on context
|
||||
| "explicit"; // Only when explicitly invoked
|
||||
|
||||
/**
|
||||
* Source of a skill definition
|
||||
*/
|
||||
export type SkillSource =
|
||||
| "builtin" // Ships with codetyper (src/skills/)
|
||||
| "user" // User-level (~/.config/codetyper/skills/)
|
||||
| "project" // Project-level (.codetyper/skills/)
|
||||
| "external-claude" // External from .claude/
|
||||
| "external-github" // External from .github/
|
||||
| "external-codetyper"; // External from .codetyper/ root agents
|
||||
|
||||
/**
|
||||
* Example for a skill
|
||||
*/
|
||||
@@ -41,6 +54,7 @@ export interface SkillMetadata {
|
||||
autoTrigger: boolean;
|
||||
requiredTools: string[];
|
||||
tags?: string[];
|
||||
source?: SkillSource;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,6 +85,18 @@ export interface SkillMatch {
|
||||
matchType: SkillTriggerType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto-detected skill match (from prompt analysis)
|
||||
*/
|
||||
export interface AutoDetectedSkill {
|
||||
skill: SkillDefinition;
|
||||
confidence: number;
|
||||
/** Keywords in the prompt that triggered detection */
|
||||
matchedKeywords: string[];
|
||||
/** Category of the match (e.g., "language", "tool", "domain") */
|
||||
category: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Skill execution context
|
||||
*/
|
||||
@@ -97,6 +123,7 @@ export interface SkillExecutionResult {
|
||||
*/
|
||||
export interface SkillRegistryState {
|
||||
skills: Map<string, SkillDefinition>;
|
||||
externalAgents: Map<string, SkillDefinition>;
|
||||
lastLoadedAt: number | null;
|
||||
loadErrors: string[];
|
||||
}
|
||||
@@ -125,3 +152,35 @@ export interface ParsedSkillFile {
|
||||
examples?: SkillExample[];
|
||||
filePath: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* External agent file (from .claude/, .github/, .codetyper/)
|
||||
*/
|
||||
export interface ExternalAgentFile {
|
||||
/** Relative path within the source directory */
|
||||
relativePath: string;
|
||||
/** Absolute path to the file */
|
||||
absolutePath: string;
|
||||
/** Source directory type */
|
||||
source: SkillSource;
|
||||
/** Raw file content */
|
||||
content: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parsed external agent definition
|
||||
*/
|
||||
export interface ParsedExternalAgent {
|
||||
/** Derived ID from filename/path */
|
||||
id: string;
|
||||
/** Description from frontmatter */
|
||||
description: string;
|
||||
/** Tools specified in frontmatter */
|
||||
tools: string[];
|
||||
/** Body content (instructions) */
|
||||
body: string;
|
||||
/** Source of this agent */
|
||||
source: SkillSource;
|
||||
/** Original file path */
|
||||
filePath: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user