commit e746d560d1161f52a6f069ef96faba76ace9df91 Author: Raincloud Date: Tue Nov 18 21:36:37 2025 -0700 init diff --git a/.config/GetStructDir.ps1 b/.config/GetStructDir.ps1 new file mode 100644 index 0000000..08be8d6 --- /dev/null +++ b/.config/GetStructDir.ps1 @@ -0,0 +1,68 @@ +# Simple helper script to get structDir from project config.json +# Reads config.json from .config folder in project root + +param( + [string]$ProjectRoot +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +if ([string]::IsNullOrWhiteSpace($ProjectRoot)) { + # Try to determine project root from script location + if ($PSScriptRoot) { + $ProjectRoot = Split-Path -Parent $PSScriptRoot + } + elseif ($MyInvocation.MyCommand.Path) { + $ProjectRoot = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path) + } + else { + Write-Error "Unable to determine project root. Please provide -ProjectRoot parameter." + exit 1 + } +} + +$configPath = Join-Path -Path $ProjectRoot -ChildPath '.config\config.json' + +if (-not (Test-Path -LiteralPath $configPath -PathType Leaf)) { + Write-Error "config.json not found at: $configPath" + exit 1 +} + +try { + $config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json + + if ($config.PSObject.Properties.Name -contains 'structDir') { + $structDir = $config.structDir + if ($null -ne $structDir -and ($structDir -isnot [string] -or $structDir.Trim().Length -gt 0)) { + # If it's an absolute path, resolve it + if ([System.IO.Path]::IsPathRooted($structDir)) { + $resolved = Resolve-Path -LiteralPath $structDir -ErrorAction SilentlyContinue + if ($null -ne $resolved) { + Write-Output $resolved.Path + exit 0 + } + Write-Output $structDir + exit 0 + } + # Relative path - resolve relative to config location + $candidate = Join-Path -Path (Split-Path -Parent $configPath) -ChildPath $structDir + $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue + if ($null -ne $resolvedCandidate) { + Write-Output $resolvedCandidate.Path + exit 0 + } + Write-Output $candidate + exit 0 + } + } + + # Default: return the directory containing config.json (project root) + Write-Output $ProjectRoot + exit 0 +} +catch { + Write-Error "Failed to read or parse config.json: $($_.Exception.Message)" + exit 1 +} + diff --git a/.config/config.json b/.config/config.json new file mode 100644 index 0000000..e0ae12f --- /dev/null +++ b/.config/config.json @@ -0,0 +1,7 @@ +{ + "dailyFormat": "YYYY-MM-DD", + "zipper": "7z", + "compression": 9, + "Max7zInst": 0 +} + diff --git a/.cursorindexingignore b/.cursorindexingignore new file mode 100644 index 0000000..953908e --- /dev/null +++ b/.cursorindexingignore @@ -0,0 +1,3 @@ + +# Don't index SpecStory auto-save files, but allow explicit context inclusion via @ references +.specstory/** diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..0cb1382 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,83 @@ +# Git LFS attributes configuration +# All listed file types will be tracked by Git LFS + +# Video files +*.avi filter=lfs diff=lfs merge=lfs -text +*.mkv filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.MOV filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.webm filter=lfs diff=lfs merge=lfs -text + +# Image files +*.bmp filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.hdr filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.tif filter=lfs diff=lfs merge=lfs -text +*.tiff filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text + +# 3D/CG files +*.3ds filter=lfs diff=lfs merge=lfs -text +*.abc filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.blend1 filter=lfs diff=lfs merge=lfs -text +*.blend2 filter=lfs diff=lfs merge=lfs -text +*.bvh filter=lfs diff=lfs merge=lfs -text +*.bvh.gz filter=lfs diff=lfs merge=lfs -text +*.c4d filter=lfs diff=lfs merge=lfs -text +*.dae filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.fbxkey filter=lfs diff=lfs merge=lfs -text +*.ma filter=lfs diff=lfs merge=lfs -text +*.max filter=lfs diff=lfs merge=lfs -text +*.mb filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text +*.usd filter=lfs diff=lfs merge=lfs -text +*.vdb filter=lfs diff=lfs merge=lfs -text + +# Substance files +*.sbs filter=lfs diff=lfs merge=lfs -text +*.sbsar filter=lfs diff=lfs merge=lfs -text +*.spp filter=lfs diff=lfs merge=lfs -text + +# Audio files +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text + +# Archive/Compression files +*.7z filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text + +# Documents +*.docx filter=lfs diff=lfs merge=lfs -text +*.xlsx filter=lfs diff=lfs merge=lfs -text +*.eps filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text + +# Adobe files +*.aegraphic filter=lfs diff=lfs merge=lfs -text +*.aep filter=lfs diff=lfs merge=lfs -text +*.prel filter=lfs diff=lfs merge=lfs -text +*.prin filter=lfs diff=lfs merge=lfs -text +*.prmf filter=lfs diff=lfs merge=lfs -text +*.prproj filter=lfs diff=lfs merge=lfs -text +*.ai filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text + +# Data files +*.h5 filter=lfs diff=lfs merge=lfs -text +*.hdf5 filter=lfs diff=lfs merge=lfs -text + +# Other +*.uni filter=lfs diff=lfs merge=lfs -text +*.pdn filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b25ed7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,131 @@ +# Blender Studio Git Management - .gitignore + +# Blender auto-save files +*.blend1 +*.blend2 +*.blend3 +*.blend4 +*.blend5 +*.blend6 +*.blend7 +*.blend8 +*.blend9 +*.blend10 +*.blend11 +*.blend12 +*.blend13 +*.blend14 +*.blend15 +*.blend16 +*.blend17 +*.blend18 +*.blend19 +*.blend20 +*.blend21 +*.blend22 +*.blend23 +*.blend24 +*.blend25 +*.blend26 +*.blend27 +*.blend28 +*.blend29 +*.blend30 +*.blend31 +*.blend32 + +# Blender cache and temporary files +*.swp +*.swo +*~ +*.tmp +*.temp + +# Blender internal cache files +*.bpy +*.bmesh +*.bvh +*.bobj +*.bphys + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +desktop.ini + +# Editor files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Large media files (uncomment if you want to exclude rendered outputs) +# *.mp4 +# *.avi +# *.mov +# *.png +# *.jpg +# *.jpeg +# *.exr +# *.hdr +# *.tiff +# *.tga + +# Audio files (uncomment if excluding) +# *.wav +# *.mp3 +# *.aac +# *.ogg + +# Log files +*.log + +# Python cache +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python + +# Node modules (if using any web tools) +node_modules/ + +# Environment files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Backup files +*.bak +*.backup +*.old + +# Temporary files +temp/ +tmp/ +cache/ + +Renders/** +!Renders/_zipped/ +!Renders/_zipped/** +!Renders/**/ +!Renders/**/*.bat +!Renders/**/*.log +seq/ + +# Premiere +*.prlock +Adobe Premiere Pro Video Previews/ +Adobe Premiere Pro Audio Previews/ +Adobe Premiere Pro (Beta) Video Previews/ +Adobe Premiere Pro (Beta) Audio Previews/ + +Pr/RnR/ diff --git a/.specstory/.gitignore b/.specstory/.gitignore new file mode 100644 index 0000000..c82e7bf --- /dev/null +++ b/.specstory/.gitignore @@ -0,0 +1,133 @@ +# Blender Studio Git Management - .gitignore + +# Blender auto-save files +*.blend1 +*.blend2 +*.blend3 +*.blend4 +*.blend5 +*.blend6 +*.blend7 +*.blend8 +*.blend9 +*.blend10 +*.blend11 +*.blend12 +*.blend13 +*.blend14 +*.blend15 +*.blend16 +*.blend17 +*.blend18 +*.blend19 +*.blend20 +*.blend21 +*.blend22 +*.blend23 +*.blend24 +*.blend25 +*.blend26 +*.blend27 +*.blend28 +*.blend29 +*.blend30 +*.blend31 +*.blend32 + +# Blender cache and temporary files +*.swp +*.swo +*~ +*.tmp +*.temp + +# Blender internal cache files +*.bpy +*.bmesh +*.bvh +*.bobj +*.bphys + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +desktop.ini + +# Editor files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Large media files (uncomment if you want to exclude rendered outputs) +# *.mp4 +# *.avi +# *.mov +# *.png +# *.jpg +# *.jpeg +# *.exr +# *.hdr +# *.tiff +# *.tga + +# Audio files (uncomment if excluding) +# *.wav +# *.mp3 +# *.aac +# *.ogg + +# Log files +*.log + +# Python cache +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python + +# Node modules (if using any web tools) +node_modules/ + +# Environment files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Backup files +*.bak +*.backup +*.old + +# Temporary files +temp/ +tmp/ +cache/ + +Renders/** +!Renders/_zipped/ +!Renders/_zipped/** +!Renders/**/ +!Renders/**/*.bat +!Renders/**/*.log +seq/ + +# Premiere +*.prlock +Adobe Premiere Pro Video Previews/ +Adobe Premiere Pro Audio Previews/ +Adobe Premiere Pro (Beta) Video Previews/ +Adobe Premiere Pro (Beta) Audio Previews/ + +Pr/RnR/ +# SpecStory explanation file +/.what-is-this.md diff --git a/.specstory/.project.json b/.specstory/.project.json new file mode 100644 index 0000000..b4a2e6d --- /dev/null +++ b/.specstory/.project.json @@ -0,0 +1,6 @@ +{ + "workspace_id": "d80a-ff45-2eb7-40e7", + "workspace_id_at": "2025-11-19T04:18:27.709Z", + "project_name": "2025-11-18 context soydrag", + "cloud_sync": false +} \ No newline at end of file diff --git a/.specstory/.what-is-this.md b/.specstory/.what-is-this.md new file mode 100644 index 0000000..a0e0cb8 --- /dev/null +++ b/.specstory/.what-is-this.md @@ -0,0 +1,69 @@ +# SpecStory Artifacts Directory + +This directory is automatically created and maintained by the SpecStory extension to preserve your AI chat history. + +## What's Here? + +- `.specstory/history`: Contains auto-saved markdown files of your AI coding sessions + - Each file represents a separate AI chat session + - If you enable auto-save, files are automatically updated as you work + - You can enable/disable the auto-save feature in the SpecStory settings, it is disabled by default +- `.specstory/.project.json`: Contains the persistent project identity for the current workspace + - This file is only present if you enable AI rules derivation + - This is used to provide consistent project identity of your project, even as the workspace is moved or renamed +- `.specstory/ai_rules_backups`: Contains backups of the `.cursor/rules/derived-cursor-rules.mdc` or the `.github/copilot-instructions.md` file + - Backups are automatically created each time the `.cursor/rules/derived-cursor-rules.mdc` or the `.github/copilot-instructions.md` file is updated + - You can enable/disable the AI Rules derivation feature in the SpecStory settings, it is disabled by default +- `.specstory/.gitignore`: Contains directives to exclude non-essential contents of the `.specstory` directory from version control + - Add `/history` to exclude the auto-saved chat history from version control + +## Valuable Uses + +- Capture: Keep your context window up-to-date when starting new Chat/Composer sessions via @ references +- Search: For previous prompts and code snippets +- Learn: Meta-analyze your patterns and learn from your past experiences +- Derive: Keep the AI on course with your past decisions by automatically deriving rules from your AI interactions + +## Version Control + +We recommend keeping this directory under version control to maintain a history of your AI interactions. However, if you prefer not to version these files, you can exclude them by adding this to your `.gitignore`: + +``` +.specstory/** +``` + +We recommend __not__ keeping the `.specstory/ai_rules_backups` directory under version control if you are already using git to version your AI rules, and committing regularly. You can exclude it by adding this to your `.gitignore`: + +``` +.specstory/ai_rules_backups +``` + +## Searching Your Codebase + +When searching your codebase, search results may include your previous AI coding interactions. To focus solely on your actual code files, you can exclude the AI interaction history from search results. + +To exclude AI interaction history: + +1. Open the "Find in Files" search in Cursor or VSCode (Cmd/Ctrl + Shift + F) +2. Navigate to the "files to exclude" section +3. Add the following pattern: + +``` +.specstory/* +``` + +This will ensure your searches only return results from your working codebase files. + +## Notes + +- Auto-save only works when Cursor or VSCode flushes sqlite database data to disk. This results in a small delay after the AI response is complete before SpecStory can save the history. + +## Settings + +You can control auto-saving behavior in Cursor or VSCode: + +1. Open Cursor/Code → Settings → VS Code Settings (Cmd/Ctrl + ,) +2. Search for "SpecStory" +3. Find "Auto Save" setting to enable/disable + +Auto-save occurs when changes are detected in the sqlite database, or every 2 minutes as a safety net. \ No newline at end of file