diff --git a/devtool.json b/devtool.json index 0ef1cdd..e840047 100644 --- a/devtool.json +++ b/devtool.json @@ -631,8 +631,68 @@ "description": "Override decrypted data directory path", "default": "", "options": [] + }, + { + "key": "SDT_ENV_PROFILE", + "description": "Active SDT runtime environment profile", + "default": "dev", + "options": [ + "dev", + "ci", + "release" + ] + }, + { + "key": "SDT_LOG_LEVEL", + "description": "CLI log verbosity", + "default": "information", + "options": [ + "trace", + "debug", + "information", + "warning", + "error", + "critical" + ] } ], + "envProfiles": { + "active": "dev", + "profiles": [ + { + "id": "dev", + "description": "Local development defaults", + "inherits": [], + "values": { + "SDT_ENV_PROFILE": "dev", + "SDT_LOG_LEVEL": "information" + } + }, + { + "id": "ci", + "description": "Continuous integration defaults", + "inherits": [ + "dev" + ], + "values": { + "SDT_ENV_PROFILE": "ci", + "CI": "true", + "SDT_LOG_LEVEL": "warning" + } + }, + { + "id": "release", + "description": "Release build defaults", + "inherits": [ + "dev" + ], + "values": { + "SDT_ENV_PROFILE": "release", + "SDT_LOG_LEVEL": "warning" + } + } + ] + }, "toolchains": { "python": { "executable": "python3.14", @@ -671,7 +731,56 @@ "workingDir": "Journal.App" } }, - "tooling": null, + "tooling": { + "tools": [ + { + "tool": "cargo", + "preferredInstallCommands": [], + "executables": [] + }, + { + "tool": "dotnet", + "preferredInstallCommands": [], + "executables": [] + }, + { + "tool": "node", + "preferredInstallCommands": [], + "executables": [] + }, + { + "tool": "npm", + "preferredInstallCommands": [], + "executables": [] + }, + { + "tool": "python", + "preferredInstallCommands": [], + "executables": [] + } + ] + }, "project": null, - "debug": null + "debug": { + "profiles": [], + "diagnostics": { + "enabled": true, + "outputDir": ".sdt/debug", + "includeAllEnv": false, + "captureEnvKeys": [], + "redactSensitive": true, + "sensitiveKeyPatterns": [ + "TOKEN", + "SECRET", + "PASSWORD", + "PWD", + "CREDENTIAL", + "API_KEY", + "ACCESS_KEY", + "PRIVATE_KEY" + ], + "redactionAllowKeys": [], + "bundleOnFailure": true + } + } } diff --git a/devtool.json.bak-20260301-155008 b/devtool.json.bak-20260301-155008 new file mode 100644 index 0000000..0ef1cdd --- /dev/null +++ b/devtool.json.bak-20260301-155008 @@ -0,0 +1,677 @@ +{ + "name": "Project Journal", + "version": "0.1.0", + "targets": [], + "workflows": [ + { + "id": "sidecar", + "label": "Publish Sidecar", + "description": "Build Journal.Sidecar as self-contained exe \u2192 output/", + "group": "Build", + "dependsOn": [], + "steps": [ + { + "id": "sidecar:run", + "label": "Publish Sidecar", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-sidecar.ps1", + "-Configuration", + "Release", + "-Runtime", + "win-x64" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "web", + "label": "Build Web UI", + "description": "Build SvelteKit bundle \u2192 Journal.App/build/", + "group": "Build", + "dependsOn": [], + "steps": [ + { + "id": "web:run", + "label": "Build Web UI", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-app.ps1", + "-Target", + "web" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "sync-output", + "label": "Sync Build Assets to Output", + "description": "Sweep repo for newest builds (Web/Sidecar/Gateway/Tauri) and copy them to the output dir", + "group": "Build", + "dependsOn": [], + "steps": [ + { + "id": "sync-output:run", + "label": "Sync Build Assets to Output", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/sync-output.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "webgateway", + "label": "Publish WebGateway", + "description": "Publish ASP.NET host with embedded web UI \u2192 output/webgateway/", + "group": "Build", + "dependsOn": [ + "web" + ], + "steps": [ + { + "id": "webgateway:run", + "label": "Publish WebGateway", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-webgateway.ps1", + "-Configuration", + "Release", + "-Runtime", + "win-x64" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "tauri", + "label": "Build Tauri Desktop App", + "description": "Build desktop exe (no installer) \u2192 Journal.App/src-tauri/target/release/", + "group": "Build", + "dependsOn": [ + "sidecar" + ], + "steps": [ + { + "id": "tauri:run", + "label": "Build Tauri Desktop App", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-app.ps1", + "-Target", + "tauri", + "-TauriBundles", + "none" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + }, + { + "tool": "cargo", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "tauri-nsis", + "label": "Build Tauri \u002B NSIS Installer", + "description": "Build desktop exe with NSIS installer package", + "group": "Build", + "dependsOn": [ + "sidecar" + ], + "steps": [ + { + "id": "tauri-nsis:run", + "label": "Build Tauri \u002B NSIS Installer", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-app.ps1", + "-Target", + "tauri", + "-TauriBundles", + "nsis" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + }, + { + "tool": "cargo", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "build-dotnet", + "label": "Build .NET Projects", + "description": "dotnet build \u2014 all C# projects in solution", + "group": "Build", + "dependsOn": [], + "steps": [ + { + "id": "build-dotnet:run", + "label": "Build .NET Projects", + "command": "dotnet", + "args": [ + "build" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "all", + "label": "Full Release Build \u2726", + "description": "Sidecar \u2192 Web \u2192 WebGateway \u2192 Tauri, in dependency order", + "group": "Build", + "dependsOn": [ + "sidecar", + "web", + "webgateway", + "tauri" + ], + "steps": [] + }, + { + "id": "run-gateway-dev", + "label": "Run WebGateway Server (Dev)", + "description": "Start HTTP gateway via \u0027dotnet run\u0027 at http://localhost:5180", + "group": "Dev", + "dependsOn": [], + "steps": [ + { + "id": "run-gateway-dev:run", + "label": "Run WebGateway Server (Dev)", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/run-webgateway.ps1", + "-Mode", + "Dev" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "run-gateway-prod", + "label": "Run WebGateway Server (Output)", + "description": "Start compiled gateway from output/webgateway at http://localhost:5180", + "group": "Dev", + "dependsOn": [], + "steps": [ + { + "id": "run-gateway-prod:run", + "label": "Run WebGateway Server (Output)", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/run-webgateway.ps1", + "-Mode", + "Output" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "test", + "label": "Run Smoke Tests", + "description": "Run all ~80 integration tests in Journal.SmokeTests", + "group": "Test", + "dependsOn": [], + "steps": [ + { + "id": "test:run", + "label": "Run Smoke Tests", + "command": "dotnet", + "args": [ + "run", + "--project", + "Journal.SmokeTests/Journal.SmokeTests.csproj" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "gate", + "label": "Run Migration Gate", + "description": "Full build \u002B smoke tests \u002B parity check", + "group": "Test", + "dependsOn": [], + "steps": [ + { + "id": "gate:run", + "label": "Run Migration Gate", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/migration-gate.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "nuget-export", + "label": "Export NuGet Cache", + "description": "Prime and export .nuget cache to zip for offline use", + "group": "Cache", + "dependsOn": [], + "steps": [ + { + "id": "nuget-export:run", + "label": "Export NuGet Cache", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/nuget-export-cache.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "nuget-import", + "label": "Import NuGet Cache", + "description": "Import cache zip and validate restore", + "group": "Cache", + "dependsOn": [], + "steps": [ + { + "id": "nuget-import:run", + "label": "Import NuGet Cache", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/nuget-import-cache.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "npm-clean", + "label": "Clean Node Modules", + "description": "Remove Journal.App node_modules (kills node/tauri first)", + "group": "System", + "dependsOn": [], + "steps": [ + { + "id": "npm-clean:run", + "label": "Clean Node Modules", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/npm-clean.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + } + ] + } + ] + }, + { + "id": "stage-output", + "label": "Stage Output Bundle", + "description": "Publish sidecar \u002B web \u002B webgateway \u002B tauri, then stage journalapp.exe into output/", + "group": "Build", + "dependsOn": [], + "steps": [ + { + "id": "stage-output:run", + "label": "Stage Output Bundle", + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-File", + "scripts/publish-output.ps1" + ], + "workingDir": ".", + "action": null, + "actionArgs": [], + "requires": [ + { + "tool": "python", + "installPolicy": "Prompt" + }, + { + "tool": "dotnet", + "installPolicy": "Prompt" + }, + { + "tool": "node", + "installPolicy": "Prompt" + }, + { + "tool": "npm", + "installPolicy": "Prompt" + }, + { + "tool": "cargo", + "installPolicy": "Prompt" + } + ] + } + ] + } + ], + "env": [ + { + "key": "JOURNAL_AI_PROVIDER", + "description": "AI provider bridge mode", + "default": "none", + "options": [ + "none", + "python-sidecar" + ] + }, + { + "key": "JOURNAL_LOG_LEVEL", + "description": "Log verbosity for C# backend", + "default": "warning", + "options": [ + "trace", + "debug", + "information", + "warning", + "error", + "critical" + ] + }, + { + "key": "JOURNAL_NLP_BACKEND", + "description": "Python NLP backend selection", + "default": "auto", + "options": [ + "auto", + "spacy", + "fallback" + ] + }, + { + "key": "JOURNAL_PROJECT_ROOT", + "description": "Override project root path (blank = auto-detect)", + "default": "", + "options": [] + }, + { + "key": "JOURNAL_VAULT_DIR", + "description": "Override vault directory path", + "default": "", + "options": [] + }, + { + "key": "JOURNAL_DATA_DIR", + "description": "Override decrypted data directory path", + "default": "", + "options": [] + } + ], + "toolchains": { + "python": { + "executable": "python3.14", + "windowsExecutable": "py", + "launcherVersion": "-3.14", + "venvDir": ".venv", + "profiles": [ + { + "id": "cpu", + "label": "CPU only (default)", + "requirementsFile": "requirements_cpu_only.txt", + "extraIndexUrl": "https://download.pytorch.org/whl/cpu", + "postInstallCommands": [] + }, + { + "id": "gpu", + "label": "GPU / CUDA", + "requirementsFile": "requirements_gpu.txt", + "extraIndexUrl": null, + "postInstallCommands": [] + }, + { + "id": "nlp", + "label": "NLP / spaCy (optional)", + "requirementsFile": "requirements_nlp_optional.txt", + "extraIndexUrl": null, + "postInstallCommands": [ + "spacy download en_core_web_sm" + ] + } + ], + "pipScript": "scripts/pip-min.ps1" + }, + "node": { + "packageManager": "npm", + "workingDir": "Journal.App" + } + }, + "tooling": null, + "project": null, + "debug": null +}