├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── .vscode ├── launch.json └── tasks.json ├── .vscodeignore ├── LICENSE ├── README.md ├── docs ├── development.md ├── plan.md ├── request.md ├── rules.md ├── spec.md ├── styleguide.md └── template.md ├── media ├── animations.css ├── barbed-wire-color.png ├── barbed-wire-color.svg ├── barbed-wire.svg ├── base.css ├── buttons.css ├── fonts │ ├── Anton │ │ ├── Anton-Regular.ttf │ │ └── OFL.txt │ ├── Bungee │ │ ├── Bungee-Regular.ttf │ │ └── OFL.txt │ └── Permanent_Marker │ │ ├── LICENSE.txt │ │ └── PermanentMarker-Regular.ttf ├── forms.css ├── js │ ├── formManager.js │ ├── messageHandler.js │ ├── sidebar.js │ ├── sidebarUtils.js │ └── vscodeApi.js ├── logo.css ├── main.css ├── mode-toggle.css ├── munky.png ├── navigation.css ├── reset.css ├── steps.css ├── tips.css ├── typography.css ├── utils.css └── vscode.css ├── out ├── animations.css ├── barbed-wire-color.png ├── barbed-wire-color.svg ├── barbed-wire.svg ├── base.css ├── buttons.css ├── commands │ ├── browsePrompts.js │ ├── browsePrompts.js.map │ ├── catFiles.js │ ├── catFiles.js.map │ ├── copyPrompt.js │ ├── copyPrompt.js.map │ ├── generatePrompt.js │ └── generatePrompt.js.map ├── extension.js ├── extension.js.map ├── fonts │ ├── Anton │ │ ├── Anton-Regular.ttf │ │ └── OFL.txt │ ├── Bungee │ │ ├── Bungee-Regular.ttf │ │ └── OFL.txt │ └── Permanent_Marker │ │ ├── LICENSE.txt │ │ └── PermanentMarker-Regular.ttf ├── forms.css ├── js │ ├── formManager.js │ ├── messageHandler.js │ ├── sidebar.js │ ├── sidebarUtils.js │ └── vscodeApi.js ├── logo.css ├── main.css ├── mode-toggle.css ├── munky.png ├── navigation.css ├── providers │ ├── treeDataProvider.js │ └── treeDataProvider.js.map ├── reset.css ├── steps.css ├── test │ ├── runTest.js │ ├── runTest.js.map │ └── suite │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ └── index.js.map ├── tips.css ├── typography.css ├── utils.css ├── utils │ ├── debugLogger.js │ ├── debugLogger.js.map │ ├── jinaReader.js │ ├── jinaReader.js.map │ ├── promptManager.js │ └── promptManager.js.map ├── views │ ├── sidebarViewProvider.js │ ├── sidebarViewProvider.js.map │ └── templates │ │ └── sidebar.html └── vscode.css ├── package-lock.json ├── package.json ├── prompts ├── audit │ ├── a11y.prompt │ └── security.prompt ├── create │ ├── codegen.prompt │ ├── planner.prompt │ ├── request.prompt │ ├── review.prompt │ └── spec.prompt └── debug │ ├── act.prompt │ ├── decide.prompt │ ├── observe.prompt │ └── orient.prompt ├── src ├── commands │ ├── browsePrompts.ts │ ├── catFiles.ts │ ├── copyPrompt.ts │ └── generatePrompt.ts ├── extension.ts ├── providers │ └── treeDataProvider.ts ├── test │ ├── runTest.ts │ └── suite │ │ ├── extension.test.ts │ │ └── index.ts ├── utils │ ├── debugLogger.ts │ ├── jinaReader.ts │ └── promptManager.ts └── views │ ├── sidebarViewProvider.ts │ └── templates │ └── sidebar.html └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, // Primarily a Node.js project (extension backend) 4 | es2020: true, 5 | }, 6 | extends: [ 7 | 'eslint:recommended', // Basic ESLint recommendations 8 | ], 9 | parserOptions: { 10 | ecmaVersion: 2020, 11 | }, 12 | ignorePatterns: ['out/', 'node_modules/', '.vscode-test/'], // Ignore build output, deps, tests 13 | overrides: [ 14 | { 15 | // TypeScript specific configuration for src directory 16 | files: ['src/**/*.ts'], 17 | parser: '@typescript-eslint/parser', // Use TypeScript parser 18 | plugins: [ 19 | '@typescript-eslint', // Enable TypeScript plugin 20 | ], 21 | extends: [ 22 | 'plugin:@typescript-eslint/recommended', // Recommended TS rules 23 | ], 24 | parserOptions: { 25 | ecmaVersion: 2020, 26 | sourceType: 'module', // TS files use ES modules 27 | project: './tsconfig.json', // Point to tsconfig for type-aware rules (optional but good) 28 | }, 29 | rules: { 30 | // Add any specific TS rule overrides here if needed 31 | // e.g., '@typescript-eslint/no-unused-vars': ['warn', { 'argsIgnorePattern': '^_' }], 32 | }, 33 | }, 34 | { 35 | // JavaScript specific configuration for media/js directory 36 | files: ['media/js/**/*.js'], 37 | env: { 38 | browser: true, // Webview environment 39 | node: false, // Not Node.js 40 | es2020: true, 41 | }, 42 | parserOptions: { 43 | sourceType: 'module', // These are ES modules 44 | }, 45 | rules: { 46 | // Disable TS-specific rules that might leak in or cause issues 47 | '@typescript-eslint/no-unused-vars': 'off', 48 | '@typescript-eslint/explicit-module-boundary-types': 'off', 49 | '@typescript-eslint/explicit-function-return-type': 'off', 50 | '@typescript-eslint/no-explicit-any': 'off', // Allow 'any' in JS if needed 51 | // Add any specific JS rules here if needed 52 | 'no-unused-vars': ['warn', { 'argsIgnorePattern': '^_' }], // Standard JS unused vars warning 53 | }, 54 | }, 55 | ], 56 | rules: { 57 | // Add any global rule overrides here 58 | }, 59 | }; 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | npm-debug.log 3 | Thumbs.db 4 | **/node_modules/ 5 | */out/ 6 | */.vs/ 7 | tsconfig.lsif.json 8 | *.lsif 9 | *.db 10 | *.tsbuildinfo 11 | logs 12 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": true, 4 | "tabWidth": 2, 5 | "trailingComma": "es5", 6 | "printWidth": 100, 7 | "bracketSpacing": true, 8 | "arrowParens": "avoid" 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Run Extension", 6 | "type": "extensionHost", 7 | "request": "launch", 8 | "args": [ 9 | "--extensionDevelopmentPath=${workspaceFolder}" 10 | ], 11 | "outFiles": [ 12 | "${workspaceFolder}/out/**/*.js" 13 | ], 14 | "preLaunchTask": "${defaultBuildTask}" 15 | }, 16 | { 17 | "name": "Extension Tests", 18 | "type": "extensionHost", 19 | "request": "launch", 20 | "args": [ 21 | "--extensionDevelopmentPath=${workspaceFolder}", 22 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 23 | ], 24 | "outFiles": [ 25 | "${workspaceFolder}/out/test/**/*.js" 26 | ], 27 | "preLaunchTask": "${defaultBuildTask}" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "watch", 7 | "problemMatcher": "$tsc-watch", 8 | "isBackground": true, 9 | "presentation": { 10 | "reveal": "never" 11 | }, 12 | "group": { 13 | "kind": "build", 14 | "isDefault": true 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | src/** 4 | .gitignore 5 | .yarnrc 6 | webpack.config.js 7 | vsc-extension-quickstart.md 8 | **/*.map 9 | **/.eslintrc.json 10 | **/*.ts 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Kornelius 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Munky playing guitar 2 | 3 | # KoЯnelius 4 | 5 | Kornelius is a Visual Studio Code extension for this vibe coding era designed to streamline AI prompt creation and context management. 6 | 7 | ## Features 8 | 9 | - **Create Mode**: Guides users through a `REQUEST → SPEC → PLANNER → CODEGEN → REVIEW` process. 10 | - **Debug Mode**: Implements an OODA `OBSERVE → ORIENT → DECIDE → ACT` loop for iterative debugging assistance. 11 | - **Audit Mode**: Offers specialized prompts for comprehensive Security and Accessibility audits. 12 | - **File Concatenation**: Easily include the content of selected files for contextual prompting. 13 | - **Jina.ai Integration**: Optional capability to fetch markdown content using the Jina Reader API. 14 | 15 | ## Usage 16 | 17 | 1. Click the KoЯnelius icon in the activity bar. 18 | 2. Select a workflow (Standard, Debug, Audit). 19 | 3. Fill in the required details at each stage of the selected workflow. 20 | 4. Generated prompts are automatically copied to the clipboard for use with your preferred AI tool. 21 | 22 | ## Extension Settings 23 | 24 | - `kornelius.enableJinaIntegration`: Enable/disable the Jina.ai integration 25 | - `kornelius.jinaApiKey`: API key for Jina.ai integration (if enabled) 26 | -------------------------------------------------------------------------------- /docs/development.md: -------------------------------------------------------------------------------- 1 | # KoЯnelius Development Guide 2 | 3 | This guide covers how to develop, test, and install the KoЯnelius extension. 4 | 5 | ## 🎸 Development Workflow 6 | 7 | ### Running in Development Mode 8 | 9 | The simplest way to test the extension during development: 10 | 11 | 1. Open the KoЯnelius project in VS Code 12 | 2. Press `F5` or select "Run Extension" from the Run menu 13 | 3. This launches a new VS Code window with the extension loaded (Extension Development Host) 14 | 4. Changes you make to the code will require you to reload the development window 15 | (use the Reload command from the Command Palette) 16 | 17 | ### Package for Local Installation 18 | 19 | To test the extension in your regular VS Code instance: 20 | 21 | 1. **Install vsce if you haven't already**: 22 | 23 | ```bash 24 | npm install -g @vscode/vsce 25 | ``` 26 | 27 | 2. **Package the extension**: 28 | 29 | ```bash 30 | # From the root of the project 31 | vsce package 32 | ``` 33 | 34 | This creates a `.vsix` file in the project root. 35 | 36 | 3. **Install the packaged extension**: 37 | 38 | ```bash 39 | code --install-extension kornelius-0.1.0.vsix 40 | ``` 41 | 42 | 4. **Development/Installation Loop**: 43 | - Make changes to the code 44 | - Run `npm run compile` to compile the TypeScript 45 | - Run `vsce package` to create an updated VSIX 46 | - Run `code --install-extension kornelius-0.1.0.vsix` (overwrites previous installation) 47 | - Reload VS Code windows to see changes 48 | 49 | ## 🤘 Tips for Effective Development 50 | 51 | 1. **Use Watch Mode**: 52 | - Run `npm run watch` in a terminal to automatically compile TypeScript as you make changes 53 | 54 | 2. **Extension Debugging**: 55 | - Use `console.log()` statements to debug 56 | - Logs appear in the "Developer: Toggle Developer Tools" console when running the extension 57 | 58 | 3. **Extension Settings**: 59 | - Modify `package.json` "contributes" section to change commands, menus, views, and settings 60 | 61 | 4. **Clean Reinstall**: 62 | If you experience issues: 63 | 64 | ```bash 65 | # Remove the extension 66 | code --uninstall-extension kornelius 67 | 68 | # Reinstall from VSIX 69 | code --install-extension kornelius-0.1.0.vsix 70 | ``` 71 | 72 | ## 🎧 Publishing to Marketplace (Future) 73 | 74 | When ready to share with others: 75 | 76 | 1. Create a publisher account on the VS Code Marketplace 77 | 2. Update `publisher` in package.json 78 | 3. Run `vsce publish` (requires a Personal Access Token) 79 | 80 | See [Publishing Extensions](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) in the VS Code docs for details. 81 | -------------------------------------------------------------------------------- /docs/request.md: -------------------------------------------------------------------------------- 1 | # Project Name 2 | 3 | ## Project Description 4 | 5 | A VS Code extension that helps developers write and manage AI-based dev prompts, using the existing prompt templates in the `prompts` directory. It provides a guided flow (request → spec → planner → codegen → review) through a dedicated sidebar panel with text areas for large amounts of context. Users can generate prompts, copy them to the clipboard, and optionally integrate Jina.ai Reader to retrieve markdown from provided URLs. 6 | 7 | ## Target Audience 8 | 9 | - Developers who frequently use AI-based prompts and need a clear workflow 10 | - Users wanting to utilize built-in prompt templates for consistent code generation patterns 11 | 12 | ## Desired Features 13 | 14 | ### Prompt Management 15 | 16 | - [ ] Store prompt data in-memory or in a config file (not workspace settings) 17 | - [ ] Allow browsing and selecting from existing `prompts` directory files 18 | - [ ] Collect user input in sidebar panels 19 | - [ ] Provide scrollable text areas for large contexts 20 | - [ ] Include “Generate” and “Copy to Clipboard” buttons 21 | 22 | ### Workflow Guidance 23 | 24 | - [ ] Display a structured flow (request → spec → planner → codegen → review) 25 | - [ ] Show minimal instructions or tips for each step 26 | - [ ] Each step has its own button or form 27 | 28 | ### Integrations 29 | 30 | - [ ] Optional Jina.ai Reader for retrieving markdown via API 31 | - [ ] Configure API key in extension settings 32 | - [ ] Show informative error messages if the call fails 33 | - [ ] (Future) Read workspace directory/files for additional context as needed 34 | 35 | ## Design Requests 36 | 37 | - [ ] Use a sidebar panel for the main UI 38 | - [ ] Follow accessible and minimal design principles 39 | - [ ] Provide clear feedback on validation or errors 40 | 41 | ## Other Notes 42 | 43 | - No analytics needed 44 | - Prompt templates are in the existing `c:\Src\monkey\prompts` folder 45 | - Consider secure handling of any API keys 46 | -------------------------------------------------------------------------------- /docs/styleguide.md: -------------------------------------------------------------------------------- 1 | ## 🎸 KoЯnelius Extension Styleguide 2 | 3 | ### 🎤 Core Identity 4 | 5 | - **Name**: Kornelius (inspired by Korn) 6 | - **Tagline**: "Your nu-code companion" 7 | - **Tone**: Tongue-in-cheek, nostalgic, edgy yet accessible. 8 | 9 | --- 10 | 11 | ## 🖤 Typography 12 | 13 | Since color use is restricted (due to adherence to VS Code theme colors), typography will carry the bulk of stylistic identity. 14 | 15 | - **Font Styles**: 16 | - Headings and titles: 17 | - Bold, condensed, slightly distressed appearance. 18 | - Suggested Fonts (license permitting): [Anton](https://fonts.google.com/specimen/Anton), [Bungee](https://fonts.google.com/specimen/Bungee), [Permanent Marker](https://fonts.google.com/specimen/Permanent+Marker). 19 | - Body text: 20 | - Standard VS Code monospace for readability. 21 | - Accents: 22 | - Occasional, intentional capitalization or stylized emphasis: 23 | - e.g., "REQUEST → SPEC → PLAN → CODE → REVIEW" 24 | 25 | - **Special Text Treatments**: 26 | - Occasional "glitchy" or "distressed" text effects in graphics. 27 | - Subtle drop shadows, outlines, or slight rotations on headings. 28 | 29 | --- 30 | 31 | ## 🥁 Iconography & Graphics 32 | 33 | Icons will be critical—subtle enough for professionalism, yet evocative of the era. 34 | 35 | - **Sidebar and Buttons**: 36 | - Slightly rough edges, ink-stamp or distressed texture outlines. 37 | - Geometric shapes reminiscent of nu-metal iconography (barbed wire, subtle spikes, tribal-inspired edges, abstracted microphone or guitar shapes). 38 | 39 | - **Main Logo/Icon**: 40 | - Stylized "K" or "KoЯnelius" with a reversed “Я” (playful nod to Korn branding). 41 | - Use minimalism and subtle distortions, no overly complex illustrations. 42 | 43 | - **Loading/Waiting Animations**: 44 | - Spinning record/CD, cassette tape rewinding, subtle audio wave pulses. 45 | 46 | --- 47 | 48 | ## 🎧 UI Components 49 | 50 | VS Code's sidebar UI and command buttons can still feel custom, even constrained by theme colors: 51 | 52 | - **Buttons**: 53 | - Strong, heavy rounded corners (like guitar picks). 54 | - Slightly exaggerated shadows or outlines for depth. 55 | - Hover/focus states using subtle scale-up transitions and slight rotations, giving a tactile feel. 56 | 57 | - **Sidebar Panels**: 58 | - Distinct horizontal rule/dividers that feel like guitar strings or cable connectors. 59 | - Minimalist, structured layout with a slight asymmetry or angled lines (think abstract guitar neck or fretboard layout). 60 | 61 | --- 62 | 63 | ## 🎶 Interaction Patterns 64 | 65 | Interactions that reinforce the nu-metal "feel": 66 | 67 | - **Copy-to-Clipboard feedback**: 68 | - Subtle visual feedback like a quick "pulse" or "bounce." 69 | 70 | - **Error Messages and Warnings**: 71 | - Informal yet humorous tone: 72 | - "Oops, something got unplugged!" 73 | - "You dropped your pick—fix your prompt!" 74 | - "Nope, that ain't gonna play." 75 | 76 | --- 77 | 78 | ## 🕶️ Accessibility & Inclusivity 79 | 80 | - Always maintain readable, clear text. 81 | - Use alt-text to describe iconography humorously yet accessibly: 82 | - `"Guitar pick shaped button labeled Generate Prompt"` 83 | 84 | - Respect system-level reduced-motion preferences for animations. 85 | 86 | --- 87 | 88 | ## 🌙 Dark & Light Theme Harmony 89 | 90 | - Ensure all elements look natural in both VS Code dark and light themes. 91 | - Rely on outline, texture, shadow, and typography, rather than color contrast. 92 | 93 | --- 94 | 95 | ## 📢 Communication Style (Docs & Help) 96 | 97 | - Conversational, friendly, playful, but not overwhelming. 98 | - Minimal emo/nu-metal references used sparingly, just enough to set tone. 99 | - Clear, direct guidance for essential tasks. 100 | 101 | Examples: 102 | 103 | - **Sidebar description**: 104 | "Kornelius helps you shred through your AI prompts in style—your nu-code companion for this vibe-driven coding era." 105 | 106 | - **Feature description**: 107 | "Manage your prompts with fewer clicks, more riffs. Keep your creativity flowing while the AI does the heavy lifting." 108 | 109 | --- 110 | 111 | ## 📌 TL;DR Cheat Sheet 112 | 113 | | Component | Recommendations | 114 | |-----------------|----------------------------------------------------| 115 | | **Typography** | Bold, condensed/distressed for headings, standard monospace for body | 116 | | **Icons** | Minimal, nu-metal elements (barbed wire, picks, guitars) | 117 | | **Interactions**| Playful feedback messages, subtle animations | 118 | | **Voice/Tone** | Informal, nostalgic, humorous, music-inspired references | 119 | | **Accessibility** | Clear, inclusive language, descriptive alt text | 120 | 121 | --- 122 | -------------------------------------------------------------------------------- /media/animations.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Animation Styles */ 2 | 3 | /* Animation Keyframes */ 4 | @keyframes glitch { 5 | 0%, 100% { transform: translate(0); } 6 | 98.001%, 98.999% { transform: translate(-2px, 1px); } 7 | 99.001%, 99.999% { transform: translate(2px, -1px); } 8 | } 9 | 10 | @keyframes textflicker { 11 | 0%, 25%, 75%, 100% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 12 | 26%, 74% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 13 | 27%, 73% { opacity: 0.9; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.4); } 14 | 28%, 72% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 15 | 49.5%, 50.5% { opacity: 0.7; text-shadow: 0 0 10px var(--function-color); } 16 | } 17 | 18 | @keyframes shimmer { 19 | 0% { transform: translateX(-100%); } 20 | 100% { transform: translateX(100%); } 21 | } 22 | 23 | @keyframes float { 24 | 0%, 100% { transform: translateY(0) rotate(0); } 25 | 50% { transform: translateY(-5px) rotate(10deg); } 26 | } 27 | 28 | @keyframes fadeIn { 29 | from { opacity: 0; transform: translateY(10px); } 30 | to { opacity: 1; transform: translateY(0); } 31 | } 32 | 33 | @keyframes pulse { 34 | 0% { transform: scale(1); } 35 | 50% { transform: scale(1.05); } 36 | 100% { transform: scale(1); } 37 | } 38 | 39 | /* Animation Classes */ 40 | .pulse { 41 | animation: pulse 0.3s ease-in-out; 42 | } 43 | 44 | /* Step transitions - Apply animation only when step becomes visible */ 45 | .step-visible { 46 | animation: fadeIn 0.3s ease-in-out; 47 | } 48 | /* Remove animation from base .step class */ 49 | .step { 50 | /* animation: fadeIn 0.3s ease-in-out; */ /* Removed */ 51 | display: none; /* Hide by default using display */ 52 | } 53 | -------------------------------------------------------------------------------- /media/barbed-wire-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/media/barbed-wire-color.png -------------------------------------------------------------------------------- /media/barbed-wire-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 17 | 20 | 23 | 25 | 27 | 29 | 31 | 54 | 56 | -------------------------------------------------------------------------------- /media/barbed-wire.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 30 | 31 | 32 | 33 | 34 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /media/base.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Base Styles */ 2 | 3 | /* Font declarations */ 4 | @font-face { 5 | font-family: 'Anton'; 6 | src: url('./fonts/Anton/Anton-Regular.ttf') format('truetype'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | @font-face { 12 | font-family: 'Permanent Marker'; 13 | src: url('./fonts/Permanent_Marker/PermanentMarker-Regular.ttf') format('truetype'); 14 | font-weight: normal; 15 | font-style: normal; 16 | } 17 | 18 | @font-face { 19 | font-family: 'Bungee'; 20 | src: url('./fonts/Bungee/Bungee-Regular.ttf') format('truetype'); 21 | font-weight: normal; 22 | font-style: normal; 23 | } 24 | 25 | :root { 26 | /* Extract VS Code syntax highlighting colors */ 27 | --string-color: var(--vscode-editor-foreground, #cccccc); 28 | --comment-color: var(--vscode-editorLineNumber-foreground, #858585); 29 | --keyword-color: var(--vscode-editorError-foreground, #f48771); 30 | --variable-color: var(--vscode-editor-selectionBackground, #264f78); 31 | --function-color: var(--vscode-symbolIcon-functionForeground, #b180d7); 32 | --tag-color: var(--vscode-editorWarning-foreground, #cca700); 33 | --number-color: var(--vscode-debugTokenExpression-number, #b5cea8); 34 | --operator-color: var(--vscode-symbolIcon-operatorForeground, #d4d4d4); 35 | --class-color: var(--vscode-symbolIcon-classForeground, #ee9d28); 36 | --type-color: var(--vscode-symbolIcon-typeParameterForeground, #7fd8c9); 37 | } 38 | 39 | html { 40 | /* Add a cool radial gradient background that uses editor colors */ 41 | background: radial-gradient( 42 | ellipse at center, 43 | var(--vscode-editor-background) 0%, 44 | color-mix(in srgb, var(--vscode-editor-background) 95%, var(--vscode-editor-selectionBackground)) 100% 45 | ); 46 | } 47 | 48 | body { 49 | background: none !important; 50 | backdrop-filter: blur(1px); 51 | } 52 | 53 | .container { 54 | padding: 15px 10px; 55 | max-width: 100%; 56 | position: relative; 57 | display: flex; 58 | flex-direction: column; 59 | gap: 5px; 60 | } 61 | -------------------------------------------------------------------------------- /media/fonts/Anton/Anton-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/media/fonts/Anton/Anton-Regular.ttf -------------------------------------------------------------------------------- /media/fonts/Anton/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2020 The Anton Project Authors (https://github.com/googlefonts/AntonFont.git) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /media/fonts/Bungee/Bungee-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/media/fonts/Bungee/Bungee-Regular.ttf -------------------------------------------------------------------------------- /media/fonts/Bungee/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2023 The Bungee Project Authors (https://github.com/djrrb/Bungee) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /media/fonts/Permanent_Marker/PermanentMarker-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/media/fonts/Permanent_Marker/PermanentMarker-Regular.ttf -------------------------------------------------------------------------------- /media/forms.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Form & Input Styling */ 2 | 3 | /* Input group container - provides consistent spacing */ 4 | .input-group { 5 | margin-bottom: 15px; 6 | position: relative; 7 | } 8 | 9 | /* Label styling - mimics a tape label */ 10 | .input-group label { 11 | display: block; 12 | font-family: 'Permanent Marker', cursive; 13 | font-size: 0.9em; 14 | color: var(--keyword-color); 15 | margin-bottom: 5px; 16 | padding: 2px 5px; 17 | background-color: color-mix(in srgb, var(--vscode-editor-background) 90%, var(--keyword-color)); 18 | border-radius: 3px; 19 | width: fit-content; 20 | transform: rotate(-1deg); 21 | border-left: 3px solid var(--keyword-color); 22 | box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); 23 | text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.4); 24 | } 25 | 26 | /* Main, single primary textarea */ 27 | .main-input { 28 | width: 100%; 29 | min-height: 120px; 30 | padding: 10px; 31 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); /* Consistent with other textareas */ 32 | color: var(--vscode-editor-foreground); 33 | border: 1px solid var(--vscode-input-border); 34 | border-radius: 4px; /* Match other textareas */ 35 | font-family: var(--vscode-editor-font-family); 36 | font-size: var(--vscode-editor-font-size); 37 | resize: vertical; 38 | transition: all 0.3s ease; 39 | box-sizing: border-box; /* Ensure padding is included in width calculation */ 40 | } 41 | 42 | /* Regular textareas for multi-input sections */ 43 | textarea:not(.main-input) { 44 | width: 100%; 45 | padding: 8px; 46 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 47 | color: var(--vscode-editor-foreground); 48 | border: 1px solid var(--vscode-input-border); 49 | border-radius: 4px; 50 | font-family: var(--vscode-editor-font-family); 51 | font-size: calc(var(--vscode-editor-font-size) * 0.95); 52 | resize: vertical; 53 | transition: all 0.3s ease; 54 | box-sizing: border-box; /* Ensure padding is included in width calculation */ 55 | } 56 | 57 | /* Hover state for all textareas */ 58 | textarea:hover { 59 | border-color: var(--function-color); 60 | box-shadow: 0 0 5px color-mix(in srgb, var(--function-color) 50%, transparent); 61 | } 62 | 63 | /* Focus state for all textareas */ 64 | textarea:focus { 65 | outline: none; 66 | border-color: var(--function-color); 67 | box-shadow: 0 0 8px color-mix(in srgb, var(--function-color) 70%, transparent); 68 | background-color: color-mix(in srgb, var(--vscode-editor-background) 98%, var(--function-color)); 69 | } 70 | 71 | /* Container for multiple input fields */ 72 | .multi-input-container { 73 | background-color: color-mix(in srgb, var(--vscode-editor-background) 97%, var(--function-color)); 74 | padding: 15px; 75 | border-radius: 6px; 76 | border: 1px dashed var(--variable-color); 77 | box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); 78 | position: relative; 79 | box-sizing: border-box; 80 | width: 100%; /* Fix width calculation */ 81 | } 82 | 83 | /* Prompt preview section */ 84 | .prompt-preview { 85 | margin: 15px 0; 86 | border: 1px solid var(--vscode-panel-border); 87 | border-radius: 6px; 88 | overflow: hidden; 89 | transition: all 0.3s ease; 90 | } 91 | 92 | .prompt-preview h3 { 93 | background-color: color-mix(in srgb, var(--vscode-editor-background) 90%, var(--type-color)); 94 | color: var(--type-color); 95 | padding: 8px 15px; 96 | margin: 0; 97 | font-size: 0.9em; 98 | font-family: 'Anton', sans-serif; 99 | letter-spacing: 1px; 100 | border-bottom: 1px solid var(--vscode-panel-border); 101 | } 102 | 103 | .prompt-preview .preview-content { 104 | padding: 10px 15px; 105 | max-height: 200px; 106 | overflow-y: auto; 107 | background-color: color-mix(in srgb, var(--vscode-editor-background) 98%, var(--type-color)); 108 | font-family: var(--vscode-editor-font-family); 109 | font-size: calc(var(--vscode-editor-font-size) * 0.9); 110 | line-height: 1.4; 111 | white-space: pre-wrap; 112 | } 113 | 114 | /* Pulse animation for preview updates */ 115 | @keyframes pulse { 116 | 0% { 117 | box-shadow: 0 0 0 0 color-mix(in srgb, var(--function-color) 40%, transparent); 118 | } 119 | 70% { 120 | box-shadow: 0 0 0 10px color-mix(in srgb, var(--function-color) 0%, transparent); 121 | } 122 | 100% { 123 | box-shadow: 0 0 0 0 color-mix(in srgb, var(--function-color) 0%, transparent); 124 | } 125 | } 126 | 127 | .pulse { 128 | animation: pulse 0.5s 1; 129 | } 130 | -------------------------------------------------------------------------------- /media/js/sidebar.js: -------------------------------------------------------------------------------- 1 | import { FormManager } from './formManager.js'; 2 | import { MessageHandler } from './messageHandler.js'; 3 | import { logToExtension } from './sidebarUtils.js'; 4 | 5 | // Initialize everything as soon as document is loaded 6 | document.addEventListener('DOMContentLoaded', () => { 7 | try { 8 | logToExtension('DOMContentLoaded event fired.'); 9 | const formManager = new FormManager(); // Creates instance, determines initial mode via constructor logic 10 | new MessageHandler(formManager); // Sets up message handling 11 | 12 | // --- Set Initial Visual State --- 13 | // Call switchMode with the determined initial mode AFTER the DOM is fully loaded. 14 | // This ensures all elements are available and avoids race conditions. 15 | logToExtension(`DOMContentLoaded: Setting initial mode to ${formManager.currentMode}`); 16 | formManager.switchMode(formManager.currentMode); 17 | 18 | // Initial validation run after potential state loading and mode setup 19 | formManager.validateAllButtons(); 20 | logToExtension(`Initial button validation complete for mode: ${formManager.currentMode}`); 21 | 22 | // No need for the extra updateStep(1) here, switchMode handles it. 23 | 24 | logToExtension('Initialization complete via DOMContentLoaded.'); 25 | } catch (error) { 26 | logToExtension('Error during DOMContentLoaded initialization: ' + error, 'error'); 27 | console.error('Error during DOMContentLoaded initialization:', error); 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /media/js/sidebarUtils.js: -------------------------------------------------------------------------------- 1 | import vscode from './vscodeApi.js'; 2 | 3 | /** 4 | * Sends a log message to the VS Code extension host. 5 | * @param {string | object} message - The message to log. Can be a string or an object. 6 | * @param {'log' | 'warn' | 'error'} level - The log level ('log', 'warn', or 'error'). Defaults to 'log'. 7 | */ 8 | export function logToExtension(message, level = 'log') { 9 | try { 10 | // Support both 'log' and 'logMessage' commands for backward compatibility 11 | // But primarily use 'logMessage' as it's more specific 12 | vscode.postMessage({ 13 | command: 'logMessage', // Dedicated command 14 | level: level, // Pass level as data 15 | message: typeof message === 'object' ? JSON.stringify(message) : message // Ensure objects are stringified 16 | }); 17 | } catch (error) { 18 | // Fallback to console if postMessage fails 19 | console.error('Error sending log to extension:', error); 20 | console[level](message); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /media/js/vscodeApi.js: -------------------------------------------------------------------------------- 1 | // This file isolates the VS Code API acquisition. 2 | // Standard module behavior ensures this code runs only once. 3 | 4 | // Declare vscode variable to hold the API 5 | let vscode; 6 | 7 | try { 8 | // Use the global acquireVsCodeApi function with a try-catch for safety 9 | // @ts-ignore - This suppresses TypeScript errors about the function not being recognized 10 | vscode = typeof acquireVsCodeApi === 'function' ? window['acquireVsCodeApi']() : null; 11 | 12 | // If we didn't get the API through direct call, try window object 13 | if (!vscode && typeof window !== 'undefined') { 14 | // @ts-ignore - This suppresses TypeScript errors 15 | vscode = typeof window.acquireVsCodeApi === 'function' ? window.acquireVsCodeApi() : null; 16 | } 17 | 18 | // If we still don't have it, throw an error to trigger the catch block 19 | if (!vscode) { 20 | throw new Error('Could not acquire VS Code API'); 21 | } 22 | 23 | console.log('VS Code API acquired successfully'); 24 | } catch (error) { 25 | console.error('Failed to acquire VS Code API:', error); 26 | // Provide a mock API for testing/development outside of VS Code 27 | vscode = { 28 | postMessage: (msg) => console.log('[MOCK] postMessage:', msg), 29 | setState: (state) => console.log('[MOCK] setState:', state), 30 | getState: () => { 31 | console.log('[MOCK] getState called'); 32 | return {}; 33 | } 34 | }; 35 | console.log('Using mock VS Code API.'); 36 | } 37 | 38 | // Export the acquired or mock API object 39 | export default vscode; 40 | -------------------------------------------------------------------------------- /media/logo.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Logo Styles */ 2 | 3 | /* Logo */ 4 | .logo { 5 | margin: 0; 6 | display: flex; 7 | flex-direction: column; 8 | gap: 10px; 9 | align-items: left; 10 | position: relative; 11 | padding: 5px; 12 | border-radius: 5px; 13 | overflow: hidden; 14 | } 15 | 16 | .logo h1 { 17 | margin: 0; 18 | } 19 | 20 | .logo span.reversed { 21 | display: inline-block; 22 | color: var(--keyword-color); 23 | } 24 | 25 | .logo .tagline { 26 | font-family: 'Permanent Marker', cursive; 27 | font-size: 0.9em; 28 | opacity: 0.8; 29 | transform: rotate(-0.5deg); 30 | margin: 0; 31 | color: var(--comment-color); 32 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 33 | padding-left: 20px; 34 | position: relative; 35 | text-align: left; 36 | } 37 | 38 | .logo .tagline::before { 39 | content: "// "; 40 | position: absolute; 41 | left: 0; 42 | color: var(--comment-color); 43 | } 44 | -------------------------------------------------------------------------------- /media/main.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Main CSS Import File */ 2 | 3 | /* Import all modular CSS components in a logical order */ 4 | 5 | /* First import base styles and animations */ 6 | @import url('reset.css'); 7 | @import url('vscode.css'); 8 | @import url('base.css'); 9 | @import url('typography.css'); 10 | @import url('forms.css'); 11 | @import url('buttons.css'); 12 | @import url('navigation.css'); 13 | @import url('steps.css'); 14 | @import url('mode-toggle.css'); 15 | @import url('animations.css'); 16 | @import url('logo.css'); 17 | @import url('utils.css'); 18 | @import url('tips.css'); 19 | 20 | /* Media Queries */ 21 | @media (max-width: 600px) { 22 | /* Adjust spacing for small screens */ 23 | .container { 24 | padding: 10px 5px; 25 | } 26 | 27 | /* Make buttons stack on small screens */ 28 | .button-group { 29 | flex-direction: column; 30 | } 31 | 32 | /* Reduce text size on small screens */ 33 | h1 { 34 | font-size: 1.8em; 35 | } 36 | 37 | h2 { 38 | font-size: 1.2em; 39 | } 40 | } 41 | 42 | /* Custom one-off styles that don't justify a separate file */ 43 | .myspace-blink { 44 | animation: blink 1s steps(2, start) infinite; 45 | } 46 | 47 | @keyframes blink { 48 | to { 49 | visibility: hidden; 50 | } 51 | } 52 | 53 | /* CSS-only customized scrollbars (for WebKit browsers) */ 54 | ::-webkit-scrollbar { 55 | width: 8px; 56 | height: 8px; 57 | } 58 | 59 | ::-webkit-scrollbar-track { 60 | background: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--variable-color)); 61 | } 62 | 63 | ::-webkit-scrollbar-thumb { 64 | background: linear-gradient(to bottom, 65 | var(--keyword-color), 66 | var(--function-color), 67 | var(--type-color)); 68 | border-radius: 4px; 69 | } 70 | 71 | ::-webkit-scrollbar-thumb:hover { 72 | background: linear-gradient(to bottom, 73 | color-mix(in srgb, var(--keyword-color) 120%, white), 74 | color-mix(in srgb, var(--function-color) 120%, white), 75 | color-mix(in srgb, var(--type-color) 120%, white)); 76 | } 77 | -------------------------------------------------------------------------------- /media/mode-toggle.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Mode Toggle Styles */ 2 | 3 | .mode-toggle-container { 4 | display: flex; 5 | justify-content: center; 6 | margin: 10px 0 20px; 7 | position: relative; 8 | } 9 | 10 | .mode-toggle { 11 | display: flex; 12 | border-radius: 20px; 13 | overflow: hidden; 14 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); 15 | border: 1px solid var(--vscode-panel-border); 16 | width: 80%; 17 | margin: 0 auto; 18 | position: relative; 19 | z-index: 2; 20 | } 21 | 22 | /* Adjust width for three buttons */ 23 | .mode-toggle { 24 | width: 95%; /* Slightly wider to fit AUDIT comfortably */ 25 | } 26 | 27 | .mode-toggle::before { 28 | content: ""; 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | width: 100%; 33 | height: 100%; 34 | background: linear-gradient(to bottom, 35 | rgba(0, 0, 0, 0.3), 36 | transparent 30%, 37 | transparent 70%, 38 | rgba(0, 0, 0, 0.3)); 39 | z-index: -1; 40 | pointer-events: none; 41 | } 42 | 43 | .mode-toggle button { 44 | flex: 1; 45 | padding: 10px 12px; 46 | background: linear-gradient(to bottom, 47 | var(--vscode-button-background) 0%, 48 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 100%); 49 | color: var(--vscode-button-foreground); 50 | border: none; 51 | font-family: 'Anton', sans-serif; 52 | letter-spacing: 1px; 53 | text-transform: uppercase; 54 | font-size: 0.85em; 55 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 56 | transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); 57 | position: relative; 58 | overflow: hidden; 59 | } 60 | 61 | /* Apply borders between buttons */ 62 | .mode-toggle button:not(:last-child) { 63 | border-right: 1px solid rgba(0, 0, 0, 0.2); 64 | } 65 | .mode-toggle button:not(:first-child) { 66 | border-left: 1px solid rgba(255, 255, 255, 0.1); 67 | } 68 | 69 | /* Keep rounded corners only on the outer edges */ 70 | .mode-toggle button:first-child { 71 | border-top-left-radius: 20px; 72 | border-bottom-left-radius: 20px; 73 | } 74 | 75 | .mode-toggle button:last-child { 76 | border-top-right-radius: 20px; 77 | border-bottom-right-radius: 20px; 78 | } 79 | 80 | /* Remove individual border radius for middle button if needed, though flex handles it */ 81 | /* .mode-toggle button:nth-child(2) { border-radius: 0; } */ 82 | 83 | 84 | .mode-toggle button.active { 85 | background: linear-gradient(to bottom, 86 | color-mix(in srgb, var(--vscode-button-background) 120%, white) 0%, 87 | var(--vscode-button-background) 100%); 88 | box-shadow: inset 0 0 10px rgba(255, 255, 255, 0.2); 89 | z-index: 2; 90 | transform: scale(1.03); 91 | } 92 | 93 | .mode-toggle button:hover:not(.active) { 94 | background: linear-gradient(to bottom, 95 | color-mix(in srgb, var(--vscode-button-background) 100%, black) 0%, 96 | color-mix(in srgb, var(--vscode-button-background) 70%, black) 100%); 97 | } 98 | 99 | /* Glowing effect for active button */ 100 | .mode-toggle button.active::after { 101 | content: ""; 102 | position: absolute; 103 | top: 0; 104 | left: 0; 105 | width: 100%; 106 | height: 100%; 107 | background: radial-gradient( 108 | circle at center, 109 | var(--keyword-color) 0%, 110 | transparent 70% 111 | ); 112 | opacity: 0.1; 113 | z-index: -1; 114 | } 115 | 116 | /* Mode step containers */ 117 | .mode-steps-container { 118 | display: none; /* Hide by default, will be shown based on selected mode */ 119 | } 120 | 121 | .mode-steps-container.active { 122 | display: block; 123 | } 124 | -------------------------------------------------------------------------------- /media/munky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/media/munky.png -------------------------------------------------------------------------------- /media/navigation.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Navigation Styles */ 2 | 3 | /* Simple navigation buttons */ 4 | .step-navigation { 5 | display: flex; 6 | justify-content: space-between; 7 | align-items: center; 8 | margin: -5px 0; 9 | border-top: 2px solid var(--variable-color); 10 | border-bottom: 2px solid var(--variable-color); 11 | padding: 10px 0; 12 | position: relative; 13 | background: linear-gradient(to right, 14 | transparent, 15 | rgba(0,0,0,0.1), 16 | transparent); 17 | } 18 | 19 | .step-navigation::before, .step-navigation::after { 20 | content: ""; 21 | position: absolute; 22 | height: 6px; 23 | width: 100%; 24 | background: repeating-linear-gradient( 25 | 90deg, 26 | var(--variable-color), 27 | var(--variable-color) 2px, 28 | transparent 2px, 29 | transparent 10px 30 | ); 31 | opacity: 0.5; 32 | } 33 | 34 | .step-navigation::before { 35 | top: -10px; 36 | } 37 | 38 | .step-navigation::after { 39 | bottom: -10px; 40 | } 41 | 42 | .step-navigation button { 43 | padding: 6px 15px; 44 | border-radius: 15px; 45 | background: linear-gradient(to bottom, 46 | var(--vscode-button-background) 0%, 47 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 100%); 48 | color: var(--vscode-button-foreground); 49 | border: 1px solid color-mix(in srgb, var(--vscode-button-background) 70%, black); 50 | transform: perspective(500px) rotateX(10deg); 51 | transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); 52 | box-shadow: 53 | 0 3px 0 rgba(0, 0, 0, 0.3), 54 | 0 5px 10px rgba(0, 0, 0, 0.2); 55 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 56 | width: 100px; 57 | margin: 0 10px; 58 | } 59 | 60 | .step-navigation button:hover:not(:disabled) { 61 | transform: perspective(500px) rotateX(10deg) translateY(-2px) scale(1.05); 62 | box-shadow: 63 | 0 5px 0 rgba(0, 0, 0, 0.3), 64 | 0 7px 15px rgba(0, 0, 0, 0.2); 65 | background: linear-gradient(to bottom, 66 | color-mix(in srgb, var(--vscode-button-background) 120%, white) 0%, 67 | var(--vscode-button-background) 100%); 68 | } 69 | 70 | .step-navigation button:active:not(:disabled) { 71 | transform: perspective(500px) rotateX(10deg) translateY(1px) scale(0.98); 72 | box-shadow: 73 | 0 1px 0 rgba(0, 0, 0, 0.3), 74 | 0 2px 5px rgba(0, 0, 0, 0.2); 75 | background: linear-gradient(to bottom, 76 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 0%, 77 | var(--vscode-button-background) 100%); 78 | } 79 | 80 | .step-navigation button:disabled { 81 | opacity: 0.5; 82 | cursor: not-allowed; 83 | background: linear-gradient(to bottom, 84 | color-mix(in srgb, var(--vscode-disabledForeground) 120%, var(--vscode-editor-background)) 0%, 85 | color-mix(in srgb, var(--vscode-disabledForeground) 80%, var(--vscode-editor-background)) 100%); 86 | color: var(--vscode-disabledForeground); 87 | border-color: var(--vscode-panel-border); 88 | box-shadow: none; 89 | transform: perspective(500px) rotateX(10deg); 90 | } 91 | -------------------------------------------------------------------------------- /media/reset.css: -------------------------------------------------------------------------------- 1 | /* Reset CSS */ 2 | html, body, div, span, applet, object, iframe, 3 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 4 | a, abbr, acronym, address, big, cite, code, 5 | del, dfn, em, img, ins, kbd, q, s, samp, 6 | small, strike, strong, sub, sup, tt, var, 7 | b, u, i, center, 8 | dl, dt, dd, ol, ul, li, 9 | fieldset, form, label, legend, 10 | table, caption, tbody, tfoot, thead, tr, th, td, 11 | article, aside, canvas, details, embed, 12 | figure, figcaption, footer, header, hgroup, 13 | menu, nav, output, ruby, section, summary, 14 | time, mark, audio, video { 15 | margin: 0; 16 | padding: 0; 17 | border: 0; 18 | font-size: 100%; 19 | font: inherit; 20 | vertical-align: baseline; 21 | } 22 | /* HTML5 display-role reset for older browsers */ 23 | article, aside, details, figcaption, figure, 24 | footer, header, hgroup, menu, nav, section { 25 | display: block; 26 | } 27 | body { 28 | line-height: 1; 29 | } 30 | ol, ul { 31 | list-style: none; 32 | } 33 | blockquote, q { 34 | quotes: none; 35 | } 36 | blockquote:before, blockquote:after, 37 | q:before, q:after { 38 | content: ''; 39 | content: none; 40 | } 41 | table { 42 | border-collapse: collapse; 43 | border-spacing: 0; 44 | } 45 | -------------------------------------------------------------------------------- /media/steps.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Step Container Styling */ 2 | 3 | /* Individual step container */ 4 | .step { 5 | background-color: var(--vscode-editor-background); 6 | padding: 20px; 7 | border-radius: 8px; 8 | position: relative; 9 | overflow: hidden; 10 | border: 1px solid var(--vscode-panel-border); 11 | box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3), 0 6px 15px rgba(0, 0, 0, 0.2); 12 | transition: transform 0.3s ease, box-shadow 0.3s ease; 13 | } 14 | 15 | .step::before { 16 | content: ""; 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | width: 100%; 21 | height: 5px; 22 | background: linear-gradient(90deg, 23 | var(--keyword-color), 24 | var(--function-color), 25 | var(--type-color)); 26 | opacity: 0.7; 27 | } 28 | 29 | /* Step title with reset button */ 30 | .step-title { 31 | display: flex; 32 | justify-content: space-between; 33 | align-items: center; 34 | width: 100%; 35 | margin-top: 0; 36 | margin-bottom: 15px; 37 | } 38 | 39 | .step-title span { 40 | font-family: 'Anton', sans-serif; 41 | color: var(--keyword-color); 42 | text-transform: uppercase; 43 | letter-spacing: 1px; 44 | position: relative; 45 | text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1); 46 | display: inline-block; 47 | } 48 | 49 | .step-title span::after { 50 | content: ""; 51 | position: absolute; 52 | left: 0; 53 | bottom: -5px; 54 | width: 100%; 55 | height: 2px; 56 | background: linear-gradient(to right, 57 | var(--keyword-color), 58 | transparent); 59 | } 60 | 61 | .step h2 { 62 | font-family: 'Anton', sans-serif; 63 | color: var(--keyword-color); 64 | margin-top: 0; 65 | margin-bottom: 15px; 66 | text-transform: uppercase; 67 | letter-spacing: 1px; 68 | position: relative; 69 | display: inline-block; 70 | text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1); 71 | } 72 | 73 | /* Step header with reset button */ 74 | .step-header { 75 | display: flex; 76 | justify-content: space-between; 77 | align-items: center; 78 | width: 100%; 79 | margin-bottom: 15px; 80 | } 81 | 82 | .step-header h2 { 83 | margin-bottom: 0; 84 | } 85 | 86 | .step h2::after { 87 | content: ""; 88 | position: absolute; 89 | left: 0; 90 | bottom: -5px; 91 | width: 100%; 92 | height: 2px; 93 | background: linear-gradient(to right, 94 | var(--keyword-color), 95 | transparent); 96 | } 97 | 98 | .step p { 99 | margin-bottom: 15px; 100 | font-size: 0.9em; 101 | opacity: 0.85; 102 | } 103 | 104 | /* Step navigation controls */ 105 | .step-navigation { 106 | display: flex; 107 | justify-content: space-between; 108 | align-items: center; 109 | margin: 20px 0; 110 | position: relative; 111 | padding: 8px 15px; 112 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 113 | border-radius: 25px; 114 | border: 1px solid var(--vscode-panel-border); 115 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); 116 | } 117 | 118 | .step-navigation button { 119 | background-color: color-mix(in srgb, var(--vscode-button-background) 90%, black); 120 | color: var(--vscode-button-foreground); 121 | border: none; 122 | padding: 5px 15px; 123 | border-radius: 15px; 124 | font-size: 0.8em; 125 | font-weight: bold; 126 | cursor: pointer; 127 | transition: all 0.2s ease; 128 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 129 | position: relative; 130 | overflow: hidden; 131 | } 132 | 133 | .step-navigation button:hover:not(:disabled) { 134 | background-color: color-mix(in srgb, var(--vscode-button-background) 120%, white); 135 | transform: translateY(-2px); 136 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); 137 | } 138 | 139 | .step-navigation button:active:not(:disabled) { 140 | transform: translateY(1px); 141 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); 142 | } 143 | 144 | .step-navigation button:disabled { 145 | opacity: 0.5; 146 | cursor: not-allowed; 147 | } 148 | 149 | #step-indicator { 150 | font-family: 'Anton', sans-serif; 151 | font-size: 0.9em; 152 | color: var(--vscode-editor-foreground); 153 | letter-spacing: 1px; 154 | position: relative; 155 | padding: 0 15px; 156 | text-align: center; 157 | white-space: nowrap; 158 | } 159 | 160 | /* Ensure textarea and all inputs are clickable */ 161 | textarea, 162 | input, 163 | select, 164 | button { 165 | z-index: 1; 166 | position: relative; 167 | pointer-events: auto; 168 | } 169 | 170 | /* Fix any text selection issues */ 171 | .input-group, 172 | .multi-input-container, 173 | textarea, 174 | input { 175 | user-select: text; 176 | -webkit-user-select: text; 177 | } 178 | 179 | /* Add some spacing to textareas */ 180 | textarea { 181 | margin-bottom: 8px; 182 | } 183 | -------------------------------------------------------------------------------- /media/tips.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Tip Sections */ 2 | 3 | /* Munky Says Tip Box */ 4 | .munky-tip { 5 | margin: 30px 0 15px 0; 6 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--function-color)); 7 | border: 1px dashed var(--function-color); 8 | border-radius: 10px; 9 | padding: 15px; 10 | position: relative; 11 | box-shadow: 12 | inset 0 0 15px rgba(0, 0, 0, 0.05), 13 | 0 3px 8px rgba(0, 0, 0, 0.1); 14 | } 15 | 16 | .munky-tip::before { 17 | content: "MUNKY SAYS:"; 18 | position: absolute; 19 | top: -12px; 20 | left: 15px; 21 | background-color: var(--vscode-editor-background); 22 | color: var(--keyword-color); 23 | padding: 2px 10px; 24 | font-family: 'Permanent Marker', cursive; 25 | font-size: 0.9em; 26 | letter-spacing: 1px; 27 | border-radius: 15px; 28 | border: 1px dashed var(--keyword-color); 29 | transform: rotate(-2deg); 30 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 31 | } 32 | 33 | .munky-tip p { 34 | margin: 5px 0; 35 | font-size: 0.9em; 36 | color: var(--vscode-editor-foreground); 37 | line-height: 1.4; 38 | } 39 | 40 | .munky-tip strong { 41 | color: var(--keyword-color); 42 | font-weight: bold; 43 | letter-spacing: 0.5px; 44 | text-wrap: nowrap; 45 | } 46 | 47 | .munky-tip em { 48 | color: var(--type-color); 49 | font-style: italic; 50 | } 51 | 52 | /* Model recommendation badges */ 53 | .model-badge { 54 | display: inline-block; 55 | padding: 3px 8px; 56 | margin: 0 3px; 57 | font-family: 'Permanent Marker', cursive; 58 | font-size: 0.85em; 59 | transform: rotate(-2deg); 60 | box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3); 61 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 62 | letter-spacing: 0.5px; 63 | position: relative; 64 | animation: pulse 3s infinite alternate; 65 | } 66 | 67 | .reasoning-model { 68 | background: linear-gradient(to bottom right, #ff00cc, #3333ff); 69 | border: 2px dashed #ff88ff; 70 | border-radius: 8px 2px 8px 2px; 71 | color: white; 72 | transform: rotate(-1deg) skew(-1deg); 73 | } 74 | 75 | .coding-model { 76 | background: linear-gradient(to bottom right, #00cc66, #006699); 77 | border: 2px dashed #88ffbb; 78 | border-radius: 2px 8px 2px 8px; 79 | color: white; 80 | transform: rotate(1deg) skew(1deg); 81 | } 82 | 83 | .large-context-model { 84 | background: linear-gradient(to bottom right, #ff9900, #cc3300); /* Orange/Red gradient */ 85 | border: 2px dashed #ffcc99; 86 | border-radius: 5px 5px 5px 5px; /* More standard shape */ 87 | color: white; 88 | transform: rotate(0deg) skew(0deg); /* No rotation/skew */ 89 | } 90 | 91 | /* Spacing for buttons within Audit panel */ 92 | .audit-button-group { 93 | margin-top: 10px; /* Add some space above the audit buttons */ 94 | } 95 | -------------------------------------------------------------------------------- /media/typography.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Typography Styles */ 2 | 3 | /* Typography with myspace/nu-metal style */ 4 | h1 { 5 | font-family: 'Bungee', sans-serif; 6 | font-size: 2em; 7 | font-weight: bold; 8 | margin-bottom: 0; 9 | text-transform: uppercase; 10 | letter-spacing: 2px; 11 | transform: rotate(-2deg) skew(-3deg); 12 | background: linear-gradient(90deg, 13 | var(--keyword-color) 0%, 14 | var(--function-color) 50%, 15 | var(--type-color) 100%); 16 | -webkit-background-clip: text; 17 | -webkit-text-fill-color: transparent; 18 | background-clip: text; 19 | filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.5)); 20 | position: relative; 21 | } 22 | 23 | h1::after { 24 | content: "Kornelius"; 25 | position: absolute; 26 | left: 3px; 27 | top: 3px; 28 | opacity: 0.2; 29 | z-index: -1; 30 | transform: skew(10deg); 31 | -webkit-text-fill-color: var(--comment-color); 32 | } 33 | 34 | h2 { 35 | font-family: 'Anton', sans-serif; 36 | font-size: 1.4em; 37 | font-weight: bold; 38 | margin: 15px 0 10px; 39 | text-transform: uppercase; 40 | letter-spacing: 0.5px; 41 | transform: skewX(-5deg); 42 | color: var(--function-color); 43 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 44 | border-bottom: 2px dashed var(--comment-color); 45 | display: inline-block; 46 | padding-right: 20px; 47 | position: relative; 48 | /* Create a cool blink effect */ 49 | animation: textflicker 8s infinite alternate; 50 | } 51 | 52 | h3 { 53 | font-family: 'Permanent Marker', cursive; 54 | font-size: 1.2em; 55 | margin: 10px 0; 56 | transform: rotate(-1.5deg); 57 | color: var(--keyword-color); 58 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 59 | padding-left: 5px; 60 | position: relative; 61 | } 62 | 63 | h3::before { 64 | content: "✧"; 65 | position: absolute; 66 | left: -10px; 67 | top: 0; 68 | color: var(--type-color); 69 | font-size: 0.9em; 70 | } 71 | 72 | h3::after { 73 | content: "✧"; 74 | position: absolute; 75 | right: -10px; 76 | top: 0; 77 | color: var(--type-color); 78 | font-size: 0.9em; 79 | } 80 | 81 | h4 { 82 | font-family: 'Permanent Marker', cursive; 83 | font-size: 1em; 84 | margin: 8px 0; 85 | color: var(--string-color); 86 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 87 | position: relative; 88 | } 89 | 90 | h4::after { 91 | content: ""; 92 | position: absolute; 93 | left: 0; 94 | bottom: -2px; 95 | width: 100%; 96 | height: 2px; 97 | background: linear-gradient(to right, 98 | var(--keyword-color), 99 | var(--string-color), 100 | var(--type-color), 101 | transparent); 102 | } 103 | 104 | p { 105 | margin: 5px 0; 106 | line-height: 1.4; 107 | color: var(--string-color); 108 | } 109 | 110 | .placeholder { 111 | font-style: italic; 112 | color: var(--vscode-input-placeholderForeground); 113 | font-family: 'Permanent Marker', cursive; 114 | opacity: 0.7; 115 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.1); 116 | } 117 | -------------------------------------------------------------------------------- /media/utils.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Utility & Miscellaneous Styles */ 2 | 3 | /* Template selector styling - like a mixtape selector */ 4 | .template-selector { 5 | margin: 20px 0; 6 | position: relative; 7 | background: color-mix(in srgb, var(--vscode-editor-background) 97%, var(--variable-color)); 8 | padding: 15px; 9 | border-radius: 8px; 10 | border: 1px dashed var(--function-color); 11 | box-shadow: 12 | inset 0 0 10px rgba(0, 0, 0, 0.1), 13 | 0 5px 15px rgba(0, 0, 0, 0.1); 14 | } 15 | 16 | .template-selector::before { 17 | content: "▶ SELECT YOUR TEMPLATE"; 18 | font-family: 'Anton', sans-serif; 19 | font-size: 0.8em; 20 | color: var(--function-color); 21 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 22 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--function-color)); 23 | padding: 3px 10px; 24 | border-radius: 15px; 25 | position: absolute; 26 | top: -12px; 27 | left: 15px; 28 | z-index: 1; 29 | letter-spacing: 1px; 30 | border: 1px solid var(--function-color); 31 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); 32 | transform: rotate(-2deg); 33 | } 34 | 35 | .template-selector select { 36 | width: 100%; 37 | padding: 10px; 38 | margin: 5px 0; 39 | background-color: var(--vscode-dropdown-background); 40 | color: var(--vscode-dropdown-foreground); 41 | border: 2px solid var(--vscode-dropdown-border); 42 | border-radius: 8px; 43 | box-shadow: 44 | 0 3px 5px rgba(0, 0, 0, 0.2), 45 | inset 0 1px 3px rgba(0, 0, 0, 0.1); 46 | cursor: pointer; 47 | appearance: none; 48 | padding-right: 35px; 49 | position: relative; 50 | } 51 | 52 | /* Error message styling - with nu-metal attitude */ 53 | .error-message { 54 | color: var(--keyword-color); 55 | margin: 15px 0; 56 | padding: 15px; 57 | font-size: 0.9em; 58 | font-family: 'Permanent Marker', cursive; 59 | border-left: 3px solid var(--keyword-color); 60 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 61 | border-radius: 4px; 62 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); 63 | } 64 | 65 | /* Success message styling - with nu-metal attitude */ 66 | .success-message { 67 | color: var(--type-color); 68 | margin: 15px 0; 69 | padding: 15px; 70 | font-size: 0.9em; 71 | font-family: 'Permanent Marker', cursive; 72 | border-left: 3px solid var(--type-color); 73 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--type-color)); 74 | border-radius: 4px; 75 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); 76 | } 77 | 78 | /* Additional helper classes */ 79 | .shine { 80 | position: relative; 81 | overflow: hidden; 82 | } 83 | 84 | .shine::after { 85 | content: ""; 86 | position: absolute; 87 | top: -50%; 88 | left: -50%; 89 | width: 200%; 90 | height: 200%; 91 | background: linear-gradient( 92 | to right, 93 | transparent 0%, 94 | rgba(255, 255, 255, 0.1) 50%, 95 | transparent 100% 96 | ); 97 | transform: rotate(30deg); 98 | animation: shine 3s linear infinite; 99 | } 100 | 101 | @keyframes shine { 102 | 0% { transform: rotate(30deg) translateX(-100%); } 103 | 100% { transform: rotate(30deg) translateX(100%); } 104 | } 105 | 106 | .fancy-border { 107 | position: relative; 108 | padding: 1px; 109 | overflow: hidden; 110 | } 111 | 112 | .fancy-border::before { 113 | content: ""; 114 | position: absolute; 115 | top: 0; 116 | left: 0; 117 | right: 0; 118 | bottom: 0; 119 | border: 1px solid transparent; 120 | border-radius: inherit; 121 | background: linear-gradient(90deg, 122 | var(--keyword-color), 123 | var(--function-color), 124 | var(--type-color), 125 | var(--function-color), 126 | var(--keyword-color)) border-box; 127 | mask: linear-gradient(#fff 0 0) padding-box, 128 | linear-gradient(#fff 0 0); 129 | mask-composite: exclude; 130 | animation: border-rotate 4s linear infinite; 131 | } 132 | 133 | @keyframes border-rotate { 134 | 0% { background-position: 0% center; } 135 | 100% { background-position: 200% center; } 136 | } 137 | -------------------------------------------------------------------------------- /media/vscode.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --container-padding: 20px; 3 | --input-padding-vertical: 6px; 4 | --input-padding-horizontal: 4px; 5 | --input-margin-vertical: 4px; 6 | --input-margin-horizontal: 0; 7 | } 8 | 9 | body { 10 | padding: 0 var(--container-padding); 11 | color: var(--vscode-foreground); 12 | font-size: var(--vscode-font-size); 13 | font-weight: var(--vscode-font-weight); 14 | font-family: var(--vscode-font-family); 15 | background-color: var(--vscode-editor-background); 16 | } 17 | 18 | ol, ul { 19 | padding-left: var(--container-padding); 20 | } 21 | 22 | body > *, 23 | form > * { 24 | margin-block-start: var(--input-margin-vertical); 25 | margin-block-end: var(--input-margin-vertical); 26 | } 27 | 28 | *:focus { 29 | outline-color: var(--vscode-focusBorder) !important; 30 | } 31 | 32 | a { 33 | color: var(--vscode-textLink-foreground); 34 | } 35 | 36 | a:hover, 37 | a:active { 38 | color: var(--vscode-textLink-activeForeground); 39 | } 40 | 41 | code { 42 | font-size: var(--vscode-editor-font-size); 43 | font-family: var(--vscode-editor-font-family); 44 | } 45 | 46 | button { 47 | border: none; 48 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 49 | width: 100%; 50 | text-align: center; 51 | outline: 1px solid transparent; 52 | outline-offset: 2px !important; 53 | color: var(--vscode-button-foreground); 54 | background: var(--vscode-button-background); 55 | } 56 | 57 | button:hover { 58 | cursor: pointer; 59 | background: var(--vscode-button-hoverBackground); 60 | } 61 | 62 | button:focus { 63 | outline-color: var(--vscode-focusBorder); 64 | } 65 | 66 | button.secondary { 67 | color: var(--vscode-button-secondaryForeground); 68 | background: var(--vscode-button-secondaryBackground); 69 | } 70 | 71 | button.secondary:hover { 72 | background: var(--vscode-button-secondaryHoverBackground); 73 | } 74 | 75 | input:not([type='checkbox']), 76 | textarea { 77 | display: block; 78 | width: 100%; 79 | border: none; 80 | font-family: var(--vscode-font-family); 81 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 82 | color: var(--vscode-input-foreground); 83 | outline-color: var(--vscode-input-border); 84 | background-color: var(--vscode-input-background); 85 | } 86 | 87 | input::placeholder, 88 | textarea::placeholder { 89 | color: var(--vscode-input-placeholderForeground); 90 | } 91 | -------------------------------------------------------------------------------- /out/animations.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Animation Styles */ 2 | 3 | /* Animation Keyframes */ 4 | @keyframes glitch { 5 | 0%, 100% { transform: translate(0); } 6 | 98.001%, 98.999% { transform: translate(-2px, 1px); } 7 | 99.001%, 99.999% { transform: translate(2px, -1px); } 8 | } 9 | 10 | @keyframes textflicker { 11 | 0%, 25%, 75%, 100% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 12 | 26%, 74% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 13 | 27%, 73% { opacity: 0.9; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.4); } 14 | 28%, 72% { opacity: 1; text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); } 15 | 49.5%, 50.5% { opacity: 0.7; text-shadow: 0 0 10px var(--function-color); } 16 | } 17 | 18 | @keyframes shimmer { 19 | 0% { transform: translateX(-100%); } 20 | 100% { transform: translateX(100%); } 21 | } 22 | 23 | @keyframes float { 24 | 0%, 100% { transform: translateY(0) rotate(0); } 25 | 50% { transform: translateY(-5px) rotate(10deg); } 26 | } 27 | 28 | @keyframes fadeIn { 29 | from { opacity: 0; transform: translateY(10px); } 30 | to { opacity: 1; transform: translateY(0); } 31 | } 32 | 33 | @keyframes pulse { 34 | 0% { transform: scale(1); } 35 | 50% { transform: scale(1.05); } 36 | 100% { transform: scale(1); } 37 | } 38 | 39 | /* Animation Classes */ 40 | .pulse { 41 | animation: pulse 0.3s ease-in-out; 42 | } 43 | 44 | /* Step transitions - Apply animation only when step becomes visible */ 45 | .step-visible { 46 | animation: fadeIn 0.3s ease-in-out; 47 | } 48 | /* Remove animation from base .step class */ 49 | .step { 50 | /* animation: fadeIn 0.3s ease-in-out; */ /* Removed */ 51 | display: none; /* Hide by default using display */ 52 | } 53 | -------------------------------------------------------------------------------- /out/barbed-wire-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/out/barbed-wire-color.png -------------------------------------------------------------------------------- /out/barbed-wire.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 30 | 31 | 32 | 33 | 34 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /out/base.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Base Styles */ 2 | 3 | /* Font declarations */ 4 | @font-face { 5 | font-family: 'Anton'; 6 | src: url('./fonts/Anton/Anton-Regular.ttf') format('truetype'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | @font-face { 12 | font-family: 'Permanent Marker'; 13 | src: url('./fonts/Permanent_Marker/PermanentMarker-Regular.ttf') format('truetype'); 14 | font-weight: normal; 15 | font-style: normal; 16 | } 17 | 18 | @font-face { 19 | font-family: 'Bungee'; 20 | src: url('./fonts/Bungee/Bungee-Regular.ttf') format('truetype'); 21 | font-weight: normal; 22 | font-style: normal; 23 | } 24 | 25 | :root { 26 | /* Extract VS Code syntax highlighting colors */ 27 | --string-color: var(--vscode-editor-foreground, #cccccc); 28 | --comment-color: var(--vscode-editorLineNumber-foreground, #858585); 29 | --keyword-color: var(--vscode-editorError-foreground, #f48771); 30 | --variable-color: var(--vscode-editor-selectionBackground, #264f78); 31 | --function-color: var(--vscode-symbolIcon-functionForeground, #b180d7); 32 | --tag-color: var(--vscode-editorWarning-foreground, #cca700); 33 | --number-color: var(--vscode-debugTokenExpression-number, #b5cea8); 34 | --operator-color: var(--vscode-symbolIcon-operatorForeground, #d4d4d4); 35 | --class-color: var(--vscode-symbolIcon-classForeground, #ee9d28); 36 | --type-color: var(--vscode-symbolIcon-typeParameterForeground, #7fd8c9); 37 | } 38 | 39 | html { 40 | /* Add a cool radial gradient background that uses editor colors */ 41 | background: radial-gradient( 42 | ellipse at center, 43 | var(--vscode-editor-background) 0%, 44 | color-mix(in srgb, var(--vscode-editor-background) 95%, var(--vscode-editor-selectionBackground)) 100% 45 | ); 46 | } 47 | 48 | body { 49 | background: none !important; 50 | backdrop-filter: blur(1px); 51 | } 52 | 53 | .container { 54 | padding: 15px 10px; 55 | max-width: 100%; 56 | position: relative; 57 | display: flex; 58 | flex-direction: column; 59 | gap: 5px; 60 | } 61 | -------------------------------------------------------------------------------- /out/commands/browsePrompts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | Object.defineProperty(exports, "__esModule", { value: true }); 26 | exports.getTemplateContent = exports.selectPromptTemplate = exports.browsePrompts = void 0; 27 | const vscode = __importStar(require("vscode")); 28 | const promptManager_1 = require("../utils/promptManager"); 29 | /** 30 | * Command to browse available prompt templates and return them 31 | */ 32 | async function browsePrompts() { 33 | try { 34 | const promptManager = new promptManager_1.PromptManager(); 35 | const templates = await promptManager.getPromptTemplates(); 36 | if (!templates || templates.length === 0) { 37 | vscode.window.showInformationMessage('No prompt templates found in the prompts directory.'); 38 | return []; 39 | } 40 | return templates; 41 | } 42 | catch (error) { 43 | vscode.window.showErrorMessage(`Failed to browse prompt templates: ${error instanceof Error ? error.message : String(error)}`); 44 | return []; 45 | } 46 | } 47 | exports.browsePrompts = browsePrompts; 48 | /** 49 | * Command to select a prompt template 50 | */ 51 | async function selectPromptTemplate(templates) { 52 | if (!templates || templates.length === 0) { 53 | vscode.window.showInformationMessage('No prompt templates available to select.'); 54 | return undefined; 55 | } 56 | const items = templates.map(template => ({ 57 | label: template.name, 58 | description: template.type, 59 | detail: template.fullPath, 60 | template 61 | })); 62 | const selectedItem = await vscode.window.showQuickPick(items, { 63 | placeHolder: 'Select a prompt template', 64 | matchOnDescription: true, 65 | matchOnDetail: true 66 | }); 67 | return selectedItem?.template; 68 | } 69 | exports.selectPromptTemplate = selectPromptTemplate; 70 | /** 71 | * Command to get the content of a template 72 | */ 73 | async function getTemplateContent(templatePath) { 74 | try { 75 | const promptManager = new promptManager_1.PromptManager(); 76 | return await promptManager.getPromptContent(templatePath); 77 | } 78 | catch (error) { 79 | vscode.window.showErrorMessage(`Failed to get template content: ${error instanceof Error ? error.message : String(error)}`); 80 | return ''; 81 | } 82 | } 83 | exports.getTemplateContent = getTemplateContent; 84 | //# sourceMappingURL=browsePrompts.js.map -------------------------------------------------------------------------------- /out/commands/browsePrompts.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"browsePrompts.js","sourceRoot":"","sources":["../../src/commands/browsePrompts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,0DAAuE;AAEvE;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI;QACF,MAAM,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAE3D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,qDAAqD,CAAC,CAAC;YAC5F,OAAO,EAAE,CAAC;SACX;QAED,OAAO,SAAS,CAAC;KAClB;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/H,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAfD,sCAeC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,SAA2B;IACpE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,0CAA0C,CAAC,CAAC;QACjF,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,EAAE,QAAQ,CAAC,IAAI;QACpB,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,MAAM,EAAE,QAAQ,CAAC,QAAQ;QACzB,QAAQ;KACT,CAAC,CAAC,CAAC;IAEJ,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QAC5D,WAAW,EAAE,0BAA0B;QACvC,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,OAAO,YAAY,EAAE,QAAQ,CAAC;AAChC,CAAC;AApBD,oDAoBC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,YAAoB;IAC3D,IAAI;QACF,MAAM,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QAC1C,OAAO,MAAM,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;KAC3D;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5H,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AARD,gDAQC"} -------------------------------------------------------------------------------- /out/commands/catFiles.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"catFiles.js","sourceRoot":"","sources":["../../src/commands/catFiles.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /out/commands/copyPrompt.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | Object.defineProperty(exports, "__esModule", { value: true }); 26 | exports.copyToClipboard = void 0; 27 | const vscode = __importStar(require("vscode")); 28 | /** 29 | * Command to copy the generated prompt to the clipboard 30 | */ 31 | async function copyToClipboard(text) { 32 | try { 33 | await vscode.env.clipboard.writeText(text); 34 | vscode.window.showInformationMessage('Prompt copied to clipboard!'); 35 | } 36 | catch (error) { 37 | vscode.window.showErrorMessage(`Failed to copy prompt to clipboard: ${error instanceof Error ? error.message : String(error)}`); 38 | } 39 | } 40 | exports.copyToClipboard = copyToClipboard; 41 | //# sourceMappingURL=copyPrompt.js.map -------------------------------------------------------------------------------- /out/commands/copyPrompt.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"copyPrompt.js","sourceRoot":"","sources":["../../src/commands/copyPrompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI;QACF,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,CAAC;KACrE;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACjI;AACH,CAAC;AAPD,0CAOC"} -------------------------------------------------------------------------------- /out/commands/generatePrompt.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"generatePrompt.js","sourceRoot":"","sources":["../../src/commands/generatePrompt.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /out/fonts/Anton/Anton-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/out/fonts/Anton/Anton-Regular.ttf -------------------------------------------------------------------------------- /out/fonts/Anton/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2020 The Anton Project Authors (https://github.com/googlefonts/AntonFont.git) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /out/fonts/Bungee/Bungee-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/out/fonts/Bungee/Bungee-Regular.ttf -------------------------------------------------------------------------------- /out/fonts/Bungee/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2023 The Bungee Project Authors (https://github.com/djrrb/Bungee) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /out/fonts/Permanent_Marker/PermanentMarker-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/out/fonts/Permanent_Marker/PermanentMarker-Regular.ttf -------------------------------------------------------------------------------- /out/forms.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Form & Input Styling */ 2 | 3 | /* Input group container - provides consistent spacing */ 4 | .input-group { 5 | margin-bottom: 15px; 6 | position: relative; 7 | } 8 | 9 | /* Label styling - mimics a tape label */ 10 | .input-group label { 11 | display: block; 12 | font-family: 'Permanent Marker', cursive; 13 | font-size: 0.9em; 14 | color: var(--keyword-color); 15 | margin-bottom: 5px; 16 | padding: 2px 5px; 17 | background-color: color-mix(in srgb, var(--vscode-editor-background) 90%, var(--keyword-color)); 18 | border-radius: 3px; 19 | width: fit-content; 20 | transform: rotate(-1deg); 21 | border-left: 3px solid var(--keyword-color); 22 | box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); 23 | text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.4); 24 | } 25 | 26 | /* Main, single primary textarea */ 27 | .main-input { 28 | width: 100%; 29 | min-height: 120px; 30 | padding: 10px; 31 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); /* Consistent with other textareas */ 32 | color: var(--vscode-editor-foreground); 33 | border: 1px solid var(--vscode-input-border); 34 | border-radius: 4px; /* Match other textareas */ 35 | font-family: var(--vscode-editor-font-family); 36 | font-size: var(--vscode-editor-font-size); 37 | resize: vertical; 38 | transition: all 0.3s ease; 39 | box-sizing: border-box; /* Ensure padding is included in width calculation */ 40 | } 41 | 42 | /* Regular textareas for multi-input sections */ 43 | textarea:not(.main-input) { 44 | width: 100%; 45 | padding: 8px; 46 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 47 | color: var(--vscode-editor-foreground); 48 | border: 1px solid var(--vscode-input-border); 49 | border-radius: 4px; 50 | font-family: var(--vscode-editor-font-family); 51 | font-size: calc(var(--vscode-editor-font-size) * 0.95); 52 | resize: vertical; 53 | transition: all 0.3s ease; 54 | box-sizing: border-box; /* Ensure padding is included in width calculation */ 55 | } 56 | 57 | /* Hover state for all textareas */ 58 | textarea:hover { 59 | border-color: var(--function-color); 60 | box-shadow: 0 0 5px color-mix(in srgb, var(--function-color) 50%, transparent); 61 | } 62 | 63 | /* Focus state for all textareas */ 64 | textarea:focus { 65 | outline: none; 66 | border-color: var(--function-color); 67 | box-shadow: 0 0 8px color-mix(in srgb, var(--function-color) 70%, transparent); 68 | background-color: color-mix(in srgb, var(--vscode-editor-background) 98%, var(--function-color)); 69 | } 70 | 71 | /* Container for multiple input fields */ 72 | .multi-input-container { 73 | background-color: color-mix(in srgb, var(--vscode-editor-background) 97%, var(--function-color)); 74 | padding: 15px; 75 | border-radius: 6px; 76 | border: 1px dashed var(--variable-color); 77 | box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); 78 | position: relative; 79 | box-sizing: border-box; 80 | width: 100%; /* Fix width calculation */ 81 | } 82 | 83 | /* Prompt preview section */ 84 | .prompt-preview { 85 | margin: 15px 0; 86 | border: 1px solid var(--vscode-panel-border); 87 | border-radius: 6px; 88 | overflow: hidden; 89 | transition: all 0.3s ease; 90 | } 91 | 92 | .prompt-preview h3 { 93 | background-color: color-mix(in srgb, var(--vscode-editor-background) 90%, var(--type-color)); 94 | color: var(--type-color); 95 | padding: 8px 15px; 96 | margin: 0; 97 | font-size: 0.9em; 98 | font-family: 'Anton', sans-serif; 99 | letter-spacing: 1px; 100 | border-bottom: 1px solid var(--vscode-panel-border); 101 | } 102 | 103 | .prompt-preview .preview-content { 104 | padding: 10px 15px; 105 | max-height: 200px; 106 | overflow-y: auto; 107 | background-color: color-mix(in srgb, var(--vscode-editor-background) 98%, var(--type-color)); 108 | font-family: var(--vscode-editor-font-family); 109 | font-size: calc(var(--vscode-editor-font-size) * 0.9); 110 | line-height: 1.4; 111 | white-space: pre-wrap; 112 | } 113 | 114 | /* Pulse animation for preview updates */ 115 | @keyframes pulse { 116 | 0% { 117 | box-shadow: 0 0 0 0 color-mix(in srgb, var(--function-color) 40%, transparent); 118 | } 119 | 70% { 120 | box-shadow: 0 0 0 10px color-mix(in srgb, var(--function-color) 0%, transparent); 121 | } 122 | 100% { 123 | box-shadow: 0 0 0 0 color-mix(in srgb, var(--function-color) 0%, transparent); 124 | } 125 | } 126 | 127 | .pulse { 128 | animation: pulse 0.5s 1; 129 | } 130 | -------------------------------------------------------------------------------- /out/js/sidebar.js: -------------------------------------------------------------------------------- 1 | import { FormManager } from './formManager.js'; 2 | import { MessageHandler } from './messageHandler.js'; 3 | import { logToExtension } from './sidebarUtils.js'; 4 | 5 | // Initialize everything as soon as document is loaded 6 | document.addEventListener('DOMContentLoaded', () => { 7 | try { 8 | logToExtension('DOMContentLoaded event fired.'); 9 | const formManager = new FormManager(); // Creates instance, determines initial mode via constructor logic 10 | new MessageHandler(formManager); // Sets up message handling 11 | 12 | // --- Set Initial Visual State --- 13 | // Call switchMode with the determined initial mode AFTER the DOM is fully loaded. 14 | // This ensures all elements are available and avoids race conditions. 15 | logToExtension(`DOMContentLoaded: Setting initial mode to ${formManager.currentMode}`); 16 | formManager.switchMode(formManager.currentMode); 17 | 18 | // Initial validation run after potential state loading and mode setup 19 | formManager.validateAllButtons(); 20 | logToExtension(`Initial button validation complete for mode: ${formManager.currentMode}`); 21 | 22 | // No need for the extra updateStep(1) here, switchMode handles it. 23 | 24 | logToExtension('Initialization complete via DOMContentLoaded.'); 25 | } catch (error) { 26 | logToExtension('Error during DOMContentLoaded initialization: ' + error, 'error'); 27 | console.error('Error during DOMContentLoaded initialization:', error); 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /out/js/sidebarUtils.js: -------------------------------------------------------------------------------- 1 | import vscode from './vscodeApi.js'; 2 | 3 | /** 4 | * Sends a log message to the VS Code extension host. 5 | * @param {string | object} message - The message to log. Can be a string or an object. 6 | * @param {'log' | 'warn' | 'error'} level - The log level ('log', 'warn', or 'error'). Defaults to 'log'. 7 | */ 8 | export function logToExtension(message, level = 'log') { 9 | try { 10 | // Support both 'log' and 'logMessage' commands for backward compatibility 11 | // But primarily use 'logMessage' as it's more specific 12 | vscode.postMessage({ 13 | command: 'logMessage', // Dedicated command 14 | level: level, // Pass level as data 15 | message: typeof message === 'object' ? JSON.stringify(message) : message // Ensure objects are stringified 16 | }); 17 | } catch (error) { 18 | // Fallback to console if postMessage fails 19 | console.error('Error sending log to extension:', error); 20 | console[level](message); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /out/js/vscodeApi.js: -------------------------------------------------------------------------------- 1 | // This file isolates the VS Code API acquisition. 2 | // Standard module behavior ensures this code runs only once. 3 | 4 | // Declare vscode variable to hold the API 5 | let vscode; 6 | 7 | try { 8 | // Use the global acquireVsCodeApi function with a try-catch for safety 9 | // @ts-ignore - This suppresses TypeScript errors about the function not being recognized 10 | vscode = typeof acquireVsCodeApi === 'function' ? window['acquireVsCodeApi']() : null; 11 | 12 | // If we didn't get the API through direct call, try window object 13 | if (!vscode && typeof window !== 'undefined') { 14 | // @ts-ignore - This suppresses TypeScript errors 15 | vscode = typeof window.acquireVsCodeApi === 'function' ? window.acquireVsCodeApi() : null; 16 | } 17 | 18 | // If we still don't have it, throw an error to trigger the catch block 19 | if (!vscode) { 20 | throw new Error('Could not acquire VS Code API'); 21 | } 22 | 23 | console.log('VS Code API acquired successfully'); 24 | } catch (error) { 25 | console.error('Failed to acquire VS Code API:', error); 26 | // Provide a mock API for testing/development outside of VS Code 27 | vscode = { 28 | postMessage: (msg) => console.log('[MOCK] postMessage:', msg), 29 | setState: (state) => console.log('[MOCK] setState:', state), 30 | getState: () => { 31 | console.log('[MOCK] getState called'); 32 | return {}; 33 | } 34 | }; 35 | console.log('Using mock VS Code API.'); 36 | } 37 | 38 | // Export the acquired or mock API object 39 | export default vscode; 40 | -------------------------------------------------------------------------------- /out/logo.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Logo Styles */ 2 | 3 | /* Logo */ 4 | .logo { 5 | margin: 0; 6 | display: flex; 7 | flex-direction: column; 8 | gap: 10px; 9 | align-items: left; 10 | position: relative; 11 | padding: 5px; 12 | border-radius: 5px; 13 | overflow: hidden; 14 | } 15 | 16 | .logo h1 { 17 | margin: 0; 18 | } 19 | 20 | .logo span.reversed { 21 | display: inline-block; 22 | color: var(--keyword-color); 23 | } 24 | 25 | .logo .tagline { 26 | font-family: 'Permanent Marker', cursive; 27 | font-size: 0.9em; 28 | opacity: 0.8; 29 | transform: rotate(-0.5deg); 30 | margin: 0; 31 | color: var(--comment-color); 32 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 33 | padding-left: 20px; 34 | position: relative; 35 | text-align: left; 36 | } 37 | 38 | .logo .tagline::before { 39 | content: "// "; 40 | position: absolute; 41 | left: 0; 42 | color: var(--comment-color); 43 | } 44 | -------------------------------------------------------------------------------- /out/main.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Main CSS Import File */ 2 | 3 | /* Import all modular CSS components in a logical order */ 4 | 5 | /* First import base styles and animations */ 6 | @import url('reset.css'); 7 | @import url('vscode.css'); 8 | @import url('base.css'); 9 | @import url('typography.css'); 10 | @import url('forms.css'); 11 | @import url('buttons.css'); 12 | @import url('navigation.css'); 13 | @import url('steps.css'); 14 | @import url('mode-toggle.css'); 15 | @import url('animations.css'); 16 | @import url('logo.css'); 17 | @import url('utils.css'); 18 | @import url('tips.css'); 19 | 20 | /* Media Queries */ 21 | @media (max-width: 600px) { 22 | /* Adjust spacing for small screens */ 23 | .container { 24 | padding: 10px 5px; 25 | } 26 | 27 | /* Make buttons stack on small screens */ 28 | .button-group { 29 | flex-direction: column; 30 | } 31 | 32 | /* Reduce text size on small screens */ 33 | h1 { 34 | font-size: 1.8em; 35 | } 36 | 37 | h2 { 38 | font-size: 1.2em; 39 | } 40 | } 41 | 42 | /* Custom one-off styles that don't justify a separate file */ 43 | .myspace-blink { 44 | animation: blink 1s steps(2, start) infinite; 45 | } 46 | 47 | @keyframes blink { 48 | to { 49 | visibility: hidden; 50 | } 51 | } 52 | 53 | /* CSS-only customized scrollbars (for WebKit browsers) */ 54 | ::-webkit-scrollbar { 55 | width: 8px; 56 | height: 8px; 57 | } 58 | 59 | ::-webkit-scrollbar-track { 60 | background: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--variable-color)); 61 | } 62 | 63 | ::-webkit-scrollbar-thumb { 64 | background: linear-gradient(to bottom, 65 | var(--keyword-color), 66 | var(--function-color), 67 | var(--type-color)); 68 | border-radius: 4px; 69 | } 70 | 71 | ::-webkit-scrollbar-thumb:hover { 72 | background: linear-gradient(to bottom, 73 | color-mix(in srgb, var(--keyword-color) 120%, white), 74 | color-mix(in srgb, var(--function-color) 120%, white), 75 | color-mix(in srgb, var(--type-color) 120%, white)); 76 | } 77 | -------------------------------------------------------------------------------- /out/mode-toggle.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Mode Toggle Styles */ 2 | 3 | .mode-toggle-container { 4 | display: flex; 5 | justify-content: center; 6 | margin: 10px 0 20px; 7 | position: relative; 8 | } 9 | 10 | .mode-toggle { 11 | display: flex; 12 | border-radius: 20px; 13 | overflow: hidden; 14 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); 15 | border: 1px solid var(--vscode-panel-border); 16 | width: 80%; 17 | margin: 0 auto; 18 | position: relative; 19 | z-index: 2; 20 | } 21 | 22 | /* Adjust width for three buttons */ 23 | .mode-toggle { 24 | width: 95%; /* Slightly wider to fit AUDIT comfortably */ 25 | } 26 | 27 | .mode-toggle::before { 28 | content: ""; 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | width: 100%; 33 | height: 100%; 34 | background: linear-gradient(to bottom, 35 | rgba(0, 0, 0, 0.3), 36 | transparent 30%, 37 | transparent 70%, 38 | rgba(0, 0, 0, 0.3)); 39 | z-index: -1; 40 | pointer-events: none; 41 | } 42 | 43 | .mode-toggle button { 44 | flex: 1; 45 | padding: 10px 12px; 46 | background: linear-gradient(to bottom, 47 | var(--vscode-button-background) 0%, 48 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 100%); 49 | color: var(--vscode-button-foreground); 50 | border: none; 51 | font-family: 'Anton', sans-serif; 52 | letter-spacing: 1px; 53 | text-transform: uppercase; 54 | font-size: 0.85em; 55 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 56 | transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); 57 | position: relative; 58 | overflow: hidden; 59 | } 60 | 61 | /* Apply borders between buttons */ 62 | .mode-toggle button:not(:last-child) { 63 | border-right: 1px solid rgba(0, 0, 0, 0.2); 64 | } 65 | .mode-toggle button:not(:first-child) { 66 | border-left: 1px solid rgba(255, 255, 255, 0.1); 67 | } 68 | 69 | /* Keep rounded corners only on the outer edges */ 70 | .mode-toggle button:first-child { 71 | border-top-left-radius: 20px; 72 | border-bottom-left-radius: 20px; 73 | } 74 | 75 | .mode-toggle button:last-child { 76 | border-top-right-radius: 20px; 77 | border-bottom-right-radius: 20px; 78 | } 79 | 80 | /* Remove individual border radius for middle button if needed, though flex handles it */ 81 | /* .mode-toggle button:nth-child(2) { border-radius: 0; } */ 82 | 83 | 84 | .mode-toggle button.active { 85 | background: linear-gradient(to bottom, 86 | color-mix(in srgb, var(--vscode-button-background) 120%, white) 0%, 87 | var(--vscode-button-background) 100%); 88 | box-shadow: inset 0 0 10px rgba(255, 255, 255, 0.2); 89 | z-index: 2; 90 | transform: scale(1.03); 91 | } 92 | 93 | .mode-toggle button:hover:not(.active) { 94 | background: linear-gradient(to bottom, 95 | color-mix(in srgb, var(--vscode-button-background) 100%, black) 0%, 96 | color-mix(in srgb, var(--vscode-button-background) 70%, black) 100%); 97 | } 98 | 99 | /* Glowing effect for active button */ 100 | .mode-toggle button.active::after { 101 | content: ""; 102 | position: absolute; 103 | top: 0; 104 | left: 0; 105 | width: 100%; 106 | height: 100%; 107 | background: radial-gradient( 108 | circle at center, 109 | var(--keyword-color) 0%, 110 | transparent 70% 111 | ); 112 | opacity: 0.1; 113 | z-index: -1; 114 | } 115 | 116 | /* Mode step containers */ 117 | .mode-steps-container { 118 | display: none; /* Hide by default, will be shown based on selected mode */ 119 | } 120 | 121 | .mode-steps-container.active { 122 | display: block; 123 | } 124 | -------------------------------------------------------------------------------- /out/munky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scragz/kornelius/5911ac1ae95b20b6764704f2d54fcbb8c0ba8337/out/munky.png -------------------------------------------------------------------------------- /out/navigation.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Navigation Styles */ 2 | 3 | /* Simple navigation buttons */ 4 | .step-navigation { 5 | display: flex; 6 | justify-content: space-between; 7 | align-items: center; 8 | margin: -5px 0; 9 | border-top: 2px solid var(--variable-color); 10 | border-bottom: 2px solid var(--variable-color); 11 | padding: 10px 0; 12 | position: relative; 13 | background: linear-gradient(to right, 14 | transparent, 15 | rgba(0,0,0,0.1), 16 | transparent); 17 | } 18 | 19 | .step-navigation::before, .step-navigation::after { 20 | content: ""; 21 | position: absolute; 22 | height: 6px; 23 | width: 100%; 24 | background: repeating-linear-gradient( 25 | 90deg, 26 | var(--variable-color), 27 | var(--variable-color) 2px, 28 | transparent 2px, 29 | transparent 10px 30 | ); 31 | opacity: 0.5; 32 | } 33 | 34 | .step-navigation::before { 35 | top: -10px; 36 | } 37 | 38 | .step-navigation::after { 39 | bottom: -10px; 40 | } 41 | 42 | .step-navigation button { 43 | padding: 6px 15px; 44 | border-radius: 15px; 45 | background: linear-gradient(to bottom, 46 | var(--vscode-button-background) 0%, 47 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 100%); 48 | color: var(--vscode-button-foreground); 49 | border: 1px solid color-mix(in srgb, var(--vscode-button-background) 70%, black); 50 | transform: perspective(500px) rotateX(10deg); 51 | transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); 52 | box-shadow: 53 | 0 3px 0 rgba(0, 0, 0, 0.3), 54 | 0 5px 10px rgba(0, 0, 0, 0.2); 55 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 56 | width: 100px; 57 | margin: 0 10px; 58 | } 59 | 60 | .step-navigation button:hover:not(:disabled) { 61 | transform: perspective(500px) rotateX(10deg) translateY(-2px) scale(1.05); 62 | box-shadow: 63 | 0 5px 0 rgba(0, 0, 0, 0.3), 64 | 0 7px 15px rgba(0, 0, 0, 0.2); 65 | background: linear-gradient(to bottom, 66 | color-mix(in srgb, var(--vscode-button-background) 120%, white) 0%, 67 | var(--vscode-button-background) 100%); 68 | } 69 | 70 | .step-navigation button:active:not(:disabled) { 71 | transform: perspective(500px) rotateX(10deg) translateY(1px) scale(0.98); 72 | box-shadow: 73 | 0 1px 0 rgba(0, 0, 0, 0.3), 74 | 0 2px 5px rgba(0, 0, 0, 0.2); 75 | background: linear-gradient(to bottom, 76 | color-mix(in srgb, var(--vscode-button-background) 80%, black) 0%, 77 | var(--vscode-button-background) 100%); 78 | } 79 | 80 | .step-navigation button:disabled { 81 | opacity: 0.5; 82 | cursor: not-allowed; 83 | background: linear-gradient(to bottom, 84 | color-mix(in srgb, var(--vscode-disabledForeground) 120%, var(--vscode-editor-background)) 0%, 85 | color-mix(in srgb, var(--vscode-disabledForeground) 80%, var(--vscode-editor-background)) 100%); 86 | color: var(--vscode-disabledForeground); 87 | border-color: var(--vscode-panel-border); 88 | box-shadow: none; 89 | transform: perspective(500px) rotateX(10deg); 90 | } 91 | -------------------------------------------------------------------------------- /out/providers/treeDataProvider.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | Object.defineProperty(exports, "__esModule", { value: true }); 26 | exports.KorneliusItem = exports.KorneliusTreeDataProvider = void 0; 27 | const vscode = __importStar(require("vscode")); 28 | /** 29 | * Simple tree data provider implementation to ensure our sidebar 30 | * has a valid data provider. 31 | */ 32 | class KorneliusTreeDataProvider { 33 | constructor() { 34 | this._onDidChangeTreeData = new vscode.EventEmitter(); 35 | this.onDidChangeTreeData = this._onDidChangeTreeData.event; 36 | // An empty placeholder item 37 | this.items = []; 38 | // Initialize with empty data - the actual UI is in the webview 39 | this.items = []; 40 | } 41 | refresh() { 42 | this._onDidChangeTreeData.fire(); 43 | } 44 | getTreeItem(element) { 45 | return element; 46 | } 47 | getChildren(element) { 48 | if (element) { 49 | return Promise.resolve([]); 50 | } 51 | else { 52 | return Promise.resolve(this.items); 53 | } 54 | } 55 | } 56 | exports.KorneliusTreeDataProvider = KorneliusTreeDataProvider; 57 | class KorneliusItem extends vscode.TreeItem { 58 | constructor(label, collapsibleState) { 59 | super(label, collapsibleState); 60 | this.label = label; 61 | this.collapsibleState = collapsibleState; 62 | } 63 | } 64 | exports.KorneliusItem = KorneliusItem; 65 | //# sourceMappingURL=treeDataProvider.js.map -------------------------------------------------------------------------------- /out/providers/treeDataProvider.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"treeDataProvider.js","sourceRoot":"","sources":["../../src/providers/treeDataProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;GAGG;AACH,MAAa,yBAAyB;IAOpC;QANQ,yBAAoB,GAAiE,IAAI,MAAM,CAAC,YAAY,EAA2C,CAAC;QACvJ,wBAAmB,GAA0D,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAEtH,4BAA4B;QACpB,UAAK,GAAoB,EAAE,CAAC;QAGlC,+DAA+D;QAC/D,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,OAAsB;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,OAAuB;QACjC,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC5B;aAAM;YACL,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpC;IACH,CAAC;CACF;AA3BD,8DA2BC;AAED,MAAa,aAAc,SAAQ,MAAM,CAAC,QAAQ;IAChD,YACkB,KAAa,EACb,gBAAiD;QAEjE,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAHf,UAAK,GAAL,KAAK,CAAQ;QACb,qBAAgB,GAAhB,gBAAgB,CAAiC;IAGnE,CAAC;CACF;AAPD,sCAOC"} -------------------------------------------------------------------------------- /out/reset.css: -------------------------------------------------------------------------------- 1 | /* Reset CSS */ 2 | html, body, div, span, applet, object, iframe, 3 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 4 | a, abbr, acronym, address, big, cite, code, 5 | del, dfn, em, img, ins, kbd, q, s, samp, 6 | small, strike, strong, sub, sup, tt, var, 7 | b, u, i, center, 8 | dl, dt, dd, ol, ul, li, 9 | fieldset, form, label, legend, 10 | table, caption, tbody, tfoot, thead, tr, th, td, 11 | article, aside, canvas, details, embed, 12 | figure, figcaption, footer, header, hgroup, 13 | menu, nav, output, ruby, section, summary, 14 | time, mark, audio, video { 15 | margin: 0; 16 | padding: 0; 17 | border: 0; 18 | font-size: 100%; 19 | font: inherit; 20 | vertical-align: baseline; 21 | } 22 | /* HTML5 display-role reset for older browsers */ 23 | article, aside, details, figcaption, figure, 24 | footer, header, hgroup, menu, nav, section { 25 | display: block; 26 | } 27 | body { 28 | line-height: 1; 29 | } 30 | ol, ul { 31 | list-style: none; 32 | } 33 | blockquote, q { 34 | quotes: none; 35 | } 36 | blockquote:before, blockquote:after, 37 | q:before, q:after { 38 | content: ''; 39 | content: none; 40 | } 41 | table { 42 | border-collapse: collapse; 43 | border-spacing: 0; 44 | } 45 | -------------------------------------------------------------------------------- /out/steps.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Step Container Styling */ 2 | 3 | /* Individual step container */ 4 | .step { 5 | background-color: var(--vscode-editor-background); 6 | padding: 20px; 7 | border-radius: 8px; 8 | position: relative; 9 | overflow: hidden; 10 | border: 1px solid var(--vscode-panel-border); 11 | box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3), 0 6px 15px rgba(0, 0, 0, 0.2); 12 | transition: transform 0.3s ease, box-shadow 0.3s ease; 13 | } 14 | 15 | .step::before { 16 | content: ""; 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | width: 100%; 21 | height: 5px; 22 | background: linear-gradient(90deg, 23 | var(--keyword-color), 24 | var(--function-color), 25 | var(--type-color)); 26 | opacity: 0.7; 27 | } 28 | 29 | /* Step title with reset button */ 30 | .step-title { 31 | display: flex; 32 | justify-content: space-between; 33 | align-items: center; 34 | width: 100%; 35 | margin-top: 0; 36 | margin-bottom: 15px; 37 | } 38 | 39 | .step-title span { 40 | font-family: 'Anton', sans-serif; 41 | color: var(--keyword-color); 42 | text-transform: uppercase; 43 | letter-spacing: 1px; 44 | position: relative; 45 | text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1); 46 | display: inline-block; 47 | } 48 | 49 | .step-title span::after { 50 | content: ""; 51 | position: absolute; 52 | left: 0; 53 | bottom: -5px; 54 | width: 100%; 55 | height: 2px; 56 | background: linear-gradient(to right, 57 | var(--keyword-color), 58 | transparent); 59 | } 60 | 61 | .step h2 { 62 | font-family: 'Anton', sans-serif; 63 | color: var(--keyword-color); 64 | margin-top: 0; 65 | margin-bottom: 15px; 66 | text-transform: uppercase; 67 | letter-spacing: 1px; 68 | position: relative; 69 | display: inline-block; 70 | text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1); 71 | } 72 | 73 | /* Step header with reset button */ 74 | .step-header { 75 | display: flex; 76 | justify-content: space-between; 77 | align-items: center; 78 | width: 100%; 79 | margin-bottom: 15px; 80 | } 81 | 82 | .step-header h2 { 83 | margin-bottom: 0; 84 | } 85 | 86 | .step h2::after { 87 | content: ""; 88 | position: absolute; 89 | left: 0; 90 | bottom: -5px; 91 | width: 100%; 92 | height: 2px; 93 | background: linear-gradient(to right, 94 | var(--keyword-color), 95 | transparent); 96 | } 97 | 98 | .step p { 99 | margin-bottom: 15px; 100 | font-size: 0.9em; 101 | opacity: 0.85; 102 | } 103 | 104 | /* Step navigation controls */ 105 | .step-navigation { 106 | display: flex; 107 | justify-content: space-between; 108 | align-items: center; 109 | margin: 20px 0; 110 | position: relative; 111 | padding: 8px 15px; 112 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 113 | border-radius: 25px; 114 | border: 1px solid var(--vscode-panel-border); 115 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); 116 | } 117 | 118 | .step-navigation button { 119 | background-color: color-mix(in srgb, var(--vscode-button-background) 90%, black); 120 | color: var(--vscode-button-foreground); 121 | border: none; 122 | padding: 5px 15px; 123 | border-radius: 15px; 124 | font-size: 0.8em; 125 | font-weight: bold; 126 | cursor: pointer; 127 | transition: all 0.2s ease; 128 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 129 | position: relative; 130 | overflow: hidden; 131 | } 132 | 133 | .step-navigation button:hover:not(:disabled) { 134 | background-color: color-mix(in srgb, var(--vscode-button-background) 120%, white); 135 | transform: translateY(-2px); 136 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); 137 | } 138 | 139 | .step-navigation button:active:not(:disabled) { 140 | transform: translateY(1px); 141 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); 142 | } 143 | 144 | .step-navigation button:disabled { 145 | opacity: 0.5; 146 | cursor: not-allowed; 147 | } 148 | 149 | #step-indicator { 150 | font-family: 'Anton', sans-serif; 151 | font-size: 0.9em; 152 | color: var(--vscode-editor-foreground); 153 | letter-spacing: 1px; 154 | position: relative; 155 | padding: 0 15px; 156 | text-align: center; 157 | white-space: nowrap; 158 | } 159 | 160 | /* Ensure textarea and all inputs are clickable */ 161 | textarea, 162 | input, 163 | select, 164 | button { 165 | z-index: 1; 166 | position: relative; 167 | pointer-events: auto; 168 | } 169 | 170 | /* Fix any text selection issues */ 171 | .input-group, 172 | .multi-input-container, 173 | textarea, 174 | input { 175 | user-select: text; 176 | -webkit-user-select: text; 177 | } 178 | 179 | /* Add some spacing to textareas */ 180 | textarea { 181 | margin-bottom: 8px; 182 | } 183 | -------------------------------------------------------------------------------- /out/test/runTest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | Object.defineProperty(exports, "__esModule", { value: true }); 26 | const path = __importStar(require("path")); 27 | const vscode_test_1 = require("vscode-test"); 28 | async function main() { 29 | try { 30 | // The folder containing the Extension Manifest package.json 31 | // Passed to `--extensionDevelopmentPath` 32 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 33 | // The path to the extension test script 34 | // Passed to --extensionTestsPath 35 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 36 | // Download VS Code, unzip it and run the integration test 37 | await (0, vscode_test_1.runTests)({ 38 | extensionDevelopmentPath, 39 | extensionTestsPath 40 | }); 41 | } 42 | catch (err) { 43 | console.error('Failed to run tests:', err); 44 | process.exit(1); 45 | } 46 | } 47 | main(); 48 | //# sourceMappingURL=runTest.js.map -------------------------------------------------------------------------------- /out/test/runTest.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"runTest.js","sourceRoot":"","sources":["../../src/test/runTest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,6CAAuC;AAEvC,KAAK,UAAU,IAAI;IACjB,IAAI;QACF,4DAA4D;QAC5D,yCAAyC;QACzC,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEnE,wCAAwC;QACxC,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAEpE,0DAA0D;QAC1D,MAAM,IAAA,sBAAQ,EAAC;YACb,wBAAwB;YACxB,kBAAkB;SACnB,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED,IAAI,EAAE,CAAC"} -------------------------------------------------------------------------------- /out/test/suite/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | Object.defineProperty(exports, "__esModule", { value: true }); 26 | const assert = __importStar(require("assert")); 27 | const vscode = __importStar(require("vscode")); 28 | const promptManager_1 = require("../../utils/promptManager"); 29 | suite('Extension Test Suite', () => { 30 | vscode.window.showInformationMessage('Starting test suite'); 31 | test('Extension should be present', () => { 32 | assert.notStrictEqual(vscode.extensions.getExtension('scragz.kornelius'), undefined); 33 | }); 34 | test('Extension should activate', async () => { 35 | const extension = vscode.extensions.getExtension('scragz.kornelius'); 36 | if (!extension) { 37 | assert.fail('Extension not found'); 38 | } 39 | try { 40 | await extension.activate(); 41 | assert.strictEqual(extension.isActive, true); 42 | } 43 | catch (error) { 44 | assert.fail(`Failed to activate extension: ${error instanceof Error ? error.message : String(error)}`); 45 | } 46 | }); 47 | test('PromptManager should be instantiable', () => { 48 | assert.doesNotThrow(() => { 49 | new promptManager_1.PromptManager(); 50 | }); 51 | }); 52 | test('Command kornelius.helloWorld should be registered', async () => { 53 | const commands = await vscode.commands.getCommands(); 54 | assert.ok(commands.includes('kornelius.helloWorld')); 55 | }); 56 | test('Command kornelius.browsePrompts should be registered', async () => { 57 | const commands = await vscode.commands.getCommands(); 58 | assert.ok(commands.includes('kornelius.browsePrompts')); 59 | }); 60 | test('Command kornelius.generatePrompt should be registered', async () => { 61 | const commands = await vscode.commands.getCommands(); 62 | assert.ok(commands.includes('kornelius.generatePrompt')); 63 | }); 64 | test('Command kornelius.savePrompt should be registered', async () => { 65 | const commands = await vscode.commands.getCommands(); 66 | assert.ok(commands.includes('kornelius.savePrompt')); 67 | }); 68 | test('Command kornelius.copyToClipboard should be registered', async () => { 69 | const commands = await vscode.commands.getCommands(); 70 | assert.ok(commands.includes('kornelius.copyToClipboard')); 71 | }); 72 | }); 73 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /out/test/suite/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/test/suite/extension.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,+CAAiC;AACjC,6DAA0D;AAE1D,KAAK,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACjC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;IAE5D,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAClD,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACpC;QAED,IAAI;YACF,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC9C;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACxG;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE;YACvB,IAAI,6BAAa,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} -------------------------------------------------------------------------------- /out/test/suite/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | var desc = Object.getOwnPropertyDescriptor(m, k); 5 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 | desc = { enumerable: true, get: function() { return m[k]; } }; 7 | } 8 | Object.defineProperty(o, k2, desc); 9 | }) : (function(o, m, k, k2) { 10 | if (k2 === undefined) k2 = k; 11 | o[k2] = m[k]; 12 | })); 13 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 | }) : function(o, v) { 16 | o["default"] = v; 17 | }); 18 | var __importStar = (this && this.__importStar) || function (mod) { 19 | if (mod && mod.__esModule) return mod; 20 | var result = {}; 21 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 22 | __setModuleDefault(result, mod); 23 | return result; 24 | }; 25 | var __importDefault = (this && this.__importDefault) || function (mod) { 26 | return (mod && mod.__esModule) ? mod : { "default": mod }; 27 | }; 28 | Object.defineProperty(exports, "__esModule", { value: true }); 29 | exports.run = void 0; 30 | const path = __importStar(require("path")); 31 | const mocha_1 = __importDefault(require("mocha")); 32 | const glob_1 = __importDefault(require("glob")); 33 | function run() { 34 | // Create the mocha test 35 | const mocha = new mocha_1.default({ 36 | ui: 'tdd', 37 | color: true 38 | }); 39 | const testsRoot = path.resolve(__dirname, '..'); 40 | return new Promise((resolve, reject) => { 41 | (0, glob_1.default)('**/**.test.js', { cwd: testsRoot }, (err, files) => { 42 | if (err) { 43 | return reject(err); 44 | } 45 | // Add files to the test suite 46 | files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); 47 | try { 48 | // Run the mocha test 49 | mocha.run((failures) => { 50 | if (failures > 0) { 51 | reject(new Error(`${failures} tests failed.`)); 52 | } 53 | else { 54 | resolve(); 55 | } 56 | }); 57 | } 58 | catch (err) { 59 | console.error(err); 60 | reject(err); 61 | } 62 | }); 63 | }); 64 | } 65 | exports.run = run; 66 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /out/test/suite/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/suite/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,kDAA0B;AAC1B,gDAAwB;AAExB,SAAgB,GAAG;IACjB,wBAAwB;IACxB,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC;QACtB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEhD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAA,cAAI,EAAC,eAAe,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,GAAiB,EAAE,KAAe,EAAE,EAAE;YAC/E,IAAI,GAAG,EAAE;gBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;YAED,8BAA8B;YAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAExE,IAAI;gBACF,qBAAqB;gBACrB,KAAK,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAE,EAAE;oBAC7B,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC;qBAChD;yBAAM;wBACL,OAAO,EAAE,CAAC;qBACX;gBACH,CAAC,CAAC,CAAC;aACJ;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAjCD,kBAiCC"} -------------------------------------------------------------------------------- /out/tips.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Tip Sections */ 2 | 3 | /* Munky Says Tip Box */ 4 | .munky-tip { 5 | margin: 30px 0 15px 0; 6 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--function-color)); 7 | border: 1px dashed var(--function-color); 8 | border-radius: 10px; 9 | padding: 15px; 10 | position: relative; 11 | box-shadow: 12 | inset 0 0 15px rgba(0, 0, 0, 0.05), 13 | 0 3px 8px rgba(0, 0, 0, 0.1); 14 | } 15 | 16 | .munky-tip::before { 17 | content: "MUNKY SAYS:"; 18 | position: absolute; 19 | top: -12px; 20 | left: 15px; 21 | background-color: var(--vscode-editor-background); 22 | color: var(--keyword-color); 23 | padding: 2px 10px; 24 | font-family: 'Permanent Marker', cursive; 25 | font-size: 0.9em; 26 | letter-spacing: 1px; 27 | border-radius: 15px; 28 | border: 1px dashed var(--keyword-color); 29 | transform: rotate(-2deg); 30 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 31 | } 32 | 33 | .munky-tip p { 34 | margin: 5px 0; 35 | font-size: 0.9em; 36 | color: var(--vscode-editor-foreground); 37 | line-height: 1.4; 38 | } 39 | 40 | .munky-tip strong { 41 | color: var(--keyword-color); 42 | font-weight: bold; 43 | letter-spacing: 0.5px; 44 | text-wrap: nowrap; 45 | } 46 | 47 | .munky-tip em { 48 | color: var(--type-color); 49 | font-style: italic; 50 | } 51 | 52 | /* Model recommendation badges */ 53 | .model-badge { 54 | display: inline-block; 55 | padding: 3px 8px; 56 | margin: 0 3px; 57 | font-family: 'Permanent Marker', cursive; 58 | font-size: 0.85em; 59 | transform: rotate(-2deg); 60 | box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3); 61 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 62 | letter-spacing: 0.5px; 63 | position: relative; 64 | animation: pulse 3s infinite alternate; 65 | } 66 | 67 | .reasoning-model { 68 | background: linear-gradient(to bottom right, #ff00cc, #3333ff); 69 | border: 2px dashed #ff88ff; 70 | border-radius: 8px 2px 8px 2px; 71 | color: white; 72 | transform: rotate(-1deg) skew(-1deg); 73 | } 74 | 75 | .coding-model { 76 | background: linear-gradient(to bottom right, #00cc66, #006699); 77 | border: 2px dashed #88ffbb; 78 | border-radius: 2px 8px 2px 8px; 79 | color: white; 80 | transform: rotate(1deg) skew(1deg); 81 | } 82 | 83 | .large-context-model { 84 | background: linear-gradient(to bottom right, #ff9900, #cc3300); /* Orange/Red gradient */ 85 | border: 2px dashed #ffcc99; 86 | border-radius: 5px 5px 5px 5px; /* More standard shape */ 87 | color: white; 88 | transform: rotate(0deg) skew(0deg); /* No rotation/skew */ 89 | } 90 | 91 | /* Spacing for buttons within Audit panel */ 92 | .audit-button-group { 93 | margin-top: 10px; /* Add some space above the audit buttons */ 94 | } 95 | -------------------------------------------------------------------------------- /out/typography.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Typography Styles */ 2 | 3 | /* Typography with myspace/nu-metal style */ 4 | h1 { 5 | font-family: 'Bungee', sans-serif; 6 | font-size: 2em; 7 | font-weight: bold; 8 | margin-bottom: 0; 9 | text-transform: uppercase; 10 | letter-spacing: 2px; 11 | transform: rotate(-2deg) skew(-3deg); 12 | background: linear-gradient(90deg, 13 | var(--keyword-color) 0%, 14 | var(--function-color) 50%, 15 | var(--type-color) 100%); 16 | -webkit-background-clip: text; 17 | -webkit-text-fill-color: transparent; 18 | background-clip: text; 19 | filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.5)); 20 | position: relative; 21 | } 22 | 23 | h1::after { 24 | content: "Kornelius"; 25 | position: absolute; 26 | left: 3px; 27 | top: 3px; 28 | opacity: 0.2; 29 | z-index: -1; 30 | transform: skew(10deg); 31 | -webkit-text-fill-color: var(--comment-color); 32 | } 33 | 34 | h2 { 35 | font-family: 'Anton', sans-serif; 36 | font-size: 1.4em; 37 | font-weight: bold; 38 | margin: 15px 0 10px; 39 | text-transform: uppercase; 40 | letter-spacing: 0.5px; 41 | transform: skewX(-5deg); 42 | color: var(--function-color); 43 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); 44 | border-bottom: 2px dashed var(--comment-color); 45 | display: inline-block; 46 | padding-right: 20px; 47 | position: relative; 48 | /* Create a cool blink effect */ 49 | animation: textflicker 8s infinite alternate; 50 | } 51 | 52 | h3 { 53 | font-family: 'Permanent Marker', cursive; 54 | font-size: 1.2em; 55 | margin: 10px 0; 56 | transform: rotate(-1.5deg); 57 | color: var(--keyword-color); 58 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 59 | padding-left: 5px; 60 | position: relative; 61 | } 62 | 63 | h3::before { 64 | content: "✧"; 65 | position: absolute; 66 | left: -10px; 67 | top: 0; 68 | color: var(--type-color); 69 | font-size: 0.9em; 70 | } 71 | 72 | h3::after { 73 | content: "✧"; 74 | position: absolute; 75 | right: -10px; 76 | top: 0; 77 | color: var(--type-color); 78 | font-size: 0.9em; 79 | } 80 | 81 | h4 { 82 | font-family: 'Permanent Marker', cursive; 83 | font-size: 1em; 84 | margin: 8px 0; 85 | color: var(--string-color); 86 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 87 | position: relative; 88 | } 89 | 90 | h4::after { 91 | content: ""; 92 | position: absolute; 93 | left: 0; 94 | bottom: -2px; 95 | width: 100%; 96 | height: 2px; 97 | background: linear-gradient(to right, 98 | var(--keyword-color), 99 | var(--string-color), 100 | var(--type-color), 101 | transparent); 102 | } 103 | 104 | p { 105 | margin: 5px 0; 106 | line-height: 1.4; 107 | color: var(--string-color); 108 | } 109 | 110 | .placeholder { 111 | font-style: italic; 112 | color: var(--vscode-input-placeholderForeground); 113 | font-family: 'Permanent Marker', cursive; 114 | opacity: 0.7; 115 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.1); 116 | } 117 | -------------------------------------------------------------------------------- /out/utils.css: -------------------------------------------------------------------------------- 1 | /* KoЯnelius - Utility & Miscellaneous Styles */ 2 | 3 | /* Template selector styling - like a mixtape selector */ 4 | .template-selector { 5 | margin: 20px 0; 6 | position: relative; 7 | background: color-mix(in srgb, var(--vscode-editor-background) 97%, var(--variable-color)); 8 | padding: 15px; 9 | border-radius: 8px; 10 | border: 1px dashed var(--function-color); 11 | box-shadow: 12 | inset 0 0 10px rgba(0, 0, 0, 0.1), 13 | 0 5px 15px rgba(0, 0, 0, 0.1); 14 | } 15 | 16 | .template-selector::before { 17 | content: "▶ SELECT YOUR TEMPLATE"; 18 | font-family: 'Anton', sans-serif; 19 | font-size: 0.8em; 20 | color: var(--function-color); 21 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.3); 22 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--function-color)); 23 | padding: 3px 10px; 24 | border-radius: 15px; 25 | position: absolute; 26 | top: -12px; 27 | left: 15px; 28 | z-index: 1; 29 | letter-spacing: 1px; 30 | border: 1px solid var(--function-color); 31 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); 32 | transform: rotate(-2deg); 33 | } 34 | 35 | .template-selector select { 36 | width: 100%; 37 | padding: 10px; 38 | margin: 5px 0; 39 | background-color: var(--vscode-dropdown-background); 40 | color: var(--vscode-dropdown-foreground); 41 | border: 2px solid var(--vscode-dropdown-border); 42 | border-radius: 8px; 43 | box-shadow: 44 | 0 3px 5px rgba(0, 0, 0, 0.2), 45 | inset 0 1px 3px rgba(0, 0, 0, 0.1); 46 | cursor: pointer; 47 | appearance: none; 48 | padding-right: 35px; 49 | position: relative; 50 | } 51 | 52 | /* Error message styling - with nu-metal attitude */ 53 | .error-message { 54 | color: var(--keyword-color); 55 | margin: 15px 0; 56 | padding: 15px; 57 | font-size: 0.9em; 58 | font-family: 'Permanent Marker', cursive; 59 | border-left: 3px solid var(--keyword-color); 60 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--keyword-color)); 61 | border-radius: 4px; 62 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); 63 | } 64 | 65 | /* Success message styling - with nu-metal attitude */ 66 | .success-message { 67 | color: var(--type-color); 68 | margin: 15px 0; 69 | padding: 15px; 70 | font-size: 0.9em; 71 | font-family: 'Permanent Marker', cursive; 72 | border-left: 3px solid var(--type-color); 73 | background-color: color-mix(in srgb, var(--vscode-editor-background) 95%, var(--type-color)); 74 | border-radius: 4px; 75 | text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); 76 | } 77 | 78 | /* Additional helper classes */ 79 | .shine { 80 | position: relative; 81 | overflow: hidden; 82 | } 83 | 84 | .shine::after { 85 | content: ""; 86 | position: absolute; 87 | top: -50%; 88 | left: -50%; 89 | width: 200%; 90 | height: 200%; 91 | background: linear-gradient( 92 | to right, 93 | transparent 0%, 94 | rgba(255, 255, 255, 0.1) 50%, 95 | transparent 100% 96 | ); 97 | transform: rotate(30deg); 98 | animation: shine 3s linear infinite; 99 | } 100 | 101 | @keyframes shine { 102 | 0% { transform: rotate(30deg) translateX(-100%); } 103 | 100% { transform: rotate(30deg) translateX(100%); } 104 | } 105 | 106 | .fancy-border { 107 | position: relative; 108 | padding: 1px; 109 | overflow: hidden; 110 | } 111 | 112 | .fancy-border::before { 113 | content: ""; 114 | position: absolute; 115 | top: 0; 116 | left: 0; 117 | right: 0; 118 | bottom: 0; 119 | border: 1px solid transparent; 120 | border-radius: inherit; 121 | background: linear-gradient(90deg, 122 | var(--keyword-color), 123 | var(--function-color), 124 | var(--type-color), 125 | var(--function-color), 126 | var(--keyword-color)) border-box; 127 | mask: linear-gradient(#fff 0 0) padding-box, 128 | linear-gradient(#fff 0 0); 129 | mask-composite: exclude; 130 | animation: border-rotate 4s linear infinite; 131 | } 132 | 133 | @keyframes border-rotate { 134 | 0% { background-position: 0% center; } 135 | 100% { background-position: 200% center; } 136 | } 137 | -------------------------------------------------------------------------------- /out/utils/debugLogger.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /** 3 | * Debug logging utility for more detailed logs during development 4 | */ 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | exports.DebugLogger = void 0; 7 | class DebugLogger { 8 | /** 9 | * Initialize the logger with default settings 10 | */ 11 | static initialize() { 12 | this.logEnabled = true; 13 | this.logToFile = true; // Changed to true to ensure file logging is on after initialization 14 | this.logQueue = []; 15 | this.log('DebugLogger initialized'); 16 | } 17 | /** 18 | * Log messages with optional data objects 19 | */ 20 | static log(message, ...data) { 21 | if (!this.logEnabled) { 22 | return; 23 | } 24 | const formattedMessage = this.formatLogMessage('LOG', message); 25 | // Write to console 26 | console.log(formattedMessage); 27 | if (data.length > 0) { 28 | console.log(...data); 29 | } 30 | // Store in log queue for file output but maintain the max queue size 31 | this.logQueue.push(formattedMessage + (data.length > 0 ? ' ' + JSON.stringify(data) : '')); 32 | // Maintain the maximum queue size by removing the oldest entries 33 | if (this.logQueue.length > this.maxQueueSize) { 34 | this.logQueue = this.logQueue.slice(-this.maxQueueSize); 35 | } 36 | // Optionally write to file 37 | if (this.logToFile) { 38 | this.writeLogsToFile(); 39 | } 40 | } 41 | /** 42 | * Log error messages with optional data objects 43 | */ 44 | static error(message, ...data) { 45 | if (!this.logEnabled) { 46 | return; 47 | } 48 | const formattedMessage = this.formatLogMessage('ERROR', message); 49 | // Write to console 50 | console.error(formattedMessage); 51 | if (data.length > 0) { 52 | console.error(...data); 53 | } 54 | // Store in log queue for file output but maintain the max queue size 55 | this.logQueue.push(formattedMessage + (data.length > 0 ? ' ' + JSON.stringify(data) : '')); 56 | // Maintain the maximum queue size by removing the oldest entries 57 | if (this.logQueue.length > this.maxQueueSize) { 58 | this.logQueue = this.logQueue.slice(-this.maxQueueSize); 59 | } 60 | // Optionally write to file 61 | if (this.logToFile) { 62 | this.writeLogsToFile(); 63 | } 64 | } 65 | /** 66 | * Format a log message with timestamp and type 67 | */ 68 | static formatLogMessage(type, message) { 69 | const timestamp = new Date().toISOString(); 70 | return `[${timestamp}] [${type}] ${message}`; 71 | } 72 | /** 73 | * Write the current log queue to a file 74 | */ 75 | static writeLogsToFile() { 76 | // This function would normally write logs to a file 77 | // But for simplicity, we'll just keep the logs in memory 78 | // and not actually write to a file 79 | // console.log('Would write logs to file:', this.logQueue.length, 'entries'); 80 | } 81 | /** 82 | * Enable or disable logging 83 | */ 84 | static setLogEnabled(enabled) { 85 | this.logEnabled = enabled; 86 | } 87 | /** 88 | * Enable or disable logging to file 89 | */ 90 | static setLogToFile(enabled) { 91 | this.logToFile = enabled; 92 | } 93 | /** 94 | * Get the current log queue 95 | */ 96 | static getLogQueue() { 97 | return [...this.logQueue]; 98 | } 99 | /** 100 | * Clear the log queue 101 | */ 102 | static clearLogQueue() { 103 | this.logQueue = []; 104 | } 105 | } 106 | exports.DebugLogger = DebugLogger; 107 | DebugLogger.logEnabled = true; 108 | DebugLogger.logToFile = true; // Changed to true to enable file logging by default 109 | DebugLogger.logQueue = []; 110 | DebugLogger.maxQueueSize = 1000; // Limit log queue size to prevent memory issues 111 | //# sourceMappingURL=debugLogger.js.map -------------------------------------------------------------------------------- /out/utils/debugLogger.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"debugLogger.js","sourceRoot":"","sources":["../../src/utils/debugLogger.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /out/utils/jinaReader.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"jinaReader.js","sourceRoot":"","sources":["../../src/utils/jinaReader.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /out/utils/promptManager.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"promptManager.js","sourceRoot":"","sources":["../../src/utils/promptManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiC;AACjC,+CAA4C;AAS5C,MAAa,aAAa;IAGxB;QACE,0EAA0E;QAC1E,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACvC,yBAAW,CAAC,GAAG,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,yBAAW,CAAC,KAAK,CAAC,4BAA4B,WAAW,2BAA2B,mBAAmB,EAAE,CAAC,CAAC;YAC3G,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;SAC5D;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAEvE,yBAAW,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC7C,yBAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAC5D,yBAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpE,kDAAkD;QAClD,IAAI;YACF,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBACzC,yBAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC3D,yBAAW,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,8BAA8B,EAAE,WAAW,CAAC,CAAC;aACzF;iBAAM;gBACL,yBAAW,CAAC,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACpF,mDAAmD;gBACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACvD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;oBAC5B,yBAAW,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;iBAClF;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,yBAAW,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;SAC/D;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,kBAAkB;QAC7B,yBAAW,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAE9E,IAAI;YACF,wCAAwC;YACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBAC1C,yBAAW,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBACjF,OAAO,EAAE,CAAC;aACX;YAED,iCAAiC;YACjC,MAAM,KAAK,GAAwC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChF,MAAM,SAAS,GAAqB,EAAE,CAAC;YAEvC,yCAAyC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAC9D,yBAAW,CAAC,GAAG,CAAC,4BAA4B,aAAa,EAAE,CAAC,CAAC;gBAE7D,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;oBAChC,IAAI;wBACF,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;wBAC5C,yBAAW,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,aAAa,IAAI,aAAa,EAAE,KAAK,CAAC,CAAC;wBAE5E,uDAAuD;wBACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;4BACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gCAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gCAChD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;gCACrF,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,IAAI;oCACV,QAAQ;oCACR,IAAI;oCACJ,IAAI,CAAC,eAAe;iCACrB,CAAC,CAAC;6BACJ;yBACF;qBACF;oBAAC,OAAO,SAAS,EAAE;wBAClB,yBAAW,CAAC,KAAK,CAAC,gCAAgC,aAAa,GAAG,EAAE,SAAS,CAAC,CAAC;qBAChF;iBACF;qBAAM;oBACL,yBAAW,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC,CAAC,sBAAsB;iBAC3F;aACF;YAED,oGAAoG;YACpG,IAAI;gBACF,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACzD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;oBAC1B,4EAA4E;oBAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;oBACzD,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;wBAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;wBACzC,yBAAW,CAAC,GAAG,CAAC,wCAAwC,IAAI,+BAA+B,CAAC,CAAC,CAAC,sBAAsB;wBACpH,SAAS,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,IAAI;4BACV,QAAQ;4BACR,IAAI;4BACJ,IAAI,EAAE,SAAS,CAAC,yCAAyC;yBAC5D,CAAC,CAAC;qBACN;iBACJ;aACF;YAAC,OAAO,SAAS,EAAE;gBACjB,yBAAW,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,iBAAiB,GAAG,EAAE,SAAS,CAAC,CAAC;aAClG;YAGD,yBAAW,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,MAAM,iDAAiD,CAAC,CAAC;YAChG,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,KAAK,EAAE;YACd,yBAAW,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gBAAgB,CAAC,YAAoB;QAChD,yBAAW,CAAC,GAAG,CAAC,2DAA2D,YAAY,EAAE,CAAC,CAAC;QAE3F,IAAI;YACF,oCAAoC;YACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAChC,yBAAW,CAAC,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;aAC7D;YAED,yBAAyB;YACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,yBAAW,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;YAE/E,OAAO,OAAO,CAAC;SAChB;QAAC,OAAO,KAAK,EAAE;YACd,yBAAW,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,eAAuB,EAAE,UAAkC;QAC/E,yBAAW,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QAC1F,yBAAW,CAAC,GAAG,CAAC,6CAA6C,EAAE,UAAU,CAAC,CAAC;QAE3E,IAAI,MAAM,GAAG,eAAe,CAAC;QAE7B,4DAA4D;QAC5D,oDAAoD;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACrD,MAAM,sBAAsB,GAAG,KAAK,GAAG,IAAI,CAAC;YAE5C,oCAAoC;YACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;SACnG;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc;QAClC,OAAO,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;IAC5F,CAAC;CACF;AAzKD,sCAyKC"} -------------------------------------------------------------------------------- /out/vscode.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --container-padding: 20px; 3 | --input-padding-vertical: 6px; 4 | --input-padding-horizontal: 4px; 5 | --input-margin-vertical: 4px; 6 | --input-margin-horizontal: 0; 7 | } 8 | 9 | body { 10 | padding: 0 var(--container-padding); 11 | color: var(--vscode-foreground); 12 | font-size: var(--vscode-font-size); 13 | font-weight: var(--vscode-font-weight); 14 | font-family: var(--vscode-font-family); 15 | background-color: var(--vscode-editor-background); 16 | } 17 | 18 | ol, ul { 19 | padding-left: var(--container-padding); 20 | } 21 | 22 | body > *, 23 | form > * { 24 | margin-block-start: var(--input-margin-vertical); 25 | margin-block-end: var(--input-margin-vertical); 26 | } 27 | 28 | *:focus { 29 | outline-color: var(--vscode-focusBorder) !important; 30 | } 31 | 32 | a { 33 | color: var(--vscode-textLink-foreground); 34 | } 35 | 36 | a:hover, 37 | a:active { 38 | color: var(--vscode-textLink-activeForeground); 39 | } 40 | 41 | code { 42 | font-size: var(--vscode-editor-font-size); 43 | font-family: var(--vscode-editor-font-family); 44 | } 45 | 46 | button { 47 | border: none; 48 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 49 | width: 100%; 50 | text-align: center; 51 | outline: 1px solid transparent; 52 | outline-offset: 2px !important; 53 | color: var(--vscode-button-foreground); 54 | background: var(--vscode-button-background); 55 | } 56 | 57 | button:hover { 58 | cursor: pointer; 59 | background: var(--vscode-button-hoverBackground); 60 | } 61 | 62 | button:focus { 63 | outline-color: var(--vscode-focusBorder); 64 | } 65 | 66 | button.secondary { 67 | color: var(--vscode-button-secondaryForeground); 68 | background: var(--vscode-button-secondaryBackground); 69 | } 70 | 71 | button.secondary:hover { 72 | background: var(--vscode-button-secondaryHoverBackground); 73 | } 74 | 75 | input:not([type='checkbox']), 76 | textarea { 77 | display: block; 78 | width: 100%; 79 | border: none; 80 | font-family: var(--vscode-font-family); 81 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 82 | color: var(--vscode-input-foreground); 83 | outline-color: var(--vscode-input-border); 84 | background-color: var(--vscode-input-background); 85 | } 86 | 87 | input::placeholder, 88 | textarea::placeholder { 89 | color: var(--vscode-input-placeholderForeground); 90 | } 91 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kornelius", 3 | "displayName": "KoЯnelius", 4 | "description": "Your vibe coding companion", 5 | "version": "0.1.17", 6 | "publisher": "scragz", 7 | "homepage": "https://kornelius.dev/", 8 | "license": "MIT", 9 | "icon": "media/barbed-wire-color.png", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/scragz/kornelius.git" 13 | }, 14 | "engines": { 15 | "vscode": "^1.88.0" 16 | }, 17 | "categories": [ 18 | "Other" 19 | ], 20 | "activationEvents": [ 21 | "onStartupFinished" 22 | ], 23 | "main": "./out/extension.js", 24 | "contributes": { 25 | "commands": [ 26 | { 27 | "command": "kornelius.catFiles", 28 | "title": "KoЯnelius: Concatenate Files" 29 | }, 30 | { 31 | "command": "kornelius.fetchMarkdown", 32 | "title": "KoЯnelius: Fetch Markdown from URL using Jina.ai" 33 | }, 34 | { 35 | "command": "kornelius.focus", 36 | "title": "KoЯnelius: Focus Sidebar", 37 | "icon": "media/barbed-wire-color.svg" 38 | } 39 | ], 40 | "viewsContainers": { 41 | "activitybar": [ 42 | { 43 | "id": "kornelius-activity", 44 | "title": "KoЯnelius", 45 | "icon": "media/barbed-wire-color.svg" 46 | } 47 | ] 48 | }, 49 | "views": { 50 | "kornelius-activity": [ 51 | { 52 | "id": "kornelius-sidebar", 53 | "name": "KoЯnelius", 54 | "icon": "media/barbed-wire-color.svg", 55 | "type": "webview" 56 | } 57 | ] 58 | }, 59 | "configuration": { 60 | "title": "Kornelius", 61 | "properties": { 62 | "kornelius.enableJinaIntegration": { 63 | "type": "boolean", 64 | "default": false, 65 | "description": "Enable integration with Jina.ai for fetching markdown content" 66 | }, 67 | "kornelius.jinaApiKey": { 68 | "type": "string", 69 | "default": "", 70 | "description": "API key for Jina.ai integration" 71 | } 72 | } 73 | } 74 | }, 75 | "scripts": { 76 | "vscode:prepublish": "npm run compile", 77 | "compile": "tsc -p ./ && copyfiles -u 1 \"src/views/templates/**/*\" out && copyfiles -u 1 \"media/**/*\" out", 78 | "watch": "tsc -watch -p ./", 79 | "pretest": "npm run compile && npm run lint", 80 | "lint": "eslint src --ext ts", 81 | "test": "node ./out/test/runTest.js" 82 | }, 83 | "devDependencies": { 84 | "@types/glob": "^7.1.3", 85 | "@types/mocha": "^8.2.2", 86 | "@types/node": "^14.17.0", 87 | "@types/vscode": "^1.88.0", 88 | "@typescript-eslint/eslint-plugin": "^4.26.0", 89 | "@typescript-eslint/parser": "^4.26.0", 90 | "copyfiles": "^2.4.1", 91 | "eslint": "^7.27.0", 92 | "glob": "^7.1.7", 93 | "mocha": "^8.4.0", 94 | "typescript": "^4.3.2", 95 | "vscode-test": "^1.5.2" 96 | }, 97 | "dependencies": { 98 | "ignore": "^7.0.3", 99 | "ipaddr.js": "^2.2.0" 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /prompts/create/planner.prompt: -------------------------------------------------------------------------------- 1 | # Implementation Plan Generation 2 | 3 | Your task is to **create a comprehensive, step-by-step implementation plan** for building a fully functional web application based on provided input documents. The plan should be detailed enough for a code-generation AI to execute each step sequentially. 4 | 5 | --- 6 | 7 | ## **Required Inputs** 8 | 9 | 1. **PROJECT_REQUEST**: An overview of the project requirements or user request. 10 | 2. **PROJECT_RULES**: Any specific rules, guidelines, or best practices to follow. 11 | 3. **TECHNICAL_SPECIFICATION**: A thorough technical spec outlining architecture, data flows, features, etc. 12 | 4. **REFERENCE_CODE**: Any initial code or directory structure templates that should be referenced or expanded. 13 | 14 | --- 15 | 16 | ## **Task Overview** 17 | 18 | In each exchange, you will: 19 | 20 | 1. **Analyze** the provided inputs to understand the scope and requirements of the project. 21 | 2. **Brainstorm** (within `` tags) the logical approach to development, considering project structure, database schema, API routes, shared components, authentication, etc. 22 | 3. **Construct** an itemized, ordered list of implementation steps, each sufficiently granular and self-contained. 23 | 4. **Format** these steps as a Markdown-based plan, ensuring it follows the guidelines: 24 | - Each step modifies no more than ~20 files. 25 | - The plan is structured so the AI can tackle one step at a time (sequentially). 26 | - Each step clearly outlines its dependencies, tasks, and any user instructions (like installing a library or updating config on a remote service). 27 | 28 | Upon completion, the AI will produce a final **Implementation Plan**—a single document containing your project build steps in order. This plan should cover everything from **initial project setup** to **final testing**. 29 | 30 | --- 31 | 32 | ## **Detailed Process Outline** 33 | 34 | 1. **Review Inputs**: The AI reads ``, ``, ``, and `` to form a complete understanding of the project. 35 | 2. **Brainstorm**: Within `` tags, the AI considers: 36 | - Core structure and essential configurations. 37 | - Database schema, server actions, and API routes. 38 | - Shared components, layouts, and feature pages. 39 | - Authentication, authorization, and third-party service integrations. 40 | - Client-side interactivity and state management. 41 | - Testing strategy and error handling. 42 | 3. **Create the Step-by-Step Plan**: 43 | - **List** each step with a short title and description. 44 | - **Specify** affected files (ensuring no more than 20 changes in a single step). 45 | - **Indicate** step dependencies (if any). 46 | - **Highlight** any user instructions for manual tasks. 47 | 4. **Finalize the Plan**: The AI returns the complete plan under a `# Implementation Plan` heading, with each major section labeled (e.g., “## [Section Name]”) and the sub-steps in a checklist format. 48 | 49 | --- 50 | 51 | ## **Output Template** 52 | 53 | Below is an example of the **Implementation Plan** structure you should produce once the brainstorming is complete: 54 | 55 | ```markdown 56 | # Implementation Plan 57 | 58 | ## [Section Name] 59 | - [ ] Step 1: [Brief title] 60 | - **Task**: [Detailed explanation of what needs to be implemented] 61 | - **Files**: [Up to 20 files, ideally less] 62 | - `path/to/file1.ts`: [Description of changes] 63 | - ... 64 | - **Step Dependencies**: [e.g., "None" or "Step 2"] 65 | - **User Instructions**: [Any manual tasks the user must perform] 66 | 67 | [Additional steps... up to final deployment and testing] 68 | ``` 69 | 70 | After listing all steps, provide a **brief summary** of your overall approach and key considerations (e.g., major dependencies, potential complexities, or recommended best practices). 71 | 72 | --- 73 | 74 | ## **Context** 75 | 76 | 77 | {{TECHNICAL_SPECIFICATION}} 78 | 79 | 80 | 81 | {{PROJECT_REQUEST}} 82 | 83 | 84 | 85 | {{PROJECT_RULES}} 86 | 87 | 88 | 89 | {{REFERENCE_CODE}} 90 | 91 | 92 | --- 93 | -------------------------------------------------------------------------------- /prompts/create/request.prompt: -------------------------------------------------------------------------------- 1 | # Idea Refinement 2 | 3 | Your task is to **collaborate on developing or refining a project or feature concept**. This prompt solicits iterative feedback to expand a basic idea into a comprehensive, well-structured request. 4 | 5 | --- 6 | 7 | ## **Required Inputs** 8 | 9 | 1. **PROJECT_REQUEST**: A short description of the project or feature’s initial concept. 10 | 11 | --- 12 | 13 | ## **Task Overview** 14 | 15 | In each exchange, the AI will: 16 | 17 | 1. Ask questions to clarify the project or feature. 18 | 2. Suggest missing considerations or user flows. 19 | 3. Organize requirements logically. 20 | 4. Present the updated project request in a well-defined Markdown specification. 21 | 22 | This ensures you iterate toward a final, clear “Project Request” doc. 23 | 24 | --- 25 | 26 | ## **Detailed Process Outline** 27 | 28 | 1. **User Provides Concept**: User supplies the idea. 29 | 2. **AI Gathers Clarifications**: The AI asks targeted questions to flesh out missing details, such as feature scope or user needs. 30 | 3. **AI Updates the Specification**: After each round of questions/answers, the AI returns a new version of the Markdown-based request format. 31 | 4. **Repeat** until the request is complete, well-defined, and you are satisfied. 32 | 33 | --- 34 | 35 | ## **Output Template** 36 | 37 | ```markdown 38 | # Project Name 39 | 40 | [Description goes here] 41 | 42 | ## Target Audience 43 | 44 | [Who will use this? What are their needs?] 45 | 46 | ## Desired Features 47 | 48 | ### [Feature Category] 49 | 50 | - [ ] [High-level requirement] 51 | - [ ] [Further detail, sub-requirement] 52 | 53 | ## Design Requests 54 | 55 | - [ ] [Visual or UX requirement] 56 | - [ ] [Relevant detail or constraint] 57 | 58 | ## Other Notes 59 | 60 | - [Any additional considerations or open questions] 61 | ``` 62 | 63 | --- 64 | 65 | ## **Context** 66 | 67 | 68 | {{PROJECT_REQUEST}} 69 | 70 | 71 | --- 72 | -------------------------------------------------------------------------------- /prompts/create/review.prompt: -------------------------------------------------------------------------------- 1 | # Code Review 2 | 3 | Your task is to **serve as an expert code reviewer and optimizer**, analyzing the existing code against the original plan and requirements. Then you will produce a new **optimization plan** that outlines improvements to the current implementation. 4 | 5 | --- 6 | 7 | ## **Required Inputs** 8 | 9 | 1. **IMPLEMENTATION_PLAN** 10 | - The plan used for building the current code. 11 | 2. **TECHNICAL_SPECIFICATION** 12 | - The detailed technical specification that informed the initial implementation. 13 | 3. **PROJECT_REQUEST** 14 | - The original description of project objectives or requirements. 15 | 4. **PROJECT_RULES** 16 | - Any constraints, guidelines, or “rules” you must follow. 17 | 5. **EXISTING_CODE** 18 | - The code that was implemented following the original plan. 19 | 20 | --- 21 | 22 | ## **Task Overview** 23 | 24 | 1. **Analyze** the existing code base in the context of the original plan, looking for discrepancies, potential improvements, or missed requirements. 25 | 2. **Focus** on key areas: 26 | - Code organization and structure 27 | - Code quality and best practices 28 | - UI/UX improvements 29 | 3. **Wrap** this analysis in `` tags to capture your insights. 30 | 4. **Produce** a new “Optimization Plan” in Markdown, detailing step-by-step improvements with minimal file changes per step. 31 | 32 | Your plan should be clear enough that another AI can implement each step sequentially in a single iteration. 33 | 34 | --- 35 | 36 | ## **Detailed Process Outline** 37 | 38 | 1. **Review Inputs** 39 | - Ingest ``, ``, ``, ``, and ``. 40 | 2. **Perform Analysis** 41 | - Within `` tags, comment on: 42 | 1. **Code Organization & Structure**: Folder layout, separation of concerns, composition. 43 | 2. **Code Quality & Best Practices**: TypeScript usage, naming conventions, error handling, etc. 44 | 3. **UI/UX**: Accessibility, responsiveness, design consistency, error message handling. 45 | 3. **Generate Optimization Plan** 46 | - Use markdown formating with the output template. 47 | - Include each improvement as a small, **atomic** step with **no more than 20 file modifications**. 48 | - Steps should **maintain existing functionality** and follow the **Project Rules** and **Technical Specification**. 49 | 4. **Provide Guidance** 50 | - Ensure your plan states any **success criteria** or acceptance conditions for each step. 51 | - End your plan with a **logical next step** if needed. 52 | 53 | --- 54 | 55 | ## **Output Template** 56 | 57 | Below is an example of how your final output should look once you generate your analysis and plan: 58 | 59 | ```markdown 60 | 61 | Here is my detailed review of the current codebase: 62 | 1. Code Organization: Observations, suggestions... 63 | 2. Code Quality: Observations, improvements... 64 | 3. UI/UX: Observations, improvements... 65 | 66 | 67 | # Optimization Plan 68 | 69 | ## Code Structure & Organization 70 | - [ ] Step 1: [Brief title] 71 | - **Task**: [Explanation] 72 | - **Files**: 73 | - `path/to/file1.ts`: [Description of changes] 74 | - ... 75 | - **Step Dependencies**: [None or references] 76 | - **User Instructions**: [Manual steps if any] 77 | 78 | [Additional categories and steps...] 79 | ``` 80 | 81 | --- 82 | 83 | ## **Context** 84 | 85 | 86 | {{IMPLEMENTATION_PLAN}} 87 | 88 | 89 | 90 | {{TECHNICAL_SPECIFICATION}} 91 | 92 | 93 | 94 | {{PROJECT_REQUEST}} 95 | 96 | 97 | 98 | {{PROJECT_RULES}} 99 | 100 | 101 | 102 | {{EXISTING_CODE}} 103 | 104 | 105 | --- 106 | -------------------------------------------------------------------------------- /prompts/debug/act.prompt: -------------------------------------------------------------------------------- 1 | # Debugging Mode – Step 4: Act 2 | 3 | ## Instructions 4 | 5 | You are in the **Act** phase of OODA for debugging. The user has selected a path or combination of actions in Step 3. Your role is to: 6 | 7 | 1. **Interpret the User’s Decision** 8 | - Parse the chosen action(s) from Step 3. 9 | 10 | 2. **Guide the Implementation Plan** 11 | - Help the user outline specific tasks, configurations, code changes, or rollbacks. 12 | 13 | 3. **Suggest Validation & Testing** 14 | - Propose ways to confirm success or gather more data (e.g., logs, performance metrics). 15 | 16 | 4. **Gather Actual Results** 17 | - Prompt the user to report what happened after the changes, and decide if the bug is resolved or needs more OODA cycles. 18 | 19 | 5. **Generate Output** 20 | - Use the “Output Template (User-Facing)” below, capturing the final details of the debugging effort and how to verify if it worked. 21 | 22 | --- 23 | 24 | ## Output Template (User-Facing) 25 | 26 | ```markdown 27 | # Debugging Mode – Step 4: Act 28 | 29 | ## Implementation Plan 30 | - [List the concrete tasks or changes you’ll make. Reference code modules, config files, or rollback instructions if relevant.] 31 | 32 | ## Success Criteria 33 | - [Clearly define how you’ll know if the fix worked. e.g., “Error rate < 1% for 24 hours” or “No more crashes in log.”] 34 | 35 | ## Testing & Verification 36 | - [Describe which tests you’ll run or data you’ll collect. e.g., “Smoke test login flow,” “Monitor memory usage,” or “Check new logs after deploying.”] 37 | 38 | ## Actual Result 39 | - [After you perform the plan and tests, note what actually happened. Did the fix work? Were there side effects?] 40 | 41 | ## Next Steps 42 | - [If successful, note final cleanup tasks or confirm the bug is resolved. If not resolved, consider repeating from Step 1 or Step 2 with new data.] 43 | 44 | > **Note to User**: Document your **Actual Result** once you’ve tested. If the issue persists, use any new observations to iterate again. 45 | ``` 46 | 47 | --- 48 | 49 | ## Context 50 | 51 | 52 | {{CHOSEN_ACTIONS}} 53 | 54 | 55 | 56 | {{IMPLEMENTATION_PLAN}} 57 | 58 | 59 | 60 | {{SUCCESS_CRITERIA}} 61 | 62 | -------------------------------------------------------------------------------- /prompts/debug/decide.prompt: -------------------------------------------------------------------------------- 1 | # Debugging Mode – Step 3: Decide 2 | 3 | ## Instructions 4 | 5 | You are in the **Decide** phase of OODA for debugging. The user has arrived here after forming hypotheses in Step 2. Your task is to: 6 | 7 | 1. **Review Hypotheses & Constraints** 8 | - Look at the potential causes or patterns identified in Step 2. 9 | - Consider any constraints (time, resources, risk tolerance) the user may have mentioned. 10 | 11 | 2. **Propose Next Steps or Actions** 12 | - Present a few viable options—like gathering more data, applying a temporary fix, rolling back a change, etc. 13 | - Do **not** finalize an implementation yet. That’s for Step 4: Act. 14 | 15 | 3. **Stay Neutral & Informative** 16 | - Don’t push a single solution. Instead, outline trade-offs or considerations for each option. 17 | 18 | 4. **Generate Output** 19 | - Use the “Output Template (User-Facing)” below. 20 | - Provide a concise summary, list potential actions, and ask any final clarifying questions to help the user pick a path forward. 21 | 22 | --- 23 | 24 | ## Output Template 25 | 26 | ```markdown 27 | # Debugging Mode – Step 3: Decide 28 | 29 | ## Summary of Findings 30 | - [Condensed restatement of the main hypotheses or insights from Step 2] 31 | 32 | ## Possible Actions 33 | 1. [Action A: e.g., “Collect deeper logs or metrics to confirm memory leak”] 34 | 2. [Action B: e.g., “Attempt a quick fix to patch error-handling logic”] 35 | 3. [Action C: e.g., “Roll back to a previous version to see if the bug disappears”] 36 | 37 | > **Note to User**: For each action, consider cost, risk level, and potential impact. 38 | 39 | ## Additional Considerations 40 | - [Mention any constraints: time, environment stability, user impact, etc.] 41 | 42 | ## Clarifying Questions 43 | 1. [E.g., “Do you have the bandwidth to run a stress test now, or is time limited?”] 44 | 2. [Any other question to help narrow down the choices] 45 | 46 | > **Note to User**: Pick the path(s) you wish to pursue, then move on to **Step 4: Act** where you’ll detail the actual implementation or changes. 47 | ``` 48 | 49 | --- 50 | 51 | ## Context 52 | 53 | 54 | {{ANALYSIS_SUMMARY}} 55 | {{CONSTRAINTS_OR_RISKS}} 56 | 57 | -------------------------------------------------------------------------------- /prompts/debug/observe.prompt: -------------------------------------------------------------------------------- 1 | # Debugging Mode – Step 1: Observe 2 | 3 | ## Instructions 4 | 5 | You are the in the **Observe** phase of OODA for debugging. 6 | 7 | 1. **Parse the User Inputs** 8 | - Use the inputs to understand the bug and context. 9 | 10 | 2. **Summarize Key Observations** 11 | - Provide a brief overview of the user’s data—no large verbatim quotes. 12 | 13 | 3. **Highlight Immediate Observations** 14 | - Note any patterns, inconsistencies, or missing information. 15 | 16 | 4. **Ask Clarifying Questions** 17 | - Point out any data you still need or uncertainties in the user’s input. 18 | - Keep it concise. 19 | 20 | --- 21 | 22 | ## Output Template 23 | 24 | ```markdown 25 | # Debugging Mode – Step 1: Observe 26 | 27 | ## Summary 28 | - [Short summary of the main points derived from the user’s data] 29 | 30 | ## Immediate Observations 31 | - [List any patterns, unusual findings, or contradictions noticed by the AI] 32 | 33 | ## Clarifying Questions 34 | 1. [If needed, “Do you have server logs from the same time frame?”] 35 | 2. [Any other missing or needed information] 36 | 37 | > **Note to User**: Provide answers or additional context if any clarifications are requested. Once you’re satisfied with the observed data, proceed to **Step 2: Orient**. 38 | ``` 39 | 40 | --- 41 | 42 | ## Context 43 | 44 | 45 | {{BUG_DESCRIPTION}} 46 | 47 | 48 | 49 | {{ERROR_MESSAGES}} 50 | 51 | 52 | 53 | {{REPRO_STEPS}} 54 | 55 | 56 | 57 | {{ENV_DETAILS}} 58 | 59 | 60 | 61 | {{USER_FEEDBACK}} 62 | 63 | 64 | 65 | {{ADDITIONAL_EVIDENCE}} 66 | 67 | -------------------------------------------------------------------------------- /prompts/debug/orient.prompt: -------------------------------------------------------------------------------- 1 | # Debugging Mode – Step 2: Orient 2 | 3 | ## Instructions 4 | 5 | You are now in the **Orient** phase of OODA for debugging. The user may have updated information based on Step 1 clarifications. Your task is to: 6 | 7 | 1. **Parse Updated Context** 8 | - Review the summary and clarifications from Step 1. 9 | - Integrate this new info with the originally observed data. 10 | 11 | 2. **Analyze & Interpret** 12 | - Identify potential root causes, suspicious patterns, or areas requiring deeper investigation. 13 | - Organize this into concise hypotheses or theories—without definitively concluding. 14 | 15 | 3. **Avoid Solutions** 16 | - Do not offer direct fixes or next actions yet; Step 3 (“Decide”) will handle solution choices. 17 | 18 | 4. **Generate Output** 19 | - Use the “Output Template (User-Facing)” below. 20 | - Include a short summary of your analysis, plausible hypotheses, and any additional questions that might guide further refinement. 21 | 22 | --- 23 | 24 | ## Output Template 25 | 26 | ```markdown 27 | # Debugging Mode – Step 2: Orient 28 | 29 | ## Summary of Observations 30 | - [Condensed restatement of the key facts from Step 1, plus any new clarifications] 31 | 32 | ## Potential Causes or Theories 33 | - [List 1–3 possible root causes or patterns, referencing any suspicious logs, environment quirks, or repeated user complaints] 34 | 35 | ## Clarifying Questions 36 | 1. [E.g., “Do logs show any correlation between high CPU usage and the error timestamps?”] 37 | 2. [Any other question about missing or ambiguous data] 38 | 39 | > **Note to User**: This step focuses on forming hypotheses. We are not deciding on any specific fix yet. Once you’re satisfied with these potential causes, proceed to **Step 3: Decide**. 40 | ``` 41 | 42 | --- 43 | 44 | ## Context 45 | 46 | 47 | {{ANALYSIS_SUMMARY}} 48 | 49 | 50 | 51 | {{UPDATED_CLARIFICATIONS}} 52 | 53 | -------------------------------------------------------------------------------- /src/commands/browsePrompts.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { PromptManager, PromptTemplate } from '../utils/promptManager'; 3 | 4 | /** 5 | * Command to browse available prompt templates and return them 6 | */ 7 | export async function browsePrompts(): Promise { 8 | try { 9 | const promptManager = new PromptManager(); 10 | const templates = await promptManager.getPromptTemplates(); 11 | 12 | if (!templates || templates.length === 0) { 13 | vscode.window.showInformationMessage('No prompt templates found in the prompts directory.'); 14 | return []; 15 | } 16 | 17 | return templates; 18 | } catch (error) { 19 | vscode.window.showErrorMessage(`Failed to browse prompt templates: ${error instanceof Error ? error.message : String(error)}`); 20 | return []; 21 | } 22 | } 23 | 24 | /** 25 | * Command to select a prompt template 26 | */ 27 | export async function selectPromptTemplate(templates: PromptTemplate[]): Promise { 28 | if (!templates || templates.length === 0) { 29 | vscode.window.showInformationMessage('No prompt templates available to select.'); 30 | return undefined; 31 | } 32 | 33 | const items = templates.map(template => ({ 34 | label: template.name, 35 | description: template.type, 36 | detail: template.fullPath, 37 | template 38 | })); 39 | 40 | const selectedItem = await vscode.window.showQuickPick(items, { 41 | placeHolder: 'Select a prompt template', 42 | matchOnDescription: true, 43 | matchOnDetail: true 44 | }); 45 | 46 | return selectedItem?.template; 47 | } 48 | 49 | /** 50 | * Command to get the content of a template 51 | */ 52 | export async function getTemplateContent(templatePath: string): Promise { 53 | try { 54 | const promptManager = new PromptManager(); 55 | return await promptManager.getPromptContent(templatePath); 56 | } catch (error) { 57 | vscode.window.showErrorMessage(`Failed to get template content: ${error instanceof Error ? error.message : String(error)}`); 58 | return ''; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/commands/catFiles.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as fsPromises from 'fs/promises'; 3 | import * as path from 'path'; 4 | import ignore from 'ignore'; 5 | 6 | export async function runConcatenation() { 7 | try { 8 | const folders = await vscode.window.showOpenDialog({ 9 | canSelectFolders: true, 10 | canSelectFiles: false, 11 | canSelectMany: false, 12 | openLabel: "Select Directory" 13 | }); 14 | if (!folders || folders.length === 0) { 15 | return; // user canceled 16 | } 17 | const directoryPath = folders[0].fsPath; 18 | 19 | // Load .gitignore if present 20 | const ig = ignore(); 21 | // Add default patterns for common directories to ignore 22 | ig.add([ 23 | '**/__pycache__/**', 24 | '**/node_modules/**', 25 | '**/.git/**', 26 | '**/.DS_Store', 27 | '**/dist/**', 28 | '**/build/**' 29 | ]); 30 | const gitignorePath = path.join(directoryPath, '.gitignore'); 31 | try { 32 | await fsPromises.access(gitignorePath); 33 | const gitignoreContent = await fsPromises.readFile(gitignorePath, 'utf8'); 34 | ig.add(gitignoreContent); 35 | } catch { 36 | console.log('.gitignore not found or unreadable, proceeding without it.'); 37 | } 38 | 39 | await vscode.window.withProgress({ 40 | location: vscode.ProgressLocation.Notification, 41 | title: "Concatenating Files", 42 | cancellable: false 43 | }, async (progress) => { 44 | progress.report({ message: "Scanning directory..." }); 45 | const filePaths = await getAllFiles(directoryPath, ig, directoryPath); 46 | progress.report({ message: `Found ${filePaths.length} files. Reading files...`, increment: 10 }); 47 | 48 | const fileContents = await readFilesWithProgress(filePaths, progress); 49 | const combined = fileContents.join('\n'); 50 | 51 | const doc = await vscode.workspace.openTextDocument({ 52 | content: combined, 53 | language: 'plaintext' 54 | }); 55 | await vscode.window.showTextDocument(doc); 56 | vscode.window.showInformationMessage(`Concatenation complete. ${filePaths.length} files processed.`); 57 | }); 58 | } catch (error) { 59 | vscode.window.showErrorMessage(`Error during concatenation: ${error}`); 60 | console.error(error); 61 | } 62 | } 63 | 64 | export async function catFiles(): Promise { 65 | return runConcatenation(); 66 | } 67 | 68 | async function getAllFiles(dir: string, ig: ignore.Ignore, baseDir: string): Promise { 69 | let results: string[] = []; 70 | try { 71 | const entries = await fsPromises.readdir(dir, { withFileTypes: true }); 72 | for (const entry of entries) { 73 | const fullPath = path.join(dir, entry.name); 74 | // Use forward slashes for consistent path format across platforms 75 | const relative = path.relative(baseDir, fullPath).split(path.sep).join('/'); 76 | 77 | // Skip if .gitignore rules say so 78 | if (ig.ignores(relative)) { 79 | continue; 80 | } 81 | 82 | if (entry.isDirectory()) { 83 | // Check directory name directly for common patterns 84 | if (entry.name === '__pycache__' || entry.name === 'node_modules' || entry.name === '.git') { 85 | continue; 86 | } 87 | const subFiles = await getAllFiles(fullPath, ig, baseDir); 88 | results = results.concat(subFiles); 89 | } else if (entry.isFile()) { 90 | results.push(fullPath); 91 | } 92 | } 93 | } catch (err) { 94 | console.error(`Error reading directory ${dir}: ${err}`); 95 | } 96 | return results; 97 | } 98 | 99 | async function readFilesWithProgress( 100 | filePaths: string[], 101 | progress: vscode.Progress<{ message?: string; increment?: number }> 102 | ): Promise { 103 | const concurrencyLimit = 5; 104 | const total = filePaths.length; 105 | const results: string[] = new Array(total); 106 | let index = 0; 107 | 108 | async function processNext() { 109 | const currentIndex = index++; 110 | if (currentIndex >= total) { 111 | return; 112 | } 113 | const filePath = filePaths[currentIndex]; 114 | try { 115 | const content = await fsPromises.readFile(filePath, 'utf8'); 116 | results[currentIndex] = content; 117 | } catch (err) { 118 | console.error(`Error reading file ${filePath}: ${err}`); 119 | results[currentIndex] = ''; 120 | } 121 | progress.report({ 122 | increment: (1 / total) * 100, 123 | message: `Processed ${currentIndex + 1} of ${total} files` 124 | }); 125 | await processNext(); 126 | } 127 | 128 | const workers = []; 129 | for (let i = 0; i < concurrencyLimit && i < total; i++) { 130 | workers.push(processNext()); 131 | } 132 | await Promise.all(workers); 133 | return results; 134 | } 135 | -------------------------------------------------------------------------------- /src/commands/copyPrompt.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | /** 4 | * Command to copy the generated prompt to the clipboard 5 | */ 6 | export async function copyToClipboard(text: string): Promise { 7 | try { 8 | await vscode.env.clipboard.writeText(text); 9 | vscode.window.showInformationMessage('Prompt copied to clipboard!'); 10 | } catch (error) { 11 | vscode.window.showErrorMessage(`Failed to copy prompt to clipboard: ${error instanceof Error ? error.message : String(error)}`); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/providers/treeDataProvider.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | /** 4 | * Simple tree data provider implementation to ensure our sidebar 5 | * has a valid data provider. 6 | */ 7 | export class KorneliusTreeDataProvider implements vscode.TreeDataProvider { 8 | private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); 9 | readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; 10 | 11 | // An empty placeholder item 12 | private items: KorneliusItem[] = []; 13 | 14 | constructor() { 15 | // Initialize with empty data - the actual UI is in the webview 16 | this.items = []; 17 | } 18 | 19 | refresh(): void { 20 | this._onDidChangeTreeData.fire(); 21 | } 22 | 23 | getTreeItem(element: KorneliusItem): vscode.TreeItem { 24 | return element; 25 | } 26 | 27 | getChildren(element?: KorneliusItem): Thenable { 28 | if (element) { 29 | return Promise.resolve([]); 30 | } else { 31 | return Promise.resolve(this.items); 32 | } 33 | } 34 | } 35 | 36 | export class KorneliusItem extends vscode.TreeItem { 37 | constructor( 38 | public readonly label: string, 39 | public readonly collapsibleState: vscode.TreeItemCollapsibleState 40 | ) { 41 | super(label, collapsibleState); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import { runTests } from 'vscode-test'; 3 | 4 | async function main(): Promise { 5 | try { 6 | // The folder containing the Extension Manifest package.json 7 | // Passed to `--extensionDevelopmentPath` 8 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 9 | 10 | // The path to the extension test script 11 | // Passed to --extensionTestsPath 12 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 13 | 14 | // Download VS Code, unzip it and run the integration test 15 | await runTests({ 16 | extensionDevelopmentPath, 17 | extensionTestsPath 18 | }); 19 | } catch (err) { 20 | console.error('Failed to run tests:', err); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | import * as vscode from 'vscode'; 3 | import { PromptManager } from '../../utils/promptManager'; 4 | 5 | suite('Extension Test Suite', () => { 6 | vscode.window.showInformationMessage('Starting test suite'); 7 | 8 | test('Extension should be present', () => { 9 | assert.notStrictEqual( 10 | vscode.extensions.getExtension('scragz.kornelius'), 11 | undefined 12 | ); 13 | }); 14 | 15 | test('Extension should activate', async () => { 16 | const extension = vscode.extensions.getExtension('scragz.kornelius'); 17 | if (!extension) { 18 | assert.fail('Extension not found'); 19 | } 20 | 21 | try { 22 | await extension.activate(); 23 | assert.strictEqual(extension.isActive, true); 24 | } catch (error) { 25 | assert.fail(`Failed to activate extension: ${error instanceof Error ? error.message : String(error)}`); 26 | } 27 | }); 28 | 29 | test('PromptManager should be instantiable', () => { 30 | assert.doesNotThrow(() => { 31 | new PromptManager(); 32 | }); 33 | }); 34 | 35 | test('Command kornelius.helloWorld should be registered', async () => { 36 | const commands = await vscode.commands.getCommands(); 37 | assert.ok(commands.includes('kornelius.helloWorld')); 38 | }); 39 | 40 | test('Command kornelius.browsePrompts should be registered', async () => { 41 | const commands = await vscode.commands.getCommands(); 42 | assert.ok(commands.includes('kornelius.browsePrompts')); 43 | }); 44 | 45 | test('Command kornelius.generatePrompt should be registered', async () => { 46 | const commands = await vscode.commands.getCommands(); 47 | assert.ok(commands.includes('kornelius.generatePrompt')); 48 | }); 49 | 50 | test('Command kornelius.savePrompt should be registered', async () => { 51 | const commands = await vscode.commands.getCommands(); 52 | assert.ok(commands.includes('kornelius.savePrompt')); 53 | }); 54 | 55 | test('Command kornelius.copyToClipboard should be registered', async () => { 56 | const commands = await vscode.commands.getCommands(); 57 | assert.ok(commands.includes('kornelius.copyToClipboard')); 58 | }); 59 | }); 60 | -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import Mocha from 'mocha'; 3 | import glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((resolve, reject) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err: Error | null, files: string[]) => { 16 | if (err) { 17 | return reject(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach((f: string) => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run((failures: number) => { 26 | if (failures > 0) { 27 | reject(new Error(`${failures} tests failed.`)); 28 | } else { 29 | resolve(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | reject(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /src/utils/debugLogger.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Debug logging utility for more detailed logs during development 3 | */ 4 | 5 | export class DebugLogger { 6 | private static logEnabled = true; 7 | private static logToFile = true; // Changed to true to enable file logging by default 8 | private static logQueue: string[] = []; 9 | private static maxQueueSize = 1000; // Limit log queue size to prevent memory issues 10 | 11 | /** 12 | * Initialize the logger with default settings 13 | */ 14 | public static initialize(): void { 15 | this.logEnabled = true; 16 | this.logToFile = true; // Changed to true to ensure file logging is on after initialization 17 | this.logQueue = []; 18 | this.log('DebugLogger initialized'); 19 | } 20 | 21 | /** 22 | * Log messages with optional data objects 23 | */ 24 | public static log(message: string, ...data: unknown[]): void { 25 | if (!this.logEnabled) { 26 | return; 27 | } 28 | 29 | const formattedMessage = this.formatLogMessage('LOG', message); 30 | 31 | // Write to console 32 | console.log(formattedMessage); 33 | if (data.length > 0) { 34 | console.log(...data); 35 | } 36 | 37 | // Store in log queue for file output but maintain the max queue size 38 | this.logQueue.push(formattedMessage + (data.length > 0 ? ' ' + JSON.stringify(data) : '')); 39 | 40 | // Maintain the maximum queue size by removing the oldest entries 41 | if (this.logQueue.length > this.maxQueueSize) { 42 | this.logQueue = this.logQueue.slice(-this.maxQueueSize); 43 | } 44 | 45 | // Optionally write to file 46 | if (this.logToFile) { 47 | this.writeLogsToFile(); 48 | } 49 | } 50 | 51 | /** 52 | * Log error messages with optional data objects 53 | */ 54 | public static error(message: string, ...data: unknown[]): void { 55 | if (!this.logEnabled) { 56 | return; 57 | } 58 | 59 | const formattedMessage = this.formatLogMessage('ERROR', message); 60 | 61 | // Write to console 62 | console.error(formattedMessage); 63 | if (data.length > 0) { 64 | console.error(...data); 65 | } 66 | 67 | // Store in log queue for file output but maintain the max queue size 68 | this.logQueue.push(formattedMessage + (data.length > 0 ? ' ' + JSON.stringify(data) : '')); 69 | 70 | // Maintain the maximum queue size by removing the oldest entries 71 | if (this.logQueue.length > this.maxQueueSize) { 72 | this.logQueue = this.logQueue.slice(-this.maxQueueSize); 73 | } 74 | 75 | // Optionally write to file 76 | if (this.logToFile) { 77 | this.writeLogsToFile(); 78 | } 79 | } 80 | 81 | /** 82 | * Format a log message with timestamp and type 83 | */ 84 | private static formatLogMessage(type: string, message: string): string { 85 | const timestamp = new Date().toISOString(); 86 | return `[${timestamp}] [${type}] ${message}`; 87 | } 88 | 89 | /** 90 | * Write the current log queue to a file 91 | */ 92 | private static writeLogsToFile(): void { 93 | // This function would normally write logs to a file 94 | // But for simplicity, we'll just keep the logs in memory 95 | // and not actually write to a file 96 | // console.log('Would write logs to file:', this.logQueue.length, 'entries'); 97 | } 98 | 99 | /** 100 | * Enable or disable logging 101 | */ 102 | public static setLogEnabled(enabled: boolean): void { 103 | this.logEnabled = enabled; 104 | } 105 | 106 | /** 107 | * Enable or disable logging to file 108 | */ 109 | public static setLogToFile(enabled: boolean): void { 110 | this.logToFile = enabled; 111 | } 112 | 113 | /** 114 | * Get the current log queue 115 | */ 116 | public static getLogQueue(): string[] { 117 | return [...this.logQueue]; 118 | } 119 | 120 | /** 121 | * Clear the log queue 122 | */ 123 | public static clearLogQueue(): void { 124 | this.logQueue = []; 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "outDir": "out", 6 | "lib": ["ES2020"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "noImplicitReturns": true, 12 | "noImplicitThis": true, 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": true, 15 | "esModuleInterop": true 16 | }, 17 | "exclude": ["node_modules", ".vscode-test"] 18 | } 19 | --------------------------------------------------------------------------------