{
  "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
}
