{ "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": [] }, { "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": "false", "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", "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": { "tools": [ { "tool": "cargo", "preferredInstallCommands": [], "executables": [] }, { "tool": "dotnet", "preferredInstallCommands": [], "executables": [] }, { "tool": "node", "preferredInstallCommands": [], "executables": [] }, { "tool": "npm", "preferredInstallCommands": [], "executables": [] }, { "tool": "python", "preferredInstallCommands": [], "executables": [] } ] }, "project": 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 } } }