├── .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 |
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 |
--------------------------------------------------------------------------------
/media/barbed-wire.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,6CAA+B;AAC/B,6BAA0B;AAC1B,yCAA2B;AAC3B,kDAAoC,CAAC,wCAAwC;AAC7E,+CAA4C,CAAC,qBAAqB;AAElE,2EAA2E;AAC3E,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,IAAI;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,+CAA+C;QAC/C,sGAAsG;QACtG,MAAM,aAAa,GAAuB;YACxC,CAAC,KAAK,EAAE,GAAG,CAAC;YACZ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACd,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,WAAW,EAAE,CAAC,CAAC;YAChB,CAAC,UAAU,EAAE,CAAC,CAAC;YACf,CAAC,YAAY,EAAE,EAAE,CAAC;YAClB,CAAC,aAAa,EAAE,EAAE,CAAC;YACnB,CAAC,aAAa,EAAE,EAAE,CAAC;YACnB,CAAC,YAAY,EAAE,EAAE,CAAC;YAClB,CAAC,WAAW,EAAE,EAAE,CAAC;YACjB,CAAC,WAAW,EAAE,EAAE,CAAC;YACjB,CAAC,cAAc,EAAE,EAAE,CAAC;YACpB,CAAC,aAAa,EAAE,EAAE,CAAC;YACnB,CAAC,aAAa,EAAE,EAAE,CAAC;YACnB,CAAC,YAAY,EAAE,EAAE,CAAC;YAClB,CAAC,WAAW,EAAE,CAAC,CAAC;YAChB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAE,WAAW;SAC9B,CAAC;QACF,qEAAqE;QACrE,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE;YAC5C,IAAI;gBACA,+DAA+D;gBAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;gBAC5D,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;oBACrB,OAAO,IAAI,CAAC,CAAC,mCAAmC;iBACnD;aACJ;YAAC,OAAO,UAAU,EAAE;gBACjB,yBAAW,CAAC,KAAK,CAAC,+BAA+B,QAAQ,IAAI,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;gBACnF,sEAAsE;aACzE;SACJ;QACD,OAAO,KAAK,CAAC,CAAC,4CAA4C;KAC3D;IAAC,OAAO,KAAK,EAAE;QACd,yBAAW,CAAC,KAAK,CAAC,yBAAyB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB;QAClF,6CAA6C;QAC7C,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAGD;;GAEG;AACH,MAAa,UAAU;IAGrB;QACE,wCAAwC;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,GAAG,CAAS,YAAY,CAAC,CAAC;IAC1F,CAAC;IAEM,SAAS;QACd,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,GAAG,CAAU,uBAAuB,CAAC,CAAC;QACrG,OAAO,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,GAAW;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;SACrG;QAED,iEAAiE;QACjE,IAAI,SAAc,CAAC;QACnB,IAAI;YACF,SAAS,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;SAC1B;QAAC,OAAO,CAAC,EAAE;YACV,gDAAgD;YAChD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACxC;QAED,kBAAkB;QAClB,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACrE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACzE;QAED,6BAA6B;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,uCAAuC;QACvC,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC3C,yFAAyF;YACzF,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;SACnF;QACD,+BAA+B;QAE/B,+CAA+C;QAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI;gBACF,iDAAiD;gBACjD,MAAM,OAAO,GAAG;oBACd,QAAQ,EAAE,WAAW;oBACrB,IAAI,EAAE,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE;oBAChC,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;wBACzC,yBAAyB,EAAE,GAAG;wBAC9B,mBAAmB,EAAE,GAAG;wBACxB,iBAAiB,EAAE,UAAU;wBAC7B,sBAAsB,EAAE,MAAM;qBAC/B;iBACF,CAAC;gBAEF,yBAAyB;gBACzB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzC,IAAI,IAAI,GAAG,EAAE,CAAC;oBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;oBACzC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACjB,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE;4BAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;yBAC1B;6BAAM;4BACL,kDAAkD;4BAClD,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;yBACjF;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,iEAAiE;gBACjE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;gBAEH,oDAAoD;gBACpD,GAAG,CAAC,GAAG,EAAE,CAAC;aAEX;YAAC,OAAO,KAAK,EAAE;gBACd,2FAA2F;gBAC3F,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1G;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,0CAA0C;IAEnC,MAAM,CAAC,gBAAgB;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACrF,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;oBACvB,MAAM,eAAe,GAAG,oBAAoB,CAAC;oBAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CACjD,wDAAwD,EACxD,eAAe,CAChB,CAAC;oBACF,IAAI,MAAM,KAAK,eAAe,EAAE;wBAC9B,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;qBACpF;oBACD,OAAO;iBACR;gBAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC3C,MAAM,EAAE,kCAAkC;oBAC1C,WAAW,EAAE,6BAA6B;oBAC1C,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC7B,IAAI;4BACF,MAAM,OAAO,GAAG,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC;4BAC/B,uDAAuD;4BACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;gCACjE,OAAO,8CAA8C,CAAC;6BACvD;4BACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gCACpB,OAAO,8BAA8B,CAAC;6BACxC;4BACD,IAAI,MAAM,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gCACzC,OAAO,uDAAuD,CAAC;6BAChE;4BACD,OAAO,IAAI,CAAC,CAAC,QAAQ;yBACtB;wBAAC,MAAM;4BACN,OAAO,iCAAiC,CAAC;yBAC1C;oBACH,CAAC;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG;oBAAE,OAAO,CAAC,iBAAiB;gBAEnC,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC/B,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY;oBAC9C,KAAK,EAAE,8BAA8B;oBACrC,WAAW,EAAE,KAAK;iBACnB,EAAE,KAAK,IAAI,EAAE;oBACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBAEjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;wBACvD,OAAO,EAAE,QAAQ;wBACjB,QAAQ,EAAE,UAAU;qBACrB,CAAC,CAAC;oBAEH,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBAC/C,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,yCAAyC,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;aACJ;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACtH;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA3JD,gCA2JC"}
--------------------------------------------------------------------------------
/out/utils/promptManager.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"promptManager.js","sourceRoot":"","sources":["../../src/utils/promptManager.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------